summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/abraces/README.md4
-rw-r--r--macros/latex/contrib/abraces/abraces-doc.pdfbin245502 -> 245461 bytes
-rw-r--r--macros/latex/contrib/abraces/abraces-doc.tex13
-rw-r--r--macros/latex/contrib/abraces/abraces.sty7
-rw-r--r--macros/latex/contrib/asmeconf/README.md30
-rw-r--r--macros/latex/contrib/asmeconf/asmeconf-sample.bib14
-rw-r--r--macros/latex/contrib/asmeconf/asmeconf-template.pdfbin706754 -> 705662 bytes
-rw-r--r--macros/latex/contrib/asmeconf/asmeconf-template.tex142
-rw-r--r--macros/latex/contrib/asmeconf/asmeconf.cls462
-rw-r--r--macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdfbin369381 -> 39914315 bytes
-rw-r--r--macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex75
-rw-r--r--macros/latex/contrib/asmejour/README.md10
-rw-r--r--macros/latex/contrib/asmejour/asmejour-sample.bib17
-rw-r--r--macros/latex/contrib/asmejour/asmejour-template.pdfbin729589 -> 728579 bytes
-rw-r--r--macros/latex/contrib/asmejour/asmejour-template.tex89
-rw-r--r--macros/latex/contrib/asmejour/asmejour.cls458
-rw-r--r--macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdfbin2983602 -> 2982565 bytes
-rw-r--r--macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex8
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.pdfbin208890 -> 208887 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.tex2
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.dtx12
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.pdfbin345846 -> 346426 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/CHANGELOG.md15
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/README.md8
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamercolorthememoloch.dtx2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamerfontthememoloch.dtx187
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx19
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamerouterthememoloch.dtx42
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamerthememoloch.dtx58
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdfbin276169 -> 295500 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/moloch.tex58
-rw-r--r--macros/latex/contrib/bib2qr/README.md88
-rw-r--r--macros/latex/contrib/bib2qr/bib2qr.dtx594
-rw-r--r--macros/latex/contrib/bib2qr/bib2qr.ins85
-rw-r--r--macros/latex/contrib/bib2qr/bib2qr.pdfbin0 -> 508752 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib6
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdfbin448675 -> 482865 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex34
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx25
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx8
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx8
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/README5
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdfbin417904 -> 419434 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex87
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/UKenglish-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/USenglish-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/american-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/australian-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/austrian-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/british-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/canadian-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/english-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/french-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/german-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/naustrian-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/newzealand-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/ngerman-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/nswissgerman-publist.lbx37
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/swissgerman-publist.lbx55
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx62
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx26
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx2
-rw-r--r--macros/latex/contrib/bxpdfver/LICENSE2
-rw-r--r--macros/latex/contrib/bxpdfver/README-ja.md39
-rw-r--r--macros/latex/contrib/bxpdfver/README.md27
-rw-r--r--macros/latex/contrib/bxpdfver/bxpdfver.sty94
-rw-r--r--macros/latex/contrib/changebar/CATALOG2
-rw-r--r--macros/latex/contrib/changebar/README2
-rw-r--r--macros/latex/contrib/changebar/changebar.bug4
-rw-r--r--macros/latex/contrib/changebar/changebar.dtx158
-rw-r--r--macros/latex/contrib/changebar/changebar.pdfbin486497 -> 483890 bytes
-rw-r--r--macros/latex/contrib/chemformula-ru/chemformula-ru.pdfbin167712 -> 167985 bytes
-rw-r--r--macros/latex/contrib/chemformula-ru/chemformula-ru.sty24
-rw-r--r--macros/latex/contrib/chemformula-ru/chemformula-ru.tex41
-rw-r--r--macros/latex/contrib/cjs-rcs-article/README.md12
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdfbin112323 -> 120466 bytes
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx1038
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdfbin176709 -> 190899 bytes
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-en.dbj2
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-fr.dbj2
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-class.dbj2
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs6
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs6
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs6
-rw-r--r--macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdfbin38737 -> 38794 bytes
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdfbin183663 -> 191562 bytes
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex59
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdfbin1466206 -> 1472616 bytes
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex66
-rw-r--r--macros/latex/contrib/customenvs/tex/customenvs.sty177
-rw-r--r--macros/latex/contrib/dashrulex/README.md12
-rw-r--r--macros/latex/contrib/dashrulex/dashrulex.pdfbin58940 -> 57722 bytes
-rw-r--r--macros/latex/contrib/dashrulex/dashrulex.sty180
-rw-r--r--macros/latex/contrib/dashrulex/dashrulex.tex192
-rw-r--r--macros/latex/contrib/delimset/README.txt4
-rw-r--r--macros/latex/contrib/delimset/delimset.dtx1202
-rw-r--r--macros/latex/contrib/delimset/delimset.ins4
-rw-r--r--macros/latex/contrib/delimset/delimset.pdfbin327877 -> 376509 bytes
-rw-r--r--macros/latex/contrib/doibanner/README.md91
-rw-r--r--macros/latex/contrib/doibanner/doibanner.dtx412
-rw-r--r--macros/latex/contrib/doibanner/doibanner.ins85
-rw-r--r--macros/latex/contrib/doibanner/doibanner.pdfbin0 -> 297278 bytes
-rw-r--r--macros/latex/contrib/easybook/README.md4
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx293
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin624868 -> 628163 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex57
-rw-r--r--macros/latex/contrib/fancyhdr/README2
-rw-r--r--macros/latex/contrib/fancyhdr/fancyhdr.dtx244
-rw-r--r--macros/latex/contrib/fancyhdr/fancyhdr.pdfbin875225 -> 880898 bytes
-rw-r--r--macros/latex/contrib/fontscale/CHANGELOG.md46
-rw-r--r--macros/latex/contrib/fontscale/README.txt2
-rw-r--r--macros/latex/contrib/fontscale/beery.cls133
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex39
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex38
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex38
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.pdfbin117192 -> 0 bytes
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.tex390
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-classic.tex41
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-font-steps.tex39
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-musical.tex39
-rw-r--r--macros/latex/contrib/fontscale/fontscale.pdfbin0 -> 104110 bytes
-rw-r--r--macros/latex/contrib/fontscale/fontscale.sty998
-rw-r--r--macros/latex/contrib/fontscale/fontscale.tex398
-rw-r--r--macros/latex/contrib/heria/README.md2
-rw-r--r--macros/latex/contrib/heria/heria-proposal.pdfbin313877 -> 311049 bytes
-rw-r--r--macros/latex/contrib/heria/heria.dtx151
-rw-r--r--macros/latex/contrib/heria/heria.ins4
-rw-r--r--macros/latex/contrib/heria/heria.pdfbin303966 -> 301201 bytes
-rw-r--r--macros/latex/contrib/hypcap/README.md20
-rw-r--r--macros/latex/contrib/hypcap/hypcap.dtx (renamed from macros/latex/contrib/oberdiek/hypcap.dtx)73
-rw-r--r--macros/latex/contrib/hypcap/hypcap.pdf (renamed from macros/latex/contrib/oberdiek/hypcap.pdf)bin310655 -> 300905 bytes
-rw-r--r--macros/latex/contrib/hyperref/ChangeLog.txt9
-rw-r--r--macros/latex/contrib/hyperref/README.md2
-rw-r--r--macros/latex/contrib/hyperref/doc/backref.pdfbin206469 -> 206469 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.html54
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.pdfbin318600 -> 318416 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.tex2
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdfbin439109 -> 438491 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref.pdfbin2341341 -> 2341312 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/nameref.pdfbin172475 -> 172475 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/xr-hyper.pdfbin304784 -> 303974 bytes
-rw-r--r--macros/latex/contrib/hyperref/hluatex.dtx4
-rw-r--r--macros/latex/contrib/hyperref/hyperref-linktarget.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref-patches.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref.dtx9
-rw-r--r--macros/latex/contrib/hyperref/xr-hyper.dtx2
-rw-r--r--macros/latex/contrib/iwonamath/Makefile6
-rw-r--r--macros/latex/contrib/iwonamath/README7
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.dtx6
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.pdfbin502258 -> 503042 bytes
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamath.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathl.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathlc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamath.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathl.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathlc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamath.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathl.fd2
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathlc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamath.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathcm.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathl.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlc.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlm.fd2
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathm.fd2
-rw-r--r--macros/latex/contrib/iwonamath/sample.pdfbin382573 -> 379195 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfc-a-answer.pdfbin112749 -> 113078 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfc-a-blank.pdfbin98857 -> 99214 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfc-b-answer.pdfbin112707 -> 112978 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfc-b-blank.pdfbin98922 -> 99233 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfe-a-answer.pdfbin69901 -> 69509 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfe-a-blank.pdfbin66139 -> 65749 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfe-b-answer.pdfbin69943 -> 69556 bytes
-rw-r--r--macros/latex/contrib/jnuexam/examfe-b-blank.pdfbin66167 -> 65775 bytes
-rw-r--r--macros/latex/contrib/jnuexam/jnuexam.cls8
-rw-r--r--macros/latex/contrib/jnuexam/jnuexam.pdfbin85122 -> 85441 bytes
-rw-r--r--macros/latex/contrib/lni/CHANGELOG.md15
-rw-r--r--macros/latex/contrib/lni/README.md2
-rw-r--r--macros/latex/contrib/lni/lni.dtx11
-rw-r--r--macros/latex/contrib/lni/lni.pdfbin377652 -> 377655 bytes
-rw-r--r--macros/latex/contrib/mailing/CATALOG15
-rw-r--r--macros/latex/contrib/mailing/MANIFEST (renamed from macros/latex/contrib/mailing/manifest.txt)4
-rw-r--r--macros/latex/contrib/mailing/README14
-rw-r--r--macros/latex/contrib/mailing/mailing.dtx38
-rw-r--r--macros/latex/contrib/mailing/mailing.ins42
-rw-r--r--macros/latex/contrib/mailing/mailing.pdfbin66516 -> 148418 bytes
-rw-r--r--macros/latex/contrib/mathastext/README.md158
-rw-r--r--macros/latex/contrib/mathastext/mathastext.dtx5913
-rw-r--r--macros/latex/contrib/mathastext/mathastext.pdfbin661328 -> 745164 bytes
-rw-r--r--macros/latex/contrib/mercatormap/CHANGES.md153
-rw-r--r--macros/latex/contrib/mercatormap/README43
-rw-r--r--macros/latex/contrib/mercatormap/README.md50
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap-example.tex4
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.bib41
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex480
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex26
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex62
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex28
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex6
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex10
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex309
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex58
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex110
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex20
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.sty11
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex50
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.pdfbin24872307 -> 23015231 bytes
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.sty794
-rw-r--r--macros/latex/contrib/mercatormap/mercatormap.tex21
-rw-r--r--macros/latex/contrib/mercatormap/mercatorpy.def16
-rw-r--r--macros/latex/contrib/mercatormap/mercatorsupplier.def221
-rw-r--r--macros/latex/contrib/mitthesis/MIT-Thesis.pdfbin484515 -> 484200 bytes
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex4
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex4
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex5
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex6
-rw-r--r--macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex2
-rw-r--r--macros/latex/contrib/mitthesis/README.md10
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdfbin116903 -> 116979 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdfbin118312 -> 118460 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree_two_departments.pdf (renamed from macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree_two_departments.pdf)bin132206 -> 118656 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdfbin118803 -> 118959 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdfbin118681 -> 118821 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdfbin121664 -> 121794 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdfbin132021 -> 132181 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_one_degree_two_departments.tex (renamed from macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree_two_departments.tex)18
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex3
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex13
-rw-r--r--macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex9
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdfbin482879 -> 480892 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdfbin350734 -> 349865 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdfbin153678 -> 152948 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdfbin462305 -> 461124 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdfbin173819 -> 173088 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdfbin279552 -> 278894 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdfbin320853 -> 320084 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdfbin163413 -> 162721 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdfbin165290 -> 164333 bytes
-rw-r--r--macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdfbin161633 -> 160667 bytes
-rw-r--r--macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdfbin108765 -> 108977 bytes
-rw-r--r--macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex33
-rw-r--r--macros/latex/contrib/mitthesis/mitthesis.cls39
-rw-r--r--macros/latex/contrib/moderncv/CHANGELOG622
-rw-r--r--macros/latex/contrib/moderncv/KNOWN_BUGS27
-rw-r--r--macros/latex/contrib/moderncv/README.md43
-rw-r--r--macros/latex/contrib/moderncv/manual/moderncv_userguide.pdfbin320611 -> 123425 bytes
-rw-r--r--macros/latex/contrib/moderncv/manual/moderncv_userguide.tex1449
-rw-r--r--macros/latex/contrib/moderncv/moderncv.cls142
-rw-r--r--macros/latex/contrib/moderncv/moderncvbodyi.sty45
-rw-r--r--macros/latex/contrib/moderncv/moderncvbodyiii.sty50
-rw-r--r--macros/latex/contrib/moderncv/moderncvbodyiv.sty39
-rw-r--r--macros/latex/contrib/moderncv/moderncvbodyv.sty48
-rw-r--r--macros/latex/contrib/moderncv/moderncvbodyvi.sty203
-rw-r--r--macros/latex/contrib/moderncv/moderncvcollection.sty4
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorblack.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorblue.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorburgundy.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorcerulean.sty32
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorgreen.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorgrey.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolororange.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorpurple.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolorred.sty12
-rw-r--r--macros/latex/contrib/moderncv/moderncvcolors.tex35
-rw-r--r--macros/latex/contrib/moderncv/moderncvcompatibility.sty4
-rw-r--r--macros/latex/contrib/moderncv/moderncvdebugtools.sty8
-rw-r--r--macros/latex/contrib/moderncv/moderncvfooti.sty14
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadi.sty54
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadii.sty40
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadiii.sty60
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadiv.sty30
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadv.sty57
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadvi.sty29
-rw-r--r--macros/latex/contrib/moderncv/moderncvheadvii.sty226
-rw-r--r--macros/latex/contrib/moderncv/moderncviconsacademic.sty26
-rw-r--r--macros/latex/contrib/moderncv/moderncviconsawesome.sty91
-rw-r--r--macros/latex/contrib/moderncv/moderncviconsletters.sty17
-rw-r--r--macros/latex/contrib/moderncv/moderncviconsmarvosym.sty4
-rw-r--r--macros/latex/contrib/moderncv/moderncviconssymbols.sty4
-rw-r--r--macros/latex/contrib/moderncv/moderncviconstikz.sty29
-rw-r--r--macros/latex/contrib/moderncv/moderncvskillmatrix.sty408
-rw-r--r--macros/latex/contrib/moderncv/moderncvstylebanking.sty42
-rw-r--r--macros/latex/contrib/moderncv/moderncvstylecasual.sty44
-rw-r--r--macros/latex/contrib/moderncv/moderncvstyleclassic.sty42
-rw-r--r--macros/latex/contrib/moderncv/moderncvstylecontemporary.sty63
-rw-r--r--macros/latex/contrib/moderncv/moderncvstyleempty.sty29
-rw-r--r--macros/latex/contrib/moderncv/moderncvstylefancy.sty47
-rw-r--r--macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty47
-rw-r--r--macros/latex/contrib/moderncv/moderncvverticaltimeline.sty79
-rw-r--r--macros/latex/contrib/moderncv/signature.pngbin0 -> 13746 bytes
-rw-r--r--macros/latex/contrib/moderncv/template.tex71
-rw-r--r--macros/latex/contrib/moderncv/tweaklist.sty2
-rw-r--r--macros/latex/contrib/moremath/MANIFEST.md26
-rw-r--r--macros/latex/contrib/moremath/README.md48
-rw-r--r--macros/latex/contrib/moremath/moremath-doc.pdfbin0 -> 945345 bytes
-rw-r--r--macros/latex/contrib/moremath/moremath.dtx5515
-rw-r--r--macros/latex/contrib/moremath/moremath.ins66
-rw-r--r--macros/latex/contrib/msu-thesis/README.md2
-rw-r--r--macros/latex/contrib/msu-thesis/docs/msu-thesis.tex6
-rw-r--r--macros/latex/contrib/msu-thesis/msu-thesis.cls8
-rw-r--r--macros/latex/contrib/msu-thesis/msu-thesis.pdfbin117627 -> 117738 bytes
-rw-r--r--macros/latex/contrib/msu-thesis/samples/MSU-thesis-chapterbib-testfile.pdfbin140074 -> 140074 bytes
-rw-r--r--macros/latex/contrib/oberdiek/README.md6
-rw-r--r--macros/latex/contrib/oberdiek/aliascnt.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/aliascnt.pdfbin321667 -> 321663 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bmpsize.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/bmpsize.pdfbin525958 -> 525977 bytes
-rw-r--r--macros/latex/contrib/oberdiek/centernot.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/centernot.pdfbin304565 -> 304565 bytes
-rw-r--r--macros/latex/contrib/oberdiek/chemarr.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/chemarr.pdfbin318494 -> 318494 bytes
-rw-r--r--macros/latex/contrib/oberdiek/classlist.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/classlist.pdfbin298087 -> 298081 bytes
-rw-r--r--macros/latex/contrib/oberdiek/colonequals.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/colonequals.pdfbin311530 -> 311533 bytes
-rw-r--r--macros/latex/contrib/oberdiek/dvipscol.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/dvipscol.pdfbin297233 -> 297233 bytes
-rw-r--r--macros/latex/contrib/oberdiek/engord.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/engord.pdfbin347368 -> 347368 bytes
-rw-r--r--macros/latex/contrib/oberdiek/enparen.dtx10
-rw-r--r--macros/latex/contrib/oberdiek/enparen.pdfbin332193 -> 332199 bytes
-rw-r--r--macros/latex/contrib/oberdiek/eolgrab.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/eolgrab.pdfbin346528 -> 346528 bytes
-rw-r--r--macros/latex/contrib/oberdiek/fibnum.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/fibnum.pdfbin387246 -> 387246 bytes
-rw-r--r--macros/latex/contrib/oberdiek/flags.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/flags.pdfbin311381 -> 311381 bytes
-rw-r--r--macros/latex/contrib/oberdiek/holtxdoc.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/holtxdoc.pdfbin333733 -> 333733 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypbmsec.dtx8
-rw-r--r--macros/latex/contrib/oberdiek/hypbmsec.pdfbin317462 -> 317462 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypgotoe.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/hypgotoe.pdfbin313697 -> 313697 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hyphsubst.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/hyphsubst.pdfbin328780 -> 328780 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifdraft.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/ifdraft.pdfbin292642 -> 292642 bytes
-rw-r--r--macros/latex/contrib/oberdiek/iflang.dtx8
-rw-r--r--macros/latex/contrib/oberdiek/iflang.pdfbin344768 -> 344771 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek-bundle.bib14
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.ins4
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.pdfbin277944 -> 272940 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.tex33
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparallel.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparallel.pdfbin348838 -> 348838 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparcolumns.pdfbin336523 -> 336523 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcrypt.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/pdfcrypt.pdfbin337837 -> 337837 bytes
-rw-r--r--macros/latex/contrib/oberdiek/protecteddef.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/protecteddef.pdfbin336483 -> 336480 bytes
-rw-r--r--macros/latex/contrib/oberdiek/resizegather.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/resizegather.pdfbin543911 -> 543911 bytes
-rw-r--r--macros/latex/contrib/oberdiek/rotchiffre.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/rotchiffre.pdfbin345328 -> 345313 bytes
-rw-r--r--macros/latex/contrib/oberdiek/scrindex.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/scrindex.pdfbin309276 -> 309292 bytes
-rw-r--r--macros/latex/contrib/oberdiek/setouterhbox.dtx6
-rw-r--r--macros/latex/contrib/oberdiek/setouterhbox.pdfbin358522 -> 358447 bytes
-rw-r--r--macros/latex/contrib/oberdiek/settobox.dtx4
-rw-r--r--macros/latex/contrib/oberdiek/settobox.pdfbin321376 -> 321375 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stackrel.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/stackrel.pdfbin310389 -> 310389 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stampinclude.dtx6
-rw-r--r--macros/latex/contrib/oberdiek/stampinclude.pdfbin304745 -> 304749 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularht.dtx6
-rw-r--r--macros/latex/contrib/oberdiek/tabularht.pdfbin359268 -> 359270 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularkv.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/tabularkv.pdfbin280523 -> 280523 bytes
-rw-r--r--macros/latex/contrib/oberdiek/thepdfnumber.dtx12
-rw-r--r--macros/latex/contrib/oberdiek/thepdfnumber.pdfbin377485 -> 377482 bytes
-rw-r--r--macros/latex/contrib/oberdiek/twoopt.dtx2
-rw-r--r--macros/latex/contrib/oberdiek/twoopt.pdfbin301484 -> 301484 bytes
-rw-r--r--macros/latex/contrib/overarrows/README.md4
-rw-r--r--macros/latex/contrib/overarrows/overarrows.dtx1142
-rw-r--r--macros/latex/contrib/overarrows/overarrows.pdfbin554421 -> 597885 bytes
-rw-r--r--macros/latex/contrib/pagelayout/README.md14
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdfbin75292 -> 75391 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex2
-rwxr-xr-xmacros/latex/contrib/pagelayout/scripts/pagelayoutapi2
-rwxr-xr-xmacros/latex/contrib/pagelayout/scripts/textestvis10
-rw-r--r--macros/latex/contrib/pagelayout/tex/pagelayout.cls10
-rw-r--r--macros/latex/contrib/passopt/README.md18
-rw-r--r--macros/latex/contrib/passopt/passopt.pdfbin0 -> 52494 bytes
-rw-r--r--macros/latex/contrib/passopt/passopt.sty56
-rw-r--r--macros/latex/contrib/passopt/passopt.tex103
-rw-r--r--macros/latex/contrib/photobook/Makefile22
-rw-r--r--macros/latex/contrib/photobook/README.md7
-rw-r--r--macros/latex/contrib/photobook/photobook.cls92
-rw-r--r--macros/latex/contrib/photobook/photobook.pdfbin145475 -> 146661 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdfbin1788630 -> 1793092 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdfbin74004 -> 80800 bytes
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty3
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex144
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex63
-rw-r--r--macros/latex/contrib/prtec/PRTEC19-template.pdfbin355572 -> 0 bytes
-rw-r--r--macros/latex/contrib/prtec/PRTEC24-template.pdfbin0 -> 391935 bytes
-rw-r--r--macros/latex/contrib/prtec/PRTEC24-template.tex (renamed from macros/latex/contrib/prtec/PRTEC19-template.tex)63
-rw-r--r--macros/latex/contrib/prtec/README.md10
-rw-r--r--macros/latex/contrib/prtec/prtec.cls204
-rw-r--r--macros/latex/contrib/prtec/sample-figure.pdfbin171646 -> 149248 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-a-answer.pdfbin49886 -> 49579 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-a-blank.pdfbin41751 -> 41376 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-b-answer.pdfbin49948 -> 49565 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam-b-blank.pdfbin41687 -> 41319 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam.cls13
-rw-r--r--macros/latex/contrib/randexam/randexam.pdfbin63636 -> 63481 bytes
-rw-r--r--macros/latex/contrib/randexam/randexam.tex2
-rw-r--r--macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdfbin40800 -> 40803 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdfbin201562 -> 201562 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalnotes.pdfbin197818 -> 197818 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-sidenotes.pdfbin295212 -> 295212 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-tabular.pdfbin285559 -> 285559 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdfbin198959 -> 198959 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses.pdfbin198796 -> 198796 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-antilabe.pdfbin210970 -> 210970 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-cross_referencing.pdfbin198303 -> 198303 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdfbin201445 -> 201445 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-glossaries.pdfbin285501 -> 285501 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-indexing.pdfbin278069 -> 278069 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdfbin276219 -> 276219 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdfbin292435 -> 292435 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-linespacing.pdfbin286624 -> 286624 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdfbin288122 -> 288122 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-notes-width.pdfbin204669 -> 204669 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdfbin212239 -> 212239 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-performances.pdfbin284580 -> 284580 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdfbin36941 -> 36941 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdfbin310601 -> 310601 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdfbin288795 -> 288795 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdfbin199919 -> 199919 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdfbin23444 -> 23442 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdfbin175645 -> 175645 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdfbin32049 -> 32049 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdfbin289211 -> 289211 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdfbin200045 -> 200045 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdfbin199281 -> 199281 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdfbin177110 -> 177110 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdfbin199684 -> 199684 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdfbin198615 -> 198615 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdfbin198673 -> 198673 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdfbin198798 -> 198798 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdfbin214375 -> 214375 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdfbin210491 -> 210491 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdfbin204973 -> 204973 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdfbin298425 -> 298425 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdfbin204015 -> 204015 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdfbin225554 -> 225554 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdfbin251039 -> 251039 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdfbin202382 -> 202382 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdfbin198565 -> 198565 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdfbin302779 -> 302779 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdfbin206948 -> 206948 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdfbin194201 -> 194201 bytes
-rw-r--r--macros/latex/contrib/reledmac/migration.pdfbin368433 -> 368426 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledmac.dtx4
-rw-r--r--macros/latex/contrib/reledmac/reledmac.pdfbin2162033 -> 2161963 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledpar.dtx49
-rw-r--r--macros/latex/contrib/reledmac/reledpar.pdfbin1041243 -> 1040784 bytes
-rw-r--r--macros/latex/contrib/responsive/README4
-rw-r--r--macros/latex/contrib/responsive/responsive-doc.pdfbin77546 -> 75970 bytes
-rw-r--r--macros/latex/contrib/responsive/responsive-doc.tex5
-rw-r--r--macros/latex/contrib/responsive/responsive.sty12
-rw-r--r--macros/latex/contrib/se2thesis/CHANGELOG.md26
-rw-r--r--macros/latex/contrib/se2thesis/se2colors.dtx2
-rw-r--r--macros/latex/contrib/se2thesis/se2fonts.dtx2
-rw-r--r--macros/latex/contrib/se2thesis/se2packages.dtx2
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdfbin231943 -> 231949 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.dtx81
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.pdfbin362248 -> 365548 bytes
-rw-r--r--macros/latex/contrib/sillypage/sillypage-example.pdfbin104340 -> 104340 bytes
-rw-r--r--macros/latex/contrib/sillypage/sillypage.dtx34
-rw-r--r--macros/latex/contrib/sillypage/sillypage.pdfbin220111 -> 222678 bytes
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md9
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin645802 -> 645632 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-number.dtx8
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx5
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin703908 -> 703909 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx.tex4
-rw-r--r--macros/latex/contrib/spbmark/README.md4
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin92648 -> 92984 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty12
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex7
-rw-r--r--macros/latex/contrib/subeqn/CATALOG17
-rw-r--r--macros/latex/contrib/subeqn/MANIFEST19
-rw-r--r--macros/latex/contrib/subeqn/README14
-rw-r--r--macros/latex/contrib/subeqn/manifest.txt16
-rw-r--r--macros/latex/contrib/subeqn/subeqn-sample.pdfbin0 -> 80142 bytes
-rw-r--r--macros/latex/contrib/subeqn/subeqn.dtx57
-rw-r--r--macros/latex/contrib/subeqn/subeqn.ins49
-rw-r--r--macros/latex/contrib/subeqn/subeqn.pdfbin91698 -> 216768 bytes
-rw-r--r--macros/latex/contrib/subeqnarray/CATALOG17
-rw-r--r--macros/latex/contrib/subeqnarray/MANIFEST (renamed from macros/latex/contrib/subeqnarray/manifest.txt)8
-rw-r--r--macros/latex/contrib/subeqnarray/README16
-rw-r--r--macros/latex/contrib/subeqnarray/subeqnarray-sample.pdfbin0 -> 68356 bytes
-rw-r--r--macros/latex/contrib/subeqnarray/subeqnarray.dtx85
-rw-r--r--macros/latex/contrib/subeqnarray/subeqnarray.ins56
-rw-r--r--macros/latex/contrib/subeqnarray/subeqnarray.pdfbin126532 -> 212013 bytes
-rw-r--r--macros/latex/contrib/supertabular/CATALOG6
-rw-r--r--macros/latex/contrib/supertabular/MANIFEST6
-rw-r--r--macros/latex/contrib/supertabular/README4
-rw-r--r--macros/latex/contrib/supertabular/supertabular.bug (renamed from macros/latex/contrib/supertabular/ChangeLog)69
-rw-r--r--macros/latex/contrib/supertabular/supertabular.dtx323
-rw-r--r--macros/latex/contrib/supertabular/supertabular.pdfbin254349 -> 291267 bytes
-rw-r--r--macros/latex/contrib/synthslant/LICENSE6
-rw-r--r--macros/latex/contrib/synthslant/Makefile133
-rw-r--r--macros/latex/contrib/synthslant/README.md3
-rw-r--r--macros/latex/contrib/synthslant/RELEASE-HOWTO.md51
-rw-r--r--macros/latex/contrib/synthslant/docs/index.md4
-rw-r--r--macros/latex/contrib/synthslant/docs/synthslant-gauge.pdfbin181403 -> 181403 bytes
-rw-r--r--macros/latex/contrib/synthslant/docs/synthslant.pdfbin796407 -> 840480 bytes
-rw-r--r--macros/latex/contrib/synthslant/synthslant.dtx752
-rw-r--r--macros/latex/contrib/synthslant/synthslant.ins21
-rw-r--r--macros/latex/contrib/tagpdf/README.md4
-rw-r--r--macros/latex/contrib/tagpdf/ex-AF-file.pdf56
-rw-r--r--macros/latex/contrib/tagpdf/ex-alt-actualtext.pdfbin34295 -> 34295 bytes
-rw-r--r--macros/latex/contrib/tagpdf/ex-attribute.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-formula-problem.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-list.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-softhyphen.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf14
-rw-r--r--macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf16
-rw-r--r--macros/latex/contrib/tagpdf/link-figure-input.tex6
-rw-r--r--macros/latex/contrib/tagpdf/pac2024-report.pngbin0 -> 60301 bytes
-rw-r--r--macros/latex/contrib/tagpdf/pac2024-version.pngbin0 -> 29032 bytes
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-backend.dtx91
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-checks.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-code.pdfbin1716291 -> 1737121 bytes
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-data.dtx16
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx6
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx6
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-roles.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-space.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-struct.dtx6
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-tree.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-user.dtx4
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf.dtx26
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf.pdfbin1172067 -> 1124473 bytes
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf.tex75
-rw-r--r--macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty167
-rw-r--r--macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex3
-rw-r--r--macros/latex/contrib/tcolorbox/CHANGES.md40
-rw-r--r--macros/latex/contrib/tcolorbox/README.md2
-rw-r--r--macros/latex/contrib/tcolorbox/tcbbreakable.code.tex23
-rw-r--r--macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex48
-rw-r--r--macros/latex/contrib/tcolorbox/tcbexternal.code.tex8
-rw-r--r--macros/latex/contrib/tcolorbox/tcbfitting.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbhooks.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcblistings.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcblistingscore.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbmagazine.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbminted.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbposter.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbprocessing.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbraster.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbskins.code.tex21
-rw-r--r--macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbtheorems.code.tex36
-rw-r--r--macros/latex/contrib/tcolorbox/tcbvignette.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcbxparse.code.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdfbin274323 -> 137729 bytes
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex2
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-example.pdfbin447103 -> 287734 bytes
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-example.tex2
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdfbin438130 -> 247127 bytes
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex2
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.bib6
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex12
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex18
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex43
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex6
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex4
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex8
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex2
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex7
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty4
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.skincatalog.tex37
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex23
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex21
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex137
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex6
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.pdfbin4859487 -> 4856594 bytes
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.sty140
-rw-r--r--macros/latex/contrib/tcolorbox/tcolorbox.tex20
-rw-r--r--macros/latex/contrib/telprint/README.md13
-rw-r--r--macros/latex/contrib/telprint/telprint.dtx (renamed from macros/latex/contrib/oberdiek/telprint.dtx)79
-rw-r--r--macros/latex/contrib/telprint/telprint.pdf (renamed from macros/latex/contrib/oberdiek/telprint.pdf)bin331190 -> 329028 bytes
-rw-r--r--macros/latex/contrib/texvc/Makefile17
-rw-r--r--macros/latex/contrib/texvc/texvc.dtx48
-rw-r--r--macros/latex/contrib/texvc/texvc.ins84
-rw-r--r--macros/latex/contrib/texvc/texvc.pdfbin246091 -> 307351 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/README.md13
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex1648
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex45
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex789
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-matrices.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex355
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex2050
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-vectors.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex2360
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex10
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdfbin704147 -> 817269 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty29
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua13
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua20
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua49
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua4
-rw-r--r--macros/latex/contrib/tramlines/README5
-rw-r--r--macros/latex/contrib/tramlines/tramlines-documentation.pdfbin58619 -> 60656 bytes
-rw-r--r--macros/latex/contrib/tramlines/tramlines-documentation.tex17
-rw-r--r--macros/latex/contrib/tramlines/tramlines.sty6
-rw-r--r--macros/latex/contrib/typog/LICENSE415
-rw-r--r--macros/latex/contrib/typog/Makefile183
-rw-r--r--macros/latex/contrib/typog/README.md4
-rw-r--r--macros/latex/contrib/typog/RELEASE-HOWTO.md51
-rw-r--r--macros/latex/contrib/typog/docs/index.md5
-rw-r--r--macros/latex/contrib/typog/docs/typog-example.pdfbin392419 -> 402037 bytes
-rw-r--r--macros/latex/contrib/typog/docs/typog-grep.1428
-rw-r--r--macros/latex/contrib/typog/docs/typog-grep.1.pdfbin511632 -> 514141 bytes
-rw-r--r--macros/latex/contrib/typog/docs/typog.pdfbin902362 -> 996908 bytes
-rw-r--r--macros/latex/contrib/typog/typog.dtx3217
-rw-r--r--macros/latex/contrib/typog/typog.ins30
-rw-r--r--macros/latex/contrib/univie-ling/README13
-rw-r--r--macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx2
-rw-r--r--macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx2
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdfbin132715 -> 132716 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdfbin127940 -> 127947 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdfbin201365 -> 201366 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdfbin200965 -> 200967 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdfbin172559 -> 172712 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdfbin167650 -> 167812 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdfbin227173 -> 227180 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdfbin224980 -> 224983 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdfbin167845 -> 190497 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex4
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdfbin164309 -> 186645 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex4
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdfbin250473 -> 250474 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdfbin250364 -> 250365 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdfbin461504 -> 461588 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdfbin450479 -> 450553 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdfbin458946 -> 459207 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdfbin457385 -> 457851 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdfbin462064 -> 462143 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdfbin349412 -> 350542 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex12
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling.pdfbin365693 -> 365821 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling.tex2
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls8
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls8
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls8
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls8
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls8
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls10
-rw-r--r--macros/latex/contrib/ut-thesis/README21
-rw-r--r--macros/latex/contrib/ut-thesis/ut-thesis.dtx16
-rw-r--r--macros/latex/contrib/ut-thesis/ut-thesis.ins21
-rw-r--r--macros/latex/contrib/ut-thesis/ut-thesis.pdfbin135197 -> 135618 bytes
-rw-r--r--macros/latex/required/l3kernel/CHANGELOG.md15
-rw-r--r--macros/latex/required/l3kernel/README.md2
-rw-r--r--macros/latex/required/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/required/l3kernel/expl3.pdfbin610409 -> 610110 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.pdfbin1800435 -> 1790077 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.tex2
-rw-r--r--macros/latex/required/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3bitset.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3box.dtx6
-rw-r--r--macros/latex/required/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3clist.dtx14
-rw-r--r--macros/latex/required/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3color.dtx30
-rw-r--r--macros/latex/required/l3kernel/l3debug.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3deprecation.dtx8
-rw-r--r--macros/latex/required/l3kernel/l3doc.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3doc.pdfbin565557 -> 565298 bytes
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.pdfbin151323 -> 151011 bytes
-rw-r--r--macros/latex/required/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3file.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-functions.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-types.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3int.dtx17
-rw-r--r--macros/latex/required/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3keys.dtx41
-rw-r--r--macros/latex/required/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3news.pdfbin396223 -> 396223 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news09.pdfbin250161 -> 250161 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex/required/l3kernel/l3pdf.dtx14
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.csv7
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.pdfbin82843 -> 83064 bytes
-rw-r--r--macros/latex/required/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3prop.dtx42
-rw-r--r--macros/latex/required/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3str.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.pdfbin296602 -> 296298 bytes
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.pdfbin231447 -> 231148 bytes
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/required/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.pdfbin242247 -> 241946 bytes
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/required/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text.dtx16
-rw-r--r--macros/latex/required/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3tl-build.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/required/l3kernel/source3.pdfbin7618338 -> 7610534 bytes
-rw-r--r--macros/latex/required/l3kernel/source3.tex2
795 files changed, 33993 insertions, 13713 deletions
diff --git a/macros/latex/contrib/abraces/README.md b/macros/latex/contrib/abraces/README.md
index b26a225d8c..5234134d05 100644
--- a/macros/latex/contrib/abraces/README.md
+++ b/macros/latex/contrib/abraces/README.md
@@ -1,11 +1,11 @@
-`abraces` 2022/11/06 v2.1
+`abraces` 2024/08/02 v2.2
----------------------------------------
A package that provides a character key-driven interface to
supplement new constructions of the traditional `\overbrace`
and `\underbrace` pairs in an asymmetric or arbitrary way.
-Copyright (c) 2021 Werner Grundlingh
+Copyright (c) 2024 Werner Grundlingh
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/abraces/abraces-doc.pdf b/macros/latex/contrib/abraces/abraces-doc.pdf
index c0becaadde..a2161dafb5 100644
--- a/macros/latex/contrib/abraces/abraces-doc.pdf
+++ b/macros/latex/contrib/abraces/abraces-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/abraces/abraces-doc.tex b/macros/latex/contrib/abraces/abraces-doc.tex
index 970cf74eab..04178c2de7 100644
--- a/macros/latex/contrib/abraces/abraces-doc.tex
+++ b/macros/latex/contrib/abraces/abraces-doc.tex
@@ -1,4 +1,4 @@
-% $Id: abraces-doc.tex,v 2.1 2022/11/06 00:00:00 wgrundlingh stable $
+% $Id: abraces-doc.tex,v 2.2 2024/08/02 00:00:00 wgrundlingh stable $
\RequirePackage{xcolor}% http://ctan.org/pkg/xcolor (required to "overload" color package)
\documentclass[10pt]{ltxdockit}[2011/03/25]
@@ -7,7 +7,7 @@
\usepackage{booktabs,shortvrb,amsmath,xfp}
\MakeShortVerb{\|}
-\rcsid{$Id: abraces.tex,v 2.1 2022/11/06 00:00:00 wgrundlingh stable $}
+\rcsid{$Id: abraces.tex,v 2.2 2024/08/02 00:00:00 wgrundlingh stable $}
%\setcounter{secnumdepth}{2}
%\setcounter{tocdepth}{4}
@@ -305,11 +305,18 @@ This material is released under and subject to the \href{https://latex-project.o
\section{Acknowledgements}
-Thanks to Frank Mittlebach who stepped in and suggested an improvement in the original way \sty{abraces} functioned. Expansions included the use of \LaTeX3 command interface (via the \href{http://ctan.org/pkg/xparse}{\sty{xparse} package}).
+Thanks to Frank Mittlebach who stepped in and suggested an improvement in the original way \sty{abraces} functioned. Expansions included the use of \LaTeX3 command interface.
\section{Change log}
\begin{itemize}
+ \item v2.2 (2024-08-02) Minor update
+
+ \begin{itemize}
+ \item
+ Added \href{http://ctan.org/pkg/xcolor}{\sty{xcolor}} dependency to always have \lstinline|\bracecolor| available.
+ \end{itemize}
+
\item v2.1 (2022-11-06) Minor update
\begin{itemize}
diff --git a/macros/latex/contrib/abraces/abraces.sty b/macros/latex/contrib/abraces/abraces.sty
index af146826ce..3b096e7ab7 100644
--- a/macros/latex/contrib/abraces/abraces.sty
+++ b/macros/latex/contrib/abraces/abraces.sty
@@ -1,5 +1,5 @@
%% abraces.sty
-%% Copyright 2021 Werner Grundlingh
+%% Copyright 2024 Werner Grundlingh
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -16,9 +16,12 @@
% This work consists of the file abraces.sty.
\ProvidesPackage{abraces}% http://ctan.org/pkg/abraces
- [2022/11/06 v2.1 Arbitrary and asymmetric braces]
+ [2024/08/02 v2.2 Arbitrary and asymmetric braces]
+% xparse definitions now form part of the LaTeX core. However, keeping this in for those using older versions.
\RequirePackage{xparse}
+% Since abraces defines \bracecolor, add xcolor as dependency
+\RequirePackage{xcolor}
\newif\if@overload
\DeclareOption{overload}{\@overloadtrue}
diff --git a/macros/latex/contrib/asmeconf/README.md b/macros/latex/contrib/asmeconf/README.md
index 2c07a04b9b..d01de1897f 100644
--- a/macros/latex/contrib/asmeconf/README.md
+++ b/macros/latex/contrib/asmeconf/README.md
@@ -1,7 +1,7 @@
#asmeconf: A latex template for ASME conference papers#
- Version 1.37 dated 2024/02/06.
+ Version 1.38 dated 2024/08/01.
####Overview####
This class provides a LaTeX template for ASME Conference papers formatted according to
@@ -80,23 +80,37 @@
####Change log####
+ v1.38 (2024/08/01)
+ - Add dcolumn type ",{x.y}" to center numbers on a comma separator
+ - Change appendix section titles block format, rather than hanging indentation
+ - Replace sample French appendix by a German appendix
+ - Fix bug in \[main=\] option (for babel)
+ - Define commands \\@title and \\@author
+ - Code clean-up (compatibility code, bookmark package loading, twocolumn loading,...)
+ - Various code changes to better support future tagged pdf
+ - Update documentation for using fontspec with asmeconf
+ - Rescale Termes, Helvetica, and Inconsolata fontdimens under LuaLaTeX to match pdfTeX
+ - Add logic to asme-template.tex to test for presence of non-latin fonts under LuaLaTeX
+ - Change code for Japanese fonts to by-pass bug in luatexja-fontspec
+ - Correct typo in babel font loading for traditional Chinese
+ - Remove calls for Harfbuzz renderer since fontspec handles this internally
+
v1.37 (2024/02/06)
- - Under luaLaTeX, fontspec is now loaded by default. The option [nofontspec] will prevent this.
- - Eliminate the following long-deprecated options: [oldauthor, lang, lang-second, lang-third]
- - newtxtext has removed the superiors font options (Jan 2024). As a result, the option [nodefaultsups] has been removed from asmeconf, along with supporting code
+ - Under LuaLaTeX, fontspec is now loaded by default. The option \[nofontspec\] will prevent this.
+ - Eliminate the following long-deprecated options: \[oldauthor, lang, lang-second, lang-third\]
+ - newtxtext has removed the superiors font options (Jan 2024). As a result, the option \[nodefaultsups\] has been removed from asmeconf, along with supporting code
- Streamline code for option handling and compatibility testing; other code clean-up
- Switch code handling successive footnotes to expl3, adjust intersecting code
- Small code changes to accommodate future tagged pdf
- Refresh sample figures, edit sample bib file
- Edits to asmeconf.bst: fix punctuation and spacing in journal title macros
-
-
+
v1.36 (2023/12/28)
- Change option-passing to xcolor package to address recent changes that package's code which lead to an error message.
v1.35 (2023/10/19)
- Adjust pdf-a code to accommodate recent changes to hyperxmp package. NOTE: \\DocumentMetadata{ ..} is now preferred to using class option [pdf-a].
- - Add option to not use boldface text in captions: [unboldcaption]
+ - Add option to not use boldface text in captions: \[unboldcaption\]
- Add mathversion sans for sans-serif math and set as default in unbolded captions
v1.34 (2022/12/30)
@@ -131,7 +145,7 @@
v1.27 (2021/12/26):
- fix bug in captions that appeared in Jan. 2021 (code not uppercasing caption text)
- revise code to switch to grid-style author block through a single package option, \[grid\]; previous macros for grid-style remain active.
- - various code modifications to enable older LaTeX distributions to run this class. With pdfLaTeX, TeX Live 2016 or later should be used; with luaLaTeX, TeX Live 2021 or later should be used.
+ - various code modifications to enable older LaTeX distributions to run this class. With pdfLaTeX, TeX Live 2016 or later should be used; with LuaLaTeX, TeX Live 2021 or later should be used.
- eliminate use of \\entry{} with a single argument to produce subheadings in nomenclature; use \\EntryHeading{} instead. (**not backward compatible**)
- incorporate recent changes to LaTeX pdf management in relation to pdf-a color profile loading and recently deprecated \\pdfcatalog command
- minor edits in relation to url links
diff --git a/macros/latex/contrib/asmeconf/asmeconf-sample.bib b/macros/latex/contrib/asmeconf/asmeconf-sample.bib
index 158b0f0081..66b2a356cf 100644
--- a/macros/latex/contrib/asmeconf/asmeconf-sample.bib
+++ b/macros/latex/contrib/asmeconf/asmeconf-sample.bib
@@ -1,6 +1,6 @@
%% Sample bibliography file for asmeconf.bst and asmeconf.cls
%%
-%% Revised 25 January 2024
+%% Revised 26 July 2024
%% Copyright John H. Lienhard, MIT
%% Offered under the MIT license: https://ctan.org/license/mit
@@ -212,6 +212,18 @@
urldate = {January 18, 2021},
}
+@article{pohlhausen1921,
+ author = {Pohlhausen, E.},
+ title = {Der {W}\"{a}rmeaustausch zwischen festen K\"{o}rpern und {F}l\"{u}ssigkeiten mit kleiner reibung und kleiner {W}\"{a}rmeleitung},
+ journal = {Zeitschrift f\"{u}r {A}ngewandte {M}athematik und {Me}chanik},
+ volume = {1},
+ number = {2},
+ pages = {115--121},
+ doi = {10.1002/zamm.19210010205},
+ year = {1921},
+}
+%url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/zamm.19210010205},
+
@book{fourier1822,
author = {Jean Baptiste Joseph Fourier},
year = {1822},
diff --git a/macros/latex/contrib/asmeconf/asmeconf-template.pdf b/macros/latex/contrib/asmeconf/asmeconf-template.pdf
index 0e628963d3..8e3eefb516 100644
--- a/macros/latex/contrib/asmeconf/asmeconf-template.pdf
+++ b/macros/latex/contrib/asmeconf/asmeconf-template.pdf
Binary files differ
diff --git a/macros/latex/contrib/asmeconf/asmeconf-template.tex b/macros/latex/contrib/asmeconf/asmeconf-template.tex
index 84eecfb071..a325b89357 100644
--- a/macros/latex/contrib/asmeconf/asmeconf-template.tex
+++ b/macros/latex/contrib/asmeconf/asmeconf-template.tex
@@ -4,7 +4,7 @@
%% This file is asmeconf-template.tex, a LaTeX template to format ASME Conference papers according to
%% the requirements on ASME's conference web pages, and including hypertext support for the pdf.
%%
-%% This file is version 1.37 dated 2024/02/06
+%% This file is version 1.38 dated 2024/08/01
%%
%% As of version 1.11, this template defaults to ASME's newer conference guidelines first posted July 2019.
%% Those guidelines changed the requested author block formatting to be inline.
@@ -71,8 +71,8 @@
%% * See Appendix B for details.
%% * Language support is most extensive when running LuaLaTeX, which automatically loads fontspec, but
%% * be aware that you may to install additional fonts on your system to use fontspec.
-%% *
-%% * To use LuaLaTeX without bothering about extra fonts, use the [nofontspec] option to asmeconf.
+%%
+%% * Option to use LuaLaTeX **without** bothering about extra fonts, [nofontspec]
%%
%% The use of commands defined or modified by the asmeconf class is illustrated throughout this file. In particular,
%% ASME requires capitalized, sans-serif section headings, and as a result some care is needed when using macros
@@ -93,13 +93,13 @@
%% STRONGLY RECOMMENDED new pdf management code follows.
%% This addition the LaTeX kernel was made in June 2022 by the LaTeX Project team.
%% https://www.latex-project.org/news/latex2e-news/ltnews35.pdf
-%% Uncomment the next lines and omit the option [pdf-a] from \documentclass[...]{asemconf}
+%% If this doesn't work for you, comment out the next lines and add option [pdf-a] to \documentclass[...]{asmeconf}
-%\DocumentMetadata{%
-% pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX)
-% pdfversion=1.7,
-% lang=en-US,
-%}
+\DocumentMetadata{%
+ pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX)
+ pdfversion=1.7,
+ lang=en-US,
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -108,7 +108,7 @@
%% Remove the [colorlinks] option before *final* submission to ASME, to get black text for printing,
%% but keep that option for other uses.
-\documentclass[pdf-a,balance,colorlinks,upint,subscriptcorrection,varvw,mathalfa=cal=boondoxo, spanish,french,vietnamese,russian,greek]{asmeconf}
+\documentclass[balance,colorlinks,upint,subscriptcorrection,varvw,mathalfa=cal=boondoxo, german,spanish,vietnamese,russian,greek]{asmeconf}
%%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -121,6 +121,7 @@
pdflicenseurl={https://ctan.org/pkg/asmeconf},% may delete
}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
@@ -154,7 +155,7 @@
% \JointFirstAuthor, if applicable, follows the affiliation of the relevant authors, no spaces.
\SetAuthors{%
- John H.\ Lienhard\affil{1}\JointFirstAuthor\CorrespondingAuthor{},
+ John H. Lienhard\affil{1}\JointFirstAuthor\CorrespondingAuthor{},
Luis Hern\'andez\affil{2}\JointFirstAuthor,
Maria Silva\affil{3},
Henry Tudor\affil{4},
@@ -183,7 +184,6 @@
%%%%% End of fields to be completed. Now write your paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
%%%%% ABSTRACT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Abstract should be 200 words or less
@@ -314,16 +314,18 @@ Run 12 & 24 & 68.3 \\
%%%%%%%%%%%%%%% begin more complicated table %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% note column set as a 3 cm wide paragraph with 1em hanging indentation. See array package documentation.
+% note numbers centered on "." (with d{3.3}) and on "," (with ,{3.3}). See dcolumn package documentation.
\begin{table}[t]
\caption{Table with more complicated columns}\label{tab:2}%
\centering{%
-\begin{tabular}{!{\hspace*{0.5cm}} >{\raggedright\hangindent=1em} p{3cm} d{3.3} @{\hspace*{1cm}} d{3.3} !{\hspace*{0.5cm}}}
+\begin{tabular}{!{\hspace*{0.5cm}} >{\raggedright\hangindent=1em} p{3cm} d{3.3} @{\hspace*{1cm}} ,{3.3} !{\hspace*{0.5cm}}}
\toprule
Experiment & \multicolumn{1}{c@{\hspace*{1cm}}}{$u$ [m/s]} & \multicolumn{1}{c!{\hspace*{0.5cm}}}{$T$ [\textdegree C]} \\
\midrule
-The first test we ran this morning & 124.3 & 68.3 \\
-The second test we ran this morning & 82.50 & 103.46 \\
-Our competitor's test & 72.321 & 141.384 \\
+The first test we ran this morning & 124.3 & 68,3 \\
+The second test we ran this morning & 82.50 & 103,46 \\
+Our competitor's test & 72.321 & 141,384 \\
\bottomrule
\end{tabular}
}
@@ -444,7 +446,7 @@ Math italics are used for Roman and Greek letters by default. If you want an up
\begin{equation}\label{eqn:dw}
\vec{F} = m \vec{a} \quad\textrm{or}\quad \vec{\mathrm{F}} = m \vec{\mathrm{a}} \quad\textrm{or}\quad \mathbf{F} = m \mathbf{a} \quad\textrm{or}\quad \vec{\mathsf{F}} = m \vec{\mathsf{a}}
\end{equation}
-To get additional symbols in bold math, use the \verb|\bm{..}| macro from the \texttt{bm} package (which is loaded by the class) or, for longer passages, use \verb|{\mathversion{bold}|\ldots\texttt{\}}.
+To get additional symbols in bold math, use the \verb|\bm{..}| macro from the \texttt{bm} package (which is loaded by the class) or, for longer passages, use \verb|{\mathversion{bold}..|\texttt{\}}.
The class file also provides upright sans-serif Greek letters with \verb|\sfalpha| and similar expressions (e.g., $\sfalpha, \sfbeta, \sfgamma, \sfdelta$ \ldots $\bm{\sfalpha, \sfbeta, \sfgamma, \sfdelta \ldots}$), in case they are needed (but note that the \verb|newtxmath| options \verb|frenchmath| and \verb|slantedGreek| also affect how Greek letters are presented).
@@ -555,7 +557,9 @@ The \hologo{LuaLaTeX} engine is useful with \texttt{asmeconf} in two situations:
\item \textbf{Executing lua code directly in your \LaTeX\ file.} With lua code, complicated functions can be plotted or numerical integration can be executed. An example file in the distribution demonstrates this capability~\cite{lienhard2024}. In this situation, \textit{be sure to use the class option} \texttt{[nofontspec]}, so that you won't need to install additional fonts on your computer.
-\item \textbf{Using complex alphabets.} With \hologo{pdfLaTeX}, the \texttt{asmeconf} package supports Latin alphabets, as well as Cyrillic, Greek, and Vietnamese. If you need scripts such as Arabic, Chinese, or Japanese, \hologo{LuaLaTeX} with the \texttt{fontspec} package can use fonts installed in your computer operating system. See the example file in this distribution for more details~\cite{lienhard2021}.
+\item \textbf{Using complex alphabets.} With \hologo{pdfLaTeX}, the \texttt{asmeconf} package supports Latin alphabets, as well as Cyrillic, Greek, and Vietnamese. If you need scripts such as Arabic, Chinese, or Japanese, \hologo{LuaLaTeX} with the \texttt{fontspec} package can use fonts installed in your computer operating system.\footnote{For English, you \textit{must} have these fonts installed:\par \parbox{\columnwidth}{\setlength{\parindent}{12pt}TeX Gyre Termes (\hrefurl{https://ctan.org/tex-archive/fonts/newtx/opentype}{ctan.org/tex-archive/fonts/newtx/opentype}),\par TeX~Gyre~Heros (\hrefurl{https://ctan.org/tex-archive/fonts/tex-gyre/opentype}{ctan.org/tex-archive/fonts/tex-gyre/opentype}),\par
+Inconsolatazi4 (\hrefurl{https://ctan.org/tex-archive/fonts/inconsolata/opentype}{ctan.org/tex-archive/fonts/inconsolata/opentype}).}} See the example file in this distribution for more details~\cite{lienhard2021}.
+
\end{description}
@@ -572,9 +576,10 @@ abstract in another language.
When more than one language option is included in \verb|\documentclass[..]{asmeconf}|, English will be
set as the document's main language. (To choose a different main language, set \texttt{[main=..]}).
-If no language options are given, the package defaults to English. As examples, a passage in French is
-shown in \selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english}, followed by
-\ifpdftex abstracts in Spanish, Greek, Russian, and Vietnamese.\else abstracts in other languages.\fi
+If no language options are given, the package defaults to English. As examples, a passage in German is
+shown in \selectlanguage{german}\appendixname~\ref{app:pohlhausen}\selectlanguage{german},
+%\selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english},
+followed by \ifpdftex abstracts in Spanish, Greek, Russian, and Vietnamese.\else abstracts in other languages.\fi
The input encoding can be utf-8, as for these glyphs:
%% If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete that line to resolve the issue.
@@ -588,12 +593,18 @@ The bibliography style, \texttt{asmeconf.bst}, is designed in English and aimed
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{selectlanguage}{french}%
-\section{Discours Préliminaire de Fourier}\label{app:fourier}
-Les causes primordiales ne nous sont point con­nues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'obser­vation, et dont l'étude est l'objet de la philosophie naturelle.
-
-La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élé­ment. Cette théorie formera désormais une des branches les plus importantes de la physique gé­nérale~\cite{fourier1822}.
+\begin{selectlanguage}{german}%
+\section{Wärmeaustausch und Reibungswiderstand (\NoCaseChange{von} E. Pohlhausen)}\label{app:pohlhausen}
+In einer strömenden Flussigkeit sind Wärmeleitung und Wärmekonvektion Vorgänge, die mit der inneren Reibung (oder Impulsleitung) und mit der Impulskonvektion große Aehnlichkeit besitzen. Mathematisch findet dies seinen Ausdruck in dem gleichartigen Bau der Differentialgleichungen, die einerseits für die Temperatur und anderseits für den Geschwindigkeitsvektor in der Flüssigkeit bestehen. Man kann daraus auf eine Beziehung
+zwischen dem Wärmeaustanch und dem Reibungswiderstand schließen, die eine strömende Flüssigkeit an einem festen Körper hervorrufen. Dies ist zuerst von Prandtl ausgesprochen und durchgeführt worden, und zwar für turbulente Vorgänge, unter der vereinfachenden Annahme von Wärmequellen und -senken im Innern der Flüssigkeit~\cite{pohlhausen1921}.
\end{selectlanguage}%
+
+%\begin{selectlanguage}{french}%
+%\section{Discours Préliminaire de Fourier}\label{app:fourier}
+%Les causes primordiales ne nous sont point con­nues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'obser­vation, et dont l'étude est l'objet de la philosophie naturelle.
+%
+%La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élé­ment. Cette théorie formera désormais une des branches les plus importantes de la physique gé­nérale~\cite{fourier1822}.
+%\end{selectlanguage}%
\begin{selectlanguage}{spanish}%
\begin{abstract*}
@@ -625,19 +636,25 @@ Este es el resumen del artículo. Escribimos en español. Se describen el proble
\end{selectlanguage}% Checked and edited by Nguyen Le and Thao Nguyen
\fi
-\iffontspecloaded %%% requires lualatex
+\iffontspecloaded %%% These passages require using lualatex AND installing the mentioned fonts as system fonts on your computer.
%
- \begin{selectlanguage}{greek}%
- \begin{abstract*}
- Αυτή είναι η περίληψη του άρθρου. Χρησιμοποιούμε την ελληνική γλώσσα. Περιγράφεται το πρόβλημα, οι μέθοδοι και τα αποτελέσματα. Περιλαμβάνονται επίσης αναφορές.
- \end{abstract*}
- \end{selectlanguage}% Edited by George Barbastathis
-%
- \begin{selectlanguage}{russian}
- \begin{abstract*}
- Это резюме статьи. Пишем по русски. Описаны проблема, методы и результаты. Библиография также включена.%
- \end{abstract*}
- \end{selectlanguage}% edited by Steven Gerasimoff
+ \IfFontExistsTF{NotoSans}{
+ \IfFontExistsTF{NotoSerif}{
+ %
+ \begin{selectlanguage}{greek}%
+ \begin{abstract*}
+ Αυτή είναι η περίληψη του άρθρου. Χρησιμοποιούμε την ελληνική γλώσσα. Περιγράφεται το πρόβλημα, οι μέθοδοι και τα αποτελέσματα. Περιλαμβάνονται επίσης αναφορές.
+ \end{abstract*}
+ \end{selectlanguage}% Edited by George Barbastathis
+ %
+ \begin{selectlanguage}{russian}
+ \begin{abstract*}
+ Это резюме статьи. Пишем по русски. Описаны проблема, методы и результаты. Библиография также включена.%
+ \end{abstract*}
+ \end{selectlanguage}% edited by Steven Gerasimoff
+ %
+ }{\ClassWarning{\ClassName}{I can't find NotoSerif.ttf, which is needed for Greek and Russian language text. Please install that font.}}
+ }{\ClassWarning{\ClassName}{I can't find NotoSans.ttf, which is needed for Greek and Russian language text. Please install that font.}}
%
\begin{selectlanguage}{vietnamese}
\begin{abstract*}
@@ -645,24 +662,41 @@ Este es el resumen del artículo. Escribimos en español. Se describen el proble
\end{abstract*}
\end{selectlanguage}% Checked and edited by Nguyen Le and Thao Nguyen
%
-% \begin{selectlanguage}{japanese}% Use class option [japanese] if you uncomment this passage.
-% \begin{abstract*}
-% % 論文の要約です。日本語で記述します。問題、方法、および結果について説明します。また、参考文献も含めます。
-% この論文の日本語での要約は以下のとおりです。問題、方法、および結果が説明されています。参考資料も添付してあります。
-% \end{abstract*}
-% \end{selectlanguage}% Edited by Keiji Yano and Yoshiki Okamoto
%
- \begin{selectlanguage}{korean}
- \begin{abstract*}
- 이것은 한국어로 쓰인 논문의 초록입니다. 문제, 방법 및 결과가 설명되어 있습니다. 참조도 포함됩니다.
- \end{abstract*}
- \end{selectlanguage}% Edited by Hyung Won Chung.
+%% Use class option [japanese] if you uncomment this passage.
+% \IfFontExistsTF{NotoSerifCJKjp}{%
+% \IfFontExistsTF{NotoSansCJKjp}{%
+% %
+% \begin{selectlanguage}{japanese}
+% \begin{abstract*}
+% % 論文の要約です。日本語で記述します。問題、方法、および結果について説明します。また、参考文献も含めます。
+% この論文の日本語での要約は以下のとおりです。問題、方法、および結果が説明されています。参考資料も添付してあります。
+% \end{abstract*}
+% \end{selectlanguage}% Edited by Keiji Yano and Yoshiki Okamoto
+% %
+% }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKjp, which is needed for Japanese language text. Please install that font.}}
+% }{\ClassWarning{\ClassName}{I can't find NotoSansCJKjp, which is needed for Japanese language text. Please install that font.}}
%
- \begin{selectlanguage}{chinese-simplified}
- \begin{abstract*}
- 这是文章的摘要。我们用中文书写,描述了问题,方法和结果,还包括了参考文献。
- \end{abstract*}
- \end{selectlanguage}% edited by Zi Hao Foo
+ \IfFontExistsTF{NotoSansCJKkr}{%
+ \IfFontExistsTF{NotoSerifCJKkr}{%
+ %
+ \begin{selectlanguage}{korean}
+ \begin{abstract*}
+ 이것은 한국어로 쓰인 논문의 초록입니다. 문제, 방법 및 결과가 설명되어 있습니다. 참조도 포함됩니다.
+ \end{abstract*}
+ \end{selectlanguage}% Edited by Hyung Won Chung.
+ %
+ }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKkr.otf, which is needed for Korean language text. Please install that font.}}
+ %
+ \IfFontExistsTF{NotoSerifCJKsc}{%
+ \begin{selectlanguage}{chinese-simplified}
+ \begin{abstract*}
+ 这是文章的摘要。我们用中文书写,描述了问题,方法和结果,还包括了参考文献。
+ \end{abstract*}
+ \end{selectlanguage}% edited by Zi Hao Foo
+ %
+ }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKsc.otf, which is needed for Korean language text. Please install that font.}}
+ }{\ClassWarning{\ClassName}{I can't find NotoSansCJK.ttf, which is needed for Korean and simplified Chinese text. Please install that font.}}
%
\fi
diff --git a/macros/latex/contrib/asmeconf/asmeconf.cls b/macros/latex/contrib/asmeconf/asmeconf.cls
index 186e5d4941..82ccbc2614 100644
--- a/macros/latex/contrib/asmeconf/asmeconf.cls
+++ b/macros/latex/contrib/asmeconf/asmeconf.cls
@@ -5,8 +5,8 @@
%% ASME conference requirements as represented on ASME's conference web pages in 2024.
%%
%% This file's version and date:
- \def\versionno{1.37}
- \def\versiondate{2024/02/06\space}
+ \def\versionno{1.38}
+ \def\versiondate{2024/08/01\space}
%%
%% Author: John H. Lienhard, V
%% Department of Mechanical Engineering
@@ -23,7 +23,7 @@
%% 6. Provide line numbers for editing and review
%% 7. Support balancing length of columns on last page
%% 8. Provide copyright footer for federal employees and contractors
-%% 9. Support the archival PDF/A standards 1b, 2b, 2u, 3b, and 3u
+%% 9. Support archival PDF/A standards
%% 10. Enable various math and text features from the newtxmath and newtxtext packages
%% 11. Support inclusion of passages in languages other than English
%%
@@ -66,74 +66,76 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{asmeconf}[\versiondate ASME Conference Paper LaTeX Template (JHL)]
-\LoadClass[twoside,twocolumn,10pt]{article}
+\LoadClass[twoside,10pt]{article}% twocolumn is initiated in \MakeTitle
% Even/odd page layout is not used in ASME's specs, although the papers are printed in two-sided format.
\RequirePackage{iftex}% provides \ifpdftex (many) & \ifluatex (once)
\RequirePackage{ifthen}% ifthenelse (many) & \whiledo (once)
-\RequirePackage{etoolbox}% using patchcmd in 4 places
+\RequirePackage{etoolbox}% using patchcmd in 4 or 5 places
+\ExplSyntaxOn
+ \str_const:Nn \ClassName {asmeconf}
+\ExplSyntaxOff
+
+%%%%%%%%%%%%% Compatibility codes for older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%% Test compatibility of older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01
+\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01
+\providecommand\IfPDFManagementActiveTF{\@secondoftwo}% \If... added to latex 2021/07/23
+\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15
+\providecommand\ClassNoteNoLine[2]{\typeout{^^JClass Note #1: #2.^^J}}% log & terminal note... added to latex 2021/11/15
-\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01
-\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01
-\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15
+\IfFormatAtLeastTF{2020/10/01}{\relax}{%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats and packages may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now.}%
+}
+
+% check whether pdfmanagement (\DocumentMetadata) has been loaded (else fall back to hyperxmp and bookmark packages after loading hyperref)
+\newif\ifasme@pdfmanagement
+\IfPDFManagementActiveTF{
+ \asme@pdfmanagementtrue
+}{
+ \asme@pdfmanagementfalse
+ \ClassWarningNoLine{\ClassName}{pdfmanagement is not active. Will load hyperxmp and bookmark packages instead}
+}
-\IfFormatAtLeastTF{2020/10/01}{%
- \ClassInfo{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020/10/01 or later are strongly recommended for best results}
- }{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats and packages may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now.}%
+% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error
+\IfFormatAtLeastTF{2021/11/15}{
+ \relax
+}{
+ \AtBeginDocument{
+ \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax}
+ }
}
+% Enable pre-2020/10 formats to access essential macros later moved into LaTeX kernel
\ifdefined\NewDocumentCommand\else
\RequirePackage{xparse}% enable older installations to access features in LaTeX kernel since 2020/10/01; but need at least 2018/04...
\fi
-\DeclareDocumentCommand\LogNote{m}{%
- \IfFormatAtLeastTF{2021/11/15}{%
- \ClassNoteNoLine{asmeconf}{#1}% Added to LaTeX in Nov. 2021
- }{%
- \ClassWarningNoLine{asmeconf}{#1}%
- }
+% Provide pre-2020/10 installations with basic unicode character mappings
+\IfFormatAtLeastTF{2020/10/01}{\relax}{%
+\ifpdftex
+ \pdfgentounicode=1 %% enable CMaps; was moved into the latex kernel Oct 2020
+ \input glyphtounicode.tex %% lists of mappings; was moved into the latex kernel Oct 2020
+\fi
}
\IfPackageAtLeastTF{iftex}{2019/11/07}{\relax}{%
- \ClassError{asemconf}{Package iftex is too old. Go to \string https://ctan.org and download an up-to-date version.}%
+ \ClassError{\ClassName}{Package iftex is too old. Go to \string https://ctan.org and download an up-to-date version.}{%
+ Your latex installation does not have an up-to-date version of the package iftex. You can get it at CTAN: \string https://ctan.org.}
}
-%% Test whether \DocumentMetadata has been loaded (Thank you Ulrike Fischer)
-\newif\if@asme@pdfmanagement
-% \IfPDFManagementActiveTF{\@asme@pdfmanagementtrue}{\@asme@pdfmanagementfalse}% New 2021/07/23, don't implement yet
-\ExplSyntaxOn
- \IfFormatAtLeastTF{2020/02/02}{%
- \bool_if:nTF
- {
- \bool_lazy_and_p:nn
- {\cs_if_exist_p:N \pdfmanagement_if_active_p:}
- { \pdfmanagement_if_active_p: }
- }
- {
- \@asme@pdfmanagementtrue
- }
- {
- \@asme@pdfmanagementfalse
- }
- }{\@asme@pdfmanagementfalse}
-\ExplSyntaxOff
-
-
%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
- family=asmeconf,
+ family=\ClassName,
prefix=asmeconf@,
setkeys=\kvsetkeys,
}
%%% set key [colorlinks] to have colored hyperlinks, rather than black links (use a key with new pdfmanagement, 2021/12/01)
-\define@key{asmeconf}{colorlinks}[colorlinks]{%
+\define@key{\ClassName}{colorlinks}[colorlinks]{%
\PassOptionsToPackage{#1}{hyperref}%
}
@@ -182,12 +184,11 @@
\ifthenelse{\equal{#1}{\ac@main}}{\ac@cyrillictrue\def\ac@TtwoA{T2A}}{\relax}% comparing strings
}
-\define@key{asmeconf}{main}[english]{%
+\define@key{\ClassName}{main}{% remove default 2024/07/26, to avoid conflict with subsequent logic
\PassOptionsToPackage{main=#1,#1}{babel}% added #1 resolves conflict of russianb.ldf & ukrainianb.ldf under "main=".
\ac@mainsettrue
\ifthenelse{\equal{#1}{english}}{%
- \PassOptionsToPackage{pdflang=en}{hyperref}}{%
- \LogNote{Selecting #1 as the primary language}%
+ \ClassNoteNoLine{\ClassName}{Selecting #1 as the primary language}%
\ifthenelse{\equal{#1}{greek}}{%
\ac@greektrue
\def\ac@LGR{LGR}%
@@ -201,7 +202,7 @@
\@FindCyr{russian;belarusian;bulgarian;macedonian;serbianc;ukrainian}
}%
}
-\define@key{asmeconf}{vietnamese}[]{%
+\define@key{\ClassName}{vietnamese}[]{%
\RequirePackage[vietnamese=nohyphenation]{hyphsubst}% using key, not option, to allow loading package w/o babel warning.
\PassOptionsToPackage{vietnamese.noencoding}{babel}% modified.noencoding suppresses unnecessary warning about inputenc
\ac@vietnamesetrue
@@ -209,21 +210,20 @@
}
\DeclareDefaultOption{}% suppress warnings about unused options
-\ProcessKeyvalOptions{asmeconf}
+\ProcessKeyvalOptions{\ClassName}
-%% if main language was not chosen explicitly, default to English
+%% if main language was not chosen explicitly, ensure default to English
\ifac@mainset\relax\else
\PassOptionsToPackage{main=english}{babel}%
- \PassOptionsToPackage{pdflang=en}{hyperref}
- \ClassInfo{asmeconf}{Selecting English as the primary language, since main= not set}%
+ \ClassInfo{\ClassName}{Selecting English as the primary language, since main= not set}%
\fi
%% Turn off these keys now that we're done with them
-\def\@KeyFamily{asmeconf}
+\def\@KeyFamily{\ClassName}
\NewDocumentCommand\ac@DisableOption{m}{%
\DisableKeyvalOption[%
action=ignore,%
- class=asmeconf%
+ class=\ClassName%
]{#1}{\@KeyFamily}%
}
\NewDocumentCommand\@DisableKeys{>{\SplitList{;}}m}{\ProcessList{#1}{\ac@DisableOption}}
@@ -249,7 +249,7 @@
\ifpdftex
\PassOptionsToPackage{largesc=true}{newtxtext}% largesc is a boolean key in newtxtext
\else
- \ClassWarningNoLine{asmeconf}{largesc option is not available under luaLateX. It will be ignored}%
+ \ClassWarningNoLine{\ClassName}{largesc option is not available under luaLateX. It will be ignored}%
\fi
}
@@ -261,21 +261,23 @@
%% option to hyphenate the inconsolata typewriter font [hyphenate] and to issue a warning when that's done.
\DeclareOption{hyphenate}{%
\ifac@fontspec
- \ClassWarningNoLine{asmeconf}{hyphenate option is not supported by fontspec, will be ignored}%
+ \ClassWarningNoLine{\ClassName}{hyphenate option is not supported by fontspec. It will be ignored}%
\else
\PassOptionsToPackage{hyphenate}{inconsolata}% hyphenate is a key via xkeyval in inconsolata
- \LogNote{Allowing hyphenation of typewriter font}%
+ \ClassNoteNoLine{\ClassName}{Allowing hyphenation of typewriter font}%
\fi
}
%% option for monospacing in inconsolata typewriter font [mono].
+\def\MonoNotMono{WordSpace={1,1,1}}% rescaled tt font to match pdf, 2024/07/28
\DeclareOption{mono}{%
\ifac@fontspec
- \def\MonoNotMono{}%
+ \def\MonoNotMono{WordSpace={1,0,0},PunctuationSpace={3}}% NB: these are the default WordSpace values. 20204/07/30
\else
\PassOptionsToPackage{mono}{inconsolata}% mono is a key via xkeyval in inconsolata
\fi
}
%% option for unslashed zero in inconsolata typewriter font [var0].
+\def\ssztwo{}% for Inconsolatazi4; default uses slashed zero, +ss02 uses regular zero
\DeclareOption{var0}{%
\ifac@fontspec
\def\ssztwo{+ss02}% stylistic alternate for regular zero
@@ -296,7 +298,7 @@
\newif\ifac@setpdfa\ac@setpdfafalse
\newif\ifac@pdfaone\ac@pdfaonefalse
-\if@asme@pdfmanagement\else
+\ifasme@pdfmanagement\else
\SetupKeyvalOptions{
family=pdfaopt,
@@ -308,7 +310,7 @@
%%% set key [pdfa] to activate pdf/a compliance (default is pdf/A-3u)
\define@key{pdfaopt}{pdf-a}[true]{%
\IfFormatAtLeastTF{2018/12/01}{\relax}{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2018/12/01 or later are necessary for the [pdf-a] option. Older formats may generate errors}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Meanwhile, you can remove the [pdf-a] option and try again}%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2018/12/01 or later are necessary for the [pdf-a] option. Older formats may generate errors}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Meanwhile, you can remove the [pdf-a] option and try again}%
}
\ac@setpdfatrue
\PassOptionsToPackage{pdfa}{hyperref}
@@ -344,7 +346,7 @@
%%%%%%%%%%%% PDF/A compliance related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\if@asme@pdfmanagement\else
+\ifasme@pdfmanagement\else
\ifpdftex
\ifac@pdfaone
\pdfminorversion=4 % for pdf/a-1 need version 4, not 7
@@ -353,7 +355,7 @@
\fi
\else
\ifluatex
- \ifac@setpdfa\ClassWarningNoLine{asmeconf}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use %
+ \ifac@setpdfa\ClassWarningNoLine{\ClassName}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use %
\protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{asmeconf}}%
\fi
\directlua{
@@ -367,7 +369,7 @@
end
}
\else
- \ClassError{asmeconf}{Please use either pdfLaTeX or LuaLaTeX}{This class has NOT been configured to support other engines, and the results will be unpredictable. Exit and rerun using either pdfLaTeX or LuaLaTeX.}%
+ \ClassError{\ClassName}{Please use either pdfLaTeX or LuaLaTeX}{This class has NOT been configured to support other engines, and the results will be unpredictable. Exit and rerun using either pdfLaTeX or LuaLaTeX.}%
\fi
\fi
\fi
@@ -381,19 +383,17 @@
\ifpdftex
\ifasmeconf@nofontspec
- \ClassWarningNoLine{asmeconf}{The [nofontspec] option requires LuaLaTeX. It will be ignored under pdfLaTeX}%
+ \ClassWarningNoLine{\ClassName}{The [nofontspec] option requires LuaLaTeX. It will be ignored under pdfLaTeX}%
\fi
\else
\ifasmeconf@nofontspec
- \ClassWarningNoLine{asmeconf}{The [nofontspec] option has been issued. LuaLaTeX will run without font support}%
+ \ClassWarningNoLine{\ClassName}{The [nofontspec] option has been issued. LuaLaTeX will run without font support}%
\else
\IfFormatAtLeastTF{2020/10/01}{%
\ac@fontspectrue
\fontspecloadedtrue
- \def\ssztwo{}% for Inconsolatazi4; default uses slashed zero, +ss02 uses regular zero
- \def\MonoNotMono{WordSpace={1,1.33,1.67}}% for Inconsolatazi4; default allows word spacing (is not mono)
}{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX installations dated 2020/10/01 or later are needed to run LuaLaTeX with the fontspec package. Fontspec will NOT be loaded. Language support will be minimal}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You may alternatively choose the [nofontspec] option.}%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX installations dated 2020/10/01 or later are needed to run LuaLaTeX with the fontspec package. Fontspec will NOT be loaded. Language support will be minimal}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You may alternatively choose the [nofontspec] option.}%
}
\fi
\fi
@@ -403,7 +403,7 @@
\PassOptionsToPackage{japanese}{babel}%
\ac@japanesetrue
\else
- \ClassWarningNoLine{asmeconf}{[japanese] option is supported only under LuaLaTeX with fontspec. It will be ignored}%
+ \ClassWarningNoLine{\ClassName}{[japanese] option is supported only under LuaLaTeX with fontspec. It will be ignored}%
\fi
}
@@ -426,23 +426,23 @@
% Several languages do not have .ldf files to load. Babel will call these on demand.
%
-\DeclareOption{arabic}{\ClassError{asmeconf}{Do not specify "arabic" as a class option}{Instead, give the option [bidi=basic] and specify "arabic" when you call the language within your document.}}
+\DeclareOption{arabic}{\ClassError{\ClassName}{Do not specify "arabic" as a class option}{Instead, give the option [bidi=basic] and specify "arabic" when you call the language within your document.}}
%
-\DeclareOption{bengali}{\ClassError{asmeconf}{Do not specify "bengali" as a class option}{Babel does not have an ldf file for Bengali. Instead, specify "bengali" when you call the language within your document. No class option is needed.}}
+\DeclareOption{bengali}{\ClassError{\ClassName}{Do not specify "bengali" as a class option}{Babel does not have an ldf file for Bengali. Instead, specify "bengali" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{chinese-simplified}{\ClassError{asmeconf}{Do not specify "chinese-simplified" as class option}{Babel does not have an ldf file for simplified Chinese. Instead, specify "chinese-simplified" when you call the language within your document. No class option is needed.}}
+\DeclareOption{chinese-simplified}{\ClassError{\ClassName}{Do not specify "chinese-simplified" as class option}{Babel does not have an ldf file for simplified Chinese. Instead, specify "chinese-simplified" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{chinese-traditional}{\ClassError{asmeconf}{Do not specify "chinese-traditional" as class option}{Babel does not have an ldf file for traditional Chinese. Instead, specify "chinese-traditional" when you call the language within your document. No class option is needed.}}
+\DeclareOption{chinese-traditional}{\ClassError{\ClassName}{Do not specify "chinese-traditional" as class option}{Babel does not have an ldf file for traditional Chinese. Instead, specify "chinese-traditional" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{chinese}{\ClassError{asmeconf}{Do not specify "chinese" as a class option}{Instead, specify either "chinese-simplified" or "chinese-traditional" when you call the language within your document. No class option is needed.}}
+\DeclareOption{chinese}{\ClassError{\ClassName}{Do not specify "chinese" as a class option}{Instead, specify either "chinese-simplified" or "chinese-traditional" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{hindi}{\ClassError{asmeconf}{Do not specify "hindi" as a class option}{Babel does not have an ldf file for Hindi. Instead, specify "hindi" when you call the language within your document. No class option is needed.}}
+\DeclareOption{hindi}{\ClassError{\ClassName}{Do not specify "hindi" as a class option}{Babel does not have an ldf file for Hindi. Instead, specify "hindi" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{marathi}{\ClassError{asmeconf}{Do not specify "marathi" as a class option}{Babel does not have an ldf file for Marathi. Instead, specify "marathi" when you call the language within your document. No class option is needed.}}
+\DeclareOption{marathi}{\ClassError{\ClassName}{Do not specify "marathi" as a class option}{Babel does not have an ldf file for Marathi. Instead, specify "marathi" when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{korean}{\ClassError{asmeconf}{Do not specify "korean" as class option}{Babel does not have an ldf file for Korean. Instead, specify "korean"when you call the language within your document. No class option is needed.}}
+\DeclareOption{korean}{\ClassError{\ClassName}{Do not specify "korean" as class option}{Babel does not have an ldf file for Korean. Instead, specify "korean"when you call the language within your document. No class option is needed.}}
%
-\DeclareOption{tamil}{\ClassError{asmeconf}{Do not specify "tamil" as a class option}{Babel does not have an ldf file for Tamil. Instead, specify "tamil" when you call the language within your document. No class option is needed.}}
+\DeclareOption{tamil}{\ClassError{\ClassName}{Do not specify "tamil" as a class option}{Babel does not have an ldf file for Tamil. Instead, specify "tamil" when you call the language within your document. No class option is needed.}}
%% Suppress warnings about unused global options
\DeclareOption*{}
@@ -462,23 +462,18 @@
\RequirePackage{graphicx} % removed obsolete options, 2023/11/19
\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}
-% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error, in preparation for tagged pdf
-\IfFormatAtLeastTF{2021/11/15}{
- \relax
-}{
- \AtBeginDocument{
- \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax}
- }
-}
%%%%%%%%%%%% Table related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{booktabs}
\RequirePackage{array}
-\RequirePackage{dcolumn}% alignment on decimal places
-\newcolumntype{d}[1]{D{.}{.}{#1}}% NB: This conflicts with babel's Spanish language option which makes "." an active character.
- % To use "," separator, put this command in your preamble: \newcolumntype{d}[1]{D{,}{,}{#1}}
+\RequirePackage{dcolumn}% alignment on decimal places
+% use d{x.y} to center on "." as in "12.234"
+\newcolumntype{d}[1]{D{.}{.}{#1}}
+% NB: The above conflicts with babel's Spanish language option which makes "." an active character.
+% Instead, to use "," as the decimal separator, choose columntype "," (as in "12,234")
+\newcolumntype{,}[1]{D{,}{,}{#1}}
%%%%%%%%% Caption related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -507,7 +502,7 @@
\captionsetup[table]{labelformat=uppercase,labelfont={sf,bf,small},textfont={sf,bf,small},textformat=boldmath,labelsep=colon,skip=0.5\baselineskip} %name=TABLE,
\fi
-%% This construction avoids a failure of hyperref in relation to uppercase caption
+%% This construction avoids a failure of hyperref in relation to uppercase captions
%% Discussion: https://tex.stackexchange.com/questions/375695/maketextuppercase-inside-table-captions
\AtBeginDocument{
\let\scaption\caption
@@ -542,8 +537,17 @@
\RequirePackage[no-math]{fontspec}
\defaultfontfeatures{Ligatures=TeX,}
%
- \setmainfont{TeXGyreTermesX}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
- WordSpace = {1,1.4,1},%% This stretch matches newtxtext a little better. 1.4
+ \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If you DON'T have these fonts, you will see ERROR messages!}
+%
+ \IfFontExistsTF{TeX Gyre Termes}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} }
+ \IfFontExistsTF{texgyreheros}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} }
+ \IfFontExistsTF{Inconsolatazi4}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} }
+%
+ % The newtx package includes a modified version of TeXGyreTermes called TexGyreTermesX, which is loaded here.
+ % Can fall back to TeXGyreTermes if desired, available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
+ \setmainfont{TeXGyreTermesX}[
+ WordSpace = {1,1.6,1.2},%% This stretch matches newtxtext a little better; rescaled 2024/07/28
+ PunctuationSpace = 1.332,%% match fontdimen7 to newtxtext, 2024/07/28
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -552,7 +556,7 @@
Numbers = Lining,
]
\setsansfont{texgyreheros}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
- WordSpace = {1,1.4,1},
+ WordSpace = {1,1,1},% These spacings match newtxtext; rescaled to unity 2024/07/28
Extension = .otf,
UprightFont = *-regular,
ItalicFont = *-italic,
@@ -562,7 +566,6 @@
Scale=0.91,% same as for newtx; former value 0.9 too small 2022/01/15
]
\setmonofont{Inconsolatazi4}[% This otf font ships with the LaTeX Inconsolata package (it's in TeX Live)
- \MonoNotMono,% match newtxtext if we enable wordspacing
Scale=1.05,% rescaled from 1, 22/03/10
Extension = .otf,
UprightFont = *-Regular,
@@ -570,20 +573,22 @@
BoldFont = *-Bold,
BoldItalicFont = *-Bold,% has no italic face
RawFeature = {+ss01,\ssztwo,+ss03},
- ]
+ \MonoNotMono,% match newtxtext if we enable wordspacing; note wordspace def'd in option above.
+ ]
%
% For many languages, using babel commands helps font loading.
+ % Switched Harbbuzz to OpenType throughout, 2024/07/28
% Noto fonts are available at https://github.com/googlefonts
\def\Noto@scale{0.92}
\def\Ara@scale{0.91}% For the serif font only
\def\NotoBan@scale{0.92}% 1.} should probably stay consistent within the Noto family.
\def\NotoDev@scale{0.92}% 1.} should probably stay consistent within the Noto family.
\def\NotoTam@scale{0.92}
- \def\Noto@color{black}
+ \def\Noto@color{Color=black}% 2024/07/28. Changed this diagnostic command to by-pass a bug in luatexja-fontspec.
%
\babelprovide[import, language=Default]{arabic}
\babelfont [arabic]{rm}[Scale=\Ara@scale,
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% don't use italic face, I am told
@@ -591,7 +596,7 @@
BoldItalicFont = *-Bold,% don't use italic face, I am told
]{Amiri}% NotoNaskhArabic}% Some readers prefer Amiri font
\babelfont [arabic]{sf}[Scale=\Noto@scale,
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Extension =.ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% font has no italic face
@@ -599,7 +604,7 @@
BoldItalicFont = *-SemiBold,% font has no italic face
]{NotoSansArabic}%DejaVuSans}%NotoKufiArabic}% .otf,%
\babelfont [arabic]{tt}[%
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Extension =.ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -610,9 +615,9 @@
%
\babelprovide[import,language=Default,script=Bangla]{bengali}
\babelfont [bengali]{rm}[%
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoBan@scale,% same as Devanagari
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -620,9 +625,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSerifBengali}
\babelfont [bengali]{sf}[%
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoBan@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -630,9 +635,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSansBengali}
\babelfont [bengali]{tt}[
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoBan@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -646,7 +651,7 @@
\babelprovide[import,language=Default,script=Cyrillic]{#1}
\babelfont [#1]{rm}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -655,7 +660,7 @@
]{NotoSerif}
\babelfont [#1]{sf}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -664,7 +669,7 @@
]{NotoSans}
\babelfont [#1]{tt}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -676,14 +681,14 @@
\setlocalecaption{serbian-cyrillic}{abstract}{Сажетак}% NB: utf-8
%
% Devanagari languages
- \newfontscript{Devanagari}{deva}% HarfBuzz has some problems in Hindi, see babel manual Sect. 1.13 (main issue is ra)
+ \newfontscript{Devanagari}{deva}% OpenType has some problems in Hindi, see babel manual Sect. 1.13 (main issue is ra)
\NewDocumentCommand\@LoadBabelDev{>{\SplitList{;}}m}{\ProcessList{#1}{\@DevBabel}}
\NewDocumentCommand\@DevBabel{m}{%
\babelprovide[import,language=Default]{#1}
\babelfont [#1]{rm}[%
-% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi...
+% %Renderer=OpenType,% Marathi and Hindi may respond differently...
Scale=\NotoDev@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -691,9 +696,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSerifDevanagari}
\babelfont [#1]{sf}[%
-% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi...
+% %Renderer=OpenType,% % Marathi and Hindi may respond differently...
Scale=\NotoDev@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -701,9 +706,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSansDevanagari}
\babelfont [#1]{tt}[
-% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi...
+% %Renderer=OpenType,% % Marathi and Hindi may respond differently...
Scale=\NotoDev@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -719,7 +724,7 @@
\babelfont [greek]{rm}[%
Scale=\Noto@scale,
WordSpace={1.1},% increase word spacing slightly
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -729,7 +734,7 @@
\babelfont [greek]{sf}[%
Scale=\Noto@scale,
WordSpace={1.1},% increase word spacing slightly
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -738,7 +743,7 @@
]{NotoSans}
\babelfont [greek]{tt}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -747,11 +752,14 @@
]{NotoSansMono}
%
% Japanese
+ % luatexja-fontspec seems to want lc "color" now, rather than normal "Color", as before. Commenting out.
+ % NB: luatexja-fontspec color breakage appears to be global.
\ifac@japanese
- \RequirePackage[match]{luatexja-fontspec}% japanese typesets *much* better with this loaded
+ \def\Noto@color{}% by-pass bug in luatexja-fontspec, 2024/07/28.
+ \RequirePackage[no-math]{luatexja-fontspec}% japanese typesets *much* better with this loaded
\setmainjfont{NotoSerifCJKjp}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -760,7 +768,7 @@
]
\setsansjfont{NotoSansCJKjp}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -769,7 +777,7 @@
]
\setmonojfont{NotoSansMonoCJKjp}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
BoldFont = *-Bold,
@@ -780,7 +788,7 @@
% Need at least one of the following to load the Japanese dictionary.
\babelfont [japanese]{rm}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -789,7 +797,7 @@
]{NotoSerifCJKjp}% Scale estimated
\babelfont [japanese]{sf}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -798,7 +806,7 @@
]{NotoSansCJKjp}
\babelfont [japanese]{tt}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -812,7 +820,7 @@
\babelprovide[import,language=Default]{korean}
\babelfont [korean]{rm}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -821,7 +829,7 @@
]{NotoSerifCJKkr}
\babelfont [korean]{sf}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -830,7 +838,7 @@
]{NotoSansCJK}
\babelfont [korean]{tt}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -843,7 +851,7 @@
\babelprovide[import,language=Default]{chinese-simplified}
\babelfont [chinese-simplified]{rm}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -852,7 +860,7 @@
]{NotoSerifCJKsc}
\babelfont [chinese-simplified]{sf}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -861,7 +869,7 @@
]{NotoSansCJK}
\babelfont [chinese-simplified]{tt}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
% Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -871,9 +879,9 @@
%
% Traditional Chinese (includes characters for Cantonese also)
\babelprovide[import,language=Default]{chinese-traditional}
- \babelfont [chinese-tradiational]{rm}[%
+ \babelfont [chinese-traditional]{rm}[% fixed 2024/07/28
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -882,20 +890,20 @@
]{NotoSerifCJKtc}
\babelfont [chinese-traditional]{sf}[%
Scale=\Noto@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttc,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
BoldFont = *-Bold,
BoldItalicFont = *-Bold,% has no italic face
]{NotoSansCJK}
- \babelfont [chinese-traditional]{tt}[Scale=\Noto@scale,Color=\Noto@color]{NotoSansMonoCJKtc}
+ \babelfont [chinese-traditional]{tt}[Scale=\Noto@scale,\Noto@color]{NotoSansMonoCJKtc}
%
\babelprovide[import,language=Default]{tamil}
\babelfont [tamil]{rm}[%
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoTam@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -903,9 +911,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSerifTamil}
\babelfont [tamil]{sf}[%
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoTam@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -913,9 +921,9 @@
BoldItalicFont = *-Bold,% has no italic face
]{NotoSansTamil}
\babelfont [tamil]{tt}[
- Renderer=HarfBuzz,
+ %Renderer=OpenType,
Scale=\NotoTam@scale,
- Color=\Noto@color,
+ \Noto@color,
Extension = .ttf,
UprightFont = *-Regular,
ItalicFont = *-Regular,% has no italic face
@@ -949,8 +957,13 @@
\RequirePackage{bm}% load after all math to give further access to bold math
-%% Ensure that the current font is used for equation tags, not \normalfont as set by amsmath
-\def\maketag@@@#1{\hbox{\m@th#1}}
+% To free \eqref from the normal font (e.g., for use in section headings or captions). Revised 2024/07/28
+\renewcommand{\eqref}[1]{\textup{\hbox{\m@th{(\ignorespaces\ref{#1}\unskip\@@italiccorr)}}}}
+%
+% amsmath def: \newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
+% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}
+% \def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
+
% The article class calls \sloppy in two-column mode (\tolerance 9999, \emergencystretch 3em)
% The following adjustments affect line breaking; the values below are intended to produce
@@ -1000,11 +1013,11 @@
\SetMathAlphabet{\mathsf}{sans}{\encodingdefault}{\sfdefault}{m}{n}% \mathsf is upright.
-% Nice solution from DPC to prevent aux file errors (due to active characters from babel) when switching from pdflatex to lualatex.
-\ifx\directlua\undefined
- \AtBeginDocument{\immediate\write\@auxout{\detokenize{%
- \ifx\directlua\undefined\else\endinput\fi}}}
-\fi
+%% Nice solution from DPC to prevent aux file errors (due to active characters from babel) when switching from pdflatex to lualatex. Disabled, 2024/07/28
+%\ifx\directlua\undefined
+% \AtBeginDocument{\immediate\write\@auxout{\detokenize{%
+% \ifx\directlua\undefined\else\endinput\fi}}}
+%\fi
%%%%%%%% Footers and Footnotes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1034,7 +1047,6 @@
\fancyfoot[CE,CO]{\@SetFont\thepage\\[1ex]\footnotesize The United States Government retains, and by accepting the article for publication, the publisher acknowledges that the United States Government retains, a non-exclusive, paid-up, irrevocable, worldwide license to publish or reproduce the published form of this work, or allow others to do so, for United States Government purposes.}
\fi
-% was missing from earlier versions...?
\ifasmeconf@govtsome
\newgeometry{left=0.5in, right=0.5in, top=0.5in, bottom = 1.in, footskip = 0.3in, columnsep = 0.38in}
\fancyfoot[RO,RE]{}
@@ -1088,39 +1100,36 @@
\titlespacing\subsubsection{\parindent}{6pt plus 3pt minus 2pt}{0pt plus 2pt minus 1pt} % from 12 4 3, 2019/7/7
%% Special handling of the appendices
-%% Assumes that appendices are the last content in paper
-\RenewDocumentCommand{\appendix}{}{%
- \setcounter{section}{0}
- \pdfbookmark[0]{\appendicesname}{appendices}
- \renewcommand\thesection{\Alph{section}}
- \titleformat{\section}{\mathversion{sansbold}\bfseries\sffamily\raggedright}{\MakeTextUppercase{\appendixname}\ \thesection.}{0.5em}{\MakeTextUppercase}
-}
-
-%% This patches titlesec's unprotected re-definition of \footnote.
-%% See discussion here: https://github.com/jbezos/titlesec/issues/48
+%% Assumes that appendices are the last content in paper
+%% Code revised to better support tagged pdf, 2024/07/26.
+\patchcmd{\appendix}{%
+ \setcounter{subsection}{0}%
+}{%
+ \setcounter{subsection}{0}\pdfbookmark[1]{\appendicesname}{appendices}%
+}{}{}
+\apptocmd{\appendix}{\titleformat{\section}[block]{\mathversion{sansbold}\bfseries\sffamily\raggedright}{\MakeTextUppercase{\appendixname}\ \thesection.}{0.5em}{\MakeTextUppercase}}{}{}
+% Changed to block layout (rather than default hanging) whilst retaining \raggedright, since "Appendix X." is a very wide hanging indent. 2024/07/26
+
+%% This patches titlesec's unprotected re-definition of \footnote. See discussion here: https://github.com/jbezos/titlesec/issues/48
%% Without this patch, recent versions of LaTeX will require \protect\footnote in section headings.
-%% This issue may be corrected in titlesec, but keeping the patch anyway.
+%% This issue may be corrected in titlesec, but keeping the patch for backward compatibility.
\patchcmd{\ttl@select}{\def\footnote}{\protected\def\footnote}{\typeout{Asmeconf.sty patched titlesec to have protected def of footnote}}{}
%%%%%%%%%% Hyperref, bookmarks, and PDF/A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this *legacy* approach.
\ifpdftex
- %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation.
- \IfFormatAtLeastTF{2020/10/01}{\relax}{%
- \pdfgentounicode=1 %% enable CMaps; has moved into the latex kernel Oct 2020
- \input glyphtounicode.tex %% lists of mappings; has moved into the latex kernel Oct 2020
- }
+ %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation.
+ %%% as of 2024/07/28, these are still necessary with \DocumentMetadata{pdfstandard=A-3u}. Note: glyphtounicode-cmex.tex is now in latex-lab.
\InputIfFileExists{glyphtounicode-cmr.tex}{}{} %% additional mappings
\InputIfFileExists{glyphtounicode-ntx.tex}{}{} %% additional mappings
\ifac@setpdfa
- %%%% pdfmanagement options, from Ulrike Fischer 2021/06/12
- \if@asme@pdfmanagement
- \ClassInfo{asmeconf}{pdfmanagement is defined. Class file will not load a color profile}
+ %% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this *legacy* approach.
+ \ifasme@pdfmanagement
+ \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load a color profile}
\else
- \ClassInfo{asmeconf}{NOTE: pdfmanagement not defined. Class file will load a color profile}%
+ \ClassInfo{\ClassName}{NOTE: pdfmanagement not defined. Class file will load a color profile}%
%%% a fairly generic RGB color profile, aimed at on-screen rendering (not print production)
\immediate\pdfobj stream attr{/N 3} file{sRGB.icc}
\pdfcatalog{%
@@ -1158,20 +1167,20 @@
\urlstyle{same} % don't switch to typewriter font for urls
\RequirePackage{doi} % supports the nasty characters in some doi's
\renewcommand{\doitext}{DOI } % change to this from default value, {doi:}, per ASME specification
-\RequirePackage{bookmark} % improves handling of pdf bookmarks
\providecommand*{\toclevel@subfigure}{1}% <== to address unknown bookmark level of subfigure. 2021/12/24
\providecommand\hrefurl[2]{\href{#1}{#2}}% to address certain issues around URL recognition with new pdf management code, 2021/12/02
-\if@asme@pdfmanagement
- \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp}
+\ifasme@pdfmanagement
+ \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp and bookmark packages}
\else
+ \RequirePackage{bookmark}% improves handling of pdf bookmarks
\RequirePackage{hyperxmp}% improve transfer of metadata to pdf
% Patch bug in hyperxmp, unless a more recent version is used.
\ifdefined\hyxmp@no@bad@parts% \hyxmp@no@bad@parts is not def'd in TeX Live 2019 or older
- \@ifpackagelater{hyperxmp}{2022/10/15}{% v5.11 or later
+ \IfPackageAtLeastTF{hyperxmp}{2022/10/15}{% v5.11 or later
\relax
}{%
\newcount\hypxmp@tempcnt
@@ -1180,13 +1189,11 @@
\hyxmp@pdfstringdef\@pdfapart{\the\hypxmp@tempcnt}%
}
}
- \else
- \relax
\fi
\fi
-%%% ==> recent and evolving development of \pdfstring removes all robust commands from bookmarks, so
-%%% by early 2024, errors are not present; however, these commands serve to still suppress warnings.
+%%% ==> recent development of \pdfstring removes all robust commands from bookmarks, so that
+%%% by early 2024, errors are not present; these commands serve to still suppress warnings, however.
%% Since \bm may be useful in headings, this fix will reduce frequency with which
%% alternate pdfstrings must be given in revised section command as \section[pdfstring]{texstring}
@@ -1212,7 +1219,7 @@
%% Ensure that tag color does not follow \eqref into bookmarks, 2020/02/28
\pdfstringdefDisableCommands{%
- \def\eqref#1{(\ref{#1})}%
+ \def\eqref#1{(\ref*{#1})}% \ref* is from hyperref
}
% Let's make sure footnotes in section headings don't break pdf bookmarks.
@@ -1222,7 +1229,6 @@
}
-
%% Let's also add \footnote to the \TextUppercase exception list, so that footnote text won't be capitalized
%% if given in section headings. Ditto for \eqref
%
@@ -1244,13 +1250,12 @@
\renewcommand{\linenumberfont}{\normalfont\footnotesize\color{red}}
\AtBeginDocument{\linenumbers}
\ifasmeconf@balance
- \ClassWarningNoLine{asmeconf}{Package lineno loaded, so final column balancing will be disabled}%
+ \ClassWarningNoLine{\ClassName}{Package lineno loaded, so final column balancing will be disabled}%
\fi
%%% Patch to allow line numbering in AMS math environments.
%%% This patch is for lineno versions earlier than v5.2 [2023/05/19]. As of mid-2023, the lineno package
- %%% has been corrected to account for the AMS math environments. Retaining temporarily for backward compatibility.
+ %%% has been corrected to account for the AMS math environments. Retaining for backward compatibility.
%%% postdisplaypenalty adjusted to avoid extra line number at end, see: https://tex.stackexchange.com/a/461192/
- %%% multline has some additional problem that puts an extra line number above it.
\IfPackageAtLeastTF{lineno}{2023/05/19}{\relax}{
\NewDocumentCommand{\ac@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}}
%
@@ -1270,7 +1275,7 @@
\ifasmeconf@balance
\RequirePackage{flushend}% flushend package is NOT compatible with lineno
\AtEndDocument{\flushcolsend}%
- \LogNote{Calling flushend package to balance column height on last page}%
+ \ClassNoteNoLine{\ClassName}{Calling flushend package to balance column height on last page}%
\fi%
\fi
\providecommand{\@LN@col}[1]{\relax}% Enable dropping lineno option without trashing .aux file
@@ -1364,7 +1369,10 @@
\NewDocumentCommand\PaperNo{m}{\gdef\@PaperNo{#1}}
\providecommand\@PaperNo{\protect\phantom{NO.}}
-\NewDocumentCommand\PaperTitle{m}{\gdef\@PaperTitle{#1}}
+\NewDocumentCommand\PaperTitle{m}{%
+ \gdef\@PaperTitle{#1}%
+ \gdef\@title{#1}% added 2024/07/28
+}
\providecommand\@PaperTitle{\hbox{ }}
\NewDocumentCommand\@HeaderTitle{}{%
@@ -1419,7 +1427,7 @@
%%%% option to use the traditional grid layout of authors or the inline style
\ifasmeconf@grid
- \LogNote{Selected option for a grid of author blocks}%
+ \ClassNoteNoLine{\ClassName}{Selected option for a grid of author blocks}%
%%%%%%%%%%%%%%%%%%%% Gridded author layout %%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1463,7 +1471,7 @@
\ifblank{#1}{%
\expandafter\xdef\csname aut@\theauthorcnt\endcsname{}%
\expandafter\xdef\csname autaffil@\theauthorcnt\endcsname{-1}
- \ClassWarning{asmeconf}{Missing author name, check for extra comma}%
+ \ClassWarning{\ClassName}{Missing author name, check for extra comma}%
}{\expandafter\xdef\csname aut@\theauthorcnt\endcsname{#1}%
}%
}% defines \aut@authorcnt as Name #1
@@ -1547,12 +1555,18 @@
\fi
\fi
\ifnum\value{authorno}>15
- \ClassWarningNoLine{asmeconf}{The class is programmed for up to 15 author blocks. If some of your authors are at the same institution, %
+ \ClassWarningNoLine{\ClassName}{The class is programmed for up to 15 author blocks. If some of your authors are at the same institution, %
you may put more than one name above a single address. If you need more than 15 author blocks, try using the in-line author style %
instead of the [grid] option}
\fi
}% end whiledo
}
+ \ExplSyntaxOn
+ % next three are for backward compatibility
+ \cs_if_exist:NF \cs_gset:Npe { \cs_generate_variant:Nn \cs_gset:Npn {Npe} }
+ \cs_if_exist:NF \tl_set:Ne { \cs_generate_variant:Nn \tl_set:Nn {Ne} }
+ \cs_if_exist:NF \tl_put_right:Ne { \cs_generate_variant:Nn \tl_put_right:Nn {Ne} }
+
\NewDocumentCommand\@ConstructAuthorBlock{}{%
\ifnum\value{authorno}>3
\JoinCoffins\firstrowauthorblock[hc,b]\secondrowauthorblock[hc,t](0pt, -1.5\baselineskip)
@@ -1566,8 +1580,34 @@
\ifnum\value{authorno}>12
\JoinCoffins\firstrowauthorblock[hc,b]\fifthrowauthorblock[hc,t](0pt, -1.5\baselineskip)
\fi
- \centerline{\TypesetCoffin\firstrowauthorblock}%% in this instance, \centerline is better than \centering
+ \centerline{\TypesetCoffin\firstrowauthorblock}% in this instance, \centerline is better than \centering
+ \__asmeconf_concataut:
+ \cs_gset:Npe \@author { \tl_use:N \g_asmeconf_authors_tl }
+ %\iow_term:e { \tl_use:N \g_asmeconf_authors_tl }% diagnostic only
}
+ % build comma-separated list of author names
+ \cs_new_protected:Nn \__asmeconf_concataut: {
+ \tl_new:N \g_asmeconf_authors_tl
+ \int_set:Nn \l_tmpa_int {1}
+ \int_new:N \l__asmeconf_noauts
+ \int_set:Nn \l__asmeconf_noauts { \value{authorcnt} }
+ \int_do_until:nNnn { \l_tmpa_int } > { \l__asmeconf_noauts }
+ {
+ \tl_set:Ne \l_tmpa_tl {\use:c { aut@ \int_use:N \l_tmpa_int } }
+ \tl_replace_all:Nnn \l_tmpa_tl {\unhbox \voidb@x \protect \penalty \@M \ } {~}
+ % If tex unbreakable space character "~" has expanded, replace by a simple space, which is "~" in Expl3 syntax
+ \tl_remove_all:Nn \l_tmpa_tl { \JointFirstAuthor }
+ \tl_replace_all:Nnn \l_tmpa_tl { \CorrespondingAuthor } { \use_none:n }
+ \tl_replace_all:Nnn \l_tmpa_tl { \affil } { \use_none:n }
+ \tl_replace_all:Nnn \l_tmpa_tl { \xdef } { \use_none:nn }
+ \tl_put_right:Ne \g_asmeconf_authors_tl \l_tmpa_tl
+ \int_compare:nNnT { \l_tmpa_int } < { \l__asmeconf_noauts} {
+ \tl_put_right:Ne \g_asmeconf_authors_tl { ,~ }
+ }
+ \int_incr:N \l_tmpa_int
+ }
+ }
+ \ExplSyntaxOff
%%% otherwise use the new compact layout of authors
\else
@@ -1576,13 +1616,35 @@
\NewCoffin{\AffiliationBlock}
\NewCoffin{\AffiliationsBlock}
\AtBeginDocument{\SetHorizontalCoffin\AffiliationsBlock{}}% corrected 2021/12/01
-
+
+ \ExplSyntaxOn
+ \cs_if_exist:NF \cs_gset:Npe { \cs_generate_variant:Nn \cs_gset:Npn {Npe} }
+ \cs_if_exist:NF \tl_gset:Ne { \cs_generate_variant:Nn \tl_gset:Nn {Ne} }
+
%% NB: \parbox width to \textwidth (full page) not \linewidth (single column)
\NewDocumentCommand\SetAuthors{m}{%
- \SetHorizontalCoffin\AuthorBlock{%
+ \SetHorizontalCoffin\AuthorBlock{% ignoring the bug in testphase tagging
\parbox{\textwidth}{\centering\sffamily\bfseries\ignorespaces#1\ignorespaces}%
+ % NB: in vertical mode \parbox needs \noindent ahead of it, _inside_ vertical coffin
+ % \SetVerticalCoffin\AuthorBlock{\textwidth}{% 2024/07/30, test a vertical coffin alternative
+ % \centering\sffamily\bfseries\ignorespaces#1\ignorespaces%
+ \__asmeconf_striptokens:n {#1}
+ \cs_gset:Npe \@author { \tl_use:N \g_asmeconf_authors_tl }% set \@author = list of authors, 2024/07/31
}
}
+ % strip \affil{..}, \JointFirstAuthor, \CorrespondingAuthor{...} from argument
+ \cs_new_protected:Nn \__asmeconf_striptokens:n {
+ \tl_set:Nn \l_tmpa_tl {#1}
+ \regex_replace_all:nnN { \cA\~ } {\ } \l_tmpa_tl % replace ~ by space in author list
+ %\tl_replace_all:Nnn \l__asmeconf_authors_tl {\ } {~}% change "\ " to space (but why? for text we would want this)
+ \tl_remove_all:Nn \l_tmpa_tl { \JointFirstAuthor }
+ \tl_replace_all:Nnn \l_tmpa_tl { \affil } { \use_none:n }
+ \tl_replace_all:Nnn \l_tmpa_tl { \CorrespondingAuthor } { \use_none:n }
+ \tl_new:N \g_asmeconf_authors_tl
+ \tl_gset:Ne \g_asmeconf_authors_tl \l_tmpa_tl
+ \iow_term:e { \tl_use:N \g_asmeconf_authors_tl }% diagnostic only
+ }
+ \ExplSyntaxOff
\def\@makefnmark{\hbox{\@textsuperscript{\sffamily\@thefnmark}}}%
@@ -1598,14 +1660,14 @@
%%% Affiliation mark
\NewDocumentCommand{\affil}{m}{%
\ifblank{#1}{%
- \ClassWarning{asmeconf}{Empty affiliation tag}%
+ \ClassWarning{\ClassName}{Empty affiliation tag}%
\@gobble% 9 Dec 2021, addresses modification for commas
}{\bfseries\footnotemark[#1]}%
}
%%% to deal with sequential notes as, e.g., "1,*", or "1,2,*" %%%%%%%%%%
\ExplSyntaxOn
- \cs_new:Npn \__asmecome_OtherNoteComma:n {
+ \cs_new:Npn \__asmeconf_OtherNoteComma:n {
\peek_meaning:NTF \affil
{ \textsuperscript{\mdseries,} }
{ \peek_meaning:NTF \CorrespondingAuthor
@@ -1614,11 +1676,11 @@
}
}
\cs_new_eq:NN \__saveAF \affil
- \cs_gset_protected:Npn \affil #1 { \__saveAF{#1} \__asmecome_OtherNoteComma:n }
+ \cs_gset_protected:Npn \affil #1 { \__saveAF{#1} \__asmeconf_OtherNoteComma:n }
\cs_new_eq:NN \__saveCA \CorrespondingAuthor
- \cs_gset_protected:Npn \CorrespondingAuthor #1 { \__saveCA{#1} \__asmecome_OtherNoteComma:n }
+ \cs_gset_protected:Npn \CorrespondingAuthor #1 { \__saveCA{#1} \__asmeconf_OtherNoteComma:n }
\cs_new_eq:NN \__saveJA \JointFirstAuthor
- \cs_gset_protected:Npn \JointFirstAuthor { \__saveJA \__asmecome_OtherNoteComma:n }
+ \cs_gset_protected:Npn \JointFirstAuthor { \__saveJA \__asmeconf_OtherNoteComma:n }
\ExplSyntaxOff
%%%
@@ -1633,7 +1695,6 @@
%%%% Make the title and author section
\NewDocumentCommand\MakeTitlePage{}{%
\twocolumn[
- \begin{@twocolumnfalse}
\@HeaderTitle
\vspace*{2\baselineskip}
\ifasmeconf@grid
@@ -1642,7 +1703,6 @@
\@SetAuthorBlock
\fi
\vspace*{3\baselineskip}
- \end{@twocolumnfalse}
]
\let\@makefnmark\savemakefnmark% restore footnote mark font
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
@@ -1767,12 +1827,12 @@
%%%%%%%%%%%%%%%%%% Times-like fonts for specific languages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifpdftex % Under lualatex, babel has problems with the following approach, which assumes that fontspec has not been loaded.
- % Recommend not to choose the [nofontspec] option.
+ % Recommend not to choose the [nofontspec] option.
% Several modifications made in response to newtx v1.71, 2022/03/14
\ifac@vietnamese
%
\IfFormatAtLeastTF{2020/02/02}{\relax}{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [vietnamese] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [vietnamese].}%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [vietnamese] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [vietnamese].}%
}
%
\AtBeginDocument{%
@@ -1831,7 +1891,7 @@
\ifac@greek
%
\IfFormatAtLeastTF{2020/02/02}{\relax}{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [greek] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [greek].}%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [greek] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [greek].}%
}
%
\AtBeginDocument{%
@@ -1906,7 +1966,7 @@
\ifac@cyrillic
%
\IfFormatAtLeastTF{2020/02/02}{\relax}{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the cyrillic language option with pdflatex, e.g., [russian]}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option calling a cyrillic-alphabet language.}%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the cyrillic language option with pdflatex, e.g., [russian]}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option calling a cyrillic-alphabet language.}%
}
%
\AtBeginDocument{%
diff --git a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf
index 05e276803f..d5ef0f0158 100644
--- a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf
+++ b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf
Binary files differ
diff --git a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex
index b041b0f0ff..406a4dd660 100644
--- a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex
+++ b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex
@@ -18,13 +18,36 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DocumentMetadata{%
+ pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX)
+ pdfversion=1.7,
+ lang=en-US,
+ debug = {xmp-export},
+}
\documentclass[colorlinks,nofoot,spanish,japanese,russian,greek,ukrainian,vietnamese,french,portuguese,turkish,polish,indonesian,italian,german,latin,serbianc,bidi=basic]{asmeconf}
% note that not all languages given as examples in this file can be called as options.
+% directly add this xmp property. See l3pdfmeta.pdf. This is not automatic with \DocumentMetadata. "True" must be capitalized.
+\ExplSyntaxOn
+ \pdfmeta_xmp_add:n{<xmpRights:Marked>True</xmpRights:Marked>}
+\ExplSyntaxOff
+
\hypersetup{%
- pdftitle={Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec},
+ pdftitle={{Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec}},
pdfkeywords={asmeconf, non-Latin alphabets, fontspec, LuaLaTeX, PDFLaTeX},
- pdfauthor={John H. Lienhard, V},
+ pdfauthor={John H. Lienhard},
+ pdfsubject = {Describes font support in asmeconf LaTeX template},
+ pdfurl={https://ctan.org/pkg/asmeconf},% may delete
+ pdflicenseurl={https://ctan.org/pkg/asmeconf},
+ pdfcopyright={Copyright (c) \the\year\ by John H. Lienhard},
+ pdfcontactemail={lienhard@mit.edu},
+ pdfcaptionwriter={{John H. Lienhard, V}},
+ pdfcontactaddress={77 Massachusetts Avenue, Room 3-166},
+ pdfcontactcity={Cambridge, MA},
+ pdfcontactpostcode={02139},
+ pdfcontactcountry={USA},
+ pdfcontacturl={https://lienhard.mit.edu},
+ pdfauthortitle={Professor of Mechanical Engineering},
}
% To avoid typing these over and over, define:
@@ -33,13 +56,30 @@
\newcommand*\AC{{\upshape\texttt{asmeconf}}}
\newcommand*\PLT{{\upshape\texttt{\hologo{pdfLaTeX}}}}
+% define a unicode character by its codepoint
+\ExplSyntaxOn
+ \cs_new:Npn \MySym #1 { \codepoint_generate:nn {#1} { 12 } }
+\ExplSyntaxOff
+
+\renewcommand*{\checkmark}{\MySym{"2713}} % because default checkmark has poor glyph information
+
+%% It's necessary to force full embedding of the fonts to get valid PDF/A-3b
+\usepackage{luacode}
+\begin{luacode}
+local function embedfull(tfmdata)
+ tfmdata.embedding = "full"
+end
+luatexbase.add_to_callback("luaotfload.patch_font", embedfull, "embedfull")
+\end{luacode}
+
+
\makeatletter
\def\NotoBan@scale{0.98}% vary this if the Bengali is too small/large; the default value 0.92 matches scaling of the other Noto fonts used.
\def\NotoDev@scale{0.98}% vary this if the Devanagari is too small/large; the default value 0.92 matches scaling of the other Noto fonts used.
%\def\NotoTam@scale{0.92}% vary this if the Tamil is too small/large; the default value 0.92 matches scaling of the other Noto fonts used.
\def\NotoAra@scale{0.93}% The serif font only; the default value is 0.91
-% Noto family is not as close to Tex Gyre Termes as I'd like, so for abstract examples in Latin script [only], use Noto Serif Italic for visual consistency
+% Noto family is not as close to Tex Gyre Termes as I'd like, so for abstract examples in Latin script [only], I'm using Noto Serif Italic for visual consistency
\newfontfamily{\NotoSerif}{NotoSerif}[UprightFont=*-Regular,ItalicFont=*-Italic, BoldItalicFont=*-BoldItalic, BoldFont=*-Bold, Extension=.ttf,Scale=\Noto@scale,WordSpace={1,1.4,1}]
\newfontfamily{\NotoSerifItalns}{NotoSerif-Italic.ttf}[ItalicFont=*,Scale=\Noto@scale]% Turkish has trouble with WordSpace
\makeatother
@@ -107,10 +147,10 @@
\begin{document}
\ConfName{Proceedings of the \texttt{asmeconf} \linebreak International Examples Congress and Exposition}
-\ConfAcronym{AIECE21}
-\ConfDate{January 20, 2021}
+\ConfAcronym{AIECE24}
+\ConfDate{August 1, 2024}
\ConfCity{Cambridge, MA}
-\PaperNo{AIECE2021-0002}
+\PaperNo{AIECE2024-0002}
\title{Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec}
@@ -119,7 +159,7 @@
\maketitle
-\versionfootnote{Version~1.01, \today}
+\versionfootnote{Version~1.02, \today}
\keywords{asmeconf, language support, non-Latin alphabets, fontspec, \LLT}
@@ -183,12 +223,12 @@ The \FS\ package~\cite{robertson2020} allows \LLT\ to access fonts that are inst
When processed in \PLT, \AC\ uses the \texttt{newtxtext} and \texttt{inconsolata} fonts, a collection of eight-bit fonts, for Latin script. To use \FS, we must replace those fonts with corresponding unicode fonts (the math fonts, from \texttt{newtxmath}, are unchanged). Specialized fonts are needed for some additional scripts. Thus, the user will need to install several unicode fonts onto their own system in order to use \AC\ with \FS.
Fortunately, all these fonts are all free and easily downloaded.
-The needed fonts are listed in Table~\ref{tab:2}.
+The needed fonts are listed in Table~\ref{tab:2}. \textit{The Latin fonts are required for English when using \FS.}
%%%%%%%%%%%%%%% two column table %%%%%%%%%%%%%%%%%%
\NewDocumentCommand\R{O{11pt}}{\rule{0pt}{#1}}
\begin{table*}[t!]
-\caption{System fonts used by \NoCaseChange{\AC} with \NoCaseChange{\FS}. For all fonts, load regular and bold face. For Latin, Cyrillic, and Greek, also load italic and bold italic. For Noto Sans Arabic, install semibold instead of bold.\label{tab:2}}%
+\caption{System fonts used by \NoCaseChange{\AC} with \NoCaseChange{\FS}. For all fonts, load regular and bold face. For Latin, Cyrillic, and Greek serif and sans serif fonts, also load italic and bold italic. For Noto Sans Arabic, install semibold instead of bold.\label{tab:2}}%
\centering{%
\begin{tabular*}{\textwidth}{@{\hspace*{0.5em}}@{\extracolsep{\fill}}>{\raggedright}p{6em}>{\raggedright}p{12em}>{\raggedright}p{10em}p{23em}@{\hspace*{0.5em}}}
\toprule
@@ -196,7 +236,10 @@ The needed fonts are listed in Table~\ref{tab:2}.
\multicolumn{1}{c}{\textbf{Language}} &
\multicolumn{1}{c}{\textbf{Fonts}} &
\multicolumn{1}{c}{\textbf{Where to get the font}}\\ \midrule
-Latin$^*$ & most European languages & Tex Gyre Termes, Tex~Gyre~Heros & \url{http://www.gust.org.pl/projects/e-foundry/tex-gyre}\rule{0pt}{11pt}\\
+Latin$^*$ & most European languages & TeX Gyre Termes, & \url{https://ctan.org/tex-archive/fonts/newtx/opentype}, \rule{0pt}{11pt}\\
+& & TeX~Gyre~Heros, & \url{https://ctan.org/tex-archive/fonts/tex-gyre/opentype}\\
+%\url{http://www.gust.org.pl/projects/e-foundry/tex-gyre} \\
+& & Inconsolatazi4 & \url{https://ctan.org/tex-archive/fonts/inconsolata/opentype} \\
Arabic\R & Arabic, Punjabi, Urdu, others & Amiri,\\ Noto~Sans~Arabic & \url{https://github.com/alif-type/amiri}\hfill\hbox{} \url{https://github.com/googlefonts/noto-fonts} \\
Bengali\R & Assamese, Bengali, others & Noto Serif Bengali,\\ Noto~Sans Bengali& \url{https://github.com/googlefonts/noto-fonts} \\
Cyrillic\R & Belarusian, Bulgarian, Macedonian, Russian, Serbian, Ukrainian, others & Noto Serif,\\ Noto~Sans, Noto~Sans~Mono & \url{https://github.com/googlefonts/noto-fonts} \\
@@ -215,7 +258,9 @@ Traditional\R\ Chinese & Traditional Mandarin, Cantonese & Noto~Serif~CJK~TC, No
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Using fontspec with asmeconf}
-When running \LLT, the \texttt{[fontspec]} option should be called, to load the appropriate fonts. With \FS, \texttt{babel} will use \texttt{.ldf} files (if available) and separate initialization files (\texttt{.ini}). If a language option is called for which there is no \texttt{.ldf} file, an error will result. However, such languages may still have an \texttt{.ini} that provides necessary information. For example, Chinese and Korean do not have \texttt{.ldf} files, but they do have \texttt{.ini} files. These languages can be accessed as described in Section~\ref{sec:6}.
+%When running \LLT, the \texttt{[fontspec]} option should be called, to load the appropriate fonts.
+When running \LLT, \texttt{fontspec} is loaded by default (as of Feb.\ 2024).
+With \FS, \texttt{babel} will use \texttt{.ldf} files (if available) and separate initialization files (\texttt{.ini}). If a language option is called for which there is no \texttt{.ldf} file, an error will result. However, such languages may still have an \texttt{.ini} that provides necessary information. For example, Chinese and Korean do not have \texttt{.ldf} files, but they do have \texttt{.ini} files. These languages can be accessed as described in Section~\ref{sec:6}.
Japanese typesetting is a little more complicated. When \texttt{[japanese]} is given as an option to the class, \AC\ calls the \texttt{luatexja-fontspec} package~\cite{lua-jp}, which is a specialized module for typesetting Japanese.
@@ -225,7 +270,7 @@ What about support for scripts not shown in Table~\ref{tab:2}? Macros from \tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{How to call a language\label{sec:6}}
-A language is called by \verb|\begin{selectlanguage}{<lang>}|, where \texttt{<lang>} is the lower-case name of the language.
+Call a language with \verb|\begin{selectlanguage}{<lang>}|, where \texttt{<lang>} is the lower-case name of the language.
For example, suppose that a Spanish language abstract is desired. The user puts \texttt{[spanish]} as a global option (this language has an \texttt{.ldf} file), and then writes:
\begin{quotation}
\noindent\hbox{}\verb|\begin{selectlanguage}{spanish}|\\
@@ -419,10 +464,12 @@ The main language of the document is English by default. This means that secti
To chose a different main language, give the option \texttt{[main=..]}, e.g., \texttt{[main=french]}. The standard caption and section names will follow \texttt{babel}'s dictionary for the language chosen. Users may additionally change ``Keywords'', ``Nomenclature'', ``Corresponding author'', and ``Joint first authors'' by renewing the commands \verb|\keywordname|, \verb|\nomname|, \verb|\CAwords|, and \verb|\JAwords|. Changes to the page footer are described in the \AC\ documentation~\cite{lienhard2021}. The pdf bookmark for ``Appendices'' may be changed by renewing \verb|\appendicesname|. (See the \texttt{babel} documentation \cite[\S 1.15]{bezos2020} if the dictionary for the main language lacks the correct word for, say, \verb|abstractname|).
-Note that some languages make characters active, which can have unexpected effects. For example, Spanish makes ``.'' an active character, which clashes with the default \texttt{dcolumn} decimal separator, \texttt{d\{n.m\}}~\cite{dpc}. \texttt{\textbackslash spanishdeactivate\{.\}} stops this behavior. Alternatively, the decimal separator can be changed to a comma by putting \texttt{\textbackslash newcolumntype\{d\}[1]\{D\{,\}\{,\}\{\#1}\}\} in the preamble.
-
I have not explored this usage in detail, and I would welcome comments from authors who attempt such conversions.
+Note that some languages make characters active, which can have unexpected effects. For example, Spanish makes ``.'' an active character, which clashes with the default decimal separator when using \texttt{dcolumn}'s \texttt{d\{n.m\}}~\cite{dpc}. The command \texttt{\textbackslash spanishdeactivate\{.\}} stops this behavior. As of August 2024, \texttt{asmeconf} defines a \texttt{dcolumn} type \texttt{,\{n.m\}} that uses a comma (not a period) as the decimal separator.
+%Alternatively, the decimal separator can be changed to a comma by putting \texttt{\textbackslash newcolumntype\{d\}[1]\{D\{,\}\{,\}\{\#1}\}\} in the preamble.
+
+
%%% CONCLUSIONS %%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Conclusion}
diff --git a/macros/latex/contrib/asmejour/README.md b/macros/latex/contrib/asmejour/README.md
index 69fe1e00fc..612e0b027a 100644
--- a/macros/latex/contrib/asmejour/README.md
+++ b/macros/latex/contrib/asmejour/README.md
@@ -1,7 +1,7 @@
#asmejour: A template for ASME journal papers#
- Version 1.22 dated 2024/02/06.
+ Version 1.23 dated 2024/07/24.
####Overview####
This class provides a template to format preprints in the style of journal papers published by the American Society of Mechanical Engineers.
@@ -67,6 +67,14 @@
####Change log####
+v1.23 (2024/07/24)
+ - Add class option for single-column formatting, \[singlecolumn\], as sometimes requested for review (thanks Lennart Hultgren)
+ - Change language sample from French to German, to avoid active characters (from Fourier to Pohlhausen)
+ - Reduce size of line number font
+ - Adjust code for \\appendix to better accommodate tagged pdf
+ - Correct bug in babel main language selection
+ - Miscellaneous code clean up and simplification
+
v1.22 (2024/02/06)
- The newtx package has dropped superiors option, so asmejour has dropped the \[superiors\] option and related code.
- Dropped legacy options \[lang, lang-second, lang-third\]
diff --git a/macros/latex/contrib/asmejour/asmejour-sample.bib b/macros/latex/contrib/asmejour/asmejour-sample.bib
index 3b715d3d05..08438fd94d 100644
--- a/macros/latex/contrib/asmejour/asmejour-sample.bib
+++ b/macros/latex/contrib/asmejour/asmejour-sample.bib
@@ -1,6 +1,6 @@
%% Sample bibliography file for asmejour.bst and asmejour.cls
%%
-%% Revised: 06 February 2024
+%% Revised: 21 July 2024
%% Copyright John H. Lienhard, MIT
%% Offered under the MIT license: https://ctan.org/license/mit
@@ -350,9 +350,22 @@
title = {Th\'{e}orie Analytique de la Chaleur},
publisher = {Firmin Didot, P\`{e}re et Fils},
address = {Paris},
- url = {https://archive.org/details/analyticaltheory00fourrich},
+ url = {https://archive.org/details/analyticaltheory00fourrich},
}
+@article{pohlhausen1921,
+ author = {Pohlhausen, E.},
+ title = {Der {W}\"{a}rmeaustausch zwischen festen K\"{o}rpern und {F}l\"{u}ssigkeiten mit kleiner reibung und kleiner {W}\"{a}rmeleitung},
+ journal = {Zeitschrift f\"{u}r {A}ngewandte {M}athematik und {M}echanik},
+ volume = {1},
+ number = {2},
+ pages = {115--121},
+ doi = {10.1002/zamm.19210010205},
+ year = {1921},
+}
+%url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/zamm.19210010205},
+
+
@techreport{reynolds1958,
author = {W. C. Reynolds and W. M. Kays and S. J. Kline},
title = {Heat transfer in the Incompressible Turbulent Boundary Layer. {I}---Constant Wall Temperature},
diff --git a/macros/latex/contrib/asmejour/asmejour-template.pdf b/macros/latex/contrib/asmejour/asmejour-template.pdf
index 6fc9631010..c15cc9f797 100644
--- a/macros/latex/contrib/asmejour/asmejour-template.pdf
+++ b/macros/latex/contrib/asmejour/asmejour-template.pdf
Binary files differ
diff --git a/macros/latex/contrib/asmejour/asmejour-template.tex b/macros/latex/contrib/asmejour/asmejour-template.tex
index 18ae24c057..7e3f8a2930 100644
--- a/macros/latex/contrib/asmejour/asmejour-template.tex
+++ b/macros/latex/contrib/asmejour/asmejour-template.tex
@@ -3,7 +3,7 @@
%%
%% This file is asmejour-template.tex, a template to format papers in the style of ASME journal papers.
%%
-%% This file is version 1.22 dated 2024/02/06
+%% This file is version 1.23 dated 2024/07/24
%%
%% Author: John H. Lienhard V
%% Department of Mechanical Engineering
@@ -33,8 +33,10 @@
%%
%% * Option to omit all ASME text fields from the footer [nofoot].
%%
+%% * Option for single column formatting [singlecolumn].
+%%
%% * Options for PDF/A compliance. With pdfTeX, [pdf-a] will produce PDF/A-3u compliance with sRGB OutputIntent.
-%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] can enable levels 1b, 2b, 2u, and 3b.
+%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] will select other levels: 1b, 2b, 2u, and 3b.
%% *
%% * Recently, LaTeX (2021 and later) has integrated support for pdf-a, through the \DocumentMetadata{..}
%% * command. This approach works with both pdfTeX and luaLaTeX. The asmeconf class supports this new feature,
@@ -59,8 +61,8 @@
%% * [hyphenate] allow hyphenation, with pdfTeX only (normally, the typewriter font is not hyphenated)
%%
%% * Options for the babel package to support passages in other languages (such as a translated
-%% * abstract in an appendix), e.g. [french]. The main language will default to English
-%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix C for details.
+%% * abstract in an appendix), e.g. [german]. The main language will default to English
+%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix B for details.
%%
%% For details of the newtx and mathalfa packages, refer to their documentation (available at CTAN: http://ctan.org).
%%
@@ -82,16 +84,16 @@
%% see https://www.latex-project.org/news/latex2e-news/ltnews35.pdf
%% Uncomment the next lines and omit the option [pdf-a], if you are using an up-to-date LaTeX platform
-%\DocumentMetadata{%
-% pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX)
-% pdfversion=1.7,
-% lang=en-US,
-%}
+\DocumentMetadata{%
+ pdfstandard=A-3u,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX)
+ pdfversion=1.7,
+ lang=en-US,
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Class options are described above.
-\documentclass[upint,varvw,barcolor=Goldenrod3,mathalfa=cal=euler,balance,hyphenate,french,pdf-a]{asmejour}% subscriptcorrection,
+\documentclass[nocopyright,upint,varvw,barcolor=Goldenrod3,mathalfa=cal=euler,balance,hyphenate,german]{asmejour}% subscriptcorrection,french
%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -121,11 +123,14 @@
% Use title case (upper and lower case letters)
% Note usage below for corresponding author.
-\SetAuthorBlock{Author Name[s]}{Department of Mechanical Engineering,\\
- Institution or Company Name,\\
- Street address,\\
- City, State, Country\\
- email: xxx@yyy.zzz}
+\SetAuthorBlock{John H.\ Lienhard\CorrespondingAuthor}{%
+ Fellow ASME\\
+ Rohsenow Kendall Heat Transfer Laboratory,\\
+ Department of Mechanical Engineering,\\
+ Massachusetts Institute of Technology,\\
+ Cambridge, MA 02139 USA\\
+ email: lienhard@mit.edu
+}
% To label one or more corresponding authors put "Name\CorrespondingAuthor". No space after "Name".
% An optional argument can be added if email is not in address block as
@@ -133,14 +138,12 @@
% Can also include multiple emails and use the command more than once for multiple corresponding authors,
% "Name\CorrespondingAuthor{write@to.him, write@to.her}"
-\SetAuthorBlock{John H.\ Lienhard V\CorrespondingAuthor}{%
-Fellow ASME\\
-Rohsenow Kendall Heat Transfer Laboratory,\\
-Department of Mechanical Engineering,\\
-Massachusetts Institute of Technology,\\
-Cambridge, MA 02139 USA\\
-email: lienhard@mit.edu
-}
+\SetAuthorBlock{Author Name[s]}{Department of Mechanical Engineering,\\
+ Institution or Company Name,\\
+ Street address,\\
+ City, State, Country\\
+ email: xxx@yyy.zzz
+}
%%% Change to your paper title. Can insert line breaks if you wish (otherwise breaks are selected automatically).
\title{Preprint Template for ASME\\ Journal Papers: asmejour.cls}
@@ -164,6 +167,7 @@ This paper is an example and {\upshape\LaTeX} template for the {\upshape\texttt{
\maketitle %% This command creates the author/title/abstract block. Essential!
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%% End of fields to be completed. Now write! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -227,7 +231,7 @@ Section, subsection, and subsubsection headings should be in title case (first l
%% captions go below figures
\begin{figure}
-\centering\includegraphics[width=\linewidth]{sample-figure-1.pdf}
+\centering\includegraphics[width=\linewidth,alt={Linearization errors}]{sample-figure-1.pdf}
\caption{Caption with math, eqn.~\eqref{eqn:1}: $\Delta T/T_m$ vs.\ $\Delta T/T_1$~\cite{lienhard2019}\label{fig:1}}
\end{figure}
@@ -466,8 +470,12 @@ As of June 2022, the \LaTeX 3 team has added native support for PDF/A in the \La
\subsection{Typewriter Font Options} This font is the sans-serif, monospaced font \texttt{inconsolata}. By default, the word spacing is variable, but option \texttt{[mono]} ends this behavior. A slashed zero is the default; option \texttt{[var0]} removes the slash. Option \texttt{[hyphenate]} enables hyphenation of the typewriter font when running \hologo{pdfTeX}.
+\subsection{Single column layout} The option \texttt{[singlecolumn]} switches from two-column to single-column layout.
%%%%%%%%%%%%%%% begin two column table %%%%%%%%%%%%%%%%%%
+%
+% note: the fourth column could be a dcolumn instead of using \makebox, with d{1.4} replacing c column.
+%
\begin{table*}[t]
\caption{A table spanning two columns}\label{tab:4}%
\centering{%
@@ -478,7 +486,8 @@ As of June 2022, the \LaTeX 3 team has added native support for PDF/A in the \La
\multicolumn{1}{c!{\hspace*{3.em}}}{$\textrm{erfc}(x)$} &
\multicolumn{1}{c}{$x$} &
\multicolumn{1}{c}{$\textrm{erf}(x)$} &
-\multicolumn{1}{c@{\hspace*{1.5em}}}{$\textrm{erfc}(x)$} \\ \midrule
+\multicolumn{1}{c@{\hspace*{1.5em}}}{$\textrm{erfc}(x)$} \\
+\midrule
0.00 & 0.00000 & 1.00000 & 1.10 & 0.88021 & 0.11980 \\
0.05 & 0.05637 & 0.94363 & 1.20 & 0.91031 & 0.08969 \\
0.10 & 0.11246 & 0.88754 & 1.30 & 0.93401 & 0.06599 \\
@@ -554,7 +563,7 @@ Acknowledge individuals, institutions, or companies that supported the authors i
\entry{b}{bulk value}
\entry{$\infty$}{free stream value}
-\end{nomenclature}
+\end{nomenclature}
%%%%%%%%%%%%%%% APPENDICES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -571,31 +580,30 @@ Acknowledge individuals, institutions, or companies that supported the authors i
This text is just for illustration. The radiation fractional function may be written in terms of the incomplete zeta function for convenience:
\begin{align}
-f(\lambda T) = {}& \frac{1}{\sigma T^4} \int_0^\lambda\frac{2\pi h c_o^2}{\lambda^5 \left[ \exp (h c_o/k_B T \lambda) - 1\right] } \, d\lambda \\
- = {}& \frac{1}{\sigma T^4}\frac{2\pi k_B^4 T^4}{h^3c_o^2}\int^\infty_{c_2/\lambda T}\frac{t^3}{e^t -1}\, dt\label{eqn:zeta}
+f(\lambda T) &= \frac{1}{\sigma T^4} \int_0^\lambda\frac{2\pi h c_o^2}{\lambda^5 \left[ \exp (h c_o/k_B T \lambda) - 1\right] } \, d\lambda \\
+ &= \frac{1}{\sigma T^4}\frac{2\pi k_B^4 T^4}{h^3c_o^2}\int^\infty_{c_2/\lambda T}\frac{t^3}{e^t -1}\, dt\label{eqn:zeta}
\end{align}
When $\lambda T \rightarrow \infty$, $f = 1$ and the last equation yields the well-known result
\begin{equation}
- {\sigma T^4} =\frac{2\pi k_B^4 T^4}{h^3c_o^2} \underbrace{\int_0^\infty \frac{t^3}{e^t - 1} \, dt}_{\equiv\mspace{2mu} \zetaup(4)\Gamma(4)}
+\sigma T^4 =\frac{2\pi k_B^4 T^4}{h^3c_o^2} \underbrace{\int_0^\infty \frac{t^3}{e^t - 1} \, dt}_{\equiv\mspace{2mu} \zetaup(4)\Gamma(4)}
\end{equation}
where the Gamma function $\Gamma(4) = 3!$ and the Riemann zeta function, $\zetaup(4)$, has the indicated integral representation \cite[\S13.12]{ww1927}. A classical result due to Euler \cite{euler1740} gives $\zetaup(4) = \pi^4/90$ (see also \cite[\S167]{euler1748}), from which we recover the usual definition of the Stefan-Boltzmann constant, $\sigma$.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\section{Language Support}
+\section{Language Support\label{app:language}}
ASME publishes in English, but the \texttt{babel} package is loaded for users who may wish to include other languages.
For example, an author might wish to include an appendix that provides the abstract in another language.
When more than one language option is included in \verb|\documentclass[..]{asmejour}|, English will be
assumed to be the main language of the document. (To choose a different main language, set \texttt{[main=..]}).
-If no language options are given, the package defaults to English. As an example, a passage in French is
-shown in \selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english}.
+If no language options are given, the package defaults to English. As an example, a passage in German is
+shown in \selectlanguage{german}\appendixname~\ref{app:pohlhausen}\selectlanguage{english}.
The standard caption and section names will follow \texttt{babel}'s dictionary for primary languages other than English. Users may additionally change ``Keywords'', ``Nomenclature'', and ``Corresponding author'' by renewing the commands \verb|\keywordname|, \verb|\nomname|, and \verb|\CAwords|. Changes to the page footer were described in Sec.~\ref{sec:footer}. The pdf bookmark for ``Appendices'' by be changed by renewing \verb|\appendicesname|.
The font encoding is set to T1 and utf-8 input is supported:
-%% If you have trouble with the next line (or the French text that follows), your file may not be saved in utf-8 format. You can delete these lines to resolve the issue.
+%% If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete these lines to resolve the issue.
\typeout{If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete that line to resolve the issue.}
\ifluatex\typeout{Under LuaLaTeX, some of these accents must be obtained as escaped characters, with \=a, \c{e}, \l, \.o, \oe, \v{z}, \'z, etc.}\fi
àáâäæãåā èéęëêēė îïíīįì ôöòóœøōõ ûüùúū çćč ł ñń ßśš ÿ žźż
@@ -604,18 +612,13 @@ No effort has been made to support customization of language-specific fonts (som
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\selectlanguage{french}
-\section{Discours Préliminaire de Fourier}\label{app:fourier}
-
-Les causes primordiales ne nous sont point con­nues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'obser­vation, et dont l'étude est l'objet de la philosophie naturelle.
-
-La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élé­ment. Cette théorie formera désormais une des branches les plus importantes de la physique gé­nérale~\cite{fourier1822}.
+\selectlanguage{german}
+\section{Der Wärmeaustausch zwischen festen Körpern und Flüssigkeiten mit kleiner reibung und kleiner Wärmeleitung (von E. Pohlhausen)\label{app:pohlhausen}}
+In einer strömenden Flussigkeit sind Wärmeleitung und Wärmekonvektion Vorgänge, die mit der inneren Reibung (oder Impulsleitung) und mit der Impulskonvektion große Aehnlichkeit besitzen. Mathematisch findet dies seinen Ausdruck in dem gleichartigen Bau der Differentialgleichungen, die einerseits für die Temperatur und anderseits für den Geschwindigkeitsvektor in der Flüssigkeit bestehen. Man kann daraus auf eine Beziehung
+zwischen dem Wärmeaustanch und dem Reibungswiderstand schließen, die eine strömende Flüssigkeit an einem festen Körper hervorrufen. Dies ist zuerst von Prandtl ausgesprochen und durchgeführt worden, und zwar für turbulente Vorgänge, unter der vereinfachenden Annahme von Wärmequellen und -senken im Innern der Flüssigkeit~\cite{pohlhausen1921}.
\selectlanguage{english}
-% When you drop the [french] option, delete your .aux file as well, since [french] sets ":" as an active character.
-
-
%%%%%%%%%%%%% BIBLIOGRAPHY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\nocite{*} %% <=== Delete this line - unless you wish to typeset the entire contents of your .bib file.
diff --git a/macros/latex/contrib/asmejour/asmejour.cls b/macros/latex/contrib/asmejour/asmejour.cls
index 095964ffc7..a8cd43eae2 100644
--- a/macros/latex/contrib/asmejour/asmejour.cls
+++ b/macros/latex/contrib/asmejour/asmejour.cls
@@ -4,10 +4,9 @@
%%
%% The asmejour.cls file should be used with the files asmejour.bst (for citations) and asmejour-template.tex.
%%
-%%
%% This file's version and date are:
- \def\versionno{1.22}
- \def\versiondate{2024/01/30\space}
+ \def\versionno{1.23}
+ \def\versiondate{2024/07/24\space}
%%
%% Author: John H. Lienhard V
%% Department of Mechanical Engineering
@@ -22,14 +21,14 @@
%% 4. Support citations, footnotes, and bold face math in section headings
%% 5. Provide optional line numbers for editing and review
%% 6. Support balancing height of columns on the last page
-%% 7. Support the archival PDF/A standards 1b, 2b, 2u, 3b, and 3u
+%% 7. Support archival PDF/A standards
%% 8. Provide copyright notices for government employees and government contractors
%% 9. Enable various math and text features from the newtxmath, mathalfa, and newtxtext packages
%% 10. Support inclusion of passages in languages other than English
%%
%% This class is compatible with both pdfLaTeX and LuaLaTeX. All packages required by the class
-%% are in standard distributions, such as TeXLive, and are also available at CTAN (https://ctan.org/).
-%% The use of an up-to-date (Feb. 2020 or later) and complete LaTeX distribution is strongly recommended.
+%% are in standard distributions, such as TeX Live, and are also available at CTAN (https://ctan.org/).
+%% The use of an up-to-date (Nov. 2022 or later) and complete LaTeX distribution is strongly recommended.
%%
%% The title block is set by specific commands that are described in the asmejour-template.tex file.
%%
@@ -57,72 +56,79 @@
%% whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
%% software or the use or other dealings in the software.
%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{asmejour}[\versiondate asmejour paper format]
-\LoadClass[twoside,9pt,twocolumn]{extarticle}
-
-\ifdefined\NewDocumentCommand\else
- \RequirePackage{xparse}[2020/02/25]
-\fi
+\LoadClass[twoside,9pt]{extarticle}% twocolumn format initiated in \MakeTitle command 2024/07/20
\RequirePackage{iftex}% provides \ifpdftex, etc.
\RequirePackage{ifthen}
-%%%%%%%%%%%%% Test compatibility of older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ExplSyntaxOn
+ \str_const:Nn \ClassName {asmejour}
+\ExplSyntaxOff
-\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01
-\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01
-\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15
+%%%%%%%%%%%%% Some compatibility for older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\IfFormatAtLeastTF{2020/02/25}{%
- \ClassInfo{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020/10/01 or later are strongly recommended, for best results}
- }{%
- \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now, but your abstract will probably not compile properly if you lack the xparse package [2020/02/25], and the code will crash entirely if you lack the iftex package [2019/11/07].}%
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01
+\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01
+\providecommand\IfPDFManagementActiveTF{\@secondoftwo}% \If... added to latex 2021/07/23
+\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15
+\providecommand\ClassNoteNoLine[2]{\typeout{^^JClass Note #1: #2.^^J}}% log & terminal note... added to latex 2021/11/15
+
+\IfFormatAtLeastTF{2020/10/01}{\relax}{%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past any errors for now, but your abstract will not compile properly if you lack the xparse package [2020/02/25], and the code will crash entirely if you lack the iftex package [2019/11/07].}%
}
-
-\DeclareDocumentCommand\LogNote{m}{%
- \IfFormatAtLeastTF{2021/11/15}{%
- \ClassNoteNoLine{asmejour}{#1}% Added to LaTeX in Nov. 2021
- }{%
- \ClassWarningNoLine{asmejour}{#1}%
+
+% check whether pdfmanagement (\DocumentMetadata) has been loaded (else fall back to hyperxmp and bookmark packages after loading hyperref)
+\newif\ifasme@pdfmanagement
+\IfPDFManagementActiveTF{
+ \asme@pdfmanagementtrue
+}{
+ \asme@pdfmanagementfalse
+ \ClassWarningNoLine{\ClassName}{pdfmanagement is not active. Will load hyperxmp and bookmark packages instead}
+}
+
+% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error
+\IfFormatAtLeastTF{2021/11/15}{
+ \relax
+}{
+ \AtBeginDocument{
+ \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax}
}
}
-%% Test whether \DocumentMetadata has been loaded (Thank you Ulrike Fischer)
-\newif\if@asme@pdfmanagement
-\ExplSyntaxOn
-\bool_if:nTF
- {
- \bool_lazy_and_p:nn
- {\cs_if_exist_p:N \pdfmanagement_if_active_p:}
- { \pdfmanagement_if_active_p: }
- }
- {
- \@asme@pdfmanagementtrue
- }
- {
- \@asme@pdfmanagementfalse
- }
-\ExplSyntaxOff
+% Enable pre-2020/10 formats to access essential macros later moved into LaTeX kernel
+\ifdefined\NewDocumentCommand\else
+ \RequirePackage{xparse}[2020/02/25]
+\fi
+
+% Provide pre-2020/10 installations with basic unicode character mappings
+\IfFormatAtLeastTF{2020/10/01}{\relax}{%
+ \pdfgentounicode=1 %% enable CMaps; was moved into the latex kernel Oct 2020
+ \input glyphtounicode.tex %% lists of mappings; was moved into the latex kernel Oct 2020
+}
-%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{kvoptions}% this package calls kvsetkeys
\SetupKeyvalOptions{
- family=asmejour,
+ family=\ClassName,
prefix=asmejour@,
setkeys=\kvsetkeys,
}
%% for mathalfa, so we may pass options in this format: mathalfa=cal=euler, mathalfa=frak=boondox
-\define@key{asmejour}{mathalfa}{%
+\define@key{\ClassName}{mathalfa}{%
\PassOptionsToPackage{#1}{mathalfa}%
}
+%% Option to obtain line numbers [singlecolumn], 2024/07/20
+\DeclareBoolOption{singlecolumn}
+
%% Option to obtain line numbers [lineno]
\DeclareBoolOption{lineno}
@@ -132,6 +138,12 @@
%% Option to omit lists of figures and tables
\DeclareBoolOption{nolists}
+%% Option to omit ASME copyright notice [nocopyright]
+\DeclareBoolOption{nocopyright}
+
+%% Option to omit ASME footers [nofoot]
+\DeclareBoolOption{nofoot}
+
%% Option for copyright notice if all authors are government employees [govt]
\DeclareBoolOption{govt}
@@ -141,57 +153,54 @@
%% Option for government contractor copyright notice [contractor]
\DeclareBoolOption{contractor}
-%% set [barcolor=] to a color name defined by xcolor package
+%% set key [barcolor=] to pass a color name defined by xcolor package
\DeclareStringOption[black]{barcolor}
-%% the key main= passes the choice of main language to babel
+%% the key [main= ] to pass the choice of main language to babel
\newif\ifaj@mainset\aj@mainsetfalse
-\define@key{asmejour}{main}[english]{%
+\define@key{\ClassName}{main}{%
\PassOptionsToPackage{main=#1,#1}{babel}% added #1 resolves conflicts between certain .ldf files under "main=".
\aj@mainsettrue
- \ifthenelse{\equal{#1}{english}}{%
- \PassOptionsToPackage{pdflang=en}{hyperref}}{%
- \LogNote{Selecting #1 as the primary language}
- }%
+ \ClassNoteNoLine{\ClassName}{Selecting #1 as the primary language}
}
-%% if main language was not chosen explicitly, default to English
-\ifaj@mainset\relax\else
- \PassOptionsToPackage{main=english}{babel}%
- \PassOptionsToPackage{pdflang=en}{hyperref}
- \ClassInfo{Selecting English as the primary language, since main= not set}%
-\fi
-
%% Suppress warnings about unused global options, 2021/12/01
-\DeclareDefaultOption{}% suppress warning about unused mathalfa option
+\DeclareDefaultOption{}
-\ProcessKeyvalOptions{asmejour}
+\ProcessKeyvalOptions{\ClassName}
%% Turn off these keys now that we're done with them
\NewDocumentCommand\aj@DisableOption{m}{%
\DisableKeyvalOption[%
action=ignore,%
- class=asmejour%
+ class=\ClassName%
]{#1}{\@KeyFamily}%
}
\NewDocumentCommand\@DisableKeys{>{\SplitList{;}}m}{\ProcessList{#1}{\aj@DisableOption}}
-\def\@KeyFamily{asmejour}
-\@DisableKeys{mathalfa;barcolor;lineno;balance;nolists;govt;govtsome;contractor;main}
+\def\@KeyFamily{\ClassName}
+\@DisableKeys{mathalfa;singlecolumn;lineno;balance;nolists;nocopyright;nofoot;govt;govtsome;contractor;barcolor;main}
+
+
+%% if main language was not was chosen explicitly, default to English
+\ifaj@mainset\relax\else
+ \PassOptionsToPackage{main=english}{babel}%
+ \ClassNoteNoLine{\ClassName}{Selecting English as the primary language, since main= not set}%
+\fi
-%%%%%%% PDF/A Compliance Keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%% PDF/A Compliance Keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach.
\newif\ifaj@setpdfa\aj@setpdfafalse
\newif\ifaj@pdfaone\aj@pdfaonefalse
-\if@asme@pdfmanagement\else
+\ifasme@pdfmanagement\else
\SetupKeyvalOptions{
family=pdfaopt,
- prefix=pdafopt@,
+ prefix=pdfaopt@,
setkeys=\kvsetkeys,
}
@@ -201,7 +210,7 @@
\define@key{pdfaopt}{pdf-a}[true]{%
\aj@setpdfatrue
\PassOptionsToPackage{pdfa}{hyperref}
- \AtBeginDocument{\hypersetup{pdfapart=3,pdfaconformance=u}}% note: hyperref takes these options if hyperxmp is loaded
+ \AtBeginDocument{\hypersetup{pdfapart=3,pdfaconformance=u}}% hyperref takes these options if hyperxmp is loaded
}
%%% to select part 1, 2 or 3
\define@key{pdfaopt}{pdfapart}[3]{%
@@ -209,7 +218,7 @@
\AtBeginDocument{\hypersetup{pdfapart=\asmejour@tempa}}
\ifthenelse{\equal{#1}{1}}{\aj@pdfaonetrue}{\relax}%
}
- %% to select conformance b or u. NB: a is not possible with pdfLaTeX, and u is not possible with 1.
+ %% to select conformance b or u. NB: a is not currently possible with pdfLaTeX; u not possible with 1.
\ExplSyntaxOn
\define@key{pdfaopt}{pdfaconformance}[u]{%
\str_set:Ne \l_tmp_str { \str_uppercase:n {#1} }
@@ -236,9 +245,10 @@
\pdfminorversion=7 % this selection is not required
\fi
\else
- \ifaj@setpdfa\ClassWarningNoLine{asmejour}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use %
- \protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{asmeconf}}\fi%
- \ifx\directlua\undefined\else
+ \ifaj@setpdfa\ClassWarningNoLine{\ClassName}{pdf-a option requires pdfLaTeX. Under LuaLaTeX, use %
+ \protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{\ClassName}}%
+ \fi
+ \ifx\directlua\undefined\else % default under lualatex is 1.4
\directlua{
if pdf.getminorversion() \string~= 7 then
if (status.pdf_gone and status.pdf_gone > 0)
@@ -248,58 +258,28 @@
pdf.setminorversion(7)
end
end
+ }
\fi
- }% will lose some accented characters this way... better to use fontspec, if the system fonts exist.
\fi
\fi
-%%%%%%%%%% Further class options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Option to omit ASME footer
-\DeclareOption{nofoot}{%
- \AtBeginDocument{\pagestyle{plain}%
- \fancypagestyle{title}{%
- \fancyhf{}
- \fancyfoot[CE,CO]{\thepage}
- }
- }
-}
-
-%% Option to omit ASME copyright
-\DeclareOption{nocopyright}{%
- \AtBeginDocument{\fancypagestyle{title}{%
- \fancyhf{}
- \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage}
- \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName}
- \fancyfoot[CO]{}
- }
- }
-}
+%%%%%%%%% Various font-related options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Option for slightly larger small capitals font [largesc], corrected 2021/01/29
\DeclareOption{largesc}{\PassOptionsToPackage{largesc=true}{newtxtext}}% largesc is a boolean key in newtxtext
-%% ASME word separation is greater than newtxtext defaults so change these parameters.
-\PassOptionsToPackage{spacing=0.3em, stretch=0.18em, shrink=0.10em}{newtxtext}% increased shrink from 0.08, 2021/01/30
-
%% Disable newtxtext osf option, which is not appropriate for documents in this class
\DeclareOption{osf}{%
\PassOptionsToPackage{lining}{newtxtext}%
}
-%% Option to hyphenate the typewriter font [hyphenate]
-\DeclareOption{hyphenate}{%
- \PassOptionsToPackage{hyphenate}{inconsolata}%
- \LogNote{Allowing hyphenation of typewriter font}%
-}
-
\DeclareOption{hyphenate}{%
\ifpdftex
\PassOptionsToPackage{hyphenate}{inconsolata}% hyphenate is a key via xkeyval in inconsolata
- \LogNote{Allowing hyphenation of typewriter font}%
+ \ClassNoteNoLine{\ClassName}{Allowing hyphenation of typewriter font}%
\else
- \ClassWarningNoLine{asmejour}{The [hyphenate] option is only supported with pdftex. It will be ignored}%
+ \ClassWarningNoLine{\ClassName}{The [hyphenate] option is only supported with pdftex. It will be ignored}%
\fi
}
@@ -329,7 +309,7 @@
\ProcessOptions \relax
-%%%%%%%%%%%% Page size, bibliography, graphics, color, etc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%% Page size, bibliography, graphics, color %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[paperheight=285.7mm, paperwidth=215.900mm, left=21.100mm, right=21.100mm, top=15.9mm, bottom = 24mm, footskip=8mm]{geometry}
\setlength\columnsep{4.5mm}
@@ -342,22 +322,8 @@
\renewcommand*{\bibfont}{\footnotesize}
\RequirePackage{graphicx}
-\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}% remove obsolete options, 2023/10/23
+\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}% removed obsolete options, 2023/10/23
-% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error, in preparation for tagged pdf
-\IfFormatAtLeastTF{2021/11/15}{
- \relax
-}{
- \AtBeginDocument{
- \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax}
- }
-}
-
-% Nice solution from DPC to prevent aux file errors when switching from pdflatex to lualatex
-\ifx\directlua\undefined
- \AtBeginDocument{\immediate\write\@auxout{\detokenize{%
- \ifx\directlua\undefined\else\endinput\fi}}}
-\fi
%%%%%%%%%%%%% Table related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -383,7 +349,9 @@
\ifpdftex
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}% for backward compatibility with pre-2018 LaTeX distributions
- \RequirePackage[helvratio=0.91]{newtxtext}% add this scaling 2022/06/26
+ %% ASME word separation is greater than newtxtext defaults so change these parameters.
+ %% increased shrink from 0.08, 2021/01/30; add this helvetica scaling 2022/06/26
+ \RequirePackage[helvratio=0.91, spacing=0.3em, stretch=0.18em, shrink=0.10em]{newtxtext}% default {0.25em,0.2em,0.1em}
\RequirePackage[varl,varqu]{inconsolata}% sans typewriter font; restored varl, varqu 2020/08/10
\RequirePackage[]{newtxmath}
\else % use lualatex with newtxmath and fontspec for text primary fonts. Revised 2023/10/21.
@@ -396,20 +364,20 @@
%
\RequirePackage[varqu,varl]{inconsolata} % typewriter font for math
\renewcommand\rmdefault{ntxtlf} % roman font for math
- \DeclareFontFamily{T1}{\sfdefault}{} % sf for math
+ \DeclareFontFamily{T1}{\sfdefault}{} % sf for math
\DeclareFontShape{T1}{\sfdefault}{m}{n}{<-> s*[0.94] ec-qhvr}{} %% see t1qhv.fd; 0.9-->0.94 2022/01/15
\RequirePackage[]{newtxmath} % newtxmath still handles mathematics
\RequirePackage[no-math]{fontspec}
\defaultfontfeatures{Ligatures=TeX,}
%
- \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If DON'T have these fonts, you will see ERROR messages!}
+ \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If you DON'T have these fonts, you will see ERROR messages!}
%
- \IfFontExistsTF{TeXGyreTermesX}{}{\ClassWarning{asmeconf}{\FontWarning} }
- \IfFontExistsTF{texgyreheros}{}{ \ClassWarning{asmeconf}{\FontWarning} }
- \IfFontExistsTF{Inconsolatazi4}{}{\ClassWarning{asmeconf}{\FontWarning} }
+ \IfFontExistsTF{TeX Gyre Termes}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} }
+ \IfFontExistsTF{texgyreheros}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} }
+ \IfFontExistsTF{Inconsolatazi4}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} }
%
- \setmainfont{TeXGyreTermesX}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
- WordSpace = {1,1.4,1},%% This stretch matches newtxtext a little better. 1.4
+ \setmainfont{TeXGyreTermes}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
+ WordSpace = {1.20,1.43,1.2},%% This stretch matches newtxtext a little better (reset 2024/07/23)
Extension = .otf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
@@ -418,7 +386,8 @@
Numbers = Lining,
]
\setsansfont{texgyreheros}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre
- WordSpace = {1,1.4,1},
+ WordSpace = {1.20,1.43,1.2},%% This stretch matches newtxtext a little better (reset 2024/07/23)
+% WordSpace = {1,1.4,1},
Extension = .otf,
UprightFont = *-regular,
ItalicFont = *-italic,
@@ -443,7 +412,7 @@
\RequirePackage{bm}% load after all math for expanded access to bold math
-%% In addition to the word spacing options declared in line 235...
+%% In addition to the word spacing options declared in line 371...
%% Relative to size9.clo: leading reduced to 10 pt; displayskips made greater
\renewcommand\normalsize{%
\@setfontsize\normalsize\@ixpt{10\p@}% % <== was \@xipt
@@ -464,13 +433,12 @@
\newcommand*{\CondSans}{\fontencoding{T1}\fontfamily{qhvc}\selectfont}% remove extra \selectfont, 2023/10/21
\renewcommand\huge{\@setfontsize\huge{14}{14}} %... for author names only
\newcommand*{\CondSansBold}{\renewcommand\bfdefault{b}\fontencoding{T1}\fontfamily{qhvc}\selectfont\bfseries}
-\renewcommand\Huge{\@setfontsize\Huge{26.5}{26.5}} %... for title font only
+\renewcommand\Huge{\@setfontsize\Huge{26.5}{26.5}} %... for title only
\RequirePackage{metalogo,hologo}% Access to various LaTeX logos (for use in the documentation)
-%% This provides sans serif italic and sans serif bold italic math.
-%% It's intended for use in the figure and table captions.
-%% Fonts are from newtxsf package.
+%% This provides sans serif italic and sans serif bold italic math, against with fonts from newtxsf.
+%% For use in the figure and table captions.
\DeclareMathVersion{sansbold}
\SetSymbolFont{letters}{sansbold}{OML}{ntxsfmi}{b}{it}
\SetSymbolFont{lettersA}{sansbold}{U}{ntxsfmia}{b}{it}
@@ -480,8 +448,8 @@
\SetSymbolFont{operators}{sansbold}{\encodingdefault}{\sfdefault}{\bfdefault}{n}
\SetMathAlphabet{\mathsf}{sansbold}{\encodingdefault}{\sfdefault}{b}{n}% \mathsf is upright
-%% These lines are to provide math accents for the sans and sansbold math versions.
-%% The accents from ntxsfmi work normally with regular times fonts. Added 2021/01/27
+%% Provide math accents for the sans and sansbold math versions. Accents from ntxsfmi work normally
+%% with regular times fonts. 2021/01/27
\DeclareSymbolFont{lettersAB}{U}{ntxsfmia}{m}{it}
\SetSymbolFont{lettersAB}{normal}{U}{ntxsfmia}{m}{it}
\SetSymbolFont{lettersAB}{bold}{U}{ntxsfmia}{b}{it}
@@ -556,8 +524,7 @@
\DeclareMathSymbol{\sfhslash}{\mathalpha}{lettersAB}{52}% this is not upright
\DeclareMathSymbol{\sfhbar}{\mathalpha}{lettersAB}{53}% this is not upright
-%%% sans math version, potential value with PGFPlots, and provisionally called in subfigure captions.
-%%% this is experimental, still needs stress testing. 2021/01/30
+%%% sans math version, potential value with PGFPlots, called in subfigure captions. 2021/01/30
\DeclareMathVersion{sans}
\SetSymbolFont{letters}{sans}{OML}{ntxsfmi}{m}{it}
\SetSymbolFont{lettersA}{sans}{U}{ntxsfmia}{m}{it}
@@ -569,7 +536,7 @@
\SetMathAlphabet{\mathsf}{sans}{\encodingdefault}{\sfdefault}{m}{n}
-%%%%%%%%%%%%%%%%% Some adjustments to math layout %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% Some adjustments to math layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setlength{\jot}{10pt}% <== default is 3pt
@@ -580,7 +547,7 @@
\allowdisplaybreaks % ASME allows these breaks
-%%%%%%%%%%%%%%%%% Equation and Line Numbering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% Equation and Line Numbering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{etoolbox}% patching amsmath
@@ -598,37 +565,36 @@
\ifasmejour@lineno
\RequirePackage[switch,mathlines]{lineno}%
- \renewcommand{\linenumberfont}{\normalfont\footnotesize\color{red}}%
+ \renewcommand{\linenumberfont}{\normalfont\scriptsize\color{red}}%
\AtBeginDocument{\linenumbers}%
\ifasmejour@balance
- \ClassWarningNoLine{asmejour}{Package lineno loaded, so final column balancing will be disabled}%
+ \ClassWarningNoLine{\ClassName}{Package lineno loaded, so final column balancing will be disabled}%
\fi
%%% Patch to allow line numbering in AMS math environments.
%%% This patch is for lineno versions earlier than v5.2 [2023/05/19]. As of mid-2023, the lineno package
%%% has been corrected to account for the AMS math environments. Retaining temporarily for backward compatibility.
%%% postdisplaypenalty adjusted to avoid extra line number at end, see: https://tex.stackexchange.com/a/461192/
- %%% multline has some additional problem that puts an extra line number above it.
\IfPackageAtLeastTF{lineno}{2023/05/19}{\relax}{
- \NewDocumentCommand{\ac@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}}
+ \NewDocumentCommand{\aj@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}}
%
- \NewDocumentCommand{\ac@FixAMSMath}{m}{%
- \AtBeginEnvironment{#1}{\ac@losepostpenalty\linenomath}%
+ \NewDocumentCommand{\aj@FixAMSMath}{m}{%
+ \AtBeginEnvironment{#1}{\aj@losepostpenalty\linenomath}%
\AtEndEnvironment{#1}{\endlinenomath}%
- \AtBeginEnvironment{#1*}{\ac@losepostpenalty\linenomath}%
+ \AtBeginEnvironment{#1*}{\aj@losepostpenalty\linenomath}%
\AtEndEnvironment{#1*}{\endlinenomath}%
}
%
- \NewDocumentCommand{\ac@FixAll}{>{\SplitList{;}}m}{\ProcessList{#1}{\ac@FixAMSMath}}
+ \NewDocumentCommand{\aj@FixAll}{>{\SplitList{;}}m}{\ProcessList{#1}{\aj@FixAMSMath}}
%
- \ac@FixAll{align;alignat;gather;flalign;multline}
+ \aj@FixAll{align;alignat;gather;flalign;multline}
}
%
\else
\ProvideDocumentEnvironment{linenomath}{}{}{}%
- \ifasmejour@balance % balancing through flushend can produce weird errors
- \RequirePackage{flushend}% flushend package is NOT compatible with lineno
+ \ifasmejour@balance % balancing through flushend can produce weird errors.
+ \RequirePackage{flushend}% flushend package is NOT compatible with lineno.
\AtEndDocument{\flushcolsend}%
- \LogNote{Calling flushend package to balance column height on last page}%
+ \ClassNoteNoLine{\ClassName}{Calling flushend package to balance column height on last page}%
\fi%
\fi
@@ -638,9 +604,9 @@
%% ASME page proofs seem to align the number at top of the line, rather than bottom as done here.
-%%%%%%%%%%%%%%%%% Footer Set Up %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% Footer Set Up %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%% footer text names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% footer text names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\JourName}[1]{\gdef\@JourName{#1}}
\providecommand\@JourName{\hbox{ }}
@@ -650,8 +616,8 @@
}
\providecommand\@PaperYear{\the\year}
-\def\@PreprintStringL{PREPRINT FOR REVIEW}
-\def\@PreprintStringR{PREPRINT FOR REVIEW}
+\def\@PreprintStringL{PREPRINT}% updated 2024/07/24
+\def\@PreprintStringR{PREPRINT}
\NewDocumentCommand{\PreprintString}{m o}{%
\IfNoValueTF{#2}{%
@@ -668,32 +634,53 @@
%%%%%% Fancyhdr %%%%%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage{fancyhdr}
+\RequirePackage{fancyhdr}% options revised 2024/07/23
\pagestyle{fancy}
\fancyhf{}% clear all header and footer fields
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
-\fancyfoot[RE]{\large\bfseries\sffamily Transactions of the ASME}
-\fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName}
-\fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage}
-\fancyfoot[LE]{\large\sffamily {\bfseries \@PaperNumber\thepage\space\space/}\space\space\@PreprintStringL\ }
+\ifasmejour@nofoot
+ \fancyfoot[CE,CO]{\thepage}
+\else
+ \fancyfoot[RE]{\large\bfseries\sffamily Transactions of the ASME}
+ \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName}
+ \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage}
+ \fancyfoot[LE]{\large\sffamily {\bfseries \@PaperNumber\thepage\space\space/}\space\space\@PreprintStringL\ }
+\fi
-\fancypagestyle{title}{%
+\fancypagestyle{title}{% is an odd page
\fancyhf{}% clear all header and footer fields
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
- \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage}
- \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName}
- \fancyfoot[CO]{\large\bfseries\sffamily Copyright \textcopyright\ \@PaperYear\ by ASME}
+ \ifasmejour@nofoot
+ \fancyfoot[CO]{\thepage}
+ \else
+ \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage}
+ \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName}
+ \ifasmejour@nocopyright
+ \fancyfoot[CO]{}
+ \else
+ \fancyfoot[CO]{\large\bfseries\sffamily Copyright \textcopyright\ \@PaperYear\ by ASME}
+ \fi
+ \fi
}
+
%%%%%% Footnotes %%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{fnpos}
\makeFNbottom
\makeFNbelow
+\RequirePackage{footmisc}%
+\IfPackageAtLeastTF{footmisc}{2022/02/05}{
+ \PassOptionsToPackage{belowfloats}{footmisc}%
+ }{ \RequirePackage{fnpos}
+ \makeFNbottom
+ \makeFNbelow
+ }%
+\setlength\footnotemargin{4mm}% reduce indentation of footnotes, from footmisc
\setlength{\skip\footins}{12pt plus 2pt minus 1pt}
\renewcommand{\footnoterule}{%
@@ -702,10 +689,6 @@
\kern 2pt
}
-%% reduce indentation of footnotes
-\renewcommand\@makefntext[1]{%
- \noindent\makebox[4mm][r]{\@makefnmark}\hyphenpenalty=300\exhyphenpenalty=300 #1}% <== suppress hyphenation
-
%% Produces an unmarked footnote about the revision date.
%% This command is invoked by \date as part of \MakeTitlePage below.
%% Text can be anything given as the argument to \date{..}.
@@ -717,13 +700,13 @@
%% include a comma for sequential footnotes
\ExplSyntaxOn
- \cs_new:Npn \__asmejour_NoteComma:n { \peek_meaning:NT \footnote { \textsu{\mdseries,} } }
+ \cs_new:Npn \__asmejour_NoteComma:n { \peek_meaning:NT \footnote { \textsuperscript{\mdseries,} } }
\cs_new_eq:NN \__savefootnote \footnote
\cs_gset_protected:Npn \footnote #1 { \__savefootnote{#1}\__asmejour_NoteComma:n }
\ExplSyntaxOff
-%%%%%%%%% Caption Related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%% Caption Related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\addto{\captionsenglish}{%
\renewcommand{\figurename}{Fig.}
@@ -739,7 +722,7 @@
\captionsetup[figure]{labelfont={sf,bf},textfont={sf,bf},textformat=boldmath,labelsep=quad}
\captionsetup[table]{labelfont={sf,bf},textfont={sf,bf},textformat=boldmath,labelsep=quad,skip=0.5\baselineskip}
-%% 30 January 2021. ASME only labels subfigures with a sans serif, italic (a), (b),... no caption text, no bold face.
+%% 2021/01/30: ASME only labels subfigures with a sans serif, italic (a), (b),... no caption text, no bold face.
\captionsetup[subfigure]{labelfont={sf},textfont={sf},textformat=sansmath,labelformat=simple}% default: =parens
\renewcommand\thesubfigure{(\textit{\alph{subfigure}})}
@@ -747,7 +730,7 @@
\renewcommand\thesubtable{(\textit{\alph{subtable}})}
-%%%%%%%%%%%% Section Headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%% Section Headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[raggedright,indentafter]{titlesec}
@@ -760,28 +743,28 @@
\titlespacing{\subsubsection}{\parindent}{12pt plus 3pt minus 2pt}{0.5em}
%% ASME style does not seem to go lower than third level heading, so ...
-%% ....putting \paragraph into \subsubsection settings.
+%% ...put \paragraph into \subsubsection settings.
\titleformat{\paragraph}[runin]{\itshape}{\thesubsubsection}{0.5em}{}[.]
\titlespacing{\paragraph}{\parindent}{14pt plus 3pt minus 2pt}{0.5em}
%% Special handling of the appendices
%% Assumes that appendices are the last technical content in paper
-\providecommand{\appendicesname}{Appendices}
-
-\RenewDocumentCommand{\appendix}{}{%
- \pdfbookmark[1]{\appendicesname}{appendices}
- \setcounter{section}{0}
- \renewcommand\thesection{\Alph{section}}
- \setcounter{equation}{0}
- \renewcommand\theequation{\Alph{section}\arabic{equation}}
- \titleformat{\section}[block]{\mathversion{bold}\bfseries\large\raggedright}{\appendixname\ \thesection:}{0.5em}{}[\setcounter{equation}{0}]
-}
+\providecommand*{\appendicesname}{Appendices}
+\newcounter{appeqn}%% Code revised to better support tagged pdf, 2024/07/24
+\patchcmd{\appendix}{%
+ \setcounter{subsection}{0}}{%
+ \setcounter{subsection}{0}%
+ \pdfbookmark[1]{\appendicesname}{appendices}%
+ \@addtoreset{equation}{appeqn}\stepcounter{appeqn}%
+ \gdef\theequation{\@Alph\c@section\@arabic\c@equation}%
+}{}{}
+\apptocmd{\appendix}{\titleformat{\section}[block]{\mathversion{bold}\bfseries\large\raggedright}{\appendixname\ \thesection:}{0.5em}{}}
%% natbib's \bibsection controls section heading for References.
-%%%%%%%%%%%%%%%%% List environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% List environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{enumitem}
@@ -789,24 +772,20 @@
%% I have no examples of sublists...
-%%%%%%%%%%%%%%%%% Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%% Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach.
\ifpdftex
- %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation.
- \IfFormatAtLeastTF{2020/10/01}{\relax}{%
- \pdfgentounicode=1 %% enable CMaps; has moved into the latex kernel Oct 2020
- \input glyphtounicode.tex %% lists of mappings; has moved into the latex kernel Oct 2020
- }
+ %%% to assist with unicode glyph mapping in pdf/a, per M. Sharpe's recommendation in newtx documentation
\InputIfFileExists{glyphtounicode-cmr.tex}{}{} %% additional mappings
\InputIfFileExists{glyphtounicode-ntx.tex}{}{} %% additional mappings
+ %% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach.
\ifaj@setpdfa
- %%%% the pdfmanagement options are experimental, from Ulrike Fischer 2021/06/12
- \if@asme@pdfmanagement
- \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load a color profile}
+ %%%% the pdfmanagement options from Ulrike Fischer 2021/06/12
+ \ifasme@pdfmanagement
+ \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load a color profile}
\else
- \ClassInfo{asmejour}{pdfmanagement not defined. Class file will load a color profile}%
+ \ClassInfo{\ClassName}{pdfmanagement not defined. Class file will load a color profile}%
%%% a fairly generic RGB color profile, aimed at on-screen rendering (not print production)
\immediate\pdfobj stream attr{/N 3} file{sRGB.icc}
\pdfcatalog{%
@@ -826,41 +805,41 @@
%%%
-\RequirePackage[psdextra]{hyperref} % recent kernel transition suggests providing most hyperref options via \hypersetup,
- % but setting psdextra here (for additional math support in bookmarks) 2021/12/23
+\RequirePackage[psdextra]{hyperref} % provide most hyperref options via \hypersetup, but per documentation
+ % set [psdextra] here (for additional math support in bookmarks) 2021/12/23
\hypersetup{%
- pdfborder={0 0 0},%
- bookmarksnumbered=true,%
- bookmarksopen=true,%
- bookmarksopenlevel=1,%
- colorlinks=true,%
- linkcolor=blue, %
- citecolor=blue, %
- urlcolor=blue, %
- filecolor=red, % added 2021/12/23, to make certain broken links more apparent
- pdfnewwindow=true,%
- pdfpagelayout=SinglePage, %TwoPageRight,% changed 2020/08/12
- pdfdisplaydoctitle=true%
+ pdfborder={0 0 0},
+ bookmarksnumbered=true,
+ bookmarksopen=true,
+ bookmarksopenlevel=1,
+ colorlinks=true,
+ linkcolor=blue,
+ citecolor=blue,
+ urlcolor=blue,
+ filecolor=red, % added 2021/12/23, to make certain broken links more apparent
+ pdfnewwindow=true,
+ pdfpagelayout=SinglePage, % was TwoPageRight, changed 2020/08/12
+ pdfdisplaydoctitle=true,
}
\urlstyle{same} % don't switch to typewriter font
\RequirePackage{doi} % supports nasty characters in some doi's
\renewcommand{\doitext}{doi:~} % change the default, {doi:}, to this for ASME specification
-\RequirePackage{bookmark} % improves handling of pdf bookmarks
\providecommand*{\toclevel@subfigure}{1}% <== to address unknown bookmark level of subfigure. 2021/12/24
\providecommand\hrefurl[2]{\href{#1}{#2}}% to address certain issues around URL recognition with new pdf management code, 2021/12/22
%% This alias is also incorporated into asmejour.bst
-\if@asme@pdfmanagement
- \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp}
+\ifasme@pdfmanagement
+ \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load hyperxmp}
\else
+ \RequirePackage{bookmark} %% improves handling of pdf bookmarks
\RequirePackage{hyperxmp} %% to fix transfer of metadata to Acrobat pdf
% Patch bug in hyperxmp, unless a more recent version is used.
\@ifpackagelater{hyperxmp}{2022/10/15}{% v5.11 or later
\relax
- % \ClassInfo{asmeconf}{hyperxmp v5.11 or later is in use}
+ % \ClassInfo{\ClassName}{hyperxmp v5.11 or later is in use}
}{%
\ifx\undefined\hyxmp@no@bad@parts\relax\else
\newcount\hypxmp@tempcnt
@@ -872,10 +851,11 @@
}
\fi
-%%%%%% Adjustments to accommodate hyperref bookmarks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%% Adjustments to accommodate hyperref bookmarks %%%%%%%%%%%%%%%%%%%%%%
-%%% ==> recent and evolving development of \pdfstring removes all robust commands from bookmarks, so
-%%% the following interventions may become unnecessary over time (2021/12/23).
+%%% Recent development of \pdfstring has removed all robust commands from bookmarks (2021/12/23).
+%%% By mid-2024, no errors are thrown except for \bm; however, these commands serve to still suppress warnings.
+%%% Math shift by $..$ still creates a warning, but I am leaving that in place. To avoid, use \( .. \) instead.
%% Since \bm is useful in headings, this fix will reduce frequency with which
%% alternate pdfstrings must be given in section command as \section[pdfstring]{texstring}
@@ -896,7 +876,7 @@
%% Ensure that tag color does not follow \eqref into bookmarks, 2020/02/28
\pdfstringdefDisableCommands{%
- \def\eqref#1{(\ref{#1})}%
+ \def\eqref#1{(\ref*{#1})}%
}
%% Let's make sure footnotes in section headings don't break pdf bookmarks.
@@ -906,13 +886,13 @@
}
-%%%%%%%%%%%%% Define some section and other names for special environments %%%%%%%
+%%%%%%%%%%%%% Define some section and other names for special environments %%%%%%%%%%%%%%%%%%%%%%%%
\providecommand{\nomname}{Nomenclature}
\providecommand{\keywordname}{Keywords}
\providecommand{\CAwords}{Corresponding Author.}
-%%%%%%%%%%%%% Nomenclature Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%% Nomenclature Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Nomenclature environment in ASME Journal Style.
%% Run twice to get proper label width.
@@ -926,7 +906,7 @@
\NewDocumentCommand{\entry}{m m}{%
\ifblank{#2}{%
- \ClassError{asmejour}{The command \protect\entry should have two arguments. For subheadings, use \protect\EntryHeading}{It appears that you gave only one argument for \protect\entry. You need to include a second argument.}
+ \ClassError{\ClassName}{The command \protect\entry should have two arguments. For subheadings, use \protect\EntryHeading}{It appears that you gave only one argument for \protect\entry. You need to include a second argument.}
}{%
\item[\hfill#1${} = {}$]#2%
\@itempenalty=-\@lowpenalty%
@@ -938,7 +918,7 @@
%% A separate command command for nomenclature subheadings
\NewDocumentCommand\EntryHeading{m}{%
- \itemsep12\p@ plus 4\p@ minus 4\p@% \bigskip
+ \itemsep12\p@ plus 4\p@ minus 4\p@
\goodbreak\item[\bfseries#1\hfill]\mbox{}\itemsep3\p@ plus 1\p@ minus 1\p@\@itempenalty=1000% add \mbox for tagged pdf, 2023/10/20
}
@@ -966,28 +946,25 @@
}%
}{%
\setcounter{savedlength}{\widest}%
- \end{list}%
+ \end{list}\ignorespacesafterend
}
-%%%%%%%%%%%%%%%% List of figures and list of tables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% List of figures and list of tables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ASME requires these lists for production.
\ifasmejour@nolists
- \LogNote{Omitting lists of figures and tables}%
+ \ClassNoteNoLine{\ClassName}{Omitting lists of figures and tables}%
\else
\AtEndDocument{%
- \clearpage
\twocolumn[%
- \begin{@twocolumnfalse}
\listoffigures
\listoftables
- \end{@twocolumnfalse}
]%
}%
\fi
-%%%%%%%%%%%%%%%% Author/Title/Abstract block %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% Author/Title/Abstract block %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{xcoffins}
@@ -1028,12 +1005,12 @@
\fi
}
-
\NewDocumentCommand\SetTitle{m}{%
\SetVerticalCoffin{\Title}{114mm}{%
\vspace*{0.5mm}% <== ASME doesn't align bar and text
\noindent\Huge\CondSansBold\raggedright%
#1%
+ %\gdef\@title{#1}% for tagging, etc. 2024/07/24. pdf metadata will probably override.
\par
}
}
@@ -1086,7 +1063,7 @@
\addtocounter{footnote}{-1}% in case of more than one CA
}
-%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\@AbstractSep}%% <== separation of author/abstract coffin from main two-column text.
\setlength{\@AbstractSep}{12.5mm}
@@ -1094,12 +1071,15 @@
\NewDocumentCommand{\MakeTitlePage}{}{%
\thispagestyle{title}%
- \twocolumn[
- \begin{@twocolumnfalse}
+ \ifasmejour@singlecolumn % 2024/07/20
\@ConstructAuthorBlock
\vspace*{\@AbstractSep}
- \end{@twocolumnfalse}
- ]
+ \else
+ \twocolumn[
+ \@ConstructAuthorBlock
+ \vspace*{\@AbstractSep}
+ ]
+ \fi
\ifaj@CA
\addtocounter{footnote}{1}
\footnotetext{\CAwords}
@@ -1113,7 +1093,7 @@
\fi
}
-%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Provide compatibility with titling commands from standard LaTeX article class
@@ -1143,7 +1123,7 @@
\RenewDocumentCommand{\thanks}{m}{\relax}%% disabling this standard command, as it is inconsistent with this format
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\endinput
%%
diff --git a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf
index 5b93ad2cf9..c3b0bc535e 100644
--- a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf
+++ b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf
Binary files differ
diff --git a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex
index 69b98af0b2..5a506330aa 100644
--- a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex
+++ b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex
@@ -1,6 +1,6 @@
%% Examples of a widetext macro for setting wide equations in the asmejour class.
%%
-%% Copyright (c) 2022 John H. Lienhard. Use under the MIT license: https://ctan.org/license/mit
+%% Copyright (c) 2024 John H. Lienhard. Use under the MIT license: https://ctan.org/license/mit
%%
%%
%% USAGE: * \begin{widetext} ...wide material here... \end{widetext}
@@ -15,8 +15,8 @@
\documentclass[nocopyright,nolists,pdf-a]{asmejour}
%% This file's version and date are:
- \def\AJwidetextversion{1.01}
- \def\AJverdate{October 22, 2023}
+ \def\AJwidetextversion{1.02}
+ \def\AJverdate{July 24, 2024}
%
\usepackage{asmewide}
\usepackage{lipsum}% Latin filler text (lipsum generates a message about 'unused global options' - this can be ignored)
@@ -81,6 +81,8 @@ address = {New York},
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
+\PreprintString{PREPRINT}
+
\SetAuthorBlock{John H.\ Lienhard V}{%
Fellow of ASME \\
Rohsenow Kendall Heat Transfer Laboratory, \\
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
index 2eb2bb0a71..da0dc2cbdb 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
index 701df1e896..f3d21083b3 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
@@ -120,7 +120,7 @@
\title{Mode d’emploi du module \ext{babel-french}}
\author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}}
-\newcommand*{\latestversion}{3.6b}
+\newcommand*{\latestversion}{3.6c}
\date{Version {\latestversion} -- \today}
\begin{document}
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
index 1ec34d6f5b..b52e5c67e7 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
@@ -75,7 +75,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
%<frenchb>\ProvidesLanguage{frenchb}
%<lua>--[[
%<lua> File `frenchb.lua’ generated from frenchb.dtx
- [2024-06-26 v3.6b French support from the babel system]
+ [2024-07-25 v3.6c French support from the babel system]
%<lua> Copyright © 2014-2024 Daniel Flipo
%<lua> <daniel (dot) flipo (at) free (dot) fr>
%<lua> License LPPL: see french.ldf.
@@ -2782,7 +2782,7 @@ return french_punctuation
% \changes{v3.2c}{2016/05/14}{New definition based on
% \cs{FB@spacing@off} common to all engines.}
%
-% \changes{v3.6b}{2024/06/25}{\cs{NoAutoSpacing} must be inhibited
+% \changes{v3.6b}{2024/06/26}{\cs{NoAutoSpacing} must be inhibited
% in bookmarks.}
%
% \begin{macrocode}
@@ -4582,6 +4582,10 @@ return french_punctuation
\@onlypreamble\frenchbsetup
% \end{macrocode}
%
+% \changes{v3.6c}{2024/07/25}{Removed spurious @ in
+% \cs{FBCompactItemize@setup} and \cs{FBListOldLayout@setup}
+% commands’ names.}
+%
% The following commands, defined with property |.code| in
% |DeclareKeys{}|, execute some post-treatment required to
% immediately take the flags value into account.
@@ -4623,14 +4627,14 @@ return french_punctuation
Reported}%
\fi
}
-\newcommand*{\FB@ListOldLayout@setup}[1]%
+\newcommand*{\FBListOldLayout@setup}[1]%
{\csname FBListOldLayout#1\endcsname
\ifFBListOldLayout
\FBStandardEnumerateEnvtrue
\renewcommand*{\FrenchLabelItem}{\textendash}%
\fi
}
-\newcommand*{\FB@CompactItemize@setup}[1]%
+\newcommand*{\FBCompactItemize@setup}[1]%
{\csname FBCompactItemize#1\endcsname
\ifFBCompactItemize
\FBStandardItemizeEnvfalse
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
index 44cf3388f2..7e4ce7735b 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/CHANGELOG.md b/macros/latex/contrib/beamer-contrib/themes/moloch/CHANGELOG.md
index 1d90d7617c..d1e8bc4d60 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/CHANGELOG.md
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+## [0.4.0](https://github.com/jolars/moloch/compare/v0.3.0...v0.4.0) (2024-07-09)
+
+
+### Features
+
+* add a small amount of vertical space before subtitle ([b224a9b](https://github.com/jolars/moloch/commit/b224a9b5067187e64a7669b61aee029447535729))
+* support memoize package (closes [#16](https://github.com/jolars/moloch/issues/16)) ([1ca26e8](https://github.com/jolars/moloch/commit/1ca26e857a331fcb29296c4987b69aea0db90fae))
+* support title format modifications ([#18](https://github.com/jolars/moloch/issues/18)) ([46a4f49](https://github.com/jolars/moloch/commit/46a4f49e8bb95798c2d6f3b69a1b96128d95cb8b))
+
+
+### Bug Fixes
+
+* add % at the end of some commands ([33b9833](https://github.com/jolars/moloch/commit/33b9833f21d3e0654fe2452d0b8ac8e8eb3a47bb))
+* convert raw command in manual to text ([ac305e9](https://github.com/jolars/moloch/commit/ac305e9b547ce44e0573f333adc4e6684eb88b68))
+
## [0.3.0](https://github.com/jolars/moloch/compare/v0.2.0...v0.3.0) (2024-03-06)
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/README.md b/macros/latex/contrib/beamer-contrib/themes/moloch/README.md
index f3b7971303..c8d9b78f15 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/README.md
@@ -12,19 +12,23 @@ The fork was created for the following reasons:
- To remove some of the more opinionated design choices, such as special handling of the Fira family of fonts.
- To strip away some features that added complexity to the code base without achieving valuable functionality for the majority of users, such as special code block designs and the pgfplots theme.
+[Here's a blog post](https://jolars.co/blog/2024-05-30-moloch/) in which I introduce the theme and write in more detail about the changes with respect to Metropolis.
+
Do not expect this theme to be backwards compatible with the Metropolis theme.
+![Screenshot](https://raw.githubusercontent.com/jolars/moloch/main/assets/screenshot.svg)
+
## Installation
Moloch is on [CTAN](https://ctan.org/pkg/moloch), so you can install it using your favorite LaTeX package manager. For example, with `tlmgr`:
-```sh
+```bash
tlmgr install moloch
```
You can also install the theme from source, in which case you need a working LaTeX installation with `l3build` installed. Then just follow these steps:
-```sh
+```bash
git clone https://github.com/jolars/moloch.git
cd moloch
l3build install
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamercolorthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamercolorthememoloch.dtx
index d6a14105ca..f0f644acbd 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/beamercolorthememoloch.dtx
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamercolorthememoloch.dtx
@@ -14,7 +14,7 @@
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamercolorthememoloch}[2024-03-06 v0.3.0 Moloch color theme] % x-release-please-version
+\ProvidesPackage{beamercolorthememoloch}[2024-07-09 v0.4.0 Moloch color theme] % x-release-please-version
%</package>
% \fi
% \CheckSum{0}
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerfontthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerfontthememoloch.dtx
index 4748387c3c..cc3396fe47 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerfontthememoloch.dtx
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerfontthememoloch.dtx
@@ -14,7 +14,7 @@
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamerfontthememoloch}[2024-03-06 v0.3.0 Moloch font theme] % x-release-please-version
+\ProvidesPackage{beamerfontthememoloch}[2024-07-09 v0.4.0 Moloch font theme] % x-release-please-version
%</package>
% \fi
% \CheckSum{0}
@@ -27,9 +27,12 @@
%
% A |beamer| font theme sets the style of the font used in the document.
%
+%
+%
% \subsubsection{Package dependencies}
%
% \begin{macrocode}
+\RequirePackage{etoolbox}
\RequirePackage{pgfopts}
% \end{macrocode}
%
@@ -51,6 +54,188 @@
\setbeamerfont{standout}{size=\Large, series=\bfseries}
% \end{macrocode}
%
+%
+%
+% \subsubsection{Title format options}
+%
+% \begin{macro}{titleformat title}
+% Controls the format of the title.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/font/titleformat title/.cd,
+ .is choice,
+ regular/.code={%
+ \let\moloch@titleformat\@empty%
+ \setbeamerfont{title}{shape=\normalfont}%
+ },
+ smallcaps/.code={%
+ \let\moloch@titleformat\@empty%
+ \setbeamerfont{title}{shape=\scshape}%
+ },
+ allsmallcaps/.code={%
+ \let\moloch@titleformat\lowercase%
+ \setbeamerfont{title}{shape=\scshape}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat title=allsmallcaps can lead to problems%
+ }
+ },
+ allcaps/.code={%
+ \let\moloch@titleformat\uppercase%
+ \setbeamerfont{title}{shape=\normalfont}
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat title=allcaps can lead to problems%
+ }
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{titleformat subtitle}
+% Control the format of the subtitle.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/font/titleformat subtitle/.cd,
+ .is choice,
+ regular/.code={%
+ \let\moloch@subtitleformat\@empty%
+ \setbeamerfont{subtitle}{shape=\normalfont}%
+ },
+ smallcaps/.code={%
+ \let\moloch@subtitleformat\@empty%
+ \setbeamerfont{subtitle}{shape=\scshape}%
+ },
+ allsmallcaps/.code={%
+ \let\moloch@subtitleformat\MakeLowercase%
+ \setbeamerfont{subtitle}{shape=\scshape}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat subtitle=allsmallcaps can lead to problems%
+ }
+ },
+ allcaps/.code={%
+ \let\moloch@subtitleformat\MakeUppercase%
+ \setbeamerfont{subtitle}{shape=\normalfont}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat subtitle=allcaps can lead to problems%
+ }
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{titleformat section}
+% Controls the format of the section title.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/font/titleformat section/.cd,
+ .is choice,
+ regular/.code={%
+ \let\moloch@sectiontitleformat\@empty%
+ \setbeamerfont{section title}{shape=\normalfont}%
+ },
+ smallcaps/.code={%
+ \let\moloch@sectiontitleformat\@empty%
+ \setbeamerfont{section title}{shape=\scshape}%
+ },
+ allsmallcaps/.code={%
+ \let\moloch@sectiontitleformat\MakeLowercase%
+ \setbeamerfont{section title}{shape=\scshape}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat section=allsmallcaps can lead to problems%
+ }
+ },
+ allcaps/.code={%
+ \let\moloch@sectiontitleformat\MakeUppercase%
+ \setbeamerfont{section title}{shape=\normalfont}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat section=allcaps can lead to problems%
+ }
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{frametitleformat}
+% Control the format of the frame title.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/font/titleformat frame/.cd,
+ .is choice,
+ regular/.code={%
+ \let\moloch@frametitleformat\@empty%
+ \setbeamerfont{frametitle}{shape=\normalfont}%
+ },
+ smallcaps/.code={%
+ \let\moloch@frametitleformat\@empty%
+ \setbeamerfont{frametitle}{shape=\scshape}%
+ },
+ allsmallcaps/.code={%
+ \let\moloch@frametitleformat\MakeLowercase%
+ \setbeamerfont{frametitle}{shape=\scshape}%
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat frame=allsmallcaps can lead to problems%
+ }
+ },
+ allcaps/.code={%
+ \let\moloch@frametitleformat\MakeUppercase%
+ \setbeamerfont{frametitle}{shape=\normalfont}
+ \PackageNote{beamerthememoloch}{%
+ Be aware that titleformat frame=allcaps can lead to problems%
+ }
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{titleformat aliases}
+% Allows |titleformat title| et al. to be used in the |\usetheme|
+% declaration, where \LaTeX{} automatically removes all spaces.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/font/.cd,
+ titleformattitle/.code=\pgfkeysalso{titleformat title=#1},
+ titleformatsubtitle/.code=\pgfkeysalso{titleformat subtitle=#1},
+ titleformatsection/.code=\pgfkeysalso{titleformat section=#1},
+ titleformatframe/.code=\pgfkeysalso{titleformat frame=#1},
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\moloch@font@setdefaults}
+% Sets default values for font theme options.
+% \begin{macrocode}
+\newcommand{\moloch@font@setdefaults}{
+ \pgfkeys{/moloch/font/.cd,
+ titleformat title=regular,
+ titleformat subtitle=regular,
+ titleformat section=regular,
+ titleformat frame=regular,
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We first define hooks to change the case format of the titles.
+%
+% \begin{macrocode}
+\def\moloch@titleformat#1{#1}
+\def\moloch@subtitleformat#1{#1}
+\def\moloch@sectiontitleformat#1{#1}
+\def\moloch@frametitleformat#1{#1}
+% \end{macrocode}
+%
+% To make the uppercase and lowercase macros work in the title, subtitle, etc.,
+% we have to patch the appropriate |beamer| commands that set their values.
+% This solution was suggested by Enrico Gregorio in an answer to
+% \href{http://tex.stackexchange.com/questions/112526/}{this StackExchange
+% question}.
+%
+%
+% \subsubsection{Process package options}
+%
+% \begin{macrocode}
+\moloch@font@setdefaults
+\ProcessPgfPackageOptions{/moloch/font}
+% \end{macrocode}
% \iffalse
%</package>
% \fi
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
index 2b626d526d..9815a0995f 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
@@ -14,7 +14,7 @@
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamerinnerthememoloch}[2024-03-06 v0.3.0 Moloch inner theme] % x-release-please-version
+\ProvidesPackage{beamerinnerthememoloch}[2024-07-09 v0.4.0 Moloch inner theme] % x-release-please-version
%</package>
% \fi
% \CheckSum{0}
@@ -173,7 +173,7 @@
% \begin{macrocode}
\setbeamertemplate{title}{
\raggedright%
- \inserttitle%
+ \moloch@titleformat{\inserttitle}%
\par%
\vspace*{0.2em}
}
@@ -184,8 +184,9 @@
% Set the subtitle on the title page.
% \begin{macrocode}
\setbeamertemplate{subtitle}{
+ \vspace*{0.1em}
\raggedright%
- \insertsubtitle%
+ \moloch@subtitleformat{\insertsubtitle}%
\par%
\vspace*{0.2em}
}
@@ -201,6 +202,7 @@
\setbeamertemplate{title separator}{
\tikzexternaldisable%
\begin{tikzpicture}
+ \mmzUnmemoizable%
\fill[fg] (0,0) rectangle (\textwidth, \moloch@titleseparator@linewidth);
\end{tikzpicture}%
\tikzexternalenable%
@@ -256,7 +258,7 @@
\begin{center}
\usebeamercolor[fg]{section title}
\usebeamerfont{section title}
- \insertsectionhead\par
+ \moloch@sectiontitleformat{\insertsectionhead}\par
\ifx\insertsubsectionhead\@empty\else
\usebeamercolor[fg]{subsection title}
\usebeamerfont{subsection title}
@@ -270,7 +272,7 @@
\raggedright
\usebeamercolor[fg]{section title}
\usebeamerfont{section title}
- \insertsectionhead\\[-1ex]
+ \moloch@sectiontitleformat{\insertsectionhead}\\[-1ex]
\usebeamertemplate*{progress bar in section page}
\par
\ifx\insertsubsectionhead\@empty\else%
@@ -338,9 +340,10 @@
\setbeamertemplate{progress bar in section page}{
\pgfmathsetlength{\moloch@progressonsectionpage}{
\textwidth * min(1,\insertframenumber/\inserttotalframenumber)
- }
- \tikzexternaldisable
+ }%
+ \tikzexternaldisable%
\begin{tikzpicture}
+ \mmzUnmemoizable%
\fill[bg]
(0,0)
rectangle
@@ -350,7 +353,7 @@
rectangle
(\moloch@progressonsectionpage, \moloch@progressonsectionpage@linewidth);
\end{tikzpicture}
- \tikzexternalenable
+ \tikzexternalenable%
}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerouterthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerouterthememoloch.dtx
index a5d5910831..a0ce0af580 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerouterthememoloch.dtx
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerouterthememoloch.dtx
@@ -14,7 +14,7 @@
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamerouterthememoloch}[2024-03-06 v0.3.0 Moloch outer theme] % x-release-please-version
+\ProvidesPackage{beamerouterthememoloch}[2024-07-09 v0.4.0 Moloch outer theme] % x-release-please-version
%</package>
% \fi
% \CheckSum{0}
@@ -160,23 +160,42 @@
% Templates for the frame title, which is optionally underlined with a
% progress bar.
% \begin{macrocode}
+\newlength{\moloch@frametitle@padding}
+\setlength{\moloch@frametitle@padding}{2.2ex}
+\newcommand{\moloch@frametitlestrut@start}{%
+ \rule{0pt}{\moloch@frametitle@padding +%
+ \totalheightof{%
+ \ifcsdef{moloch@frametitleformat}{\moloch@frametitleformat X}{X}%
+ }%
+}%
+}
+
+\newcommand{\moloch@frametitlestrut@end}{%
+ \vphantom{\rule[-\moloch@frametitle@padding]{0pt}{\moloch@frametitle@padding}}
+}
\defbeamertemplate{frametitle}{plain}{%
\nointerlineskip%
\begin{beamercolorbox}[%
wd=\paperwidth,%
- sep=1.1ex,%
- leftskip=0.5ex,%
- rightskip=\the\glueexpr 0.5ex plus 1fill\relax,%
+ leftskip=1.6ex,%
+ rightskip=\the\glueexpr 1.6ex plus 1fill\relax,%
]{frametitle}%
\usebeamerfont{frametitle}%
- \vbox{}\vskip-0.4ex%
- \strut\insertframetitle\nolinebreak\strut\par%
+ \moloch@frametitlestrut@start%
+ \moloch@frametitleformat{\insertframetitle}%
{%
\ifx\insertframesubtitle\@empty%
\else%
- {\usebeamerfont{framesubtitle}\vspace{-0.8ex}\usebeamercolor[fg]{framesubtitle}\strut\insertframesubtitle\strut\par}%
+ {%
+ \par%
+ \usebeamerfont{framesubtitle}%
+ \vspace{-0.8ex}%
+ \usebeamercolor[fg]{framesubtitle}%
+ \insertframesubtitle%
+ }%
\fi
}%
+ \moloch@frametitlestrut@end%
\end{beamercolorbox}%
}
\setbeamertemplate{frametitle continuation}{\romannumeral\insertcontinuationcount}
@@ -192,13 +211,14 @@
\newlength{\moloch@progressinheadfoot@linewidth}
\setlength{\moloch@progressinheadfoot@linewidth}{0.4pt}
\setbeamertemplate{progress bar in head/foot}{
- \nointerlineskip
+ \nointerlineskip%
\pgfmathsetlength{\moloch@progressinheadfoot}{%
\paperwidth * min(1,\insertframenumber/\inserttotalframenumber)%
- }
+ }%
\begin{beamercolorbox}[wd=\paperwidth]{progress bar in head/foot}
- \tikzexternaldisable
+ \tikzexternaldisable%
\begin{tikzpicture}
+ \mmzUnmemoizable%
\fill[bg]
(0,0)
rectangle
@@ -208,7 +228,7 @@
rectangle
(\moloch@progressinheadfoot, \moloch@progressinheadfoot@linewidth);
\end{tikzpicture}
- \tikzexternalenable
+ \tikzexternalenable%
\end{beamercolorbox}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerthememoloch.dtx
index fcebef5a81..e6447ec791 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerthememoloch.dtx
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerthememoloch.dtx
@@ -12,7 +12,7 @@
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamerthememoloch}[2024-03-06 v0.3.0 Moloch Beamer theme] % x-release-please-version
+\ProvidesPackage{beamerthememoloch}[2024-07-09 v0.4.0 Moloch Beamer theme] % x-release-please-version
%</package>
% \fi
% \CheckSum{0}
@@ -52,14 +52,69 @@
}
% \end{macrocode}
%
+% \begin{macro}{titleformat plain}
+% Controls the formatting of the text on standout ``plain'' frames.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/titleformat plain/.cd,
+ .is choice,
+ regular/.code={%
+ \let\moloch@plaintitleformat\@empty%
+ \setbeamerfont{standout}{shape=\normalfont}%
+ },
+ smallcaps/.code={%
+ \let\moloch@plaintitleformat\@empty%
+ \setbeamerfont{standout}{shape=\scshape}%
+ },
+ allsmallcaps/.code={%
+ \let\moloch@plaintitleformat\MakeLowercase%
+ \setbeamerfont{standout}{shape=\scshape}%
+ },
+ allcaps/.code={%
+ \let\moloch@plaintitleformat\MakeUppercase%
+ \setbeamerfont{standout}{shape=\normalfont}%
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{titleformat}
+% Sets a standard format for titles, subtitles, section titles, frame
+% titles, and the text on standout ``plain'' frames.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/titleformat/.code=\pgfkeysalso{
+ font/titleformat title=#1,
+ font/titleformat subtitle=#1,
+ font/titleformat section=#1,
+ font/titleformat frame=#1,
+ titleformat plain=#1,
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Set default values for options.
+%
+% \begin{macrocode}
+\newcommand{\moloch@setdefaults}{
+ \pgfkeys{/moloch/.cd,
+ titleformat plain=regular,
+ }
+}
+% \end{macrocode}
+%
% To avoid generating externalized figures of the progressbar we have to disable
% them with ``tikzexternalenable'' and ``tikzexternaldisable''. However, if the
% ``external'' libray is not loaded we would get undefined control sequence
% problems, hence we define them as no-ops if they are not defined yet.
+% We do the same for the ``mmzUnmemoizable'' command from the memoize package, in
+% order to avoid memoization of the progress bars.
%
% \begin{macrocode}
\providecommand{\tikzexternalenable}{}
\providecommand{\tikzexternaldisable}{}
+\providecommand{\mmzUnmemoizable}{}
% \end{macrocode}
%
% \subsubsection{Component sub-packages}
@@ -98,6 +153,7 @@
% \subsubsection{Process package options}
%
% \begin{macrocode}
+\moloch@setdefaults
\ProcessPgfOptions{/moloch}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf b/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
index 3607149cef..15f0652a6a 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.tex b/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.tex
index a9eb326933..c8300607be 100644
--- a/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.tex
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.tex
@@ -58,7 +58,7 @@
xrightmargin=0em,
aboveskip=1em,
belowskip=1em,
- morekeywords={usetheme,institute,maketitle,%
+ morekeywords={usetheme,institute,maketitle,@moloch@titleformat,%
plain,setbeamercolor,molochset,setsansfont,setmonofont},
}
\lstMakeShortInline|
@@ -82,7 +82,7 @@
\newcommand{\themename}{\textsf{moloch}\xspace}
-\def\molochversion{0.3.0} % x-release-please-version
+\def\molochversion{0.4.0} % x-release-please-version
\usepackage{readprov}
% \ReadPackageInfos{beamerthememoloch}
@@ -166,10 +166,10 @@ The following code shows a minimal example of a Beamer presentation using
\begin{lstlisting}
\documentclass{beamer}
\usetheme{moloch}
-\title{A minimal example}
+\title{A Minimal Example}
\date{\today}
\author{Johan Larsson}
-\institute{Centre for Modern Beamer Themes}
+\institute{Some University}
\begin{document}
\maketitle
\section{First Section}
@@ -187,6 +187,7 @@ The following code shows a minimal example of a Beamer presentation using
\begin{itemize}
\item |tikz|
\item |pgfopts|
+ \item |etoolbox|
\item |calc|
\end{itemize}
\end{multicols}
@@ -224,6 +225,27 @@ The list of options is structured as shown in the following example.
A short description of the option.
}
+
+\subsubsection{Main theme}
+
+\DescribeOption{titleformat}%
+{regular, smallcaps, allsmallcaps, allcaps}
+{regular}{
+ Changes the format of titles, subtitles, section titles, frame titles, and
+ the text on ``standout'' frames. The available options produce
+ Regular, \textsc{SmallCaps}, \textsc{\MakeLowercase{AllSmallCaps}}, or
+ \MakeUppercase{AllCaps} titles. Note that these commands do not
+ affect math and numbers, so may not work as you expect if your titles
+ contain these.
+}
+
+\DescribeOption{titleformat plain}%
+{regular, smallcaps, allsmallcaps, allcaps}%
+{regular}{
+ Changes the format of ``standout'' frames (see |titleformat|, above).
+}
+
+
\subsubsection{Inner theme}
\DescribeOption{sectionpage}{none, simple, progressbar}{progressbar}{
@@ -270,6 +292,20 @@ The list of options is structured as shown in the following example.
of the reverse.
}
+
+\subsubsection{Font theme}
+
+\DescribeMacro{titleformat title}
+\DescribeMacro{titleformat subtitle}
+\DescribeMacro{titleformat section}
+\DescribeOption{titleformat frame}%
+{regular, smallcaps, allsmallcaps, allcaps}%
+{regular}{
+ Individually controls the format of titles, subtitles, section titles, and
+ frame titles (see |titleformat|, above).
+}
+
+
\subsection{Color Customization}
The included \themename color theme is used by default, but its colors can be
@@ -321,6 +357,18 @@ single sentence or image. To use it, add the key |standout| to the frame:
\section{Known Issues}
+\subsection{Title Formats}
+
+Be aware that not every font supports small caps, so the |smallcaps| or
+|allsmallcaps| options may not work for all fonts.
+In particular, the Computer Modern sans-serif typeface, which is used
+by default when \themename is compiled with pdf\LaTeX, does not have a
+small-caps variant.
+
+Note that title format options |allsmallcaps| and |allcaps| do not
+affect the sizes of numerals, punctuation, and math symbol, and are
+probably best avoided if your titles contain these characters.
+
\subsection{Interactions with other color themes}
\themename can be used along with any other Beamer color theme, such as
@@ -412,7 +460,7 @@ solution for Org mode users, using |org-set-property|.
\subsection{Standout frames with Pandoc}
-With Pandoc versions prior 1.17.2 it was not possible to create standout frames
+With Pandoc versions prior to 1.17.2 it was not possible to create standout frames
because Pandoc only supported a specific list of frame attributes thus ignoring
additional attributes such as |{.standout}|.
diff --git a/macros/latex/contrib/bib2qr/README.md b/macros/latex/contrib/bib2qr/README.md
new file mode 100644
index 0000000000..9f7bb900a1
--- /dev/null
+++ b/macros/latex/contrib/bib2qr/README.md
@@ -0,0 +1,88 @@
+# bib2qr
+
+[![License](https://img.shields.io/ctan/l/bib2qr?color=blue)](https://www.latex-project.org/lppl/lppl-1-3c.txt)
+[![Latest release](https://img.shields.io/gitea/v/release/Cs137/bib2qr?gitea_url=https%3A%2F%2Fcodeberg.org%2F)](https://codeberg.org/Cs137/bib2qr/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/bib2qr.svg)](https://ctan.org/pkg/bib2qr)
+
+A LaTeX package for citing BibTeX entries with QR codes.
+
+The `bib2qr` package provides functionality to cite BibTeX entries with QR codes
+for easy sharing and referencing. The target of the QR code is the entry's DOI,
+or URL if no DOI exists. A citation generated via `\qrfullcite`, which is part
+of `bib2qr`, might look as follows:
+
+[![Example output generated with `\qrfullcite`](https://codeberg.org/Cs137/bib2qr/media/branch/main/example/qrfullcite_example.png "Example output generated with qrfullcite")](https://codeberg.org/Cs137/bib2qr/media/branch/main/example/qrfullcite_example.png)
+
+
+## Installation
+
+Skip this section, if `bib2qr` is already provided in your TeX distribution.
+You should be able to install it [from the CTAN](https://www.ctan.org/pkg/bib2qr)
+via your distribution's utility (e.g. the TeX Live Utility).
+
+### Manual installation
+
+You can get the package's source code from the
+[project repository on Codeberg](https://codeberg.org/Cs137/bib2qr).
+The repository contains a build script, which allows you to build the required
+files for the `bib2qr` package and copy them into your _TeX Directory Structure_
+(TDS) using `l3build`. Ensure that `l3build` is installed on your system and run
+it from the repository's root directory as follows:
+
+```bash
+l3build install --full
+```
+
+The `--full` option ensures that all necessary files are built and installed.
+
+If you do not want to install the package into your TDS, but use it in a
+particular LaTeX project, follow the steps listed below.
+
+1. unpack `bib2qr.sty` from the `bib2qr.dtx` file
+ - using `l3build` and the `build.lua` script: `l3build unpack`, __or__
+ - directly via the installer file: `pdflatex bib2qr.ins`
+2. copy the extracted `bib2qr.sty` file into the same directory as your LaTeX sources.
+
+
+## Usage
+
+Please consult the [package documentation](http://mirrors.ctan.org/macros/latex/contrib/bib2qr/bib2qr.pdf)
+for detailed usage information.
+
+If you have any questions or need assistance, feel free to
+[open an issue on the repository](https://codeberg.org/Cs137/bib2qr/issues).
+
+
+## Changes
+
+All notable changes to this project are documented in the file
+[`CHANGELOG.md`](https://codeberg.org/Cs137/bib2qr/src/branch/main/CHANGELOG.md).
+
+
+## Contributing
+
+Contributions to the `bib2qr` package are very welcomed. Feel free to submit a
+pull request, if you would like to contribute to the project. In case you are
+unfamiliar with the process, consult the
+[forgejo documentation](https://forgejo.org/docs/latest/user/pull-requests-and-git-flow/)
+and follow the steps using this repository instead of the `example` repository.
+
+Create your [pull request (PR)](https://codeberg.org/Cs137/bib2qr/pulls) to
+inform that you start working on a contribution. Provide a clear description
+of your envisaged changes and the motivation behind them, prefix the PR's title
+with ``WIP: `` until your changes are finalised.
+
+All kind of contributions are appreciated, whether they are
+bug fixes, new features, or improvements to the documentation.
+
+
+### Contributors
+
+- [Christian Schreinemachers](https://codeberg.org/Cs137)
+- [Markus Kohm](https://codeberg.org/komascript)
+
+
+---
+
+This package was created and is maintained by Christian Schreinemachers, (C) 2024.
+
diff --git a/macros/latex/contrib/bib2qr/bib2qr.dtx b/macros/latex/contrib/bib2qr/bib2qr.dtx
new file mode 100644
index 0000000000..980c2002c2
--- /dev/null
+++ b/macros/latex/contrib/bib2qr/bib2qr.dtx
@@ -0,0 +1,594 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 Christian Schreinemachers
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The current maintainer of this work is Christian Schreinemachers.
+%
+% This work consists of the files
+% README.md
+% bib2qr.dtx
+% bib2qr.ins
+% and the derived files
+% bib2qr.sty
+% bib2qr.pdf
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \fi
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{bib2qr}
+%<package> [2024-07-31 v0.2 Cite BibTeX entries with QR codes]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[toc]{multitoc}
+\usepackage{geometry}
+\usepackage{fancyvrb}
+% Declare example reference entries
+\begin{filecontents}[overwrite]{example-references.bib}
+ @software{bib2qr,
+ author = {Schreinemachers, Christian},
+ title = {bib2qr - A LaTeX package for citing BibTeX entries with QR codes},
+ url = {https://codeberg.org/Cs137/bib2qr/releases/tag/v0.2},
+ version = {v0.2},
+ date = {2024-07-31}
+ }
+ @article{Doe2024,
+ author = {Doe, Jane},
+ title = {A comprehensive study on example generation},
+ journal = {Journal of Examples},
+ year = {2024},
+ volume = {42},
+ pages = {1982--2024},
+ doi = {10.1234/example.2024.001}
+ }
+ @article{Mustermann2023,
+ author = {Mustermann, Erika},
+ title = {Limitations in including electronic references in articles},
+ journal = {Journal of Examples},
+ year = {2023},
+ volume = {23},
+ pages = {624--666}
+ }
+\end{filecontents}
+\usepackage[style=authoryear,sorting=none]{biblatex}
+\addbibresource{example-references.bib}
+\usepackage[%
+ pdfusetitle,%
+ hyperindex=false,%
+ pdfsubject={LaTeX package documentation},%
+ pdfkeywords={bib2qr, biblatex, latex, qrcode, documentation}%
+]{hyperref}
+\usepackage{scrextend}
+\usepackage{cleveref}
+\usepackage[qrwidth=1.25cm]{bib2qr}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\DoNotIndex{\begin,\DeclareBibliographyDriver,\DeclareCiteCommand,\DeclareFieldFormat,
+ \DeclareKeys,\dimexpr,\edef,\end,\equal,\fullcite,\hspace,\IfBeginWith,
+ \ifboolexpr,\iffieldundef,\ifthenelse,\linewidth,\multicitedelim,
+ \NewDocumentCommand,\newcommand,\noindent,\par,\parindent,\printfield,
+ \ProcessKeyOptions,\qrcode,\RequirePackage,\relax,\SetKeys,\space,
+ \thefield,\usebibmacro,\usedriver}
+\setcounter{IndexColumns}{2}
+\setlength{\IndexMin}{40ex}
+\setlength{\columnseprule}{.4pt}
+\addtolength{\oddsidemargin}{2cm}
+\addtolength{\textwidth}{-2cm}
+\begin{document}
+ \DocInput{bib2qr.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \pagestyle{headings}
+%
+% \newcommand*{\package}[1]{\textsf{#1}}
+% \newcommand*{\ctanpkg}[1]{\href{https://ctan.org/pkg/#1}{\package{#1}}}
+% \newcommand*{\opt}[1]{\texttt{#1}}
+% \newcommand*{\default}[1]{(default: \opt{#1})}
+%
+%
+% ^^A -----------------------------
+%
+% \changes{v0.2}{2024-07-31}{%
+% Initial release,
+% convert into dtx,
+% add documentation,
+% rename internal macros,
+% add \opt{qrdelimiter} option
+% }
+% \changes{v0.1}{2024/06/16}{Initial version}
+%
+% \GetFileInfo{bib2qr.sty}
+%
+%
+% ^^A -----------------------------
+%
+% \title{The \package{bib2qr} package}
+% \author{Christian Schreinemachers}
+% \date{%
+% Released \filedate\thanks{%
+% \package{bib2qr}~\fileversion
+% ~(\href{https://codeberg.org/Cs137/bib2qr/releases/tag/\fileversion}{source code})}%
+% }
+% \maketitle
+%
+%
+% ^^A -----------------------------
+%
+% \begingroup
+% \hypersetup{
+% linkcolor=.,
+% citecolor=.,
+% urlcolor=.,
+% }
+% \begin{abstract}
+% The \package{bib2qr} package provides functionality to cite BibTeX entries
+% with QR codes for easy sharing and referencing. The target of the QR code
+% is the entry's digital object identifier (DOI), or URL if no DOI exists.
+% It is realised in the \cs{qrcite} macro, via the \LaTeX{} packages
+% \package{biblatex} and \package{qrcode}. In addition to the \cs{qrcite}
+% command, the package contains the \cs{qrfullcite} macro, which requires
+% only a BibTeX key as argument and allows to generate output that might
+% look as follows:\\
+% \textcolor{red}{\qrfullcite[noindent]{bib2qr}}
+% \end{abstract}
+% \endgroup
+%
+%
+% ^^A -----------------------------
+%
+% \tableofcontents
+%
+%
+% ^^A -----------------------------
+%
+% \section{Introduction}
+% ^^A
+% I like to include \href{https://en.wikipedia.org/wiki/QR_code}{quick-response (QR) codes}
+% of references on slides created with \LaTeX{} \ctanpkg{beamer}. Previously,
+% I did this by using the \ctanpkg{qrcode} package and manually declaring the
+% URL of the reference's digital object identifier (DOI). Occasionally, I also
+% add human-readable information generated via \cs{fullcite} from the
+% \ctanpkg{biblatex} package.
+%
+% To avoid manually declaring the URL and calling two separate commands for QR
+% codes and human-readable citations, I developed this \LaTeX{} package. It
+% automates the inclusion of QR codes by a \package{biblatex} bibliography
+% driver\footnote{%
+% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=166}
+% {\package{biblatex} documentation p.\,166 (v3.20)}%
+% },
+% which uses field formats to display QR codes for the entry's \opt{doi}
+% and \opt{url} fields with the \package{qrcode} package. You can cite any
+% reference from your bibliography with this driver by declaring its \meta{key}
+% to the \cs{qrcite} command. The latter is a cite command\footnote{%
+% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=186}%
+% {\package{biblatex} documentation p.\,186 (v3.20)}%
+% \label{biblatexCiteCommand}%
+% },
+% which ensures that any referenced QR code is also listed in the reference list.
+%
+% For the inclusion of both, QR codes and human-readable citation information
+% in a single step, I introduced the \cs{qrfullcite} command. It applies the
+% \cs{qrcite} command and the \cs{fullcite} command from the \package{biblatex}
+% package, ensuring clarity and ease of reference not only on \package{beamer}
+% slides, but in any \LaTeX{} document.
+%
+%
+% ^^A -----------------------------
+%
+% \section{Usage}
+% ^^A
+% Load the package in your document's preamble and specify any of the
+% options described in the next subsection as follows:
+%
+% \begin{quote}
+% \cs{usepackage}\oarg{option(s)}\{bib2qr\}
+% \end{quote}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Options}
+% ^^A
+% In order to change the default behaviour of this package, declare one
+% or more of the options described in this subsection with your desired
+% value.
+%
+% \begin{description}
+%
+% \item[\opt{doiurlbase=\meta{string}}] \default{https://doi.org/}
+% specifies the prefix to convert a DOI string into its URL. If the DOI
+% string starts with \meta{doiurlbase}, it is used as is to generate a
+% QR code. Otherwise, the DOI string is appended to \meta{doiurlbase} to
+% form the DOI's URL, which is then used to generate the QR code.
+% In normal use cases this option does not require any adjustment.
+%
+% \item[\opt{qrdelimiter=\meta{sepcode}}] \default{\cs{space}}
+% specifies the delimiter of QR codes generated by \cs{qrcite} in multicite
+% mode. It is shown between the individual QR codes of multiple references
+% created by \cs{qrcite}\marg{key1,key2,\dots keyN} and \emph{``\dots is
+% arbitrary code to be executed after each iteration...''}\,\footref{biblatexCiteCommand}.
+% The examples shown in this document were generated considering the
+% default \opt{qrdelimiter}.
+%
+% \item[\opt{qrversion=\meta{version specification}}] \default{0}
+% sets the version of the QR code. Consult the \package{qrcode} documentation
+% for details about the \meta{version specification}\footnote{%
+% \href{http://mirrors.ctan.org/macros/latex/contrib/qrcode/qrcode.pdf\#page=3}
+% {\package{qrcode} documentation p.\,3 (v1.51)}%
+% }.
+% The examples shown in this document were generated considering the
+% default \opt{qrversion}.
+%
+% \item[\opt{qrwidth=\meta{dimen}}] \default{2cm}
+% sets the width of the QR code. The value is used to determine the
+% width for the output of the \cs{fullcite} macro and is passed to
+% \package{qrcode} as \opt{height} option. The default value is quite
+% suitable for usage in \LaTeX{} \package{beamer} slides, but in such
+% documents as this one, a smaller width might be desired. The examples
+% shown in this document were generated using \opt{qrwidth=1.25cm}.
+%
+% \end{description}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Macros}
+% ^^A
+% \subsubsection*{\cs{qrcite}\marg{key(s)}}
+%
+% \DescribeMacro{\qrcite}
+% QR code(s) with a link to the reference's DOI or URL can be generated
+% using the \cs{qrcite} command. The target of the QR code is the entry's
+% DOI converted into a URL, or the URL iteself. In case the BibTeX entry has
+% no DOI and no URL, it does nothing besides raising a warning.
+% ^^A
+% The output for some example entries is shown underneath. If you
+% would like to replicate the examples, you can find the entries
+% sources as \cref{ssec:example_bib}. The colours are defined in the
+% examples, as this functionality is out of scope of the package
+% \package{bib2qr}. Moreover, \package{hyperlink} is configured in such
+% a way that the links in the following examples consider the font colour,
+% usually links would be presented in the colour defined as \opt{linkcolor}.
+%
+% The example displayed in blue was created via \textcolor{blue}{%
+% \cs{qrcite\{bib2qr\}}}. The QR code in red next to it was generated
+% via \textcolor{red}{\cs{qrcite\{Doe2024\}}}. The entry of the latter has a
+% DOI, while the entry of the blue example represents a BibTeX entry without
+% a DOI, but there is a value assigned to its URL field.
+% ^^A
+% The macro \cs{qrcite} is a cite command, thus it can be used to cite multiple
+% references, as shown in black (\cs{qrcite\{bib2qr,Doe2024\}}), and entries
+% cited via \cs{qrcite} are included in the document's bibliography
+% (cf. \cref{ssec:example_ref}).
+%
+% \begingroup
+% \hypersetup{
+% linkcolor=.,
+% citecolor=.,
+% urlcolor=.,
+% }
+%
+% \par\smallskip%
+% \noindent%
+% \textcolor{blue}{\qrcite{bib2qr}}
+% \textcolor{red}{\qrcite{Doe2024}}
+% \qrcite{bib2qr,Doe2024}
+% \par\medskip%
+%
+% \subsubsection*{\cs{qrfullcite}\marg{key}}
+%
+% \DescribeMacro{\qrfullcite}
+% This command displays the QR code of a BibTeX entry's DOI link or URL and
+% a full citation. The QR code is generated by \cs{qrcite} and the full
+% citation by \cs{fullcite}, provided by the package \package{biblatex}.
+% Each output is presented in individual minipages which are placed next to
+% each other, as shown in the examples underneath
+% (\textcolor{blue}{\cs{qrfullcite\{bib2qr\}}},
+% \textcolor{red}{\cs{qrfullcite[noindent]\{Doe2024\}}}).
+%
+% Please note that \cs{qrfullcite} does \textbf{not} support group
+% citations and accepts only a single \meta{key} as argument.
+%
+% \textcolor{blue}{\qrfullcite{bib2qr}}%
+% \medskip%
+% \textcolor{red}{\qrfullcite[noindent]{Doe2024}}%
+% \medskip%
+% \endgroup
+%
+% The output of \cs{qrfullcite} is considered as its own paragraph, thus it
+% may be indented, like in this document (see blue example). You can prevent
+% the latter by providing the \opt{noindent} option when calling the macro,
+% as done in the red example.
+%
+% The first minipage has the width of the package option \opt{qrwidth}
+% and displays the output of \cs{qrcite}\marg{key}. The second minipage
+% occupies the remaining width of \cs{linewidth} considering a gap of
+% \opt{0.5em} and \cs{parindent}, if the latter is not deactivated via the
+% \opt{noindent} option. It shows the output of \cs{fullcite}\marg{key}.
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Hints}
+% ^^A
+% If the \package{hyperref} package is loaded, not only the DOI/URL strings,
+% but also the QR codes are presented as links. It was modified in this
+% document to allow you to distinguish the output of the individual macro calls
+% in a better way. The previous example without any modifications of the
+% document settings and without deactivating the indentation looks as follows:\\
+%
+% \qrfullcite{Doe2024}%
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Known limitations}
+% ^^A
+% In case no QR code can be generated by \cs{qrcite} called via \cs{qrfullcite},
+% the output of \cs{fullcite} is nevertheless indented by the width assigned to
+% the \opt{qrwidth} package option and the length of the gap of \opt{0.5em}),
+% as shown in orange below (\textcolor{orange}{\cs{qrcite\{Mustermann2023\}}}).
+%
+% \textcolor{orange}{\qrfullcite{Mustermann2023}}%
+%
+%
+% ^^A -----------------------------
+%
+% \MaybeStop{
+%
+% \IndexPrologue{%
+% \section{Index}
+% Numbers written in italic refer to the page where the corresponding entry
+% is described; numbers underlined refer to the code line of the definition;
+% numbers in roman refer to the code lines where the entry is used.
+% }
+% \PrintIndex
+%
+% \GlossaryPrologue{%
+% \section{Change History}
+% The changes listed in this section aim to provide a brief overview of the
+% changes introduced into the package \package{bib2qr}. The
+% \href{https://codeberg.org/Cs137/bib2qr/}{package repository on Codeberg}
+% contains a
+% \href{https://codeberg.org/Cs137/bib2qr/src/branch/main/CHANGELOG.md}{changelog file},
+% consult it to read a detailed description of the changes introduced into
+% this package.
+% }
+% \PrintChanges
+%
+% ^^A -----------------------------
+%
+% \newpage
+% \appendix
+%
+% \section{Appendix}
+%
+% The examples presented in this document are based on the
+% BibTeX entries listed in \ref{ssec:example_bib} and result
+% in the bibliography shown as \ref{ssec:example_ref} (\package{biblatex}
+% options: \opt{style=authoryear}, \opt{sorting=none}).
+%
+% \subsection{Example BibTeX entries}
+% \label{ssec:example_bib}
+% \small{%
+% \VerbatimInput[firstline=5]{example-references.bib}
+% }
+%
+% \subsection{Example bibliography}
+% \label{ssec:example_ref}
+% \printbibliography[heading=none]
+%
+% }
+%
+%
+% ^^A -----------------------------
+%
+% \section{Implementation}
+% ^^A
+%
+% \subsection{Dependencies}
+% ^^A
+% In order to use \package{bib2qr}, the \LaTeX{} packages
+% \ctanpkg{biblatex},
+% \ctanpkg{ifthen},
+% \ctanpkg{qrcode}, and
+% \ctanpkg{xstring}
+% are required as package dependencies.
+% \iffalse
+%<*package>
+% \fi
+% \begin{macrocode}
+\RequirePackage{biblatex}
+\RequirePackage{ifthen}
+\RequirePackage{qrcode}
+\RequirePackage{xstring}
+% \end{macrocode}
+%
+%
+% \subsection{Options}
+% ^^A
+% The package options are internally available as \cs{@bibiiqr@}\meta{option}.
+% \begin{macrocode}
+\DeclareKeys[@bibiiqr]{
+ doiurlbase.store = \@bibiiqr@doiurlbase,
+ doiurlbase.usage = load,
+ qrdelimiter.store = \@bibiiqr@qrdelimiter,
+ qrdelimiter.usage = load,
+ qrversion.store = \@bibiiqr@qrversion,
+ qrversion.usage = load,
+ qrwidth.store = \@bibiiqr@qrwidth,
+ qrwidth.usage = load,
+}%
+% \end{macrocode}
+%
+% \subsubsection*{Assignement of default values}
+% \begin{macrocode}
+\SetKeys[@bibiiqr]{
+ doiurlbase=https://doi.org/,
+ qrdelimiter=\space,
+ qrversion=0,
+ qrwidth=2cm,
+}%
+% \end{macrocode}
+%
+% \subsubsection*{Processing of package options}
+% \begin{macrocode}
+\ProcessKeyOptions[@bibiiqr]\relax
+% \end{macrocode}
+%
+% \subsection{Macros}
+%
+% \begin{macro}{\@bibiiqr@showqr}
+% \marg{string}\\
+% Display a string as QR code considering the package options \opt{qrversion}
+% and \opt{qrwidth}.
+% \begin{macrocode}
+\newcommand\@bibiiqr@showqr[1]{%
+ \qrcode[height=\@bibiiqr@qrwidth,version=\@bibiiqr@qrversion]{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Field formats}
+%
+% Custom field formats are defined to display a QR code of an entry's
+% \texttt{doi} and \texttt{url}.
+%
+% \begin{macro}{@bibiiqr@fldFmtDoi}
+% Field format to display a DOI field's value (converted into an URL
+% considering the option \opt{@bibiiqr@doiurlbase}) as QR code using
+% macro \cs{@bibiiqr@showqr}.
+% \begin{macrocode}
+\DeclareFieldFormat{@bibiiqr@fldFmtDoi}{%
+ \IfBeginWith{#1}{\@bibiiqr@doiurlbase}%
+ {\@bibiiqr@showqr{#1}}%
+ {\@bibiiqr@showqr{\@bibiiqr@doiurlbase#1}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{@bibiiqr@fldFmtUrl}
+% Field format to display an URL field's value as QR code using \cs{@bibiiqr@showqr}.
+% \begin{macrocode}
+\DeclareFieldFormat{@bibiiqr@fldFmtUrl}{\@bibiiqr@showqr{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Bibliography driver}
+%
+% \begin{macro}{@bibiiqr@bibDrvQR}
+% This bibliography driver
+% allows to display the QR code of an entry's DOI-, or URL field.
+% It applies the \cs{printfield}\oarg{format}\marg{field} macro, which is
+% provided by the \package{biblatex} package to displpay a QR code using the
+% \texttt{@bibiiqr@fldFmtDoi} or \texttt{@bibiiqr@fldFmtUrl} field format and
+% the corresponding field, respectively.
+%
+% The DOI is preferred and the URL is only used if no value is assigned to
+% the DOI field. If neither the DOI, nor the URL field contains a value, a
+% package warning is raised.
+%
+% \begin{macrocode}
+\DeclareBibliographyDriver{@bibiiqr@bibDrvQR}{%
+ \usebibmacro{begentry}%
+ \ifboolexpr{test{\iffieldundef{doi}}}
+ {%
+ \ifboolexpr{test{\iffieldundef{url}}}%
+% \end{macrocode}
+% The entry has no DOI and no URL: Raise a warning.
+% \begin{macrocode}
+ {%
+ \PackageWarning{bib2qr}%
+ {BibTeX entry without DOI or URL: \thefield{entrykey}}{}%
+ }%
+% \end{macrocode}
+% The entry has no DOI but an URL: Display the \texttt{url} field's
+% value using the \texttt{@bibiiqr@fldFmtUrl} field format.
+% \begin{macrocode}
+ {\printfield[@bibiiqr@fldFmtUrl]{url}}%
+ }%
+% \end{macrocode}
+% The entry has a DOI: Display the \texttt{doi} field's value using
+% the \texttt{@bibiiqr@fldFmtDoi} field format.
+% \begin{macrocode}
+ {\printfield[@bibiiqr@fldFmtDoi]{doi}}%
+ \usebibmacro{finentry}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Author commands}
+%
+% \begin{macro}{\qrcite}
+% \marg{key(s)}\\
+% Display the QR code of a BibTeX entry's DOI link or URL by introducing the
+% cite command \cs{qrcite}\marg{key}, which makes use of the previously
+% defined bibliography driver \texttt{@bibiiqr@bibDrvQR}. It requires at least
+% one BibTeX \marg{key} as argument.
+% \begin{macrocode}
+\DeclareCiteCommand{\qrcite}
+ {\usebibmacro{prenote}}%
+ {\usedriver{}{@bibiiqr@bibDrvQR}}%
+ {\@bibiiqr@qrdelimiter}%
+ {\usebibmacro{postnote}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\qrfullcite}
+% \changes{v0.2}{2024-07-31}{Add \opt{noindent} option}
+% \oarg{option(s)}\marg{key}\\
+% Display the QR code of a singe BibTeX entry's DOI link or URL and a full
+% citation of it. Specify \opt{noindent} as option, if the output should not
+% be indented.
+% \begin{macrocode}
+\NewDocumentCommand{\qrfullcite}{O{}m}{%
+ \par%
+ \ifthenelse{\equal{#1}{noindent}}{%
+ \noindent%
+ \edef\@bibiiqr@mpiiwidth{\dimexpr\linewidth-\@bibiiqr@qrwidth-0.5em}%
+ }{%
+ \edef\@bibiiqr@mpiiwidth{%
+ \dimexpr\linewidth-\parindent-\@bibiiqr@qrwidth-0.5em}%
+ }%
+ \begin{minipage}[t]{\@bibiiqr@qrwidth}
+ \qrcite{#2}%
+ \end{minipage}
+ \hspace{0.5em}%
+ \begin{minipage}{\@bibiiqr@mpiiwidth}
+ \fullcite{#2}%
+ \end{minipage}
+ \par%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+%
+% ^^A -----------------------------
+%
+% \Finale
+
diff --git a/macros/latex/contrib/bib2qr/bib2qr.ins b/macros/latex/contrib/bib2qr/bib2qr.ins
new file mode 100644
index 0000000000..7894fdb8e3
--- /dev/null
+++ b/macros/latex/contrib/bib2qr/bib2qr.ins
@@ -0,0 +1,85 @@
+%%
+%% Copyright (C) 2024 Christian Schreinemachers
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008-05-04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The current maintainer of this work is Christian Schreinemachers.
+%%
+%% This work consists of the files
+%% README.md
+%% bib2qr.dtx
+%% bib2qr.ins
+%% and the derived files
+%% bib2qr.sty
+%% bib2qr.pdf
+%%
+This work has the LPPL maintenance status `maintained'.
+
+The current maintainer of this work is Christian Schreinemachers.
+
+This work consists of the files
+ README.md
+ bib2qr.dtx
+ bib2qr.ins
+and the derived files
+ bib2qr.sty
+ bib2qr.pdf
+\input docstrip.tex
+\keepsilent
+
+\preamble
+
+Copyright (C) 2024 Christian Schreinemachers
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008-05-04 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The current maintainer of this work is
+ Christian Schreinemachers.
+
+This work consists of the files
+ bib2qr.dtx
+ bib2qr.ins
+and the derived files
+ bib2qr.sty
+ bib2qr.pdf
+
+\endpreamble
+\askforoverwritefalse
+\generate{\file{bib2qr.sty}{\from{bib2qr.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* bib2qr.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* bib2qr.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{****************************************************}
+\endbatchfile
+%%
+%% End of file `bib2qr.ins'.
+
diff --git a/macros/latex/contrib/bib2qr/bib2qr.pdf b/macros/latex/contrib/bib2qr/bib2qr.pdf
new file mode 100644
index 0000000000..fb3800eadf
--- /dev/null
+++ b/macros/latex/contrib/bib2qr/bib2qr.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib
index 3f6af13bdd..6f0f9b5281 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib
@@ -71,20 +71,20 @@
issue = {25},
pages = {254504},
year = {2008},
- month = {Jun},
+ month = jun,
publisher = {American Physical Society},
doi = {10.1103/PhysRevLett.100.254504},
}
@Book{Augustine1995,
hyphenation = {american},
- author = {Augustine, Robert L.},
+ author = {Augustine, Robert L.},
title = {Heterogeneous Catalysis for the Synthetic
Chemist},
shorttitle = {Heterogeneous catalysis},
publisher = {Marcel Dekker},
location = {New York},
- date = {1995},
+ date = {1995},
}
@Article{Booth1962,
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf
index 16758e75a7..e7e9e05d58 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex
index 89550aed25..7224b722af 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex
@@ -2,7 +2,7 @@
%% biblatex-phys --- A biblatex implementation of the AIP and APS
%% bibliography style
%% Maintained by Joseph Wright
-%% E-mail: joseph.wright@morningstar2.co.uk
+%% E-mail: joseph@texdev.net
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
@@ -21,12 +21,12 @@
\addbibresource{biblatex-phys.bib}
\author{Joseph Wright\thanks{E-mail:
- \href{mailto:joseph.wright@morningstar2.co.uk}
- {\texttt{joseph.wright@morningstar2.co.uk}}}}
+ \href{mailto:joseph@texdev.net}
+ {\texttt{joseph@texdev.net}}}}
\title{\pkg{biblatex-phys} -- A \pkg{biblatex} implementation of the
\textsc{aip} and \textsc{aps} bibliography style%
- \footnote{This file describes v1.1b, last revised 2019/12/03.}}
-\date{Released 2019/12/03}
+ \footnote{This file describes v1.1c, last revised 2024/07/26.}}
+\date{Released 2024/07/26}
\providecommand*{\opt}[1]{\texttt{#1}}
\providecommand*{\pkg}[1]{\textsf{#1}}
@@ -49,12 +49,12 @@ in the usual way
\end{verbatim}
Load-time options are provided to deal with the small number of variations
between the \textsc{aip} and \textsc{aps} styles.
-The References section of this document demonstrates the format
+The References section of this document demonstrates the format
generated by the package using the \texttt{biblatex-phys.bib} database
of example citations.
The styles use the standard \pkg{biblatex} database requirements. This means
-that a database designed for traditional \pkg{biblatex} use may need some
+that a database designed for traditional \BibTeX{} use may need some
editing for optimal output. The accompanying example database
\texttt{biblatex-phys.bib} shows examples of all of the supported entry types
with common fields filled in.
@@ -69,13 +69,13 @@ seen between the \textsc{aip} and \textsc{aps} styles.
\DescribeOption{eprint}
\DescribeOption{isbn}
\DescribeOption{url}
-The standard style options \opt{doi}, \opt{eprint} \opt{isbn} and
-\opt{eprint}, as described in the \pkg{biblatex} manual. However, these
+The standard style options \opt{doi}, \opt{eprint}, \opt{isbn} and
+\opt{url}, as described in the \pkg{biblatex} manual. However, these
options are turned off as standard by the \pkg{phys} style. This reflects the
fact that these entries may be present in reference databases but are not
generally included in published bibliographies. Note that \textsc{doi} values
-are printed for journal articles with no pages given, even if the \opt{doi}
-option is \opt{false}.
+are printed for journal articles with no pages or eid given, even if the
+\opt{doi} option is \opt{false}.
\DescribeOption{subentry}
In common with the standard \pkg{biblatex} numeric styles, all of the styles
@@ -93,7 +93,7 @@ patents, which are treated in the same way.)
\DescribeOption{biblabel}
The format of the numbers used in the bibliography (the \enquote{bibliography
-label}) varies. he \opt{biblabel} option allows the user to easily set the
+label}) varies. The \opt{biblabel} option allows the user to easily set the
format used. This option takes a values \opt{superscript} (the standard
setting) and \opt{brackets}.
@@ -146,7 +146,7 @@ command may be used to alter this, either for the whole document or only
for the bibliography, for example by using
\begin{verbatim}
\AtBeginBibliography{%
- \urlstyle{rm}%
+ \urlstyle{same}%
}
\end{verbatim}
@@ -164,8 +164,8 @@ Suggestions for improvement and bug reports can be logged in the package issue
database, found at
\url{https://github.com/josephwright/biblatex-phys/issues}, or can
be sent by e-mail to
-\href{mailto:joseph.wright@morningstar2.co.uk}
- {\texttt{joseph.wright@morningstar2.co.uk}}.
+\href{mailto:joseph@texdev.net}
+ {\texttt{joseph@texdev.net}}.
\nocite{*}
@@ -208,8 +208,8 @@ be sent by e-mail to
\end{document}
%%
-%% Copyright (C) 2012-2014,2016,2018,2019 by
-%% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%% Copyright (C) 2012-2014,2016,2018-2020,2022,2024 by
+%% Joseph Wright <joseph@texdev.net>
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx
index 442f4feae5..336f90e547 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx
@@ -2,13 +2,13 @@
%% biblatex-phys --- A biblatex implementation of the AIP and APS
%% bibliography style
%% Maintained by Joseph Wright
-%% E-mail: joseph.wright@morningstar2.co.uk
+%% E-mail: joseph@texdev.net
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
%%
-\ProvidesFile{phys.bbx}[2019/12/03 v1.1b biblatex bibliography style]
+\ProvidesFile{phys.bbx}[2024/07/26 v1.1c biblatex bibliography style]
% Load the standard style to avoid copy-pasting unnecessary material
\RequireBibliographyStyle{numeric-comp}
@@ -464,14 +464,15 @@
\printfield{pages}%
\iffieldundef{pages}
{%
- \printfield{doi}%
- \clearfield{doi}%
- }%
- {%
- \iftoggle{bbx:doi}
- {}
- {\clearfield{doi}}%
- }%
+ \iffieldundef{eid}
+ {%
+ \iftoggle{bbx:doi}
+ {}
+ {\printfield{doi}}%
+ }
+ {}%
+ }
+ {}%
}
\newbibmacro*{related:translatedas}[1]{%
@@ -495,8 +496,8 @@
%%
-%% Copyright (C) 2012-2014,2016,2018,2019 by
-%% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%% Copyright (C) 2012-2014,2016,2018-2020,2023,2024 by
+%% Joseph Wright <joseph@texdev.net>
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx
index 7758bc0a2b..4452bd7113 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx
@@ -2,13 +2,13 @@
%% biblatex-phys --- A biblatex implementation of the AIP and APS
%% bibliography style
%% Maintained by Joseph Wright
-%% E-mail: joseph.wright@morningstar2.co.uk
+%% E-mail: joseph@texdev.net
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
%%
-\ProvidesFile{phys.cbx}[2019/12/03 v1.1b biblatex citation style]
+\ProvidesFile{phys.cbx}[2024/07/26 v1.1c biblatex citation style]
\RequireCitationStyle{numeric-comp}
@@ -20,8 +20,8 @@
}
%%
-%% Copyright (C) 2012-2014,2016,2018,2019 by
-%% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%% Copyright (C) 2012-2014,2016,2018,2019,2024 by
+%% Joseph Wright <joseph@texdev.net>
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx
index c47ca1e2d9..388e7ee435 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx
@@ -2,19 +2,19 @@
%% biblatex-phys --- A biblatex implementation of the AIP and APS
%% bibliography style
%% Maintained by Joseph Wright
-%% E-mail: joseph.wright@morningstar2.co.uk
+%% E-mail: joseph@texdev.net
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
%%
-\ProvidesFile{phys.dbx}[2019/12/03 v1.1b biblatex database model extension]
+\ProvidesFile{phys.dbx}[2024/07/26 v1.1c biblatex database model extension]
\DeclareDatamodelFields[type=field, datatype=literal]{collaboration}
%%
-%% Copyright (C) 2012-2014,2016,2018,2019 by
-%% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%% Copyright (C) 2012-2014,2016,2018,2019,2024 by
+%% Joseph Wright <joseph@texdev.net>
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
index aed0f34774..f452a57a9f 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
@@ -46,6 +46,11 @@ instructions.
== CHANGES ==
+* V. 2.12 (2024-07-16):
+ - Externalize localization to *.lbx files.
+ - Add \citeitemrange and \citesecitemrange commands.
+ - Fix error with section count on first run.
+
* V. 2.11 (2024-07-02):
- Add \citesecitem and \citesecitem* commands.
- Support multiple sections in \GetSectionCount.
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
index ecc06e956e..1d58e50fd5 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
index 5e07d272c0..a140ad0133 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
@@ -115,7 +115,7 @@
\thanks{Please report issues via \protect\url{https://github.com/jspitz/biblatex-publist}.}%
}
-\date{Version 2.11, 2024/07/02}
+\date{Version 2.12, 2024/07/16}
\maketitle
\begin{abstract}
@@ -411,9 +411,20 @@ since otherwise they would be too ambiguous. However, for locally numbered lists
By default, the form of this addition is ``(sec.~<no.>)'', with ``sec.'' being localized (see sec.~\ref{sec:auxmacros}
on how to customize this).
+All these commands have counterparts which can be used to refer to a range of entries:
+\begin{itemize}
+ \setlength\itemsep{0pt}
+ \item \jcsmacro*{citeitemrange}\jmacro{\{<first key>\}}\jmacro{\{<last key>\}}
+ \item \jcsmacro*{citesecitemrange}\jmacro{\{<first key>\}}\jmacro{\{<last key>\}}
+ \item \jcsmacro*{citesecitemrange*}\jmacro{\{<first key>\}}\jmacro{\{<last key>\}}
+\end{itemize}
+%
+The range will by default be indicated by an en-dash ([12]--[17]), you can change this by redefining the
+macro \jcsmacro*{itemrangesep}.
+
Note that due to the design of refsections, no hyperlinks can be generated for the item number with \jcsmacro{citesecitem}
-and the \textsf{hyperref} package being loaded (the section reference of the starred command, however, is hyperlinked in
-this case).
+(or its starred and range counterparts) and the \textsf{hyperref} package being loaded; the section reference of the starred
+commands, however, is hyperlinked in this case.
If you need hyperlinked item references, consider refsegments rather than refsections and the \jcsmacro{citeitem} command
(although this will have other drawbacks).
@@ -763,31 +774,52 @@ are printed, so you might get redundant output. To control (e.\,g., omit) them,
\section{Localization}\label{sec:localization}
Since the package draws on \bibltx, it supports localization.
-The following additional localization keys (\jfcsmacro{bibstrings})
-are added by the package:
+The following additional localization keys (\texttt{bibstrings})
+are added by the package, in verbose and abbreviated form (depending
+on your setting of the \bibltx\ option \joption{abbreviate}):
+
\begin{description}
\setlength{\itemsep}{0pt}
-\item[impactfactor] the expression \enquote{impact factor}.
-\item[openaccess:true] the expression \enquote{OpenAccess}.
-\item[openaccess:gold] the phrase \enquote{OpenAccess (gold)}.
-\item[{openaccess:green}] the phrase \enquote{OpenAccess (green)}.
-\item[{parttranslationof}] the phrase \enquote{partial translation of}
+\item[impactfactor] the expression \enquote{impact factor} (short form: \enquote{JIF}).
+\item[openaccess:true] the expression \enquote{OpenAccess} (short form: \enquote{OA}).
+\item[openaccess:gold] the phrase \enquote{OpenAccess (gold)} (short form: \enquote{OA (gold)}).
+\item[{openaccess:green}] the phrase \enquote{OpenAccess (green)} (short form: \enquote{OA (green)}).
+\item[{parttranslationof}] the phrase \enquote{partial translation of} (short form: \enquote{part.\ trans.\ of})
for entries referring to partially translated work via \bibltx's
\enquote*{related entries} feature (see sec.~\ref{sec:partial-translations}).
-\item[{peerreview:sb}] the phrase \enquote{single blind peer review}.
-\item[{peerreview:db}] the phrase \enquote{double blind peer review}.
-\item[{peerreview:op}] the phrase \enquote{open peer review}.
-\item[{peerreview:co}] the phrase \enquote{collaborative peer review}.
-\item[{peerreview:cc}] the phrase \enquote{cascading peer review}.
-\item[{peerreview:tp}] the phrase \enquote{third-party peer review}.
-\item[{peerreview:pp}] the phrase \enquote{post-publication peer review}.
-\item[{peerreview:no}] the phrase \enquote{no peer review}.
+\item[{peerreview:sb}] the phrase \enquote{single blind peer review} (short form: \enquote{single blind peer rev.}).
+\item[{peerreview:db}] the phrase \enquote{double blind peer review} (short form: \enquote{double blind peer rev.}).
+\item[{peerreview:op}] the phrase \enquote{open peer review} (short form: \enquote{open peer rev}).
+\item[{peerreview:co}] the phrase \enquote{collaborative peer review} (short form: \enquote{collab.\ peer rev.}).
+\item[{peerreview:cc}] the phrase \enquote{cascading peer review} (short form: \enquote{casc.\ peer rev.}).
+\item[{peerreview:tp}] the phrase \enquote{third-party peer review} (short form: \enquote{3rd-party peer rev.}).
+\item[{peerreview:pp}] the phrase \enquote{post-publication peer review} (short form: \enquote{post-pub.\ peer rev.}).
+\item[{peerreview:no}] the phrase \enquote{no peer review} (short form: \enquote{no peer rev.}).
\item[{with}] the preposition \enquote{with} that precedes the list of
- co-authors by default (i.\,e., with \joption{plauthorhandling=omit}).
+ co-authors by default (i.\,e., with \joption{plauthorhandling=omit}) (short and verbose forms identical).
\end{description}
-Currently, these additional localization keys are available in the following
-languages: English, French and German.%
-\footnote{Please send suggestions for other languages to the package author.}
+%
+Localization is provided in dedicated language definition files which follow
+the naming scheme, \texttt{<language>-publist.lbx}.
+The package currently ships such files for the following languages and their varieties:
+
+\begin{flushleft}
+\begin{itemize}
+\setlength{\itemsep}{0pt}
+ \item English (\texttt{american}, \texttt{australian}, \texttt{british},
+ \texttt{canadian}, \texttt{english}, \texttt{newzealand},
+ \texttt{UKenglish}, \texttt{USenglish})
+ \item French (\texttt{french})
+ \item German (\texttt{austrian}, \texttt{german}, \texttt{naustrian}, \texttt{ngerman},
+ \texttt{nswissgerman}, \texttt{swissgerman})
+\end{itemize}
+\end{flushleft}
+%
+If you want to add support for other languages, you can simply copy one of the existing
+lbx files, name it \texttt{<yourlanguage>-publist.lbx} and adapt the localization keys.
+
+If you are confident enough, please send me your file so I can consider adding it to
+the package.
\section{Further Extensions}
@@ -1027,9 +1059,18 @@ until further change).
\section{Revision Log}
\begin{description}
+ \item [{V. 2.12 (2024/07/16):}]~
+ \begin{itemize}
+ \item Externalize localization to \texttt{*.lbx} files.
+ \item Add \jcsmacro{citeitemrange} and \jcsmacro{citesecitemrange} commands
+ (see sec.~\ref{sec:citeitems}).
+ \item Fix error with section count on first run.
+ \end{itemize}
+
\item [{V. 2.11 (2024/07/02):}]~
\begin{itemize}
- \item Add \jcsmacro{citesecitem} and \jcsmacro{citesecitem*} commands (see sec.~\ref{sec:citeitems}).
+ \item Add \jcsmacro{citesecitem} and \jcsmacro{citesecitem*} commands
+ (see sec.~\ref{sec:citeitems}).
\item Support multiple sections in \jcsmacro{GetSectionCount}.
\end{itemize}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/UKenglish-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/UKenglish-publist.lbx
new file mode 100644
index 0000000000..320c493f40
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/UKenglish-publist.lbx
@@ -0,0 +1,37 @@
+% UKenglish-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{UKenglish-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist UK English localisation (JSP)]
+
+% Inherit english
+\InheritBibliographyStrings{british}
+\InheritBibliographyExtras{british}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/USenglish-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/USenglish-publist.lbx
new file mode 100644
index 0000000000..f20be86b76
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/USenglish-publist.lbx
@@ -0,0 +1,37 @@
+% USenglish-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{USenglish-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist US English localisation (JSP)]
+
+% Inherit english
+\InheritBibliographyStrings{english}
+\InheritBibliographyExtras{english}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/american-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/american-publist.lbx
new file mode 100644
index 0000000000..ae889e0216
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/american-publist.lbx
@@ -0,0 +1,37 @@
+% american-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{american-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist US English localisation (JSP)]
+
+% Inherit english
+\InheritBibliographyStrings{english}
+\InheritBibliographyExtras{english}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/australian-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/australian-publist.lbx
new file mode 100644
index 0000000000..ae6d96e932
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/australian-publist.lbx
@@ -0,0 +1,37 @@
+% australian-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{australian-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist AU English localisation (JSP)]
+
+% Inherit english
+\InheritBibliographyStrings{british}
+\InheritBibliographyExtras{british}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/austrian-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/austrian-publist.lbx
new file mode 100644
index 0000000000..0ad5c4119e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/austrian-publist.lbx
@@ -0,0 +1,55 @@
+% austrian-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{austrian-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist Austrian localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{austrian}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {austrian},
+ parttranslationof = {{Teil\"ubersetzung von}{Teil\"ubers\adddotspace von}},
+ with = {{mit}{mit}},
+ impactfactor = {{Impactfaktor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (gr\"un)}{OA (gr\"un)}},
+ peerreview:sb = {{Blindbegutachtung}{Blindbeg\adddot}},
+ peerreview:db = {{Doppelblindbegutachtung}{Doppelblindbeg\adddot}},
+ peerreview:op = {{Offene Begutachtung}{Offene Beg\adddot}},
+ peerreview:co = {{Kollaborative Begutachtung}{Kollab\adddotespace Beg\adddot}},
+ peerreview:cc = {{Cascading-Begutachtung}{Cascading-Beg\adddot}},
+ peerreview:tp = {{Begutachtung durch Dritte}{Beg\adddotspace durch Dritte}},
+ peerreview:pp = {{Post-Publication-Begutachtung}{Post-Pub\adddot-Beg\adddot}},
+ peerreview:no = {{keine Begutachtung}{keine Beg\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/british-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/british-publist.lbx
new file mode 100644
index 0000000000..dbfe613118
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/british-publist.lbx
@@ -0,0 +1,55 @@
+% british-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{british-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist UK English localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{british}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {british},
+ parttranslationof = {{partial translation of}{part\adddotspace trans\adddotspace of}},
+ with = {{with}{with}},
+ impactfactor = {{impact factor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (green)}{OA (green)}},
+ peerreview:sb = {{single blind peer review}{single blind peer rev\adddot}},
+ peerreview:db = {{double blind peer review}{double blind peer rev\adddot}},
+ peerreview:op = {{open peer review}{open peer rev\adddot}},
+ peerreview:co = {{collaborative peer review}{collab\adddotspace peer rev\adddot}},
+ peerreview:cc = {{cascading peer review}{casc\adddotspace peer rev\adddot}},
+ peerreview:tp = {{third-party peer review}{3rd-party peer rev\adddot}},
+ peerreview:pp = {{post-publication peer review}{post-pub\adddotspace peer rev\adddot}},
+ peerreview:no = {{no peer review}{no peer rev\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/canadian-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/canadian-publist.lbx
new file mode 100644
index 0000000000..f92334b5ba
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/canadian-publist.lbx
@@ -0,0 +1,37 @@
+% canadian-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{canadian-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist CDN English localisation (JSP)]
+
+% Inherit english
+\InheritBibliographyStrings{english}
+\InheritBibliographyExtras{english}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/english-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/english-publist.lbx
new file mode 100644
index 0000000000..a51deb5583
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/english-publist.lbx
@@ -0,0 +1,55 @@
+% english-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{english-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist English localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{english}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {english},
+ parttranslationof = {{partial translation of}{part\adddotspace trans\adddotspace of}},
+ with = {{with}{with}},
+ impactfactor = {{impact factor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (green)}{OA (green)}},
+ peerreview:sb = {{single blind peer review}{single blind peer rev\adddot}},
+ peerreview:db = {{double blind peer review}{double blind peer rev\adddot}},
+ peerreview:op = {{open peer review}{open peer rev\adddot}},
+ peerreview:co = {{collaborative peer review}{collab\adddotspace peer rev\adddot}},
+ peerreview:cc = {{cascading peer review}{casc\adddotspace peer rev\adddot}},
+ peerreview:tp = {{third-party peer review}{3rd-party peer rev\adddot}},
+ peerreview:pp = {{post-publication peer review}{post-pub\adddotspace peer rev\adddot}},
+ peerreview:no = {{no peer review}{no peer rev\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/french-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/french-publist.lbx
new file mode 100644
index 0000000000..e49a00b8c8
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/french-publist.lbx
@@ -0,0 +1,55 @@
+% french-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{french-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist French localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{french}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {french},
+ parttranslationof = {{traduction partielle de}{trad\adddotspace part\adddotspace de}},
+ with = {{avec}{avec}},
+ impactfactor = {{facteur d'impact}{FI}},
+ openaccess:true = {{libre acc\`es}{libre acc\`es}},
+ openaccess:gold = {{libre acc\`es (dorée)}{libre acc\`es (dorée)}},
+ openaccess:green = {{libre acc\`es (verte)}{libre acc\`es (verte)}},
+ peerreview:sb = {{\'{e}valuation par des pairs anonymis\'{e}s}{\'{e}val\adddotspace par des pairs anon\adddot}},
+ peerreview:db = {{\'{e}valuation par les pairs en double aveugle}{\'{e}val\adddotspace par les pairs en double aveugle}},
+ peerreview:op = {{\'{e}valuation par les pairs ouverte}{\'{e}val\adddotspace par les pairs ouverte}},
+ peerreview:co = {{\'{e}valuation par les pairs collaborative}{\'{e}val\adddotspace par les pairs collab\adddot}},
+ peerreview:cc = {{\'{e}valuation par les pairs en cascade}{\'{e}val\adddotspace par les pairs en cascade}},
+ peerreview:tp = {{\'{e}valuation par des pairs ext\'{e}rieurs}{\'{e}val\adddotspace par des pairs ext\adddot}},
+ peerreview:pp = {{\'{e}valuation par les pairs apr\`{e}s publication}{\'{e}val\adddotspace par les pairs apr\`{e}s pub\adddot}},
+ peerreview:no = {{pas d'\'{e}valuation par les pairs}{pas d'\'{e}val\adddotspace par les pairs}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/german-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/german-publist.lbx
new file mode 100644
index 0000000000..c7b4570f06
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/german-publist.lbx
@@ -0,0 +1,55 @@
+% german-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{german-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist German localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{german}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ parttranslationof = {{Teil\"ubersetzung von}{Teil\"ubers\adddotspace von}},
+ with = {{mit}{mit}},
+ impactfactor = {{Impactfaktor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (gr\"un)}{OA (gr\"un)}},
+ peerreview:sb = {{Blindbegutachtung}{Blindbeg\adddot}},
+ peerreview:db = {{Doppelblindbegutachtung}{Doppelblindbeg\adddot}},
+ peerreview:op = {{Offene Begutachtung}{Offene Beg\adddot}},
+ peerreview:co = {{Kollaborative Begutachtung}{Kollab\adddotespace Beg\adddot}},
+ peerreview:cc = {{Cascading-Begutachtung}{Cascading-Beg\adddot}},
+ peerreview:tp = {{Begutachtung durch Dritte}{Beg\adddotspace durch Dritte}},
+ peerreview:pp = {{Post-Publication-Begutachtung}{Post-Pub\adddot-Beg\adddot}},
+ peerreview:no = {{keine Begutachtung}{keine Beg\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/naustrian-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/naustrian-publist.lbx
new file mode 100644
index 0000000000..85e0c9a92c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/naustrian-publist.lbx
@@ -0,0 +1,37 @@
+% naustrian-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{naustrian-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist Austrian localisation (JSP)]
+
+% Inherit austrian
+\InheritBibliographyStrings{austrian}
+\InheritBibliographyExtras{austrian}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/newzealand-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/newzealand-publist.lbx
new file mode 100644
index 0000000000..4f9d872e9d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/newzealand-publist.lbx
@@ -0,0 +1,55 @@
+% newzealand-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{newzealand-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist NZ English localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{newzealand}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {newzealand},
+ parttranslationof = {{partial translation of}{part\adddotspace trans\adddotspace of}},
+ with = {{with}{with}},
+ impactfactor = {{impact factor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (green)}{OA (green)}},
+ peerreview:sb = {{single blind peer review}{single blind peer rev\adddot}},
+ peerreview:db = {{double blind peer review}{double blind peer rev\adddot}},
+ peerreview:op = {{open peer review}{open peer rev\adddot}},
+ peerreview:co = {{collaborative peer review}{collab\adddotspace peer rev\adddot}},
+ peerreview:cc = {{cascading peer review}{casc\adddotspace peer rev\adddot}},
+ peerreview:tp = {{third-party peer review}{3rd-party peer rev\adddot}},
+ peerreview:pp = {{post-publication peer review}{post-pub\adddotspace peer rev\adddot}},
+ peerreview:no = {{no peer review}{no peer rev\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/ngerman-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/ngerman-publist.lbx
new file mode 100644
index 0000000000..54f65ef383
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/ngerman-publist.lbx
@@ -0,0 +1,37 @@
+% ngerman-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{ngerman-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist German localisation (JSP)]
+
+% Inherit german
+\InheritBibliographyStrings{german}
+\InheritBibliographyExtras{german}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/nswissgerman-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/nswissgerman-publist.lbx
new file mode 100644
index 0000000000..be8a9d148a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/nswissgerman-publist.lbx
@@ -0,0 +1,37 @@
+% nswissgerman-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{nswissgerman-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist Swiss German localisation (JSP)]
+
+% Inherit swissgerman
+\InheritBibliographyStrings{swissgerman}
+\InheritBibliographyExtras{swissgerman}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/swissgerman-publist.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/swissgerman-publist.lbx
new file mode 100644
index 0000000000..5d4be275ab
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/lbx/swissgerman-publist.lbx
@@ -0,0 +1,55 @@
+% swissgerman-publist.lbx, extra localizations for biblatex-publist
+%
+% 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 in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Jürgen Spitzmüller.
+%
+% This work consists of the file publist.bbx
+%
+%
+% This file adds some additional localizations that are used by
+% the biblatex-publist bibliography style
+%
+% Please send suggestions and bug reports to
+% https://github.com/jspitz/biblatex-publist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
+
+\ProvidesFile{swissgerman-publist.lbx}[\bpl@rdate\space v.\bpl@version\space
+ biblatex-publist Swiss German localisation (JSP)]
+
+% Inherit general localization
+\InheritBibliographyExtras{swissgerman}
+
+% Localizations
+\DeclareBibliographyStrings{%
+ inherit = {swissgerman},
+ parttranslationof = {{Teil\"ubersetzung von}{Teil\"ubers\adddotspace von}},
+ with = {{mit}{mit}},
+ impactfactor = {{Impactfaktor}{JIF}},
+ openaccess:true = {{OpenAccess}{OA}},
+ openaccess:gold = {{OpenAccess (gold)}{OA (gold)}},
+ openaccess:green = {{OpenAccess (gr\"un)}{OA (gr\"un)}},
+ peerreview:sb = {{Blindbegutachtung}{Blindbeg\adddot}},
+ peerreview:db = {{Doppelblindbegutachtung}{Doppelblindbeg\adddot}},
+ peerreview:op = {{Offene Begutachtung}{Offene Beg\adddot}},
+ peerreview:co = {{Kollaborative Begutachtung}{Kollab\adddotespace Beg\adddot}},
+ peerreview:cc = {{Cascading-Begutachtung}{Cascading-Beg\adddot}},
+ peerreview:tp = {{Begutachtung durch Dritte}{Beg\adddotspace durch Dritte}},
+ peerreview:pp = {{Post-Publication-Begutachtung}{Post-Pub\adddot-Beg\adddot}},
+ peerreview:no = {{keine Begutachtung}{keine Beg\adddot}}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
index d3d4381a9a..371a06232b 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
@@ -25,8 +25,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.11}
-\def\bpl@rdate{2024/07/02}
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
\ProvidesFile{publist.bbx}[\bpl@rdate\space v.\bpl@version\space
biblatex bibliography style (JSP)]
@@ -552,6 +552,7 @@
{}{\PackageWarning{biblatex-publist}{Patching refsection failed!}}
}{}
+% Section count. We use l3 here to split the argument and do calculations
\ExplSyntaxOn
\int_new:N \l_bpl_sec_cnt_int
@@ -560,7 +561,7 @@
{
\IfNoValueTF{#1}{%
\csnumdef{bpltmprefsection}{\c@refsection}
- \csuse{bpl@secitems:\bpltmprefsection}%
+ \ifcsdef{bpl@secitems:\bpltmprefsection}{\csuse{bpl@secitems:\bpltmprefsection}}{}%
}{
\int_zero:N \l_bpl_sec_cnt_int
\ProcessList{#1}{\__bpl_add_section_count}
@@ -570,7 +571,8 @@
\cs_new:Npn \__bpl_add_section_count #1
{
- \int_add:Nn \l_bpl_sec_cnt_int { \use:c{bpl@secitems:#1} }
+ \cs_if_exist:cT {bpl@secitems:#1}
+ { \int_add:Nn \l_bpl_sec_cnt_int { \use:c{bpl@secitems:#1} } }
}
\ExplSyntaxOff
@@ -1789,6 +1791,10 @@
%
% l7n
%
+
+\DeclareLanguageMappingSuffix{-publist}
+
+% publist-specific bibstrings
\NewBibliographyString{with}
\NewBibliographyString{parttranslationof}
\NewBibliographyString{impactfactor}
@@ -1803,54 +1809,6 @@
\NewBibliographyString{peerreview:tp}
\NewBibliographyString{peerreview:pp}
\NewBibliographyString{peerreview:no}
-\DefineBibliographyStrings{english}{%
- parttranslationof = {partial translation of},
- with = {with},
- impactfactor = {impact factor},
- openaccess:true = {OpenAccess},
- openaccess:gold = {OpenAccess (gold)},
- openaccess:green = {OpenAccess (green)},
- peerreview:sb = {single blind peer review},
- peerreview:db = {double blind peer review},
- peerreview:op = {open peer review},
- peerreview:co = {collaborative peer review},
- peerreview:cc = {cascading peer review},
- peerreview:tp = {third-party peer review},
- peerreview:pp = {post-publication peer review},
- peerreview:no = {no peer review}
-}
-\DefineBibliographyStrings{french}{%
- parttranslationof = {traduction partielle de},
- with = {avec},
- impactfactor = {facteur d'impact},
- openaccess:true = {libre acc\`es},
- openaccess:gold = {libre acc\`es (dorée)},
- openaccess:green = {libre acc\`es (verte)},
- peerreview:sb = {\'{e}valuation par des pairs anonymis\'{e}s},
- peerreview:db = {\'{e}valuation par les pairs en double aveugle},
- peerreview:op = {\'{e}valuation par les pairs ouverte},
- peerreview:co = {\'{e}valuation par les pairs collaborative},
- peerreview:cc = {\'{e}valuation par les pairs en cascade},
- peerreview:tp = {\'{e}valuation par des pairs ext\'{e}rieurs},
- peerreview:pp = {\'{e}valuation par les pairs apr\`{e}s publication},
- peerreview:no = {pas d'\'{e}valuation par les pairs}
-}
-\DefineBibliographyStrings{german}{%
- parttranslationof = {Teil\"ubersetzung von},
- with = {mit},
- impactfactor = {Impactfaktor},
- openaccess:true = {OpenAccess},
- openaccess:gold = {OpenAccess (gold)},
- openaccess:green = {OpenAccess (gr\"un)},
- peerreview:sb = {Blindbegutachtung},
- peerreview:db = {Doppelblindbegutachtung},
- peerreview:op = {Offene Begutachtung},
- peerreview:co = {Kollaborative Begutachtung},
- peerreview:cc = {Cascading-Begutachtung},
- peerreview:tp = {Begutachtung durch Dritte},
- peerreview:pp = {Post-Publication-Begutachtung},
- peerreview:no = {keine Begutachtung}
-}
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
index b5972d9497..8176810996 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
@@ -26,8 +26,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.11}
-\def\bpl@rdate{2024/07/02}
+\def\bpl@version{2.12}
+\def\bpl@rdate{2024/07/16}
\ProvidesFile{publist.cbx}[\bpl@rdate\space v.\bpl@version\space
biblatex citation style (JSP)]
@@ -91,6 +91,28 @@
\printtext[labelnumberwidth]{\mkrefdesc{\thefield{labelnumber}}}%
}
+\newcommand*\itemrangesep{\bibrangedash}
+
+\newcommand*\citeitemrange[2]{%
+ \citeitem{#1}\itemrangesep\citeitem{#2}%
+}
+
+\NewDocumentCommand\citesecitemrange{s m m}
+{%
+ \IfBooleanTF{#1}%
+ {\ifcsdef{bpl@itemsec:#2}%
+ {\ifcsdef{bpl@itemsec:#3}%
+ {\ifcsequal{bpl@itemsec:#2}{bpl@itemsec:#3}%
+ {\citesecitem{#2}\itemrangesep}%
+ {\citesecitem*{#2}\,\itemrangesep\,}%
+ \citesecitem*{#3}}%
+ {\citesecitem*{#2}\itemrangesep\citesecitem*{#3}}%
+ }%
+ {\citesecitem{#2}\itemrangesep\citesecitem*{#3}}%
+ }%
+ {\citesecitem{#2}\itemrangesep\citesecitem{#3}}%
+}
+
% Manual way to adjust numbering
\csdef{bpl@secstartshift}{0}
\newcommand*\shiftciteitem[1]{\csdef{bpl@secstartshift}{#1}}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
index 71e9e69276..9e4b798f8c 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
@@ -1,5 +1,5 @@
% publist.dbx, biblatex data model specification for the biblatex-publist
-% package, version 2.11 (2024/07/02).
+% package, version 2.12 (2024/07/16).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/bxpdfver/LICENSE b/macros/latex/contrib/bxpdfver/LICENSE
index b6b8b92330..f6ebffefca 100644
--- a/macros/latex/contrib/bxpdfver/LICENSE
+++ b/macros/latex/contrib/bxpdfver/LICENSE
@@ -1,6 +1,6 @@
The MIT License
-Copyright (c) 2014-2022 Takayuki YATO (aka. "ZR")
+Copyright (c) 2014-2024 Takayuki YATO (aka. "ZR")
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/macros/latex/contrib/bxpdfver/README-ja.md b/macros/latex/contrib/bxpdfver/README-ja.md
index 0f0955d378..5cc0505780 100644
--- a/macros/latex/contrib/bxpdfver/README-ja.md
+++ b/macros/latex/contrib/bxpdfver/README-ja.md
@@ -52,7 +52,8 @@ bxpdfver パッケージ
* `lenient+`: サポートしない機能に対するエラーを完全に抑止する。
* `nolenient`(既定): `lenient(+)` の否定。
* `new-dvipdfmx`: dvipdfmx に対するバージョン検査を省略し、常に最新の
- バージョンであると仮定する。
+ バージョンであると仮定する。
+ ※ドライバオプションが `dvipdfmx` に変更される。
`compress`、`objcompress` はこのパッケージによる抑止を行わないという意味
であり、既に抑止されている場合にそれを再び有効化するものではない。
@@ -72,6 +73,8 @@ bxpdfver パッケージ
* `\preservepdfdestinations`: PDF 目的地(PDF destination)の名前の
短縮を抑止し、TeX 文書で指定された名前を用いる。異なる PDF 文書間で
のリンクを正常に機能させるために必要である。
+ * `\setpdfpkresolution{<解像度>}`: PDF に埋め込まれる PK フォントの
+ 解像度(dpi 値)を指定する。
### ドライバ指定に関する補足
@@ -83,30 +86,42 @@ bxpdfver パッケージ
\suppresspdfobjcompression Yes Maybe(*2) No
\setpdfdecimaldigits Yes Maybe(*2) No
\preservepdfdestinations No-op(*1) Maybe(*2) No
+ \setpdfpkresolution Yes Maybe(*3) No
1. pdfTeX/LuaTeX では PDF 目的地の名前が短縮されるることはない。つまり
`\preservepdfdestinations` は常に有効になっていると見なせる。
- 2. これらの機能を使用するためには、(x)dvipdfmx のバージョンが 20160307
- 以上である必要がある。
- - バージョン判定のために kpsewhich と extractbb の起動を利用する
- ため、少なくともこれらのプログラムについて、シェルエスケープが
- 許可されている必要がある。
- - dvipdfmx のバージョン情報は補助ファイル(.aux)中にキャッシュ
- される。このため、何か状況が変わった場合は、一旦補助ファイルを
- 削除する必要が生じる。
+ 2. (x)dvipdfmx のバージョンが 20160307 以上である必要がある。
+ 3. (x)dvipdfmx のバージョンが 20211016 以上である必要がある。
+
+dvipdfmx のバージョン判定について:
+
+ - 必要が生じた場合にのみバージョン判定が実行される。
+ - `new-dvipdfmx` オプションを指定した場合は、バージョン判定を全て
+ 省略した上で、最新の dvipdfmx を使用していると見なす。
+ - バージョン判定のために kpsewhich と extractbb の起動を利用するため、
+ 少なくともこれらのプログラムについて、シェル実行が許可されている
+ 必要がある。
+ - バージョン判定は少し時間がかかるため、dvipdfmx のバージョン情報は
+ 補助ファイル(.aux)中にキャッシュされる。このため、何か状況が変化
+ した場合は、一旦補助ファイルを削除する必要が生じる。
以下のことにも注意されたい。
- * 使用不可能な機能を使おうと試みるとエラーが発生する。
+ * 使用不可能な機能を使おうと試みるとエラーが発生する。
+ ※`lenient` オプションが指定された場合はエラーが警告に変更され、
+ また `lenient+` が指定された場合はエラーも警告も抑止される。
* `dvips` 等の“全く対応していない”若干のドライバオプションを認識
する。この場合、全ての機能の呼出でエラーが発生する。
- * `nodvidriver` は特殊で、これを指定した場合は、どの機能の呼出でも
- エラーは発生しないが、全く何の動作も行わない。
+ * `nodvidriver` オプションは既定で `lenient+` を指定する。つまり、
+ どの機能の呼出でもエラーは発生しないが、全く何の動作も行わない。
更新履歴
--------
+ * Version 0.7 ‹2024/07/24›
+ - `\setpdfpkresolution` を(正式に)サポート。(dvipdfmx/XeTeX
+ でも使用可能になった。)
* Version 0.6 ‹2022/04/28›
- `lenient+`/`nolenient` オプションを追加。
- 非サポートのドライバでも読込自体はエラーにしない。
diff --git a/macros/latex/contrib/bxpdfver/README.md b/macros/latex/contrib/bxpdfver/README.md
index 332b6215f1..df7995de21 100644
--- a/macros/latex/contrib/bxpdfver/README.md
+++ b/macros/latex/contrib/bxpdfver/README.md
@@ -72,6 +72,8 @@ when it is already suppressed by other means.
* `\preservepdfdestinations`: Stops shortening the PDF destination
names and uses the original names given in the LaTeX documents. This
is necessary for cross-document links to work correctly.
+ * `\setpdfpkresolution{<resolution>}`: Sets the resolution (in dpi)
+ of the PK fonts embedded in the PDF file.
### NOTE ON DRIVERS
@@ -83,29 +85,42 @@ when it is already suppressed by other means.
\suppresspdfobjcompression Yes Maybe(*2) No
\setpdfdecimaldigits Yes Maybe(*2) No
\preservepdfdestinations No-op(*1) Maybe(*2) No
+ \setpdfpkresolution Yes Maybe(*3) No
1. In pdfTeX and LuaTeX, PDF destination names are never shortened;
that is, it can be thought as if `\preservepdfdestinations` were
always in effect.
2. These features are available only when the version of (x)dvipdfmx
- is 20160307 or later. Also shell escape must be accepted (with or
- without restriction) so that `kpsewhich` and `extractbb` will be
- allowed to run, because those programs are used in order to detect
- the dvipdfmx version.
+ is 20160307 or later.
+ 2. These features are available only when the version of (x)dvipdfmx
+ is 20211016 or later.
+
+On the detection of dvipdfmx version:
+
+ * Shell escape must be accepted (with or without restriction) so that
+ `kpsewhich` and `extractbb` will be allowed to run, because those
+ programs are used in order to detect the dvipdfmx version.
+ * The detection process is slow, so the result is cached in the
+ auxiliary file (`.aux`). When the environment is changed, you need
+ to delete the auxiliary file.
More notices:
- * If you try to use unavailable features, an error will occur.
+ * If you try to use unavailable features, an error will occur.
+ NB. Option `lenient` turns the errors into warnings, and `lenient+`
+ completely suppresses the errors.
* The package recognizes some “unsupported” driver options such as
`dvips`; when such drivers are used, use of any feature will cause
an error.
- * The use of `nodvidriver` sets `lenient*` by default; use of any
+ * The use of `nodvidriver` sets `lenient+` by default; use of any
feature will do nothing (nor issue an error).
REVISION HISTORY
----------------
+ * Version 0.7 ‹2024/07/24›
+ - Support (officialy) `\setpdfpkresolution`.
* Version 0.6 ‹2022/04/28›
- Added the `lenient+` and `nolenient` options.
* Version 0.5a ‹2021/02/14›
diff --git a/macros/latex/contrib/bxpdfver/bxpdfver.sty b/macros/latex/contrib/bxpdfver/bxpdfver.sty
index ccc9825f6f..46c65cd9a2 100644
--- a/macros/latex/contrib/bxpdfver/bxpdfver.sty
+++ b/macros/latex/contrib/bxpdfver/bxpdfver.sty
@@ -1,7 +1,7 @@
%%
%% This is file 'bxpdfver.sty'.
%%
-%% Copyright (c) 2014-2022 Takayuki YATO (aka. "ZR")
+%% Copyright (c) 2014-2024 Takayuki YATO (aka. "ZR")
%% GitHub: https://github.com/zr-tex8r
%% Twitter: @zr_tex8r
%%
@@ -10,7 +10,7 @@
%% package declaration
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{bxpdfver}[2022/04/28 v0.6]
+\ProvidesPackage{bxpdfver}[2024/07/24 v0.7]
\def\bxpv@pkgname{bxpdfver}
%% preparations
@@ -144,6 +144,13 @@
\def#3{#2}%
}
+%% \bxpv@info{<message>}
+% Issues an info message.
+\@onlypreamble\bxpv@info
+\def\bxpv@info#1{%
+ \PackageInfo\bxpv@pkgname{#1\@gobble}%
+}
+
%% \bxpv@warn{<message>}
% Issues a warning.
\@onlypreamble\bxpv@warn
@@ -175,10 +182,10 @@
}
%% \ifbxpv@defined
-\let\ifbxpv@defined\ifdefined
-\ifx\ifbxpv@defined\@undefined \expandafter\@firstofone
-\else \expandafter\@gobble
-\fi{\let\ifbxpv@defined\iffalse}
+% Identical to \ifdefined, and is used only in e-TeX-aware code.
+% On non-e-TeX engines it is made \iffalse to keep \if-balancedness.
+\bxpv@csletcs{ifbxpv@defined}{%
+ if\ifx\ifdefined\@undefined false\else defined\fi}
%% \ifbxpv@old@hook@system
\newif\ifbxpv@old@hook@system
@@ -186,6 +193,9 @@
%--------------------------------------- internal dispatchers
+% Initially all dispatchers are "unavailable".
+% They are later redefined according to the driver type.
+
%% \bxpv@suppress@compress
\@onlypreamble\bxpv@suppress@compress
\def\bxpv@suppress@compress{%
@@ -242,7 +252,7 @@
\fi
\fi
-%% adjust internal dispatchers
+%% Redefine internal dispatchers.
\ifx 0\bxpv@drv@type\else %--------
\begingroup
@@ -386,12 +396,14 @@
\bxpv@warn
{Unsupported engine}%
\else\if d\bxpv@drv@type % 'dvipdfmx'
+ % All the real settings are done in the begin-document hook,
+ % so the dispatchers themselves will do nothing (if available).
\global\let\bxpv@suppress@compress\relax
\global\let\bxpv@suppress@obj@compress\relax
\global\let\bxpv@check@version\relax
\global\let\bxpv@set@version\relax
\global\let\bxpv@set@decimaldigits\relax
- %\global\let\bxpv@set@pkresolution\relax
+ \global\let\bxpv@set@pkresolution\relax
\global\let\bxpv@preserve@destinations\relax
\g@addto@macro\bxpv@begin@document@hook{%
\bxpv@begin@document@dvipdfmx
@@ -671,6 +683,7 @@
\fi
%% variables
+\let\bxpv@dvipdfmx@known@min\relax
\let\bxpv@C@value\relax
%% \bxpv@C@bits
@@ -689,6 +702,7 @@
%% \bxpv@begin@document@dvipdfmx
\@onlypreamble\bxpv@begin@document@dvipdfmx
\def\bxpv@begin@document@dvipdfmx{%
+ \bxpv@get@dvipdfmx@known@min
% PDF version
\ifx\bxpdfverMajorVersion\tw@
\bxpv@check@dvipdfmx@version{20180217}%
@@ -701,8 +715,8 @@
\bxpv@put@special{pdf:minorversion \the\bxpdfverMinorVersion}%
\fi
\ifx\bxpdfverMinorVersion\relax\else
- \bxpv@cache@fetch{dvipdfmxver}%
- \ifnum\bxpv@cache@@dvipdfmxver<20180217 \else
+ \bxpv@at@least@dvipdfmx@version{20180217}%
+ \ifbxpv@ok
\bxpv@put@special{pdf:majorversion \the\bxpdfverMajorVersion}%
\fi
\fi
@@ -734,7 +748,9 @@
\fi
% PK resolution
\ifx\bxpdfverPkResolution\relax\else
- \iffalse % This will never work....
+ \bxpv@check@dvipdfmx@version{20211016}%
+ {Cannot set PK resolution}%
+ \ifbxpv@ok
\bxpv@put@special{dvipdfmx:config r \the\bxpdfverPkResolution}%
\fi
\fi
@@ -748,10 +764,9 @@
\fi
% C option value
\ifx\bxpv@C@bits\@empty\else
- \bxpv@cache@fetch{dvipdfmxcfg}%
- \def\bxpv@next##1##2\bxpv@mk{\def\bxpv@C@value{##1}}%
- \expandafter\bxpv@next\bxpv@cache@@dvipdfmxcfg{0}\bxpv@mk
- \bxpv@rc@bitset{\bxpv@C@value}{64}%
+ % When C option is used, its value is automatically OR'ed with
+ % the current value, so we need read the config for that.
+ \def\bxpv@C@value{0}%
\def\do##1{%
\bxpv@rc@bitset{\bxpv@C@value}{##1}%
\let\bxpv@C@value\bxpv@rc@num}%
@@ -776,25 +791,58 @@
\fi
}
+%% \bxpv@get@dvipdfmx@known@min
+\@onlypreamble\bxpv@get@dvipdfmx@known@min
+\def\bxpv@get@dvipdfmx@known@min{%
+ \def\bxpv@dvipdfmx@known@min{0}%
+ \def\bxpv@tmpa{def}%
+ \let\bxpv@tmpb\@gobbletwo
+ \@ifl@aded\bxpv@tmpa{l3backend-dvipdfmx}{%
+ \def\bxpv@tmpb{\@ifl@ter\bxpv@tmpa{l3backend-dvipdfmx}}%
+ }{}%
+ \@ifl@aded\bxpv@tmpa{l3backend-dvips}{%
+ \def\bxpv@tmpb{\@ifl@ter\bxpv@tmpa{l3backend-dvips}}%
+ }{}%
+ \bxpv@tmpb{2022/04/10}{%
+ \def\bxpv@dvipdfmx@known@min{20201111}%
+ }{}%
+ \bxDebug{dvipdfmx-known-min:\bxpv@dvipdfmx@known@min}%
+}
+
+%% \bxpv@at@least@dvipdfmx@version{<version>}
+% Checks if dvipdfmx >= <version> and sets bxpv@ok.
+\@onlypreamble\bxpv@at@least@dvipdfmx@version
+\def\bxpv@at@least@dvipdfmx@version#1{%
+ % first check using known-min
+ \ifnum\bxpv@dvipdfmx@known@min<#1
+ % get real version
+ \bxpv@cache@fetch{dvipdfmxver}%
+ \bxpv@info
+ {dvipdfmx version is \bxpv@cache@@dvipdfmxver}%
+ \bxpv@oktrue
+ \ifnum\bxpv@cache@@dvipdfmxver<#1
+ \bxpv@okfalse
+ \fi
+ \else % new enough
+ \bxpv@oktrue
+ \fi
+}
+
%% \bxpv@check@dvipdfmx@version
\@onlypreamble\bxpv@check@dvipdfmx@version
\def\bxpv@check@dvipdfmx@version#1#2{%
- \bxpv@cache@fetch{dvipdfmxver}%
- \bxpv@okfalse
- \ifnum\bxpv@cache@@dvipdfmxver=\z@
+ \bxpv@at@least@dvipdfmx@version{#1}%
+ \ifbxpv@ok % no-op
+ \else\ifnum\bxpv@cache@@dvipdfmxver=\z@
\bxpv@fail
{#2, because the\MessageBreak
version of dvipdfmx in use is unknown
\MessageBreak (v.#1 or later is required)}%
- \else\ifnum\bxpv@cache@@dvipdfmxver<#1
+ \else
\bxpv@fail
{#2, because the\MessageBreak
version of dvipdfmx in use (v.\bxpv@cache@@dvipdfmxver) is too old
\MessageBreak (v.#1 or later is required)}%
- \else
- \PackageInfo\bxpv@pkgname
- {dvipdfmx version is \bxpv@cache@@dvipdfmxver\@gobble}%
- \bxpv@oktrue
\fi\fi
}
diff --git a/macros/latex/contrib/changebar/CATALOG b/macros/latex/contrib/changebar/CATALOG
index 50cd35da78..5483fa9c13 100644
--- a/macros/latex/contrib/changebar/CATALOG
+++ b/macros/latex/contrib/changebar/CATALOG
@@ -1,7 +1,7 @@
Name: ChangeBar
Problems-To: johannes.braams(at)texniek.nl
Author: J.L. Braams
-Version: 3.7d
+Version: 3.7e
Description:
diff --git a/macros/latex/contrib/changebar/README b/macros/latex/contrib/changebar/README
index 2a9c69bad7..bcd9ab0bbb 100644
--- a/macros/latex/contrib/changebar/README
+++ b/macros/latex/contrib/changebar/README
@@ -1,6 +1,6 @@
changebar bundle
- January 9, 2024
+ July 19, 2024
This bundle contains a package that I maintain to add changebars to a
LaTeX document.
diff --git a/macros/latex/contrib/changebar/changebar.bug b/macros/latex/contrib/changebar/changebar.bug
index d661332150..aa476a2224 100644
--- a/macros/latex/contrib/changebar/changebar.bug
+++ b/macros/latex/contrib/changebar/changebar.bug
@@ -219,6 +219,10 @@
% v3.7d JLB: Arash Esbati reported a simlar phenomenon when \nochangebars
% is used. Similar solution was needed.
%
+% v3.7e JLB: Daniel Flipo and Bruno Winckler reported that changebar no longer
+% works when \usepackage[french]{babel} is used. This was caused by the
+% solution implemented in v3.7b. This time use "/" is chosen as separator.
+%
% Known problems
% - changebars for marginal paragraphs collide with changebars
% for the main body of text
diff --git a/macros/latex/contrib/changebar/changebar.dtx b/macros/latex/contrib/changebar/changebar.dtx
index 406ccf5290..58df74102c 100644
--- a/macros/latex/contrib/changebar/changebar.dtx
+++ b/macros/latex/contrib/changebar/changebar.dtx
@@ -24,7 +24,7 @@
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
% \fi
-% \CheckSum{2954}
+% \CheckSum{2948}
%
%\iffalse
% This file is built for \LaTeXe, so we make sure an error is
@@ -39,7 +39,7 @@
\ProvidesFile{changebar.dtx}
%</dtx>
%<+package>\ProvidesPackage{changebar}
- [2024/01/09 v3.7d Indicate changes with marginal bars]
+ [2024/07/17 v3.7e Indicate changes with marginal bars]
% \end{macrocode}
%
% \section{A driver for this document}
@@ -137,7 +137,10 @@
% \changes{v3.6e}{2023/08/13}{Added supprt for luaTeX}
% \changes{v3.7b}{2023/12/28}{Added a few lines that were inadvertantly removed}
% \changes{v3.7b}{2023/12/30}{the cb2-file use delimiting chars may
-% change meaning when they end up in the wrong situation}
+% change meaning when they end up in the wrong situation}
+% \changes{v3.7e}{2024/07/17}{The us of the character `;´ as a string
+% separator clashes with it's active variant when babel/french has
+% been loaded}
%
% \title{The Changebar package
% \thanks{This file has version number \fileversion,
@@ -229,9 +232,7 @@
% \changes{v3.6a}{2011/04/30}{XeTeX added}
% \item Xe\TeX
% \changes{3.6e}{2023/08/13}{luaTeX added}
-% \begin{changebar}
% \item lua\TeX
-% \end{changebar}
% \end{itemize}
% The drivers are represented in the normal typewriter method of
% typing these names, or by the same entirely in lower case.
@@ -752,7 +753,7 @@
% \item V\TeX
% \item PDF\TeX
% \item Xe\TeX
-% \cbstart\item luaTeX\cbend
+% \item luaTeX
% \end{itemize}
%
% The intent is that the driver names should be case-insensitive,
@@ -799,10 +800,17 @@
% \end{macrocode}
% Redefine the |\cb@pdfxy| macro to write point coordinates to the
% \file{.cb2} file.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
% \begin{macrocode}
\gdef\cb@pdfxy##1##2##3##4##5{%
- \immediate\write\cb@writexy{##1.##2p##3;##4;##5}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \immediate\write\cb@writexy{##1.##2p##3/##4/##5}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}}
\else\cb@pdftexerror\fi\fi\fi}
% \end{macrocode}
@@ -837,10 +845,17 @@
% \end{macrocode}
% Redefine the |\cb@pdfxy| macro to write point coordinates to the
% \file{.cb2} file.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
% \begin{macrocode}
\gdef\cb@pdfxy##1##2##3##4##5{%
- \immediate\write\cb@writexy{##1.##2p##3;##4;##5}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \immediate\write\cb@writexy{##1.##2p##3/##4/##5}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}}
\gdef\sec@nd@ftw@##1 ##2{##2}
\fi}
@@ -854,7 +869,6 @@
{You are not using XeLaTeX}}
% \end{macrocode}
%
-% \begin{changebar}
% \begin{macrocode}
\DeclareOption{luaTeX}{\cb@luatexcheck}
\DeclareOption{luatex}{\cb@luatexcheck}
@@ -877,10 +891,17 @@
% \end{macrocode}
% Redefine the |\cb@pdfxy| macro to write point coordinates to the
% \file{.cb2} file.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of ",¨ as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
% \begin{macrocode}
\gdef\cb@pdfxy##1##2##3##4##5{%
- \immediate\write\cb@writexy{##1.##2p##3;##4;##5}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \immediate\write\cb@writexy{##1.##2p##3/##4/##5}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}}
\fi}
% \end{macrocode}
@@ -892,7 +913,6 @@
{luaTeX option cannot be used}%
{You are not using luaLaTeX}}
% \end{macrocode}
-% \end{changebar}
%
% The new features of \LaTeXe\ make it possible to implement the
% \Lopt{outerbars} option.
@@ -1120,6 +1140,8 @@
% compatibility mode}
% \changes{v3.3e}{1998/02/24}{Added \cs{Textures}}
% \changes{v3.5a}{2005/05/23}{Added 'PDFtex' option}
+% \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option}
+% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option}
% \begin{macrocode}
\if@compatibility
\def\driver#1{%
@@ -1132,17 +1154,9 @@
\def\Textures{TEXTURES}%
\def\VTeX{VTEX}%
\def\pdfTeX{PDFTEX}%
-% \end{macrocode}
-% \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option}
-% \begin{macrocode}
\def\xeTeX{XETEX}
-% \end{macrocode}
-% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option}
-% \begin{changebar}
-% \begin{macrocode}
\def\luaTeX{LUATEX}
% \end{macrocode}
-% \end{changebar}
%
% The choice has to be communicated to the macro
% \verb=\cb@setup@specials= that will be called from within
@@ -1150,6 +1164,7 @@
% \verb=\cb@driver@setup= is used. It receives a numeric value
% using \verb=\chardef=.
% \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option}
+% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option}
% \begin{macrocode}
\global\chardef\cb@driver@setup=0\relax
\ifx\tempa\LN \global\chardef\cb@driver@setup=0\fi
@@ -1160,14 +1175,7 @@
\ifx\tempa\VTeX \global\chardef\cb@driver@setup=5\fi
\ifx\tempa\pdfTeX \cb@pdftexcheck\fi
\ifx\tempa\xeTeX \cb@xetexcheck\fi
-% \end{macrocode}
-% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option}
-% \begin{changebar}
-% \begin{macrocode}
\ifx\tempa\luaTeX \cb@luatexcheck\fi
-% \end{macrocode}
-% \end{changebar}
-% \begin{macrocode}
\egroup}
% \end{macrocode}
% We add \verb+\driver+ to \verb+\@preamblecmds+, which is a
@@ -1464,11 +1472,22 @@
% When the point is found it is removed from |\cb@pdfpoints|. \#9
% contains the cumulative head of the list to construct the new list
% with the entry removed. \#3--\#8 are for pattern matching.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{%
\def\cb@next{%
- \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\ifnum ##1=##3
\ifnum ##2=##4
\def\cb@pdfx{##5sp}%
@@ -1519,8 +1538,13 @@
% \begin{macro}{\cb@pdfparsexy}
% The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in
% from the \file{.cb2} file.
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{%
\def\cb@pdfpg{##2}}%
% \end{macrocode}
% \end{macro}
@@ -1565,7 +1589,7 @@
% In order to get things in the right spot we need a little scaling
% factor. We define it here.
% \begin{macrocode}
-\def\cb@pdf@scale{0.996264009963}
+ \def\cb@pdf@scale{0.996264009963}
% \end{macrocode}
% \end{macro}
%
@@ -1636,14 +1660,12 @@
% \begin{macrocode}
\gdef\cb@checkPdfxy##1##2##3##4##5{%
\cb@@findpdfpoint{##1}{##2}%
-% \end{macrocdode}
-% \begin{changebar}
-% \begin{macrocode
+% \end{macrocode}
+% \begin{macrocode}
\ifdim##3sp=\cb@pdfx\relax
\ifdim##4sp=\cb@pdfy\relax
-% \end{macrocdode}
-% \end{changebar}
-% \begin{macrocode
+% \end{macrocode}
+% \begin{macrocode}
\ifdim##5=\cb@pdfz\relax
\else
\cb@error
@@ -1741,11 +1763,22 @@
% When the point is found it is removed from |\cb@pdfpoints|. \#9
% contains the cumulative head of the list to construct the new list
% with the entry removed. \#3--\#8 are for pattern matching.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{%
\def\cb@next{%
- \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\ifnum ##1=##3
\ifnum ##2=##4
\def\cb@pdfx{##5sp}%
@@ -1796,8 +1829,13 @@
% \begin{macro}{\cb@pdfparsexy}
% The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in
% from the \file{.cb2} file.
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{%
\def\cb@pdfpg{##2}}%
% \end{macrocode}
% \end{macro}
@@ -1842,7 +1880,7 @@
% In order to get things in the right spot we need a little scaling
% factor. We define it here.
% \begin{macrocode}
-\def\cb@pdf@scale{0.996264009963}
+ \def\cb@pdf@scale{0.996264009963}
% \end{macrocode}
% \end{macro}
%
@@ -1934,7 +1972,6 @@
\let\cb@resetpoints\relax
% \end{macrocode}
%
-% \begin{changebar}
% \changes{v3.6e}{2023/08/13}{lua\TeX{} support added}
% The code for lua\TeX{}, like for pdf\TeX\ and Xe\TeX,
% is more elaborate as the calculations have to
@@ -2012,11 +2049,22 @@
% When the point is found it is removed from |\cb@pdfpoints|. \#9
% contains the cumulative head of the list to construct the new list
% with the entry removed. \#3--\#8 are for pattern matching.
-% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter}
+% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter}
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{%
\def\cb@next{%
- \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}%
+% \end{macrocode}
+% \begin{changebar}
+% \begin{macrocode}
+ \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}%
+% \end{macrocode}
+% \end{changebar}
+% \begin{macrocode}
\ifnum ##1=##3
\ifnum ##2=##4
\def\cb@pdfx{##5sp}%
@@ -2067,8 +2115,13 @@
% \begin{macro}{\cb@pdfparsexy}
% The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in
% from the \file{.cb2} file.
+% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter}
+% \begin{changebar}
+% \begin{macrocode}
+ \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{%
+% \end{macrocode}
+% \end{changebar}
% \begin{macrocode}
- \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{%
\def\cb@pdfpg{##2}}%
% \end{macrocode}
% \end{macro}
@@ -2113,7 +2166,7 @@
% In order to get things in the right spot we need a little scaling
% factor. We define it here.
% \begin{macrocode}
-\def\cb@pdf@scale{0.996264009963}
+ \def\cb@pdf@scale{0.996264009963}
% \end{macrocode}
% \end{macro}
%
@@ -2203,7 +2256,6 @@
\def\cb@maxpoint{9999999}
\let\cb@resetpoints\relax
% \end{macrocode}
-%\end{changebar}
%
% When code for other drivers should be added it can be inserted
% here. When someone makes a mistake and somehow selects an
@@ -2296,7 +2348,7 @@
\newcommand*{\nochangebars}{%
\def\cb@start[##1]{\ignorespaces}%
\def\cb@delete[##1]{}%
- \def\cb@end{\ignorespacesafterend}
+ \def\cb@end{\ignorespacesafterend}%
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/changebar/changebar.pdf b/macros/latex/contrib/changebar/changebar.pdf
index b313fe1c53..9025ebb624 100644
--- a/macros/latex/contrib/changebar/changebar.pdf
+++ b/macros/latex/contrib/changebar/changebar.pdf
Binary files differ
diff --git a/macros/latex/contrib/chemformula-ru/chemformula-ru.pdf b/macros/latex/contrib/chemformula-ru/chemformula-ru.pdf
index 09126f6cc1..bed9614116 100644
--- a/macros/latex/contrib/chemformula-ru/chemformula-ru.pdf
+++ b/macros/latex/contrib/chemformula-ru/chemformula-ru.pdf
Binary files differ
diff --git a/macros/latex/contrib/chemformula-ru/chemformula-ru.sty b/macros/latex/contrib/chemformula-ru/chemformula-ru.sty
index f1df3002c1..32b6e23fa1 100644
--- a/macros/latex/contrib/chemformula-ru/chemformula-ru.sty
+++ b/macros/latex/contrib/chemformula-ru/chemformula-ru.sty
@@ -1,5 +1,5 @@
%% The chemformula-ru package eliminates an incompatibility
-%% between the chemformula package and Russian settings (russian.ldf) of the babel package.
+%% between the chemformula package and Russian settings (russian.ldf) for the babel package.
%%
%% Copyright (c) 2024 by Alexey Kuznetsov (mailtokuznetsov at gmail.com)
%%
@@ -12,21 +12,21 @@
%% version 2008/05/04 or later.
%%
-\ProvidesPackage{chemformula-ru}[2024-03-01 Using chemformula package with babel-russian]
+\ProvidesPackage{chemformula-ru}[2024-07-10 Using chemformula package with babel-russian]
\DeclareOption{cosh2ch}{\def\cosh@ch{\DeclareRobustCommand\cosh{\mathop{\operator@font ch}\nolimits}}}
\DeclareOption{ch2Ch}{\def\ch@Ch{\DeclareRobustCommand\Ch{\mathop{\operator@font ch}\nolimits}}}
+\DeclareOption*{\PassOptionsToPackage\CurrentOption{chemformula}}
\ProcessOptions\relax
+\RequirePackage{chemformula}
+
\BeforeBeginEnvironment{document}{
- \IfPackageLoadedTF{chemformula}{
- \IfPackageLoadedWithOptionsTF{babel}{russian}{
- \let\@Chem@Formula\ch \let\ch\undefined
- \AtBeginDocument{ \let\ch\@Chem@Formula
- \@ifundefined{cosh@ch}{\relax}{\cosh@ch}
- \@ifundefined{ch@Ch}{\relax}{\ch@Ch}
- }
- } { \relax }
- } { \relax }
-}
+ \let\@Chem@Formula\ch \let\ch\undefined
+ \AtBeginDocument{
+ \let\ch\@Chem@Formula
+ \@ifundefined{cosh@ch}{\relax}{\cosh@ch}
+ \@ifundefined{ch@Ch}{\relax}{\ch@Ch}
+ } }
+
\endinput
diff --git a/macros/latex/contrib/chemformula-ru/chemformula-ru.tex b/macros/latex/contrib/chemformula-ru/chemformula-ru.tex
index 02edcbca41..192da90cb4 100644
--- a/macros/latex/contrib/chemformula-ru/chemformula-ru.tex
+++ b/macros/latex/contrib/chemformula-ru/chemformula-ru.tex
@@ -3,7 +3,6 @@
\geometry{total={180mm, 267mm}, centering}
\usepackage[russian]{babel}
-\usepackage{chemformula}
\usepackage[ch2Ch,cosh2ch]{chemformula-ru}
\usepackage{array,multicol}
@@ -11,7 +10,7 @@
\title{The \textsf{chemformula-ru} package}
\author{Alexey Kuznetsov}
-\date{01.03.2024}
+\date{10.07.2024}
\maketitle
\begin{multicols}{2}
@@ -23,9 +22,8 @@ Russian settings of the \textsf{babel} package \textsf{(russianb.ldf)} define th
\mbox{}\hfil\verb|$\ch x$|\ $\to\ \Ch x$.\\[.5ex]
Loading packages together leads to the error\\[1ex]
\mbox{}\hfil\verb|! LaTeX Error: Command \ch already defined.|\\[1ex]
-The \textsf{chemformula-ru} package ``neutralizes'' it by making the babel's command undefined.
-
-The package has two parameters to configure the printing of the hyperbolic cosine in Russian notation:\\[1ex]
+The \textsf{chemformula-ru} package loads the \textsf{chemformula} and ``neutralizes'' the error by making the babel's command undefined.
+Two it's parameters configure printing of the hyperbolic cosine in Russian notation:\\[1ex]
\begin{tabular}{>\sf l @{ ---\quad } p{.75\linewidth}}
cosh2ch & overrides the \verb|\cosh| command for printing:\linebreak
\verb|$\cosh x$| $\to \cosh x$. \\[1ex]
@@ -37,13 +35,12 @@ ch2Ch & defines a new \verb|\Ch| command for printing:\linebreak
\mbox{}\hfil\verb|\сh{|\textit{химическая фоормула}\verb|}|\\[.5ex]
для верстки химических формул:\\[.5ex]
\mbox{}\hfil\verb|\ch{H3PO4}| $\to$ \ch{H3PO4}.\\[.5ex]
-Русские настройки пакета \textsf{babel (russianb.ldf)} определяют одноименную команду для печати гиперболического косинуса:\\[-.5ex]
+Русские настройки пакета \textsf{babel (russianb.ldf)} определяют одноименную команду для печати гиперболического косинуса:\\[-.85\baselineskip]
\mbox{}\hfil\verb|$\ch x$|\ $\to\ \Ch x$.\\[.5ex]
Cовместная загрузка пакетов ведет к ошибке\\[1ex]
\mbox{}\hfil\verb|! LaTeX Error: Command \ch already defined.|\\[1ex]
-Пакет \textsf{chemformula-ru} <<нейтрализует>> ее, делая команду пакета \textsf{babel} неопределенной.
-
-Пакет имеет два параметра, настраивающих печать гиперболического косинуса в русских нотациях:\\[1ex]
+Пакет \textsf{chemformula-ru} загружает \textsf{chemformula} и <<нейтрализует>> ошибку, делая команду пакета \textsf{babel} неопределенной.
+Два его параметра настраивают печать гиперболического косинуса в русских нотациях:\\[1ex]
\begin{tabular}{>\sf l @{ --- } p{.8\linewidth}}
cosh2ch & переопределяет для печати команду \verb|\cosh|:\linebreak
\verb|$\cosh x$| $\to \cosh x$. \\[1ex]
@@ -52,10 +49,11 @@ ch2Ch & определяет для печати новую команду \verb
\end{tabular}
\end{multicols}
+\thispagestyle{empty}
+
\noindent\hrulefill
\begin{verbatim}
-
%% Redefine \cosh to print ch.
\DeclareOption{cosh2ch}{\def\cosh@ch{%
\DeclareRobustCommand\cosh{\mathop{\operator@font ch}\nolimits}}}
@@ -64,19 +62,22 @@ ch2Ch & определяет для печати новую команду \verb
\DeclareOption{ch2Ch}{\def\ch@Ch{%
\DeclareRobustCommand\Ch{\mathop{\operator@font ch}\nolimits}}}
+%% Pass all other options to the chemformula package.
+\DeclareOption*{\PassOptionsToPackage\CurrentOption{chemformula}}
+
\ProcessOptions\relax
+\RequirePackage{chemformula}
+
\BeforeBeginEnvironment{document}{
- \IfPackageLoadedTF{chemformula}{
- \IfPackageLoadedWithOptionsTF{babel}{russian}{
- \let\@Chem@Formula\ch \let\ch\undefined
- \AtBeginDocument{ \let\ch\@Chem@Formula
- \@ifundefined{cosh@ch}{\relax}{\cosh@ch}
- \@ifundefined{ch@Ch}{\relax}{\ch@Ch}
- }
- } { \relax }
- } { \relax }
-}
+ \let\@Chem@Formula\ch \let\ch\undefined
+ \AtBeginDocument{
+ \let\ch\@Chem@Formula
+ \@ifundefined{cosh@ch}{\relax}{\cosh@ch}
+ @ifundefined{ch@Ch}{\relax}{\ch@Ch}
+ } }
+
+\endinput
\end{verbatim}
\end{document}
diff --git a/macros/latex/contrib/cjs-rcs-article/README.md b/macros/latex/contrib/cjs-rcs-article/README.md
index 69c983dbb7..aa152dd5fd 100644
--- a/macros/latex/contrib/cjs-rcs-article/README.md
+++ b/macros/latex/contrib/cjs-rcs-article/README.md
@@ -16,11 +16,12 @@ compatible with the traditional engine pdfLaTeX.
## Licence
LaTeX Project Public License, version 1.3c or (at your option) any
-later version.
+later version. The documentation is also licensed under CC BY-SA 4.0
+International.
## Version
-1.0 (2023-11-29)
+1.1a (2024-07-30)
## Author
@@ -103,7 +104,7 @@ version history of the bibliographic styles appears in
## Comments or suggestions
-The Gitlab [project repository](https://gitlab.com/cjs-rcs/cjs-rcs-article)
+The GitLab [project repository](https://gitlab.com/cjs-rcs/cjs-rcs-article)
is the best place to report bugs or to propose improvements to the
project.
@@ -127,11 +128,12 @@ grande partie compatible avec le moteur pdfLaTeX.
## Licence
LaTeX Project Public License, version 1.3c ou (à votre choix) toute
-version ultérieure.
+version ultérieure. La documentation est également publiée sous
+licence CC BY-SA 4.0 International.
## Version
-1.0 (2023-11-29)
+1.1a (2024-07-30)
## Auteur
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf
index 5ec31c2669..fd93cf709b 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx
index 9376ddbbf3..a750c136f5 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx
@@ -3,7 +3,7 @@
% Article class for The Canadian Journal of Statistics | La revue
% canadienne de statistique
%
-% Copyright (C) Statistical Society of Canada | Société
+% Copyright (C) 2023-2024 Statistical Society of Canada | Société
% canadienne de statistique
%
% The class file and templates derived from this file are licenced
@@ -25,10 +25,10 @@
%<*driver>
\ProvidesFile{cjs-rcs-article.dtx}
%</driver>
-%<class>\NeedsTeXFormat{LaTeX2e}[2009/09/24]
+%<class>\NeedsTeXFormat{LaTeX2e}[2021/06/01]
%<class>\ProvidesClass{cjs-rcs-article}%
%<*class>
- [2023/11/29 v1.0 Article class for The Canadian Journal of
+[2024/07/30 v1.1a Article class for The Canadian Journal of
Statistics | La revue canadienne de statistique]
%</class>
%<*driver>
@@ -122,6 +122,10 @@
\OnlyDescription
\fi
+ %% Additional colors
+ \colorlet{codebg}{LightYellow1} % code background
+ \colorlet{prompt}{Orchid4} % command prompt
+
%% New \DescribeMacro type environments for class options and lengths
\NewDocElement[envlike,notoplevel,printtype=\emph{option}]{Option}{option}
\NewDocElement[macrolike,notoplevel,printtype=$\ell$]{Length}{length}
@@ -139,9 +143,12 @@
\newcommand*\CJSbstfr{\code{cjs-rcs-fr}}
\makeatother
+ %% URL of the project repository
+ \newcommand*\reposurl{https://gitlab.com/cjs-rcs/cjs-rcs-article}
+
%% Redefine \year using information from \filedate instead of using
%% compilation time
- \def\parsedate#1/#2/#3\relax{\def\year{#1}}
+ \def\parsedate#1/#2/#3\relax{\def\year{#1}\def\isodate{#1-#2-#3}}
%% Definition of a shorthand to either hyphenate a word or insert a
%% regular dash. Use in the long names of Creative Commons licences.
@@ -149,6 +156,26 @@
\useshorthands*{"}
\defineshorthand{"-}{\discretionary{-}{}{-}}
+ %% Source code
+ \usepackage{listings}
+ \lstset{%
+ basicstyle=\ttfamily\NoAutoSpacing,
+ moredelim=[is][\color{prompt}]{---}{-},
+ escapeinside=`',
+ showstringspaces=false,
+ backgroundcolor=\color{codebg},
+ frame=leftline,
+ framerule=2pt,
+ framesep=5pt,
+ xleftmargin=7.4pt
+ }
+
+ %% The \meta command from memoir needs an additionnel \normalfont to
+ %% use the document font in listings.
+ \makeatletter
+ \def\meta@font@select{\normalfont\itshape}
+ \makeatother
+
\begin{document}
\DocInput{cjs-rcs-article.dtx}
\end{document}
@@ -257,6 +284,22 @@
% CTAN.}
% \changes{1.0}{2023-11-29}{Fix various typos and cosmetic issues in
% the documentation.}
+% \changes{1.1}{2024-06-26}{Provide support to acknowledge usage of
+% data from the Alzheimer’s Disease Neuroimaging Initiative (ADNI) and
+% the Alzheimer’s Disease Neuroimaging Metabolomics Consortium
+% (ADMC).}
+% \changes{1.1}{2024-06-26}{Introduce new commands \cs{specialack} and
+% \cs{specialackmark} for the editors.}
+% \changes{1.1}{2024-06-23}{Improve the documentation, in particular
+% the installation instructions and access to the templates.}
+% \changes{1.1}{2024-07-02}{Add the References section to the table of
+% contents of the PDF.}
+% \changes{1.1}{2024-07-13}{Add the command \cs{matit} to typeset bold
+% italic in math in a portable way.}
+% \changes{1.1a}{2024-07-25}{Fix the command \cs{proglang} that would
+% disable hyphenation for the rest of the document. With thanks to
+% Enrico Gregorio (egreg) for the heads up in person at TUG 2024.}
+% \changes{1.1a}{2024-07-25}{Make the command \cs{proglang} robust.}
%
% \ifenglish%
% \title[Guide to the class {\CJSclass}]{%
@@ -353,11 +396,9 @@
% {\CJSclass} requiert une distribution {\TeX} récente et
% à jour. Nous recommandons les distributions %
% \fi
-% \href{https://tug.org/texlive}{{\TeX}~Live} %
-% --- %
+% \href{https://tug.org/texlive}{{\TeX}~Live}\ifenglish---\else~--- \fi%
% \ifenglish or its variant for macOS \else ou sa variante pour macOS \fi%
-% \href{https://tug.org/mactex}{Mac{\TeX}} %
-% --- %
+% \href{https://tug.org/mactex}{Mac{\TeX}}\ifenglish---\else~--- \fi%
% \ifenglish and \else et \fi%
% \href{https://miktex.org}{MiK{\TeX}}. %
% \ifenglish%
@@ -425,17 +466,28 @@
% \section{Démarrage rapide}
% \fi
% \label{sec:quick-start}
+% \changes{1.1}{2024-06-05}{Documentation: add a link to obtain the
+% templates in the \emph{Quick start} section.}
%
% \ifenglish%
% The class ships with templates for articles in English and in
% French. In {\TeX}~Live, these are located with the
-% documentation of the class. To quickly start writing your article,
-% copy the appropriate template to your working directory and follow
-% the brief instructions therein. %
+% documentation of the class. You may also obtain the templates from
+% the %
% \else%
% La classe est livrée avec des gabarits pour des articles en français
% et en anglais. Dans la distribution {\TeX}~Live, ceux-ci sont
-% classés avec la documentation. Pour débuter rapidement la rédaction
+% classés avec la documentation. Vous pouvez aussi les récupérer
+% depuis le %
+% \fi%
+% \href{\reposurl/-/releases/\fileversion}{%
+% \ifenglish project repository\else dépôt du projet\fi}. %
+% \ifenglish%
+% To quickly start writing your article, copy the appropriate template
+% to your working directory and follow the brief instructions
+% therein. %
+% \else%
+% Pour débuter rapidement la rédaction
% de votre article, copiez le gabarit approprié dans votre dossier de
% travail et suivez les directives succinctes qui s'y trouvent. %
% \fi
@@ -490,6 +542,9 @@
% \changes{0.91}{2023-10-16}{Change the name of the archive containing
% a ``local'' installation of the class from
% \texttt{-no-local-tex.zip} to \texttt{-project-install.zip}.}
+% \changes{1.1}{2024-06-05}{Documentation: provide a direct link to
+% the release corresponding to the version of the documentation in the
+% \emph{Installation} section.}
%
% \ifenglish%
% The class {\CJSclass} is distributed as the package %
@@ -507,21 +562,33 @@
% the command line: %
% \else%
% via le réseau de sites \emph{Comprehensive {\TeX} Archive Network}
-% (CTAN). Elle fait partie des distributions {\TeX} standards telles
-% que {TeX}~Live, Mac{\TeX} et MiK{\TeX}. Nous recommandons fortement
-% d'installer ou de mettre à jour le paquetage à l'aide du
+% (CTAN). Celui-ci fait partie des distributions {\TeX} standards
+% telles que {TeX}~Live, Mac{\TeX} et MiK{\TeX}. Nous recommandons
+% fortement d'installer ou de mettre à jour le paquetage à l'aide du
% gestionnaire de paquetages de votre distribution {\TeX}. Par
-% exemple, avec {\TeX}~Live, vous pouvez effectuer ces opérations dans
-% l'assistant graphique, ou encore avec l'une ou l'autre des commandes
-% ci-dessous: %
+% exemple, avec {\TeX}~Live, vous pouvez effectuer ces opérations
+% dans l'assistant graphique, ou encore avec l'une ou l'autre des
+% commandes ci-dessous: %
+% \fi
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+---$- tlmgr install cjs-rcs-article
+\end{lstlisting}
+% \iffalse
+%</example>
% \fi
-% \begin{quote}
-% \code{tlmgr install cjs-rcs-article}
-% \end{quote}
% \ifenglish or\else ou\fi
-% \begin{quote}
-% \code{tlmgr update cjs-rcs-article}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+---$- tlmgr update cjs-rcs-article
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
%
% \ifenglish%
% If you are not in position to install packages or update the {\TeX}
@@ -530,23 +597,23 @@
% limited in scope to your project. Download the archive %
% \else%
% S'il vous est impossible d'installer des paquetages ou de mettre à
-% jour la distribution {\TeX} --- notamment si vous utilisez une
-% plateforme de rédaction en ligne --- vous pouvez procéder à une
+% jour la distribution {\TeX}~--- notamment si vous utilisez une
+% plateforme de rédaction en ligne~--- vous pouvez procéder à une
% installation simplifiée de la classe, mais dont la portée sera
% limitée à votre projet. Pour ce faire, téléchargez l'archive %
% \fi%
% \code{cjs-rcs-article-project-install.zip} %
% \ifenglish from the \else depuis le \fi%
-% \href{https://gitlab.com/cjs-rcs/cjs-rcs-article/-/releases}{%
-% \ifenglish project repository\else dépôt du projet\fi} %
+% \href{\reposurl/-/releases/\fileversion}{%
+% \ifenglish project repository\else dépôt du projet\fi}, %
% \ifenglish%
-% and uncompress it in the directory of your project. You will then
-% have access to all the essential files of the class within this
-% project. %
+% uncompress it and place its contents in the directory of your
+% project. You will then have access to all the essential files of the
+% class within this project. %
% \else%
-% et décompressez celle-ci dans le répertoire de votre projet. Vous
-% disposerez alors de tous les fichiers essentiels de la classe à
-% l'intérieur de ce projet. %
+% décompressez celle-ci et placez son contenu dans le répertoire de
+% votre projet. Vous disposerez alorsà l'intérieur de ce projet de
+% tous les fichiers essentiels de la classe. %
% \fi
%
% \ifenglish%
@@ -631,7 +698,7 @@
% {pdf\LaTeX} utilise les versions Type~1 des polices STIX~Two et
% Fira. Or, la technologie Type~1 PostScript étant aujourd'hui
% obsolète, ces polices ne sont plus mises à jour. Le moteur
-% {\XeLaTeX} utilise les plus modernes --- et complètes --- versions
+% {\XeLaTeX} utilise les plus modernes~--- et complètes~--- versions
% OpenType des polices.}, %
% nous recommandons de compiler votre manuscript avec le plus moderne
% moteur {\XeLaTeX}. %
@@ -643,24 +710,34 @@
% \subsection{Gabarits}
% \fi
% \label{sec:usage:templates}
+% \changes{1.1}{2024-06-05}{Documentation: add a link to the templates
+% in the \emph{Templates} sub-section.}
%
% \ifenglish%
% The class is distributed with templates for articles in English
% and in French. If you are using the version of the class included
% with your {\TeX} distribution, the templates may be located with the
-% documentation (this is the case in {\TeX}~Live). If you installed
-% the class manually by following the instructions in
-% \autoref{sec:installation}, the templates reside in your working
-% directory. %
+% documentation (this is the case in {\TeX}~Live). You may also obtain
+% them from the %
% \else
% La classe est distribuée avec des gabarits pour des articles en français
% et en anglais. Si vous utilisez la version de la classe fournie avec
% votre distribution {\TeX}, les gabarits peuvent être classés avec
-% la documentation (c'est le cas dans {\TeX}~Live). Si vous avez
+% la documentation (c'est le cas dans {\TeX}~Live). Vous pouvez aussi
+% les récupérer depuis le %
+% \fi
+% \href{\reposurl/-/releases/\fileversion}{%
+% \ifenglish project repository\else dépôt du projet\fi}. %%
+% \ifenglish
+% If you installed the class manually by following the instructions in
+% \autoref{sec:installation}, the templates reside in your working
+% directory. %
+% \else%
+% Si vous avez
% plutôt installé la classe manuellement en suivant les instructions
% de la \autoref{sec:installation}, les gabarits se trouvent dans
% votre dossier de travail. %
-% \fi
+% \fi%
%
% \ifenglish%
% We strongly encourage to start from a template to write your
@@ -705,13 +782,19 @@
% \label{sec:usage:options}
%
% \ifenglish%
-% The class is loaded with the command %
+% The class is loaded with the command: %
% \else%
-% On charge la classe avec la commande %
+% On charge la classe avec la commande: %
+% \fi
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\documentclass`\oarg{options}\marg{cjs-rcs-article}'
+\end{lstlisting}
+% \iffalse
+%</example>
% \fi
-% \begin{quote}
-% \cmdprint{\documentclass}\oarg{options}\code{\{cjs-rcs-article\}}
-% \end{quote}
% \ifenglish%
% Some \meta{options} of the class are intended for the authors,
% whereas others are instead intended for the editors of {\TheCJS*}.
@@ -931,22 +1014,28 @@
% du titre qui sera utilisée dans les entêtes. La syntaxe de la
% commande est donc: %
% \fi
-% \begin{quote}
-% \def\OPT{\ifenglish Short title\else Titre court\fi}
-% \def\ARG{\ifenglish Full title\else Titre complet\fi}
-% \cmdprint{\title}\oarg{\OPT}\marg{\ARG}
-% \end{quote}
-% \ifenglish%
-% Write the title in sentence style, that is, with only an initial
-% capital. In English, also capitalize the first word after a colon.
-% Break a long title needing more than one line using \code{\bs\bs}
-% or \cmdprint{\newline}. %
-% \else%
-% Entrez le titre en minuscules (sauf pour la majuscule initiale).
-% En anglais, utilisez toutefois une majuscule initiale après un
-% deux-points. Vous devez couper manuellement avec \code{\bs\bs} ou
-% \cmdprint{\newline} un titre qui nécessite plus d'une ligne.
-% \fi
+% \iffalse
+%<*example>
+% \fi
+\def\OPT{\ifenglish Short title\else Titre court\fi}
+\def\ARG{\ifenglish Full title\else Titre complet\fi}
+\begin{lstlisting}
+\title`\oarg{\OPT}\marg{\ARG}'
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \ifenglish%
+% Write the title in sentence style, that is, with only an initial
+% capital. In English, also capitalize the first word after a colon.
+% Break a long title needing more than one line using \code{\bs\bs}
+% or \cmdprint{\newline}. %
+% \else%
+% Entrez le titre en minuscules (sauf pour la majuscule initiale).
+% En anglais, utilisez toutefois une majuscule initiale après un
+% deux-points. Vous devez couper manuellement avec \code{\bs\bs} ou
+% \cmdprint{\newline} un titre qui nécessite plus d'une ligne.
+% \fi
% \end{DescribeMacro}
%
% \ifenglish%
@@ -994,11 +1083,17 @@
% informations relatives à un auteur de l'article. Sa syntaxe
% générale est la suivante: %
% \fi
-% \begin{quote}
-% \def\FORENAME{\ifenglish Forename\else Prénom\fi}
-% \def\SURNAME{\ifenglish Surname\else Nom\fi}
-% \cmdprint{\author}\oarg{options}\code{\{}\meta{\FORENAME}\code{ }\cmdprint{\surname}\marg{\SURNAME}\code{\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\FORENAME{\ifenglish Forename\else Prénom\fi}
+\def\SURNAME{\ifenglish Surname\else Nom\fi}
+\begin{lstlisting}
+\author`\oarg{options}'{`\meta{\FORENAME}' \surname`\marg{\SURNAME}'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
% The \meta{Surname} must be entered using the command
% \cmd{\surname}. Write the \meta{Forename} and \meta{Surname} in
@@ -1113,15 +1208,27 @@
% \def\FORENAME{\ifenglish Forename\else Prénom\fi}
% \def\SURNAME{\ifenglish Surname\else Nom\fi}
% \item \ifenglish For the corresponding author\else Pour l'auteur correspondant\fi:
-% \begin{quote}
-% \cmdprint{\author}\code{[orcid=}\meta{id}\code{, email=}\meta{\EMAIL}\code{, corresponding]} \\
-% \verb+ +\code{\{}\meta{\FORENAME}\code{ }\cmdprint{\surname}\marg{\SURNAME}\code{\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\author[orcid=`\meta{id}', email=`\meta{\EMAIL}', corresponding]
+ {`\meta{\FORENAME}' \surname`\marg{\SURNAME}'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \item \ifenglish For all other authors\else Pour tous les autres auteurs\fi:
-% \begin{quote}
-% \cmdprint{\author}\code{[orcid=}\meta{id}\code{, email=}\meta{\EMAIL}\code{]} \\
-% \verb+ +\code{\{}\meta{\FORENAME}\code{ }\cmdprint{\surname}\marg{\SURNAME}\code{\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\author[orcid=`\meta{id}', email=`\meta{\EMAIL}']
+ {`\meta{\FORENAME}' \surname`\marg{\SURNAME}'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \end{itemize}
% \end{DescribeMacro}
% \end{DescribeMacro}
@@ -1136,11 +1243,17 @@
% mentionné dans la commande \cmd{\author} qui la précède. La forme
% générale de l'affiliation est: %
% \fi
-% \begin{quote}
-% \def\AFFIL{\ifenglish Department, University, City, Country\else%
-% Département, Université, Ville, Pays\fi}
-% \cmd{\affil}\marg{\AFFIL}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\AFFIL{\ifenglish Department, University, City, Country\else%
+ Département, Université, Ville, Pays\fi}
+\begin{lstlisting}
+\affil`\marg{\AFFIL}'
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
% Give the country name in the main language of the article. %
% \else%
@@ -1164,13 +1277,19 @@
% premier auteur suivi de la locution «et collab.» (en français) ou
% «et al.» (en anglais): %
% \fi
-% \begin{quote}
-% \def\SURNAME{\ifenglish Surname\else Nom\fi}
-% \def\ETAL{\ifenglish et al.\else et collab.\fi}
-% \def\ETCOLLAB{\ifenglish et collab.\else et al.\fi}
-% \cmdprint{\runningauthor}\code{\{}\meta{\SURNAME}\code{ \ETAL\}} \\
-% \cmdprint{\runningauthor}\code{\{}\meta{\SURNAME}\code{ \ETCOLLAB\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\SURNAME{\ifenglish Surname\else Nom\fi}
+\def\ETAL{\ifenglish et al.\else et collab.\fi}
+\def\ETCOLLAB{\ifenglish et collab.\else et al.\fi}
+\begin{lstlisting}
+\runningauthor{`\meta{\SURNAME} \ETAL'}
+\runningauthor{`\meta{\SURNAME} \ETCOLLAB'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \end{DescribeMacro}
%
% \ifenglish%
@@ -1224,16 +1343,22 @@
% mots-clés de l'article. Il s'utilise comme une liste
% \code{itemize} ou \code{enumerate}: %
% \fi
-% \begin{quote}
-% \def\KEYWORDC{\ifenglish Key word\else Mot-clé\fi}
-% \def\KEYWORD{\ifenglish key word\else mot-clé\fi}
-% \cmdprint{\begin}\code{\{keywords\}} \\
-% \cmdprint{\item} \emph{{\KEYWORDC} 1} \\
-% \cmdprint{\item} \emph{{\KEYWORD} 2} \\
-% \cmdprint{\item} \emph{{\KEYWORD} 3} \\
-% \code{...} \\
-% \cmdprint{\end}\code{\{keywords\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\KEYWORDC{\ifenglish Key word\else Mot-clé\fi}
+\def\KEYWORD{\ifenglish key word\else mot-clé\fi}
+\begin{lstlisting}
+\begin{keywords}
+\item `\normalfont\itshape{\KEYWORDC} 1'
+\item `\normalfont\itshape{\KEYWORD} 2'
+\item `\normalfont\itshape{\KEYWORD} 3'
+...
+\end{keywords}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
% As shown above, use an initial capital for the first key word
% only. Punctuation will be added automatically. %
@@ -1261,15 +1386,21 @@
% classification mathématique par matières de l'article. Son
% interface est la suivante: %
% \fi
-% \begin{quote}
-% \def\LEVEL{\ifenglish level\else niveau\fi}
-% \def\CODE{\ifenglish code\else rubrique\fi}
-% \cmdprint{\begin}\code{\{classification\}}\oarg{type} \\
-% \cmdprint{\item}\oarg{\LEVEL} \emph{{\CODE} 1}, \emph{{\CODE} 2}, \dots \\
-% \cmdprint{\item}\oarg{\LEVEL} \emph{{\CODE} 1}, \emph{{\CODE} 2}, \dots \\
-% \code{...} \\
-% \cmdprint{\end}\code{\{classification\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\LEVEL{\ifenglish level\else niveau\fi}
+\def\CODE{\ifenglish code\else rubrique\fi}
+\begin{lstlisting}
+\begin{classification}`\oarg{type}'
+\item`\oarg{\LEVEL} \normalfont\itshape{\CODE} 1, {\CODE} 2, \dots'
+\item`\oarg{\LEVEL} \normalfont\itshape{\CODE} 1, {\CODE} 2, \dots'
+...
+\end{classification}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
% The classification system used is %
% \else%
@@ -1331,7 +1462,53 @@
% les options \code{review}, \code{supplement} et \code{nocjs},
% l'espace est remplacé par un pied de page contenant le numéro de
% page. %
-% \fi%
+% \fi
+%
+% \ifenglish%
+% \subsubsection{ADNI data use agreement}
+% \else%
+% \subsubsection{Contrat d'utilisation des données de l'ADNI}
+% \fi
+% \label{sec:usage:titling:adni}
+%
+% \ifenglish%
+% The Alzheimer’s Disease Neuroimaging Initiative (ADNI) %
+% \else%
+% Le %
+% \fi
+% \href{https://adni.loni.usc.edu/wp-content/uploads/how_to_apply/ADNI_DSP_Policy.pdf}{\ifenglish Data Sharing and Publication Policy\else contrat d'utilisation des données\fi} %
+% \ifenglish%
+% requires authors using their data to acknowledge ADNI in the list of
+% authors and give a specific statement on the title page. %
+% \else%
+% de l'Alzheimer’s Disease Neuroimaging Initiative (ADNI) stipule que
+% les auteurs qui ont recours à leurs données doivent reconnaitre la
+% contribution de l'ADNI parmi les auteurs et inclure une déclaration
+% spécifique sur la page de titre de l'article. %
+% \fi
+%
+% \begin{DescribeMacro}{\ADNIacknowledgement}
+% \ifenglish%
+% The command \cmd{\ADNIacknowledgement} adds these two
+% requirements. The command has no arguments; simply insert it after
+% the declarations of the authors. %
+% \else%
+% La commande \cmd{\ADNIacknowledgement} ajoute ces deux exigences.
+% La commande n'a aucun argument; insérez simplement celle-ci après
+% toutes les autres définitions des auteurs. %
+% \fi
+% \end{DescribeMacro}
+%
+% \begin{DescribeMacro}{\ADMCacknowledgement}
+% \ifenglish%
+% Similarly, the command \cmd{\ADMCacknowledgement} acknowledges the
+% Alzheimer’s Disease Meta\-bo\-lomics Consortium (ADMC). %
+% \else%
+% De manière analogue, la commande \cmd{\ADMCacknowledgement}
+% reconnait la contribution du
+% Alzheimer’s Disease Metabolomics Consortium (ADMC). %
+% \fi
+% \end{DescribeMacro}
%
% \ifenglish%
% \subsection{Back matter information}
@@ -1342,17 +1519,19 @@
%
% \ifenglish%
% Articles in {\TheCJS} end with elements forming the so-called back
-% matter: supplementary material available online, acknowledgements,
-% etc. The class {\CJSclass} provides specialized environments to
-% enter this information. See \autoref{tab:titling} for a summary; the
-% detailed descriptions follow. %
+% matter: supplementary material available online, data sharing
+% statement, acknowledgements, etc. The class {\CJSclass} provides
+% specialized environments to enter this information. See
+% \autoref{tab:titling} for a summary; the detailed descriptions
+% follow. %
% \else%
% Un article de {\LaRevue} se termine par la présentation d'un
% ensemble d'informations dans des parties annexes: matériel
-% additionnel disponible en ligne, remerciements, etc. La classe
-% {\CJSclass} définit des environnements pour entrer ce type
-% d'information de manière uniforme. Le \autoref{tab:backmatter} en
-% présente un sommaire; les descriptions détaillées suivent. \fi
+% additionnel disponible en ligne, conditions de partage des données,
+% remerciements, etc. La classe {\CJSclass} définit des environnements
+% pour entrer ce type d'information de manière uniforme. Le
+% \autoref{tab:backmatter} en présente un sommaire; les descriptions
+% détaillées suivent. \fi
%
% \begin{table}[t]
% \centering
@@ -1428,18 +1607,34 @@
% \fi
% \end{DescribeEnv}
%
+% \changes{1.1}{2024-01-23}{Documentation: revise the description of
+% the \texttt{sharing} environment now that the CJS adhered to the
+% Expects Data Sharing editorial policy of Wiley.}
% \begin{DescribeEnv}{sharing}
+% \def\POLICYNAME{\ifenglish Expects Data Sharing\else \emph{Expects Data Sharing}\fi}
+% \ifenglish%
+% {\TheCJS} adheres to the %
+% \else%
+% {\LaRevue} respecte la politique éditoriale %
+% \fi%
+% \href{https://authorservices.wiley.com/author-resources/Journal-Authors/open-access/data-sharing-citation/data-sharing-policy.html}{\POLICYNAME} %
% \ifenglish%
-% If you wish to share data or the code, use the environment
-% \code{sharing} to describe how to access this material, providing
-% a persistent identifier, such as a digital object identifier (DOI)
-% or a URL. %
+% editorial policy of Wiley. Therefore, you must use the environment
+% \code{sharing} to make a statement about the availability or
+% absence of shared data. In case of ethical or legal concerns, we
+% encourage you to provide synthetic data instead if possible.
+% Provide a persistent identifier to access the data, such as a
+% digital object identifier (DOI) or a URL. You may also use the
+% environment to describe how to access shared computer code. %
% \else%
-% Si vous mettez les données ou le code de votre article à
-% disposition, utilisez l'environnement \code{sharing} pour
-% expliquer comment accéder à ce matériel et pour indiquer un lien
-% permanent, comme un identificateur d'objets numériques (DOI) ou
-% une adresse URL. %
+% de Wiley. Par conséquent, vous devez utiliser l'environnement
+% \code{sharing} pour préciser les conditions de partage des données
+% de recherche, ou encore leur absence, le cas échéant. En cas
+% d'enjeux éthiques ou légaux, veuillez utiliser si possible des
+% données de synthèse. Indiquez un lien permanent pour accéder aux
+% données, comme un identificateur d'objets numériques (DOI) ou une
+% adresse URL. Vous pouvez aussi utiliser l'environnement pour
+% indiquer comment accéder à du code informatique partagé. %
% \fi
% \end{DescribeEnv}
%
@@ -1644,10 +1839,16 @@
% la page de titre du présent document a été composée avec la commande
% suivante: %
% \fi
-% \begin{quote}
-% \cmd{\licence}\code{\{\{}\cmdprint{\ccbysa*}\code{\} {\year}, Statistical Society of Canada \{}\cmdprint{\textbar}\code{\}} \\
-% \verb+ +\code{Société canadienne de statistique\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\licence{{\ccbysa*} `\year', Statistical Society of Canada {\textbar}
+ Société canadienne de statistique}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
%
% \ifenglish%
% \subsection{Mathematics}
@@ -1655,6 +1856,8 @@
% \subsection{Mathématiques}
% \fi
% \label{sec:usage:mathematics}
+% \changes{1.1}{2024-01-23}{Documentation: specify that the class is
+% not compatible with the package \textbf{amssymb}.}
%
% \ifenglish%
% The class automatically loads the packages %
@@ -1666,16 +1869,18 @@
% \ifenglish%
% and, when the document is compiled with {\XeLaTeX}, %
% \else%
-% et, lorsque le document est compilé avec {\XeLaTeX},
+% et, lorsque le document est compilé avec {\XeLaTeX}, %
% \fi%
% \href{https://ctan.org/pkg/unicode-math}{\pkg{unicode-math}}. %
% \ifenglish%
-% The class also defines a number of commands and environments to
-% standardize the typesetting of mathematical content in {\TheCJS}.
+% Note that it is not compatible with the package \pkg{amssymb}. The
+% class also defines a number of commands and environments to
+% standardize the typesetting of mathematical content in {\TheCJS}. %
% \else%
-% Elle définit également des commandes et des environnements pour
-% assurer une mise en forme standardisée des mathématiques dans
-% {\LaRevue}.
+% En revanche, elle n'est pas compatible avec le paquetage
+% \pkg{amssymb}. La classe définit également des commandes et des
+% environnements pour assurer une mise en forme standardisée des
+% mathématiques dans {\LaRevue}. %
% \fi
%
% \ifenglish%
@@ -1724,6 +1929,9 @@
% \cmd{\mat} &
% \ifenglish matrix or vector \else matrice ou vecteur \fi &
% \cmdprint{\mat}\code{\{A\}} & $\mat{A}$ \\
+% \cmd{\matit} &
+% \ifenglish matrix or vector (italic) \else matrice ou vecteur (italique) \fi &
+% \cmdprint{\matit}\code{\{x\}} & $\matit{x}$ \\
% \cmd{\trsp} &
% \ifenglish transposition \else transposée \fi &
% \cmdprint{\mat}\code{\{A\}}\cmdprint{\trsp} & $\mat{A}\trsp$ \\
@@ -1800,7 +2008,7 @@
% \begin{tabbing}
% \hspace*{2.5em}\=\cmd{\prdist}\code{\{E\}(\cmd{\lambda})}%
% \quad\=$\rightarrow$ \quad\=$\prdist{N}(0, 1)$ \quad\=\kill
-% \>\cmd{\prdist}\code{\{N\}(0, 1)}%
+% \>\cmd{\prdist}\code{\{N\}(0, 1)} %
% \>$\rightarrow$ %
% \>$\prdist{N}(0, 1)$ %
% \>(\ifenglish Normal\else normale\fi) \\
@@ -1816,26 +2024,36 @@
% \end{DescribeMacro}
%
% \begin{DescribeMacro}{\mat}
-% \begin{DescribeMacro}{\trsp}
-% \begin{DescribeMacro}{\tr}
-% \begin{DescribeMacro}{\diag}
+% \begin{DescribeMacro}{\matit}
% \ifenglish%
% The command \cmd{\mat} typesets a variable in roman bold, a style
% often used for matrices and vectors (hence the name of the
-% command). To indicate matrix transposition, use only the command
-% \cmd{\trsp}. The commands \cmd{\tr} and \cmd{\diag} define two
-% other common linear algebra operators, the trace and the
-% diagonal. %
+% command). The command \cmd{\matit} is similar, but for a variable
+% in bold italic.
% \else%
% La commande \cmd{\mat} compose une variable en romain gras, ce qui
% est souvent utilisé pour les matrices et les vecteurs (d'où le nom
-% de la commande). Pour indiquer la transposée d'une matrice,
-% utilisez uniquement la commande \cmd{\trsp}. Les commandes
-% \cmd{\tr} et \cmd{\diag} définissent deux autres opérateurs
-% courants en algèbre linéaire, la trace et la diagonale. %
+% de la commande). La commande \cmd{\matit} produit plutôt une
+% variable en gras italique.
% \fi
% \end{DescribeMacro}
% \end{DescribeMacro}
+%
+% \begin{DescribeMacro}{\trsp}
+% \begin{DescribeMacro}{\tr}
+% \begin{DescribeMacro}{\diag}
+% \ifenglish%
+% To indicate matrix transposition, use only the command
+% \cmd{\trsp}. The commands \cmd{\tr} and \cmd{\diag} define
+% two other common linear algebra operators, the trace and the
+% diagonal. %
+% \else%
+% Pour indiquer la transposée d'une matrice, utilisez uniquement la
+% commande \cmd{\trsp}. Les commandes \cmd{\tr} et \cmd{\diag}
+% définissent deux autres opérateurs courants en algèbre linéaire,
+% la trace et la diagonale. %
+% \fi
+% \end{DescribeMacro}
% \end{DescribeMacro}
% \end{DescribeMacro}
%
@@ -1999,6 +2217,23 @@
% Évitez si possible les indices doubles et n'utilisez jamais
% d'indices triples. %
% \fi
+% \changes{1.1}{2024-03-06}{Documentation: add an advice on the
+% typesetting of bold symbols in mathematics.}
+% \item %
+% \ifenglish%
+% Bold in mathematics is a tricky issue. Use the aforementioned
+% class commands \cmdprint{\mat} and \cmdprint{\matit} to generate
+% bold symbols reliably across {\TeX} engines. With {\XeLaTeX},
+% \cmdprint{\mat} also works with Greek letters (that will be
+% typeset in italic). %
+% \else%
+% La composition en gras en mathématiques est une opération
+% délicate. Utilisez les commandes de la classe \cmdprint{\mat} et
+% \cmdprint{\matit} mentionnées précédemment pour composer
+% automatiquement des symboles en gras quelque soit le moteur
+% {\TeX}. Avec {\XeLaTeX}, \cmdprint{\mat} fonctionne aussi avec les
+% lettres grecques (qui sont alors composées en italique). %
+% \fi
% \item %
% \ifenglish%
% Always use the command \cmdprint{\ell} to obtain the symbol
@@ -2094,13 +2329,19 @@
% («équation», «inégalité», «relation», etc.), ainsi que par une
% espace insécable: %
% \fi
-% \begin{quote}
-% \def\LABEL{\ifenglish label\else étiquette\fi}
-% \def\EQN{\ifenglish equation\else équation\fi}
-% \def\INEQ{\ifenglish inequalities\else inégalités\fi}
-% \code{\EQN~}\cmdprint{\eqref}\marg{\LABEL} \\
-% \code{\INEQ~}\cmdprint{\eqref}\marg{\LABEL}\code{{-}{-}}\cmdprint{\eqref}\marg{\LABEL}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+ \def\LABEL{\ifenglish label\else étiquette\fi}
+ \def\EQN{\ifenglish equation\else équation\fi}
+ \def\INEQ{\ifenglish inequalities\else inégalités\fi}
+\begin{lstlisting}
+`\EQN'~\eqref`\marg{\LABEL}'
+`\INEQ'~\eqref`\marg{\LABEL}'--\eqref`\marg{\LABEL}'
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \end{itemize}
%
% \ifenglish%
@@ -2533,72 +2774,137 @@
% description pour un nouvel environnement \meta{env}, insérez la
% commande suivante dans le préambule de votre document: %
% \fi
-% \begin{quote}
-% \cmdprint{\addto}\cmdprint{\extras}\code{\languagename}\code{\{}\cmdprint{\def}\code{\bs}\meta{env}\code{autorefname}\marg{description}\code{\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\addto\extras`\languagename'{\def\`\meta{env}'autorefname`\marg{description}'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
% (If the main language of the article is French, replace
% \cmdprint{\extras}\code{\languagename} by
-% \cmdprint{\extrasfrench}.)\footnote{%
+% \cmdprint{\extrasfrench}.\footnote{%
% For further details, see Section~6 of the documentation of
-% \pkg{hyperref}.} %
+% \pkg{hyperref}.}) %
% \else%
% (Si la langue principale de l'article est l'anglais, remplacez
% \cmdprint{\extras}\code{\languagename} par
-% \cmdprint{\extrasenglish}.)\footnote{%
+% \cmdprint{\extrasenglish}.\footnote{%
% Consultez au besoin la section~6 de la documentation de
-% \pkg{hyperref}.} %
+% \pkg{hyperref}.}) %
% \fi
%
% \begin{DescribeMacro}{\texorpdfstring}
% \changes{0.93}{2023-11-07}{Fix the name of a command from
% \cs{textorpdfstring} to the correct \cs{texorpdfstring} in the
-% documentation.}
+% documentation.}%
+% \changes{1.1}{2024-03-12}{Documentation: mention to also use
+% \cs{texorpdfstring} to fix \texttt{Token not allowed in a PDF
+% string} warnings.}
% \ifenglish%
-% The compilation of your manuscript may halt with the error message
+% The package \pkg{hyperref} builds the table of contents of the
+% PDF. If you use mathematical notation or symbols in a section
+% title, compilation of your manuscript may either result in
+% warnings of the form %
+% \else%
+% Le paquetage \pkg{hyperref} se charge de produire la table des
+% matières du fichier PDF. Si vous utilisez de la notation ou des
+% symboles mathématiques dans un titre de section, la compilation de
+% votre article pourrait soit résulter en des avertissements de la
+% forme %
+% \fi%
% \begin{quote}
-% \code{Improper alphabetic constant}
+% Token not allowed in a PDF string
% \end{quote}
-% The reason is most likely that you use a mathematical symbol in a
-% section title that \pkg{hyperref} is not able to properly
-% translate for the table of contents of the PDF. If you need
-% the symbol, try wrapping it in \cmd{\texorpdfstring}. This
-% command takes two arguments: the symbol that should appear in the
-% document, and the replacement text for the table of contents. For
-% example, you would replace %
+% \ifenglish%
+% or halt with the error message %
% \else%
-% Il se pourrait que la compilation de votre article échoue avec le
-% message d'erreur
+% ou échouer avec le message d'erreur %
+% \fi%
% \begin{quote}
% \code{Improper alphabetic constant}
% \end{quote}
-% La cause en est probablement un symbole mathématique placé dans un
-% titre de section que \pkg{hyperref} n'arrive pas à traduire pour
-% la table des matières du fichier PDF. Si vous ne pouvez vous
-% passer du symbole dans le titre, essayez d'utiliser la commande
-% \cmd{\texorpdfstring} dans celui-ci. Cette commande requiert deux
-% arguments: le texte qui doit apparaitre dans le document et celui
-% qui peut figurer dans la table des matières. Par exemple, vous
-% devriez remplacer %
+% \ifenglish%
+% If you need the notation or symbol in the title, wrap it in
+% \cmd{\texorpdfstring}. This command takes two arguments: the
+% notation or symbol that should appear in the document, and the
+% replacement text for the table of contents. For example, you would
+% replace %
+% \else%
+% Si vous ne pouvez vous passer de la notation ou du symbole dans le
+% titre, utilisez la commande \cmd{\texorpdfstring} dans celui-ci.
+% Cette commande requiert deux arguments: le texte qui doit
+% apparaitre dans le document et celui qui peut figurer dans la
+% table des matières. Par exemple, vous devriez remplacer %
% \fi%
-% \def\TEXT{Contribution \ifenglish of \else de \fi}
-% \begin{quote}
-% \cmdprint{\subsection}\code{\{\TEXT $}\cmdprint{\beta}\code{$\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\def\TEXT{\ifenglish Algorithm for\else Algorithme pour\fi}
+\begin{lstlisting}
+\section{`\TEXT' $U_n$}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \ifenglish%
+% by something along the lines of %
+% \else%
+% par quelque chose comme %
+% \fi%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\section{`\TEXT' \texorpdfstring{$U_n$}{U[n]}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \ifenglish%
+% You would also replace %
+% \else
+% De même, vous devriez remplacer %
+% \fi%
+% \iffalse
+%<*example>
+% \fi
+\def\TEXT{Contribution \ifenglish of\else de\fi}
+\begin{lstlisting}
+\subsection{`\TEXT' $\beta$}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish by\else par\fi
-% \begin{quote}
-% \cmdprint{\subsection}\code{\{\TEXT}\cmdprint{\texorpdfstring}\code{\{$}\cmdprint{\beta}\code{$\}\{beta\}\}}
-% \end{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\subsection{`\TEXT' \texorpdfstring{$\beta$}{beta}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \ifenglish or even\else ou encore\fi
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\subsection{`\TEXT' \texorpdfstring{$\beta$}{`β'}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
% \ifenglish%
-% or, even better if you can enter Unicode characters on the
-% keyboard, by %
+% if you can enter Unicode characters on the keyboard. %
% \else%
-% ou même, si vous pouvez entrer des caractères Unicode au clavier,
-% par %
+% si vous êtes en mesure d'entrer des caractères Unicode au
+% clavier. %
% \fi
-% \begin{quote}
-% \cmdprint{\subsection}\code{\{\TEXT}\cmdprint{\texorpdfstring}\code{\{$}\cmdprint{\beta}\code{$\}\{β\}\}}
-% \end{quote}
% \end{DescribeMacro}
%
% \warningbox{%
@@ -2782,12 +3088,12 @@
% \fi
% \item %
% \ifenglish%
-% (Optional) Appendices --- sections numbered A, B, \dots\ after the
-% command \cmd{\appendix} --- for proofs and longer mathematical
+% (Optional) Appendices---sections numbered A, B, \dots\ after the
+% command \cmd{\appendix}---for proofs and longer mathematical
% arguments. Each appendix must be cited in the main article. %
% \else%
-% (Optionnel) Les annexes --- des sections numérotées A, B, \dots\
-% suite à la commande \cmd{\appendix} ---- pour les démontrations de
+% (Optionnel) Les annexes~--- des sections numérotées A, B, \dots\
+% suite à la commande \cmd{\appendix}~--- pour les démontrations de
% théorèmes ou autres longs développements mathématiques. Chaque
% annexe doit être citée dans l'article. %
% \fi
@@ -2871,10 +3177,11 @@
% \end{itemize}
% Les informations de la page de titre et des parties annexes peuvent
% toujours figurer dans le code source. Autrement dit, vous pouvez
-% créer le matérial additionnel directement à partir du même préambule
-% --- ou gabarit --- que votre article principal; il suffit d'ajouter
+% créer le matérial additionnel directement à partir du même
+% préambule que votre article principal; il suffit d'ajouter
% \code{supplement} aux options de la classe. %
-% \fi \endgroup
+% \fi
+% \endgroup
%
% \ifenglish%
% The option \code{supplement} is compatible with the option
@@ -2955,7 +3262,7 @@
% at the bottom of the first page. The option has no other effect on
% the rendering of the article. %
% \else%
-% L'option \code{final} --- qui a préséance sur \code{review} ---
+% L'option \code{final}~--- qui a préséance sur \code{review}~---
% active la vérification que les informations de publication et que
% l'historique de révision sont fournis. De plus, si les
% informations d'octroi de licence sont fournies à l'aide des
@@ -3006,10 +3313,79 @@
% \else%
% AAAA-MM-JJ. Par exemple: %
% \fi
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\received{`\isodate'}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \end{DescribeMacro}
+% \end{DescribeMacro}
+%
+% \begin{DescribeMacro}{\specialack}
+% \ifenglish%
+% The command \cmd{\specialack} provides a generic interface to
+% give special acknowledgement on the title page, such as the one
+% required by ADNI (\autoref{sec:usage:titling:adni}). The
+% command takes two arguments: %
+% \else%
+% La commande \cmd{\specialack} permet de reconnaitre une
+% contribution spéciale sur la page de titre, telle que celle exigée
+% par l'ADNI (\autoref{sec:usage:titling:adni}). La commande requiert
+% deux arguments: %
+% \fi%
% \begin{quote}
-% \cmdprint{\received}\code{\{2023-06-20\}}
+% \cmdprint{\specialack}\marg{\ifenglish by-line\else signature\fi}\marg{\ifenglish statement\else déclaration\fi}
% \end{quote}
+% \ifenglish%
+% The \meta{by-line} is inserted in the list of authors, whereas the
+% \meta{statement} is typeset at the bottom of the title page, with
+% the licensing information. Each argument may be empty, in which
+% case the corresponding information is not printed. For example,
+% the command \cmd{\ADNIacknowledgement} is effectively defined
+% as: %
+% \else%
+% La \meta{signature} est ajoutée à la liste des auteurs, alors que
+% la \meta{déclaration} est affichée au bas de la page de titre,
+% avec la déclaration de licence. Chaque argument peut être vide,
+% auquel cas l'information correspondante n'est pas affichée. À
+% titre d'exemple, la commande \cmd{\ADNIacknowledgement} est
+% définie ainsi: %
+% \fi%
+% \begin{quote}
+% \cmdprint{\specialack}\code{\{}\cmdprint{\CJS@adnibyline}\code{\}\{}\cmdprint{\CJS@adnistatement}\code{\}}
+% \end{quote}
+% \ifenglish%
+% (The internal commands \cmd{\CJS@adnibyline} and
+% \cmd{\CJS@adnistatement} typeset the official ADNI by-line and
+% statement. The analogous commands \cmd{\CJS@admcbyline} and
+% \cmd{\CJS@admcstatement} serve the same purpose for the
+% Alzheimer’s Disease Metabolomics Consortium.) %
+% \else%
+% (Les commandes internes \cmd{\CJS@adnibyline} et
+% \cmd{\CJS@adnistatement} contiennent le texte officiel de la
+% signature et de la déclaration de l'ADNI. Les commandes analogues
+% \cmd{\CJS@admcbyline} et \cmd{\CJS@admcstatement} pour
+% l'Alzheimer’s Disease Metabolomics Consortium sont également
+% définies dans la classe.) %
+% \fi%
% \end{DescribeMacro}
+%
+% \begin{DescribeMacro}{\specialackmark}
+% \ifenglish%
+% The command \cmd{\specialackmark} sets the footnote marker used by
+% \cmd{\specialack}. The default definition of the marker is: %
+% \else%
+% La commande \cmd{\specialackmark} permet de modifier l'appel de
+% note de bas de page utilisé par \cmd{\specialack}. La définition
+% par défaut de l'appel de note est: %
+% \fi%
+% \begin{quote}
+% \cmdprint{\textsuperscript}\code{\{}\cmdprint{\ensuremath}\code{\{*\}\}}
+% \end{quote}
% \end{DescribeMacro}
%
% \ifenglish%
@@ -3118,6 +3494,7 @@
\newif\ifCJS@final \CJS@finalfalse % final version?
\newif\ifCJS@titlingfooter \CJS@titlingfooterfalse % footer on title page?
\newif\ifCJS@journalinfo \CJS@journalinfotrue % display journal info?
+\newif\ifCJS@specialack \CJS@specialackfalse % special acknowledgement?
\newif\ifCJS@fancybreak \CJS@fancybreaktrue % display fancy break?
\newif\ifCJS@history \CJS@historyfalse % history present?
\newif\ifCJS@corrauth \CJS@corrauthfalse % corresponding author?
@@ -3198,13 +3575,6 @@
% Useful packages like \pkg{iftex} and \pkg{etoolbox} are already
% loaded by \class{memoir}.
%
-% The package \pkg{iflang} provides expandable checks for the current
-% language based on the macro \cmdprint{\languagename} or hyphenation
-% patterns.
-% \begin{macrocode}
-\RequirePackage{iflang}
-% \end{macrocode}
-%
% We rely on \pkg{natbib} for author-year citations. This package must
% be loaded before \pkg{babel}. The option \code{sectionbib} ensures
% that the bibliography (or list of references) is typeset as a
@@ -3369,6 +3739,9 @@
% {\LuaTeX}, commands from \pkg{fontspec} and \pkg{unicode-math} load
% the OpenType variants of the fonts. The encoding is UTF-8 by default
% for these engines.
+% \changes{1.1}{2024-03-06}{Implementation: explicitly set the option
+% \texttt{bold-style!=TeX} when loading the math font with the modern
+% engines.}
% \begin{macrocode}
\iftutex
\RequirePackage[babel=true]{microtype}
@@ -3388,7 +3761,7 @@
[
Extension = .otf,
Scale = 1,
- Ligatures = TeX
+ bold-style = TeX
]
\setmathfont{FiraMath-Regular}
[
@@ -3436,7 +3809,8 @@
% \label{sec:implementation:layout:colours}
%
% We define some colours used by the class. First, the three main
-% colours of {\TheCJS} logo: %
+% colours of {\TheCJS} logo, hand-picked from the SVG code of the
+% latter: %
% \textcolor{CJSpink}{\rule{1.5em}{1.2ex}} %
% \textcolor{CJSred}{\rule{1.5em}{1.2ex}} %
% \textcolor{CJSyellow}{\rule{1.5em}{1.2ex}}\,.
@@ -3455,8 +3829,8 @@
\definecolor{CJSurl}{rgb}{0.6,0,0} % external links
\definecolor{CJScitation}{rgb}{0,0.5,0} % citations
% \end{macrocode}
-% Finally, the colour of the ORCID icon\footnote{%
-% See \url{https://info.orcid.org/brand-guidelines}.}: %
+% Finally, the colour of the %
+% \href{https://info.orcid.org/brand-guidelines}{ORCID icon}: %
% \textcolor{CJSorcid}{\rule{1.5em}{1.2ex}}\,.
% \begin{macrocode}
\definecolor{CJSorcid}{HTML}{A6CE39}
@@ -3497,12 +3871,12 @@
% The decorative element is created using plain {\TeX} rules. Its
% height and depth are identical to the journal information.
% \begin{macrocode}
-\setbox\z@=\vbox{\sffamily\hbox{\CJS@journalname}\hbox{\bfseries V,}}
\newsavebox\CJS@journalornament
\setbox\CJS@journalornament=\vbox{%
+ \setbox\z@=\vbox{\sffamily\hbox{\CJS@journalname}\hbox{\bfseries V,}}
\setbox\tw@\hbox{\vrule \@width4pt\@height\ht\z@\@depth\dp\z@}
- \hbox{\textcolor{CJSpink}{\copy\tw@}\kern2pt%
- \textcolor{CJSred}{\copy\tw@}\kern2pt%
+ \hbox{\textcolor{CJSpink}{\copy\tw@}\kern2pt
+ \textcolor{CJSred}{\copy\tw@}\kern2pt
\textcolor{CJSyellow}{\copy\tw@}\kern6pt}}
% \end{macrocode}
%
@@ -3535,7 +3909,7 @@
%
% First, a command to set the font.
% \begin{macrocode}
-\newcommand*\CJS@setheadfootfont{%
+\def\CJS@setheadfootfont{%
\firalining\fontsize{9}{13}\selectfont}
% \end{macrocode}
%
@@ -3545,7 +3919,7 @@
\newlength\CJS@headdivheight
\settoheight\CJS@headdivheight{\CJS@setheadfootfont 1}
\setlength\CJS@headdivheight{0.9\CJS@headdivheight}
-\newcommand*\CJS@headdivrule{%
+\def\CJS@headdivrule{%
\rule[0.05\CJS@headdivheight]{0.75\normalrulethickness}{\CJS@headdivheight}}
% \end{macrocode}
%
@@ -3614,7 +3988,7 @@
% \label{sec:implementation:layout:titles}
%
% The \class{memoir} class assumes that sectioning starts at the
-% chapter level --- even with the \code{article} option. To get around
+% chapter level---even with the \code{article} option. To get around
% this requirement, we disable the effect of \cmdprint{\chapter}. A
% desirable side effect is to make \cmd{\autoref} work correctly for
% appendices.
@@ -4160,6 +4534,11 @@
\fancybreak{\pfbreakdisplay}
\fi
% \end{macrocode}
+% \changes{1.1}{2024-06-19}{Implementation: fix the positioning of the
+% licensing information at the bottom of the title page.}
+% \changes{1.1}{2024-06-26}{Implementation: include the special
+% acknowledgement statement in the licensing information, if
+% required.}
% Finally, unless overridden by a class option, allocate space
% for the licence statement at the bottom of the title page. By
% default, a notice indicates that the licence will appear
@@ -4173,11 +4552,12 @@
\iflanguage{french}{Futur emplacement de la déclaration de licence.}%
{Licence statement to appear here.}}
\begin{figure}[!b]
- \raisebox{0pt}[0pt][\footskip]{%
+ \raisebox{0pt}[0pt][\dimexpr\CJS@licenceht-\footskip\relax]{%
\vbox{%
\CJS@setlicencefont
\rule{\textwidth}{\normalrulethickness}
\parbox[t][\CJS@licenceht][t]{\textwidth}{%
+ \ifCJS@specialack\CJS@specialackstatement\fi
\ifCJS@final\CJS@licence \else\textit\CJS@notice \fi}}}
\end{figure}
\fi
@@ -4185,6 +4565,45 @@
% \end{macrocode}
% \end{macro}
%
+% \subsubsection{ADNI data use agreement}
+% \label{sec:implementation:titling:adni}
+%
+% \changes{1.1}{2024-06-26}{Implementation: define the new commands
+% \cs{ADNIacknowledgement} and \cs{ADMCacknowledgement}.}
+% \begin{macro}{\ADNIacknowledgement}
+% \begin{macro}{\ADMCacknowledgement}
+% The commands \cmd{\ADNIacknowledgement} and
+% \cmd{\ADMCacknowledgement} automatically create special
+% acknowledgements for the Alzheimer’s Disease Neuroimaging
+% Initiative (ADNI) and the Alzheimer’s Disease Metabolomics
+% Consortium (ADMC), respectively.
+% \begin{macrocode}
+\newcommand*\CJS@adnibyline{for the Alzheimer’s Disease Neuroimaging Initiative}
+\newcommand*\CJS@adnistatement{%
+ Data used in preparation of this article were obtained
+ from the \href{https://adni.loni.usc.edu}{Alzheimer’s Disease Neuroimaging Initiative}
+ (ADNI) database. As such, the investigators within the ADNI
+ contributed to the design and implementation of ADNI and/or provided
+ data but did not participate in the analysis or writing of this
+ report. A complete listing of ADNI investigators can be found at:
+ \url{https://adni.loni.usc.edu/wp-content/uploads/how_to_apply/ADNI_Acknowledgement_List.pdf}.}
+\newcommand*\CJS@admcbyline{for the Alzheimer’s Disease Metabolomics Consortium}
+\newcommand*\CJS@admcstatement{%
+ Data used in preparation of this article were generated by the
+ Alzheimer’s Disease Metabolomics Consortium (ADMC). As such, the
+ investigators within the ADMC provided data but did not participate
+ in analysis or writing of this report. A complete listing of ADMC
+ investigators can be found at:
+ \url{https://sites.duke.edu/adnimetab/team/}.}
+\newcommand*\ADNIacknowledgement{%
+ \specialack{\CJS@adnibyline}{\CJS@adnistatement}}
+\newcommand*\ADMCacknowledgement{%
+ \renewcommand*\CJS@specialackmark{\textsuperscript{\ensuremath{**}}}
+ \specialack{\CJS@admcbyline}{\CJS@admcstatement}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Back matter}
% \label{sec:implementation:backmatter}
%
@@ -4292,20 +4711,20 @@
%
% First, set the font for the licence statement.
% \begin{macrocode}
-\newcommand*\CJS@setlicencefont{%
+\def\CJS@setlicencefont{%
\firalining\fontsize{8pt}{9pt}\selectfont}
% \end{macrocode}
%
% \begin{macro}{\CJS@measurelicence}
-% We need to compute the required space for a licence statement. The
-% internal command \cmd{\CJS@measurelicence} measures the total
-% height of either the licence statement provided with
-% \cmd{\licence}, or the seemingly longest version of the license
-% statement used by the publisher. The command is used inside
-% \cmd{\maketitle}.
+% We need to compute the required space for a licence statement and,
+% possibly, the ADNI statement. The internal command
+% \cmd{\CJS@measurelicence} measures the total height required using
+% either the licence statement provided with \cmd{\licence}, or the
+% seemingly longest version of the license statement used by the
+% publisher. The command is used inside \cmd{\maketitle}.
% \begin{macrocode}
\newlength\CJS@licenceht
-\newcommand\CJS@licencesample{%
+\def\CJS@licencesample{%
{\ccbyncnd*} 2023 The Authors. The Canadian Journal of
Statistics~{\textbar}~La revue canadienne de statistique published
by Wiley Periodicals LLC on behalf of Statistical Society of
@@ -4319,7 +4738,8 @@
\newcommand\CJS@measurelicence{%
\setbox\CJS@licencebox=\vbox{%
\CJS@setlicencefont
- \ifdefempty{\CJS@licence}{\CJS@licencesample}{\CJS@licence}}
+ \ifCJS@specialack\CJS@specialackstatement\fi
+ \ifdefempty{\CJS@licence}{\CJS@licencesample}{\CJS@licence}}%
\setlength\CJS@licenceht{\dimexpr\ht\CJS@licencebox+\dp\CJS@licencebox}}
% \end{macrocode}
% \end{macro}
@@ -4343,14 +4763,17 @@
% Inspired by the package \pkg{ccicons} (not used by the class since
% \pkg{fontawesome5} contains all the Creative Commons icons).
%
+% \changes{1.1a}{2024-07-25}{Implementation: fix the generation of
+% spacing in the \cs{ccby*} commands.}
% \begin{macro}{\ccby,\ccby*}
% The command \cmd{\ccby} typesets the icons for the Attribution
% licence: {\ccby}.
% \begin{macrocode}
\newcommand*\ccby{\ccby@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccby@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em}}
+\def\CJS@fakern{\kern0.1em}
+\def\ccby@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern}}
% \end{macrocode}
% \end{macro}
%
@@ -4359,9 +4782,9 @@
% Attribution"-ShareAlike licence: {\ccbysa}.
% \begin{macrocode}
\newcommand*\ccbysa{\ccbysa@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccbysa@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em%
+\def\ccbysa@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern
\faCreativeCommonsSa}}
% \end{macrocode}
% \end{macro}
@@ -4371,9 +4794,9 @@
% Attribution"-NonCommercial licence: {\ccbync}.
% \begin{macrocode}
\newcommand*\ccbync{\ccbync@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccbync@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em%
+\def\ccbync@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern
\faCreativeCommonsNc}}
% \end{macrocode}
% \end{macro}
@@ -4384,10 +4807,10 @@
% {\ccbyncsa}.
% \begin{macrocode}
\newcommand*\ccbyncsa{\ccbyncsa@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccbyncsa@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em%
- \faCreativeCommonsNc\kern0.1em%
+\def\ccbyncsa@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern
+ \faCreativeCommonsNc\CJS@fakern
\faCreativeCommonsSa}}
% \end{macrocode}
% \end{macro}
@@ -4397,9 +4820,9 @@
% Attribution"-NoDerivatives licence: {\ccbynd}.
% \begin{macrocode}
\newcommand*\ccbynd{\ccbynd@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccbynd@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em%
+\def\ccbynd@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern
\faCreativeCommonsNd}}
% \end{macrocode}
% \end{macro}
@@ -4409,10 +4832,10 @@
% Attribution"-NonCommercial"-NoDerivatives licence: {\ccbyncnd}.
% \begin{macrocode}
\newcommand*\ccbyncnd{\ccbyncnd@\@ifstar{~\faCopyright[regular]}\relax}
-\newcommand*\ccbyncnd@{\mbox{%
- \faCreativeCommons\kern0.1em%
- \faCreativeCommonsBy\kern0.1em%
- \faCreativeCommonsNc\kern0.1em%
+\def\ccbyncnd@{\mbox{%
+ \faCreativeCommons\CJS@fakern
+ \faCreativeCommonsBy\CJS@fakern
+ \faCreativeCommonsNc\CJS@fakern
\faCreativeCommonsNd}}
% \end{macrocode}
% \end{macro}
@@ -4447,16 +4870,20 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\mat,\trsp,\tr,\diag}
+% \changes{1.1}{2024-07-13}{Implementation: simpler definition of
+% \cs{mat} and \cs{matit} using \cs{let} instead of \cs{newcommand*}.}
+% \begin{macro}{\mat,\matit,\trsp,\tr,\diag}
% The class provides special commands to typeset matrix and vector
% names, a carefully designed transpose symbol, and the most common
% linear algebra operators.
% \begin{macrocode}
\iftutex
- \newcommand*\mat[1]{\symbf{#1}}
+ \let\mat\symbf
+ \let\matit\symbfit
\newcommand*\trsp{^{\mkern-1.5mu\symsfup{T}}}
\else
- \newcommand*\mat[1]{\mathbf{#1}}
+ \let\mat\mathbf
+ \let\matit\mathbfit
\newcommand*\trsp{^{\mkern-1.5mu\mathsf{T}}}
\fi
\DeclareMathOperator{\tr}{tr}
@@ -4530,6 +4957,8 @@
% \subsection{Computer code and software}
% \label{sec:implementation:software}
%
+% \changes{1.1a}{2024-07-25}{Implementation: prevent hyphenation in
+% \cs{proglang} using a simple \cs{mbox}.}
% \begin{macro}{\proglang}
% The command \cmd{\proglang} provides a means to uniformly typeset
% the name of a software or programming language. The command also
@@ -4537,7 +4966,7 @@
% shortcuts to the most common languages. Notice that the
% \cmd{\Cpplang} case is specially crafted.
% \begin{macrocode}
-\newcommand*\proglang[1]{{\hyphenchar\font=-1 #1}}
+\newrobustcmd*\proglang[1]{\mbox{#1}}
\newcommand*\Rlang{\proglang{R}}
\newcommand*\SASlang{\proglang{SAS}}
\newcommand*\SPSSlang{\proglang{SPSS}}
@@ -4545,13 +4974,13 @@
\newcommand*\Pylang{\proglang{Python}}
\newcommand*\Julialang{\proglang{Julia}}
\newcommand*\Clang{\proglang{C}}
-\newcommand*\CJS@plus{%
+\newcommand*\Cpplang{\proglang{C\CJS@plus\CJS@plus}}
+\def\CJS@plus{%
\ifx\f@family\sfdefault%
\protect\hspace{-.04em}\protect\raisebox{-.125ex}{\larger+}%
\else%
\protect\hspace{-.03em}\protect\raisebox{.25ex}{\smaller+}%
\fi}
-\newcommand*\Cpplang{\proglang{C\CJS@plus\CJS@plus}}
% \end{macrocode}
% \end{macro}
%
@@ -4595,10 +5024,18 @@
% is handled by \pkg{natbib}. We loaded the package with the option
% \code{sectionbib} to obtain the list of references as a section, but
% \class{memoir} will use \cmd{\section} in such instances. We want an
-% unnumbered section. To achieve this efficiently, we redefine
-% the internal command of \class{memoir}.
+% unnumbered section (yet showing in the virtual table of contents of
+% the PDF). To achieve this efficiently, we redefine the internal
+% command of \class{memoir}.
+% \changes{1.1}{2024-07-02}{Implementation: add a
+% \cs{addtocontentsline} command to the redefinition of
+% \cs{@memb@bsec} to include the References section in the virtual
+% table of contents of the PDF.}
% \begin{macrocode}
-\renewcommand{\@memb@bsec}{\section*{\bibname}\prebibhook}
+\renewcommand{\@memb@bsec}{%
+ \section*{\bibname}%
+ \addcontentsline{toc}{section}{\bibname}%
+ \prebibhook}
% \end{macrocode}
%
% Furthermore, we need to redefine the title of the section, because
@@ -4706,14 +5143,14 @@
% \end{macro}
%
% \begin{macro}{\received,\accepted}
-% The article history --- dates when the article was received and
-% accepted --- is printed at the very end of the article when present.
+% The article history---dates when the article was received and
+% accepted---is printed at the very end of the article when present.
% Its treatment involves a number of steps.
%
% First, the dates themselves are input in ISO format YYYY-MM-DD and
% converted in language dependent strings using the package
% \pkg{datetime2}. In English, we want to use the British format
-% without the ordinal for the day: ``1 January 1970''. In French, we
+% without the ordinal for the day: 1 January 1970. In French, we
% can simply rely on the default format.
% \begin{macrocode}
\DTMlangsetup[en-GB]{ord=omit}
@@ -4750,36 +5187,73 @@
% \end{macrocode}
% \end{macro}
%
+% \changes{1.1a}{2024-07-25}{Implementation: replace box registers
+% \cs{@ne} and \cs{thr@@} by \cs{z@} and \cs{tw@}.}
% We also define a decorative element similar to the one used on the
% title page, only adapted for a single line content. To create a
% balanced element, we use the height of a letter with an ascender and
% the depth of the old-style number 4.
% \begin{macrocode}
-\setbox\@ne=\vbox{\hbox{\firaoldstyle\small l4}}
\newsavebox\CJS@historyornament
\setbox\CJS@historyornament=\vbox{%
- \setbox\thr@@\hbox{\vrule \@width1.5pt\@height\ht\@ne\@depth\dp\@ne}
- \hbox{\textcolor{CJSpink}{\copy\thr@@}\kern.75pt%
- \textcolor{CJSred}{\copy\thr@@}\kern.75pt%
- \textcolor{CJSyellow}{\copy\thr@@}\kern3pt}}
+ \setbox\z@=\vbox{\hbox{\firaoldstyle\small l4}}
+ \setbox\tw@\hbox{\vrule \@width1.5pt\@height\ht\z@\@depth\dp\z@}
+ \hbox{\textcolor{CJSpink}{\copy\tw@}\kern.75pt
+ \textcolor{CJSred}{\copy\tw@}\kern.75pt
+ \textcolor{CJSyellow}{\copy\tw@}\kern3pt}}
% \end{macrocode}
%
% Finally, the history information, when present, is printed at the
% end of the article.
% \begin{macrocode}
-\newcommand*\CJS@historybox{
+\def\CJS@historybox{
\par\addvspace{2\baselineskip}\noindent%
\smash{\box\CJS@historyornament \CJS@history}\par%
\vspace*{40pt}}
\AtEndDocument{\ifCJS@journalinfo\ifCJS@history\CJS@historybox\fi\fi}
% \end{macrocode}
% \end{macro}
+%
+% \changes{1.1}{2024-06-26}{Implementation: define the new command
+% \cs{specialack}.}
+% \begin{macro}{\specialack}
+% The command \cmd{\specialack} is the generic interface to give
+% special acknowledgement on the title page. The command inserts its
+% first argument in the list of authors, and its second argument at
+% the bottom of the title page, with the licensing information. Each
+% argument may be empty, in which case the corresponding information
+% is not displayed.
+% \begin{macrocode}
+\def\CJS@specialackstatement{}
+\newcommand*\specialack[2]{%
+ \ifstrempty{#1}{}{%
+ \author{#1\CJS@specialackmark}}
+ \ifstrempty{#2}{}{%
+ \CJS@specialacktrue
+ \renewcommand*\CJS@specialackstatement{\CJS@specialackmark\,#2\medskip\newline}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{1.1}{2024-06-26}{Implementation: define the new command
+% \cs{specialackmark}.}
+% \begin{macro}{\specialackmark}
+% The command \cmd{\specialackmark} changes the footnote marker used
+% by \cmd{\specialack} from its default definition.
+% \begin{macrocode}
+\def\CJS@specialackmark{\textsuperscript{\ensuremath{*}}}
+\newcommand*\specialackmark[1]{%
+ \renewcommand*\CJS@specialackmark{#1}}
+% \end{macrocode}
+% \end{macro}
+%
%</class>
% ^^A <<<<< End of the code of the class
%
% ^^A Change notes for the templates must appear before \Finale
% \changes{0.93}{2023-11-07}{Templates: fix a missing closing brace in
% \cs{author} commands.}
+% \changes{1.1}{2024-01-23}{Templates: revise the description of the
+% \texttt{sharing} environment.}
% \Finale
%
% \iffalse
@@ -4893,18 +5367,18 @@
%<fr> %% la page de titre automatiquement.
\begin{englishabstract}
<Insert your English abstract here. The abstract should be concise
- --- up to 10 lines long --- and descriptive. Avoid symbols as much
- as possible. Formulas are strongly discouraged, and citations
- should be avoided.>
+ (up to 10 lines long) and descriptive. Avoid symbols as much as
+ possible. Formulas are strongly discouraged, and citations should
+ be avoided.>
%<fr> [Un résumé en anglais sera fourni pour les auteurs qui ne peuvent
%<fr> le préparer eux-mêmes.]
\end{englishabstract}
\begin{frenchabstract}
<Insérer le texte du résumé en français ici. Le résumé doit être
- concis --- une dizaine de lignes --- et descriptif. Éviter autant
- que possible les symboles. Les équations mathématiques sont
- fortement découragées et les citations sont à éviter.>
+ concis (une dizaine de lignes) et descriptif. Éviter autant que
+ possible les symboles. Les équations mathématiques sont fortement
+ déconseillées et les citations sont à éviter.>
%<en> [We will supply a French abstract for those authors who
%<en> can't prepare it themselves.]
\end{frenchabstract}
@@ -4958,13 +5432,15 @@
%<fr> <Texte libre>
\end{supplement}
-%<en> %% DATA SHARING (optional - comment out if unused). Describe how to
-%<en> %% access data that you wish to share. Provide a permanent link such
-%<en> %% as a Document Object Identifier (DOI) or an URL.
-%<fr> %% PARTAGE DES DONNÉES (optionnel - commenter si inutilisé).
-%<fr> %% Expliquer comment accéder à des données de l'article mises à
-%<fr> %% disposition. Fournir un lien permanent, comme un identificateur
-%<fr> %% d'objets numériques (DOI) ou une adresse URL.
+%<en> %% DATA SHARING (mandatory). In accordance with the Expect Data
+%<en> %% Sharing editorial policy of Wiley, make a statement about the
+%<en> %% availability or absence of shared data. Provide a permanent link
+%<en> %% such as a Document Object Identifier (DOI) or an URL.
+%<fr> %% PARTAGE DES DONNÉES (obligatoire). Conformément à la politique
+%<fr> %% éditoriale «Expect Data Sharing» de Wiley, vous devez indiquer
+%<fr> %% les conditions de partage des données de recherche, ou l'absence
+%<fr> %% de celles-ci, le cas échéant. Fournir un lien permanent, comme un
+%<fr> %% identificateur d'objets numériques (DOI) ou une adresse URL.
\begin{sharing}
%<en> <Free form text>
%<fr> <Texte libre>
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf
index dc76f9053e..bf7f73c7c4 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf
Binary files differ
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-en.dbj b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-en.dbj
index 38907626da..98372dceb7 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-en.dbj
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-en.dbj
@@ -6,7 +6,7 @@
\preamble
-Copyright (C) 2023 Statistical Society of Canada | Société
+Copyright (C) 2023-2024 Statistical Society of Canada | Société
canadienne de statistique
This file may be distributed and/or modified under the conditions
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-fr.dbj b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-fr.dbj
index 3ae793cf2b..13be31421c 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-fr.dbj
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-bst-fr.dbj
@@ -6,7 +6,7 @@
\preamble
-Copyright (C) 2023 Statistical Society of Canada | Société
+Copyright (C) 2023-2024 Statistical Society of Canada | Société
canadienne de statistique
This file may be distributed and/or modified under the conditions
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-class.dbj b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-class.dbj
index c987b1e6a7..3ef16366bd 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-class.dbj
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-class.dbj
@@ -6,7 +6,7 @@
This is a generated file.
-Copyright (C) 2023 Statistical Society of Canada | Société
+Copyright (C) 2023-2024 Statistical Society of Canada | Société
canadienne de statistique
This file may be distributed and/or modified under the conditions
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs
index e786d500bd..18f0ccbd78 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs
@@ -4,7 +4,7 @@
% for The Canadian Journal of Statistics | La revue canadienne de
% statistique
%
-% Copyright (C) 2023 Statistical Society of Canada | Société
+% Copyright (C) 2023-2024 Statistical Society of Canada | Société
% canadienne de statistique
%
% This file may be distributed and/or modified under the conditions
@@ -31,7 +31,7 @@
%-------------------------------------------------------------------
% Begin module:
%\fi
- % \ProvidesFile{cjs-rcs-english.mbs}[2023/11/29 v1.0 (VG, PWD)]
+ % \ProvidesFile{cjs-rcs-english.mbs}[2024/07/30 v1.1a (VG, PWD)]
%\iffalse
%<*a&!a>
% The following ensures that the driver part is not seen by makebst
@@ -87,7 +87,7 @@
%% Configuration of the glossary
\addto\extrasenglish{%
- \def\glossaryname{Version history}}
+ \def\glossaryname{History of changes}}
\GlossaryPrologue{\section*{\glossaryname}%
\addcontentsline{toc}{section}{\glossaryname}}
\setlength{\GlossaryMin}{5cm}
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs
index eb60ab8a20..4d3a76021c 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs
@@ -4,7 +4,7 @@
% The Canadian Journal of Statistics | La revue canadienne de
% statistique
%
-% Copyright (C) 2023 Statistical Society of Canada | Société
+% Copyright (C) 2023-2024 Statistical Society of Canada | Société
% canadienne de statistique
%
% This file may be distributed and/or modified under the conditions
@@ -31,7 +31,7 @@
%-------------------------------------------------------------------
% Begin module:
%\fi
- % \ProvidesFile{cjs-rcs-french.mbs}[2023/11/29 v1.0 (VG, PWD)]
+ % \ProvidesFile{cjs-rcs-french.mbs}[2024/07/30 v1.1a (VG, PWD)]
%\iffalse
%<*a&!a>
% The following ensures that the driver part is not seen by makebst
@@ -87,7 +87,7 @@
%% Configuration of the glossary
\addto\extrasenglish{%
- \def\glossaryname{Version history}}
+ \def\glossaryname{History of changes}}
\GlossaryPrologue{\section*{\glossaryname}%
\addcontentsline{toc}{section}{\glossaryname}}
\setlength{\GlossaryMin}{5cm}
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs
index 10c84b1ff6..cf79365ffd 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs
@@ -3,7 +3,7 @@
% Master bibliography style for The Canadian Journal of Statistics |
% La revue canadienne de statistique
%
-% Copyright (C) 2023 Statistical Society of Canada | Société
+% Copyright (C) 2023-2024 Statistical Society of Canada | Société
% canadienne de statistique
%
% This file may be distributed and/or modified under the conditions
@@ -32,7 +32,7 @@
% -------------------------------------------------------------------
% Name and version information of the main mbs file:
%\fi
- % \ProvidesFile{cjs-rcs-merlin.mbs}[2023/11/29 v1.0 (VG, PWD, AO, DPC)]
+ % \ProvidesFile{cjs-rcs-merlin.mbs}[2024/07/30 v1.1a (VG, PWD, AO, DPC)]
%\iffalse
%</!tail>
%<*a&!a>
@@ -92,7 +92,7 @@
%% Configuration of the glossary
\addto\extrasenglish{%
- \def\glossaryname{Version history}}
+ \def\glossaryname{History of changes}}
\GlossaryPrologue{\section*{\glossaryname}%
\addcontentsline{toc}{section}{\glossaryname}}
\setlength{\GlossaryMin}{5cm}
diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf
index af76f1c69e..79fddb7248 100644
--- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf
+++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf
Binary files differ
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
index d0d64760c9..fe5aeba297 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
index 3e4ce0aa72..321723f025 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
@@ -34,8 +34,8 @@
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.7}
-\def\TPdate{03/06/2024}
+\def\TPversion{0.1.8}
+\def\TPdate{13/07/2024}
\usepackage{tcolorbox}
\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
@@ -111,6 +111,7 @@
\section{History}
+\verb|v0.1.8|~:~~~~Score banner
\verb|v0.1.7|~:~~~~Small patch for \textsf{Vignette} macro (see \texttt{[fr]} documentation)
\verb|v0.1.6|~:~~~~Small patchs for \textsf{displayskip} + \textsf{pas-tableur} (see \texttt{[fr]} documentation)
@@ -430,6 +431,60 @@ The last argument, mandatory and between \MontreCode{(...)} give the list of cat
\pagebreak
+\pagebreak
+
+\section{Score banner}
+
+\subsection{Global use}
+
+The idea is to insert a score banner, with customizations.
+
+\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+ScoreBanner[keys]{number}
+\end{codehigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%default output
+\ScoreBanner{}
+\end{demohigh}
+
+\subsection{The macro}
+
+Available \MontreCode{keys} are :
+
+\begin{itemize}
+ \item \MontreCode{Height} : height of the banner (without the legend) ; \MontreCode{1} by default
+ \item \MontreCode{Ratio} : ratio of boxes ; \MontreCode{0.6} by default
+ \item \MontreCode{Symbols} : labels ; \MontreCode{A,B,C,D,E} by default
+ \item \MontreCode{Legend} : legend (uppercase) ; \MontreCode{score} by default ;
+ \item \MontreCode{Font} : global font ; \MontreCode{\textbackslash bfseries\textbackslash sffamily} by default
+ \item \MontreCode{ShowLegend} : boolean for the legend ; \MontreCode{false} by default ;
+ \item \MontreCode{Colors} : colors for boxes ;
+
+ \hfill\MontreCode{colorNS1,colorNS2,colorNS3,colorNS4,colorNS5} by default ;
+ \item \MontreCode{ScaleSymbols} : scale H/V of labels ; \MontreCode{1.25,1.65} by default ;
+ \item \MontreCode{Colbg} : background color for select box ; \MontreCode{white} by default.
+\end{itemize}
+
+\smallskip
+
+If the list of colors doesn't fill all the boxes, \MontreCode{lightgray} color is used.
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\ScoreBanner[Legend=Geometry,Height=2]{4}
+\end{demohigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25,style/demo=yellow!25]
+%bg of lower part is yellow!25
+\def\lstcouleurs{colorNS1,colorNS2,colorNS3,colorNS4,colorNS5,purple}
+\ScoreBanner%
+ [ScaleSymbols={1.33,2},Height=3.25,ShowLegend=false,Ratio=0.75,
+ Symbols={1,2,3,4,5,6},Colors=\lstcouleurs,
+ Colbg=yellow!25]{1}
+\end{demohigh}
+
+\pagebreak
+
\section{SMS conversation}
\subsection{Global use}
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
index b128076999..47dce47918 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
index 2f74296c5d..7a7293ec6e 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
@@ -39,8 +39,8 @@
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.7}
-\def\TPdate{03 juin 2024}
+\def\TPversion{0.1.8}
+\def\TPdate{13 juillet 2024}
\usepackage{tcolorbox}
\tcbuselibrary{listingsutf8}
\newtcblisting{DemoCode}[1]{%
@@ -66,10 +66,10 @@
keywordstyle={\color{violet}},%
classoffset=2,%
alsoletter={-},%
- morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv,BoiteSimple,\SujetTitreExo,\CircledNumber,\AffVignette,\BoiteArrondie,\ChangerDisplaySkip,\celcouleur,\celfusion,\lignetxt,\colonnetxt,\celnumbreak,\celtxt},%
+ morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv,BoiteSimple,\SujetTitreExo,\CircledNumber,\AffVignette,\BoiteArrondie,\ChangerDisplaySkip,\celcouleur,\celfusion,\lignetxt,\colonnetxt,\celnumbreak,\celtxt,\BandeauScore},%
keywordstyle={\color{green!50!black}},%
classoffset=3,%
- morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre,AlignH,bg,txt,bthick,bcol,raise,Type,EspH,Fond,Texte,Style,Dense,Avant,AvantS,Apres,ApresS,Global,align,width},%
+ morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre,AlignH,bg,txt,bthick,bcol,raise,Type,EspH,Fond,Texte,Style,Dense,Avant,AvantS,Apres,ApresS,Global,align,width,Legende,CouleurFond,Hauteur,Ratio,AffLegende,Couleurs,EchelleSymboles,Symboles},%
keywordstyle={\color{orange}}
},%
#1
@@ -799,6 +799,64 @@ L'argument, obligatoire et entre \MontreCode{\{...\}} est la liste des catégori
\pagebreak
+\section{Bandeau de score}
+
+\subsection{Principe et fonctionnement}
+
+L'idée est de proposer une commande pour insérer un bandeau de score, type \textit{nutriscore}.
+
+\smallskip
+
+La majorité des éléments sont personnalisables.
+
+\begin{DemoCode}{listing only}
+\BandeauScore[clés]{numéro}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%sortie par défaut
+\BandeauScore{}
+\end{DemoCode}
+
+\subsection{La commande}
+
+Les \MontreCode{clés} disponibles, à donner entre \MontreCode{[...]}, sont :
+
+\begin{itemize}
+ \item \MontreCode{Hauteur} : hauteur du bandeau (sans la légende) ; \MontreCode{1} par défaut
+ \item \MontreCode{Ratio} : rapport V/H des cases ; \MontreCode{0.6} par défaut
+ \item \MontreCode{Symboles} : contenu des cases ; \MontreCode{A,B,C,D,E} par défaut
+ \item \MontreCode{Legende} : texte de la légende (qui sera en majuscule) ; \MontreCode{score} par défaut ;
+ \item \MontreCode{Police} : Police globale ; \MontreCode{\textbackslash bfseries\textbackslash sffamily} par défaut
+ \item \MontreCode{AffLegende} : booléen pour afficher la légende ; \MontreCode{false} par défaut ;
+ \item \MontreCode{Couleurs} : couleurs des cases ;
+
+ \hfill\MontreCode{couleurNS1,couleurNS2,couleurNS3,couleurNS4,couleurNS5} par défaut ;
+ \item \MontreCode{EchelleSymboles} : échelle(s) H/V des symboles ; \MontreCode{1.25,1.65} par défaut ;
+ \item \MontreCode{CouleurFond} : couleur du fond (pour la case choisie) ; \MontreCode{white} par défaut.
+\end{itemize}
+
+L'argument obligatoire correspond quant à lui au numéro de la case à mettre en valeur (\MontreCode{vide} par défaut).
+
+\smallskip
+
+Si la liste des couleurs ne permet pas de remplir toutes les cases, la couleur \MontreCode{lightgray} est utilisée.
+
+\begin{DemoCode}{}
+\BandeauScore[Legende=Géométrie,Hauteur=2]{4}
+\end{DemoCode}
+
+\begin{DemoCode}{colbacklower=yellow!25}
+%le fond de la boîte a été défini sur yellow!25
+\def\lstcouleurs{couleurNS1,couleurNS2,couleurNS3,couleurNS4,couleurNS5,purple}
+\BandeauScore%
+ [EchelleSymboles={1.33,2},Hauteur=2,AffLegende=false,
+ Symboles={1,2,3,4,5,6},Couleurs=\lstcouleurs,
+ CouleurFond=yellow!25]{1}
+\end{DemoCode}
+
+\pagebreak
+
\section{Fenêtre type conversation instantanée}
\subsection{Principe et fonctionnement}
diff --git a/macros/latex/contrib/customenvs/tex/customenvs.sty b/macros/latex/contrib/customenvs/tex/customenvs.sty
index e63ea57f84..af81d0b88d 100644
--- a/macros/latex/contrib/customenvs/tex/customenvs.sty
+++ b/macros/latex/contrib/customenvs/tex/customenvs.sty
@@ -3,9 +3,10 @@
% source pencil...: CC-BY-SA 4.0 https://tex.stackexchange.com/questions/504092/replicating-a-fancy-bordered-text-style-in-latex/504145#504145
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{customenvs}[2024/06/03 0.1.7 Custom classic environments]
+\ProvidesPackage{customenvs}[2024/07/13 0.1.8 Custom classic environments]
%====HISTORIQUE
+% v 0.1.8 Nutriscore
% v 0.1.7 Style perso pour les vignettes
% v 0.1.6 DisplaySkip patch + Patchs pas-tableur
% v 0.1.5 Boxes for exam title + circled numbers + Vignettes + Small simple boxes creation
@@ -1095,6 +1096,93 @@
title={\@ifpackageloaded{babel}{\NoAutoSpacing#2}{#2}\IfBooleanTF{#1}{}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}},left=1mm,right=1mm,boxsep=0mm]{#3}%
}
+%====Nutriscore
+\definecolor{couleurNS1}{RGB}{45,126,67}
+\definecolor{couleurNS2}{RGB}{151,186,56}
+\definecolor{couleurNS3}{RGB}{240,202,13}
+\definecolor{couleurNS4}{RGB}{213,123,26}
+\definecolor{couleurNS5}{RGB}{197,52,25}
+\tikzset{noeudNS/.style={pos=0.5,xscale=\echellexNS*\hauteurNS,yscale=\echelleyNS*\hauteurNS}}
+
+\defKV[NUTRISCORE]{%
+ Hauteur=\pgfmathsetmacro{\hauteurNS}{#1},%
+ Ratio=\pgfmathsetmacro{\ratiolargeurbandeNS}{#1},%
+ Symboles=\def\lettresNS{#1},%
+ Legende=\def\legendeNS{#1},%
+ Police=\def\fonteNS{#1},%
+ Couleurs=\def\couleursNS{#1},%
+ EchelleSymboles=\def\echellesymbNS{#1},%
+ CouleurFond=\def\coulbgNS{#1}
+}
+\setKVdefault[NUTRISCORE]{%
+ Hauteur=1,%
+ Ratio={0.6},%
+ Symboles={A,B,C,D,E},%
+ Legende={score},%
+ Police=\sffamily\bfseries,%
+ AffLegende=true,%
+ Couleurs={couleurNS1,couleurNS2,couleurNS3,couleurNS4,couleurNS5},%
+ EchelleSymboles={1.25,1.65},%
+ CouleurFond=white
+}
+
+\NewDocumentCommand\BandeauScore{ O{} D<>{} m }{%
+ \restoreKV[NUTRISCORE]%
+ \setKV[NUTRISCORE]{#1}%
+ \IfEq{#3}{}%
+ {%
+ \xdef\numcasNS{0}%
+ }%
+ {%
+ \xdef\numcasNS{#3}%
+ }%
+ \readlist\letterListNS{\lettresNS}%
+ \xdef\nbcasesNS{\letterListNSlen}%
+ \readlist\colorListNS{\couleursNS}%
+ \xdef\nbcouleursNS{\colorListNSlen}%
+ \pgfmathsetmacro{\largeurcaseNS}{\hauteurNS*\ratiolargeurbandeNS}%
+ \pgfmathsetmacro{\largeurbandeNS}{\largeurcaseNS*\nbcasesNS}%
+ \pgfmathsetmacro{\margeNS}{0.225*\largeurcaseNS/2.4}%
+ \IfSubStr{\echellesymbNS}{,}%
+ {%
+ \StrCut{\echellesymbNS}{,}{\echellexNS}{\echelleyNS}%
+ }%
+ {%
+ \xdef\echellexNS{\echellesymbNS}\xdef\echelleyNS{\echellesymbNS}%
+ }%
+ \begin{tikzpicture}[font=\fonteNS,#2]
+ %---test
+ \filldraw[white,rounded corners=\fpeval{5*\largeurcaseNS*\ratiolargeurbandeNS}mm,line width=\fpeval{1.5*\largeurcaseNS*\ratiolargeurbandeNS}mm,opacity=0] ({-\margeNS},{-\margeNS}) rectangle++ (\nbcasesNS*\largeurcaseNS+2*\margeNS,\hauteurNS+2*\margeNS) ;
+ %---testfin
+ \begin{scope}
+ \clip[rounded corners=\fpeval{5*\largeurcaseNS*\ratiolargeurbandeNS}mm] (0,0) rectangle (\largeurbandeNS,\hauteurNS);
+ \foreach \tmpiii in {1,...,\letterListNSlen}{%
+ \ifnum\tmpiii=\numcasNS
+ \else
+ \ifnum\tmpiii>\nbcouleursNS
+ \fill[draw=none,lightgray] ({(\tmpiii-1)*\largeurcaseNS},0) rectangle ++(\largeurcaseNS,\hauteurNS) node[noeudNS,white,opacity=0.66]{\letterListNS[\tmpiii]};
+ \else
+ \fill[draw=none,{\colorListNS[\tmpiii]}] ({(\tmpiii-1)*\largeurcaseNS},0) rectangle ++(\largeurcaseNS,\hauteurNS) node[noeudNS,white,opacity=0.66]{\letterListNS[\tmpiii]};
+ \fi
+ \fi
+ }%
+ \end{scope}
+ \xintifboolexpr{\numcasNS >=1 'and' \numcasNS <= \nbcasesNS }%
+ {%
+ \begin{scope}
+ %\clip (-\margeNS,-\margeNS) rectangle++ (\largeurbandeNS+2*\margeNS,\hauteurNS+2*\margeNS);
+ \draw[draw=\coulbgNS,rounded corners=\fpeval{7.25*\largeurcaseNS*\ratiolargeurbandeNS}mm,line width=\fpeval{1.5*\largeurcaseNS*\ratiolargeurbandeNS}mm,fill={\colorListNS[#3]}] ({(\numcasNS-1)*\largeurcaseNS-\margeNS},{-\margeNS}) rectangle++ (\largeurcaseNS+2*\margeNS,\hauteurNS+2*\margeNS) node[noeudNS,white]{\letterListNS[\numcasNS]};
+ \end{scope}
+ }%
+ {%
+ }%
+ %légende
+ \ifboolKV[NUTRISCORE]{AffLegende}%
+ {%
+ \node[above right=1pt,gray,scale=\fpeval{0.5*\hauteurNS},inner sep=1pt] at ({0.125*\margeNS},1.02*\hauteurNS) {\vphantom{QÉ}\MakeUppercase{\legendeNS}};
+ }{}%
+ \end{tikzpicture}%
+}
%%----COMMANDES EN
@@ -1932,4 +2020,91 @@
\fi
+%====BannerScore
+\definecolor{colorNS1}{RGB}{45,126,67}
+\definecolor{colorNS2}{RGB}{151,186,56}
+\definecolor{colorNS3}{RGB}{240,202,13}
+\definecolor{colorNS4}{RGB}{213,123,26}
+\definecolor{colorNS5}{RGB}{197,52,25}
+\tikzset{nodeNS/.style={pos=0.5,xscale=\echellexNS*\hauteurNS,yscale=\echelleyNS*\hauteurNS}}
+
+\defKV[NUTRISCOREEN]{%
+ Height=\pgfmathsetmacro{\hauteurNS}{#1},%
+ Ratio=\pgfmathsetmacro{\ratiolargeurbandeNS}{#1},%
+ Symbols=\def\lettresNS{#1},%
+ Legend=\def\legendeNS{#1},%
+ Font=\def\fonteNS{#1},%
+ Colors=\def\couleursNS{#1},%
+ ScaleSymbols=\def\echellesymbNS{#1},%
+ Colbg=\def\coulbgNS{#1}
+}
+\setKVdefault[NUTRISCOREEN]{%
+ Height=1,%
+ Ratio={0.6},%
+ Symbols={A,B,C,D,E},%
+ Legend={score},%
+ Font=\sffamily\bfseries,%
+ ShowLegend=true,%
+ Colors={colorNS1,colorNS2,colorNS3,colorNS4,colorNS5},%
+ ScaleSymbols={1.25,1.65},%
+ Colbg=white
+}
+
+\NewDocumentCommand\ScoreBanner{ O{} D<>{} m }{%
+ \restoreKV[NUTRISCOREEN]%
+ \setKV[NUTRISCOREEN]{#1}%
+ \IfEq{#3}{}%
+ {%
+ \xdef\numcasNS{0}%
+ }%
+ {%
+ \xdef\numcasNS{#3}%
+ }%
+ \readlist\letterListNS{\lettresNS}%
+ \xdef\nbcasesNS{\letterListNSlen}%
+ \readlist\colorListNS{\couleursNS}%
+ \xdef\nbcouleursNS{\colorListNSlen}%
+ \pgfmathsetmacro{\largeurcaseNS}{\hauteurNS*\ratiolargeurbandeNS}%
+ \pgfmathsetmacro{\largeurbandeNS}{\largeurcaseNS*\nbcasesNS}%
+ \pgfmathsetmacro{\margeNS}{0.225*\largeurcaseNS/2.4}%
+ \IfSubStr{\echellesymbNS}{,}%
+ {%
+ \StrCut{\echellesymbNS}{,}{\echellexNS}{\echelleyNS}%
+ }%
+ {%
+ \xdef\echellexNS{\echellesymbNS}\xdef\echelleyNS{\echellesymbNS}%
+ }%
+ \begin{tikzpicture}[font=\fonteNS,#2]
+ %---test
+ \filldraw[white,rounded corners=\fpeval{5*\largeurcaseNS*\ratiolargeurbandeNS}mm,line width=\fpeval{1.5*\largeurcaseNS*\ratiolargeurbandeNS}mm,opacity=0] ({-\margeNS},{-\margeNS}) rectangle++ (\nbcasesNS*\largeurcaseNS+2*\margeNS,\hauteurNS+2*\margeNS) ;
+ %---testfin
+ \begin{scope}
+ \clip[rounded corners=\fpeval{5*\largeurcaseNS*\ratiolargeurbandeNS}mm] (0,0) rectangle (\largeurbandeNS,\hauteurNS);
+ \foreach \iii in {1,...,\letterListNSlen}{%
+ \ifnum\iii=\numcasNS
+ \else
+ \ifnum\iii>\nbcouleursNS
+ \fill[draw=none,lightgray] ({(\iii-1)*\largeurcaseNS},0) rectangle ++(\largeurcaseNS,\hauteurNS) node[noeudNS,white,opacity=0.66]{\letterListNS[\iii]};
+ \else
+ \fill[draw=none,{\colorListNS[\iii]}] ({(\iii-1)*\largeurcaseNS},0) rectangle ++(\largeurcaseNS,\hauteurNS) node[noeudNS,white,opacity=0.66]{\letterListNS[\iii]};
+ \fi
+ \fi
+ }%
+ \end{scope}
+ \xintifboolexpr{\numcasNS >=1 'and' \numcasNS <= \nbcasesNS }%
+ {%
+ \begin{scope}
+ %\clip (-\margeNS,-\margeNS) rectangle++ (\largeurbandeNS+2*\margeNS,\hauteurNS+2*\margeNS);
+ \draw[draw=\coulbgNS,rounded corners=\fpeval{7.25*\largeurcaseNS*\ratiolargeurbandeNS}mm,line width=\fpeval{1.5*\largeurcaseNS*\ratiolargeurbandeNS}mm,fill={\colorListNS[#3]}] ({(\numcasNS-1)*\largeurcaseNS-\margeNS},{-\margeNS}) rectangle++ (\largeurcaseNS+2*\margeNS,\hauteurNS+2*\margeNS) node[noeudNS,white]{\letterListNS[#3]};
+ \end{scope}
+ }%
+ {}%
+ %légende
+ \ifboolKV[NUTRISCOREEN]{ShowLegend}%
+ {%
+ \node[above right=1pt,gray,scale=\fpeval{0.5*\hauteurNS},inner sep=1pt] at ({0.125*\margeNS},1.02*\hauteurNS) {\MakeUppercase{\legendeNS}};
+ }{}%
+ \end{tikzpicture}%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/dashrulex/README.md b/macros/latex/contrib/dashrulex/README.md
index c0e441ac99..3e81605ffc 100644
--- a/macros/latex/contrib/dashrulex/README.md
+++ b/macros/latex/contrib/dashrulex/README.md
@@ -1,7 +1,15 @@
-# The dashrulex package
+# The `dashrulex` package
+Draw dashed rules (v1.01a)
+## Abstract
The `dashrulex` package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands `\hdashrule` and `\hanyrule`. It's written in LaTeX3 and can be used as an alternative to the `dashrule` package.
## License
+This work may be distributed and/or modified under the conditions of the CC-BY 4.0 License. The latest version of this license is in https://creativecommons.org/licenses/by/4.0/legalcode
-This work may be distributed and/or modified under the conditions of the CC-BY 4.0 License. The latest version of this license is in https://creativecommons.org/licenses/by/4.0/legalcode \ No newline at end of file
+## Website
+| [Gitee](https://gitee.com/texno3/dashrulex) | [Github](https://github.com/texno3/dashrulex) | [CTAN](https://ctan.org/pkg/dashrulex) |
+
+## Maintainer
+Qu Yi<br/>
+Email: toquyi@163.com \ No newline at end of file
diff --git a/macros/latex/contrib/dashrulex/dashrulex.pdf b/macros/latex/contrib/dashrulex/dashrulex.pdf
index 376eb91c90..f97a5ef302 100644
--- a/macros/latex/contrib/dashrulex/dashrulex.pdf
+++ b/macros/latex/contrib/dashrulex/dashrulex.pdf
Binary files differ
diff --git a/macros/latex/contrib/dashrulex/dashrulex.sty b/macros/latex/contrib/dashrulex/dashrulex.sty
index 86d43d1478..090cfe2931 100644
--- a/macros/latex/contrib/dashrulex/dashrulex.sty
+++ b/macros/latex/contrib/dashrulex/dashrulex.sty
@@ -1,91 +1,91 @@
-%
-% ***************** THE DASHRULEX PACKAGE *****************
-%
-% Copyright (C) 2024 by Qu Yi <toquyi@163.com>
-%
-% This work may be distributed and/or modified under the
-% conditions of the CC-BY 4.0 License.
-% The latest version of this license is in
-% https://creativecommons.org/licenses/by/4.0/legalcode
-\NeedsTeXFormat{LaTeX2e}[2012/02/12]
-\RequirePackage{xparse}
-\ProvidesExplPackage{dashrulex}{2024/03/25}{1.00c}
- {Draw dashed rules}
-\DeclareDocumentCommand{\hdashrule}{O{0pt}O{x}mmm}
- {
- \tl_if_blank:nTF {#5}
- { \rule[#1]{#3}{#4} }
- {
- \mbox{}
- \use:c { #2leaders }
- \hbox:n
- {
- \clist_map_inline:nn {#5}
- { \drx@parse@dash{#1}{#4}{##1} }
- }
- \skip_horizontal:n {#3}
- \mbox{}
- }
- }
-\NewDocumentCommand{\drx@parse@dash}
- {mm>{\SplitArgument{1}{|}}m}
- {\drx@parse@dash@inner{#1}{#2}#3}
-\cs_set_protected:Npn \drx@parse@dash@inner #1#2#3#4
- {
- \IfNoValueTF{#4}
- {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#3}}
- {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#4}}
- }
-\NewDocumentCommand{\hanyrule}{O{x}mm}
- {
- \mbox{}
- \use:c { #1leaders }
- \hbox:n { \clist_map_inline:nn {#3} {##1} }
- \skip_horizontal:n {#2}
- \mbox{}
- }
-
-\int_new:N \l__drx_vrule_counter_int
-\int_set:Nn \l__drx_vrule_counter_int { 1 }
-\dim_new:N \l__drx_vrule_height_dim
-\tl_new:N \l__drx_tmpa_tl
-\cs_new_protected:Npn \drx@step@counter@height #1
- {
- \int_incr:N \l__drx_vrule_counter_int
- \dim_add:Nn \l__drx_vrule_height_dim {#1}
- }
-\NewDocumentCommand{\vrulemod}{O{0pt}oomm}
- {
- \group_begin:
- \IfValueT{#2}
- {
- \tl_set:Nn \l__drx_tmpa_tl { [#2] }
- \IfValueT{#3}{\tl_put_right:Nn \l__drx_tmpa_tl { [#3] }}
- }
- \exp_last_unbraced:Nnf
- \raisebox{#1}{\l__drx_tmpa_tl}
- {
- \clist_map_inline:nn {#5}
- {
- \int_compare:nNnTF { \l__drx_vrule_counter_int } > { 1 }
- {
- \int_if_even:nTF { \l__drx_vrule_counter_int }
- { \drx@step@counter@height{##1} }
- {
- \kern -#4
- \exp_args:NV
- \raisebox\l__drx_vrule_height_dim{\rule{#4}{##1}}
- \drx@step@counter@height{##1}
- }
- }
- {
- \rule{#4}{##1}
- \drx@step@counter@height{##1}
- }
- }
- }
- \group_end:
- }
-\endinput
-%
+%
+% ***************** THE DASHRULEX PACKAGE *****************
+%
+% Copyright (C) 2024 by Qu Yi <toquyi@163.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the CC-BY 4.0 License.
+% The latest version of this license is in
+% https://creativecommons.org/licenses/by/4.0/legalcode
+\NeedsTeXFormat{LaTeX2e}[2012/02/12]
+\RequirePackage{xparse}
+\ProvidesExplPackage{dashrulex}{2024/07/18}{1.01a}
+ {Draw dashed rules}
+\DeclareDocumentCommand{\hdashrule}{O{0pt}O{x}mmm}
+ {
+ \tl_if_blank:nTF {#5}
+ { \rule[#1]{#3}{#4} }
+ {
+ \mbox{}
+ \use:c { #2leaders }
+ \hbox:n
+ {
+ \clist_map_inline:nn {#5}
+ { \drx@parse@dash{#1}{#4}{##1} }
+ }
+ \skip_horizontal:n {#3}
+ \mbox{}
+ }
+ }
+\NewDocumentCommand{\drx@parse@dash}
+ {mm>{\SplitArgument{1}{|}}m}
+ {\drx@parse@dash@inner{#1}{#2}#3}
+\cs_set_protected:Npn \drx@parse@dash@inner #1#2#3#4
+ {
+ \IfNoValueTF{#4}
+ {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#3}}
+ {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#4}}
+ }
+\NewDocumentCommand{\hanyrule}{O{x}mm}
+ {
+ \mbox{}
+ \use:c { #1leaders }
+ \hbox:n { \clist_map_inline:nn {#3} {##1} }
+ \skip_horizontal:n {#2}
+ \mbox{}
+ }
+
+\int_new:N \l__drx_vrule_counter_int
+\int_set:Nn \l__drx_vrule_counter_int { 1 }
+\dim_new:N \l__drx_vrule_height_dim
+\tl_new:N \l__drx_tmpa_tl
+\cs_new_protected:Npn \drx@step@counter@height #1
+ {
+ \int_incr:N \l__drx_vrule_counter_int
+ \dim_add:Nn \l__drx_vrule_height_dim {#1}
+ }
+\NewDocumentCommand{\vrulemod}{O{0pt}oomm}
+ {
+ \group_begin:
+ \IfValueT{#2}
+ {
+ \tl_set:Nn \l__drx_tmpa_tl { [#2] }
+ \IfValueT{#3}{\tl_put_right:Nn \l__drx_tmpa_tl { [#3] }}
+ }
+ \exp_last_unbraced:Nnf
+ \raisebox{#1}{\l__drx_tmpa_tl}
+ {
+ \clist_map_inline:nn {#5}
+ {
+ \int_compare:nNnTF { \l__drx_vrule_counter_int } > { 1 }
+ {
+ \int_if_even:nTF { \l__drx_vrule_counter_int }
+ { \drx@step@counter@height{##1} }
+ {
+ \tex_kern:D -#4
+ \exp_args:NV
+ \raisebox\l__drx_vrule_height_dim{\rule{#4}{##1}}
+ \drx@step@counter@height{##1}
+ }
+ }
+ {
+ \rule{#4}{##1}
+ \drx@step@counter@height{##1}
+ }
+ }
+ }
+ \group_end:
+ }
+\endinput
+%
% End of file `dashrulex.sty'. \ No newline at end of file
diff --git a/macros/latex/contrib/dashrulex/dashrulex.tex b/macros/latex/contrib/dashrulex/dashrulex.tex
index c7db9dd89c..5469fc0c37 100644
--- a/macros/latex/contrib/dashrulex/dashrulex.tex
+++ b/macros/latex/contrib/dashrulex/dashrulex.tex
@@ -1,95 +1,99 @@
-\documentclass[load-preamble+]{cnltx-doc}
-
-\usepackage{setspace,hologo,dashrulex,tikz}
-\usepackage[noto]{newtxmath}
-\setcnltx
- {
- package = dashrulex,
- title = the dashrulex package,
- version = v1.00c,
- date = 2024/03/25,
- authors = Qu Yi,
- info = Draw dashed rules,
- email = toquyi@163.com,
- abstract =
- {
- The \pkg*{dashrulex} package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands \cs{hdashrule} and \cs{hanyrule}. It's written in \hologo{LaTeX3} and can be used as an alternative to the \pkg*{dashrule} package.
- },
- color-scheme = blue,
- title-format = \huge\bfseries\scshape,
- listings-options = {numbers = none,gobble = 2,lineskip = 1pt},
- pre-output = {\parindent = 0em\setstretch{1.3}},
- before-skip = \smallskipamount,
- after-skip = \smallskipamount
- }
-\makeatletter
-\newcommand{\splitmeta}[3][\code{,}]{\meta{#2}#1\meta{#3}}
-\newcommand{\newsplitarg}[4][\splitmeta]
- {
- \newcommand{#2}[2]
- {\code{\textcolor{argument}{#3\textnormal{#1{##1}{##2}}#4}}}
- }
-\newcommand{\kvsplit}[3]
- {
- \item\code{\option{#1}\cnltx@isvalue\splitmarg{#2}{#3}}
- \cnltx@checkdefault{\hfill\newline}
- }
-\newsplitarg{\splitoarg}{[}{]}
-\newsplitarg{\splitmarg}{\{}{\}}
-\newsplitarg{\splitdarg}{(}{)}
-\newnote{\newtag}[1][New]{\textcolor{red}{\ding{73}\ #1}}
-\renewcommand{\emph}[1]{\textcolor{red}{#1}}
-\renewcommand{\cnltx@write@lastname}{}
-\makeatother
-
-\begin{document}
-\section{Preface}
-Sometimes it is necessary to draw dashed rules when writing documents, such as guides in the table of contents and indexes, horizontal lines in headers and footers, and even adding horizontal lines after headings. Macro packages such as \pkg*{dashrule} and \pkg*{nccrules} are available to accomplish this. Considering that \pkg*{dashrule} has not been updated for a long time, \pkg*{dashrulex} rewrites it using \hologo{LaTeX3} syntax and enhances it a bit.
-
-\section{User commands}
-\begin{commands}
- \command{hdashrule}[\oarg{raise}\oarg{leader}\marg{width}\marg{thickness list}\marg{dash rules}]
- The command to draw horizontal dashed rules, based on the \cs{rule} command, and the same as the \cs{rule} command when the \meta{dash rules} are empty. \meta{raise} is the vertical offset of the rule. \meta{leader} is the alignment of the dashed line fill, which can be empty, \code{c}, or \code{x} (the default), corresponding to the \cs{leaders}, \cs{cleaders}, and \cs{xleaders} commands, respectively. \meta{width} is the length of the dotted line, which can be set to \cs{fill} when used to fill the remaining center of the current text line. \meta{thickness list} is a rule for the height of vertically oriented lines, separated by \textcolor{red}{commas} and written as \splitmeta{height 1}{height a}\code{,...}, where \meta{height 1} denotes the height of a solid line and \meta{height a} denotes the height of a blank space.\meta{dash rules} is expressed as \splitmeta[\code{|}]{length 1}{length a}\code{,}\splitmeta[\code{|}]{length 2}{length b}\code{,...}, where \meta{length 1} represents the length of the solid line and \meta{length a} represents the length of the blank space, such as \code{5pt|2pt,3pt}, if the blank space is empty, then it is equal to the solid line length.
- \begin{example}
- 1X\rule{2cm}{1pt}x \\
- 2X\hdashrule{2cm}{1pt}{}x \\
- 3X\hdashrule{2cm}{1pt}{1pt}x \\
- 4X\hdashrule{4cm}{1pt}{1pt}x \\
- 5X\hdashrule[0.5ex]{4cm}{1pt}{1pt}x \\
- 6X\hdashrule[0.5ex]{4cm}{1pt}{3mm}x \\
- 7X\hdashrule[0.5ex]{4cm}{1mm}{3mm}x \\
- 8X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt}x \\
- 9X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt,1mm|2pt}x \\
- 10X\hdashrule[0.5ex]{4cm}{2pt,1pt,1pt}{3mm|3pt,1mm|2pt}x
- \end{example}
- \command{vrulemod}[\oarg{raise}\oarg{height}\oarg{depth}\marg{width}\marg{thickness list}]
- The vertical component used to fill the dashed line. \meta{thickness list} is consistent with the \cs{hdashrule} command, \meta{width} represents the length of the component, and the three optional parameters are consistent with those of the \cs{raisebox} command.
- \command{hanyrule}[\oarg{leader}\marg{width}\marg{symbol list}]
- This command sets the length of the dotted rule and fills it with arbitrary symbols. \meta{symbol list} can be more than one symbol and they are separated by \textcolor{red}{commas}. Symbols are best packed in boxes of a certain length, as spacing between symbols is not provided.
- \begin{example}
- \newcommand{\dblvmod}
- {%
- \tikz[color=blue]
- {
- \draw[line width=0.8mm](0mm,1.1mm)--(3mm,1.1mm);
- \draw[line width=0.3mm](0mm,0mm)--(3mm,0mm);
- }%
- }
- 1X\hanyrule[]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\
- 2X\hanyrule[c]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\
- 3X\hanyrule[x]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\
- 4X\hanyrule[c]{5cm}{\makebox[8pt]{$\cdot$}}x \\
- 5X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$}}x \\
- 6X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$},\makebox[8pt]{$\circ$}}x \\
- 7X\hanyrule[x]{5cm}{\makebox[5mm]{\vrulemod{3mm}{2pt,1pt,1pt}}}x \\
- 8X\hanyrule[x]{5cm}{\makebox[5mm]{\dblvmod}}x
- \end{example}
-\end{commands}
-
-\section{Known issues}
-Currently only horizontal dashed line drawing is supported, with future plans to support vertical dashed lines, and even box dashed borders and so on.
-
-\appendix
-\nocite{*}
-
+\documentclass[load-preamble+]{cnltx-doc}
+
+\usepackage{setspace,hologo,enumitem,dashrulex,tikz}
+\usepackage[noto]{newtxmath}
+\setcnltx
+ {
+ package = dashrulex,
+ title = dashrulex,
+ version = v1.01a,
+ date = 2024/07/18,
+ authors = Qu Yi,
+ info = Draw dashed rules,
+ email = toquyi@163.com,
+ url = https://github.com/texno3/dashrulex,
+ abstract =
+ {
+ The \pkg*{dashrulex} package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands \cs{hdashrule} and \cs{hanyrule}. It's written in \hologo{LaTeX3} and can be used as an alternative to the \pkg*{dashrule} package.
+ },
+ color-scheme = blue,
+ listings-options = {numbers = none,gobble = 2,lineskip = 1pt},
+ pre-output = {\parindent = 0em\setstretch{1.3}},
+ before-skip = \smallskipamount,
+ after-skip = \smallskipamount
+ }
+\makeatletter
+\newcommand{\splitmeta}[3][\code{,}]{\meta{#2}#1\meta{#3}}
+\newcommand{\newsplitarg}[4][\splitmeta]
+ {
+ \newcommand{#2}[2]
+ {\code{\textcolor{argument}{#3\textnormal{#1{##1}{##2}}#4}}}
+ }
+\newcommand{\kvsplit}[3]
+ {
+ \item\code{\option{#1}\cnltx@isvalue\splitmarg{#2}{#3}}
+ \cnltx@checkdefault{\hfill\newline}
+ }
+\newsplitarg{\splitoarg}{[}{]}
+\newsplitarg{\splitmarg}{\{}{\}}
+\newsplitarg{\splitdarg}{(}{)}
+\newnote{\newtag}[1]{\textcolor{red}{#1}}
+\renewcommand{\emph}[1]{\textcolor{red}{#1}}
+\renewcommand{\cnltx@write@lastname}{}
+\setlist{nosep,topsep = \smallskipamount}
+\setlist[description,1]{leftmargin = \parindent}
+\setlist[itemize,1]{leftmargin = *}
+\makeatother
+
+\begin{document}
+\section{Preface}
+Sometimes it is necessary to draw dashed rules when writing documents, such as guides in the table of contents and indexes, horizontal lines in headers and footers, and even adding horizontal lines after headings. Macro packages such as \pkg*{dashrule} and \pkg*{nccrules} are available to accomplish this. Considering that \pkg*{dashrule} has not been updated for a long time, \pkg*{dashrulex} rewrites it using \hologo{LaTeX3} syntax and enhances it a bit.
+
+\section{User commands}
+\begin{commands}
+ \command{hdashrule}[\oarg{raise}\oarg{leader}\marg{width}\marg{thickness list}\marg{dash rules}]
+ The command to draw horizontal dashed rules, based on the \cs{rule} command, and the same as the \cs{rule} command when the \meta{dash rules} are empty. \meta{raise} is the vertical offset of the rule. \meta{leader} is the alignment of the dashed line fill, which can be empty, \code{c}, or \code{x} (the \textcolor{red}{default}), corresponding to the \cs{leaders}, \cs{cleaders}, and \cs{xleaders} commands, respectively. \meta{width} is the length of the dashed line, which can be set to \cs{fill} when used to fill the remaining part of the current text line. \meta{thickness list} is a rule for the height of \textcolor{red}{vertical} lines, separated by \textcolor{red}{commas} and written as \splitmeta{height 1}{height a}\code{,...}, where \meta{height 1} denotes the height of a solid line and \meta{height a} denotes the height of a blank space. \meta{dash rules} stands for \textcolor{red}{horizontal} dashed line rules, which expressed as \splitmeta[\code{|}]{length 1}{length a}\code{,}\splitmeta[\code{|}]{length 2}{length b}\code{,...}, where \meta{length 1} represents the length of the solid line and \meta{length a} represents the length of the blank space, such as \code{5pt|2pt,3pt}, if the blank space is empty, then it is equal to the solid line length.
+ \begin{example}
+ 1X\rule{2cm}{1pt}x \\
+ 2X\hdashrule{2cm}{1pt}{}x \\
+ 3X\hdashrule{2cm}{1pt}{1pt}x \\
+ 4X\hdashrule{4cm}{1pt}{1pt}x \\
+ 5X\hdashrule[0.5ex]{4cm}{1pt}{1pt}x \\
+ 6X\hdashrule[0.5ex]{4cm}{1pt}{3mm}x \\
+ 7X\hdashrule[0.5ex]{4cm}{1mm}{3mm}x \\
+ 8X\hdashrule[0.5ex]{4cm-3mm}{1mm}{3mm}\vrulemod[0.5ex]{3mm}{1mm}x \\
+ 9X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt}x \\
+ 10X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt,1mm|2pt}x \\
+ 11X\hdashrule[0.5ex]{4cm}{2pt,1pt,1pt}{3mm|3pt,1mm|2pt}x
+ \end{example}
+ \command{vrulemod}[\oarg{raise}\oarg{height}\oarg{depth}\marg{width}\marg{thickness list}]
+ The vertical model used to fill the dashed line. \meta{thickness list} is consistent with the \cs{hdashrule} command, \meta{width} represents the length of the component, and the three optional parameters are consistent with those of the \cs{raisebox} command.
+ \command{hanyrule}[\oarg{leader}\marg{width}\marg{symbol list}]
+ This command sets the length of the dotted rule and fills it with arbitrary symbols. \meta{symbol list} can be more than one symbol and they are separated by \textcolor{red}{commas}. Symbols are best packed in boxes of a certain length, as spacing between symbols is not provided.
+ \begin{example}
+ \newcommand{\dblblock}
+ {%
+ \tikz[color=teal]
+ {
+ \draw[line width=0.8mm](0mm,1.1mm)--(3mm,1.1mm);
+ \draw[line width=0.3mm](0mm,0mm)--(3mm,0mm);
+ }%
+ }
+ 1X\hanyrule[]{5cm}{\makebox[8pt]{$\cdot$}}x \\
+ 2X\hanyrule[c]{5cm}{\makebox[8pt]{$\cdot$}}x \\
+ 3X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$}}x \\
+ 4X\hanyrule[x]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\
+ 5X\hanyrule[x]{5cm}{\makebox[8pt][r]{$\cdot$}}x \\
+ 6X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$},\makebox[8pt]{$\circ$}}x \\
+ 7X\hanyrule[x]{5cm}{\makebox[5mm]{\vrulemod{3mm}{2pt,1pt,1pt}}}x \\
+ 8X\hanyrule[x]{5cm}{\makebox[5mm]{\dblblock}}x
+ \end{example}
+\end{commands}
+
+\section{Known issues}
+Currently only horizontal dashed line drawing is supported, with future plans to support vertical dashed lines, and even box dashed borders and so on.
+
+\appendix
+\nocite{*}
+
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/delimset/README.txt b/macros/latex/contrib/delimset/README.txt
index 729b73fbbf..9094d59624 100644
--- a/macros/latex/contrib/delimset/README.txt
+++ b/macros/latex/contrib/delimset/README.txt
@@ -1,5 +1,5 @@
-delimset v1.1
-Copyright 2016-2018 Niklas Beisert
+delimset v2.0
+Copyright 2016-2024 Niklas Beisert
delimset is a LaTeX2e package to typeset and declare sets of delimiters
in math mode whose size can be adjusted conveniently.
diff --git a/macros/latex/contrib/delimset/delimset.dtx b/macros/latex/contrib/delimset/delimset.dtx
index 9bd070b5ea..337f1a4271 100644
--- a/macros/latex/contrib/delimset/delimset.dtx
+++ b/macros/latex/contrib/delimset/delimset.dtx
@@ -1,6 +1,6 @@
% \iffalse
%
-% delimset.dtx Copyright (C) 2016-2018 Niklas Beisert
+% delimset.dtx Copyright (C) 2016-2024 Niklas Beisert
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -18,15 +18,15 @@
% and the derived files delimset.sty and dlmssamp.tex
%
%<package|sample>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
-%<package>\ProvidesPackage{delimset}[2018/12/30 v1.1 convenient size control for delimiter sets]
-%<sample>\ProvidesFile{dlmssamp.tex}[2018/12/30 v1.1 sample for delimset]
+%<package>\ProvidesPackage{delimset}[2024/07/17 v2.0 convenient size control for delimiter sets]
+%<sample>\ProvidesFile{dlmssamp.tex}[2024/07/17 v2.0 sample for delimset]
%<*driver>
-%\ProvidesFile{delimset.drv}[2018/12/30 v1.1 delimset Reference Manual file]
+%\ProvidesFile{delimset.drv}[2024/07/17 v2.0 delimset Reference Manual file]
\PassOptionsToClass{10pt,a4paper}{article}
\documentclass{ltxdoc}
\usepackage[margin=35mm]{geometry}
-\usepackage{hyperref}
+\usepackage[hyperindex=false]{hyperref}
\usepackage{hyperxmp}
\usepackage[usenames]{color}
\usepackage{amsmath,amsfonts}
@@ -36,7 +36,7 @@
\hypersetup{pdfpagemode=UseNone}
\hypersetup{pdfsource={}}
\hypersetup{pdflang={en-UK}}
-\hypersetup{pdfcopyright={Copyright 2016-2018 Niklas Beisert.
+\hypersetup{pdfcopyright={Copyright 2016-2024 Niklas Beisert.
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.}}
@@ -50,6 +50,8 @@
\newcommand{\secref}[1]{\hyperref[#1]{section \ref*{#1}}}
+\def\textvert{\texttt{\char"7C}}
+
\parskip1ex
\parindent0pt
\let\olditemize\itemize
@@ -67,7 +69,7 @@
{\texttt{nbeisert@itp.phys.ethz.ch}}}
\hypersetup{pdfauthor={Niklas Beisert}}
\hypersetup{pdfsubject={Manual for the LaTeX2e Package delimset}}
-\date{30 December 2018, \textsf{v1.1}}
+\date{17 July 2024, \textsf{v2.0}}
\maketitle
\begin{abstract}\noindent
@@ -99,9 +101,10 @@ For example:
\\
|(v,w)| &\to (v,w)
\\
-|\langle\psi\vert M\vert\psi\rangle| &\to \langle\psi\vert M\vert\psi\rangle
+|\langle\psi|\textvert|M|\textvert|\psi\rangle|
+&\to \langle\psi\vert M\vert\psi\rangle
\\
-|(x^2+px+q)\vert_{-p/2}| &\to (x^2+px+q)\vert_{-p/2}
+|(x^2+px+q)|\textvert|_{-p/2}| &\to (x^2+px+q)\vert_{-p/2}
\\&\ldots
\end{aligned}
\]
@@ -109,8 +112,9 @@ For example:
In order to adjust the size of delimiters, the modifiers
|\big|, |\Big|, |\bigg|, |\Bigg| are used.
More importantly the construct
-{|\left*| \ldots [|\middle*|] \ldots |\right*|}
+{|\left*| \ldots [|\middle*|] \ldots |\right*|}
adjusts the size of delimiters to the contents:
+%
\[
\Bigg[\bigg[\Big[\big[[*]\big]\Big]\bigg]\Bigg],
\qquad
@@ -150,16 +154,17 @@ the size |\big(...\big)|:
\]
The package \textsf{delimset} provides mechanisms to declare sets of delimiters
-whose size can be adjusted conveniently by simple optional parameters.
+whose size can be adjusted conveniently by adding simple flag parameters.
For example, it provides a general purpose bracket |\brk|
which can be used as follows:
+%
\[
\begin{aligned}
|\brk{A\hat{X}+B}|&\to(A\hat{X}+B)
\\
|\brk*{A\hat{X}+B}|&\to\mathopen{}\mathclose{\left(A\hat{X}+B\right)}
\\
-|\brk2{A\hat{X}+B}|&\to\Bigl(A\hat{X}+B\Bigr)
+|\brk^2{A\hat{X}+B}|&\to\Bigl(A\hat{X}+B\Bigr)
\\
|\brk!{A\hat{X}+B}|&\to\bigl(A\hat{X}+B\bigr)
\end{aligned}
@@ -198,16 +203,18 @@ the more difficult it will be to adjust them
to obtain a visually acceptable result.
The main functionality of the package is based on a
-versatile mechanism to specify sets of delimiters, e.g.:
+versatile mechanism to specify sets of delimiters,
+e.g.:
+%
\[
\begin{aligned}
|\delim<>{ax+b}|
&\to\langle ax+b\rangle
\\
-|\delimpair{[}{[.],}{[}!{a}{b}|
+|\delimpair[{*,}[!{a}{b}|
&\to \bigl[a, b\bigr[
\\
-|\delimtriple<\vert\vert>*{\psi}{A^\dagger}{\psi}|
+|\delimtriple<|\textvert\textvert|>*{\psi}{A^\dagger}{\psi}|
&\to\left\langle\psi\middle\vert A^\dagger\middle\vert \psi\right\rangle
\end{aligned}
\]
@@ -216,14 +223,14 @@ The command |\delim| can be used on the fly, but also
in definitions of custom delimiter sets such as:
%
\[
-|\newcommand{\comm}{\delimpair{[}{[.],}{]}}|
+|\newcommand{\comm}{\delimpair{[}{*,}{]}}|
\]
%
Note that the definition of |\comm| does not specify any arguments.
They are nevertheless read by the incomplete definition of |\delimpair|
-from the what follows |\comm|.
+from what follows |\comm|.
In particular, this incomplete definition
-enables the correct parsing of the optional size specifier,
+enables the correct parsing of the optional size specifier flag,
e.g.:
%
\[
@@ -238,7 +245,7 @@ The above definition could be written as follows:
\begin{aligned}
&|\DeclareMathDelimiterSet{\comm}[2]|
\\
-&\qquad |{\selectdelim[l]{[}{#1},{#2}\selectdelim[r]{]}}|
+&\qquad |{\selectdeliml{[}{#1},{#2}\selectdelimr{]}}|
\end{aligned}
\]
@@ -260,9 +267,9 @@ of the currently selected math font
Unfortunately, it does not account for
the currently selected math style.
Therefore, the size of delimiters in sub/superscripts
-cannot be adjusted appropriately,
-\unskip\footnote{Arguably, it is bad typesetting practice
-to have too complicated expressions in sub/superscripts.}
+cannot be adjusted appropriately
+(an arguably better typesetting practice is
+to avoid complicated expressions in sub/superscripts in the first place),
they come out way too big:
%
\[
@@ -272,7 +279,7 @@ they come out way too big:
This package modifies the definitions of
the size modifiers (of \textsf{amsmath})
to automatically adjust to sub/superscripts
-(subject to availability):
+(subject to availability in the font):
%
\[
\makeatletter
@@ -282,6 +289,7 @@ to automatically adjust to sub/superscripts
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Spacing and Math Classes}
+\label{sec:spacing}
Another shortcoming of the variable-size delimiters is that
the spacing is noticeably different from their fixed-size counterparts:
@@ -291,12 +299,12 @@ the spacing is noticeably different from their fixed-size counterparts:
|\square(ax+b)\square|
&\to \square(ax+b)\square
\\
-|\square\left(ax+b\right)\square|
-&\to \square\left(ax+b\right)\square
-\\
|\square\bigl(ax+b\bigr)\square|
&\to \square\bigl(ax+b\bigr)\square
\\
+|\square\left(ax+b\right)\square|
+&\to \square\left(ax+b\right)\square
+\\
|\square\left(ax+\big.b\right)\square|
&\to \square\left(ax+\big.b\right)\square
\end{aligned}
@@ -328,8 +336,9 @@ For practical purposes, consistent spacing can only be achieved
by a more convenient mechanism.
On a related note, it is important to correctly specify
-the math class (|\mathopen|\hspace{0pt}/\hspace{0pt}|\mathclose|)
+the math class (such as |\mathopen| or |\mathclose|)
for the delimiters, for example:
+%
\[
\begin{aligned}
|\big(-1\big)| &\to \big(-1\big)
@@ -340,19 +349,23 @@ for the delimiters, for example:
%
The math class can also make a major difference for intermediate delimiters,
e.g.:
+%
\[
\begin{aligned}
-|\bigl\langle\psi\big\vert\psi\bigr\rangle|
-&\to \bigl\langle\psi\big\vert\psi\bigr\rangle
+|\bigl<\psi\big|\textvert|\psi\bigr>|
+&\to \bigl<\psi\big\vert\psi\bigr>
\\
-|\bigl\langle\psi\bigm\vert\psi\bigr\rangle|
-&\to \bigl\langle\psi\bigm\vert\psi\bigr\rangle
+|\bigl<\psi\mathpunct\big|\textvert|\psi\bigr>|
+&\to \bigl\langle\psi\mathpunct\big\vert\psi\bigr>
\\
-|\bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle|
-&\to \bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle
+|\bigl<\psi\mathinner\big|\textvert|\psi\bigr>|
+&\to \bigl\langle\psi\mathinner\big\vert\psi\bigr>
\\
-|\bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle|
-&\to \bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle
+|\bigl<\psi\mathbin\big|\textvert|\psi\bigr>|
+&\to \bigl\langle\psi\mathbin\big\vert\psi\bigr>
+\\
+|\bigl<\psi\bigm|\textvert|\psi\bigr>|
+&\to \bigl\langle\psi\bigm\vert\psi\bigr>
\end{aligned}
\]
%
@@ -364,6 +377,67 @@ of the left and right delimiters. It also offers several choices for
intermediate delimiters to take the context into account.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Compounds and Broken Lines}
+
+The mechanism provided by the package requires the delimited expression
+to appear as an uninterrupted compound. In particular, the expression cannot
+span several lines in a multi-line equation or several columns in a matrix.
+The same restriction applies to the elementary |\left| and |\right| construct.
+In cases where delimited expressions are torn apart across several blocks,
+the delimiters have to be typeset individually.
+The package offers a mechanism to display individual delimiters
+of a given delimiter set. It also assists in maintaining
+the same type and size across blocks.
+Being able to display individual delimiters of defined delimiter sets
+offers a broad range of (ab)use.
+
+Individual delimiters of a set can be selected and displayed
+by specifying appropriate flags,
+for example:
+%
+\[
+|\brk(|\to{(},\qquad
+|\brk)|\to{)}
+\]
+%
+These flags can be combined with the size specifier
+or other bracket modifiers,
+e.g.:
+%
+\[
+|\brk^3(|\to{\biggl(},\qquad
+|\brk[s]^2)|\to{\Bigr]}
+\]
+%
+This enables to conveniently split delimited expressions over blocks of code,
+e.g.:
+%
+\[
+|\brk[s]^3(\frac{A}{B}|\ldots\Big/\mkern-9mu\Big/\ldots|\frac{C}{D}\brk[s]^3)|
+\to
+\biggl[\frac{A}{B}\cdots\bigg/\mkern-12mu\bigg/\cdots\frac{C}{D}\biggr]
+\]
+%
+Here, the type and modifiers specifying the delimiter set
+are repeated for all individual delimiters.
+To simplify such expressions and their maintenance,
+the package provides global registers which store
+the type and size of delimiters.
+With those, the above expression can be abbreviated as:
+%
+\[
+|\brk[s]^3[|\ldots\big/\mkern-6mu\big/\ldots|\usedelim]|
+\quad\text{or}\quad
+|\brk[s]^3[|\ldots\big/\mkern-6mu\big/\ldots|\brk]|
+\]
+%
+Here, |\usedelim]|, alternatively |\brk]|,
+closes the delimiter set with
+the type and options previously specified by |\brk...[|.
+For nesting purposes, there also exists a more elaborate
+solution using registers, see below.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Philosophy}
Semantic typesetting is one of the philosophies behind \LaTeX{}:
@@ -435,17 +509,17 @@ Modifier letters can be prepended and appended to adjust their size.
%
A functionality of the present package
not offered by any of the above packages is
-to typeset delimiters on the fly, e.g.:
+to typeset delimiters on the fly,
+e.g.:
%
\[
-|\delim<\vert>!{\psi}{\psi}|
-\to\bigl\langle\psi\big\vert\psi\bigr\rangle
+|\delim<|\textvert|>!{\psi}{\psi}|
+\to\bigl<\psi\big\vert\psi\bigr>
\]
%
The mechanism to specify the size is leaner in the sense that it uses
only a single character and a single command.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Usage}
@@ -457,139 +531,377 @@ If not yet present,
the package \textsf{amsmath} will be loaded automatically.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Inline Usage}
-\label{sec:delimcommands}
+\subsection{Delimiter Sets and Presentation Flags}
+\label{sec:flags}
+
+The package provides commands to represent various delimiter sets,
+see \secref{sec:inline} and \secref{sec:declare} below.
+Their display can be modified systematically by specifying flags.
+A delimiter set |\|\emph{name}, e.g.\ |\brk|, is typically invoked by
+a sequence like:
+%
+\[
+|\|\emph{name}\ \emph{flags}\ |{|\emph{expr1}|}||{|\emph{expr2}|}|\ldots
+\]
+%
+where \emph{expr(n)} are the terms to be enclosed by the delimiters
+and the optional \emph{flags} adjust the presentation of delimiters.
+The \emph{flags} are described as follows:
+
+First, a size modifier flag controls the size of the delimiters
+to be displayed. It can take one of the following values:
+%
+\[
+\begin{aligned}
+|0|&\qquad \text{default size}
+\text{ (0.96 times default line height)}
+\\
+|!|, |+|, |^1|&\qquad \text{size }|\big|
+\text{ (1.2 times default line height)}
+\\
+|^2|&\qquad \text{size }|\Big|
+\text{ (1.8 times default line height)}
+\\
+|^3|&\qquad \text{size }|\bigg|
+\text{ (2.4 times default line height)}
+\\
+|^4|&\qquad \text{size }|\Bigg|
+\text{ (3.0 times default line height)}
+\\
+|^|\emph{n}, |^{|\emph{x}|}|&\qquad \text{flexible size adjustment
+(\emph{n}=|0|\ldots|9|; \emph{x}: decimal number)}
+\\
+|_{|\emph{h}|}|&\qquad \text{adjustment to absolute height \emph{h} (centred)}
+\\
+|*|&\qquad \text{variable size }|\left...\right|
+\end{aligned}
+\]
+%
+The intended delimiter size is stored as the dimension register:
+%
+\[
+|\delimsize|
+\]
+%
+It may be used to adjust spacing within the delimiter set
+proportional to the size of the delimiters.
+Note that the actual size of delimiters may deviate
+depending on availability within the given font.
+Note further that the size cannot be determined for variable-size delimiters
+(`|*|') and thus size |\Big| is assumed for this case.
+Note finally that the sub/superscript styles are not taken into
+account and |\delimsize| applies to the default case |\textstyle|.
+The package also supplies a macro to add horizontal glue
+proportional to the intended delimiter size:
+%
+\[
+|\kerndelim{|\emph{width}|}|
+\]
+%
+Here, \emph{width} is the amount of horizontal glue
+in units of mu scaled by the ratio of |\delimsize|
+and the current math font height.
+The macro does adjust for the selected script style.
+
+Second, a delimiter selection flag is used to pick out
+and display just one individual delimiter within the set.
+It can take one of the following values:
+%
+\[
+\begin{aligned}
+|(|&\qquad \text{left delimiter}
+\\
+\textvert, |,|&\qquad \text{first intermediate delimiter}
+\\
+|)|&\qquad \text{right delimiter}
+\\
+|?|\emph{n}&\qquad \text{\emph{n}-th delimiter (starting with |0|: left)}
+\end{aligned}
+\]
+
+Third, register flags store are retrieve delimiter
+for splitting the across blocks or lines:
+%
+\[
+\begin{aligned}
+|[|&\qquad \text{store delimiter type to register `|.|',
+display left delimiter (same as `|>.(|')}
+\\
+|]|&\qquad \text{display right delimiter stored in default register `|.|'
+(same as `|<.)|')}
+\\
+|>|\emph{r}, |>{|\emph{reg}|}|&\qquad \text{store delimiter type
+in register \emph{r} or \emph{reg}}
+\\
+|<|\emph{r}, |<{|\emph{reg}|}|&\qquad \text{retrieve delimiter type
+from register \emph{r} or \emph{reg}}
+\end{aligned}
+\]
+%
+A register stores the type of delimiter set (|\|\emph{name}),
+the desired size (except for variable size `|*|')
+as well as the math class of the compound (`|'|' vs. `|"|', see below).
+A stored register can be retrieved and displayed by the macro:
+%
+\[
+|\usedelim|\,\emph{r}\ \emph{sel}
+\quad\text{or}\quad
+|\usedelim|\{\emph{reg}\}\emph{sel}
+\]
+%
+Here, \emph{sel} is a flag to select an individual delimiter, see above.
+
+In addition, there are some general purpose flags:
+%
+\[
+\begin{aligned}
+|.|&\qquad \text{terminates flag processing}
+\\
+|:|&\qquad \text{enclose delimiter set in block
+(for using total box dimensions)}
+\\
+|'|&\qquad \text{render delimiter set as }|\mathopen|\text{ and }|\mathclose|
+\\
+|"|&\qquad \text{render delimiter set as }|\mathinner|
+\\
+|-|&\qquad \text{display phantom delimiters (for individual delimiters)}
+\end{aligned}
+\]
+
+Please note the following:
+%
+\begin{itemize}
+\item
+A delimiter selector (including the combined flags `|[|' and `|]|')
+terminates flag processing,
+therefore all relevant flags must be specified before it.
+\item
+Parsing also stops with the opening of the first term argument
+by means of the opening brace `|{|'.
+\item
+Parsing can also be terminated manually by specifying the flag `|.|'
+(in case the opening brace `|{|' for arguments is missing for whatever reason).
+\item
+Any other letter or token at the location of \emph{flags}
+is interpreted as an unrecognised flag and triggers a compiler error.
+For instance, |\brk{x}| must not be abbreviated as |\brk x|
+because `|x|' would be interpreted as a flag
+(it might be abbreviated as |\brk.x|).
+\item
+The legacy size modifier flags `|1|' \ldots `|4|'
+provided for backward compatibility have the same effect as `|^1|'\ldots`|^4|'.
+\item
+The phantom delimiter flag `|-|' does not work for variable size.
+It is intended for reserving space for individual delimiters
+when they are composed manually into sets (e.g.\ across lines).
+\item
+Technically, individual delimiters can be produced in the variable size version
+(even though it may defeat the purpose of the delimiter selection mechanism).
+One has to pay attention when using
+only the opening or only the closing delimiters from the package
+and counterbalancing it by direct code for the opposite side.
+This is because `|*(|' and `|*)|' do not directly translate to
+|\left|\emph{delim} and |\right|\emph{delim}
+due to proper spacing, see \secref{sec:spacing}.
+Instead, they translate to:
+%
+\[
+\begin{aligned}
+|*(|&\to|\mathopen{}\mathclose\bgroup\left|\emph{delim}
+\\
+|*)|&\to|\right|\emph{delim}|\egroup|
+\end{aligned}
+\]
+%
+One should use analogous code to complete the manual variable size block.
+
+Note that similar restrictions apply to using the flag `|:|'
+for block enclosure which uses |\bgroup| and |\egroup| as well.
+
+As it does not make much sense to use variable-size (`|*|')
+and block (`|:|') compounds for individual delimiter selection,
+the state of these flags is not stored in the global registers.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Inline Declarations}
+\label{sec:inline}
The package provides three general purpose commands
to compose delimiter sets with one, two or three encapsulated expressions:
%
\[
\begin{aligned}
-&|\delim{|\emph{l}|}{|\emph{r}|}|\emph{size}|{|\emph{expr}|}|
+&|\delim{|\emph{l}|}{|\emph{r}|}|\emph{flags}|{|\emph{expr}|}|
\\
&|\delimpair{|\emph{l}|}{|\emph{m}|}{|\emph{r}|}|
-\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}|
+\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}|
\\
-&|\delimtriple{|\emph{l}|}{|\emph{m1}|}{|\emph{m2}|}{|\emph{r}|}|
-\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}{|\emph{expr3}|}|
+&|\delimtriple{|\emph{l}|}{|\emph{m}|}{|\emph{n}|}{|\emph{r}|}|
+\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}{|\emph{expr3}|}|
\end{aligned}
\]
%
The expression(s) \emph{expr(n)} will be surrounded by the
delimiters \emph{l} and \emph{r}
and, in the case of more than one expression,
-they will be separated by the delimiters \emph{m(n)}:
+they will be separated by the delimiters \emph{m}, \emph{n}:
+%
\[
\emph{l}\ \emph{expr}\ \emph{r},
\qquad
\emph{l}\ \emph{expr1}\ \emph{m}\ \emph{expr2}\ \emph{r},
\qquad
-\emph{l}\ \emph{expr1}\ \emph{m1}\ \emph{expr2}\
-\emph{m2}\ \emph{expr3}\ \emph{r}
+\emph{l}\ \emph{expr1}\ \emph{m}\ \emph{expr2}\
+\emph{n}\ \emph{expr3}\ \emph{r}
\]
-Here, \emph{l} and \emph{r} have to be
-math delimiters (symbols which can be used for |\left| and |\right|) or
-the dot `.' for the null delimiter.
-The separators \emph{m(n)} can be plain math delimiters as well, but they can
-also be compound expression of the form |[|\emph{class}|]|\emph{delim}
-where \emph{class} specifies
-the intended math class of the delimiter \emph{delim}:
+Here, \emph{l}, \emph{r}, \emph{m}, \emph{n}
+should be math delimiters \emph{delim}
+(elementary symbols which can be used for |\left| and |\right|)
+or the dot `|.|' for the null delimiter.
+The delimiter set expression can be adjusted in two ways:
+
+First, size adjustment
+for the delimiters \emph{l}, \emph{r}, \emph{m}, \emph{n}
+can be suppressed by a starred variant:
+%
+\[
+|{*|\emph{token}|}|
+\qquad\text{or}\qquad
+|{*{|\emph{expr}|}}|
+\]
+%
+This allows to use an arbitrary \emph{token}
+or a compound expression \emph{expr} in place of a delimiter \emph{delim}.
+This is useful when a delimiter character should not adjust in size
+(e.g.\ commas), or if a flexible-size version of the character
+is not available. One might also use a compound expression
+to create a null delimiter with non-zero width
+(the width may be specified by |\kerndelim|
+to make it proportional to the delimiter size).
+
+Second, the intended math class
+of the intermediate delimiters \emph{m}, \emph{n}
+may be adjusted in order to achieve a more appropriate automatic spacing
+by using |{[|\emph{class}|]|\emph{delim}|}|.
+Here, \emph{class} specifies
+the intended math class of the delimiter \emph{delim}
+according to:
%
\[
-\begin{aligned}{}
+\begin{aligned}
\left.\begin{array}{r}
-\emph{delim}\\|{|\emph{delim}|}|\\|{[]|\emph{delim}|}|
+\emph{delim}\\|{|\emph{delim}|}|
\end{array}\right\}
-&\qquad\text{class }|\mathord|\text{ (similar to }|\big|)
-\\
-|{[l]|\emph{delim}|}|&\qquad
-\text{class }|\mathopen|\text{ (similar to }|\bigl|
-\text{, not for use in }|\delim...|)
-\\
-|{[r]|\emph{delim}|}|&\qquad
-\text{class }|\mathclose|\text{ (similar to }|\bigr|
-\text{, not for use in }|\delim...|)
+&\qquad
+\left\{\begin{array}{l}
+\text{no glue for size-adjusted delimiters (same as }|[o]|\text{)}
\\
-|{[o]|\emph{delim}|}|&\qquad
-\text{class }|\mathopen|\text{ (similar to }|\bigl|)
+\text{determined by expression for unadjusted size (}|*|\text{ variant)}
+\end{array}\right.
\\
-|{[c]|\emph{delim}|}|&\qquad
-\text{class }|\mathclose|\text{ (similar to }|\bigr|)
-\\
-|{[m]|\emph{delim}|}|&\qquad
-\text{class }|\mathrel|\text{ (similar to }|\bigm|)
+|{[o]|\emph{delim}|}|
+&\qquad
+\text{no glue, similar to }|\big|, |\mathord|, |\mathopen|, |\mathclose|
\\
|{[p]|\emph{delim}|}|&\qquad
-\text{class }|\mathpunct|\text{ (similar to }|\bigp|)
+\text{followed by }|\thinmuskip|\text{, similar to }|\bigp|, |\mathpunct|
+\\
+|{[i]|\emph{delim}|}|&\qquad
+\text{surrounded by }|\thinmuskip|\text{, similar to }|\bigi|, |\mathinner|
\\
|{[b]|\emph{delim}|}|&\qquad
-\text{class }|\mathbin|\text{ (similar to }|\bigb|)
+\text{surrounded by }|\medmuskip|\text{, similar to }|\bigb|, |\mathbin|
\\
-|{[.]|\emph{expr}|}|&\qquad
-\text{no size adjustment, \emph{expr} can be any expression}
+|{[m]|\emph{delim}|}|&\qquad
+\text{surrounded by }|\thickmuskip|\text{, similar to }|\bigm|, |\mathrel|
\end{aligned}
\]
-%
-Note that the left and right delimiters \emph{l} and \emph{r} effectively
-have |[l]| and |[r]| prepended, respectively,
-and therefore they must be a plain math delimiter.
-Conversely, the immediate delimiters \emph{m(n)} must not
-have the |[l]| and |[r]| classes
-because the latter must appear precisely once
-and they are already taken by \emph{l} and \emph{r};
-use classes |[o]| and |[c]| instead.
-The optional size modifier \emph{size} should take one of the following values:
+Please note the following:
+%
+\begin{itemize}
+\item
+The left and right delimiters \emph{l} and \emph{r}
+are assigned to special classes:
+They leave no initial and final glue on the enclosed expressions
+(same as |\mathopen| and |\mathclose|).
+From the outside, the delimiter set appears
+either as a combination of |\mathopen|+|\mathclose| (flag `|'|')
+or as |\mathinner| (flag `|"|').
+\item
+The legacy class |[.]| provided for backward compatibility
+specifies delimiters with unadjusted size:
+the compound |{[.]|\emph{expr}|}| has the same effect as |{*{|\emph{expr}|}}|.
+\item
+The legacy class |[c]| provided for backward compatibility
+has the same effect as |[o]|.
+\item
+Unadjusted-size delimiters can be combined with math classes as:
+%
\[
-\begin{aligned}{}
-\emph{empty}, \emph{anything else}, |0|&\qquad \text{default size}
-\\
-|!|, |+|, |1|&\qquad \text{size }|\big|\text{ (|!| is preferred)}
-\\
-|2|&\qquad \text{size }|\Big|
-\\
-|3|&\qquad \text{size }|\bigg|
-\\
-|4|&\qquad \text{size }|\Bigg|
-\\
-|*|&\qquad \text{variable size }|\left...\right|
-\end{aligned}
+|{[|\emph{class}|]*|\emph{token}|}|
+\qquad\text{or}\qquad
+|{[|\emph{class}|]*{|\emph{expr}|}}|
\]
+%
+\item
+The opening square bracket `|[|'
+takes the dual role of indicating the optional |[|\emph{class}|]| argument.
+To avoid conflicts on intermediate delimiters,
+opening square bracket delimiters should be encoded as
+`|{{[}}|' (for |\delim...|) or `|{[}|' (for |\selectdelim|)
+rather than `|[|'.
+\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Declarations}
+\label{sec:declare}
The above constructs can be used to define new delimiter commands via:
%
\[
-|\newcommand{\|\emph{name}|}{\delim...{|\emph{l}|}...{|\emph{r}|}}|
+\begin{aligned}
+&|\newcommand{\|\emph{name}|}{\delim{|\emph{l}|}{|\emph{r}|}|
+\emph{flags}|}|
+\\
+&|\newcommand{\|\emph{name}|}{\delimpair{|\emph{l}|}{|\emph{m}|}{|\emph{r}|}|
+\emph{flags}|}|
+\\
+&|\newcommand{\|\emph{name}|}{\delimtriple{|\emph{l}|}{|\emph{m}|}|
+|{|\emph{n}|}{|\emph{r}|}|\emph{flags}|}|
+\end{aligned}
\]
%
-Here it makes sense to drop all arguments starting
-with the size modifier \emph{size} from the definition.
+Here it makes sense to drop all arguments
+starting at the optional \emph{flags} argument from the definition.
The \TeX{} parsing mechanism will then automatically
use the tokens following |\|\emph{name} including the optional size modifier.
-If the encapsulated expression(s) are to be passed as explicit arguments
-to |\|\emph{name}, one will have to find an alternative way to pass the
-optional size argument.
+If any of the encapsulated expression(s) are to be passed as
+explicit arguments to |\|\emph{name},
+one will have to find an alternative way to pass \emph{flags}.
+However, it is possible to predefine \emph{flags}
+which can be overridden by further \emph{flags} specified by the user.
The above declarations via |\delim...|
-should be sufficient for almost all situations.
+should be sufficient for most situations.
However, there is an even more flexible way to declare delimiter sets:
+%
\[
-|\DeclareMathDelimiterSet{\|\emph{name}|}[|\emph{narg}|]{|\emph{expr}|}|
+|\DeclareMathDelimiterSet{\|\emph{name}|}[|\emph{narg}|]{|\emph{compositor}|}|
\]
%
The syntax of this command is equivalent to the one of |\newcommand|.
The difference is that the command |\|\emph{name} first looks
-for the optional size modifier \emph{size} as
-described above in \secref{sec:delimcommands}.
-It remembers the desired size for evaluating the macro \emph{expr}.
+for the \emph{flags} argument as
+described above in \secref{sec:inline}.
+It remembers the desired size for evaluating
+the macro expression \emph{compositor}.
Then it parses the arguments as if the command
was declared by |\newcommand|.
-As usual, the macro \emph{expr} contains the command arguments
+As usual, the macro expression \emph{compositor} contains the command arguments
specified by |#1|, |#2|, \ldots. Note that these should
be encapsulated in groups |{#1}|, |{#2}|, \ldots,
in order to prevent them from overwriting definitions
@@ -598,16 +910,108 @@ It should also contain the desired math delimiters
specified by:
%
\[
-|\selectdelim[|\emph{class}|]{|\emph{delim}|}|
+\begin{aligned}
+&|\selectdeliml|[|*|]|{|\emph{delim}|}|
+\\
+&|\selectdelim[|\emph{class}|]|[|*|]|{|\emph{delim}|}|
+\\
+&|\selectdelimr|[|*|]|{|\emph{delim}|}|
+\end{aligned}
\]
%
+The three commands must be in proper sequence
+starting with |\selectdeliml| followed by arbitrarily many
+|\selectdelim| and terminated by |\selectdelimr|.
+The math classes \emph{class} and starred variants
+are defined analogously to \secref{sec:inline}.
Here, the sizes are adjusted automatically
-according to the previously specified modifier \emph{size}.
-The math classes must be in proper sequence,
-i.e.\ the first and last ones must be |l| and |r|, respectively,
-while the intermediate ones can be anything by |l| and |r|,
-see \secref{sec:delimcommands}.
+according to the previously specified modifier.
+
+Picking out individual delimiters from a set
+declared by |\DeclareMathDelimiterSet|
+cannot be achieved automatically.
+Instead, a selector method may be specified manually (where needed) by:
+%
+\[
+\begin{aligned}
+&|\DeclareMathDelimiterSel{\|\emph{name}|}|
+\\
+&| {\selectdeliml{|\emph{l}|}|[|\||or\selectdelim{|\emph{m}|}|\ldots]|}|
+\\
+&| {\selectdelimr{|\emph{r}|}}|
+\end{aligned}
+\]
+%
+As many intermediate delimiters as needed can be specified
+at the end of the first argument; each one must start with `|\||or|'.
+
+\makeatletter
+For example, one might declare a set of double square brackets
+$[\kern-0.06\big@size[*]\kern-0.06\big@size]$ using:
+\makeatother
+%
+\[
+\begin{aligned}
+&|\DeclareMathDelimiterSet{\dsb}[1]|
+\\
+&| {\selectdeliml{[}\kerndelim{-1.75}\selectdelim[o]{[}{#1}|
+\\
+&| \selectdelim[o]{]}\kerndelim{-1.75}\selectdelimr{]}}|
+\end{aligned}
+\]
+%
+Here, the command |\kerndelim{-1.75}| reduces the spacing
+between the two square brackets by approximately 1.75\,mu in default size.
+This could be used for:
+%
+\[
+\makeatletter
+|\dsb^4{\dsb^3{\dsb^2{\dsb^1{\dsb{*}}}}}|
+\to
+\Biggl[\kern-0.20\big@size\Biggl[
+\biggl[\kern-0.16\big@size\biggl[
+\Bigl[\kern-0.12\big@size\Bigl[
+\bigl[\kern-0.08\big@size\bigl[
+[\kern-0.06\big@size[*
+]\kern-0.06\big@size]
+\bigr]\kern-0.08\big@size\bigr]
+\Bigr]\kern-0.12\big@size\Bigr]
+\biggr]\kern-0.16\big@size\biggr]
+\Biggr]\kern-0.20\big@size\Biggr],
+\quad
+|\dsb*|\ldots\to
+\left[\kern-0.12\big@size\middle[\frac{x}{y}
+\middle]\kern-0.12\big@size\right]
+\makeatother
+\]
+%
+An appropriate selector method for displaying individual
+delimiters reads:
+%
+\[
+\begin{aligned}
+&|\DeclareMathDelimiterSel{\dsb}|
+\\
+&| {\selectdeliml{[}\kerndelim{-1.75}\selectdelim[o]{[}}|
+\\
+&| {\selectdelim[o]]\kerndelim{-1.75}\selectdelimr{]}}|
+\end{aligned}
+\]
+Finally, towards a very flexible manual composition
+of delimiter sets, there is the macro:
+%
+\[
+|\parsedelimflags{|\emph{compositor}|}{|\emph{selector}|}|\emph{flags}
+\]
+%
+It parses the modifier flags as described in \secref{sec:flags}.
+The argument \emph{compositor} is code that displays the
+composited delimiter set whereas \emph{selector} is a macro
+that displays the delimiter number |\selecteddelim| of the set.
+The \emph{flags} follow immediately and should be terminated by
+an opening brace `|{|', the terminating flag `|.|'
+or a delimiter selection flag.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Default Declarations}
@@ -617,30 +1021,34 @@ The package predefines four commonly used sets of delimiters:
%
\begin{itemize}
\item
-|\brk[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents
+|\brk[|\emph{type}|]|\emph{flags}|{|\emph{expr}|}| represents
a standard bracket around a single expression \emph{expr}.
The type of bracket can be specified by the optional
argument \emph{type}:
+%
\[
\text{\emph{empty} or |[r]|: round }(x),\quad
\text{|[s]|: square }[x],\quad
\text{|[c]|: curly }\{x\},\quad
\text{|[a]|: angle }\langle x\rangle
\]
+%
\item
-|\eval[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents
+|\eval[|\emph{type}|]|\emph{flags}|{|\emph{expr}|}| represents
evaluation of a functional expression \emph{expr}.
The type of bracket can be specified by the optional
argument \emph{type}:
+%
\[
\text{\emph{empty} or |[v]|: }f(x)\vert_{a},\qquad
\text{|[s]|: }[f(x)]_{a}^{b}
\]
+%
\item
-|\abs|\emph{size}|{|\emph{expr}|}| represents
+|\abs|\emph{flags}|{|\emph{expr}|}| represents
the absolute value $\lvert\emph{expr}\rvert$.
\item
-|\norm|\emph{size}|{|\emph{expr}|}| represents
+|\norm|\emph{flags}|{|\emph{expr}|}| represents
the norm $\lVert\emph{expr}\rVert$.
\end{itemize}
%
@@ -651,19 +1059,20 @@ The package also defines some extended sets of delimiters as follows:
%
\begin{itemize}
\item
-|\pair|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+|\pair|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
a pair(ing) $(\emph{expr1},\emph{expr2})$.
\item
-|\set|\emph{size}|{|\emph{expr}|}| represents
+|\set|\emph{flags}|{|\emph{expr}|}| represents
the set $\{\emph{expr}\}$.
\item
-|\setcond|\emph{size}|{|\emph{expr}|}{|\emph{cond}|}| represents
+|\setcond|\emph{flags}|{|\emph{expr}|}{|\emph{cond}|}| represents
a set with condition $\{\emph{expr}\vert\emph{cond}\}$.
\item
-|\intv[|\emph{type}|]|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+|\intv[|\emph{type}|]|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
an interval from \emph{expr1} to \emph{expr2}.
The in/\hspace{0pt}exclusion of the bounds can be specified by the optional
argument \emph{type}:
+%
\[
\text{\emph{empty} or |[c]|: closed }[a,b],\qquad
\text{|[o]|: open }]a,b[,\qquad
@@ -673,28 +1082,35 @@ argument \emph{type}:
\text{|[r]|: right-open }[a,b[
\end{array}
\]
+%
\item
-|\avg|\emph{size}|{|\emph{expr}|}| represents
+|\avg|\emph{flags}|{|\emph{expr}|}| represents
some average $\langle\emph{expr}\rangle$.
\item
-|\corr|\emph{size}|{|\emph{expr}|}| represents
+|\corr|\emph{flags}|{|\emph{expr}|}| represents
some correlator $\langle\emph{expr}\rangle$.
\item
-|\comm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+|\comm|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
the commutator $[\emph{expr1},\emph{expr2}]$.
\item
-|\acomm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+|\acomm|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
the anti-commutator $\{\emph{expr1},\emph{expr2}\}$.
\item
-|\bra|\emph{size}|{|\emph{expr}|}| represents
+|\bra|\emph{flags}|{|\emph{expr}|}| represents
a bra-vector $\langle\emph{expr}\rvert$ in quantum mechanics.
\item
-|\ket|\emph{size}|{|\emph{expr}|}| represents
+|\ket|\emph{flags}|{|\emph{expr}|}| represents
a ket-vector $\lvert\emph{expr}\rangle$ in quantum mechanics.
\item
-|\setcond|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+|\braket|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
a bra-ket contraction $\langle\emph{expr1}\vert\emph{expr2}\rangle$.
+\item
+|\lfrac[|\emph{type}|]|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| describes
+the linear representation $\emph{expr1}/\emph{expr2}$ of a fraction.
+An optional argument \emph{type} taking values |[r]|, |[s]|, |[c]|, |[a]| encloses the
+fraction in round, square, curly or angle brackets as for |\brk|.
\end{itemize}
+%
The extended definitions need to be activated by
the package option |extdef|, see \secref{sec:packageoptions}.
@@ -707,10 +1123,10 @@ or taste of the user, they can be redefined with |\renewcommand|.
In addition to the |\bigl|, |\bigr| and |\bigm| commands
(as well as their |\Big.|, |\bigg.| and |\Bigg.| counterparts),
-the package defines two additional sets |\bigp| and |\bigb|
+the package defines three additional sets |\bigp|, |\bigb| and |\bigi|
(and counterparts).
-Here |\bigp| implies the math class |\mathpunct|
-and |\bigb| the class |\mathbin|.
+Here |\bigp| implies the math class |\mathpunct|,
+|\bigb| the class |\mathbin| and |\bigi| the class |\mathinner|.
Furthermore, the package overloads the size calculation in the |\big...|
commands to properly account for the math styles in sub/superscripts
@@ -722,7 +1138,8 @@ the package option |scriptstyle|, see \secref{sec:packageoptions}.
\subsection{Package Options}
\label{sec:packageoptions}
-Options can be passed to the package by
+Options can be passed to the package by:
+%
\[
|\usepackage[|\emph{opts}|]{delimset}|
\qquad
@@ -735,17 +1152,17 @@ Here \emph{opts} is a comma-separated list of the available options:
%
\begin{itemize}
\item
-|stddef|[|=true|$\vert$|false|]
+|stddef|[|=true|\textbar|false|]
controls the activation of standard delimiter definitions specified in
\secref{sec:defaultcommands}.
If no value is given |true| is assumed; initially set to |true|.
\item
-|extdef|[|=true|$\vert$|false|]
+|extdef|[|=true|\textbar|false|]
controls the activation of extended delimiter definitions specified in
\secref{sec:defaultcommands}.
If no value is given |true| is assumed; initially set to |false|.
\item
-|scriptstyle|[|=true|$\vert$|false|]
+|scriptstyle|[|=true|\textbar|false|]
controls the overwriting of size modifiers explained
in \secref{sec:auxcommands}.
If no value is given |true| is assumed; initially set to |true|.
@@ -758,7 +1175,7 @@ If no value is given |true| is assumed; initially set to |true|.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Copyright}
-Copyright \copyright{} 2016--2018 Niklas Beisert
+Copyright \copyright{} 2016--2024 Niklas Beisert
This work may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3
@@ -808,7 +1225,7 @@ distribution, e.g.\ \textit{texmf-root}|/tex/latex/delimset|.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Interaction with CTAN Packages}
-The package relies on other packages:
+The package is related to other packages available at CTAN:
\begin{itemize}
\item
This package relies on some functionality of the package \textsf{amsmath}
@@ -820,24 +1237,63 @@ This package uses the package \textsf{keyval} from the \textsf{graphics} bundle
to process optional arguments to the package options.
Compatibility with the \textsf{keyval} package
has been tested with v1.15 (2014/10/28).
+\item
+The package \textsf{icomma} modifies the spacing behaviour
+of the comma character in math mode
+which leads to inadequate spacing when it is used as a middle delimiter.
+To achieve proper spacing in sample code,
+use |{[p]*,}| rather than |{*,}|.
+The extended commands |\intv|, |\comm|, |\acomm| and |\pair|
+are compatible with the \textsf{icomma} package
+has been tested with v2.0 (2002/03/10).
\end{itemize}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\subsection{Feature Suggestions}
-% specify width of null delimiter?
-% automatic nesting of bracket types?
% make optional arguments work for DeclareMathDelimiterSet?
-% add pfrac for fraction a/b in text mode
+% (must go before parsing, but how to process and react?)
+% make unadjusted size have right height
+% automatic nesting of bracket types? -> depth stack?
% handle cramped style properly (perhaps impossible)
-% outer decorations for delimiters e.g. _y<a,b>_x
-% freestyle delimiter with size adjustment replacement \size{\rangle}_x
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Revision History}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v2.0:} 2024/07/17
+
+\begin{itemize}
+\item
+option to display individual delimiters
+and to store them in global registers across blocks
+(columns, lines, etc.)
+\item
+more general handling of unadjusted-size delimiters
+\item
+more general size adjustments
+\item
+added inner math class for intermediate delimiters
+\item
+added flag to enclose by open/close and inner math class
+\item
+added flag to display phantom delimiters
+\item
+selected size accessible by |\delimsize|
+and add proportional kerning by |\kerndelim|.
+\item
+added extended definition |\lfrac| for plain inline fractions
+\item
+null delimiter now properly has zero width for variable size
+\item
+internal mechanisms revised
+\item
+compatibility with \textsf{icomma} package
+(thanks to Olivier Godin for pointing out the issue)
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{v1.1:} 2018/12/30
\begin{itemize}
@@ -914,11 +1370,11 @@ standard definitions
sizes for default brackets:
% \begin{macrocode}
\[
-\brk0{x},\quad
-\brk1{x},\quad
-\brk2{x},\quad
-\brk3{x},\quad
-\brk4{x}
+\brk^0{x},\quad
+\brk^1{x},\quad
+\brk^2{x},\quad
+\brk^3{x},\quad
+\brk^4{x}
\]
% \end{macrocode}
@@ -935,7 +1391,7 @@ styles for default brackets:
nested brackets:
% \begin{macrocode}
\[
-\brk[c]2{\brk[s]!{\brk{ax+b}x+c}x+d}
+\brk[c]^2{\brk[s]!{\brk{ax+b}x+c}x+d}
\]
% \end{macrocode}
@@ -952,7 +1408,7 @@ default absolute value, norm and default evaluations:
outer delimiter spacing:
% \begin{macrocode}
\begin{align*}
-&\square\brk0{x}\square,&&\square\brk1{A^k}\square,
+&\square\brk^0{x}\square,&&\square\brk^1{A^k}\square,
\\
&\square\brk*{x}\square,&&\square\brk*{A^k}\square
\end{align*}
@@ -969,7 +1425,7 @@ e^{\brk!{ax+b}}
delimiter declaration:
% \begin{macrocode}
\DeclareMathDelimiterSet{\braket}[2]
- {\selectdelim[l]<#1\selectdelim|#2\selectdelim[r]>}
+ {\selectdeliml<#1\selectdelim|#2\selectdelimr>}
\[
\braket!{\psi}{\psi},
\quad
@@ -988,32 +1444,36 @@ conditional set, alternative layouts:
% \begin{macrocode}
\[
\delimpair\{{[m]|}\}!{2n}{n\in\mathbb{Z}},
-\qquad
+\quad
\delimpair\{{[b]|}\}!{2n}{n\in\mathbb{Z}},
-\qquad
+\quad
+\delimpair\{{[i]|}\}!{2n}{n\in\mathbb{Z}},
+\quad
\delimpair\{{[p]|}\}!{2n}{n\in\mathbb{Z}},
-\qquad
+\quad
\delimpair\{|\}!{2n}{n\in\mathbb{Z}},
-\qquad
-\delimpair\{{[.];}\}!{2n}{n\in\mathbb{Z}}
+\quad
+\delimpair\{{*;}\}!{2n}{n\in\mathbb{Z}}
\]
conditional set, alternative layouts with variable size:
\[
\delimpair\{{[m]|}\}*{2n}{n\in\mathbb{Z}\big.},
-\qquad
+\quad
\delimpair\{{[b]|}\}*{2n}{n\in\mathbb{Z}\big.},
-\qquad
+\quad
+\delimpair\{{[i]|}\}*{2n}{n\in\mathbb{Z}\big.},
+\quad
\delimpair\{{[p]|}\}*{2n}{n\in\mathbb{Z}\big.},
-\qquad
+\quad
\delimpair\{|\}*{2n}{n\in\mathbb{Z}\big.},
-\qquad
-\delimpair\{{[.];}\}*{2n}{n\in\mathbb{Z}\big.}
+\quad
+\delimpair\{{*;}\}*{2n}{n\in\mathbb{Z}\big.}
\]
% \end{macrocode}
delimiter definition:
% \begin{macrocode}
-\newcommand{\comm}{\delimpair[{[.],}]}
+\newcommand{\comm}{\delimpair[{*,}]}
\[
\comm!{\comm{A}{B}}{C}
+\comm!{\comm{B}{C}}{A}
@@ -1024,7 +1484,7 @@ delimiter definition:
alternative representation:
% \begin{macrocode}
-\renewcommand{\comm}{\delimpair[{[.];}]}
+\renewcommand{\comm}{\delimpair[{*;}]}
\[
\comm!{\comm{A}{B}}{C}
+\comm!{\comm{B}{C}}{A}
@@ -1033,6 +1493,31 @@ alternative representation:
\]
% \end{macrocode}
+display individual delimiters of a set:
+% \begin{macrocode}
+\renewcommand{\braket}{\delimpair<|>}
+\[
+\braket{A}{B}
+\to \braket( A \braket| B \braket),
+\quad
+\braket*( A\big. \braket*| B_{} \braket*),
+\quad
+\braket^1( A \braket^3| B \braket^2)
+\]
+% \end{macrocode}
+
+placing indices before a bracket
+(does not work in variable-size mode because
+the final size is not available for the enclosed expressions):
+% \begin{macrocode}
+\DeclareMathDelimiterSet{\quadindex}[5]
+ {\selectdeliml.^{#2}_{#3}\mathord{}\selectdelim[o][
+ {#1}\selectdelim[o]]^{#4}_{#5}\selectdelimr.}
+\[
+\quadindex^2{\frac{x}{y}}{1}{2}{3}{4}
+\]
+% \end{macrocode}
+
% end of document body:
% \begin{macrocode}
\end{document}
@@ -1057,6 +1542,7 @@ alternative representation:
% if not yet present.
% \textsf{amsmath} is used for basic delimiter size functionality.
% \textsf{keyval} is used for extended options processing.
+%
% \begin{macrocode}
\RequirePackage{amsmath}
\RequirePackage{keyval}
@@ -1067,6 +1553,7 @@ alternative representation:
%
% The package has some boolean \textsf{keyval} options
% which can be set to |true| or |false|.
+%
% \begin{macrocode}
\newif\ifdlm@std\dlm@stdtrue
\newif\ifdlm@ext\dlm@extfalse
@@ -1083,7 +1570,7 @@ alternative representation:
% \end{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \paragraph{Internal Definitions.}
+% \paragraph{Improved Size Adjustments.}
%
% Overwrite the \textsf{amsmath} command |\bBigg@|
% to select the size according to the present math style
@@ -1105,102 +1592,269 @@ alternative representation:
\fi
% \end{macrocode}
-% Define punctuation marks (|\bigp|, etc.)
-% and binary operators (|\bigb|, etc.).
+% Define punctuation marks (|\bigp|, etc.),
+% binary operators (|\bigb|, etc.)
+% and inner class (|\bigi|, etc.).
%
% \begin{macrocode}
-\newcommand{\bigp}{\mathpunct\big}
-\newcommand{\Bigp}{\mathpunct\Big}
-\newcommand{\biggp}{\mathpunct\bigg}
-\newcommand{\Biggp}{\mathpunct\Bigg}
-\newcommand{\bigb}{\mathbin\big}
-\newcommand{\Bigb}{\mathbin\Big}
-\newcommand{\biggb}{\mathbin\bigg}
-\newcommand{\Biggb}{\mathbin\Bigg}
+\providecommand{\bigp}{\mathpunct\big}
+\providecommand{\Bigp}{\mathpunct\Big}
+\providecommand{\biggp}{\mathpunct\bigg}
+\providecommand{\Biggp}{\mathpunct\Bigg}
+\providecommand{\bigb}{\mathbin\big}
+\providecommand{\Bigb}{\mathbin\Big}
+\providecommand{\biggb}{\mathbin\bigg}
+\providecommand{\Biggb}{\mathbin\Bigg}
+\providecommand{\bigi}{\mathinner\big}
+\providecommand{\Bigi}{\mathinner\Big}
+\providecommand{\biggi}{\mathinner\bigg}
+\providecommand{\Biggi}{\mathinner\Bigg}
% \end{macrocode}
-% Define size selectors for standard size (|dlm@norm|),
-% variable size (|dlm@var|).
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Size Adjustment Definitions.}
+%
+% The macro |\dlm@setvar| enables variable size,
+% the macro |\dlm@setsize| sets a fixed size.
+% Delimiter sizes are implented by |\dlm@big@|.
+% The macro |\kerndelim| adds some kerning proportional
+% to the chosen fixed size of the delimiters
+% (the spacing is merely an approximation,
+% and it does not actually scale for flexible size).
+%
+% \begin{macrocode}
+\newlength\delimsize
+\newcommand{\dlm@setvar}{\let\dlm@ifvar\@firstoftwo\delimsize1.5\big@size}
+\newcommand{\dlm@setsize}[1]{\let\dlm@ifvar\@secondoftwo%
+ \delimsize#1\big@size\advance\delimsize by\big@size\delimsize0.5\delimsize}
+\newcommand{\dlm@setabssize}[1]{\let\dlm@ifvar\@secondoftwo\delimsize#1\relax}
+\newcommand{\dlm@big@}[1]{{\mathchoice%
+ {\dlm@big@choice{\displaystyle}{1}{#1}}%
+ {\dlm@big@choice{\textstyle}{1}{#1}}%
+ {\dlm@big@choice{\scriptstyle}{0.7}{#1}}%
+ {\dlm@big@choice{\scriptscriptstyle}{0.5}{#1}}}}
+\newcommand{\dlm@big@choice}[3]{\@mathmeasure\z@{\nulldelimiterspace\z@}%
+ {#1\left#3\vcenter to#2\delimsize{}\right.}\box\z@}
+\newcommand{\kerndelim}[1]{{\delimsize#1\delimsize%
+ \mkern\muexpr1.2mu*\delimsize/\big@size\relax}}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Math Classes Processing.}
+%
+% Define class selectors for fixed and unadjusted sizes.
%
% \begin{macrocode}
+\newcommand{\dlm@big}[2]{\dlm@plain{#1}{\dlm@big@#2}}
+\newcommand{\dlm@plain}[2]{\dlm@class{#1}{\dlm@phantom{#2}}}
\newcommand{\dlm@class}[1]{\csname dlm@class@#1\endcsname}
-\newcommand{\dlm@class@}{}
-\newcommand{\dlm@class@l}{\mathopen}
-\newcommand{\dlm@class@r}{\mathclose}
-\newcommand{\dlm@class@o}{\mathopen}
-\newcommand{\dlm@class@c}{\mathclose}
-\newcommand{\dlm@class@m}{\mathrel}
-\newcommand{\dlm@class@p}{\mathpunct}
-\newcommand{\dlm@class@b}{\mathbin}
-\newcommand{\dlm@norm}[1]{\dlm@class{#1}\bBigg@{0.0}}
-\newcommand{\dlm@big}[1]{\dlm@class{#1}\big}
-\newcommand{\dlm@Big}[1]{\dlm@class{#1}\Big}
-\newcommand{\dlm@bigg}[1]{\dlm@class{#1}\bigg}
-\newcommand{\dlm@Bigg}[1]{\dlm@class{#1}\Bigg}
+\let\dlm@class@\@firstofone
+\let\dlm@class@o\mathord
+\let\dlm@class@c\mathord
+\let\dlm@class@p\mathpunct
+\let\dlm@class@i\mathinner
+\let\dlm@class@b\mathbin
+\let\dlm@class@m\mathrel
+% \end{macrocode}
+
+% Define class selector for variable size.
+% The macro |\dlm@var@null| removes the extra space from
+% variable-size null delimiters
+% (|\left.|, |\middle.| and |\right.| apply the value
+% of |\nulldelimiterspace| only at the end of math processing,
+% even across blocks).
+% The macro |\dlm@var@kern| applies kerning unless in the script styles.
+%
+% \begin{macrocode}
+\newcommand{\dlm@var@null}[1]{\if.#1\kern-\nulldelimiterspace\fi}
+\newcommand{\dlm@var@kern}[1]{\nonscript\mkern#1}
\newcommand{\dlm@var}[1]{\csname dlm@var@#1\endcsname}
-\newcommand{\dlm@var@}[1]{\middle#1}
-\newcommand{\dlm@var@l}[1]{\mathopen{}\mathclose\bgroup\left#1}
-\newcommand{\dlm@var@r}[1]{\right#1\egroup}
-\newcommand{\dlm@var@o}[1]{\mathopen{}\middle#1\mathopen{}}
-\newcommand{\dlm@var@c}[1]{\mathclose{}\middle#1\mathclose{}}
-\newcommand{\dlm@var@m}[1]{\mathrel{}\middle#1\mathrel{}}
-\newcommand{\dlm@var@p}[1]{\middle#1\mathpunct{}}
-\newcommand{\dlm@var@b}[1]{\mathbin{}{}\mkern-\medmuskip%
- \middle#1\mkern-\medmuskip{}\mathbin{}}
+\newcommand{\dlm@var@}[1]{\dlm@var@null#1\middle#1}
+\let\dlm@var@o\dlm@var@
+\let\dlm@var@c\dlm@var@
+\newcommand{\dlm@var@p}[1]{\dlm@var@#1\dlm@var@kern\thinmuskip}
+\newcommand{\dlm@var@i}[1]{\dlm@var@kern\thinmuskip%
+ \dlm@var@#1\dlm@var@kern\thinmuskip}
+\newcommand{\dlm@var@b}[1]{\dlm@var@kern\medmuskip%
+ \dlm@var@#1\dlm@var@kern\medmuskip}
+\newcommand{\dlm@var@m}[1]{\dlm@var@kern\thickmuskip%
+ \dlm@var@#1\dlm@var@kern\thickmuskip}
+% \end{macrocode}
+
+% Definitions for selecting outer math class
+% |\mathopen|+|\mathclose| vs. |\mathinner|.
+%
+% \begin{macrocode}
+\newcommand{\dlm@open@i}{\mathinner{}\mathclose{}\mathopen}
+\newcommand{\dlm@close@i}{\mathclose{}\mathopen{}\mathinner}
+\newcommand{\dlm@inner@oc}{\mathopen{}\mathclose}
+\newcommand{\dlm@enclose@openclose}{%
+ \let\dlm@open\mathopen\let\dlm@close\mathclose\let\dlm@inner\dlm@inner@oc}
+\newcommand{\dlm@enclose@inner}{%
+ \let\dlm@open\dlm@open@i\let\dlm@close\dlm@close@i\let\dlm@inner\mathinner}
+% \end{macrocode}
+
+% Definitions for selecting inline vs. block insertion.
+%
+% \begin{macrocode}
+\newcommand{\dlm@inline@l}[1]{\dlm@open{#1}}
+\newcommand{\dlm@inline@r}[1]{\dlm@close{#1}}
+\newcommand{\dlm@block@l}[1]{\dlm@inner\bgroup\mathopen{#1}}
+\newcommand{\dlm@block@r}[1]{\mathclose{#1}\egroup}
+\newcommand{\dlm@enclose@inline}{%
+ \let\dlm@class@l\dlm@inline@l\let\dlm@class@r\dlm@inline@r}
+\newcommand{\dlm@enclose@block}{%
+ \let\dlm@class@l\dlm@block@l\let\dlm@class@r\dlm@block@r}
+% \end{macrocode}
+
+% Opening and closing definitions.
+%
+% \begin{macrocode}
+\newcommand{\dlm@plain@l}[1]{\dlm@class@l{\dlm@phantom{#1}}}
+\newcommand{\dlm@plain@r}[1]{\dlm@class@r{\dlm@phantom{#1}}}
+\newcommand{\dlm@big@l}[1]{\dlm@plain@l{\dlm@big@#1}}
+\newcommand{\dlm@big@r}[1]{\dlm@plain@r{\dlm@big@#1}}
+\newcommand{\dlm@var@l}[1]{\dlm@inner\bgroup\dlm@var@null#1\left#1}
+\newcommand{\dlm@var@r}[1]{\right#1\dlm@var@null#1\egroup}
+\newcommand{\dlm@var@pl}[1]{\dlm@var@l.\mathopen{#1}}
+\newcommand{\dlm@var@pr}[1]{\mathclose{#1}\dlm@var@r.}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Delimiter Storage.}
+%
+% Macros for storing and retrieving delimiter types using global registers.
+%
+% \begin{macrocode}
+\newcommand{\dlm@reg@save@init}[1]{%
+ \xdef#1{\delimsize\the\delimsize}\ifx\dlm@inner\mathinner%
+ \expandafter\gdef\expandafter#1\expandafter{#1\dlm@enclose@inner}\fi}
+\newcommand{\dlm@reg@save}[2]{%
+ \expandafter\dlm@reg@save@init\csname dlm@reg@init@#1\endcsname%
+ \expandafter\gdef\csname dlm@reg@sel@#1\endcsname{#2}}
+\newcommand{\dlm@reg@init}[1]{\csname dlm@reg@init@#1\endcsname}
+\newcommand{\dlm@reg@sel}[1]{\csname dlm@reg@sel@#1\endcsname}
% \end{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \paragraph{Optional Size Argument Processing.}
+% \paragraph{Flags Processing.}
%
-% Parse the optional argument following |\delim|\ldots\
-% commands to specify the size of delimiters.
-% If the next character in line begins a group (`|{|') it is assumed that
-% there is no optional argument.
-% Otherwise the selected size is written to |\dlm@arg|.
-% Unspecified or unknown sizes default to normal size.
-% Finally, execute the code passed as an explicit argument to |\dlm@parsesize|.
+% The macro |\parsedelimflags| parses the optional argument(s)
+% following |\delim|\ldots\ commands to adjust the presentation.
+% Parsing is terminated if the next character in line begins a group (`|{|')
+% and the delimiter set is composed by executing argument |#1|.
+% A size flag is stored and parsing continues.
+% A delimiter selector flag immediately displays the desired delimiter
+% by executing argument |#2|.
+% Unknown flags produce an error message.
%
% \begin{macrocode}
-\newcommand{\dlm@parsesize}[1]{\@ifnextchar\bgroup%
- {\dlm@parsesize@{#1}{0}}{\dlm@parsesize@{#1}}}
-\newcommand{\dlm@parsesize@}[2]{\let\dlm@arg\dlm@norm%
- \if0#2\let\dlm@arg\dlm@norm\fi%
- \if1#2\let\dlm@arg\dlm@big\fi%
- \if+#2\let\dlm@arg\dlm@big\fi%
- \if!#2\let\dlm@arg\dlm@big\fi%
- \if2#2\let\dlm@arg\dlm@Big\fi%
- \if3#2\let\dlm@arg\dlm@bigg\fi%
- \if4#2\let\dlm@arg\dlm@Bigg\fi%
- \if*#2\let\dlm@arg\dlm@var\fi%
- #1}
+\newcommand{\parsedelimflags}{\dlm@setsize{0.6}\let\dlm@phantom\@firstofone%
+ \dlm@enclose@openclose\dlm@enclose@inline\dlm@parseflags}
+\newcommand{\dlm@parseflags}[2]{%
+ \@ifnextchar\bgroup{#1}{\dlm@parseflag{#1}{#2}}}
+\newcommand{\dlm@parseflag}[3]{\begingroup%
+ \ifcsname dlm@parseflag@\string#3\endcsname%
+ \def\dlm@do{\csname dlm@parseflag@\string#3\endcsname{#1}{#2}}\else%
+ \def\dlm@do{\PackageError{delimset}%
+ {unknown delimiter set flag `\string#3'}{}#1}%
+ \fi\expandafter\endgroup\dlm@do}
+\newcommand{\dlm@parsedef}[3]{%
+ \expandafter\def\csname dlm@parseflag@\string#1\endcsname ##1##2#2{#3}}
% \end{macrocode}
+%
% Note that the delimited expression should be contained within a group
% such that nested delimiters will not overwrite the outer size definition.
+% Flags to adjust size.
+% Note that sizes 0 and 1 amount to 0.96 and 1.2 times
+% the current empty math box height.
+%
+% \begin{macrocode}
+\dlm@parsedef{!}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{+}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{0}{}{\dlm@setsize{0.6}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{1}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{2}{}{\dlm@setsize{2}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{3}{}{\dlm@setsize{3}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{4}{}{\dlm@setsize{4}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{^}{#3}{\dlm@setsize{#3}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{_}{#3}{\dlm@setabssize{#3}\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{*}{}{\dlm@setvar\dlm@parseflags{#1}{#2}}
+% \end{macrocode}
+
+% Flags to select individual delimiters.
+%
+% \begin{macrocode}
+\dlm@parsedef{(}{}{\def\selecteddelim{0}#2}
+\dlm@parsedef{|}{}{\def\selecteddelim{1}#2}
+\dlm@parsedef{,}{}{\def\selecteddelim{1}#2}
+\dlm@parsedef{)}{}{\def\selecteddelim{9}#2}
+\dlm@parsedef{?}{#3}{\def\selecteddelim{#3}#2}
+% \end{macrocode}
+
+% Flags to access registers.
+%
+% \begin{macrocode}
+\dlm@parsedef{[}{}{\dlm@reg@save{.}{#2}\def\selecteddelim{0}#2}
+\dlm@parsedef{]}{}{\dlm@reg@init{.}\def\selecteddelim{9}\dlm@reg@sel{.}}
+\dlm@parsedef{>}{#3}{\dlm@reg@save{#3}{#2}}
+\dlm@parsedef{<}{#3}{\dlm@reg@init{#3}\dlm@parseflags%
+ {\PackageError{delimset}{must select delimiter}{}}{\dlm@reg@sel{#3}}}
+% \end{macrocode}
+
+% Further flags.
+%
+% \begin{macrocode}
+\dlm@parsedef{.}{}{#1}
+\dlm@parsedef{:}{}{\dlm@enclose@block\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{'}{}{\dlm@enclose@openclose\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{"}{}{\dlm@enclose@inner\dlm@parseflags{#1}{#2}}
+\dlm@parsedef{-}{}{\let\dlm@phantom\phantom\dlm@parseflags{#1}{#2}}
+% \end{macrocode}
+
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \paragraph{Size Selection.}
+% \paragraph{Delimiter Display.}
%
-% The command |\selectdelim| reproduces the delimiter in the second argument
-% using the math class given in the first argument
-% using the previously selected size stored in |\dlm@arg|.
-% It appends the class identifier to the command stored in |\dlm@arg|
-% and calls the latter with the delimiter as the argument.
+% The command |\selectdelim| reproduces the delimiter in argument |#2|
+% using the math class given in argument |#1| and the previously stored size.
% If the class identifier is `|.|', just return the delimiter argument as is.
+% The commands |\selectdeliml| and |\selectdelimr|
+% implement the left and right delimiter classes, respectively.
+%
% \begin{macrocode}
-\newcommand{\selectdelim}[2][]{\if.#1#2\else\dlm@arg{#1}#2\fi}
+\newcommand{\selectdelim}[1][]{\begingroup\def\dlm@do{\@ifstar{\dlm@plain{#1}}%
+ {\dlm@ifvar{\dlm@var{#1}}{\dlm@big{#1}}}}%
+ \if.#1\let\dlm@do\@empty\fi\expandafter\endgroup\dlm@do}
+\newcommand{\selectdeliml}{\@ifstar%
+ {\dlm@ifvar\dlm@var@pl\dlm@plain@l}{\dlm@ifvar\dlm@var@l\dlm@big@l}}
+\newcommand{\selectdelimr}{\@ifstar%
+ {\dlm@ifvar\dlm@var@pr\dlm@plain@r}{\dlm@ifvar\dlm@var@r\dlm@big@r}}
% \end{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Declaration of New Delimiter Commands.}
%
-% Declares a new set of delimiters as the macro `|\|\emph{name}'.
-% This macro checks for an optional size argument and stores it in |\dlm@arg|.
+% The macro |\DeclareMathDelimiterSet| declares a new set of delimiters
+% as the macro `|\|\emph{name}'.
+% This macro checks for optional flags and stores the desired size.
% It then passes on to a second macro `|\dlm@dcl@|\emph{name}',
% which takes the actual code.
+% If the flags select an individual delimiter,
+% the macro `|\dlm@sel@|\emph{name}' is called instead.
+% The latter macro should be defined via |\DeclareMathDelimiterSel|
+% such that it produces the desired delimiter number |\selecteddelim|.
+%
% \begin{macrocode}
\newcommand{\DeclareMathDelimiterSet}[1]{\expandafter\dlm@declare%
\csname dlm@dcl@\expandafter\@gobble\string#1\endcsname{#1}}
-\def\dlm@declare#1#2{\newcommand{#2}{\dlm@parsesize{#1}}\newcommand{#1}}
+\def\dlm@declare#1#2{\expandafter\dlm@declare@%
+ \csname dlm@sel@\expandafter\@gobble\string#2\endcsname{#1}{#2}}
+\def\dlm@declare@#1#2#3{\newcommand{#3}{\parsedelimflags{#2}{#1}}%
+ \providecommand{#1}{}\newcommand{#2}}
+\newcommand{\DeclareMathDelimiterSel}[3]{\expandafter\def%
+ \csname dlm@sel@\expandafter\@gobble\string#1\endcsname%
+ {\ifcase\selecteddelim#2\else#3\fi}}
% \end{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1212,29 +1866,51 @@ alternative representation:
% are processed \emph{before} the optional size modifier.
%
% |\delim| is used for a single delimited expression.
+%
% \begin{macrocode}
-\newcommand{\delim}[2]
- {\dlm@parsesize{\dlm@dcl@delim{#1}{#2}}}
-\newcommand{\dlm@dcl@delim}[3]
- {\selectdelim[l]#1{#3}\selectdelim[r]#2}
+\newcommand{\delim}[2]{%
+ \parsedelimflags{\dlm@dcl@delim{#1}{#2}}{\dlm@sel@delim{#1}{#2}}}
+\newcommand{\dlm@dcl@delim}[3]{%
+ \selectdeliml#1{#3}\selectdelimr#2}
+\newcommand{\dlm@sel@delim}[2]{\ifcase\selecteddelim\selectdeliml#1%
+ \else\selectdelimr#2\fi}
% \end{macrocode}
% |\delimpair| is used for two delimited expressions separated
% by an intermediate delimiter.
+%
% \begin{macrocode}
-\newcommand{\delimpair}[3]
- {\dlm@parsesize{\dlm@dcl@delimpair{#1}{#2}{#3}}}
-\newcommand{\dlm@dcl@delimpair}[5]
- {\selectdelim[l]#1{#4}\selectdelim#2{#5}\selectdelim[r]#3}
+\newcommand{\delimpair}[3]{%
+ \parsedelimflags{\dlm@dcl@delimpair{#1}{#2}{#3}}%
+ {\dlm@sel@delimpair{#1}{#2}{#3}}}
+\newcommand{\dlm@dcl@delimpair}[5]{%
+ \selectdeliml#1{#4}\selectdelim#2{#5}\selectdelimr#3}
+\newcommand{\dlm@sel@delimpair}[3]{\ifcase\selecteddelim\selectdeliml#1%
+ \or\selectdelim#2\else\selectdelimr#3\fi}
% \end{macrocode}
% |\delimtriple| is used for three delimited expressions separated
% by two intermediate delimiters.
+%
% \begin{macrocode}
-\newcommand{\delimtriple}[4]
- {\dlm@parsesize{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}}
-\newcommand{\dlm@dcl@delimtriple}[7]
- {\selectdelim[l]#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelim[r]#4}
+\newcommand{\delimtriple}[4]{%
+ \parsedelimflags{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}%
+ {\dlm@sel@delimtriple{#1}{#2}{#3}{#4}}}
+\newcommand{\dlm@dcl@delimtriple}[7]{%
+ \selectdeliml#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelimr#4}
+\newcommand{\dlm@sel@delimtriple}[4]{\ifcase\selecteddelim\selectdeliml#1%
+ \or\selectdelim#2\or\selectdelim#3\else\selectdelimr#4\fi}
+% \end{macrocode}
+
+% |\usedelim| retrieves a stored delimiter type.
+% The argument `|]|' immediately closes the delimiter set
+% using the default register.
+% Otherwise the desired register must be followed
+% by the delimiter selection flag.
+%
+% \begin{macrocode}
+\newcommand{\usedelim}{\@ifnextchar]{\parsedelimflags{}{}}{\parsedelimflags%
+ {\PackageError{delimset}{must select delimiter}{}}{}<}}
% \end{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1243,17 +1919,18 @@ alternative representation:
% Define some common delimiters (by |providecommand| so as not to
% overwrite previously existing commands).
% This code is activated only if the package option |stddef| is set to |true|.
+%
% \begin{macrocode}
\ifdlm@std
\providecommand{\brk}[1][r]{\begingroup\def\dlm@use{\delim()}%
- \if r#1 \def\dlm@use{\delim()}\fi%
- \if s#1 \def\dlm@use{\delim[]}\fi%
- \if c#1 \def\dlm@use{\delim\{\}}\fi%
- \if a#1 \def\dlm@use{\delim<>}\fi%
+ \if r#1\def\dlm@use{\delim()}\fi%
+ \if s#1\def\dlm@use{\delim[]}\fi%
+ \if c#1\def\dlm@use{\delim\{\}}\fi%
+ \if a#1\def\dlm@use{\delim<>}\fi%
\expandafter\endgroup\dlm@use}
\providecommand{\eval}[1][v]{\begingroup\def\dlm@use{\delim.\rvert}%
- \if v#1 \def\dlm@use{\delim.\rvert}\fi%
- \if s#1 \def\dlm@use{\delim[]}\fi%
+ \if v#1\def\dlm@use{\delim.\rvert}\fi%
+ \if s#1\def\dlm@use{\delim[]}\fi%
\expandafter\endgroup\dlm@use}
\providecommand{\abs}{\delim\lvert\rvert}
\providecommand{\norm}{\delim\lVert\rVert}
@@ -1265,24 +1942,33 @@ alternative representation:
%
% Define some extended delimiters.
% This code is activated only if the package option |extdef| is set to |true|.
+%
% \begin{macrocode}
\ifdlm@ext
-\providecommand{\pair}{\delimpair({[.],})}
+\providecommand{\pair}{\delimpair({[p]*,})}
\providecommand{\set}{\delim\{\}}
\providecommand{\setcond}{\delimpair\{|\}}
-\providecommand{\intv}[1][c]{\begingroup\def\dlm@use{\delimpair[{[.],}]}%
- \if c#1 \def\dlm@use{\delimpair[{[.],}]}\fi%
- \if l#1 \def\dlm@use{\delimpair]{[.],}]}\fi%
- \if r#1 \def\dlm@use{\delimpair[{[.],}[}\fi%
- \if o#1 \def\dlm@use{\delimpair]{[.],}[}\fi%
+\providecommand{\intv}[1][c]{\begingroup%
+ \def\dlm@use{\delimpair[{[p]*,}]}%
+ \if c#1\def\dlm@use{\delimpair[{[p]*,}]}\fi%
+ \if l#1\def\dlm@use{\delimpair]{[p]*,}]}\fi%
+ \if r#1\def\dlm@use{\delimpair[{[p]*,}[}\fi%
+ \if o#1\def\dlm@use{\delimpair]{[p]*,}[}\fi%
\expandafter\endgroup\dlm@use}
\providecommand{\avg}{\delim<>}
\providecommand{\corr}{\delim<>}
-\providecommand{\comm}{\delimpair[{[.],}]}
-\providecommand{\acomm}{\delimpair\{{[.],}\}}
+\providecommand{\comm}{\delimpair[{[p]*,}]}
+\providecommand{\acomm}{\delimpair\{{[p]*,}\}}
\providecommand{\bra}{\delim<|}
\providecommand{\ket}{\delim|>}
\providecommand{\braket}{\delimpair<|>}
+\providecommand{\lfrac}[1][]{\begingroup%
+ \def\dlm@use{\delimpair./.}%
+ \if r#1\def\dlm@use{\delimpair(/)}\fi%
+ \if s#1\def\dlm@use{\delimpair[/]}\fi%
+ \if c#1\def\dlm@use{\delimpair\{/\}}\fi%
+ \if a#1\def\dlm@use{\delimpair</>}\fi%
+ \expandafter\endgroup\dlm@use}
\fi
% \end{macrocode}
diff --git a/macros/latex/contrib/delimset/delimset.ins b/macros/latex/contrib/delimset/delimset.ins
index daf870b5ff..68e41a7242 100644
--- a/macros/latex/contrib/delimset/delimset.ins
+++ b/macros/latex/contrib/delimset/delimset.ins
@@ -2,7 +2,7 @@
\input docstrip.tex
\keepsilent
-% delimset.ins Copyright (C) 2016-2018 Niklas Beisert
+% delimset.ins Copyright (C) 2016-2024 Niklas Beisert
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -14,7 +14,7 @@
\preamble
-Copyright (C) 2016-2018 Niklas Beisert
+Copyright (C) 2016-2024 Niklas Beisert
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/delimset/delimset.pdf b/macros/latex/contrib/delimset/delimset.pdf
index b964bea59d..734ebf01db 100644
--- a/macros/latex/contrib/delimset/delimset.pdf
+++ b/macros/latex/contrib/delimset/delimset.pdf
Binary files differ
diff --git a/macros/latex/contrib/doibanner/README.md b/macros/latex/contrib/doibanner/README.md
new file mode 100644
index 0000000000..a28fd46abd
--- /dev/null
+++ b/macros/latex/contrib/doibanner/README.md
@@ -0,0 +1,91 @@
+# doibanner
+
+A LaTeX package to generate DOI banners and links.
+
+The `doibanner` package allows to generate a banner for a declared [digital
+object identifier](https://www.doi.org/the-identifier/what-is-a-doi/) (DOI).
+It provides the `\doibanner` macro, which draws the banner using
+[`TikZ`](https://www.ctan.org/pkg/tikz) and adds a link via
+[`hyperref`](https://www.ctan.org/pkg/hyperref), if desired. Its output can
+be scaled by [`adjustbox`](https://www.ctan.org/pkg/adjustbox) and it might
+look as follows:
+
+![_DOI banner generated with `\doibanner`_](./example/doibanner_example.png "Example generated with doibanner")
+
+Latest release: 2024-07-28 v0.3
+
+
+## Installation
+
+Skip this section, if `doibanner` is already provided in your TeX distribution.
+You should be able to install it [from the CTAN](https://www.ctan.org/pkg/doibanner)
+via your distribution's utility (e.g. the TeX Live Utility).
+
+### Manual installation
+
+You can get the package's source code from the
+[project repository on Codeberg](https://codeberg.org/Cs137/doibanner).
+The repository contains a build script, which allows you to build the required
+files for the `doibanner` package and copy them into your _TeX Directory Structure_
+(TDS) using `l3build`. Ensure that `l3build` is installed on your system and run
+it from the repository's root directory as follows:
+
+```bash
+l3build install --full
+```
+
+The `--full` option ensures that all necessary files are built and installed.
+
+If you do not want to install the package into your TDS, but use it in a
+particular LaTeX project, follow the steps listed below.
+
+1. unpack `doibanner.sty` from the `doibanner.dtx` file
+ - using `l3build` and the `build.lua` script: `l3build unpack`, __or__
+ - directly via the installer file: `pdflatex doibanner.ins`
+2. copy the extracted `doibanner.sty` file into the same directory as your LaTeX sources.
+
+
+## Usage
+
+Please consult the [package documentation](http://mirrors.ctan.org/macros/latex/contrib/doibanner/doibanner.pdf)
+for detailed usage information.
+
+If you have any questions or need assistance, feel free to
+[open an issue on the repository](https://codeberg.org/Cs137/doibanner/issues).
+
+
+## Contributing
+
+Contributions to the `doibanner` package are very welcomed. Feel free to submit
+a [pull request (PR)](https://codeberg.org/Cs137/doibanner/pulls), if you would
+like to contribute to the project. In case you are unfamiliar with the process,
+consult the [forgejo documentation](https://forgejo.org/docs/latest/user/pull-requests-and-git-flow/)
+and follow the steps using this repository instead of the `example` repository.
+
+Create your [pull request (PR)](https://codeberg.org/Cs137/doibanner/pulls) to
+inform that you started working on a contribution. Provide a clear description
+of your envisaged changes and the motivation behind them, prefix the PR's title
+with ``WIP: `` until your changes are finalised.
+
+All kind of contributions are appreciated, whether they are
+bug fixes, new features, or improvements to the documentation.
+
+
+### Contributors
+
+- [Christian Schreinemachers](https://codeberg.org/Cs137)
+- [Marei Peischl](https://chaos.social/@TeXhackse)
+
+
+## Changes
+
+All notable changes to this project are documented in the file
+[`CHANGELOG.md`](https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md).
+
+
+## Credits
+
+This package was created and is maintained by Christian Schreinemachers, (C) 2024.
+The source code is hosted on [Codeberg](https://codeberg.org/Cs137/doibanner).
+It is subject to the [LaTeX Project Public License 1.3c](https://www.ctan.org/license/lppl1.3).
+
diff --git a/macros/latex/contrib/doibanner/doibanner.dtx b/macros/latex/contrib/doibanner/doibanner.dtx
new file mode 100644
index 0000000000..e004b53e31
--- /dev/null
+++ b/macros/latex/contrib/doibanner/doibanner.dtx
@@ -0,0 +1,412 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 Christian Schreinemachers
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The current maintainer of this work is Christian Schreinemachers.
+%
+% This work consists of the files
+% doibanner.dtx
+% doibanner.ins
+% README.md
+% and the derived files
+% doibanner.sty
+% doibanner.pdf
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \fi
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{doibanner}
+%<package> [2024-07-28 v0.3 Generate DOI banners and links]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage[%
+ pdfusetitle,%
+ hyperindex=false,%
+ pdfsubject={LaTeX package documentation},%
+ pdfkeywords={doibanner, latex, documentation}%
+]{hyperref}
+\usepackage{doibanner}
+\usepackage[toc]{multitoc}
+\usepackage{geometry}
+\usepackage{fancyvrb}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\DoNotIndex{\adjustbox,\begin,\bfseries,\DeclareKeys,\definecolor,\end,\fill,
+ \fontfamily,\href,\IfBooleanTF,\Large,\NewDocumentCommand,\node,
+ \ProcessKeyOptions,\RequirePackage,\relax,\selectfont,\SetKeys,
+ \sfdefault,\tikzstyle}
+\setcounter{IndexColumns}{2}
+\setlength{\IndexMin}{40ex}
+\setlength{\columnseprule}{.4pt}
+\addtolength{\oddsidemargin}{2cm}
+\addtolength{\textwidth}{-2cm}
+\begin{document}
+ \DocInput{doibanner.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \pagestyle{headings}
+%
+% \newcommand*{\package}[1]{\textsf{#1}}
+% \newcommand*{\opt}[1]{\texttt{#1}}
+% \newcommand*{\default}[1]{(default: \opt{#1})}
+%
+%
+% ^^A -----------------------------
+%
+% \changes{v0.3}{2024-07-28}{%
+% Add package options \opt{width} and \opt{label},
+% fix mistakes,
+% improve documentation,
+% remove unnecessary dependencies}
+% \changes{v0.2}{2024-07-23}{%
+% Initial release,
+% convert into dtx,
+% add documentation,
+% add \opt{urlbase} package option}
+% \changes{v0.1}{2021/05/09}{Initial version}
+%
+% \GetFileInfo{doibanner.sty}
+%
+%
+% ^^A -----------------------------
+%
+% \title{The \package{doibanner} package}
+% \author{Christian Schreinemachers}
+% \date{%
+% Released \filedate\thanks{%
+% \package{doibanner}~\fileversion
+% ~(\href{https://codeberg.org/Cs137/doibanner/releases/tag/\fileversion}{source code})}%
+% }
+% \maketitle
+%
+%
+% ^^A -----------------------------
+%
+% \begin{abstract}
+% The \package{doibanner} package allows to generate a banner for a declared
+% \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier}
+% (DOI). It provides the \cs{doibanner} macro, which draws the banner using
+% \package{TikZ} and adds a link via \package{hyperref}, if desired. Its
+% output can be scaled by \package{adjustbox} and it might look as follows:
+% \par\medskip\centering{\doibanner*[width=5cm]{xx.xxxx/yyyyyy.zzzzzzzz}}
+% \end{abstract}
+%
+%
+% ^^A -----------------------------
+%
+% \tableofcontents
+%
+%
+% ^^A -----------------------------
+%
+% \section{Introduction}
+% ^^A
+% I published several documents on \href{https://zenodo.org/}{\emph{Zenodo}},
+% a general-purpose open repository. They offer to register a
+% \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier}
+% (DOI) for an entry and download a banner of it. The latter can be added to
+% contents foreseen for the entry, or e.g. when referring to the entry in a
+% slide deck.
+%
+% Since I frequently use such banners in \LaTeX{} documents, I decided to
+% create a package that generates a similar banner and includes a link to the
+% corresponding URL. Additionally, this package eliminates the need to
+% manually download the banner and manage a file that might be used across
+% multiple documents.
+%
+% Due to the motivation, the resulting banner is heavily inspired by the
+% design applied in the banner offered by \emph{Zenodo}. It is drawn using
+% the \package{tikz} package, a link to its URL can be included with
+% \package{hyperref}, and it can be scaled using \package{adjustbox}.
+%
+% The application of this package is not limited to \emph{Zenodo}
+% depositions, it can be used to create a banner for a DOI that can
+% be included in any \LaTeX{} document.
+%
+%
+% ^^A -----------------------------
+%
+% \section{Usage}
+% ^^A
+% Load the package in your document's preamble and specify any of the
+% options described in the next subsection as follows:
+%
+% \begin{quote}
+% \cs{usepackage}\oarg{option(s)}\{doibanner\}
+% \end{quote}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Options}
+% ^^A
+% In order to change the default behaviour of this package, declare one
+% or more of the options described in this subsection with your desired
+% value.
+%
+% \DescribeMacro{label=\meta{string}}
+% \default{DOI} specifies the label (left part) of the DOI banner generated
+% by \cs{doibanner}. The widths of the left and right part of the banner
+% are fixed and do currently not take the length of the text displayed on
+% top into account. Consequently, only a short expression should be declared
+% as value for the option \opt{label}.
+%
+% \DescribeMacro{urlbase=\meta{string}}
+% \default{https://doi.org/} specifies the base URL to convert a DOI string
+% into its URL, for normal use cases this does not require any adjustment.
+%
+% \DescribeMacro{width=\meta{dimen}}
+% \default{3.6cm} specifies the total width of the DOI banner generated by
+% \cs{doibanner}. The widths of the individual parts of the banner are
+% fixed and can currently not be changed.
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Macros}
+% ^^A
+% \subsubsection*{\cs{doibanner}\oarg{dimen}\marg{string}}
+%
+% A DOI banner can be created using the command \cs{doibanner}, which requires
+% a DOI string as argument. Moreover, a \oarg{dimen} option can be defined.
+% The latter specifies the banner's width. If it is not declared, the value
+% of the \opt{width} package option is taken into account \default{3.6cm}.
+%
+% \DescribeMacro{\doibanner}
+% An execution of \cs{doibanner\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in this
+% banner: \doibanner{xx.xxxx/yyyyyy.zzzzzzzz} If a banner with a width of
+% let's say 3\,cm is desired, it can be achieved by specifying the macro option
+% \opt{width} accordingly (\cs{doibanner}\opt{[width=3cm]\{xx.xxxx/yyyyyy.zzzzzzzz\}}):
+% \doibanner[width=3cm]{xx.xxxx/yyyyyy.zzzzzzzz}
+%
+% \DescribeMacro{\doibanner*}
+% The starred version of the command leads to the same banner, but it does
+% not contain a link to the DOI's URL:
+% \doibanner*{xx.xxxx/yyyyyy.zzzzzzzz}
+%
+% \subsubsection*{\cs{doiurl}\marg{string}}
+% ^^A
+% \DescribeMacro{\doiurl}
+% An URL is generated by appending the provided \emph{string} to the string
+% defined as the package option \opt{urlbase}. The resulting link is labelled
+% with the DOI string.
+% A call of \cs{doiurl\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in
+% \doiurl{xx.xxxx/yyyyyy.zzzzzzzz}.
+%
+% \DescribeMacro{\doiurl*}
+% The command is also available as starred version, which prints the full
+% URL instead of the DOI string and does not include a link. Its output for
+% the aforementioned example is as follows:
+% \doiurl*{xx.xxxx/yyyyyy.zzzzzzzz}.
+%
+%
+% ^^A -----------------------------
+%
+% ^^A \section{Known limitations}
+% ^^A ^^A
+% ^^A \begin{itemize}
+% ^^A \item
+% ^^A \end{itemize}
+%
+%
+% ^^A -----------------------------
+%
+% \MaybeStop{
+%
+% \IndexPrologue{%
+% \section{Index}
+% Numbers written in italic refer to the page where the corresponding entry
+% is described; numbers underlined refer to the code line of the definition;
+% numbers in roman refer to the code lines where the entry is used.
+% }
+% \PrintIndex
+%
+% \GlossaryPrologue{%
+% \section{Change History}
+% The changes listed in this section aim to provide a brief overview of the
+% changes introduced into the package \package{doibanner}. The
+% \href{https://codeberg.org/Cs137/doibanner/}{package repository on Codeberg}
+% contains a
+% \href{https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md}{changelog file},
+% consult it to read a detailed description of the changes introduced into
+% this package.
+% }
+% \PrintChanges
+%
+% }
+%
+%
+% ^^A -----------------------------
+%
+% \section{Implementation}
+%
+% \subsection{Dependencies}
+% ^^A
+% In order to use \package{doibanner}, the packages
+% \href{https://www.ctan.org/pkg/adjustbox}{\package{adjustbox}},
+% \href{https://www.ctan.org/pkg/hyperref}{\package{hyperref}}, and
+% \href{https://www.ctan.org/pkg/tikz}{\package{tkiz}}
+% are required as package dependencies.
+%
+% \iffalse
+%<*package>
+% \fi
+% \begin{macrocode}
+\RequirePackage{adjustbox}
+\RequirePackage{hyperref}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Constants}
+% ^^A
+% Definition of colours for the banner areas and labels, custom colour
+% definitions are currently not supported.
+% \begin{macrocode}
+\definecolor{leftcolor}{RGB}{82,82,82}
+\definecolor{rightcolor}{RGB}{6,119,183}
+%
+\definecolor{toptextcolor}{RGB}{235,235,235}
+\definecolor{bottomtextcolor}{RGB}{59,59,59}
+% \end{macrocode}
+% ^^A
+% Definition of font and colour for the banner's top and bottom text layers.
+% \begin{macrocode}
+\tikzstyle{toptextstyle} = [
+ font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,toptextcolor]
+\tikzstyle{bottomtextstyle} = [
+ font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,bottomtextcolor]
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Options}
+% ^^A
+% The package options are internally available as \cs{@doibanner@}\meta{option}.
+% \begin{macrocode}
+\DeclareKeys[@doibanner]{
+ label.store = \@doibanner@label,
+ label.usage = load,
+ urlbase.store = \@doibanner@urlbase,
+ urlbase.usage = load,
+ width.store = \@doibanner@width,
+ width.usage = load,
+}
+% \end{macrocode}
+%
+% \subsubsection*{Assignement of default values}
+% \begin{macrocode}
+\SetKeys[@doibanner]{
+ label=DOI,
+ urlbase=https://doi.org/,
+ width=3.6cm,
+}
+% \end{macrocode}
+%
+% \subsubsection*{Processing of package options}
+% \begin{macrocode}
+\ProcessKeyOptions[@doibanner]\relax
+% \end{macrocode}
+%
+%
+% ^^A -----------------------------
+%
+% \subsection{Macros}
+%
+% \changes{v0.2}{2024-07-23}{Remove \cs{doi} macro}
+%
+% \begin{macro}{\doiurl}
+% \changes{v0.2}{2024-07-23}{Remove trailing space}
+% \oarg{dimen}\\
+% The \meta{string} is appended to the package option \opt{urlbase} to
+% generate the URL.
+% \begin{macrocode}
+\NewDocumentCommand\doiurl{s m}{%
+ \IfBooleanTF#1
+ {\@doibanner@urlbase#2}%
+ {\href{\@doibanner@urlbase#2}{#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doibanner@draw}
+% \changes{v0.3}{2024-07-28}{Rename macro, remove top part}
+% \oarg{dimen}\marg{string}\\
+% Draw the DOI banner including its \opt{label} and \meta{string}, provide
+% \opt{width=\meta{dimen}} to define the banners width as well.
+% \begin{macrocode}
+\NewDocumentCommand\@doibanner@draw{o m}{%
+ \adjustbox{#1}{%
+ \begin{tikzpicture}
+% left part
+ \fill [leftcolor,draw]
+ (1.5,0) --
+ ++(0,.8) {[rounded corners=5] --
+ ++(-1.5,0) --
+ ++(0,-.8)} --
+ cycle
+ {};
+ \node[bottomtextstyle] at (.75,.35) {\@doibanner@label};
+ \node[toptextstyle] at (.75,.4) {\@doibanner@label};
+% right part
+ \fill [rightcolor,draw]
+ (1.5,0) {[rounded corners=5] --
+ ++(6.5,0) --
+ ++(0,.8)} --
+ ++(-6.5,0) --
+ cycle
+ {};
+ \node[bottomtextstyle] at (4.75,.35) {#2};
+ \node[toptextstyle] at (4.75,.4) {#2};
+ \end{tikzpicture}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doibanner}
+% \changes{v0.3}{2024-07-28}{Add \opt{width} option}
+% \changes{v0.2}{2024-07-23}{Remove trailing space}
+% \oarg{dimen}\marg{string}\\
+% Display the DOI banner with or without (*) a link to its URL. Specify a
+% \oarg{dimen}, if you want a banner width deviating from the one defined
+% as \opt{width} package option.
+% \begin{macrocode}
+\NewDocumentCommand\doibanner{s O{width=\@doibanner@width} m}{%
+ \IfBooleanTF#1
+ {\@doibanner@draw[#2]{#3}}%
+ {\href{\@doibanner@urlbase#3}{\@doibanner@draw[#2]{#3}}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
+%%
+%% End of file `doibanner.dtx'.
+
diff --git a/macros/latex/contrib/doibanner/doibanner.ins b/macros/latex/contrib/doibanner/doibanner.ins
new file mode 100644
index 0000000000..97cfbb3fbb
--- /dev/null
+++ b/macros/latex/contrib/doibanner/doibanner.ins
@@ -0,0 +1,85 @@
+%%
+%% Copyright (C) 2024 Christian Schreinemachers
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008-05-04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The current maintainer of this work is Christian Schreinemachers.
+%%
+%% This work consists of the files
+%% doibanner.dtx
+%% doibanner.ins
+%% README.md
+%% and the derived files
+%% doibanner.sty
+%% doibanner.pdf
+%%
+This work has the LPPL maintenance status `maintained'.
+
+The current maintainer of this work is Christian Schreinemachers.
+
+This work consists of the files
+ doibanner.dtx
+ doibanner.ins
+ README.md
+and the derived files
+ doibanner.sty
+ doibanner.pdf
+\input docstrip.tex
+\keepsilent
+
+\preamble
+
+Copyright (C) 2024 Christian Schreinemachers
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008-05-04 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The current maintainer of this work is
+ Christian Schreinemachers.
+
+This work consists of the files
+ doibanner.dtx
+ doibanner.ins
+and the derived files
+ doibanner.sty
+ doibanner.pdf
+
+\endpreamble
+\askforoverwritefalse
+\generate{\file{doibanner.sty}{\from{doibanner.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* doibanner.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* bib2qr.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{****************************************************}
+\endbatchfile
+%%
+%% End of file `doibanner.ins'.
+
diff --git a/macros/latex/contrib/doibanner/doibanner.pdf b/macros/latex/contrib/doibanner/doibanner.pdf
new file mode 100644
index 0000000000..546b0c9de1
--- /dev/null
+++ b/macros/latex/contrib/doibanner/doibanner.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/README.md b/macros/latex/contrib/easybook/README.md
index c0d87f5b74..ae05afb8d1 100644
--- a/macros/latex/contrib/easybook/README.md
+++ b/macros/latex/contrib/easybook/README.md
@@ -1,5 +1,5 @@
# The `easybook` document class
-Easily typesetting Chinese theses or books (v2024co)
+Easily typesetting Chinese theses or books (v2024dd)
## Abstract
`easybook` is a pure academic template created based on the `ctexbook` book document class. It also has the functions of `book` and `article` document class. Combined with the general framework design of the theses of many universities in China, providing multiple commands and interfaces allows users to easily customize the theses templates. Its basic macro package `easybase` can also be used with `ctex` and standard document classes.
@@ -11,5 +11,5 @@ This work may be distributed and/or modified under the conditions of the LPPL-1.
| [Gitee](https://gitee.com/texno3/easybook) | [Github](https://github.com/texno3/easybook) | [CTAN](https://ctan.org/pkg/easybook) |
## Maintainer
-QuYi<br/>
+Qu Yi<br/>
Email: toquyi@163.com \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 4f7a85fc70..4904e90a21 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,7 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<class|package>\NeedsTeXFormat{LaTeX2e}[2021/11/15]
%<*class>
-\ProvidesExplClass{easybook}{2024/07/06}{2024co}
+\ProvidesExplClass{easybook}{2024/08/02}{2024dd}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -301,7 +301,7 @@
%</class>
%<*package>
\RequirePackage{etoolbox}
-\ProvidesExplPackage{easybase}{2024/07/06}{2024co}
+\ProvidesExplPackage{easybase}{2024/08/02}{2024dd}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -313,7 +313,7 @@
\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
\cs_generate_variant:Nn \ctex_define:nn { nx }
\cs_generate_variant:Nn \eb_set_hyperref:n { x }
-\cs_generate_variant:Nn \eb_at_begin_environment:nn { on }
+\cs_generate_variant:Nn \eb_at_begin_environment:nn { o }
\cs_generate_variant:Nn \tl_if_novalue:nF { V }
\cs_set_protected:Npn \ctex_define:nn #1
@@ -372,7 +372,11 @@
\IfNoValueTF{#1}
{\IfFileExists{#2.sty}{\RequirePackage{#2}[#3]}{}}
{\IfFileExists{#2.sty}{\RequirePackage[#1]{#2}[#3]}{}}
+ \IfFileExists{#2.sty}{}
+ {\msg_warning:nnn { easybase } { package-not-found } {#2}}
}
+\msg_new:nnn { easybase } { package-not-found }
+ { The~macro~package~'#1'~can't~be~found. }
\cs_new_protected:Npn \ebloadpackage #1
{
\int_compare:nTF { \clist_count:n {#1} <= 1 }
@@ -802,7 +806,7 @@
\UseFntSymbsList{empty}
\cs_set_eq:NN \DefineFntSymbols \SetFntSymbsList
\cs_set_eq:NN \setfntsymbol \UseFntSymbsList
-\cs_new:Npn \eb_int_format_trans:NN #1
+\cs_new:Npn \eb_int_type_trans:NN #1
{
\str_case:nn {#1}
{
@@ -837,29 +841,44 @@
}
\cs_set_eq:NN \thedownfootnote \thefootnote
}
+\cs_generate_variant:Nn \msg_warning:nnnn { nnnV }
\cs_new_protected:Npn \eb_fnmarktext_short_label_set:Nn #1#2
{
\tl_set:Nn \l__eb_fnmarktext_short_tokens_tl {#2}
\clist_map_inline:nn
{ A,a,1,I,i,c,s }
{
- \regex_match:nnT {##1} {#2}
+ \regex_match:nnTF {##1} {#2}
{
\regex_replace_once:nnN {##1}
- { \c{eb_int_format_trans:NN} ##1 \c{c@footnote} }
+ { \c{eb_int_type_trans:NN} ##1 \c{c@footnote} }
\l__eb_fnmarktext_short_tokens_tl
- \seq_map_break:
+ \cs_set_eq:NN #1 \l__eb_fnmarktext_short_tokens_tl
+ \clist_map_break:
+ }
+ {
+ \str_if_eq:nnT {##1} { s }
+ {
+ \str_if_eq:nnTF {#1} { \thefootnote }
+ { \str_set:Nn \l_tmpa_str { \thedownfootnote } }
+ { \str_set:Nn \l_tmpa_str { \theupfootnote } }
+ \msg_warning:nnnV { easybase } { unknown-fnt-type } {#2} \l_tmpa_str
+ }
}
}
- \cs_set_eq:NN #1 \l__eb_fnmarktext_short_tokens_tl
\cs_set_eq:NN \thedownfootnote \thefootnote
}
+\msg_new:nnn { easybase } { unknown-fnt-type }
+ {
+ The~'#1'~includes~unknown~footnote~numbering~type \\
+ in~#2.
+ }
\cs_new_protected:Npn \eb_footnote_value_handle:n #1
{
\str_case:nnF {#1}
{
{ bottom }
- { \bool_set_true:N \l__eb_fnpara_bottom_bool }
+ { \PushFntBottom }
{ flush }
{
\tl_set:Nn \l__eb_footnote_value_tl { plain }
@@ -892,7 +911,6 @@
}
}
-\bool_new:N \l__eb_fnpara_bottom_bool
\tl_new:N \l__eb_fnmarktext_format_tl
\tl_new:N \l__eb_fncustom_format_tl
\clist_new:N \l__eb_footnote_value_clist
@@ -950,58 +968,91 @@
{ page } { \counterwithin*{footnote}{page} }
}
{ \counterwithout*{footnote}{chapter} }
- \eb_fnpara_if_pos_bottom:
}
-\cs_new_protected:Npn \setspread #1 { \linespread{#1}\selectfont }
-\cs_new:Npn \eb@ifvoid #1#2#3 { \ifvoid #1#2\else #3\fi }
-\cs_new_protected:Npn \eb_fnpara_if_pos_bottom:
+
+\def\@if@footnotes@TF #1#2 {\ifvoid\footins #2\else #1\fi}
+\def\@outputbox@removebskip
+ {
+ \ifx\@textbottom\relax\else
+ \@outputbox@append
+ {
+ \@tempskipa\lastskip
+ \ifnum\gluestretchorder\@tempskipa>\z@
+ \vskip -\@tempskipa
+ \xdef\@outputbox@reinsertbskip
+ {\noexpand\@outputbox@append{\vskip\the\@tempskipa}}
+ \else
+ \global\let\@outputbox@reinsertbskip\relax
+ \fi
+ }
+ \fi
+ }
+\let\@outputbox@reinsertbskip\relax
+\def\@outputbox@append #1
+ {
+ \setbox\@outputbox\vbox
+ {
+ \boxmaxdepth\@maxdepth
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ #1
+ }
+ }
+\def\@outputbox@attachfloats{\@combinefloats}
+\NewHook{makecol/footins/before}
+\NewHook{makecol/footins/begin}
+\def\@outputbox@appendfootnotes
{
- \bool_if:NT \l__eb_fnpara_bottom_bool
+ \@if@footnotes@TF
{
- \IfPackageLoadedTF{footmisc}
- {\msg_warning:nn { easybase } { bottom-not-compatible }}
+ \UseHook{makecol/footins/before}
+ \@outputbox@append
{
- \cs_set:Npn \@makecol
- {
- \setbox\@outputbox\box\@cclv
- \let\@elt\relax
- \xdef\@freelist{\@freelist\@midlist}
- \global\let\@midlist\@empty
- \@combinefloats
- \eb@ifvoid\footins{}
- {
- \setbox\@outputbox\vbox
- {
- \boxmaxdepth\@maxdepth
- \unvbox\@outputbox
- \vfill\relax
- \vskip\skip\footins
- \color@begingroup
- \normalcolor\footnoterule
- \unvbox\footins
- \color@endgroup
- }
- }
- \eb@ifvoid\@kludgeins
- {\@makespecialcolbox}
- {
- \setbox\@outputbox\vbox to\@colht
- {
- \@texttop\dimen@\dp\@outputbox
- \unvbox\@outputbox
- \vskip -\dimen@\@textbottom
- }
- }
- \global\maxdepth\@maxdepth
- }
+ \vskip\skip\footins
+ \UseHook{makecol/footins/begin}
+ \color@begingroup
+ \normalcolor
+ \footnoterule
+ \@nameuse{pdfcolfoot@current}
+ \unvbox\footins
+ \color@endgroup
}
+ }{}
+ }
+\def\@makenormalcolbox
+ {
+ \setbox\@outputbox\vbox to\@colht
+ {
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip -\dimen@
+ \@textbottom
}
}
-\msg_new:nnn { easybase } { bottom-not-compatible }
+\cs_new_protected:Npn \PushFntBottom
{
- Not~compatible~with~the~'footmisc'~package. \\
- Please~use~the~'bottom'~option~of~'footmisc'~package.
+ \cs_set:Npn \@makecol
+ {
+ \setbox\@outputbox\box\@cclv
+ \@outputbox@removebskip
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@midlist}
+ \global\let\@midlist\@empty
+ \@outputbox@attachfloats
+ \@if@footnotes@TF
+ {\@outputbox@append{\vfill}}
+ {\@outputbox@reinsertbskip}
+ \@outputbox@appendfootnotes
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \@makenormalcolbox
+ \fi
+ \global\maxdepth\@maxdepth
+ }
}
+\@onlypreamble\PushFntBottom
\cs_new_protected:Npn \eb_footnote_direct_hang:
{
@@ -1057,6 +1108,7 @@
\l__eb_fnpara_format_tl{#1}
\tl_if_eq:NnT \l__eb_footnote_value_tl { hang } { \par }
}
+\cs_new_protected:Npn \setspread #1 { \linespread{#1}\selectfont }
\clist_map_inline:nn { \@footnotetext,\@mpfootnotetext }
{
\eb_patch_cmd:Nnn #1
@@ -1316,7 +1368,7 @@
{
\IfBooleanTF{##1}
{
- \use:c {#1}*{\phantomsection ##3}
+ \use:c {#1}*{##3}
\CTEX@addtocline{#1}{##2}
\tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
\use:c { #1mark }{##2}
@@ -1338,22 +1390,22 @@
\skip_if_eq:nnF { \eb@toc@lol@skip } { \c_zero_skip }
{ \addtocontents{lol}{\protect\addvspace{\skip_use:N \eb@toc@lol@skip}} }
}
-\cs_new_protected:Npn \eb_title_base_set_eq:nn #1#2
- {
- \tl_set_eq:cc { CTEX@#2@beforeskip } { CTEX@#1@beforeskip }
- \tl_set_eq:cc { CTEX@#2@afterskip } { CTEX@#1@afterskip }
- \bool_set_eq:cc { CTEX@#2@numbering } { CTEX@#1@numbering }
- \bool_set_eq:cc { CTEX@#2@fixskip } { CTEX@#1@fixskip }
- \bool_set_eq:cc { CTEX@#2@hang } { CTEX@#1@hang }
- \bool_set_eq:cc { CTEX@#2@runin } { CTEX@#1@runin }
- \cs_set_eq:cc { CTEX@#2@tocline } { CTEX@#1@tocline }
- \tl_set_eq:cc { CTEX@#2@break } { CTEX@#1@break }
- \tl_set_eq:cc { CTEX@#2@format } { CTEX@#1@format }
- \tl_set_eq:cc { CTEX@#2@nameformat } { CTEX@#1@nameformat }
- \tl_set_eq:cc { CTEX@#2@numberformat } { CTEX@#1@numberformat }
- \tl_set_eq:cc { CTEX@#2@titleformat } { CTEX@#1@titleformat }
- \tl_set_eq:cc { CTEX@#2@aftername } { CTEX@#1@aftername }
- \tl_set_eq:cc { CTEX@#2@aftertitle } { CTEX@#1@aftertitle }
+\cs_new_protected:Npn \CopyTitleFormat #1#2
+ {
+ \tl_set_eq:cc { CTEX@#1@beforeskip } { CTEX@#2@beforeskip }
+ \tl_set_eq:cc { CTEX@#1@afterskip } { CTEX@#2@afterskip }
+ \bool_set_eq:cc { CTEX@#1@numbering } { CTEX@#2@numbering }
+ \bool_set_eq:cc { CTEX@#1@fixskip } { CTEX@#2@fixskip }
+ \bool_set_eq:cc { CTEX@#1@hang } { CTEX@#2@hang }
+ \bool_set_eq:cc { CTEX@#1@runin } { CTEX@#2@runin }
+ \cs_set_eq:cc { CTEX@#1@tocline } { CTEX@#2@tocline }
+ \tl_set_eq:cc { CTEX@#1@break } { CTEX@#2@break }
+ \tl_set_eq:cc { CTEX@#1@format } { CTEX@#2@format }
+ \tl_set_eq:cc { CTEX@#1@nameformat } { CTEX@#2@nameformat }
+ \tl_set_eq:cc { CTEX@#1@numberformat } { CTEX@#2@numberformat }
+ \tl_set_eq:cc { CTEX@#1@titleformat } { CTEX@#2@titleformat }
+ \tl_set_eq:cc { CTEX@#1@aftername } { CTEX@#2@aftername }
+ \tl_set_eq:cc { CTEX@#1@aftertitle } { CTEX@#2@aftertitle }
}
\NewDocumentCommand{\NewTitleCommand}{omm}
{
@@ -1375,7 +1427,7 @@
{ \CTEXnumberline{##1}##2 }
\exp_args:Nc \providecommand { ttll@#2 }{#3}
\exp_args:Nc \providecommand { toclevel@#2 }{#3}
- \IfValueT{#1}{\eb_title_base_set_eq:nn {#1} {#2}}
+ \IfValueT{#1}{\CopyTitleFormat{#2}{#1}}
}
\NewDocumentCommand{\NewTitleEntryCommand}{O{toc}m}
{
@@ -1384,35 +1436,39 @@
\bool_if:cTF { CTEX@#2@numbering }
{ \CTEX@ifnametrue }
{ \CTEX@ifnamefalse }
+ \CTEX@makeanchor{#2*}
\addcontentsline{#1}{#2}{\use:c { CTEX@#2@tocline }{#2}{##1}}
}
}
\ctex_define:nn { tools }
{
- hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl,
- hyphen-table .tl_set:N = \l__eb_hyphen_table_tl,
- hyphen-listing .tl_set:N = \l__eb_hyphen_listing_tl,
- hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl,
- hyphen-every .meta:n =
+ hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl,
+ hyphen-table .tl_set:N = \l__eb_hyphen_table_tl,
+ hyphen-lstlisting .tl_set:N = \l__eb_hyphen_lstlisting_tl,
+ hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl,
+ hyphen-every .meta:n =
{
- hyphen-figure = {#1},hyphen-table = {#1},
- hyphen-listing = {#1},hyphen-equation = {#1}
+ hyphen-figure = {#1},hyphen-table = {#1},
+ hyphen-lstlisting = {#1},hyphen-equation = {#1}
},
- hyphen-every .initial:n = .,
- unknown .code:n = \eb_msg_deprecated_option:n { tools }
+ hyphen-every .initial:n = .,
+ unknown .code:n = \eb_msg_deprecated_option:n { tools }
}
-\clist_map_inline:nn
- { figure,table,listing,equation }
+\AtBeginDocument
{
- \cs_set:cpn { the#1 }
+ \clist_map_inline:nn
+ { figure,table,lstlisting,equation }
{
- \int_compare:nNnT { \c@chapter } > { 0 }
+ \cs_set:cpn { the#1 }
{
- \thechapter
- \tl_use:c { l__eb_hyphen_#1_tl }
+ \int_compare:nNnT { \c@chapter } > { 0 }
+ {
+ \thechapter
+ \tl_use:c { l__eb_hyphen_#1_tl }
+ }
+ \int_to_arabic:v { c@#1 }
}
- \int_to_arabic:v { c@#1 }
}
}
@@ -1451,7 +1507,7 @@
\tl_set:Nn \eb@toc@title@level {#1}
\eb_toc_extract_level:
},
- level .initial:e =
+ level .initial:x =
{
\bool_if:NTF \l__eb_class_mode_book_bool
{ \exp_not:N \bichapter* }
@@ -1594,8 +1650,9 @@
{ \protect\numberline{#3}{#4} }
}
}
-\cs_new_protected:Npn \AllotCaptionExt #1#2
+\cs_new_protected:Npn \AssignCaptionExt #1#2
{ \tl_set:cn { ext@#1 } {#2} }
+\cs_set_eq:NN \AllotCaptionExt \AssignCaptionExt
\ctex_define:n
{
bicontentsname .tl_set:N = \bicontentsname,
@@ -1793,6 +1850,8 @@
hang .initial:n = true,
pagenumwd .code:n = \contentsmargin{#1},
pagenumwd .initial:n = 1.55em,
+ fileopen .tl_set:N = \l__eb_fileopen_type_tl,
+ fileopen .initial:n = once,
unknown .code:n = \eb_msg_deprecated_option:n { toc }
}
@@ -1821,10 +1880,14 @@
}
\AddToHook{enddocument/afterlastpage}
{
- \IfHookEmptyTF{starttoc/after}{}
- {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
+ \tl_if_eq:NnTF \l__eb_fileopen_type_tl { once }
+ { \iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[*] } }
+ {
+ \IfHookEmptyTF{starttoc/after}{}
+ {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
+ }
}
-\cs_set_protected:Npn \AllotPartialExt #1#2
+\cs_set_protected:Npn \AssignPartialExt #1#2
{
\tl_if_exist:cTF { ttl@partial#1 }
{ \msg_warning:nnnn { easybase } { repeated-ptoc } {#1} {#2} }
@@ -1834,12 +1897,13 @@
{\ttl@topartial{#1}{##1}{##2}}
}
}
+\cs_set_eq:NN \AllotPartialExt \AssignPartialExt
\msg_new:nnn { easybase } { repeated-ptoc }
{
Local~directory~file~'#2'~of~directory~type~'#1'~is \\
repeatedly~allocated.
}
-\AllotPartialExt{lol}{pll}
+\AssignPartialExt{lol}{pll}
\cs_new_protected:Npn \RegisterTitleIfname #1
{
@@ -1905,7 +1969,7 @@
}
},
subsection =
- { tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.4em } }
+ { tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.5em } }
}
\ctex_at_end_package:nn { imakeidx }
@@ -1968,19 +2032,19 @@
\ctex_define:nn { font }
{
- caption-table .tl_set:N = \l__eb_font_caption_table_tl,
- caption-figure .tl_set:N = \l__eb_font_caption_figure_tl,
- caption-listing .tl_set:N = \l__eb_font_caption_listing_tl,
- caption-every .meta:n =
+ caption-table .tl_set:N = \l__eb_font_caption_table_tl,
+ caption-figure .tl_set:N = \l__eb_font_caption_figure_tl,
+ caption-lstlisting .tl_set:N = \l__eb_font_caption_lstlisting_tl,
+ caption-every .meta:n =
{
- caption-table = {#1},caption-figure = {#1},
- caption-listing = {#1}
+ caption-table = {#1},caption-figure = {#1},
+ caption-lstlisting = {#1}
},
- caption-every .initial:n = \sffamily\small,
- footnote .tl_set:N = \eb@font@footnote,
- marginpar .tl_set:N = \marginfont,
- marginpar .initial:n = \footnotesize,
- unknown .code:n = \eb_msg_deprecated_option:n { font }
+ caption-every .initial:n = \sffamily\small,
+ footnote .tl_set:N = \eb@font@footnote,
+ marginpar .tl_set:N = \marginfont,
+ marginpar .initial:n = \footnotesize,
+ unknown .code:n = \eb_msg_deprecated_option:n { font }
}
\cs_new_protected:Npn \ebaddtofont #1#2
{
@@ -1990,13 +2054,13 @@
{ \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} }
{ figure }
{ \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} }
- { listing }
- { \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} }
+ { lstlisting }
+ { \tl_put_right:Nn \l__eb_font_caption_lstlisting_tl {#2} }
{ every }
{
\tl_put_right:Nn \l__eb_font_caption_table_tl {#2}
\tl_put_right:Nn \l__eb_font_caption_figure_tl {#2}
- \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2}
+ \tl_put_right:Nn \l__eb_font_caption_lstlisting_tl {#2}
}
{ footnote }
{ \tl_put_right:Nn \eb@font@footnote {#2} }
@@ -2025,7 +2089,7 @@
fntspread .initial:n = 1.2,
captab-spread .fp_set:N = \l__eb_spread_caption_table_fp,
capfig-spread .fp_set:N = \l__eb_spread_caption_figure_fp,
- caplst-spread .fp_set:N = \l__eb_spread_caption_listing_fp,
+ caplst-spread .fp_set:N = \l__eb_spread_caption_lstlisting_fp,
caption-spread .meta:n =
{
captab-spread = {#1},capfig-spread = {#1},
@@ -2066,7 +2130,7 @@
\AfterPreamble{\skip_set:Nn \abovedisplayshortskip { 0ex plus .1ex }}
\clist_map_inline:nn
- { table,figure,listing }
+ { table,figure,lstlisting }
{
\DeclareCaptionFont{eb@#1@font}
{
@@ -2084,7 +2148,7 @@
}
\captionsetup[table]{font = eb@table@font}
\captionsetup[figure]{font = eb@figure@font}
-\captionsetup[lstlisting]{font = eb@listing@font}
+\captionsetup[lstlisting]{font = eb@lstlisting@font}
\ctex_at_end_package:nn { bicaption }
{
\captionsetup[figure][bi-second]{name = Figure}
@@ -2258,6 +2322,9 @@
\listnumberline{#2}
\thmtname\thmtifnote{~(\thmtnote)}{}
}
+ \cs_gset:cpn { thmt@contentsline@#2 }
+ { \thmt@contentslineIfNamed }
+ \exp_args:Nc \providecommand { p@#2 }[1]{##1}
}
\ctex_define:nn { thmt }
{
@@ -2278,7 +2345,7 @@
\theoremstyle{default}
\cs_undefine:N \proof
\DeclareFloatList{theorem}{loe}
- \AllotPartialExt{loe}{ple}
+ \AssignPartialExt{loe}{ple}
\eb_preto_cmd:nn { listoftheorems }
{
\group_begin:
@@ -2664,7 +2731,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/07/06}{2024co}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/08/02}{2024dd}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 6c907b1be5..03b9b72b3f 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index fbc6cc7562..114610e5f9 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024co,
- date = 2024/07/06,
+ version = v2024dd,
+ date = 2024/08/02,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -57,10 +57,8 @@
\setlist[cnltxlist]
{
leftmargin = 0pt,
- labelwidth = 2em,
itemindent = -1em,
- labelsep = 0pt,
- listparindent = 2em,
+ listparindent = \parindent,
topsep = \smallskipamount,
itemsep = \smallskipamount,
partopsep = 0ex,
@@ -253,6 +251,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
cell{2}{5} = PaleTurquoise,
cell{3}{2} = PaleTurquoise,
cell{4}{5} = PaleTurquoise,
+ cell{5}{2} = PaleTurquoise,
cell{5}{1} = GreenYellow,
cell{1}{2} = GreenYellow,
cell{3}{1,4} = GreenYellow
@@ -300,6 +299,12 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\setCJKmonofont{FangSong}
\newCJKfontfamily[song]\songti{SimSun}
\end{ctexexam}
+
+ 如果用 \textsf{overleaf} 或 \textsf{TexPage} 等在线平台编译文档,则只有 \code{fandol} 字体可用。使用其它字体可将字体文件上传至项目文件夹,例如上传至 \code{font} 文件夹设置正文和无衬线字体:
+ \begin{ctexexam}
+ \setCJKmainfont{simsun.ttc}[Path = ./font/]
+ \setCJKsansfont{simhei.ttf}[Path = ./font/]
+ \end{ctexexam}
\keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag
预置的英文字体相关配置方案如\ref{table:english font} 所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用默认的Latin Modern或其它英文字体,可以使用 \code{auto} 选项配合 \pkg*{fontspec} 宏包的相关命令进行设置。
\begin{longtblr}
@@ -406,12 +411,14 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\ctexset{tools/figurepath = path1}
\ctexset{tools/figurepath = {path2}{path3}}
\end{ctexexam}
+
+ 以下几个选项用于设置题注编号的连字符,\code{chapter} 计数器的值大于0时连字符才有意义。若需更改题注编号的输出格式可在正文中重新定义 \cs*{the}\meta{计数器} 命令。
\keyval{hyphen-figure}{图片连字符}\Default{\Marg{.}}
设置图片题注编号的连字符。
\keyval{hyphen-table}{表格连字符}\Default{\Marg{.}}
设置表格题注编号的连字符。
- \keyval{hyphen-listing}{代码连字符}\Default{\Marg{.}}
- 设置代码题注编号的连字符。
+ \keyval{hyphen-lstlisting}{代码连字符}\Default{\Marg{.}}
+ 设置代码题注编号的连字符。\pkg*{listings} 宏包的 \option{numberbychapter} 选项失效。
\keyval{hyphen-equation}{公式连字符}\Default{\Marg{.}}
设置公式题注编号的连字符。
\keyval{hyphen-every}{连字符}\Default{\Marg{.}}
@@ -474,7 +481,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
\keyval{caption-figure}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
设置图片题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
- \keyval{caption-listing}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
+ \keyval{caption-lstlisting}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
设置代码题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
\keyval{caption-every}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
同时设置图片、表格和代码题注的字体命令。
@@ -598,7 +605,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt}
定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
\command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}]
- 如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 加入目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。
+ 如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 传给目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。
\command{thmtifname}[\marg{存在编号代码}\marg{不存在编号代码}]
在 \meta{标题定义} 中测试当前定理是否有编号从而输出不同的内容,定理风格选项 \keyis{numbered}{no} 设置当前定理环境没有编号。
\begin{ctexexam}
@@ -710,6 +717,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\ebhdrset{footnotetype = plain,footnotetype = bottom}
\ebhdrset{footnotetype = {hang,bottom}}
\end{ctexexam}
+ \command{PushFntBottom}\newtagv{2024cx}%
+ 默认情况下当具有 \code{b} 参数的底部浮动体与脚注同时存在时,脚注将位于浮动体上部。此命令可使脚注始终位于页面底部,与 \keyis{footnotetype}{bottom} 作用相同,只能在导言区全局使用。
\keyval{fnfirstindent}{刚性长度}\Default{1em}
每个脚注首段的首行缩进(悬挂缩进 \code{hang} 为整段缩进),等于长度 \cs{fnfirstindent} 的值。
\keyval{fnafterindent}{刚性长度}\Default{2em}
@@ -869,16 +878,16 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\DeclareFloatList{algorithm}{loa}
\listofalgorithms[multoc] % 在正文中输出双栏算法目录
\end{ctexexam}
- \command{AllotCaptionExt}[\marg{条目名}\marg{扩展名}]
+ \command{AssignCaptionExt}[\marg{条目名}\marg{扩展名}]
给条目类型名称为 \meta{条目名} 的标题分配目录文件 \meta{扩展名},注意 \meta{扩展名} 需要被定义在 \cs*{ext@}\meta{条目名} 命令中才有效(\pkg*{caption} 宏包的默认定义形式)。可以使不同的 \meta{条目名} 共享一个目录:
\begin{ctexexam}
- \AllotCaptionExt{table}{lof}
+ \AssignCaptionExt{table}{lof}
\newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令
\end{ctexexam}
- \command{AllotPartialExt}[\marg{扩展名1}\marg{扩展名2}]\newtagv{2024bk}
+ \command{AssignPartialExt}[\marg{扩展名1}\marg{扩展名2}]\newtagv{2024bk}
给目录文件扩展名为 \meta{扩展名1} 的目录分配扩展名为 \meta{扩展名2} 的局部目录\footnote{此功能需要\textbf{2023/06/01}以后的 \hologo{LaTeX} 内核支持。},预注册的条目均无需再分配。用于搭配题注标题 \cs{caption} 命令和 \pkg*{titletoc} 宏包的局部题注目录命令。
\begin{ctexexam}
- \AllotPartialExt{loa}{pla}
+ \AssignPartialExt{loa}{pla}
\startlist[fancy]{loa}
\captionof{algorithm}{算法标题}
\stoplist[fancy]{loa}
@@ -915,6 +924,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
将目录页码装进一个右对齐的水平盒子里。这样可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。
\keyval{pagenumwd}{刚性长度}\Default{1.55em}
设置开启 \option{dotalign} 选项时页码水平盒子的宽度。
+ \keychoice{fileopen}{\fbox{once},odd}
+ 编译文档时打开目录文件进行写入操作的方式,这个选项影响重复使用目录命令时的输出行为。默认只在第一次编译时打开文件,选择 \code{odd} 将仅在奇数次编译时打开文件。
\keyval{tocafter-every}{距离命令}\Default{\cs*{hspace}\Marg{1em}}
统一设置所有类型条目编号与标题间的代码。
\keyval{tocindent-every}{刚性长度}
@@ -1054,6 +1065,12 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\lchapter{正常标题}
\lchapterentry{加入目录的标题}
\end{ctexexam}
+ \command{CopyTitleFormat}[\marg{条目名1}\marg{条目名2}]\newtagv{2024cq}%
+ 将名为 \meta{条目名2} 的章节标题命令除了编号/名字外的格式复制给名为 \meta{条目名1} 的标题命令。
+ \begin{ctexexam}
+ \ctexset{section/format = \sffamily\color{blue}}
+ \CopyTitleFormat{subsection}{section}
+ \end{ctexexam}
\end{cnltxlist}
\subsection[上标和下标]{上标和下标}
@@ -1425,7 +1442,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\item 新增脚注段落文本格式定义命令 \cs{deffntpara} 和脚注间距离选项 \option{footnotesep}。
\item 新增悬挂缩进命令 \cs{hangfrom}。
\item 新增行间公式与正文上下间距选项 \option{abovedisplayskip} 和 \option{belowdisplayskip}。
- \item 新增目录文件扩展名分配命令 \cs{AllotCaptionExt}。
+ \item 新增目录文件扩展名分配命令 \cs{AssignCaptionExt}。
\end{version}
\shortversion{v = 2024aq,date = 2024/03/31,changes = 修复命令 \cs{ebifbitoc} 用于条目缩进选项 \option{tocindent} 失效的问题。}
\begin{version}[v = 2024as,date = 2024/04/19]
@@ -1437,7 +1454,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\end{version}
\shortversion{v = 2024aw,date = 2024/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
\shortversion{v = 2024bb,date = 2024/04/26,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
- \shortversion{v = 2024bk,date = 2024/05/07,changes = 新增局部题注目录分配命令 \cs{AllotPartialExt}。}
+ \shortversion{v = 2024bk,date = 2024/05/07,changes = 新增局部题注目录分配命令 \cs{AssignPartialExt}。}
\begin{version}[v = 2024bn,date = 2024/05/10]
\fixed
\item 修复 \module*{toc} 模块中带有 \option*{every} 后缀的选项不对所有已注册条目有效的问题。
@@ -1445,7 +1462,17 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\item 新增统一设置所有目录格式时的条目类型排除命令 \cs{ExcludeEveryTocName}。
\end{version}
\shortversion{v = 2024cd,date = 2024/06/14,changes = 修复全局选项 \option{class} 无法正确切换单双面排版的问题。}
+ \begin{version}[v = 2024cf,date = 2024/06/16]
+ \fixed
+ \item 修复和改进新建章节/图表标题时目录层次深度的问题。
+ \changed
+ \item \module*{tools} 模块的图片路径选项 \option{figurepath} 可在正文中使用。
+ \end{version}
+ \shortversion{v = 2024ci,date = 2024/06/22,changes = 修复使用 \code{flush} 类型脚注报错。}
\shortversion{v = 2024co,date = 2024/07/06,changes = 目录命令的可选参数支持 \CTeX 键值列表所有路径的章节标题样式选项。}
+ \shortversion{v = 2024cq,date = 2024/07/12,changes = 新增章节标题格式复制命令 \cs{CopyTitleFormat}。}
+ \shortversion{v = 2024cu,date = 2024/07/20,changes = 修复无编号的定理环境标签命令 \cs*{p@}\meta{定理名} 缺失导致报错的问题。}
+ \shortversion{v = 2024cx,date = 2024/07/28,changes = 新增将脚注置于页面底部的命令 \cs{PushFntBottom}。}
\end{changelog}
\nocite{*}
% \AddToHook{cmd/printindex/before}{\clearpage}
diff --git a/macros/latex/contrib/fancyhdr/README b/macros/latex/contrib/fancyhdr/README
index 4a7d219fdc..3131149015 100644
--- a/macros/latex/contrib/fancyhdr/README
+++ b/macros/latex/contrib/fancyhdr/README
@@ -27,7 +27,7 @@ In order to latex the documentation you need to have a copy of
boxedminipage.sty (CTAN:/macros/latex/contrib/boxedminipage) and
refcount.sty (CTAN:/macros/latex/contrib/oberdiek/) installed.
-This is version 4.2 of fancyhdr.sty and extramarks.sty. They are
+This is version 4.3.1 of fancyhdr.sty and extramarks.sty. They are
described in the third edition of The LaTeX Companion.
Extramarks.sty has not been changed, except for the version and
copyright information.
diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.dtx b/macros/latex/contrib/fancyhdr/fancyhdr.dtx
index 43c6631bba..c20c966b8b 100644
--- a/macros/latex/contrib/fancyhdr/fancyhdr.dtx
+++ b/macros/latex/contrib/fancyhdr/fancyhdr.dtx
@@ -26,7 +26,7 @@
%<fancyhdr>\ProvidesPackage{fancyhdr}%
%<fancyheadings>\ProvidesPackage{fancyheadings}
%<extramarks>\ProvidesPackage{extramarks}
-%<fancyhdr|extramarks> [2024/04/23 v4.2
+%<fancyhdr|extramarks> [2024/07/23 v4.3.1
%<fancyhdr> Extensive control of page headers and footers]%
%<fancyheadings> [2022/11/09 v4.1
%<fancyheadings> Legacy package to call fancyhdr]
@@ -59,8 +59,6 @@
\def\pAmS{{\the\textfont2
A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
\def\amslatex/{\ams/-\latex/}
-\newcommand{\PSNFSS}{{\sf
- PSNFSS}}
\newcommand{\bs}{\symbol{'134}}
\newcommand{\env}[1]{\texttt{#1}}
\newcommand{\Package}[1]{\textsf{#1}}
@@ -206,7 +204,7 @@
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
% \DoNotIndex{\@ne}
% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
-% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\@empty,\endgroup}
%
% \title{The \Package{fancyhdr} and \Package{extramarks}
% packages\\{\normalsize version \fileversion.}}
@@ -228,7 +226,7 @@
%
% This documentation describes version 4.0 or later of the
% \Package{fancyhdr} and \Package{extramarks} packages. The user
-% documentation is valid for the versions 3.8 or later of the
+% documentation is valid for the versions 4.0 or later of the
% \Package{fancyhdr} package (except for the changes mentioned in
% section~\ref{sec:version-4}), and version 2.1 or later of the
% \Package{extramarks} package.
@@ -253,11 +251,11 @@
%
% Part IV contains the annotated implementation.
%
-% This document describes version 4 of \Package{fancyhdr}. This version
-% is also described in the forthcoming edition 3 of \textit{The \latex/ Companion},
-% whereas the previous editions describe version 3 of \Package{fancyhdr}.
-% There are some significant differences between these versions. These
-% are summarized in section~\ref{sec:version-4} on page~\pageref{sec:version-4}.
+% This document describes version 4 of \Package{fancyhdr}, which is described in
+% the \emph{The \LaTeX{} Companion, Third Edition}.
+% The differences between this version and previous versions
+% are summarized in section~\ref{sec:version-4} on
+% page~\pageref{sec:version-4}.
% Throughout this documentation it is mentioned when a specific feature
% is only available in version 4, or when there are differences between
% version 3 and 4.
@@ -304,16 +302,14 @@
% \OPTindex{twoside}
% \OPTindex{headings}
% \OPTindex{myheadings}
-% \DescribeMacro{\fancyhead}
-% \DescribeMacro{\fancyfoot}
-% \DescribeMacro{\fancyhf}
-% \begin{verbatim}
-% \fancyhead[places]{field}
-% \fancyfoot[places]{field}
-% \fancyhf[places]{field}
-% \end{verbatim}
-% Here \texttt{places} is a comma-separated list of places where
-% \texttt{field} will be placed. There are 12 places defined: Left,
+%
+% \begin{flushleft}
+% \DescribeMacro{\fancyhead}\cmd{\fancyhead}\oarg{places}\marg{field} \\
+% \DescribeMacro{\fancyfoot}\cmd{\fancyfoot}\oarg{places}\marg{field} \\
+% \DescribeMacro{\fancyhf}\cmd{\fancyhf}\oarg{places}\marg{field}
+% \end{flushleft}
+% Here \meta{places} is a comma-separated list of places where
+% \meta{field} will be placed. There are 12 places defined: Left,
% Center and Right Headers and Footers, and both can be on Even or Odd
% pages. Each place therefore has 3 coordinates which are the inital
% letters of the above description: (1) \texttt{E} or \texttt{O}, (2) \texttt{L}, \texttt{C} or
@@ -321,14 +317,12 @@
% letters, like \texttt{EOH}. A missing coordinate means: all
% possibilities, except for \cs{fancyhead} where \texttt{H} is implied
% and \cs{fancyfoot} where \texttt{F} is implied.
-% \DescribeMacro{\fancyheadoffset}
-% \DescribeMacro{\fancyfootoffset}
-% \DescribeMacro{\fancyhfoffset}
-% \begin{verbatim}
-% \fancyheadoffset[places]{field}
-% \fancyfootoffset[places]{field}
-% \fancyhfoffset[places]{field}
-% \end{verbatim}
+%
+% \begin{flushleft}
+% \DescribeMacro{\fancyheadoffset}\cmd{\fancyheadoffset}\oarg{places}\marg{length} \\
+% \DescribeMacro{\fancyfootoffset}\cmd{\fancyfootoffset}\oarg{places}\marg{length} \\
+% \DescribeMacro{\fancyhfoffset}\cmd{\fancyhfoffset}\oarg{places}\marg{length}
+% \end{flushleft}
% These define offsets to let the headers stick into the margin (or to
% the inside if negative). Places cannot contain the \texttt{C}
% specifier. See section~\ref{sec:book-examples} for more details.
@@ -340,7 +334,6 @@
% \DescribeMacro{\headrule}
% \DescribeMacro{\footrule}
% \DescribeMacro{\headwidth}
-%
% \cs{headrulewidth} and \cs{footrulewidth} are macros to define the
% thickness of a line under the header and above the footer.
% \cs{headruleskip} and \cs{footruleskip} are macros that define the
@@ -353,7 +346,6 @@
% \DescribeMacro{\fancyheadinit}
% \DescribeMacro{\fancyfootinit}
% \DescribeMacro{\fancyhfinit}
-%
% \cs{fancyheadinit} and \cs{fancyfootinit} can be used to define
% initialisation code for the header and footer, respectively, and
% \cs{fancyhfinit} defines both of these. These commands are only
@@ -367,7 +359,6 @@
% \DescribeMacro{\ifbotfloat}
% \DescribeMacro{\iffloatpage}
% \DescribeMacro{\iffootnote}
-%
% The macros \cs{iftopfloat}, \cs{ifbotfloat}, \cs{iffloatpage} and
% \cs{iffootnote} are used to detect if there is a float on the top or
% the bottom of the page, or the page is a float page, or if there is
@@ -375,10 +366,10 @@
% different headers and/or footers if these conditions are met. See
% section~\ref{sec:float} for more details.
%
-% \begin{quote}
-% \DescribeMacro{\fancypagestyle}
-% \verb|\fancypagestyle|\marg{style-name}\oarg{base-style}\marg{definitions}
-% \end{quote}
+% \begin{flushleft}
+% \DescribeMacro{\fancypagestyle}
+% \cmd{\fancypagestyle}\marg{style-name}\oarg{base-style}\marg{definitions}
+% \end{flushleft}
% This command lets you (re)define page styles for use in special
% situations. See section~\ref{sec:fancypagestyle} for more details.
%
@@ -393,13 +384,6 @@
% \DescribeMacro{\lastrightmark}
% \DescribeMacro{\firstrightmark}
% \DescribeMacro{\lastleftmark}
-% \begin{verbatim}
-% \firstleftmark
-% \lastrightmark
-% \firstrightmark
-% \lastleftmark
-% \end{verbatim}
-%
% Standard \latex/ has two marks: a left and a right one. The standard
% command \cs{leftmark} gives you the last left mark on a page, and
% \cs{rightmark} gives you the first right one. These macros give you
@@ -486,7 +470,7 @@
%
% The page headers and footers in \LaTeX{} are defined by the
% \cs{pagestyle} and \cs{pagenumbering} commands. \cs{pagestyle}
-% defines the general contents of the headers and footers (e.g. where the
+% defines the general contents of the headers and footers (e.g.\ where the
% page number will be printed), while
% \cs{pagenumbering} defines the format of the page number.
% \LaTeX{} has four standard page styles:
@@ -527,7 +511,7 @@
%
% These are not user commands, but rather ``variables'' that are used by
% \latex/'s output routine.
-% As the command names contain the character '\texttt{@}', they should
+% As the command names contain the character `\texttt{@}', they should
% be defined in a package file, or otherwise be sandwiched between the commands
% \cs{makeatletter} and \cs{makeatother}.
%
@@ -605,6 +589,12 @@
% We define each of the six ``fields'' and the two decorative lines
% separately.
%
+% \begin{fblock}
+% \textbf{NOTE:} In \Package{fancyhdr} version 4.3 and later, paragraph
+% hooks will not work inside \Package{fancyhdr} headers and footers to
+% avoid unwanted interactions with the main text.
+% \end{fblock}
+%
% \section{A simple example}
% \label{sec:simple}
%
@@ -784,7 +774,7 @@
% for which pages and/or parts of the header/footer they apply. The first
% \cs{fancyhead} command above omits this parameter, and thus applies to all
% header fields. In general this is only useful to get rid of the defaults or
-% a previous definition, as is done here. Similar the \cs{fancyfoot} command
+% a previous definition, as is done here. Similarly the \cs{fancyfoot} command
% without square brackets clears all footer fields. In this particular
% example it could be omitted as all footer fields have a value specified.
% The selectors that can be used
@@ -846,7 +836,7 @@
% \cs{ps@plain} command, but \Package{fancyhdr} gives you an easier way
% with the \cs{fancypagestyle} command. This command can be used to
% redefine existing page styles (like \texttt{plain}) or to define new ones,
-% e.g. if part of your document needs a different page style. This command
+% e.g.\ if part of your document needs a different page style. This command
% has two mandatory parameters: the first one is the name of the page style to be defined, the
% second consists of commands that change the headers and/or footers, i.e.,
% \verb|\fancyhead| etc. Also allowed are changes to \cs{headrulewidth} and
@@ -1105,8 +1095,8 @@
% section and subsection information (section only for one-sided
% printing). \latex/ uses a marker mechanism to remember the chapter and
% section (section and subsection) information for a page; this is
-% discussed in detail in \textit{The \latex/ Companion}, Section 4.3.1, or
-% \textit{The \latex/ Companion, Second Edition}, Section 4.3.4.
+% discussed in detail in \emph{The \LaTeX{} Companion, Third Edition},
+% section 5.3.4 (Part I).
%
% There are two ways you can use and change the higher- and lower-level
% sectioning information available to you. The macros:
@@ -1263,7 +1253,7 @@
%
% As an example let's take a page layout where the leftmarks are generated by
% the sections and the rightmarks by the subsections (as is default in the
-% \texttt{article} class). Take a page with some short sections, e.g.
+% \texttt{article} class). Take a page with some short sections, e.g.,
%
% \begin{samepage}
% \noindent Section 1.\\
@@ -1294,7 +1284,7 @@
% \end{verbatim}
%
% Another problem with the marks in the standard \latex/ classes is that the
-% higher level sectioning commands (e.g. \cs{chapter}) call
+% higher level sectioning commands (e.g.\ \cs{chapter}) call
% \cs{markboth} with an empty right argument. This means that on the first
% page of a chapter (or a section in article style) the \cs{rightmark}
% will be empty. The underlying problem is that the \tex/ machinery has
@@ -1310,7 +1300,7 @@
% \cs{chapter} etc.\ commands do \emph{not} call the mark commands. So if
% you want your preface to set the header info but not be numbered nor be put in
% the table of contents, you must issue the \cs{markboth} command
-% yourself, e.g.
+% yourself, e.g.,
%
% \begin{verbatim}
% \chapter*{Preface}
@@ -1378,7 +1368,8 @@
% \footnote{If you use \texttt{11pt} or \texttt{12pt} you will probably also
% have to do this, because \LaTeX's defaults are quite small}. See the
% warning below.
-% See also Section 4.1 of the \latex/ \emph{Companion} for detail.
+% See also section 5.1 and 5.2 of the \LaTeX{} \emph{Companion, Third Edition}, (Part I)
+% for detail.
%
% For instance, the following code will place the section title and the
% subsection title of an article in two lines in the upper right hand
@@ -1626,7 +1617,7 @@
% in the neighborhood of your header/footer definitions, unless you
% already use such an \texttt{\ldots offset} command, of course.
% \vspace{\baselineskip}
-%
+%
% For the second example, we take the \amslatex/ book\footnote{George Gratzer,
% \textit{Math into LaTeX, An Introduction to \LaTeX{} and \amslatex/}, Birkhauser, Boston.}.
%
@@ -1661,18 +1652,19 @@
% \renewcommand{\footrulewidth}{0pt}
% \end{verbatim}
%
-% The font used in the headers is 9 pt bold Helvetica. The \PSNFSS\ system
-% by Sebastian Rahtz uses the short (Karl Berry) name \verb|phv| for
-% Helvetica, so this font is selected with the commands:
+% The font used in the headers is 9 pt bold Helvetica. The \textsf{PSNFSS} system
+% (originally by the late Sebastian Rahtz) uses the short (Karl Berry) name \texttt{phv} for
+% Helvetica. The more modern \LaTeX{} solution is to use the \TeX{} Gyre font
+% Heros, which uses the short name \texttt{qhv} so this font is selected with the commands^^A
+% \footnote{See \emph{The \LaTeX{} Companion, Third Edition}, Part I, section
+% 9.5.2, and Part II, section 10.8.16.}:
% \begin{verbatim}
-% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont
+% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont
% \end{verbatim}
-% (See Sections 7.6.1 and 11.9.1 of the \latex/ \emph{Companion} or
-% Sections 7.6 and 7.9.1 of \emph{The \latex/ Companion, Second Edition}.)
% Let us define a shorthand for this:
% \begin{verbatim}
% \newcommand{\helv}{%
-% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont}
+% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont}
% \end{verbatim}
%
% Now we are ready for the page layout:
@@ -1688,7 +1680,7 @@
% \renewcommand{\headrulewidth}{0.5pt}
% \renewcommand{\footrulewidth}{0pt}
% \newcommand{\helv}{%
-% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont}
+% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont}
% \fancyhf{}
% \fancyhead[LE,RO]{\helv \thepage}
% \fancyhead[LO]{\helv \rightmark}
@@ -1719,6 +1711,21 @@
% \renewcommand{\headrulewidth}{\iffloatpage{0pt}{0.4pt}}
% \end{verbatim}
%
+% \textbf{NOTE:} There is also a package \TTindex{floatpag}%
+% \Package{floatpag}\footnote{\url{https://www.ctan.org/pkg/floatpag}} by Vytas
+% Statulevičius and Sigitas Tolušis that has a command
+% \cs{floatpagestyle}\marg{pagestyle}, that applies \meta{pagestyle} to
+% all float pages, where \meta{pagestyle} can be defined with
+% \cs{fancypagestyle} (or by any other means).
+%
+% \textbf{NOTE:} There is also a package \TTindex{floatpag}%
+% \Package{floatpag}\footnote{\url{https://www.ctan.org/pkg/floatpag}} by Vytas
+% Statulevičius and Sigitas Tolušis that has a command
+% \cs{floatpagestyle}\marg{pagestyle}, that applies \meta{pagestyle} to
+% all float pages, where \meta{pagestyle} can be defined with
+% \cs{fancypagestyle} (or by any other means). In some cases this might
+% be simpler than putting \cs{iffloatpage} in various headers or footers.
+%
% Sometimes you may want to change the layout also for pages that contain a
% float on the top of the page, a float on the bottom of the page or a footnote on the bottom of the page.
%
@@ -1848,12 +1855,16 @@
% \CmdIndex{pagenumbering}
%
% \begin{verbatim}
+% \clearpage
% \pagenumbering[\thesection]{bychapter}
% \end{verbatim}
%
% What the package also does is reset the page number to 1 at the beginning
% of each chapter.
%
+% In general it is advisable to give a \cs{clearpage} or
+% \cs{cleardoublepage} before changing the page numbering.
+%
% In the frontmatter of your document (for example the Table of
% Contents) there will be no chapter numbers. Therefore a simple page
% number will be used there. This may be confusing, so you might prefer to use roman pagenumbers
@@ -2601,7 +2612,7 @@
% \end{enumerate}
%
% In the first two cases you must first check if you have given the correct
-% ``placement'' parameter to you float, e.g. \Cmd{begin\{figure\}[htp]}
+% ``placement'' parameter to you float, e.g.\ \Cmd{begin\{figure\}[htp]}
% specifies that your figure may be placed either: Here (i.e., in the text
% position where the command is given), on the Top of a page (which may be
% the page where you put the command), or on a separate Page of floats. You
@@ -2660,7 +2671,7 @@
% than 50\% of the page height it will have to wait until some more floats
% are given before a float page can be filled to satisfy the
% \cs{floatpagefraction} parameter. If you have this kind of behaviour you
-% can easily adapt the parameters, e.g. with:
+% can easily adapt the parameters, e.g.\ with:
% \begin{verbatim}
% \renewcommand{\textfraction}{0.05}
% \renewcommand{\topfraction}{0.95}
@@ -2673,7 +2684,7 @@
%
% You can force \latex/ to ignore most of the parameters for one specific float
% occurrence by
-% including an exclamation mark (!) in the placement parameters, e.g.
+% including an exclamation mark (!) in the placement parameters, e.g.,
% \begin{verbatim}
% \begin{figure}[!htb]
% \end{verbatim}
@@ -2811,7 +2822,7 @@
% normal text rather than a \cs{caption}, so that it will not be entered in
% the list of figures. It may also be desirable to issue a \cs{clearpage}
% first, just like we did for the \texttt{longtable}, and to encapsulate this
-% in the \cs{afterpage} command. E.g.
+% in the \cs{afterpage} command. E.g.,
% \begin{verbatim}
% \afterpage{\clearpage\input{myfigure}}
% \end{verbatim}
@@ -2832,7 +2843,7 @@
%
% You have to make sure that the last part is big enough, otherwise \LaTeX{}
% could decide to postpone it until it has collected some more floats. This
-% can be done either by making the figure big enough (e.g. by adding some
+% can be done either by making the figure big enough (e.g.\ by adding some
% \cs{vspace}), or by tweaking the \cs{floatpagefraction}
% \CmdIndex{floatpagefraction} parameter.
%
@@ -3054,9 +3065,27 @@
% \cs{input} in headers/footers when \texttt{verbatim} is active.
% (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.)
% \end{itemize}
+% \item Version 4.3, July 17, 2024
+% \begin{itemize}
+% \item Changed \cs{f@nch@everypar}. If the LaTeX kernel has
+% \texttt{expl3}, use \cs{tex\_everypar:D}, and reset \cs{par},
+% \cs{@@par} and \cs{endgraf} to their original \TeX{} definitions, so that
+% no paragraph hooks will intrude in \Package{fancyhdr} code\footnote
+% {See \url{https://tex.stackexchange.com/q/691262/113546}}.
+% Therefore paragraph hooks will not work inside \Package{fancyhdr} headers and
+% footers to avoid unwanted interactions with the main text.
+% \end{itemize}
+% \item % Version 4.3.1, July 23, 2024
+% \begin{itemize}
+% \item Also reset \cs{everypar} to its original \TeX{} value
+% \cs{tex\_everypar:D} in \cs{f@nch@resetpar}, otherwise environments
+% based on \cs{trivlist} will not work properly in \Package{fancyhdr}
+% headers and footers.
+% \end{itemize}
% \end{itemize}
%
%
+%
% \StopEventually{%
% \PrintChanges
% \PrintIndex}
@@ -3648,26 +3677,8 @@
\ProcessOptions*
% \end{macrocode}
%
-% \begin{macro}{\f@nch@errmsg}
-% This macro generates an error message.
-% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{f@nch@ifundefined} instead of \cs{ifx}.}
-% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{newcommand} instead of \cs{def}.}
-% \begin{macrocode}
-\newcommand\f@nch@errmsg[1]{%
- \f@nch@ifundefined{PackageError}{\errmessage{#1}}{\PackageError{fancyhdr}{#1}{}}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\f@nch@warning}
-% This macro generates a warning.
-% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{f@nch@ifundefined} instead of \cs{ifx}.}
-% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{newcommand} instead of \cs{def}.}
-% \begin{macrocode}
-\newcommand\f@nch@warning[1]{%
- \f@nch@ifundefined{PackageWarning}{\errmessage{#1}}{\PackageWarning{fancyhdr}{#1}{}}}
-% \end{macrocode}
-% \end{macro}
-%
+% \changes{fancyhdr v4.3}{2024/05/08}{Removed \cs{f@nch@errmsg} and
+% \cs{f@nch@warning} and used \cs{PackageError} and \cs{PackageWarning} directly.}
% \begin{macro}{\f@nch@forc}
% Usage: \cs{f@nch@forc} \cs{var} \texttt{\{charstring\}\{body\}}.\\
% Execute the body for each character in \texttt{charstring} bound
@@ -3766,7 +3777,7 @@
\if@twoside\else
\iff@nch@twoside\else
\if\f@nch@@eo e%
- \f@nch@warning {\string#1's `E' option without twoside option is useless.\MessageBreak
+ \PackageWarning{fancyhdr} {\string#1's `E' option without twoside option is useless.\MessageBreak
Please consider using the `twoside' option}%
\fi\fi\fi
}
@@ -3791,8 +3802,8 @@
\f@nch@forc\tmpf@ra{#3}%
{\expandafter\f@nch@ifin\tmpf@ra{eolcrhf,EOLCRHF}%
{}{\edef\temp@c{\temp@c\tmpf@ra}}}%
- \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
- \string#1 argument: [#3]}%
+ \ifx\@empty\temp@c\else \PackageError{fancyhdr}{Illegal char `\temp@c' in
+ \string#1 argument: [#3]}{}%
\fi \f@nch@for\temp@c{#3}%
{\f@nch@default\f@nch@@eo{eo}\temp@c
\f@nch@fancyhf@Echeck{#1}%
@@ -3827,8 +3838,8 @@
\f@nch@forc\tmpf@ra{#3}%
{\expandafter\f@nch@ifin\tmpf@ra{eolrhf,EOLRHF}%
{}{\edef\temp@c{\temp@c\tmpf@ra}}}%
- \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
- \string#1 argument: [#3]}%
+ \ifx\@empty\temp@c\else \PackageError{fancyhdr}{Illegal char `\temp@c' in
+ \string#1 argument: [#3]}{}%
\fi \f@nch@for\temp@c{#3}%
{\f@nch@default\f@nch@@eo{eo}\temp@c
\f@nch@fancyhf@Echeck{#1}%
@@ -4000,6 +4011,14 @@
% \begin{macro}{\f@nch@raggedright}
% \begin{macro}{\f@nch@centering}
% \begin{macro}{\f@nch@everypar}
+% \changes{fancyhdr v4.3}{2024/07/17}{Changed \cs{f@nch@everypar}. If the
+% LaTeX kernel has expl3, use \cs{tex\_everypar:D}, and reset \cs{par},
+% \cs{@@par} and \cs{endgraf} to their original \TeX{} definitions, so that
+% no paragraph hooks will intrude in \Package{fancyhdr} code.}
+% \changes{fancyhdr v4.3.1}{2024/07/23}{Also reset \cs{everypar} to its
+% original \TeX{} value \cs{tex\_everypar:D} in \cs{f@nch@resetpar},
+% otherwise environments based on \cs{trivlist}
+% will not work properly in \Package{fancyhdr} headers and footers.}
% Save the standard definitions of \cs{raggedleft}, \cs{raggedright},
% \cs{centering} and \cs{everypar} so that we can reset them when we are
% typesetting the headers and footers. Some packages change these to
@@ -4008,7 +4027,23 @@
\let\f@nch@raggedleft\raggedleft
\let\f@nch@raggedright\raggedright
\let\f@nch@centering\centering
-\let\f@nch@everypar\everypar
+\ifdefined\ExplSyntaxOn
+ \ExplSyntaxOn
+ \let\f@nch@everypar\tex_everypar:D
+ \newcommand\f@nch@resetpar{%
+ \f@nch@everypar{}%
+ \cs_set_eq:NN \everypar\tex_everypar:D
+ \cs_set_eq:NN \par \tex_par:D
+ \cs_set_eq:NN \@@par \tex_par:D
+ \cs_set_eq:NN \endgraf \tex_par:D
+ }
+ \ExplSyntaxOff
+\else
+ \let\f@nch@everypar\everypar
+ \newcommand\f@nch@resetpar{%
+ \f@nch@everypar{}%
+ }
+\fi
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -4044,8 +4079,10 @@
% \changes{fancyhdr v4.2}{2024/04/19}{Reset catcodes to their default
% values in order to facilitate \cs{input} in headers/footers when \texttt{verbatim}
% is active. (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.)}
+% \changes{fancyhdr v4.3}{2024/05/08}{Remove pre-NFSS stuff}
+% \changes{fancyhdr v4.3}{2024/07/17}{Replace \cs{f@nch@everypar} by \cs{f@nch@resetpar}.}
% \begin{macrocode}
-\def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13
+\def\f@nch@reset{\f@nch@resetpar\restorecr\endlinechar=13
\catcode`\\=0\catcode`\{=1\catcode`\}=2\catcode`\$=3\catcode`\&=4
\catcode`\#=6\catcode`\^=7\catcode`\_=8\catcode`\ =10\catcode`\@=11
\catcode`\:=11\catcode`\~=13\catcode`\%=14
@@ -4061,10 +4098,8 @@
\expandafter\def\csname MakeUppercase\space\space\space\endcsname
[####1]####2{####2}%
##1}}%
- \f@nch@ifundefined{@newbaseline} % NFSS not present; 2.09 or 2e
- {\f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls
- {\@normalsize}}%
- {\@newbaseline}% NFSS (2.09) present
+ \f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls
+ {\@normalsize}%
}
% \end{macrocode}
% \end{macro}
@@ -4213,7 +4248,7 @@
% \begin{macrocode}
\iff@nch@check
\dimen0=#1\advance\dimen0-\ht0
- \f@nch@warning{%
+ \PackageWarning{fancyhdr}{%
\string#1 is too small (\the#1): \MessageBreak
Make it at least \the\ht0, for example:\MessageBreak
\string\setlength{\string#1}{\the\ht0}%
@@ -4309,7 +4344,7 @@
% \cs{color} command. The \cs{ignorespaces} skips initial spaces in
% the parameter, as is usual in a \cs{parbox}, for backwards compatibility.}
% We put the \cs{footrule} in a \cs{vbox} to accommodate for flexible
-% footrules (e.g. using \cs{hrulefill}), so that the \cs{headwidth} will
+% footrules (e.g.\ using \cs{hrulefill}), so that the \cs{headwidth} will
% be used as the line width. But to preserve the vertical spacing we
% then \cs{unvbox} this box.
%
@@ -4348,7 +4383,7 @@
% \end{macro}
%
% \begin{macro}{\@chapapp}
-% Define \cs{@chapapp} for classes that don't have it, e.g. amsbook
+% Define \cs{@chapapp} for classes that don't have it, e.g.\ amsbook
% \begin{macrocode}
\f@nch@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%
% \end{macrocode}
@@ -4660,9 +4695,10 @@
% \begin{macro}{\iffootnote}
% These can be used in a header/footer field to make them conditional on
% the presence of floats and/or footnotes.
+% \changes{fancyhdr v4.3}{2024/05/08}{Replace \cs{empty} with \cs{@empty}}
% \begin{macrocode}
-\newcommand\iftopfloat[2]{\ifx\topfloat\empty #2\else #1\fi}%
-\newcommand\ifbotfloat[2]{\ifx\botfloat\empty #2\else #1\fi}%
+\newcommand\iftopfloat[2]{\ifx\topfloat\@empty #2\else #1\fi}%
+\newcommand\ifbotfloat[2]{\ifx\botfloat\@empty #2\else #1\fi}%
\newcommand\iffloatpage[2]{\if@fcolmade #1\else #2\fi}%
\newcommand\iffootnote[2]{\iff@nch@footnote #1\else #2\fi}%
% \end{macrocode}
@@ -4688,10 +4724,10 @@
% \begin{macrocode}
\long\def\f@nch@pagestyle#1[#2]#3{%
\f@nch@ifundefined{ps@#2}{%
- \f@nch@errmsg{\string\fancypagestyle: Unknown base page style `#2'}%
+ \PackageError{fancyhdr}{\string\fancypagestyle: Unknown base page style `#2'}{}%
}{%
\f@nch@ifundefined{f@nch@ps@#2-is-fancyhdr}{%
- \f@nch@errmsg{\string\fancypagestyle: Base page style `#2' is not fancyhdr-based}%
+ \PackageError{fancyhdr}{\string\fancypagestyle: Base page style `#2' is not fancyhdr-based}{}%
}%
{%
\@namedef{ps@#1}{\let\f@nch@gbl\relax\@nameuse{ps@#2}#3\relax}%
diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.pdf b/macros/latex/contrib/fancyhdr/fancyhdr.pdf
index 9f781dad3b..35cc4524ff 100644
--- a/macros/latex/contrib/fancyhdr/fancyhdr.pdf
+++ b/macros/latex/contrib/fancyhdr/fancyhdr.pdf
Binary files differ
diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md
index 9706fbbe09..e330a07eb7 100644
--- a/macros/latex/contrib/fontscale/CHANGELOG.md
+++ b/macros/latex/contrib/fontscale/CHANGELOG.md
@@ -7,6 +7,50 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v2.0.0] - 2024-08-02
+
+### Changed
+- This update includes many changes that are backwards incompatible.
+- The documentation has been completely rewritten.
+- Package description changed from "A user interface for setting document font
+ sizes" to "A flexible interface for setting font sizes".
+- The code no longer uses `\@setfontsize`.
+- The font size commands provided by this package now do nothing, except issue
+ a warning, if used in math mode.
+- The base font size of the musical typographic scale is now set by the new key
+ `musical/base`.
+- `\PrintFontParameters` renamed to `\PrintFontSizeParameters`.
+- `\PrintAllFontParameters` renamed to `\PrintAllFontSizeParameters`.
+- `\PrintSampleText` uses a `+m`- instead of an `O`-type argument.
+- `\PrintFontSizeCommand` prints `\undefined` instead of `UNDEFINED`.
+- `\fontscalesetup` is now removed in `\text_purify:n`.
+
+### Removed
+- Keys `typographic-scale=modular` and `modular`.
+- Key `ignore-order` (no support for using `\tiny` to `\Huge` in the wrong
+ order).
+- Key `reset` (very rarely used).
+- Public `prop` variables for each font size command from `\tiny` to `\Huge`.
+ (They are redundant with the other public variables and programmers will very
+ likely prefer using their own `prop` variables.)
+
+### Added
+- `\fontscalesetup` now has an optional starred argument which first resets the
+ keys to their initial values.
+- Key `musical/base` (explained earlier).
+- The package commands now issue a user-friendly error message if the font size
+ is a zero or negative length.
+- The package commands now issue an error if the font baselineskip is less than
+ the font size.
+- The package commands that would produce a low-level error if used in math
+ mode now issue a user-friendly error message instead.
+
+### Fixed
+- Now correctly checks that the package requires `LaTeX2e` version 2023-11-01
+ or newer.
+- The keys `<font size command>` no longer incorrectly treat a `/` within a
+ brace group as the delimiter.
+
## [v1.3.0] - 2024-05-17
### Added
@@ -18,7 +62,7 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Changed
- The code now regularly uses `V`- and `v`-type arguments to get the value of a
variable.
-- The code now uses private `expl3` wrappers around the LaTeX2e commands
+- The code now uses private `expl3` wrappers around the `LaTeX2e` commands
`\@setfontsize`, `\fontsize`, and `\selectfont`.
## [v1.2.2] - 2024-04-29
diff --git a/macros/latex/contrib/fontscale/README.txt b/macros/latex/contrib/fontscale/README.txt
index 292cfada9b..d6c9224ee0 100644
--- a/macros/latex/contrib/fontscale/README.txt
+++ b/macros/latex/contrib/fontscale/README.txt
@@ -1,4 +1,4 @@
-Package: fontscale -- A user interface for setting document font sizes
+Package: fontscale -- A flexible interface for setting font sizes
Copyright: 2024 (c) Oliver Beery <beeryoliver@gmail.com>
CTAN: https://ctan.org/pkg/fontscale
Repository: https://github.com/beeryoliver/fontscale
diff --git a/macros/latex/contrib/fontscale/beery.cls b/macros/latex/contrib/fontscale/beery.cls
index 4777c06a8e..45a3b95982 100644
--- a/macros/latex/contrib/fontscale/beery.cls
+++ b/macros/latex/contrib/fontscale/beery.cls
@@ -1,71 +1,83 @@
-% Note: This documentclass is designed ONLY for the document 'fontscale-manual'. Compiled using LuaLaTeX.
+% Note: This class is designed ONLY for 'fontscale.tex'. Compiled with LuaTeX.
-% The 2023-06-01 LaTeX kernel update added the 'shipout' hook.
-\NeedsTeXFormat{LaTeX2e}[2023-06-01]
+% LaTeX2e version 2023-11-01 added \IfExplAtLeastTF.
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesExplClass
{beery}
- {2024-04-21}
+ {2024-08-02}
{}
{}
-\RequirePackage { fix-cm }
\LoadClass { article }
+
+\box_new:N \l__beery_tmp_box
+
\RequirePackage { fontscale }
\fontscalesetup { musical }
-\RequirePackage [ list-final-separator = { ,~ and~ } ] { siunitx }
+\RequirePackage { siunitx }
+\sisetup { list-final-separator = { ,~ and~ } , mode = match }
\RequirePackage { mathtools }
\RequirePackage [ shortcuts , allowbreakbefore ] { extdash }
\RequirePackage { csquotes }
+\RequirePackage { lmodern }
% CUSTOM MACROS
+\NewExpandableDocumentCommand \alphabet { } { abcdefghijklmnopqrstuvwxyz }
\NewDocumentCommand \Key { m o o }
{
+ \mode_leave_vertical:
\group_begin:
\ttfamily
- \bool_case:nF
+ \IfNoValueTF {#3}
{
- {
- \bool_lazy_and_p:nn
- { \tl_if_novalue_p:n {#2} }
- { \tl_if_novalue_p:n {#3} }
- }
- {#1}
- {
- \bool_lazy_and_p:nn
- { ! \tl_if_novalue_p:n {#2} }
- { \tl_if_novalue_p:n {#3} }
- }
- { #1~ =~ #2 }
- {
- \bool_lazy_and_p:nn
- { ! \tl_if_novalue_p:n {#2} }
- { ! \tl_if_novalue_p:n {#3} }
- }
- { #1~ =~ #2 \hspace* { \fill } \makebox { initial~ =~ #3 } }
+ \IfNoValueTF {#2}
+ {#1}
+ { #1 $\,=\,$ \allowbreak #2 }
}
- { \errmessage { invalid } }
+ { #1 $\,=\,$ #2 \hspace* { \fill } \hbox:n { initial $\,=\,$ #3 } }
\group_end:
}
+\NewDocumentCommand \Value { m } { \texttt {#1} }
\NewDocumentCommand \cmd { m } { \texttt { \token_to_str:N #1 } \@ }
\NewDocumentCommand \cs { m } { \texttt { \token_to_str:c {#1} } \@ }
\NewDocumentCommand \marg { m }
- { \allowbreak \texttt { \c_left_brace_str #1 \c_right_brace_str } }
-\NewDocumentCommand \oarg { m } { \allowbreak \texttt { [ #1 ] } }
-\NewDocumentCommand \meta { m } { \texttt { \textlangle #1 \textrangle } }
+ {
+ \allowbreak
+ \texttt { \c_left_brace_str }
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ \texttt { \c_right_brace_str }
+ }
+\NewDocumentCommand \oarg { m }
+ {
+ \allowbreak
+ \texttt { [ }
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ \texttt { ] }
+ }
+\NewDocumentCommand \sarg { } { $\langle$ \texttt {*} $\rangle$ }
+\NewDocumentCommand \meta { m }
+ {
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ }
\NewDocumentCommand \cls { m } { \textsf {#1} }
\NewDocumentCommand \env { m } { \texttt {#1} }
\NewDocumentCommand \pkg { m } { \textsf {#1} }
-\NewDocumentCommand \filex { m } { \texttt {#1} \@ }
\NewDocumentCommand \latin { m } { \textit {#1} }
% PAGE STYLE
-\hbox_set:Nn \l_tmpa_box { abcdefghijklmnopqrstuvwxyz }
-\dim_const:Nn \c_beery_alphabet_dim { \box_wd:N \l_tmpa_box }
+\hbox_set:Nn \l__beery_tmp_box { abcdefghijklmnopqrstuvwxyz }
+\dim_const:Nn \c_beery_alphabet_dim { \box_wd:N \l__beery_tmp_box }
+\dim_log:N \c_beery_alphabet_dim
-\dim_const:Nn \c_beery_big_dim
- { \fp_to_dim:n { \l_fontscale_normalsize_size_dim * 10 / 7 } }
+\dim_const:Nn \c_beery_big_dim { \l_fontscale_normalsize_baselineskip_skip }
\dim_const:Nn \c_beery_medium_dim { \c_beery_big_dim / 2 }
\dim_const:Nn \c_beery_small_dim { \c_beery_big_dim / 4 }
\skip_const:Nn \c_beery_big_skip
@@ -85,12 +97,15 @@
\skip_set:Nn \topskip { \l_fontscale_normalsize_size_dim }
\skip_set_eq:NN \splittopskip \topskip
-\RequirePackage
- [
- letterpaper
- , textwidth = \dim_eval:n { \fp_use:N \c_e_fp \c_beery_alphabet_dim }
+\RequirePackage { geometry }
+\geometry
+ {
+ a4paper
+ , textwidth =
+ \dim_eval:n { \fp_to_dim:n { \c_e_fp * \c_beery_alphabet_dim } }
, textheight =
- \dim_eval:n { \fp_eval:n { \c_e_fp * 1.6180 } \c_beery_alphabet_dim }
+ \dim_eval:n
+ { \fp_to_dim:n { 1.6180 * \c_e_fp * \c_beery_alphabet_dim } }
, heightrounded
, centering
, headheight = \l_fontscale_footnotesize_baselineskip_skip
@@ -98,8 +113,7 @@
, footskip =
\dim_eval:n
{ \c_beery_big_dim + \l_fontscale_footnotesize_baselineskip_skip }
- ]
- { geometry }
+ }
\RequirePackage { fancyhdr }
\pagestyle { fancy }
@@ -111,14 +125,21 @@
% PARAGRAPH STYLE
\nonfrenchspacing
-\linespread { \fp_eval:n { 25 / 21 } }
+\linespread { 1 }
\RequirePackage [ skip = \c_beery_medium_skip ] { parskip }
\RequirePackage [ raggedrightboxes ] { ragged2e }
\skip_set:Nn \RaggedRightRightskip { 0pt plus 0.5 \linewidth }
+\dim_zero:N \RaggedRightParindent
+\dim_set_eq:NN \JustifyingParindent \RaggedRightParindent
\RaggedRight
+\int_set:Nn \pretolerance { -1 }
+\int_set:Nn \tolerance { 200 }
+\dim_zero:N \emergencystretch
\int_set:Nn \widowpenalty { 10000 }
\int_set_eq:NN \clubpenalty \widowpenalty
\int_set_eq:NN \displaywidowpenalty \widowpenalty
+\int_set:Nn \hyphenpenalty { 99 }
+\int_set_eq:NN \exhyphenpenalty \hyphenpenalty
% HEADINGS, TABLE OF CONTENTS
@@ -129,9 +150,9 @@
\titlespacing* \section % section
{ 0pt } % indent
{
- \fp_eval:n { 4 / 3 } \c_beery_medium_dim
- plus \fp_eval:n { 1 / 2 * 4 } \c_beery_medium_dim
- minus \fp_eval:n { 1 / 3 / 4 } \c_beery_medium_dim
+ \c_beery_big_dim
+ plus \fp_eval:n { 1 / 2 * 4 } \c_beery_big_dim
+ minus \fp_eval:n { 1 / 3 / 4 } \c_beery_big_dim
} % before
{ \c_beery_medium_skip } % after
\titlespacing* \subsection
@@ -146,15 +167,15 @@
\titleformat \section % section
[ block ] % shape
{ \raggedright \large \bfseries } % format
- { \thesection . } % label
- { 0.5em } % the horizontal separation between label and title body
+ { \thesection } % label
+ { 1em } % the horizontal separation between label and title body
{ } % before code
{ } % after code
\titleformat \subsection
[ block ]
{ \raggedright \normalsize \bfseries }
- { \thesubsection . }
- { 0.5em }
+ { \thesubsection }
+ { 1em }
{ }
{ }
@@ -215,7 +236,10 @@
\coffin_new:N \l__beery_footnote_coffin
% 1.2 = baselineskip-size-ratio
\dim_const:Nn \c_beery_footnote_baselineheight_dim
- { \fp_eval:n { 1.2 * \f@linespread - 1 } \l_fontscale_footnotesize_size_dim }
+ {
+ \fp_to_dim:n
+ { ( 1.2 * \f@linespread - 1 ) * \l_fontscale_footnotesize_size_dim }
+ }
\RenewDocumentCommand \@makefntext { +m }
{
\vcoffin_set:Nnn \l__beery_footnote_coffin { \textwidth }
@@ -224,8 +248,10 @@
{
\dim_set:Nn \leftmargin
{
- \fp_eval:n { ( 1 - \l_fontscale_footnotesize_scale_fp ) / 2 }
- \textwidth
+ \fp_to_dim:n
+ {
+ ( 1 - \l_fontscale_footnotesize_scale_fp ) / 2 * \textwidth
+ }
}
\dim_set_eq:NN \rightmargin \leftmargin
\dim_set:Nn \labelsep { 0.5em }
@@ -242,4 +268,5 @@
\AddToHook { shipout / lastpage } { \label { LastPage } }
\RequirePackage { xurl }
-\RequirePackage [ bookmarksnumbered , hidelinks , linktoc = page ] { hyperref } \ No newline at end of file
+\RequirePackage { hyperref }
+\hypersetup { bookmarksnumbered , hidelinks , linktoc = page } \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex
deleted file mode 100644
index 029d304d82..0000000000
--- a/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex
+++ /dev/null
@@ -1,39 +0,0 @@
-\ProvidesFile
- {fontscale-manual-table-classic.tex}
- [2024-04-15]
-
-\begin{table}
- \centering
- \caption
- {%
- The size of each font size command in \unit{pt} when using a classic typographic scale.%
- \label{table:classicscales}%
- }
- \bigskip
- \begin{tblr}
- {
- colspec=
- {
- l
- Q[si={table-format=3.2},c]
- Q[si={table-format=3.2},c]
- Q[si={table-format=3.2},c]
- }
- , cell{1}{2-Z}={guard}
- }
- \toprule
- Command & \Key{classic-10pt} & \Key{classic-11pt} & \Key{classic-12pt} \\
- \midrule
- \cs{tiny} & 6 & 7 & 8 \\
- \cs{scriptsize} & 7 & 8 & 9 \\
- \cs{footnotesize} & 8 & 9 & 10 \\
- \cs{small} & 9 & 10 & 11 \\
- \cs{normalsize} & 10 & 11 & 12 \\
- \cs{large} & 11 & 12 & 14 \\
- \cs{Large} & 12 & 14 & 16 \\
- \cs{LARGE} & 14 & 16 & 18 \\
- \cs{huge} & 16 & 18 & 21 \\
- \cs{Huge} & 18 & 21 & 24 \\
- \bottomrule
- \end{tblr}
-\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex
deleted file mode 100644
index 8c5cc8c141..0000000000
--- a/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex
+++ /dev/null
@@ -1,38 +0,0 @@
-\ProvidesFile
- {fontscale-manual-table-font-steps.tex}
- [2024-04-15]
-
-\begin{table}
- \centering
- \caption
- {%
- The step of each font size command.
- These are constants and cannot be changed.%
- \label{table:fontsteps}%
- }
- \bigskip
- \begin{tblr}
- {
- colspec=
- {
- l
- Q[si={table-format=3.2},c]
- }
- , cell{1}{2}={guard}
- }
- \toprule
- Command & Step \\
- \midrule
- \cs{tiny} & -4 \\
- \cs{scriptsize} & -3 \\
- \cs{footnotesize} & -2 \\
- \cs{small} & -1 \\
- \cs{normalsize} & 0 \\
- \cs{large} & 1 \\
- \cs{Large} & 2 \\
- \cs{LARGE} & 3 \\
- \cs{huge} & 4 \\
- \cs{Huge} & 5 \\
- \bottomrule
- \end{tblr}
-\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex
deleted file mode 100644
index 306578ec35..0000000000
--- a/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex
+++ /dev/null
@@ -1,38 +0,0 @@
-\ProvidesFile
- {fontscale-manual-table-modular-musical.tex}
- [2024-04-15]
-
-\begin{table}
- \centering
- \caption
- {%
- The size of each font size command when using a modular or musical typographic scale with the initial settings.
- The font sizes are in \unit{pt} and rounded to two decimal places.%
- }
- \bigskip
- \begin{tblr}
- {
- colspec=
- {
- l
- Q[si={table-format=3.2},c]
- Q[si={table-format=3.2},c]
- }
- , cell{1}{2-3}={guard}
- }
- \toprule
- Command & \Key{modular} & \Key{musical} \\
- \midrule
- \cs{tiny} & 6.24 & 5.74 \\
- \cs{scriptsize} & 7.02 & 6.60 \\
- \cs{footnotesize} & 7.90 & 7.58 \\
- \cs{small} & 8.89 & 8.71 \\
- \cs{normalsize} & 10 & 10 \\
- \cs{large} & 11.25 & 11.49 \\
- \cs{Large} & 12.66 & 13.20 \\
- \cs{LARGE} & 14.24 & 15.16 \\
- \cs{huge} & 16.02 & 17.41 \\
- \cs{Huge} & 18.02 & 20 \\
- \bottomrule
- \end{tblr}
-\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.pdf b/macros/latex/contrib/fontscale/fontscale-manual.pdf
deleted file mode 100644
index 2637ef9c1f..0000000000
--- a/macros/latex/contrib/fontscale/fontscale-manual.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.tex b/macros/latex/contrib/fontscale/fontscale-manual.tex
deleted file mode 100644
index 9917636a04..0000000000
--- a/macros/latex/contrib/fontscale/fontscale-manual.tex
+++ /dev/null
@@ -1,390 +0,0 @@
-\documentclass{beery}
-
-\begin{document}
-
-
-\section*
- {%
- \SetFontStep*{1}%
- The \pkg{fontscale} package%
- }
-
-A user interface for setting document font sizes
-
-Oliver Beery
-
-Version 1.3.0\quad{}17 May 2024
-
-
-\section{Introduction}
-\label{sec:intro}
-
-\subsection{About}
-\label{subsec:about}
-
-\listheading{The \pkg{fontscale} package provides the following functionalities:}
-\begin{itemize}
- \item
- Set font sizes via a classic, modular, or musical typographic scale.
- \item
- Set arbitrary sizes and baselineskips for the standard font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge}.
- \item
- Set the font size settings mid\-/document or within a local group.
- \item
- Set the font size by setting the font step, scale, or size.
- \item
- Set the font size relative to the current font size.
- \item
- Use the current font step, scale, size, and baselineskip directly, for example, for printing or within calculations.
- \item
- Print sample text to test different font sizes.
- \item
- For advanced users, store the step, scale, size, and baselineskip of each font size command in \pkg{expl3} variables.
-\end{itemize}
-
-\subsection{Loading the package}
-\label{subsec:loading}
-
-This package requires the 10 October 2023 \pkg{l3kernel} update.
-You may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package.
-
-This package lets the user set arbitrary font sizes.
-This works with most fonts produced today, but, for historical reasons, the default Computer Modern font is available only in a number of fixed sizes.
-If you get a warning that Computer Modern is not available in the requested size, you may need to add the code \cs{RequirePackage{fix-cm}} before \cs{documentclass} to make Computer Modern available at arbitrary font sizes.
-
-\cs{usepackage}\marg{fontscale}
-\nopagebreak\newline
-\cs{fontscalesetup}\marg{\meta{keyval list}}
-
-Load the \pkg{fontscale} package via the usual command in the document preamble.
-This package has no package options.
-Instead, the package keys are set up via the command \cs{fontscalesetup}\marg{\meta{keyval list}}.
-\meta{keyval list} must receive a comma\-/separated list of keys and their associated values.
-The package keys are documented in \S\ref{sec:choosing} and \S\ref{sec:overwriting}.
-
-Many \LaTeX{} document classes have a font size option (\Key{10pt}, \Key{11pt}, \Key{12pt}, etc.\@) which not only changes the set of document font sizes, but also modifies additional settings such as the page layout and vertical spacing which were specifically designed to work with those font sizes.
-For this reason, you may want to set the document class font size option close to the value of \cs{normalsize} set by this package.
-
-Internally, this package sets up each font size command from \cs{tiny} to \cs{Huge} using the kernel command \cs{@setfontsize}\---they have no additional functionality beyond that of \cs{@setfontsize}.
-Unlike the standard document classes, the font size commands set up by this package do not change the vertical spacing for displayed math and list structures.
-If the user would like to add this functionality or perhaps other features to the font size commands, they can do so via hooks, which are documented in the \LaTeX{} kernel.
-
-\subsection{Terminology}
-\label{subsec:terminology}
-
-When using the \pkg{fontscale} package, each font size, including the standard font size commands from \cs{tiny} to \cs{Huge}, has a step, scale, size, and baselineskip.
-The latter two parameters are the familiar first and second arguments to the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}}.
-The font scale is the relative font size; the ratio of the font size to \cs{normalsize}.
-The font step is the number of font size gradations from \cs{normalsize}, which has a step of \num{0}.
-Table~\ref{table:fontsteps} lists the font step of each font size command.
-
-\input{./fontscale-manual-table-font-steps.tex}
-
-This package defines many keys and commands that take as a value or argument a \meta{dim expr}, \meta{skip expr}, \meta{fp expr}, or \meta{int expr}.
-This syntax is short for a dimen, skip, floating point, or integer expression, respectively.
-See \pkg{usrguide} \S5 for more information.%
-\footnote{\url{https://ctan.org/pkg/usrguide}}
-
-
-\section{Choosing the typographic scale}
-\label{sec:choosing}
-
-\Key{typographic-scale}
- [classic-10pt, classic-11pt, classic-12pt, modular, musical]
- [classic-10pt]
-\newline
-\Key{modular/ratio}[\meta{fp expr}][1.125]
-\newline
-\Key{musical/ratio}[\meta{fp expr}][2]%
-\nopagebreak\newline
-\Key{musical/notes}[\meta{int expr}][5]
-
-The key \Key{typographic\-/scale} sets the font sizes using a classic, modular, or musical typographic scale.
-These are common methods of choosing a set of document font sizes.
-The choice of typographic scale initializes to \Key{classic\-/10pt}.
-
-The key \Key{typographic\-/scale} can also be set in a condensed format via the keys \Key{classic\-/10pt}, \Key{classic\-/11pt}, \Key{classic\-/12pt}, \Key{modular}, or \Key{musical}, which set the key \Key{typographic\-/scale} to the corresponding value.
-
-The classic typographic scale consists of the traditional font sizes
-\numlist{6;7;8;9;10;11;12;14;16;18;21;24;36;48;60;72}.%
-\footnote{See \S{}3.1 of \textit{The Elements of Typographic Style} by Robert Bringhurst.}
-They have been used since the sixteenth century and are the default font sizes on most computer software.
-The keys \Key{classic-10pt, classic-11pt, classic-12pt} set the size of each font size command to values based on their position in the classic typographic scale.
-The size of \cs{normalsize} is the named point size.
-The sizes of the other font size commands are the adjacent font sizes in the scale.
-Table~\ref{table:classicscales} lists the size of each font size command when using a classic typographic scale.
-
-\input{./fontscale-manual-table-classic.tex}
-
-The key \Key{modular} sets the font sizes from \cs{tiny} to \cs{Huge} using a modular typographic scale.
-In a modular scale, each font size is a fixed ratio from the adjacent font sizes.%
-\footnote{\url{https://alistapart.com/article/more-meaningful-typography/}}
-Here, the base font size is the size of \cs{normalsize}, which can be set via the key \Key{normalsize/size}[\meta{dim expr}], more documented in \S\ref{sec:overwriting}.
-If not set, \cs{normalsize} initializes to \qty{10}{pt}.
-The modular ratio can be set via the key \Key{modular\slash{}ratio}.
-The initial modular ratio is \num{1.125}.
-
-\input{./fontscale-manual-table-modular-musical.tex}
-
-The key \Key{musical} sets the font sizes according to their position in a musical typographic scale.
-The font size is calculated using the formula:%
-\footnote
- {%
- I have referenced this article by Spencer Mortensen:
- \newline
- \url{https://spencermortensen.com/articles/typographic-scale/}%
- }
-\[ f_i = f_0 \times r ^ { i / n } \]
-$f_0$ is the base font size, the size of \cs{normalsize}.
-$f_i$ is the font size with font step~$i$.
-$n$ is the number of notes in the musical scale\---the number of font size gradations or steps above \cs{normalsize}.
-$r$ is the ratio of the musical scale, the ratio of the highest to the lowest note $ f_n / f_0 $.
-(The modular typographic scale is actually a special case of the musical typographic scale where $n=1$.)
-
-The musical ratio~$r$ and the number of notes~$n$ can be set via the keys \Key{musical\slash{}ratio} and \Key{musical\slash{}notes}.
-The initial musical ratio\---\num{2}\---and the initial number of notes\---\num{5}\---are the same as that of the classic typographic scale.%
-\footnote{Ibid.}
-Conveniently, \cs{Huge} is \num{5} steps above \cs{normalsize}.
-The font size of \cs{normalsize}~$f_0$ can be set using the key \Key{normalsize/size}[\meta{dim expr}], more documented in \S\ref{sec:overwriting}.
-When using a musical typographic scale, \cs{normalsize} initializes to \qty{10}{pt}.%
-\footnote {I have set the initial value to \qty{10}{pt} instead of the \qty{12}{pt} recommended by the Spencer Mortensen article because this matches the default settings of the standard \LaTeXe{} document classes.}
-
-\Key{baselineskip-size-ratio}[\meta{fp expr}][1.2]
-\KeepNextPar*
-
-The key \Key{baselineskip\-/size\-/ratio} sets the ratio of the font baselineskip to the font size.
-By default, the font baselineskip of each font size command equals its font size times \meta{fp expr}.
-Users should not set this key unless they really know what they are doing.
-When using increased line spacing, users should prefer the low\-/level font command \cs{linespread} or the \pkg{setspace} package.
-
-
-\section{Overwriting the typographic scale}
-\label{sec:overwriting}
-
-In some situations, users may need to explicitly set the scale, size, or baselineskip of a font size command, overwriting the value set by the keys in \S\ref{sec:choosing}.
-Note that the font steps and the scale of \cs{normalsize} are constants and cannot be changed.
-
-\Key{\meta{font size command}/scale}[\meta{fp expr}]
-\KeepNextPar*
-
-The keys \Key{\meta{font size command}\slash{}scale} set the scale of \meta{font size command} to \meta{fp expr}, ignoring the value set by the key \Key{typographic\-/scale}.
-The key \Key{normalsize\slash{}scale} is not defined.
-
-\Key{\meta{font size command}/size}[\meta{dim expr}]
-\KeepNextPar*
-
-The keys \Key{\meta{font size command}\slash{}size} set the size of \meta{font size command} to \meta{dim expr}, ignoring the values set by the keys \Key{typographic\-/scale} and \Key{\meta{font size command}\slash{}scale}.
-\meta{dim expr} supplies a default unit of \unit{pt}.
-
-The package will issue a warning if the user sets the keys \Key{\meta{font size command}\slash{}size} and \Key{\meta{font size command}\slash{}scale} for the same \meta{font size command} since the latter key will be ignored.
-
-\Key{\meta{font size command}/baselineskip}[\meta{skip expr}]
-\KeepNextPar*
-
-The keys \Key{\meta{font size command}\slash{}baselineskip} set the font baselineskip of \meta{font size command} to \meta{skip expr} instead of calculating it from the size of \meta{font size command} and \Key{baselineskip\-/size\-/ratio}.
-\meta{skip expr} supplies a default unit of \unit{pt}.
-
-\Key{\meta{font size command}}[\meta{dim expr}]
-\nopagebreak\newline
-\Key{\meta{font size command}}[\meta{dim expr}/\meta{skip expr}]
-
-The keys \Key{\meta{font size command}} set the keys \Key{\meta{font size command}\slash{}size} or \Key{\meta{font size command}\slash{}baselineskip} in a condensed format.
-The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, $10/12$ or $11/13$.
-The number before/after the slash is the size/leading in \unit{pts}.
-
-\Key{ignore-order}[true, false][false]
-\KeepNextPar*
-
-The user should take care to ensure that the font sizes and font baselineskips remain in the correct order when directly setting the scales, sizes, or baselineskips of the different font size commands.
-The magnitudes of the font sizes and font baselineskips should be ordered from \cs{tiny} to \cs{normalsize} to \cs{Huge}.
-This is important for typographic and syntactic consistency.
-This package will issue a warning if they are not in the correct order.
-The user can disable this warning via the key \Key{ignore\-/order}[true] or just \Key{ignore\-/order}.
-
-
-\section{User commands}
-\label{sec:usercommands}
-
-\subsection{Expandable font parameters}
-\label{subsec:fontparameters}
-
-\cs{CurrentFontStep}
-\nopagebreak\newline
-\cs{CurrentFontScale}
-\newline
-\cs{CurrentFontSize}
-\nopagebreak\newline
-\cs{CurrentFontBaselineskip}
-
-These are fully expandable commands that expand to the current font step, scale, size, or baselineskip.
-They can be used for printing or within calculations.
-Caution: \cs{CurrentFontStep} will expand to nothing if the current font step is undefined.
-
-Internally, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} use the kernel command \cs{f@size}.
-\cs{CurrentFontSize} expands to \texttt{f@size pt}.
-\cs{CurrentFontBaselineskip} expands to the kernel command \cs{f@baselineskip}.
-Note that the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}} sets \cs{f@size} to the new font size before expanding its second argument.
-This means that \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} may need to be first expanded if used in \meta{skip}.
-This package provides the command \cs{SetFontSizeBaselineskip} as an alternative to \cs{fontsize} + \cs{selectfont} that avoids this issue (\S\ref{subsec:fontsize}).
-
-\subsection{More font sizing commands}
-\label{subsec:fontsize}
-
-The \pkg{fontscale} package provides the commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} which set the font size in different ways.
-The first three commands have a starred version which sets the font size relative to the current font size.
-Internally, these commands all use the low\-/level font commands \cs{fontsize} and \cs{selectfont}.
-These commands should be used only in special cases.
-Generally, users should prefer the font size commands from \cs{tiny} to \cs{Huge} for typographic and syntactic consistency, although \cs{SetFontStep*}\marg{\meta{integer}} can use a font size command directly.
-
-\cs{SetFontStep}\marg{\meta{fp expr}}
-\nopagebreak\newline
-\cs{SetFontStep*}\marg{\meta{fp expr}}
-
-\cs{SetFontStep} sets the font size by setting the font step to \meta{fp expr}.
-The starred version \cs{SetFontStep*} adds \meta{fp expr} to the current font step.
-If the choice of typographic scale is not modular or musical, then the only valid values for \meta{fp expr} are the integers from \num{-4} to \num{5}, corresponding to the font size commands from \cs{tiny} to \cs{Huge}.
-\cs{SetFontStep} will issue an error if the calculated font step is invalid.
-The starred version \cs{SetFontStep*} will also issue an error if the current font step is invalid.
-\cs{SetFontStep} sets the font baselineskip to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}.
-If the calculated font step matches the step of any font size command, then that font size command will be used directly.
-
-\listheading{Examples:}
-\begin{itemize}
- \item
- For example, \cs{SetFontStep}\marg{-2} and \cs{SetFontStep}\marg{2} use \cs{footnotesize} and \cs{Large}.
- Note that it is typically better to use the equivalent font size command in place of \cs{SetFontStep}\marg{\meta{integer}}.
- \item
- If the current font size is \cs{normalsize}, \cs{SetFontStep*}\marg{1} and \cs{SetFontStep*}\marg{-1} use \cs{large} and \cs{small}.
- This is useful for moving up or down a note on the typographic scale.
- \item
- If the choice of typographic scale is modular or musical, \cs{SetFontStep*}\marg{-0.5} sets the font size and font baselineskip to values between that of \cs{normalsize} and \cs{small}.
- Otherwise, it produces an error.
-\end{itemize}
-
-\cs{SetFontScale}\marg{\meta{fp expr}}
-\nopagebreak\newline
-\cs{SetFontScale*}\marg{\meta{fp expr}}
-
-\cs{SetFontScale} sets the font size by setting the font scale to \meta{fp expr}.
-The font baselineskip is set to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}.
-The starred version \cs{SetFontScale*} adds \meta{fp expr} to the current font scale.
-For example, \cs{SetFontScale}\marg{1.25} makes the font size 25\% larger than \cs{normalsize}.
-If the current font size is \cs{normalsize}, \cs{SetFontScale*}\marg{0.2} is equivalent to \cs{SetFontScale}\marg{1.2}.
-
-\cs{SetFontSize}\marg{\meta{dim expr}}
-\nopagebreak\newline
-\cs{SetFontSize*}\marg{\meta{dim expr}}
-
-\cs{SetFontSize} sets the font size to \meta{dim expr}.
-\meta{dim expr} supplies a default unit of \unit{pt}.
-The font baselineskip is set to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}.
-The starred version \cs{SetFontSize*} adds \meta{dim expr} to the current font size.
-For example, \cs{SetFontSize*}\marg{1} and \cs{SetFontSize*}\marg{-1pt} increase and decrease the current font size by a \unit{pt}.
-
-\cs{ScaleFont}\marg{\meta{fp expr}}
-\KeepNextPar*
-
-Scales the current font size and the current font baselineskip by a factor of \meta{fp expr}.
-For example, if the current font size and font baselineskip are \qty{10}{pt} and \qty{12}{pt}, using \cs{ScaleFont}\marg{0.8} will reduce them proportionally to \qty{8}{pt} and \qty{9.6}{pt}.
-
-\cs{SetFontSizeBaselineskip}\marg{\meta{dim expr}}\marg{\meta{skip expr}}
-\KeepNextPar*
-
-Sets the font size to \meta{dim expr} and the font baselineskip to \meta{skip expr}.
-Both arguments supply a default unit of \unit{pt}.
-\cs{SetFontSizeBaselineskip} can be used as an alternative to \cs{fontsize} + \cs{selectfont} as it avoids the issue with \cs{f@size} discussed in \S\ref{subsec:fontparameters}.
-
-\subsection{Testing and debugging}
-\label{subsec:debug}
-
-The commands documented here are intended primarily for testing and debugging.
-I have used them often when developing this package so I think users will find them helpful.
-
-\cs{PrintFontParameters}
-\nopagebreak\newline
-\cs{PrintAllFontParameters}
-
-\cs{PrintFontParameters} prints the current font step, scale, size, and baselineskip in this order in a comma\-/separated list of key = value pairs.
-If the current font step is undefined (as explained for \cs{SetFontStep} in \S\ref{subsec:fontsize}), it will be left blank.
-\cs{PrintAllFontParameters} prints the step, scale, size, and baselineskip of each font size command.
-
-\cs{PrintSampleText}\oarg{\meta{text}}
-\nopagebreak\newline
-\cs{PrintSampleText*}\oarg{\meta{text}}
-
-\cs{PrintSampleText} prints \meta{text} in each font size ordered from \cs{tiny} to \cs{Huge} each followed by a paragraph break.
-The starred version \cs{PrintSampleText*} reverses the sizing order.
-The \meta{text} can be changed via the optional argument, but cannot contain \cs{par} tokens.
-The default \meta{text} is \enquote{The \texttt{fontscale} package: A user interface for setting document font sizes}.
-One useful way of printing example text is by using
-\cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}.
-
-\cs{PrintFontSizeCommand}
-\KeepNextPar*
-
-\cs{PrintFontSizeCommand} tests whether the current font size and the current font baselineskip match the font size and font baselineskip of any font size command from \cs{tiny} to \cs{Huge}.
-If so, it prints the name of that font size command, including the backslash character.
-If not, it instead prints \enquote{UNDEFINED\@}.
-\vfill\pagebreak%manual
-
-\subsection
- {%
- \texorpdfstring
- {More on \cs{fontscalesetup}}
- {More on \textbackslash{}fontscalesetup}%
- }
-\label{subsec:fontscalesetup}
-
-\cs{fontscalesetup}\marg{\meta{keyval list}}
-\KeepNextPar*
-
-Sets and processes the \pkg{fontscale} package keys and then uses \cs{normalsize}.
-\cs{fontscalesetup} can be applied mid\-/document or locally within the current \TeX{} group.
-
-\Key{reset}[initial, preamble]
-\KeepNextPar*
-
-The key \Key{reset} is also available.
-Its value must be either \texttt{initial} or \texttt{preamble}.
-The key \Key{reset}[initial] or just \Key{reset} sets all the keys to their initial values.
-The key \Key{reset}[preamble] sets all the keys to their values at the end of the preamble (or does nothing if used before the end of the preamble).
-
-
-\section{Programming}
-\label{sec:programming}
-
-This section is relevant to \LaTeX3 programmers.
-
-The document commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}.
-\cs{text_purify:n} will correctly remove these commands and their arguments.
-This includes the starred versions \cs{SetFontStep*}, \cs{SetFontScale*}, and \cs{SetFontSize*}.
-
-This package does not provide any public \pkg{expl3} functions.
-
-This package provides some public \pkg{expl3} variables.
-The package stores in public variables the step, scale, size, and baselineskip of each font size command.
-These variables should not be modified directly.
-Instead, they should be modified only indirectly via the command \cs{fontscalesetup}.
-
-Each takes the form:
-
-\begingroup
- \ttfamily
- \textbackslash{}c\_fontscale\_\meta{font size command}\_step\_fp
- \nopagebreak\newline
- \textbackslash{}l\_fontscale\_\meta{font size command}\_scale\_fp
- \newline
- \textbackslash{}l\_fontscale\_\meta{font size command}\_size\_dim
- \nopagebreak\newline
- \textbackslash{}l\_fontscale\_\meta{font size command}\_baselineskip\_skip
-\endgroup
-
-Exception:
-\cs{l_fontscale_normalsize_scale_fp} is not defined.
-The scale of \cs{normalsize} is instead stored as the constant \cs{c_fontscale_normalsize_scale_fp}, which always equals \num{1}.
-
-The step, scale, size, and baselineskip of each font size command are also stored in property lists, one for each font size command:
-
-\texttt{\textbackslash{}l\_fontscale\_\meta{font size command}\_prop}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-table-classic.tex b/macros/latex/contrib/fontscale/fontscale-table-classic.tex
new file mode 100644
index 0000000000..b1d98834c6
--- /dev/null
+++ b/macros/latex/contrib/fontscale/fontscale-table-classic.tex
@@ -0,0 +1,41 @@
+\ProvidesFile
+ {fontscale-table-classic.tex}
+ [2024-08-02]
+
+\begin{table}
+ \centering
+ \caption
+ {%
+ The font size of each font size command from \cs{tiny} to \cs{Huge} in units of \unit{pt} when using a classic typographic scale.%
+ \label{table:classic}%
+ }
+ \bigskip
+ \begin{tblr}
+ {
+ colspec=
+ {
+ l
+ Q[si={table-format=3.2},c]
+ Q[si={table-format=3.2},c]
+ Q[si={table-format=3.2},c]
+ }
+ , cell{1}{2-Z}={guard}
+ , cell{2-Z}{1}={cmd=\cs}
+ , cell{1}{2-Z}={cmd=\Key}
+ }
+ \toprule
+ font size command & classic-10pt & classic-11pt & classic-12pt \\
+ \midrule
+ tiny & 6 & 7 & 8 \\
+ scriptsize & 7 & 8 & 9 \\
+ footnotesize & 8 & 9 & 10 \\
+ small & 9 & 10 & 11 \\
+ normalsize & 10 & 11 & 12 \\
+ large & 11 & 12 & 14 \\
+ Large & 12 & 14 & 16 \\
+ LARGE & 14 & 16 & 18 \\
+ huge & 16 & 18 & 21 \\
+ Huge & 18 & 21 & 24 \\
+ \bottomrule
+ \end{tblr}
+\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
new file mode 100644
index 0000000000..7b0a7fca87
--- /dev/null
+++ b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
@@ -0,0 +1,39 @@
+\ProvidesFile
+ {fontscale-table-font-steps.tex}
+ [2024-08-02]
+
+\begin{table}
+ \centering
+ \caption
+ {%
+ The font step of each font size command from \cs{tiny} to \cs{Huge}.
+ These are constants and cannot be changed.%
+ \label{table:fontsteps}%
+ }
+ \bigskip
+ \begin{tblr}
+ {
+ colspec=
+ {
+ l
+ Q[si={table-format=3.2},c]
+ }
+ , cell{1}{2}={guard}
+ , cell{2-Z}{1}={cmd=\cs}
+ }
+ \toprule
+ font size command & font step \\
+ \midrule
+ tiny & -4 \\
+ scriptsize & -3 \\
+ footnotesize & -2 \\
+ small & -1 \\
+ normalsize & 0 \\
+ large & 1 \\
+ Large & 2 \\
+ LARGE & 3 \\
+ huge & 4 \\
+ Huge & 5 \\
+ \bottomrule
+ \end{tblr}
+\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale-table-musical.tex b/macros/latex/contrib/fontscale/fontscale-table-musical.tex
new file mode 100644
index 0000000000..aac7c60ebc
--- /dev/null
+++ b/macros/latex/contrib/fontscale/fontscale-table-musical.tex
@@ -0,0 +1,39 @@
+\ProvidesFile
+ {fontscale-table-musical.tex}
+ [2024-08-02]
+
+\begin{table}
+ \centering
+ \caption
+ {%
+ The font size of each font size command from \cs{tiny} to \cs{Huge} when using a musical typographic scale with the initial values.
+ The font sizes are in units of \unit{pt} and rounded to two decimal places.%
+ \label{table:musical}%
+ }
+ \bigskip
+ \begin{tblr}
+ {
+ colspec=
+ {
+ l
+ Q[si={table-format=3.2},c]
+ }
+ , cell{1}{2}={guard}
+ , cell{2-Z}{1}={cmd=\cs}
+ }
+ \toprule
+ font size command & \Key{musical} \\
+ \midrule
+ tiny & 5.74 \\
+ scriptsize & 6.60 \\
+ footnotesize & 7.58 \\
+ small & 8.71 \\
+ normalsize & 10 \\
+ large & 11.49 \\
+ Large & 13.20 \\
+ LARGE & 15.16 \\
+ huge & 17.41 \\
+ Huge & 20 \\
+ \bottomrule
+ \end{tblr}
+\end{table} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale.pdf b/macros/latex/contrib/fontscale/fontscale.pdf
new file mode 100644
index 0000000000..0ac3be30ee
--- /dev/null
+++ b/macros/latex/contrib/fontscale/fontscale.pdf
Binary files differ
diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty
index d032e49860..314c337e3e 100644
--- a/macros/latex/contrib/fontscale/fontscale.sty
+++ b/macros/latex/contrib/fontscale/fontscale.sty
@@ -1,33 +1,32 @@
-% Package : fontscale -- A user interface for setting document font sizes
+% Package : fontscale -- A flexible interface for setting font sizes
% Copyright : 2024 (c) Oliver Beery <beeryoliver@gmail.com>
% CTAN : https://ctan.org/pkg/fontscale
% Repository: https://github.com/beeryoliver/fontscale
% License : The LaTeX Project Public License 1.3c
-% The 2022-06-01 LaTeX kernel update added \ProcessKeyOptions.
-\NeedsTeXFormat{LaTeX2e}[2022-06-01]
+% LaTeX2e version 2023-11-01 added \IfExplAtLeastTF.
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesExplPackage
{fontscale}
- {2024-05-17}
- {1.3.0}
- {A user interface for setting document font sizes}
+ {2024-08-02}
+ {2.0.0}
+ {A flexible interface for setting font sizes}
-% The 2023-10-10 l3kernel update added many 'e'-variants.
-\IfExplAtLeastTF { 2023-10-10 }
- { }
+% l3kernel version 2023-10-10 added many 'e'-variants.
+\IfExplAtLeastTF { 2023-10-10 } { }
{
\msg_new:nnn { fontscale } { expl3-out-of-date }
{
- The~ package~ could~ not~ load.~
- The~ fontscale~ package~ requires~
- L3~ programming~ layer~ version~ 2023-10-10~ or~ later.
+ The~ fontscale~ package~ could~ not~ load.~
+ This~ package~ requires~
+ L3~ programming~ layer~ version~ 2023-10-10~ or~ newer.
}
\msg_critical:nn { fontscale } { expl3-out-of-date }
}
% This package does not require any other packages!
-% DECLARE FONT PARAMETER VARIABLES
+% DECLARE FONT SIZE PARAMETER VARIABLES
\fp_const:Nn \c_fontscale_tiny_step_fp { -4 }
\fp_const:Nn \c_fontscale_scriptsize_step_fp { -3 }
@@ -74,31 +73,7 @@
\skip_new:N \l_fontscale_huge_baselineskip_skip
\skip_new:N \l_fontscale_Huge_baselineskip_skip
-\prop_new:N \l_fontscale_tiny_prop
-\prop_new:N \l_fontscale_scriptsize_prop
-\prop_new:N \l_fontscale_footnotesize_prop
-\prop_new:N \l_fontscale_small_prop
-\prop_new:N \l_fontscale_normalsize_prop
-\prop_new:N \l_fontscale_large_prop
-\prop_new:N \l_fontscale_Large_prop
-\prop_new:N \l_fontscale_LARGE_prop
-\prop_new:N \l_fontscale_huge_prop
-\prop_new:N \l_fontscale_Huge_prop
-
-\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 }
-\prop_put:Nnn \l_fontscale_small_prop { step } { -1 }
-\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 }
-\prop_put:Nnn \l_fontscale_large_prop { step } { 1 }
-\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 }
-\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 }
-\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 }
-\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 }
-
-\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 }
-
-% INITIALIZE FONT PARAMETER VARIABLES
+% INITIALIZE FONT SIZE PARAMETER VARIABLES
\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 }
\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 }
@@ -132,177 +107,219 @@
\skip_set:Nn \l_fontscale_huge_baselineskip_skip { 19.2pt }
\skip_set:Nn \l_fontscale_Huge_baselineskip_skip { 21.6pt }
-\prop_put:Nnn \l_fontscale_tiny_prop { scale } { 0.6 }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { scale } { 0.7 }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { scale } { 0.8 }
-\prop_put:Nnn \l_fontscale_small_prop { scale } { 0.9 }
-\prop_put:Nnn \l_fontscale_large_prop { scale } { 1.1 }
-\prop_put:Nnn \l_fontscale_Large_prop { scale } { 1.2 }
-\prop_put:Nnn \l_fontscale_LARGE_prop { scale } { 1.4 }
-\prop_put:Nnn \l_fontscale_huge_prop { scale } { 1.6 }
-\prop_put:Nnn \l_fontscale_Huge_prop { scale } { 1.8 }
-
-\prop_put:Nnn \l_fontscale_tiny_prop { size } { 6pt }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { size } { 7pt }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { size } { 8pt }
-\prop_put:Nnn \l_fontscale_small_prop { size } { 9pt }
-\prop_put:Nnn \l_fontscale_normalsize_prop { size } { 10pt }
-\prop_put:Nnn \l_fontscale_large_prop { size } { 11pt }
-\prop_put:Nnn \l_fontscale_Large_prop { size } { 12pt }
-\prop_put:Nnn \l_fontscale_LARGE_prop { size } { 14pt }
-\prop_put:Nnn \l_fontscale_huge_prop { size } { 16pt }
-\prop_put:Nnn \l_fontscale_Huge_prop { size } { 18pt }
-
-\prop_put:Nnn \l_fontscale_tiny_prop { baselineskip } { 7.2pt }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { baselineskip } { 8.4pt }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { baselineskip } { 9.6pt }
-\prop_put:Nnn \l_fontscale_small_prop { baselineskip } { 10.8pt }
-\prop_put:Nnn \l_fontscale_normalsize_prop { baselineskip } { 12 pt }
-\prop_put:Nnn \l_fontscale_large_prop { baselineskip } { 13.2pt }
-\prop_put:Nnn \l_fontscale_Large_prop { baselineskip } { 14.4pt }
-\prop_put:Nnn \l_fontscale_LARGE_prop { baselineskip } { 16.8pt }
-\prop_put:Nnn \l_fontscale_huge_prop { baselineskip } { 19.2pt }
-\prop_put:Nnn \l_fontscale_Huge_prop { baselineskip } { 21.6pt }
-
% SOME VARIABLES
-% Used for mapping.
-\tl_const:Nn \c__fontscale_names_tl
- {
- {tiny} {scriptsize} {footnotesize} {small} {normalsize}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-\tl_const:Nn \c__fontscale_names_other_tl
- {
- {tiny} {scriptsize} {footnotesize} {small}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-
% Used to speed up floating point calculations.
\fp_new:N \l__fontscale_normalsize_size_fp
\fp_set:Nn \l__fontscale_normalsize_size_fp { 10 }
+\fp_new:N \l__fontscale_musical_base_fp
\fp_new:N \l__fontscale_musical_notes_fp
-% Temporary variables
-\tl_new:N \l__fontscale_step_tl
-\tl_new:N \l__fontscale_scale_tl
-\dim_new:N \l__fontscale_size_dim
+% Scratch variables
+\tl_new:N \l__fontscale_tmp_tl
+\dim_new:N \l__fontscale_tmp_dim
+\fp_new:N \l__fontscale_tmp_fp
% SOME HELPER FUNCTIONS
-% Sets a dimen/skip variable from a dimen/skip expression, supplying a default
+% Sets a dimen/skip variable from a dimen/skip expression, appending a default
% unit of pt.
-\cs_new_protected:Npn \__fontscale_dim_set_with_default_pt:Nn #1#2
+\cs_new_protected:Npn \__fontscale_dim_set_default_pt:Nn #1#2
{ \@defaultunits #1 = \dimexpr #2 pt \relax \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_dim_set_with_default_pt:Nn { c }
-\cs_new_protected:Npn \__fontscale_skip_set_with_default_pt:Nn #1#2
+\cs_generate_variant:Nn \__fontscale_dim_set_default_pt:Nn { c }
+\cs_new_protected:Npn \__fontscale_skip_set_default_pt:Nn #1#2
{ \@defaultunits #1 = \glueexpr #2 pt \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_skip_set_with_default_pt:Nn { c }
-% Used to define \tiny to \Huge. Need \dim_use:N for compatibility with the
-% microtype package. Otherwise the following would do:
-% \cs_new_protected:Npn \__fontscale_fontsize:NNN { \@setfontsize }
-\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2
- { \@setfontsize #1 { \dim_use:N #2 } }
-% Similar to \fontsize + \selectfont, except that it takes dimen and skip
-% expressions as arguments and avoids the issue where \f@size is set to the new
-% font size before the second argument is expanded.
+\cs_generate_variant:Nn \__fontscale_skip_set_default_pt:Nn { c }
+% Similar to \@setfontsize. Used to define \tiny to \Huge. Need \dim_use:N for
+% compatibility with the microtype package.
+\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2#3
+ {
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N #1 }
+ }
+ {
+ \cs_set_eq:NN \@currsize #1
+ \fontsize { \dim_use:N #2 } #3 \selectfont
+ }
+ }
+% Similar to \fontsize + \selectfont, except that it:
+% (1) Takes dimen and skip expressions as arguments.
+% (2) Avoids the issue where \f@size is set to the new font size before the
+% second argument is expanded.
+% (3) Provides error checking for the font size and font baselineskip.
+\dim_new:N \l__fontscale_fontsize_dim
\skip_new:N \l__fontscale_fontsize_skip
\cs_new_protected:Npn \__fontscale_fontsize:nn #1#2
{
- \__fontscale_skip_set_with_default_pt:Nn \l__fontscale_fontsize_skip {#2}
- \fontsize { = \dimexpr #1 pt \relax \relax } \l__fontscale_fontsize_skip
- \selectfont
+ \__fontscale_dim_set_default_pt:Nn \l__fontscale_fontsize_dim {#1}
+ \__fontscale_skip_set_default_pt:Nn \l__fontscale_fontsize_skip {#2}
+ \dim_compare:nNnTF \l__fontscale_fontsize_dim > \c_zero_dim
+ {
+ \dim_compare:nNnTF \l__fontscale_fontsize_skip <
+ \l__fontscale_fontsize_dim
+ { \msg_error:nn { fontscale } { font-baselineskip-out-of-bounds } }
+ {
+ \fontsize \l__fontscale_fontsize_dim \l__fontscale_fontsize_skip
+ \selectfont
+ }
+ }
+ { \msg_error:nn { fontscale } { font-size-out-of-bounds } }
}
% Similar to the above function, except that it sets the font baselineskip
% equal to the new font size times the baselineskip-size-ratio.
\cs_new_protected:Npn \__fontscale_fontsize:n #1
{
- \fontsize { = \dimexpr #1 pt \relax \relax }
- { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
- \selectfont
+ \__fontscale_dim_set_default_pt:Nn \l__fontscale_fontsize_dim {#1}
+ \dim_compare:nNnTF \l__fontscale_fontsize_dim > \c_zero_dim
+ {
+ \fontsize \l__fontscale_fontsize_dim
+ {
+ \fp_to_dim:n
+ {
+ \l__fontscale_fontsize_dim
+ * \l__fontscale_baselineskip_size_ratio_fp
+ }
+ }
+ \selectfont
+ }
+ { \msg_error:nn { fontscale } { font-size-out-of-bounds } }
}
% MESSAGES
-\msg_new:nnn { fontscale } { modular-ratio-out-of-bounds }
+\msg_new:nnn { fontscale } { key-baselineskip-size-ratio-out-of-bounds }
{
- The~ value~ for~ the~ key~ 'modular / ratio'~
+ The~ value~ of~ the~ key~ 'baselineskip-size-ratio'~
\msg_line_context: \c_space_tl
- must~ be~ greater~ than~ 1.
+ must~ be~ at~ least~ 1.
}
-\msg_new:nnn { fontscale } { musical-ratio-out-of-bounds }
+\msg_new:nnn { fontscale } { key-musical-base-out-of-bounds }
{
- The~ value~ for~ the~ key~ 'musical / ratio'~
+ The~ value~ of~ the~ key~ 'musical / base'~
+ \msg_line_context: \c_space_tl
+ must~ be~ a~ positive~ length.
+ }
+\msg_new:nnn { fontscale } { key-musical-ratio-out-of-bounds }
+ {
+ The~ value~ of~ the~ key~ 'musical / ratio'~
\msg_line_context: \c_space_tl
must~ be~ greater~ than~ 1.
}
-\msg_new:nnn { fontscale } { musical-notes-out-of-bounds }
+\msg_new:nnn { fontscale } { key-musical-notes-out-of-bounds }
{
- The~ value~ for~ the~ key~ 'musical / notes'~
+ The~ value~ of~ the~ key~ 'musical / notes'~
\msg_line_context: \c_space_tl
must~ be~ a~ positive~ integer.
}
-\msg_new:nnn { fontscale } { key-font-scale-ignored }
+\msg_new:nnn { fontscale } { key-font-scale-out-of-bounds }
{
- Key~ '#1 / scale'~
+ The~ value~ of~ the~ key~ '#1 / scale'~
\msg_line_context: \c_space_tl
- ignored.~
- Setting~ the~ scale~ and~ size~ keys~ for~ the~ same~
- font~ size~ command~ ignores~ the~ scale~ key.
+ must~ be~ positive.
+ }
+\msg_new:nnn { fontscale } { key-font-size-out-of-bounds }
+ {
+ The~ value~ of~ the~ key~ '#1 / size'~
+ \msg_line_context: \c_space_tl
+ must~ be~ a~ positive~ length.
+ }
+\msg_new:nnn { fontscale } { key-font-scale-overwritten }
+ {
+ The~ font~ size~ set~ by~ the~ key~ '#1 / scale'~
+ has~ been~ overwritten~ by~ the~ key~ '#1 / size'~
+ \msg_line_context:.
+ }
+\msg_new:nnn { fontscale } { key-font-baselineskip-out-of-bounds }
+ {
+ The~ value~ of~ the~ key~ '#1 / baselineskip'~
+ \msg_line_context: \c_space_tl
+ must~ be~ greater~ than~ or~ equal~ to~
+ the~ font~ size~ of~ '\iow_char:N \\#1'.
}
\msg_new:nnn { fontscale } { font-sizes-out-of-order }
{
The~ font~ sizes~
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
- The~ magnitude~ of~ the~ font~ sizes~ should~ be~ ordered~ from~
- '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
- '\iow_char:N \\Huge'.
+ The~ lengths~ of~ the~ font~ sizes~ should~ be~ ordered~ from~
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\Huge'.
}
\msg_new:nnn { fontscale } { font-baselineskips-out-of-order }
{
The~ font~ baselineskips~
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
- The~ magnitude~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~
- '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
- '\iow_char:N \\Huge'.
+ The~ lengths~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\Huge'.
+ }
+
+\msg_new:nnn { fontscale } { math-mode-warning }
+ {
+ '#1'~
+ \msg_line_context: \c_space_tl
+ does~ nothing~ if~ used~ in~ math~ mode.
+ }
+\msg_new:nnn { fontscale } { math-mode-error }
+ {
+ '#1'~
+ \msg_line_context: \c_space_tl
+ cannot~ be~ used~ in~ math~ mode.
+ }
+\msg_new:nnn { fontscale } { font-size-out-of-bounds }
+ {
+ The~ font~ size~
+ \msg_line_context: \c_space_tl
+ must~ be~ a~ positive~ length.
+ }
+\msg_new:nnn { fontscale } { font-baselineskip-out-of-bounds }
+ {
+ The~ font~ baselineskip~
+ \msg_line_context: \c_space_tl
+ must~ be~ greater~ than~ or~ equal~ to~ the~ font~ size.
}
\msg_new:nnn { fontscale } { font-step-out-of-bounds }
{
The~ font~ step~
\msg_line_context: \c_space_tl
- must~ be~ an~ integer~ from~ -4~ to~ 5,~
- unless~ the~ value~ for~ the~ choice~ key~ 'typographic-scale'~
- is~ 'modular'~ or~ 'musical'.
+ must~ equal~ an~ integer~ from~ -4~ to~ 5,~
+ unless~ the~ value~ of~ the~ key~ 'typographic-scale'~ is~ 'musical'.
}
\msg_new:nnn { fontscale } { current-font-step-out-of-bounds }
{
'\iow_char:N \\SetFontStep*'~
\msg_line_context: \c_space_tl
could~ not~ calculate~ the~ new~ font~ step~ because~
- the~ current~ font~ step~ is~ undefined.
+ the~ current~ font~ step~ is~ undefined.~
+ \msg_see_documentation_text:n { fontscale }
}
% DEFINE KEYS
\str_new:N \l__fontscale_typographic_scale_str
+\dim_new:N \l__fontscale_musical_base_dim
-\keys_define:nn { fontscale }
+\cs_new_protected:Npn \__fontscale_keys_name:n #1
{
- reset .choices:nn = { initial , preamble }
- { \use:c { __fontscale_keys_precompile_#1: } }
- , reset .default:n = initial
-
- , ignore-order .bool_set:N = \l__fontscale_ignore_order_bool
- , ignore-order .default:n = true
+ \tl_if_in:nnTF {#1} { / }
+ { \__fontscale_keys_name_split:ww #1 \q_stop }
+ { \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} }
+ }
+\cs_new_protected:Npn \__fontscale_keys_name_split:ww #1 / #2 \q_stop
+ {
+ \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1}
+ \tl_set:cn { l__fontscale_ \l_keys_key_str _baselineskip_tl } {#2}
+ }
- , baselineskip-size-ratio .fp_set:N =
+\keys_define:nn { fontscale }
+ {
+ baselineskip-size-ratio .fp_set:N =
\l__fontscale_baselineskip_size_ratio_fp
, baselineskip-size-ratio .value_required:n = true
, typographic-scale .choices:nn =
- { classic-10pt , classic-11pt , classic-12pt , modular , musical }
+ { classic-10pt , classic-11pt , classic-12pt , musical }
{ \str_set:Nn \l__fontscale_typographic_scale_str {#1} }
, typographic-scale .value_required:n = true
@@ -315,18 +332,16 @@
, classic-12pt .meta:n = { typographic-scale = classic-12pt }
, classic-12pt .value_forbidden:n = true
- , modular .meta:n = { typographic-scale = modular }
- , modular .value_forbidden:n = true
-
, musical .meta:n = { typographic-scale = musical }
, musical .value_forbidden:n = true
-
- , modular / ratio .fp_set:N = \l__fontscale_modular_ratio_fp
- , modular / ratio .value_required:n = true
}
\keys_define:nn { fontscale / musical }
{
- ratio .fp_set:N = \l__fontscale_musical_ratio_fp
+ base .code:n =
+ \__fontscale_dim_set_default_pt:Nn \l__fontscale_musical_base_dim {#1}
+ , base .value_required:n = true
+
+ , ratio .fp_set:N = \l__fontscale_musical_ratio_fp
, ratio .value_required:n = true
, notes .int_set:N = \l__fontscale_musical_notes_int
@@ -441,58 +456,46 @@
}
\keys_define:nn { fontscale }
{
- tiny .code:n = \__fontscale_keys_name_code:n {#1}
+ tiny .code:n = \__fontscale_keys_name:n {#1}
, tiny .value_required:n = true
- , scriptsize .code:n = \__fontscale_keys_name_code:n {#1}
+ , scriptsize .code:n = \__fontscale_keys_name:n {#1}
, scriptsize .value_required:n = true
- , footnotesize .code:n = \__fontscale_keys_name_code:n {#1}
+ , footnotesize .code:n = \__fontscale_keys_name:n {#1}
, footnotesize .value_required:n = true
- , small .code:n = \__fontscale_keys_name_code:n {#1}
+ , small .code:n = \__fontscale_keys_name:n {#1}
, small .value_required:n = true
- , normalsize .code:n = \__fontscale_keys_name_code:n {#1}
+ , normalsize .code:n = \__fontscale_keys_name:n {#1}
, normalsize .value_required:n = true
- , large .code:n = \__fontscale_keys_name_code:n {#1}
+ , large .code:n = \__fontscale_keys_name:n {#1}
, large .value_required:n = true
- , Large .code:n = \__fontscale_keys_name_code:n {#1}
+ , Large .code:n = \__fontscale_keys_name:n {#1}
, Large .value_required:n = true
- , LARGE .code:n = \__fontscale_keys_name_code:n {#1}
+ , LARGE .code:n = \__fontscale_keys_name:n {#1}
, LARGE .value_required:n = true
- , huge .code:n = \__fontscale_keys_name_code:n {#1}
+ , huge .code:n = \__fontscale_keys_name:n {#1}
, huge .value_required:n = true
- , Huge .code:n = \__fontscale_keys_name_code:n {#1}
+ , Huge .code:n = \__fontscale_keys_name:n {#1}
, Huge .value_required:n = true
}
-\cs_new_protected:Npn \__fontscale_keys_name_code:n #1
- {
- \str_if_in:nnTF {#1} { / }
- { \__fontscale_keys_name_code_split:ww #1 \q_stop }
- { \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} }
- }
-\cs_new_protected:Npn \__fontscale_keys_name_code_split:ww #1 / #2 \q_stop
- {
- \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1}
- \tl_set:cn { l__fontscale_ \l_keys_key_str _baselineskip_tl } {#2}
- }
-% PRE-COMPILE KEYS
+% INITIALIZE AND PRE-COMPILE KEYS
% Pre-compiles the keys with their initial values and then sets the keys to
% their initial values. This is done by hand for speed.
-\cs_new_protected:Npn \__fontscale_keys_precompile_initial:
+\cs_new_protected:Npn \__fontscale_keys_set_initial:
{
- \bool_set_false:N \l__fontscale_ignore_order_bool
\fp_set:Nn \l__fontscale_baselineskip_size_ratio_fp { 1.2 }
\str_set:Nn \l__fontscale_typographic_scale_str { classic-10pt }
- \fp_set:Nn \l__fontscale_modular_ratio_fp { 1.125 }
+ \dim_set:Nn \l__fontscale_musical_base_dim { 10pt }
\fp_set:Nn \l__fontscale_musical_ratio_fp { 2 }
\int_set:Nn \l__fontscale_musical_notes_int { 5 }
@@ -528,98 +531,23 @@
\tl_set:Nn \l__fontscale_huge_baselineskip_tl { \q_no_value }
\tl_set:Nn \l__fontscale_Huge_baselineskip_tl { \q_no_value }
}
-\__fontscale_keys_precompile_initial:
+\__fontscale_keys_set_initial:
+
+% SET AND PROCESS KEYS
-% Pre-compiles the keys with their values at the end of the preamble. The keys
-% are pre-compiled by hand for speed.
-\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing:
-% \AddToHook is passed only a single token for speed.
-\AddToHook { begindocument / before }
- { \__fontscale_keys_precompile_preamble_set: }
-\cs_new_protected:Npn \__fontscale_keys_precompile_preamble_set:
+\NewDocumentCommand \fontscalesetup { s m }
{
- \cs_set_protected:Npe \__fontscale_keys_precompile_preamble:
+ \mode_if_math:TF
{
- \bool_if:NTF \l__fontscale_ignore_order_bool
- { \bool_set_true:N } { \bool_set_false:N }
- \exp_not:N \l__fontscale_ignore_order_bool
- \fp_set:Nn \exp_not:N \l__fontscale_baselineskip_size_ratio_fp
- { \exp_not:V \l__fontscale_baselineskip_size_ratio_fp }
- \str_set:Nn \exp_not:N \l__fontscale_typographic_scale_str
- { \l__fontscale_typographic_scale_str }
- \fp_set:Nn \exp_not:N \l__fontscale_modular_ratio_fp
- { \exp_not:V \l__fontscale_modular_ratio_fp }
- \fp_set:Nn \exp_not:N \l__fontscale_musical_ratio_fp
- { \exp_not:V \l__fontscale_musical_ratio_fp }
- \int_set:Nn \exp_not:N \l__fontscale_musical_notes_int
- { \int_use:N \l__fontscale_musical_notes_int }
-
- \tl_set:Nn \exp_not:N \l__fontscale_tiny_scale_tl
- { \exp_not:V \l__fontscale_tiny_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_scale_tl
- { \exp_not:V \l__fontscale_scriptsize_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_scale_tl
- { \exp_not:V \l__fontscale_footnotesize_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_small_scale_tl
- { \exp_not:V \l__fontscale_small_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_large_scale_tl
- { \exp_not:V \l__fontscale_large_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Large_scale_tl
- { \exp_not:V \l__fontscale_Large_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_LARGE_scale_tl
- { \exp_not:V \l__fontscale_LARGE_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_huge_scale_tl
- { \exp_not:V \l__fontscale_huge_scale_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Huge_scale_tl
- { \exp_not:V \l__fontscale_Huge_scale_tl }
-
- \tl_set:Nn \exp_not:N \l__fontscale_tiny_size_tl
- { \exp_not:V \l__fontscale_tiny_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_size_tl
- { \exp_not:V \l__fontscale_scriptsize_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_size_tl
- { \exp_not:V \l__fontscale_footnotesize_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_small_size_tl
- { \exp_not:V \l__fontscale_small_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_normalsize_size_tl
- { \exp_not:V \l__fontscale_normalsize_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_large_size_tl
- { \exp_not:V \l__fontscale_large_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Large_size_tl
- { \exp_not:V \l__fontscale_Large_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_LARGE_size_tl
- { \exp_not:V \l__fontscale_LARGE_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_huge_size_tl
- { \exp_not:V \l__fontscale_huge_size_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Huge_size_tl
- { \exp_not:V \l__fontscale_Huge_size_tl }
-
- \tl_set:Nn \exp_not:N \l__fontscale_tiny_baselineskip_tl
- { \exp_not:V \l__fontscale_tiny_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_baselineskip_tl
- { \exp_not:V \l__fontscale_scriptsize_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_baselineskip_tl
- { \exp_not:V \l__fontscale_footnotesize_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_small_baselineskip_tl
- { \exp_not:V \l__fontscale_small_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_normalsize_baselineskip_tl
- { \exp_not:V \l__fontscale_normalsize_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_large_baselineskip_tl
- { \exp_not:V \l__fontscale_large_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Large_baselineskip_tl
- { \exp_not:V \l__fontscale_Large_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_LARGE_baselineskip_tl
- { \exp_not:V \l__fontscale_LARGE_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_huge_baselineskip_tl
- { \exp_not:V \l__fontscale_huge_baselineskip_tl }
- \tl_set:Nn \exp_not:N \l__fontscale_Huge_baselineskip_tl
- { \exp_not:V \l__fontscale_Huge_baselineskip_tl }
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \fontscalesetup }
+ }
+ {
+ \IfBooleanTF #1
+ { \__fontscale_keys_reset:n {#2} }
+ { \__fontscale_keys_set:n {#2} }
}
}
-
-% PROCESS KEYS
-
-\NewDocumentCommand \fontscalesetup { m } { \__fontscale_keys_set:n {#1} }
\cs_new_protected:Npn \__fontscale_keys_set:n #1
{
\keys_set:nn { fontscale } {#1}
@@ -628,55 +556,65 @@
\prg_break:
\prg_break_point:
}
+\cs_new_protected:Npn \__fontscale_keys_reset:n
+ { \__fontscale_keys_set_initial: \__fontscale_keys_set:n }
\cs_new_protected:Npn \__fontscale_keys_process:
{
- \__fontscale_keys_process_check_modular_musical:
+ \__fontscale_keys_process_start:
\__fontscale_keys_process_normalsize:
\__fontscale_keys_process_other:
\__fontscale_keys_process_check_order:
}
-% Issues an error if the key 'modular/ratio', 'musical/ratio', or
-% 'musical/notes' is set to an impossible value.
-\cs_new_protected:Npn \__fontscale_keys_process_check_modular_musical:
+\cs_new_protected:Npn \__fontscale_keys_process_start:
{
- \fp_compare:nNnF \l__fontscale_modular_ratio_fp > \c_one_fp
+ \fp_compare:nNnT \l__fontscale_baselineskip_size_ratio_fp < \c_one_fp
{
- \msg_error:nn { fontscale } { modular-ratio-out-of-bounds }
+ \msg_error:nn { fontscale }
+ { key-baselineskip-size-ratio-out-of-bounds }
+ \prg_break:
+ }
+ \dim_compare:nNnF \l__fontscale_musical_base_dim > \c_zero_dim
+ {
+ \msg_error:nn { fontscale } { key-musical-base-out-of-bounds }
\prg_break:
}
\fp_compare:nNnF \l__fontscale_musical_ratio_fp > \c_one_fp
{
- \msg_error:nn { fontscale } { musical-ratio-out-of-bounds }
+ \msg_error:nn { fontscale } { key-musical-ratio-out-of-bounds }
\prg_break:
}
\int_compare:nNnF \l__fontscale_musical_notes_int > 0
{
- \msg_error:nn { fontscale } { musical-notes-out-of-bounds }
+ \msg_error:nn { fontscale } { key-musical-notes-out-of-bounds }
\prg_break:
}
}
-% Sets the size and baselineskip of \normalsize and updates their property list
-% entries.
+% Sets the font size and font baselineskip of \normalsize.
\cs_new_protected:Npn \__fontscale_keys_process_normalsize:
{
\quark_if_no_value:NTF \l__fontscale_normalsize_size_tl
{
\dim_set:Nn \l_fontscale_normalsize_size_dim
{
- \str_case:VnF \l__fontscale_typographic_scale_str
+ \str_case:Vn \l__fontscale_typographic_scale_str
{
+ { classic-10pt } { 10pt }
{ classic-11pt } { 11pt }
{ classic-12pt } { 12pt }
+ { musical } { \l__fontscale_musical_base_dim }
}
- { 10pt }
}
}
{
- \__fontscale_dim_set_with_default_pt:Nn
- \l_fontscale_normalsize_size_dim { \l__fontscale_normalsize_size_tl }
+ \__fontscale_dim_set_default_pt:Nn \l_fontscale_normalsize_size_dim
+ { \l__fontscale_normalsize_size_tl }
+ \dim_compare:nNnF \l_fontscale_normalsize_size_dim > \c_zero_dim
+ {
+ \msg_error:nnn { fontscale } { key-font-size-out-of-bounds }
+ { normalsize }
+ \prg_break:
+ }
}
- \prop_put:NnV \l_fontscale_normalsize_prop { size }
- \l_fontscale_normalsize_size_dim
\fp_set:Nn \l__fontscale_normalsize_size_fp
{ \l_fontscale_normalsize_size_dim }
\quark_if_no_value:NTF \l__fontscale_normalsize_baselineskip_tl
@@ -691,12 +629,17 @@
}
}
{
- \__fontscale_skip_set_with_default_pt:Nn
+ \__fontscale_skip_set_default_pt:Nn
\l_fontscale_normalsize_baselineskip_skip
{ \l__fontscale_normalsize_baselineskip_tl }
+ \dim_compare:nNnT \l_fontscale_normalsize_baselineskip_skip <
+ \l_fontscale_normalsize_size_dim
+ {
+ \msg_error:nnn { fontscale }
+ { key-font-baselineskip-out-of-bounds } { normalsize }
+ \prg_break:
+ }
}
- \prop_put:NnV \l_fontscale_normalsize_prop { baselineskip }
- \l_fontscale_normalsize_baselineskip_skip
}
% Auxiliary functions that expand to the font size depending on the name of the
% font size command.
@@ -745,57 +688,55 @@
{ Huge } { 24pt }
}
}
-\cs_new:Npn \__fontscale_keys_process_other_modular:n #1
- {
- \fp_to_dim:n
- {
- \l__fontscale_normalsize_size_fp * \l__fontscale_modular_ratio_fp
- ^ \use:c { c_fontscale_#1_step_fp }
- }
- }
\cs_new:Npn \__fontscale_keys_process_other_musical:n #1
{
\fp_to_dim:n
{
- \l__fontscale_normalsize_size_fp * \l__fontscale_musical_ratio_fp
+ \l__fontscale_musical_base_fp * \l__fontscale_musical_ratio_fp
^ ( \use:c { c_fontscale_#1_step_fp }
/ \l__fontscale_musical_notes_fp )
}
}
-% Sets the size, scale, and baselineskip of the other font size commands and
-% updates their property list entries. Issues a warning if the user sets both
-% the scale and size keys for the same font size command.
+% Sets the font size, font scale, and font baselineskip of the other font size
+% commands.
\cs_new_protected:Npn \__fontscale_keys_process_other:
{
- \cs_set_eq:Nc \__fontscale_keys_process_other_typographic_scale:n
+ \str_case:Vn \l__fontscale_typographic_scale_str
{
- \str_case:Vn \l__fontscale_typographic_scale_str
- {
- { classic-10pt } { __fontscale_keys_process_other_classic_xpt:n }
- { classic-11pt } { __fontscale_keys_process_other_classic_xipt:n }
- { classic-12pt } { __fontscale_keys_process_other_classic_xiipt:n }
- { modular } { __fontscale_keys_process_other_modular:n }
- { musical } { __fontscale_keys_process_other_musical:n }
- }
+ { classic-10pt }
+ {
+ \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n
+ \__fontscale_keys_process_other_classic_xpt:n
+ }
+ { classic-11pt }
+ {
+ \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n
+ \__fontscale_keys_process_other_classic_xipt:n
+ }
+ { classic-12pt }
+ {
+ \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n
+ \__fontscale_keys_process_other_classic_xiipt:n
+ }
+ { musical }
+ {
+ \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n
+ \__fontscale_keys_process_other_musical:n
+ \fp_set:Nn \l__fontscale_musical_base_fp
+ { \l__fontscale_musical_base_dim }
+ \fp_set:Nn \l__fontscale_musical_notes_fp
+ { \l__fontscale_musical_notes_int }
+ }
}
- \str_if_eq:VnT \l__fontscale_typographic_scale_str { musical }
+ \tl_map_function:nN
{
- \fp_set:Nn \l__fontscale_musical_notes_fp
- { \l__fontscale_musical_notes_int }
+ {tiny} {scriptsize} {footnotesize} {small}
+ {large} {Large} {LARGE} {huge} {Huge}
}
- \tl_map_function:NN \c__fontscale_names_other_tl
- \__fontscale_keys_process_other_aux:n
+ \__fontscale_keys_process_other_fn:n
}
-\cs_new_protected:Npn \__fontscale_keys_process_other_aux:n #1
+\cs_new_protected:Npn \__fontscale_keys_process_other_fn:n #1
{
- \quark_if_no_value:cF { l__fontscale_#1_size_tl }
- {
- \__fontscale_dim_set_with_default_pt:cn { l_fontscale_#1_size_dim }
- { \use:c { l__fontscale_#1_size_tl } }
- \quark_if_no_value:cF { l__fontscale_#1_scale_tl }
- { \msg_warning:nnn { fontscale } { key-font-scale-ignored } {#1} }
- \prg_break:
- }
\quark_if_no_value:cF { l__fontscale_#1_scale_tl }
{
\dim_set:cn { l_fontscale_#1_size_dim }
@@ -806,17 +747,42 @@
* ( \use:c { l__fontscale_#1_scale_tl } )
}
}
+ \dim_compare:nNnF { \use:c { l_fontscale_#1_size_dim } } > \c_zero_dim
+ {
+ \tl_map_break:n
+ {
+ \msg_error:nnn { fontscale } { key-font-scale-out-of-bounds }
+ {#1}
+ \prg_break:
+ }
+ }
+ \quark_if_no_value:cT { l__fontscale_#1_size_tl } { \prg_break: }
+ }
+ \quark_if_no_value:cF { l__fontscale_#1_size_tl }
+ {
+ \__fontscale_dim_set_default_pt:cn { l_fontscale_#1_size_dim }
+ { \use:c { l__fontscale_#1_size_tl } }
+ \dim_compare:nNnF { \use:c { l_fontscale_#1_size_dim } } > \c_zero_dim
+ {
+ \tl_map_break:n
+ {
+ \msg_error:nnn { fontscale } { key-font-size-out-of-bounds }
+ {#1}
+ \prg_break:
+ }
+ }
+ \quark_if_no_value:cF { l__fontscale_#1_scale_tl }
+ {
+ \msg_warning:nnn { fontscale } { key-font-scale-overwritten } {#1}
+ }
\prg_break:
}
\dim_set:cn { l_fontscale_#1_size_dim }
- { \__fontscale_keys_process_other_typographic_scale:n {#1} }
+ { \__fontscale_keys_process_other_fn_aux:n {#1} }
\prg_break:
\prg_break_point:
\fp_set:cn { l_fontscale_#1_scale_fp }
{ \use:c { l_fontscale_#1_size_dim } / \l__fontscale_normalsize_size_fp }
- \prop_put:cne { l_fontscale_#1_prop } { scale }
- { \fp_use:c { l_fontscale_#1_scale_fp } }
- \prop_put:cnv { l_fontscale_#1_prop } { size } { l_fontscale_#1_size_dim }
\quark_if_no_value:cTF { l__fontscale_#1_baselineskip_tl }
{
\skip_set:cn { l_fontscale_#1_baselineskip_skip }
@@ -829,122 +795,113 @@
}
}
{
- \__fontscale_skip_set_with_default_pt:cn
+ \__fontscale_skip_set_default_pt:cn
{ l_fontscale_#1_baselineskip_skip }
{ \use:c { l__fontscale_#1_baselineskip_tl } }
+ \dim_compare:nNnT { \use:c { l_fontscale_#1_baselineskip_skip } } <
+ { \use:c { l_fontscale_#1_size_dim } }
+ {
+ \tl_map_break:n
+ {
+ \msg_error:nnn { fontscale }
+ { key-font-baselineskip-out-of-bounds } {#1}
+ \prg_break:
+ }
+ }
}
- \prop_put:cnv { l_fontscale_#1_prop } { baselineskip }
- { l_fontscale_#1_baselineskip_skip }
}
% Issues a warning if the font sizes or font baselineskips (ignoring the
-% stretch and shrink components) are not in the correct order unless the value
-% for the key 'ignore-order' is 'true'.
+% stretch and shrink components) are not in the correct order.
\cs_new_protected:Npn \__fontscale_keys_process_check_order:
{
- \bool_if:NF \l__fontscale_ignore_order_bool
+ \dim_compare:nF
{
- \dim_compare:nF
- {
- \l_fontscale_tiny_size_dim
- < \l_fontscale_scriptsize_size_dim
- < \l_fontscale_footnotesize_size_dim
- < \l_fontscale_small_size_dim
- < \l_fontscale_normalsize_size_dim
- < \l_fontscale_large_size_dim
- < \l_fontscale_Large_size_dim
- < \l_fontscale_LARGE_size_dim
- < \l_fontscale_huge_size_dim
- < \l_fontscale_Huge_size_dim
- }
- { \msg_warning:nn { fontscale } { font-sizes-out-of-order } }
- \dim_compare:nF
- {
- \l_fontscale_tiny_baselineskip_skip
- < \l_fontscale_scriptsize_baselineskip_skip
- < \l_fontscale_footnotesize_baselineskip_skip
- < \l_fontscale_small_baselineskip_skip
- < \l_fontscale_normalsize_baselineskip_skip
- < \l_fontscale_large_baselineskip_skip
- < \l_fontscale_Large_baselineskip_skip
- < \l_fontscale_LARGE_baselineskip_skip
- < \l_fontscale_huge_baselineskip_skip
- < \l_fontscale_Huge_baselineskip_skip
- }
- { \msg_warning:nn { fontscale } { font-baselineskips-out-of-order } }
+ \l_fontscale_tiny_size_dim
+ < \l_fontscale_scriptsize_size_dim
+ < \l_fontscale_footnotesize_size_dim
+ < \l_fontscale_small_size_dim
+ < \l_fontscale_normalsize_size_dim
+ < \l_fontscale_large_size_dim
+ < \l_fontscale_Large_size_dim
+ < \l_fontscale_LARGE_size_dim
+ < \l_fontscale_huge_size_dim
+ < \l_fontscale_Huge_size_dim
+ }
+ { \msg_warning:nn { fontscale } { font-sizes-out-of-order } }
+ \dim_compare:nF
+ {
+ \l_fontscale_tiny_baselineskip_skip
+ < \l_fontscale_scriptsize_baselineskip_skip
+ < \l_fontscale_footnotesize_baselineskip_skip
+ < \l_fontscale_small_baselineskip_skip
+ < \l_fontscale_normalsize_baselineskip_skip
+ < \l_fontscale_large_baselineskip_skip
+ < \l_fontscale_Large_baselineskip_skip
+ < \l_fontscale_LARGE_baselineskip_skip
+ < \l_fontscale_huge_baselineskip_skip
+ < \l_fontscale_Huge_baselineskip_skip
}
+ { \msg_warning:nn { fontscale } { font-baselineskips-out-of-order } }
}
% DOCUMENT COMMANDS
-% The internal functions of each font size command are not used elsewhere in
-% the code for compatibility with user-defined hooks
-% (e.g. \AddToHook{cmd/normalsize/after}{<user-defined-function>}).
-\DeclareDocumentCommand \tiny { } { \__fontscale_tiny: }
-\cs_new_protected:Npn \__fontscale_tiny:
+% Defines the standard LaTeX font size commands from \tiny to \Huge and
+% initializes to \normalsize.
+\DeclareDocumentCommand \tiny { }
{
\__fontscale_fontsize:NNN \tiny \l_fontscale_tiny_size_dim
\l_fontscale_tiny_baselineskip_skip
}
-\DeclareDocumentCommand \scriptsize { } { \__fontscale_scriptsize: }
-\cs_new_protected:Npn \__fontscale_scriptsize:
+\DeclareDocumentCommand \scriptsize { }
{
\__fontscale_fontsize:NNN \scriptsize \l_fontscale_scriptsize_size_dim
\l_fontscale_scriptsize_baselineskip_skip
}
-\DeclareDocumentCommand \footnotesize { } { \__fontscale_footnotesize: }
-\cs_new_protected:Npn \__fontscale_footnotesize:
+\DeclareDocumentCommand \footnotesize { }
{
\__fontscale_fontsize:NNN \footnotesize \l_fontscale_footnotesize_size_dim
\l_fontscale_footnotesize_baselineskip_skip
}
-\DeclareDocumentCommand \small { } { \__fontscale_small: }
-\cs_new_protected:Npn \__fontscale_small:
+\DeclareDocumentCommand \small { }
{
\__fontscale_fontsize:NNN \small \l_fontscale_small_size_dim
\l_fontscale_small_baselineskip_skip
}
-\DeclareDocumentCommand \normalsize { } { \__fontscale_normalsize: }
-\cs_new_protected:Npn \__fontscale_normalsize:
+\DeclareDocumentCommand \normalsize { }
{
\__fontscale_fontsize:NNN \normalsize \l_fontscale_normalsize_size_dim
\l_fontscale_normalsize_baselineskip_skip
}
-\DeclareDocumentCommand \large { } { \__fontscale_large: }
-\cs_new_protected:Npn \__fontscale_large:
+\DeclareDocumentCommand \large { }
{
\__fontscale_fontsize:NNN \large \l_fontscale_large_size_dim
\l_fontscale_large_baselineskip_skip
}
-\DeclareDocumentCommand \Large { } { \__fontscale_Large: }
-\cs_new_protected:Npn \__fontscale_Large:
+\DeclareDocumentCommand \Large { }
{
\__fontscale_fontsize:NNN \Large \l_fontscale_Large_size_dim
\l_fontscale_Large_baselineskip_skip
}
-\DeclareDocumentCommand \LARGE { } { \__fontscale_LARGE: }
-\cs_new_protected:Npn \__fontscale_LARGE:
+\DeclareDocumentCommand \LARGE { }
{
\__fontscale_fontsize:NNN \LARGE \l_fontscale_LARGE_size_dim
\l_fontscale_LARGE_baselineskip_skip
}
-\DeclareDocumentCommand \huge { } { \__fontscale_huge: }
-\cs_new_protected:Npn \__fontscale_huge:
+\DeclareDocumentCommand \huge { }
{
\__fontscale_fontsize:NNN \huge \l_fontscale_huge_size_dim
\l_fontscale_huge_baselineskip_skip
}
-\DeclareDocumentCommand \Huge { } { \__fontscale_Huge: }
-\cs_new_protected:Npn \__fontscale_Huge:
+\DeclareDocumentCommand \Huge { }
{
\__fontscale_fontsize:NNN \Huge \l_fontscale_Huge_size_dim
\l_fontscale_Huge_baselineskip_skip
}
-% Initializes to \normalsize.
\normalsize
-\NewExpandableDocumentCommand \CurrentFontStep { }
- { \__fontscale_current_font_step: }
-\cs_new:Npn \__fontscale_current_font_step:
+\NewExpandableDocumentCommand \CurrentFontStep { } { \__fontscale_step: }
+\cs_new:Npn \__fontscale_step:
{
\dim_case:nnF { \f@size pt }
{
@@ -960,47 +917,41 @@
{ \l_fontscale_Huge_size_dim } { 5 }
}
{
- \str_case:Vn \l__fontscale_typographic_scale_str
+ \str_if_eq:VnT \l__fontscale_typographic_scale_str { musical }
{
- { modular }
- {
- \fp_eval:n
- {
- ln ( \f@size / \l__fontscale_normalsize_size_fp )
- / ln ( \l__fontscale_modular_ratio_fp )
- }
- }
- { musical }
- {
- \fp_eval:n
- {
- \l__fontscale_musical_notes_fp
- * ln ( \f@size / \l__fontscale_normalsize_size_fp )
- / ln ( \l__fontscale_musical_ratio_fp )
- }
- }
+ \fp_eval:n
+ {
+ \l__fontscale_musical_notes_fp
+ * ln ( \f@size / \l__fontscale_musical_base_fp )
+ / ln ( \l__fontscale_musical_ratio_fp )
+ }
}
}
}
-\NewExpandableDocumentCommand \CurrentFontScale { }
- { \__fontscale_current_font_scale: }
-\cs_new:Npn \__fontscale_current_font_scale:
+\NewExpandableDocumentCommand \CurrentFontScale { } { \__fontscale_scale: }
+\cs_new:Npn \__fontscale_scale:
{ \fp_eval:n { \f@size / \l__fontscale_normalsize_size_fp } }
-\NewExpandableDocumentCommand \CurrentFontSize { }
- { \__fontscale_current_font_size: }
-\cs_new:Npn \__fontscale_current_font_size: { \f@size pt }
+\NewExpandableDocumentCommand \CurrentFontSize { } { \__fontscale_size: }
+\cs_new:Npn \__fontscale_size: { \f@size pt }
\NewExpandableDocumentCommand \CurrentFontBaselineskip { }
- { \__fontscale_current_font_baselineskip: }
-\cs_new:Npn \__fontscale_current_font_baselineskip: { \f@baselineskip }
+ { \__fontscale_baselineskip: }
+\cs_new:Npn \__fontscale_baselineskip: { \f@baselineskip }
\NewDocumentCommand \SetFontStep { s m }
{
- \IfBooleanTF #1
- { \__fontscale_add_font_step:n {#2} }
- { \__fontscale_set_font_step:n {#2} }
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \SetFontStep }
+ }
+ {
+ \IfBooleanTF #1
+ { \__fontscale_add_font_step:n {#2} }
+ { \__fontscale_set_font_step:n {#2} }
+ }
}
% Using \str_case: here is significantly faster (and easier to write) than
% repeatedly testing \fp_compare:.
@@ -1020,49 +971,42 @@
{ 5 } { \Huge }
}
{
- \str_case:VnF \l__fontscale_typographic_scale_str
+ \str_if_eq:VnTF \l__fontscale_typographic_scale_str { musical }
{
- { modular }
- {
- \__fontscale_fontsize:n
- {
- \fp_to_dim:n
- {
- \l__fontscale_normalsize_size_fp
- * \l__fontscale_modular_ratio_fp ^ (#1)
- }
- }
- }
- { musical }
- {
- \__fontscale_fontsize:n
- {
- \fp_to_dim:n
- {
- \l__fontscale_normalsize_size_fp
- * \l__fontscale_musical_ratio_fp
- ^ ( (#1) / \l__fontscale_musical_notes_fp )
- }
- }
- }
+ \__fontscale_fontsize:n
+ {
+ \fp_to_dim:n
+ {
+ \l__fontscale_musical_base_fp
+ * \l__fontscale_musical_ratio_fp
+ ^ ( (#1) / \l__fontscale_musical_notes_fp )
+ }
+ }
}
{ \msg_error:nn { fontscale } { font-step-out-of-bounds } }
}
}
\cs_new_protected:Npn \__fontscale_add_font_step:n #1
{
- \tl_set:Ne \l__fontscale_step_tl { \__fontscale_current_font_step: }
- \tl_if_empty:NTF \l__fontscale_step_tl
+ \tl_set:Ne \l__fontscale_tmp_tl { \__fontscale_step: }
+ \tl_if_empty:NTF \l__fontscale_tmp_tl
{ \msg_error:nn { fontscale } { current-font-step-out-of-bounds } }
- { \__fontscale_add_font_step_aux:n { (#1) + \l__fontscale_step_tl } }
+ { \__fontscale_add_font_step_aux:n { (#1) + \l__fontscale_tmp_tl } }
}
\cs_new_eq:NN \__fontscale_add_font_step_aux:n \__fontscale_set_font_step:n
\NewDocumentCommand \SetFontScale { s m }
{
- \IfBooleanTF #1
- { \__fontscale_add_font_scale:n {#2} }
- { \__fontscale_set_font_scale:n {#2} }
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \SetFontScale }
+ }
+ {
+ \IfBooleanTF #1
+ { \__fontscale_add_font_scale:n {#2} }
+ { \__fontscale_set_font_scale:n {#2} }
+ }
}
\cs_new_protected:Npn \__fontscale_set_font_scale:n #1
{
@@ -1077,70 +1021,150 @@
\NewDocumentCommand \SetFontSize { s m }
{
- \IfBooleanTF #1
- { \__fontscale_add_font_size:n {#2} }
- { \__fontscale_set_font_size:n {#2} }
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \SetFontSize }
+ }
+ {
+ \IfBooleanTF #1
+ { \__fontscale_add_font_size:n {#2} }
+ { \__fontscale_set_font_size:n {#2} }
+ }
}
\cs_new_eq:NN \__fontscale_set_font_size:n \__fontscale_fontsize:n
\cs_new_protected:Npn \__fontscale_add_font_size:n #1
{
- \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1}
- \dim_add:Nn \l__fontscale_size_dim { \f@size pt }
- \__fontscale_fontsize:n { \l__fontscale_size_dim }
+ \__fontscale_dim_set_default_pt:Nn \l__fontscale_tmp_dim {#1}
+ \__fontscale_fontsize:n { \l__fontscale_tmp_dim + \f@size pt }
}
\NewDocumentCommand \ScaleFont { m }
- { \__fontscale_scale_font_size_baselineskip:n {#1} }
-\cs_new_protected:Npn \__fontscale_scale_font_size_baselineskip:n #1
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \ScaleFont }
+ }
+ { \__fontscale_scale_font:n {#1} }
+ }
+\cs_new_protected:Npn \__fontscale_scale_font:n #1
+ {
+ \fp_set:Nn \l__fontscale_tmp_fp {#1}
\__fontscale_fontsize:nn
- { \fp_to_dim:n { \f@size * (#1) } }
- { \fp_to_dim:n { \dim_to_fp:n { \f@baselineskip } * (#1) } }
+ { \fp_to_dim:n { \f@size * \l__fontscale_tmp_fp } }
+ {
+ \fp_to_dim:n
+ { \dim_to_fp:n { \f@baselineskip } * \l__fontscale_tmp_fp }
+ }
}
\NewDocumentCommand \SetFontSizeBaselineskip { m m }
- { \__fontscale_set_font_size_baselineskip:nn {#1} {#2} }
+ {
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \SetFontSizeBaselineskip }
+ }
+ { \__fontscale_set_font_size_baselineskip:nn {#1} {#2} }
+ }
\cs_new_eq:NN \__fontscale_set_font_size_baselineskip:nn
\__fontscale_fontsize:nn
-\NewDocumentCommand \PrintFontParameters { }
- { \__fontscale_print_font_parameters: }
-\cs_new_protected:Npn \__fontscale_print_font_parameters:
+\NewDocumentCommand \PrintFontSizeParameters { }
+ { \__fontscale_print_font_size_parameters: }
+\cs_new_protected:Npn \__fontscale_print_font_size_parameters:
{
- step ~=~ \__fontscale_current_font_step: ,~
- scale ~=~ \__fontscale_current_font_scale: ,~
- size ~=~ \__fontscale_current_font_size: ,~
- baselineskip ~=~ \__fontscale_current_font_baselineskip:
+ step ~=~ \__fontscale_step: ,~
+ scale ~=~ \__fontscale_scale: ,~
+ size ~=~ \__fontscale_size: ,~
+ baselineskip ~=~ \__fontscale_baselineskip:
}
-\NewDocumentCommand \PrintAllFontParameters { }
- { \__fontscale_print_all_font_parameters: }
-\cs_new_protected:Npn \__fontscale_print_all_font_parameters:
+\NewDocumentCommand \PrintAllFontSizeParameters { }
{
- \tl_map_inline:Nn \c__fontscale_names_tl
+ \mode_if_math:TF
{
- \prop_get:cnN { l_fontscale_##1_prop } { step } \l__fontscale_step_tl
- \prop_get:cnN { l_fontscale_##1_prop } { scale } \l__fontscale_scale_tl
- \token_to_str:c {##1} \@ \c_colon_str \c_space_tl
- step ~=~ \l__fontscale_step_tl ,~
- scale ~=~ \l__fontscale_scale_tl ,~
- size ~=~ \dim_use:c { l_fontscale_##1_size_dim } ,~
- baselineskip ~=~ \skip_use:c { l_fontscale_##1_baselineskip_skip }
- \str_if_eq:nnF {##1} { Huge } { \newline }
+ \msg_error:nne { fontscale } { math-mode-error }
+ { \token_to_str:N \PrintAllFontSizeParameters }
+ }
+ { \__fontscale_print_all_font_size_parameters: }
+ }
+\cs_new_protected:Npn \__fontscale_print_all_font_size_parameters:
+ {
+ \token_to_str:N \tiny \c_colon_str \c_space_tl
+ step ~=~ -4 ,~
+ scale ~=~ \fp_use:N \l_fontscale_tiny_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_tiny_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_tiny_baselineskip_skip
+ \newline
+ \token_to_str:N \scriptsize \c_colon_str \c_space_tl
+ step ~=~ -3 ,~
+ scale ~=~ \fp_use:N \l_fontscale_scriptsize_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_scriptsize_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_scriptsize_baselineskip_skip
+ \newline
+ \token_to_str:N \footnotesize \c_colon_str \c_space_tl
+ step ~=~ -2 ,~
+ scale ~=~ \fp_use:N \l_fontscale_footnotesize_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_footnotesize_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_footnotesize_baselineskip_skip
+ \newline
+ \token_to_str:N \small \c_colon_str \c_space_tl
+ step ~=~ -1 ,~
+ scale ~=~ \fp_use:N \l_fontscale_small_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_small_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_small_baselineskip_skip
+ \newline
+ \token_to_str:N \normalsize \c_colon_str \c_space_tl
+ step ~=~ 0 ,~
+ scale ~=~ 1 ,~
+ size ~=~ \dim_use:N \l_fontscale_normalsize_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_normalsize_baselineskip_skip
+ \newline
+ \token_to_str:N \large \c_colon_str \c_space_tl
+ step ~=~ 1 ,~
+ scale ~=~ \fp_use:N \l_fontscale_large_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_large_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_large_baselineskip_skip
+ \newline
+ \token_to_str:N \Large \c_colon_str \c_space_tl
+ step ~=~ 2 ,~
+ scale ~=~ \fp_use:N \l_fontscale_Large_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_Large_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_Large_baselineskip_skip
+ \newline
+ \token_to_str:N \LARGE \@ \c_colon_str \c_space_tl
+ step ~=~ 3 ,~
+ scale ~=~ \fp_use:N \l_fontscale_LARGE_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_LARGE_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_LARGE_baselineskip_skip
+ \newline
+ \token_to_str:N \huge \c_colon_str \c_space_tl
+ step ~=~ 4 ,~
+ scale ~=~ \fp_use:N \l_fontscale_huge_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_huge_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_huge_baselineskip_skip
+ \newline
+ \token_to_str:N \Huge \c_colon_str \c_space_tl
+ step ~=~ 5 ,~
+ scale ~=~ \fp_use:N \l_fontscale_Huge_scale_fp ,~
+ size ~=~ \dim_use:N \l_fontscale_Huge_size_dim ,~
+ baselineskip ~=~ \skip_use:N \l_fontscale_Huge_baselineskip_skip
+ }
+
+\NewDocumentCommand \PrintSampleText { s +m }
+ {
+ \mode_if_math:TF
+ {
+ \msg_error:nne { fontscale } { math-mode-error }
+ { \token_to_str:N \PrintSampleText }
+ }
+ {
+ \IfBooleanTF #1
+ { \__fontscale_print_sample_text_descending_order:n {#2} }
+ { \__fontscale_print_sample_text_ascending_order:n {#2} }
}
- }
-
-\NewDocumentCommand \PrintSampleText
- { s O
- {
- The~ \texttt { fontscale }~ package \c_colon_str \c_space_tl
- A~ user~ interface~ for~ setting~ document~ font~ sizes
- }
- }
- {
- \IfBooleanTF #1
- { \__fontscale_print_sample_text_descending_order:n {#2} }
- { \__fontscale_print_sample_text_ascending_order:n {#2} }
}
\cs_new_protected:Npn \__fontscale_print_sample_text_ascending_order:n #1
{
@@ -1169,7 +1193,15 @@
{ \tiny #1 \par }
}
-\NewDocumentCommand \PrintFontSizeCommand { } { \__fontscale_print_name: }
+\NewDocumentCommand \PrintFontSizeCommand { }
+ {
+ \mode_if_math:TF
+ {
+ \msg_error:nne { fontscale } { math-mode-error }
+ { \token_to_str:N \PrintFontSizeCommand }
+ }
+ { \__fontscale_print_name: }
+ }
\cs_new_protected:Npn \__fontscale_print_name:
{
\dim_case:nn { \f@size pt }
@@ -1235,14 +1267,14 @@
{ \token_to_str:N \Huge \prg_break: }
}
}
- UNDEFINED \@
+ \token_to_str:N \undefined
\prg_break:
\prg_break_point:
}
% TEXT PURIFY
-\cs_new:Npn \__fontscale_text_purify_equivalent:n #1
+\cs_new:Npn \__fontscale_remove_arg_spec_sm:n #1
{
\bool_lazy_all:nT
{
@@ -1252,11 +1284,13 @@
}
{ \use_none:n }
}
+\text_declare_purify_equivalent:Nn \fontscalesetup
+ { \__fontscale_remove_arg_spec_sm:n }
\text_declare_purify_equivalent:Nn \SetFontStep
- { \__fontscale_text_purify_equivalent:n }
+ { \__fontscale_remove_arg_spec_sm:n }
\text_declare_purify_equivalent:Nn \SetFontScale
- { \__fontscale_text_purify_equivalent:n }
+ { \__fontscale_remove_arg_spec_sm:n }
\text_declare_purify_equivalent:Nn \SetFontSize
- { \__fontscale_text_purify_equivalent:n }
+ { \__fontscale_remove_arg_spec_sm:n }
\text_declare_purify_equivalent:Nn \ScaleFont { \use_none:n }
\text_declare_purify_equivalent:Nn \SetFontSizeBaselineskip { \use_none:nn } \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale.tex b/macros/latex/contrib/fontscale/fontscale.tex
new file mode 100644
index 0000000000..9178542c3a
--- /dev/null
+++ b/macros/latex/contrib/fontscale/fontscale.tex
@@ -0,0 +1,398 @@
+\documentclass{beery}
+
+
+\begin{document}
+
+
+\section*
+ {%
+ \SetFontStep*{1}%
+ The \pkg{fontscale} package%
+ }
+
+A flexible interface for setting font sizes
+
+Oliver Beery
+
+Version 2.0.0\quad{}2 August 2024
+
+
+\section{Introduction}
+\label{sec:intro}
+
+\subsection{About}
+\label{subsec:about}
+
+\listheading{The \pkg{fontscale} package provides the following functionalities:}
+\begin{itemize}
+ \item
+ Set font sizes using a classic or musical typographic scale (\S\ref{subsec:typographicscale}).
+ \item
+ Set arbitrary font sizes and font baselineskips for the standard \LaTeX{} font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge} (\S\ref{subsec:overwriting}).
+ \item
+ Set the font sizes and font baselineskips of the standard \LaTeX{} font size commands mid\-/document or within a local group (\S\ref{subsec:fontscalesetup}).
+ \item
+ Provides expandable commands that expand to the current font step, font scale, font size, or font baselineskip (\S\ref{subsec:expandable}).
+ \item
+ Provides additional font size commands, including setting the font size by setting the font step or font scale and setting the font size relative to the current font size using more powerful tools than the \pkg{relsize} package (\S\ref{subsec:fontsize}).
+ \item
+ For \LaTeX3 programmers, this package defines public \pkg{expl3} variables that store the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge} (\S\ref{sec:programming}).
+\end{itemize}
+
+\subsection{Loading the package}
+\label{subsec:loading}
+
+\listheading{The \pkg{fontscale} package requires:}
+\begin{itemize}
+ \item \LaTeXe{} version 2023-11-01 or newer
+ \item \pkg{l3kernel} version 2023-10-10 or newer
+\end{itemize}
+
+You may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package.
+
+This package lets the user set arbitrary font sizes.
+This works with most fonts produced today, but, for historical reasons, the default Computer Modern font is available only in a number of discrete font sizes.
+If you get a warning that Computer Modern is not available in the requested font size, you may need to add the code \cs{RequirePackage}\allowbreak\verb|{fix-cm}| before \cs{documentclass} to make Computer Modern available at arbitrary font sizes.
+Alternatively, you can use the Latin Modern font by loading the \pkg{lmodern} package.
+
+The \pkg{fontscale} package has no package options.
+Instead, this package provides the command \cs{fontscalesetup}\marg{key\-/value list} (\S\ref{subsec:fontscalesetup}) which sets the package keys (\S\ref{sec:keys}).
+
+Many \LaTeX{} document classes have a font size option (e.g.\@ \Key{10pt}, \Key{11pt}, \Key{12pt}) which not only changes the set of document font sizes, but also modifies additional settings such as the page layout and vertical spacing which were specifically designed to work with those font sizes.
+For this reason, you may want to set the document class font size option close to the font size of \cs{normalsize} set by this package.
+
+\listheading{Internally, this package defines each font size command from \cs{tiny} to \cs{Huge} using the low\-/level font commands \cs{fontsize} and \cs{selectfont}\---they have no additional functionality beyond that of \cs{fontsize} and \cs{selectfont}, except that they:}
+\begin{itemize}
+ \item
+ Set the kernel command \cs{@currsize} equal to the font size command.
+ This is needed only for compatibility.
+ \item
+ Do nothing, except issue a warning, if used in math mode.
+\end{itemize}
+
+Unlike the standard \LaTeX{} document classes, the font size commands from \cs{tiny} to \cs{Huge} defined by this package do not change the vertical spacing for displayed math and list structures.
+If the user would like to add this functionality or perhaps other features to the font size commands, they can use hooks, which are documented in the \LaTeXe{} kernel.
+
+When loaded, this package uses \cs{normalsize} after initializing the font size commands from \cs{tiny} to \cs{Huge}.
+
+\subsection{The font size parameters}
+\label{subsec:fontsizeparameters}
+
+When using the \pkg{fontscale} package, each font size, including the standard \LaTeX{} font size commands from \cs{tiny} to \cs{Huge}, has a font step, font scale, font size, and font baselineskip.
+The latter two parameters are the familiar first and second arguments to the low\-/level font command \cs{fontsize}\marg{dimen}\marg{skip}.
+(The font baselineskip, stored in the kernel command \cs{f@baselineskip}, should not be confused with the paragraph baselineskip \cs{baselineskip}.)
+The font scale and font step are different ways of describing the font size.
+The font scale is the relative font size; the ratio of the font size to \cs{normalsize}, which has a font scale of \num{1}.
+The font step is the number of font size gradations from \cs{normalsize}, which has a font step of \num{0}.
+Table~\ref{table:fontsteps} displays the font step of each font size command.
+
+\input{./fontscale-table-font-steps.tex}
+
+\subsection{Syntax}
+\label{subsec:syntax}
+
+This package defines some keys and commands that take as a value or argument a \meta{floating point expression}, \meta{integer expression}, \meta{dimen expression}, or \meta{skip expression}.
+This syntax has the same representation as the arguments to \cs{fpeval}, \cs{inteval}, \cs{dimeval}, and \cs{skipeval}, documented in \pkg{usrguide}.%
+\footnote{\url{https://ctan.org/pkg/usrguide}}
+
+
+\section{Keys}
+\label{sec:keys}
+
+This section documents the keys provided by the \pkg{fontscale} package.
+This package has no package options.
+Set the package keys using \cs{fontscalesetup}\marg{key-value list} (\S\ref{subsec:fontscalesetup}).
+
+\subsection{The typographic scale}
+\label{subsec:typographicscale}
+
+The font sizes of the font size commands from \cs{tiny} to \cs{Huge} are initially set by the key \Key{typographic\-/scale}.
+
+\Key{typographic-scale}
+ [%
+ classic-10pt$\,\vert\,$\allowbreak
+ classic-11pt$\,\vert\,$\allowbreak
+ classic-12pt$\,\vert\,$\allowbreak\hspace*{1.5em}%
+ musical%
+ ]
+ [classic-10pt]
+\newline
+\Key{classic-10pt}
+\newline
+\Key{classic-11pt}
+\newline
+\Key{classic-12pt}
+\nopagebreak\newline
+\Key{musical}
+
+The value of the key \Key{typographic\-/scale} must be \Value{classic\-/10pt}, \Value{classic\-/11pt}, \Value{classic\-/12pt}, or \Value{musical}.
+The initial value is \Value{classic\-/10pt}.
+Sets the font size of each font size command from \cs{tiny} to \cs{Huge} using a classic or musical typographic scale.
+These are common methods of choosing a set of document font sizes.
+The keys \Key{classic\-/10pt}, \Key{classic\-/11pt}, \Key{classic\-/12pt}, and \Key{musical} set the key \Key{typographic\-/scale} to the corresponding value.
+
+\input{./fontscale-table-classic.tex}
+
+The classic typographic scale consists of the traditional font sizes
+\numlist{6;7;8;9;10;11;12;14;16;18;21;24;36;48;60;72}.%
+\footnote{See \S3.1 of \textit{The Elements of Typographic Style} by Robert Bringhurst.}
+They have been used since the sixteenth century and are the default font sizes on most computer software.
+Setting the value of the key \Key{typographic\-/scale} to \Key{classic\-/10pt}, \Key{classic\-/11pt}, or \Key{classic\-/12pt} sets the font size of each font size command from \cs{tiny} to \cs{Huge} to values based on their position in the classic typographic scale.
+The named point size\---\qtylist[list-final-separator={, or }]{10;11;12}{pt}\---is the font size of \cs{normalsize}.
+The font sizes of the other font size commands are the adjacent font sizes in the classic typographic scale.
+Table~\ref{table:classic} displays the font size of each font size command when using a classic typographic scale.
+
+\Key{musical/base}[\meta{dimen expression}][10pt]%
+\nopagebreak\newline
+\Key{musical/ratio}[\meta{floating point expression}][2]%
+\nopagebreak\newline
+\Key{musical/notes}[\meta{integer expression}][5]
+
+The key \Key{typographic\-/scale}[musical] sets the font size of each font size command from \cs{tiny} to \cs{Huge} using a musical typographic scale.
+The font sizes are calculated using the formula:%
+\footnote
+ {%
+ I have referenced this article by Spencer Mortensen:
+ \newline
+ \url{https://spencermortensen.com/articles/typographic-scale/}%
+ }
+\begin{equation}\label{eq:musical}
+ f_i = f_0 \times r ^ { i / n }
+\end{equation}
+$f_i$ is the font size with font step~$i$.
+$f_0$ is the base font size.
+$n$ is the number of musical notes\---the number of font size gradations or steps above $f_0$.
+$r$ is the musical ratio, the ratio of the highest to the lowest note $ f_n / f_0 $.
+
+The key \Key{musical\slash{}base} sets the base font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}.
+The base font size is the font size of \cs{normalsize}.
+The key \Key{musical\slash{}ratio} sets the musical ratio to the result of computing the \meta{floating point expression}.
+The key \Key{musical\slash{}notes} sets the number of musical notes to the value of \meta{integer expression}.
+Table~\ref{table:musical} displays the font size of each font size command when using a musical typographic scale with the initial values.
+
+\input{./fontscale-table-musical.tex}
+
+\subsection{The baselineskip-size-ratio}
+\label{subsec:baselineskipsizeratio}
+
+The font baselineskips of the font size commands from \cs{tiny} to \cs{Huge} are initially set by the key \Key{baselineskip\-/size\-/ratio}.
+
+\Key{baselineskip-size-ratio}[\meta{floating point expression}][1.2]
+\KeepNextPar*
+
+Sets the ratio of the font baselineskip to the font size to the result of computing the \meta{floating point expression}.
+The font baselineskip of each font size command equals its font size times this number.
+The value of this key must be at least \num{1}.
+
+
+\subsection{Overwriting the previous keys}
+\label{subsec:overwriting}
+
+This subsection documents keys for directly setting the font scales, font sizes, and font baselineskips of the font size commands from \cs{tiny} to \cs{Huge}.
+When doing so, the user should take care to ensure that the lengths of the font sizes and font baselineskips remain correctly ordered from \cs{tiny} to \cs{Huge}.
+This is important for typographic and syntactic consistency.
+If the font size commands are in the wrong order, this package will issue a warning and some package features may not work correctly.
+
+\Key{\meta{font size command}/scale}[\meta{floating point expression}][\meta{not set}]
+\KeepNextPar*
+
+Sets the font size of \meta{font size command} by setting its font scale to the result of computing the \meta{floating point expression}.
+Overwrites the font size set by the key \Key{typographic\-/scale}.
+The key \Key{normalsize\slash{}scale} is not defined.
+
+\Key{\meta{font size command}/size}[\meta{dimen expression}][\meta{not set}]
+\KeepNextPar*
+
+Sets the font size of \meta{font size command} to the value of \meta{dimen expression}, appending a default unit of \unit{pt}.
+Overwrites the font size set by the keys \Key{typographic\-/scale} and \Key{\meta{font size command}\slash{}scale}.
+
+\Key{\meta{font size command}/baselineskip}[\meta{skip expression}][\meta{not set}]
+\KeepNextPar*
+
+Sets the font baselineskip of \meta{font size command} to the value of \meta{skip expression}, appending a default unit of \unit{pt}.
+The font baselineskip of \meta{font size command} must be greater than or equal to its font size.
+Overwrites the font baselineskip set by the key \Key{baselineskip\-/size\-/ratio}.
+
+\Key{\meta{font size command}}[\meta{dimen expression}]
+\nopagebreak\newline
+\Key{\meta{font size command}}[\meta{dimen expression}/\meta{skip expression}]
+
+Sets the keys \Key{\meta{font size command}\slash{}size}[\meta{dimen expression}] or \Key{\meta{font size command}\slash{}baselineskip}[\meta{skip expression}] in a condensed format.
+The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, \num{10}/\num{12} or \num{11}/\num{13}.
+The number before\slash{}after the slash is the size\slash{}leading in units of \unit{pt}.
+
+
+\section{Commands}
+\label{sec:commands}
+
+This section documents the commands provided by the \pkg{fontscale} package.
+
+\subsection{Setting the keys}
+\label{subsec:fontscalesetup}
+
+\cs{fontscalesetup} \sarg{} \marg{key-value list}
+\KeepNextPar*
+
+Sets and processes the \pkg{fontscale} package keys (\S\ref{sec:keys}) in \meta{key\-/value list} and then uses \cs{normalsize}.
+Adding the optional star first resets the keys to their initial values.
+Can be used mid\-/document.
+The effect is local to the current group.
+Does nothing, except issue a warning, if used in math mode.
+\cs{fontscalesetup} should typically be used only once in the preamble or omitted if the user is satisfied with the initial font sizes and font baselineskips.
+
+\subsection{Expandable font size parameters}
+\label{subsec:expandable}
+
+\cs{CurrentFontStep}
+\nopagebreak\newline
+\cs{CurrentFontScale}
+\newline
+\cs{CurrentFontSize}
+\nopagebreak\newline
+\cs{CurrentFontBaselineskip}
+
+This package provides expandable commands that expand to the current font step, font scale, font size, or font baselineskip.
+They can be used for printing or within calculations.
+
+For clarity, \cs{CurrentFontStep} will be explained in detail.
+\cs{CurrentFontStep} initially tests if the current font size equals the font size of any font size command from \cs{tiny} to \cs{Huge}.
+If so, it expands to the font step of that font size command (Table~\ref{table:fontsteps}).
+If not and if the value of the key \Key{typographic\-/scale} is \Value{musical}, \cs{CurrentFontStep} expands to the current font step calculated from the musical typographic scale (Equation~\ref{eq:musical}).
+Otherwise, the current font step is undefined and \cs{CurrentFontStep} expands to nothing.
+
+Internally, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} rely on the kernel command \cs{f@size}.
+(\cs{f@size} stores the current font size in units of \unit{pt}, omitting the unit.)
+The low\-/level font command \cs{fontsize}\marg{dimen}\marg{skip} sets \cs{f@size} to the new font size before expanding its second argument.
+This means that, if used in \meta{skip}, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} will expand to the new value\---unless they are first expanded.
+This package provides \cs{SetFontSizeBaselineskip} as an alternative to \cs{fontsize} + \cs{selectfont} that avoids this issue (\S\ref{subsec:fontsize}).
+
+\subsection{More font size commands}
+\label{subsec:fontsize}
+
+This package provides additional font size commands for use only in special cases.
+Users should prefer the standard \LaTeX{} font size commands from \cs{tiny} to \cs{Huge} for typographic and syntactic consistency.
+
+\cs{SetFontStep} \sarg{} \marg{floating point expression}
+\KeepNextPar*
+
+Sets the font size by setting the font step to the result of computing the \meta{floating point expression}.
+Adding the optional star instead increases the current font step by the result of computing the \meta{floating point expression} or issues an error if the current font step is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}).
+Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}.
+
+\listheading{Three exceptions:}
+\begin{itemize}
+ \item
+ The font step must equal an integer from \num{-4} to \num{5} unless the value of the key \Key{typographic\-/scale} is \Value{musical}.
+ \cs{SetFontStep} will issue an error if the font step is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}).
+ \item
+ If the font step equals the font step of any font size command from \cs{tiny} to \cs{Huge} (Table~\ref{table:fontsteps}), then that font size command will be used directly.
+ \item
+ Does nothing, except issue a warning, if used in math mode.
+\end{itemize}
+
+\cs{SetFontScale} \sarg{} \marg{floating point expression}
+\KeepNextPar*
+
+Sets the font size by setting the font scale to the result of computing the \meta{floating point expression}.
+Adding the optional star instead increases the current font scale by the result of computing the \meta{floating point expression}.
+Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}.
+Does nothing, except issue a warning, if used in math mode.
+
+\cs{SetFontSize} \sarg{} \marg{dimen expression}
+\KeepNextPar*
+
+Sets the font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}.
+Adding the optional star instead increases the current font size by the result of \meta{dimen expression}, appending a default unit of \unit{pt}.
+Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}.
+Does nothing, except issue a warning, if used in math mode.
+
+\cs{ScaleFont} \marg{floating point expression}
+\KeepNextPar*
+
+Sets the font size equal to the current font size \texttimes{} the result of computing the \meta{floating point expression}.
+Sets the font baselineskip equal to the current font baselineskip \texttimes{} the result of computing the \meta{floating point expression}.
+Does nothing, except issue a warning, if used in math mode.
+
+\cs{SetFontSizeBaselineskip} \marg{dimen expression} \marg{skip expression}
+\KeepNextPar*
+
+Sets the font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}.
+Sets the font baselineskip to the value of \meta{skip expression}, appending a default unit of \unit{pt}.
+The font baselineskip must be greater than or equal to the font size.
+Does nothing, except issue a warning, if used in math mode.
+Can be used as an alternative to \cs{fontsize} + \cs{selectfont} as discussed in \S\ref{subsec:expandable}.
+
+\subsection{Testing and debugging}
+\label{subsec:debug}
+
+The commands documented here are intended primarily for testing and debugging.
+I have used them often when developing this package so I think users will find them helpful.
+
+\cs{PrintFontSizeParameters}
+\KeepNextPar*
+
+Prints the current font size parameters\---the font step, font scale, font size, and font baselineskip.
+The current font step will be left blank if it is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}).
+
+\cs{PrintAllFontSizeParameters}
+\KeepNextPar*
+
+Prints the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge}.
+
+\cs{PrintSampleText} \sarg{} \marg{text}
+\KeepNextPar*
+
+Prints \meta{text} in each font size ordered from \cs{tiny} to \cs{Huge} each followed by a paragraph break.
+\meta{text} can contain \cs{par} tokens.
+Adding the optional star reverses the order of the font sizes.
+One useful way of printing example text is \cs{PrintSampleText}\allowbreak\texttt{\{\cs{PrintFontSizeCommand}:\allowbreak\textvisiblespace\allowbreak\cs{PrintFontSizeParameters}\}}.
+
+\cs{PrintFontSizeCommand}
+\KeepNextPar*
+
+Tests if the current font size and current font baselineskip equal the font size and font baselineskip, respectively, of any font size command from \cs{tiny} to \cs{Huge}.
+If so, prints the name of that font size command, including the backslash character.
+If not, prints \enquote{\string\undefined}.
+
+
+\section{Programming}
+\label{sec:programming}
+
+This section is for \LaTeX3 programmers.
+
+\subsection
+ {%
+ Compatibility with
+ \texorpdfstring
+ {\cs{text_purify:n}}
+ {\textbackslash{}text\_purify:n}%
+ }
+\label{subsec:textpurify}
+
+\cs{text_purify:n} will correctly remove the formatting commands defined by this package, including \cs{fontscalesetup} and the commands documented in \S\ref{subsec:fontsize}.
+
+\subsection{Public functions and variables}
+\label{subsec:publicexpl3}
+
+This package does not define any public \pkg{expl3} functions.
+
+This package defines public \pkg{expl3} variables that store the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge}.
+These variables should never be modified directly.
+Their values should be changed only by \cs{fontscalesetup}.
+
+Each takes the form:
+
+\verb|\c_fontscale_|\meta{font size command}\verb|_step_fp|
+\nopagebreak\newline
+\verb|\l_fontscale_|\meta{font size command}\verb|_scale_fp|
+\newline
+\verb|\l_fontscale_|\meta{font size command}\verb|_size_dim|
+\nopagebreak\newline
+\verb|\l_fontscale_|\meta{font size command}\verb|_baselineskip_skip|
+
+Exception:
+\cs{l_fontscale_normalsize_scale_fp} is not defined.
+The font scale of \cs{normalsize} is stored in \cs{c_fontscale_normalsize_scale_fp}.
+
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/heria/README.md b/macros/latex/contrib/heria/README.md
index b3d5cf32b1..664e9ae18b 100644
--- a/macros/latex/contrib/heria/README.md
+++ b/macros/latex/contrib/heria/README.md
@@ -34,5 +34,5 @@ feature requests.
The `heria` class is distributed under the conditions of the [LaTeX
Project Public License](https://www.latex-project.org/lppl.txt),
-either version 1.3 of this license or (at your option) any later
+either version 1.3c of this license or (at your option) any later
version.
diff --git a/macros/latex/contrib/heria/heria-proposal.pdf b/macros/latex/contrib/heria/heria-proposal.pdf
index f8d64312a9..60d99c6dab 100644
--- a/macros/latex/contrib/heria/heria-proposal.pdf
+++ b/macros/latex/contrib/heria/heria-proposal.pdf
Binary files differ
diff --git a/macros/latex/contrib/heria/heria.dtx b/macros/latex/contrib/heria/heria.dtx
index 5c6b5e9691..60cc0162f1 100644
--- a/macros/latex/contrib/heria/heria.dtx
+++ b/macros/latex/contrib/heria/heria.dtx
@@ -1,10 +1,10 @@
% \iffalse meta-comment
%
-% Copyright 2023 Tristan Miller
-% -----------------------------
+% Copyright 2023, 2024 Tristan Miller
+% -----------------------------------
%
% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% https://www.latex-project.org/lppl.txt
@@ -18,11 +18,11 @@
\ProvidesFile{heria.dtx}
%</driver>
%<*class>
-%% Copyright 2023 Tristan Miller
+%% Copyright 2023, 2024 Tristan Miller
%% Copyright 2016 John Kormylo
%%
%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% https://www.latex-project.org/lppl.txt
@@ -33,7 +33,7 @@
%<class>\NeedsTeXFormat{LaTeX2e}
%<class>\ProvidesClass{heria}
%<*class>
-[2023-12-04 v3.2.1.0 Class for Horizon Europe (R)IA proposals]
+[2024-07-14 v3.4.1.0 Class for Horizon Europe (R)IA proposals]
%</class>
%
%<*driver>
@@ -50,7 +50,7 @@
%</driver>
% \fi
%
-% \CheckSum{1506}
+% \CheckSum{1520}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -80,8 +80,9 @@
% for an explanation of the versioning scheme.}}
%
% \author{Tristan Miller\\
-% Austrian Research Institute for Artificial Intelligence\\
-% \texttt{tristan.miller@ofai.at}}
+% Department of Computer Science\\
+% University of Manitoba\\
+% \texttt{Tristan.Miller@umanitoba.ca}}
%
% \maketitle
% \tableofcontents
@@ -104,14 +105,9 @@
% the user. The advantage of this becomes clear when one considers
% that much of the data is reused across multiple tables.
%
-% At the time of writing (2023-12-04), open calls to the RIA and IA
-% calls require proposals to be submitted according to either
-% Version~3.2 (2022-11-15) or Version~3.3 (2023-09-27) of the Part~B
-% template. The \textsf{heria} package was developed with reference
-% to the Version~3.2 template; however, according to the changelog for
-% the Version~3.3 template, the only difference from the previous
-% version is the addition of some instructions concerning the use of
-% generative AI tools for the preparation of the proposal.
+% The \textsf{heria} package can be used to write proposals using
+% either Version~3.2 (2022-11-15), 3.3 (2023-09-27), or 3.4
+% (2024-04-04) of the official Part~B template.
%
% \section{Usage}
%
@@ -140,8 +136,20 @@
%
% \medskip
%
-% \noindent Following \cs{documentclass} you should provide the
-% proposal metadata using the following macros:
+% \noindent Following \cs{documentclass} you should tell
+% \textsf{heria} which version of the official Part~B template you
+% want to use:
+%
+% \DescribeMacro{\templateversion} This macro sets the version of the
+% official Part~B template the proposal should use. It takes a single
+% argument; valid values are \verb|3.2|, \verb|3.3|, and \verb|3.4|.
+% If you omit this macro, \textsf{heria} will default to using the
+% latest version of the template.
+%
+% \medskip
+%
+% \noindent You should then provide the proposal metadata using the
+% following macros:
%
% \DescribeMacro{\title} This macro takes the title of the proposal as
% its sole argument. This title will be printed by the \cs{maketitle}
@@ -446,18 +454,6 @@
%
% \section{Limitations and caveats}
%
-% \paragraph{No backward compatibility.} This version of the
-% \textsf{heria} class implements a specific version of the official
-% Horizon Europe template as described in §\ref{sec:introduction}. It
-% is intended that \textsf{heria}, over the course of its development,
-% will track changes made to the official template. Since these
-% changes may be incompatible with previous versions, you are advised
-% to retain a copy of the version of \textsf{heria} you used to
-% produce a proposal; this way you will still be able to build the
-% proposal even if you later install a new version of \textsf{heria}.
-% See §\ref{sec:version} for further information on \textsf{heria}'s
-% versioning scheme and when to expect breaking changes.
-%
% \paragraph{Table 3.1h.} The instructions in the official template
% are ambiguous about the construction of the tables for purchase
% costs. In particular, it's not clear whether each individual cost
@@ -497,21 +493,26 @@
%
% Each release of the \textsf{heria} class carries a version number in
% the format \textit{omaj.\allowbreak omin.\allowbreak maj.\allowbreak
-% min}. Here \textit{omaj.omin} is the version number of the official
-% Horizon Europe RIA template that the class implements, and
+% min}. Here \textit{omaj.omin} is the highest version number of the
+% official Horizon Europe RIA template that the class implements, and
% \textit{maj} and \textit{min} represent, respectively, major and
% minor revisions to the class (including any ancillary files, such as
% the skeleton proposal and documentation). A major revision is one
-% that includes breaking changes or significant new features; minor
-% revisions are for all other changes. You should generally assume
-% that any change to \textit{omaj.omin} introduces breaking changes to
-% the class interface and\slash or significant changes to the official
-% proposal preparation instructions.
+% that includes potentially breaking changes or significant new
+% features; minor revisions are for all other changes. While efforts
+% will be made to preserve compatibility with earlier versions of the
+% official template (via the \cs{templateversion} macro), any change
+% to \textit{omaj.omin} could unavoidably introduce breaking changes
+% to the class interface. Any such changes will be noted in the
+% package documentation.
%
% \subsection{Version history}
%
% \begin{description}
-% \item[v3.2.1.0 (2023-12-04)] Initial release.
+% \item[v3.4.1.0 (2024-07-14)] Add support for version 3.4 of the
+% official Part~B template and the \cs{templateversion} macro for
+% backward compatibility with earlier versions.
+% \item[v3.2.1.0 (2023-12-04)] Initial release.
% \end{description}
%
% \section{Disclaimer}
@@ -599,6 +600,22 @@
\definecolor{summaryblue}{HTML}{00B0F0}
% \end{macrocode}
%
+% \subsection*{Set official Horizon Europe template version}
+%
+% \begin{macrocode}
+\gdef\@templateversion{3.4} % Default version
+\def\@supportedtemplateversions{3.2,3.3,3.4} % Supported versions
+\ExplSyntaxOn
+\NewDocumentCommand{\templateversion}{m}{%
+ \clist_if_in:NnTF {\@supportedtemplateversions} {#1}
+ {\gdef\@templateversion{#1}}
+ {\PackageError{heria}%
+ {unsupported~template~version}%
+ {Use~one~of~\@supportedtemplateversions}
+ }%
+}
+\ExplSyntaxOff
+% \end{macrocode}
% \subsection*{Basic proposal variables}
%
% \begin{macrocode}
@@ -1459,7 +1476,6 @@
% communication with Tristan Miller on 2023-12-02.
%
% \begin{macrocode}
-\RequirePackage{everypage}
\RequirePackage{environ}
\newcounter{abspage}% \thepage not reliab
\newcommand{\newSFPage}[1]% #1 = \theabspage
@@ -1474,15 +1490,17 @@
\rotatebox{90}{\parbox[c][\textwidth][c]{\textheight}{\BODY}}%
\fi
\end{figure}}
-\AddEverypageHook{% check if sideways figure on this page
- \ifdim\textwidth=\textheight
- \stepcounter{abspage}% already in landscape
- \else
- \@ifundefined{SFPage@\theabspage}{}{\global\pdfpageattr{/Rotate 0}}%
- \stepcounter{abspage}%
- \@ifundefined{SFPage@\theabspage}{}%
- {\global\pdfpageattr{/Rotate 90}}%
- \fi}
+\AddToHook{shipout/background}{% check if sideways figure on this page
+ \put(1in,-1in){%
+ \ifdim\textwidth=\textheight
+ \stepcounter{abspage}% already in landscape
+ \else
+ \@ifundefined{SFPage@\theabspage}{}{\global\pdfpageattr{/Rotate 0}}%
+ \stepcounter{abspage}%
+ \@ifundefined{SFPage@\theabspage}{}%
+ {\global\pdfpageattr{/Rotate 90}}%
+ \fi}%
+ }
% \end{macrocode}
%
% \subsection*{Font setup}
@@ -1987,7 +2005,7 @@ purchase costs for equipment).
environmental objectives of the EU Taxonomy Regulation.}
\item
\emph{If you plan to use, develop and/or deploy artificial
- intellingence (AI) based systems and/or techniques you must
+ intelligence (AI) based systems and/or techniques you must
demonstrate their technical robustness. AI-based systems or techniques
should be, or be developed to become:~}
@@ -2371,12 +2389,33 @@ Please provide the following:
\item
\emph{Give full details. Base your account on the logical structure of
the project and the stages in which it is to be carried out.}
+\makeatletter
+\ifdim\@templateversion pt<3.4pt
\emph{The number of work packages should be proportionate to the scale
and complexity of the project.}
\item
\emph{You should give enough detail in each work package to justify
the proposed resources to be allocated and also quantified information
so that progress can be monitored, including by the Commission}
+\else
+ \emph{Each work package should be a substantial part of the work
+ plan, and the number of work packages should be proportionate to
+ the scale and complexity of the project.}
+\item \emph{Structure each work package by breaking it down into
+ tasks. If tasks are not appropriate, work packages can be
+ organised according to other criteria (e.g., according to the type
+ of work or thematically). For each task or element of the work
+ package, describe all activities to be carried out and quantify
+ them (e.g., number of protocols, tests, measurements,
+ combinations, study subjects, conferences, publications,
+ etc.). Provide enough detail to clarify who will do this work and
+ why it is needed for the project, (e.g., the level of
+ qualification and number of person-months for personnel, as well
+ as the requested equipment, consumables, meetings, etc.), to
+ justify the proposed resources and so that progress can be
+ monitored, including by the Commission.}
+\fi
+\makeatother
\item
\emph{Resources assigned to work packages should be in line with their
objectives and deliverables. You are advised to include a distinct
@@ -2431,9 +2470,15 @@ Please provide the following:
\end{itemize}
%</hi-workplan>
%<*hi-wp-description>
+\makeatletter
+\ifdim\@templateversion pt<3.4pt
(where appropriate, broken down into tasks), lead partner and role of
participants. Deliverables linked to each WP are listed in table 3.1c
(no need to repeat the information here).
+\else
+(where appropriate, broken down into tasks), lead partner and role of participants. For each task, quantify the amount of work. Provide enough detail to justify the resources requested and clarify why the work is needed and who will do it. Deliverables linked to each WP are listed in table 3.1c (no need to repeat the information here).
+\fi
+\makeatother
%</hi-wp-description>
%<*hi-wp-objectives>
\twarn \emph{Participants involved in each WP and their efforts are
@@ -2441,10 +2486,10 @@ participants. Deliverables linked to each WP are listed in table 3.1c
each WP are shown in table 3.1a.)}
%</hi-wp-objectives>
%<*heria-proposal>
-%% Copyright 2023 Tristan Miller
+%% Copyright 2023, 2024 Tristan Miller
%%
%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% https://www.latex-project.org/lppl.txt
@@ -2453,6 +2498,8 @@ participants. Deliverables linked to each WP are listed in table 3.1c
%%
\documentclass[showinstructions]{heria}
+\templateversion{3.4}
+
\title{Skeleton Horizon Europe Proposal}
\callname{insert call name}
\callidentifier{HORIZON-XX0-0000-XXXXX-00-XXXXX}
diff --git a/macros/latex/contrib/heria/heria.ins b/macros/latex/contrib/heria/heria.ins
index 89b8b7f72c..406573836d 100644
--- a/macros/latex/contrib/heria/heria.ins
+++ b/macros/latex/contrib/heria/heria.ins
@@ -1,8 +1,8 @@
%%
-%% Copyright 2023 Tristan Miller
+%% Copyright 2023, 2024 Tristan Miller
%%
%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% https://www.latex-project.org/lppl.txt
diff --git a/macros/latex/contrib/heria/heria.pdf b/macros/latex/contrib/heria/heria.pdf
index af4f0cd627..71b47d5ed5 100644
--- a/macros/latex/contrib/heria/heria.pdf
+++ b/macros/latex/contrib/heria/heria.pdf
Binary files differ
diff --git a/macros/latex/contrib/hypcap/README.md b/macros/latex/contrib/hypcap/README.md
new file mode 100644
index 0000000000..07580bcb3f
--- /dev/null
+++ b/macros/latex/contrib/hypcap/README.md
@@ -0,0 +1,20 @@
+# hypcap package for LaTeX
+
+* adjusting anchors of captions;
+
+Version: 2024-07-26 v1.13
+
+This package tries a solution of the problem with
+hyperref, that links to floats points below the
+caption and not at the beginning of the float.
+Therefore this package divides the task into two
+part, the link setting with `\capstart` or
+automatically at the beginning of a float and
+the rest in the `\caption` command.
+
+## Copyright (C)
+* 1999-2001, 2006-2008, 2011 Heiko Oberdiek
+* 2016-2024 Oberdiek Package Support Group
+
+## License
+LATEX Project Public License, version 1.3c or later.
diff --git a/macros/latex/contrib/oberdiek/hypcap.dtx b/macros/latex/contrib/hypcap/hypcap.dtx
index a9bb106fe3..ef7538e91e 100644
--- a/macros/latex/contrib/oberdiek/hypcap.dtx
+++ b/macros/latex/contrib/hypcap/hypcap.dtx
@@ -1,13 +1,13 @@
% \iffalse meta-comment
%
% File: hypcap.dtx
-% Version: 2016/05/16 v1.12
+% Version: 2024-07-26 v1.13
% Info: Adjusting the anchors of captions
%
% Copyright (C)
% 1999-2001, 2006-2008, 2011 Heiko Oberdiek
-% 2016-2019 Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% 2016-2024 Oberdiek Package Support Group
+% https://github.com/ho-tex/hypcap/issues
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -23,15 +23,15 @@
%
% The Current Maintainers of this work are
% Heiko Oberdiek and the Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% https://github.com/ho-tex/hypcap/issues
%
% This work consists of the main source file hypcap.dtx
% and the derived files
% hypcap.sty, hypcap.pdf, hypcap.ins, hypcap.drv.
%
% Distribution:
-% CTAN:macros/latex/contrib/oberdiek/hypcap.dtx
-% CTAN:macros/latex/contrib/oberdiek/hypcap.pdf
+% CTAN:macros/latex/contrib/hypcap/hypcap.dtx
+% CTAN:macros/latex/contrib/hypcap/hypcap.pdf
%
% Unpacking:
% (a) If hypcap.ins is present:
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex hypcap.dtx
% makeindex -s gind.ist hypcap.idx
% pdflatex hypcap.dtx
@@ -60,9 +60,9 @@
% pdflatex hypcap.dtx
%
% Installation:
-% TDS:tex/latex/oberdiek/hypcap.sty
-% TDS:doc/latex/oberdiek/hypcap.pdf
-% TDS:source/latex/oberdiek/hypcap.dtx
+% TDS:tex/latex/hypcap/hypcap.sty
+% TDS:doc/latex/hypcap/hypcap.pdf
+% TDS:source/latex/hypcap/hypcap.dtx
%
%<*ignore>
\begingroup
@@ -79,7 +79,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: hypcap 2016/05/16 v1.12 Adjusting the anchors of captions (HO)}
+\Msg{* Package: hypcap 2024-07-26 v1.13 Adjusting the anchors of captions (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -91,11 +91,11 @@
This is a generated file.
Project: hypcap
-Version: 2016/05/16 v1.12
+Version: 2024-07-26 v1.13
Copyright (C)
1999-2001, 2006-2008, 2011 Heiko Oberdiek
- 2016-2019 Oberdiek Package Support Group
+ 2016-2024 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -111,7 +111,7 @@ This work has the LPPL maintenance status "maintained".
The Current Maintainers of this work are
Heiko Oberdiek and the Oberdiek Package Support Group
-https://github.com/ho-tex/oberdiek/issues
+https://github.com/ho-tex/hypcap/issues
This work consists of the main source file hypcap.dtx
@@ -124,7 +124,7 @@ and the derived files
\generate{%
\file{hypcap.ins}{\from{hypcap.dtx}{install}}%
\file{hypcap.drv}{\from{hypcap.dtx}{driver}}%
- \usedir{tex/latex/oberdiek}%
+ \usedir{tex/latex/hypcap}%
\file{hypcap.sty}{\from{hypcap.dtx}{package}}%
}
@@ -152,7 +152,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{hypcap.drv}%
- [2016/05/16 v1.12 Adjusting the anchors of captions (HO)]%
+ [2024-07-26 v1.13 Adjusting the anchors of captions (HO)]%
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
\begin{document}
@@ -166,9 +166,9 @@ and the derived files
% \GetFileInfo{hypcap.drv}
%
% \title{The \xpackage{hypcap} package}
-% \date{2016/05/16 v1.12}
+% \date{2024-07-26 v1.13}
% \author{Heiko Oberdiek\thanks
-% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}}
+% {Please report any issues at \url{https://github.com/ho-tex/hypcap/issues}}}
%
% \maketitle
%
@@ -301,7 +301,7 @@ and the derived files
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hypcap}%
- [2016/05/16 v1.12 Adjusting the anchors of captions (HO)]
+ [2024-07-26 v1.13 Adjusting the anchors of captions (HO)]
% \end{macrocode}
%
% For unique command names this package uses |hc@| as prefix
@@ -461,7 +461,7 @@ and the derived files
\capstart
}{%
\if@capstart
- \PackageError{hypcap}{You have forgotten to use \string\caption}%
+ \PackageWarning{hypcap}{You have forgotten to use \string\caption}%
\global\@capstartfalse
\else
\fi
@@ -497,31 +497,11 @@ and the derived files
% \paragraph{Package.} This package is available on
% CTAN\footnote{\CTANpkg{hypcap}}:
% \begin{description}
-% \item[\CTAN{macros/latex/contrib/oberdiek/hypcap.dtx}] The source file.
-% \item[\CTAN{macros/latex/contrib/oberdiek/hypcap.pdf}] Documentation.
+% \item[\CTAN{macros/latex/contrib/hypcap/hypcap.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/hypcap/hypcap.pdf}] Documentation.
% \end{description}
%
%
-% \paragraph{Bundle.} All the packages of the bundle `oberdiek'
-% are also available in a TDS compliant ZIP archive. There
-% the packages are already unpacked and the documentation files
-% are generated. The files and directories obey the TDS standard.
-% \begin{description}
-% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}]
-% \end{description}
-% \emph{TDS} refers to the standard ``A Directory Structure
-% for \TeX\ Files'' (\CTANpkg{tds}). Directories
-% with \xfile{texmf} in their name are usually organized this way.
-%
-% \subsection{Bundle installation}
-%
-% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the
-% TDS tree (also known as \xfile{texmf} tree) of your choice.
-% Example (linux):
-% \begin{quote}
-% |unzip oberdiek.tds.zip -d ~/texmf|
-% \end{quote}
-%
% \subsection{Package installation}
%
% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
@@ -537,9 +517,9 @@ and the derived files
% \begin{quote}
% \def\t{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
-% hypcap.sty & tex/latex/oberdiek/hypcap.sty\\
-% hypcap.pdf & doc/latex/oberdiek/hypcap.pdf\\
-% hypcap.dtx & source/latex/oberdiek/hypcap.dtx\\
+% hypcap.sty & tex/latex/hypcap/hypcap.sty\\
+% hypcap.pdf & doc/latex/hypcap/hypcap.pdf\\
+% hypcap.dtx & source/latex/hypcap/hypcap.dtx\\
% \end{tabular}^^A
% }^^A
% \sbox0{\t}^^A
@@ -718,6 +698,9 @@ and the derived files
% \item
% Documentation updates.
% \end{Version}
+% \begin{Version}{2024-07-26 v1.13}
+% \item Change error into warning, issue \#1
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/hypcap/hypcap.pdf
index 46df7e8951..bea211492f 100644
--- a/macros/latex/contrib/oberdiek/hypcap.pdf
+++ b/macros/latex/contrib/hypcap/hypcap.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/ChangeLog.txt b/macros/latex/contrib/hyperref/ChangeLog.txt
index 7d8f3b3a24..0ff7510869 100644
--- a/macros/latex/contrib/hyperref/ChangeLog.txt
+++ b/macros/latex/contrib/hyperref/ChangeLog.txt
@@ -1,3 +1,12 @@
+Version: 2024-07-10 v7.01j
+2024-07-10 Ulrike Fischer
+ * hyperref.dtx: define \HyOrg@addtoreset always for cleveref
+ compability with tagging code, see https://github.com/latex3/tagging-project/issues/2
+
+2024-06-02 Ulrike Fischer
+ * hyperref.dtx: enable use of onmousedown and onmouseup, issue #342
+
+Version: 2024-05-23 v7.01i
2024-05-25 Ulrike Fischer
* hyperref.dtx: load stringenc always to allow the use of pdfencoding in a group.
diff --git a/macros/latex/contrib/hyperref/README.md b/macros/latex/contrib/hyperref/README.md
index 7161209179..335fb1f62b 100644
--- a/macros/latex/contrib/hyperref/README.md
+++ b/macros/latex/contrib/hyperref/README.md
@@ -1,6 +1,6 @@
# README for hyperref bundle
-Version 2024-05-23 v7.01i
+Version 2024-07-10 v7.01j
## INTRODUCTION
diff --git a/macros/latex/contrib/hyperref/doc/backref.pdf b/macros/latex/contrib/hyperref/doc/backref.pdf
index ae783bd0cf..5ec3d8b07f 100644
--- a/macros/latex/contrib/hyperref/doc/backref.pdf
+++ b/macros/latex/contrib/hyperref/doc/backref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.html b/macros/latex/contrib/hyperref/doc/hyperref-doc.html
index 70741ce170..0b918b602d 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" ><span
class="ec-lmvtt-10x-x-120">https://github.com/latex3/hyperref/issues</span></a><span
class="ec-lmr-12">)</span></div><br />
<div class="date" ><span
-class="ec-lmr-12">2024-05-23 v7.01i</span></div>
+class="ec-lmr-12">2024-07-10 v7.01j</span></div>
</div>
<h3 class="likesectionHead"><a
id="x1-1000"></a>Contents</h3>
@@ -1079,45 +1079,54 @@ class="td11"> <!--l. 604--><p class="noindent" >this
style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-1"
class="td11"> <span
class="ec-lmvtt-10">backref </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-8-2"
-class="td11"> <!--l. 606--><p class="noindent" > </td></tr><tr
+class="td11"> <!--l. 606--><p class="noindent" >
+ </td></tr><tr
style="vertical-align:baseline;" id="TBL-2-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-1"
class="td11"> <span
class="ec-lmvtt-10">pagebackref </span></td> <td style="white-space:normal; text-align:left;" id="TBL-2-9-2"
-class="td11"> <!--l. 607--><p class="noindent" ></td>
+class="td11"> <!--l. 607--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-10-1"
class="td11"> <span
class="ec-lmvtt-10">destlabel </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-10-2"
-class="td11"> <!--l. 608--><p class="noindent" > </td></tr><tr
+class="td11"> <!--l. 608--><p class="noindent" >
+ </td></tr><tr
style="vertical-align:baseline;" id="TBL-2-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-11-1"
class="td11"> <span
class="ec-lmvtt-10">pdfusetitle </span></td> <td style="white-space:normal; text-align:left;" id="TBL-2-11-2"
-class="td11"> <!--l. 609--><p class="noindent" ></td>
+class="td11"> <!--l. 609--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-12-1"
class="td11"> <span
class="ec-lmvtt-10">pdfpagelabels </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-12-2"
-class="td11"> <!--l. 610--><p class="noindent" > </td>
+class="td11"> <!--l. 610--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-13-1"
class="td11"> <span
class="ec-lmvtt-10">hyperfootnotes </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-13-2"
-class="td11"> <!--l. 611--><p class="noindent" > </td>
+class="td11"> <!--l. 611--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-14-1"
class="td11"> <span
class="ec-lmvtt-10">hyperfigures </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-14-2"
-class="td11"> <!--l. 612--><p class="noindent" > </td>
+class="td11"> <!--l. 612--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-15-1"
class="td11"> <span
class="ec-lmvtt-10">hyperindex </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-15-2"
-class="td11"> <!--l. 613--><p class="noindent" > </td>
+class="td11"> <!--l. 613--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-16-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-16-1"
class="td11"> <span
class="ec-lmvtt-10">encap </span></td><td style="white-space:normal; text-align:left;" id="TBL-2-16-2"
-class="td11"> <!--l. 614--><p class="noindent" > </td>
+class="td11"> <!--l. 614--><p class="noindent" >
+ </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-17-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-17-1"
class="td11"> <span
@@ -1950,8 +1959,7 @@ class="td01"><span
class="ec-lmvtt-10">hyperfigures </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-2"
class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-2-4"
-class="td10">
- <!--l. 941--><p class="noindent" > </td>
+class="td10"> <!--l. 941--><p class="noindent" > </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-3-1"
class="td01"><span
@@ -3174,8 +3182,6 @@ class="td10">
<!--l. 1198--><p class="noindent" >The old page slides off the screen in the direction
specified by /Di, uncovering the new page in the
direction specified by /Di. </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-13-12-1"
class="td01"><span
@@ -3184,6 +3190,8 @@ class="td11"> </td><td style="white-space:normal; text-align:left;
class="td10">
<!--l. 1201--><p class="noindent" >The new page gradually becomes visible through the old
one. </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-13-13-1"
class="td01"> </td>
@@ -3709,8 +3717,7 @@ class="td10">
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-14-58-2"
class="td11"> <span
class="ec-lmri-10">hyperref </span></td><td style="white-space:normal; text-align:left;" id="TBL-14-58-3"
-class="td10">
- <!--l. 1293--><p class="noindent" > </td>
+class="td10"> <!--l. 1293--><p class="noindent" > </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-59-"><td style="white-space:nowrap; text-align:left;" id="TBL-14-59-1"
class="td01"><span
@@ -3850,8 +3857,6 @@ class="td11"> <span
class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-14-75-3"
class="td10">
<!--l. 1313--><p class="noindent" >set PDF page labels </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-14-76-"><td style="white-space:nowrap; text-align:left;" id="TBL-14-76-1"
class="td01"><span
@@ -3860,6 +3865,8 @@ class="td11"> <span
class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-14-76-3"
class="td10">
<!--l. 1314--><p class="noindent" >set layout of PDF pages </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-14-77-"><td style="white-space:nowrap; text-align:left;" id="TBL-14-77-1"
class="td01"><span
@@ -4091,8 +4098,6 @@ class="td11"> <span
class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-14-104-3"
class="td10">
<!--l. 1345--><p class="noindent" >set page size by special driver commands </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-14-105-"><td style="white-space:nowrap; text-align:left;" id="TBL-14-105-1"
class="td01"><span
@@ -4101,6 +4106,8 @@ class="td11"> </td><td style="white-space:normal; text-align:l
class="td10">
<!--l. 1346--><p class="noindent" >use <span
class="ec-lmss-10">TeX4ht </span>backend </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-14-106-"><td style="white-space:nowrap; text-align:left;" id="TBL-14-106-1"
class="td01"><span
@@ -4226,8 +4233,6 @@ class="ec-lmvtk-10">nextactionraw</span><span
class="ec-lmbx-10">:</span> </dt><dd
class="description">
<!--l. 1379--><p class="noindent" >The value of key <span class="obeylines-h"><code class="verb">/Next</code></span> of action dictionaries, see PDF specification.</dd></dl>
-
-
<!--l. 1383--><p class="noindent" ><span class="fbox"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-16" class="tabular"
><colgroup id="TBL-16-1g"><col
@@ -4241,6 +4246,7 @@ class="ec-lmvtt-10">\href</span><span class="obeylines-h"><code class="verb">{</
class="ec-lmri-10">URL</span><span class="obeylines-h"><code class="verb">}{</code></span><span
class="ec-lmvtt-10">\nolinkurl</span><span class="obeylines-h"><code class="verb">{</code></span><span
class="ec-lmri-10">URL</span><span class="obeylines-h"><code class="verb">}}</code></span>. Depending on the driver <span class="obeylines-h"><code class="verb">\href</code></span> also tries to detect the link
+
type. Thus the result can be a url link, file link, &#x2026;. The implementation makes use of the <span
class="ec-lmss-10">url </span>package and
its commands can be used to format and fine tune the url, but the behaviour of <span
@@ -4360,8 +4366,6 @@ and the <span
class="ec-lmri-10">text </span>which is used as the link on the page.
<!--l. 1457--><p class="indent" > Note that in HTML parlance, the <span class="obeylines-h"><code class="verb">\hyperlink</code></span> command inserts a notional # in front of each link,
making it relative to the current testdocument; <span class="obeylines-h"><code class="verb">\href</code></span> expects a full URL.
-
-
<!--l. 1461--><p class="noindent" ><span class="fbox"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-25" class="tabular"
><colgroup id="TBL-25-1g"><col
@@ -4372,6 +4376,8 @@ class="ec-lmvtt-10">\phantomsection </span></td>
</tr></table> </div></span>
<!--l. 1465--><p class="noindent" >This sets an anchor at this location. It works similar to <span class="obeylines-h"><code class="verb">\hypertarget{}{}</code></span> with an automatically chosen
anchor name. Often it is used in conjunction with <span class="obeylines-h"><code class="verb">\addcontentsline</code></span> for sectionlike things (index,
+
+
bibliography, preface). <span class="obeylines-h"><code class="verb">\addcontentsline</code></span> refers to the latest previous location where an anchor is set.
Example:
<blockquote class="quote">
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
index 51e6b0d29b..1637285c01 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
index 55b0476967..2f4ff93f80 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{2024-05-23 v7.01i}
+\date{2024-07-10 v7.01j}
\begin{document}
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
index f95e9380f6..3e29950cf1 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf
index 62ce7aba61..bb0f2a46aa 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf
index 47209adb7c..4c4ea6606b 100644
--- a/macros/latex/contrib/hyperref/doc/nameref.pdf
+++ b/macros/latex/contrib/hyperref/doc/nameref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/xr-hyper.pdf b/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
index 3b4395c0f6..a5d0e690fc 100644
--- a/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
+++ b/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/hluatex.dtx b/macros/latex/contrib/hyperref/hluatex.dtx
index 8a90953abb..20a2f3a4a3 100644
--- a/macros/latex/contrib/hyperref/hluatex.dtx
+++ b/macros/latex/contrib/hyperref/hluatex.dtx
@@ -1,6 +1,6 @@
% \iffalse
% Source File: hluatex.dtx
-% 2024-05-23 v7.01i
+% 2024-07-10 v7.01j
%
% Copyright
% 2016-2019 Oberdiek Package Support Group
@@ -31,7 +31,7 @@
%
% \begin{macrocode}
%<*luatex>
-%% 2024-05-23 v7.01i
+%% 2024-07-10 v7.01j
%% 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 c35b68d116..874a492736 100644
--- a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx
+++ b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Version 2024-05-23 v7.01i}
+% \date{Version 2024-07-10 v7.01j}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/hyperref/hyperref-patches.dtx b/macros/latex/contrib/hyperref/hyperref-patches.dtx
index c9ffbf15bc..ac4bac4f8c 100644
--- a/macros/latex/contrib/hyperref/hyperref-patches.dtx
+++ b/macros/latex/contrib/hyperref/hyperref-patches.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 2024-05-23 v7.01i}
+% \date{Version 2024-07-10 v7.01j}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx
index 8f6096d77d..80cef9b890 100644
--- a/macros/latex/contrib/hyperref/hyperref.dtx
+++ b/macros/latex/contrib/hyperref/hyperref.dtx
@@ -51,7 +51,7 @@
%<puvnenc>\ProvidesFile{puvnenc.def}
%<puarenc>\ProvidesFile{puarenc.def}
%<psdextra>\ProvidesFile{psdextra.def}
-%<!none&!packageEnd> [2024-05-23 v7.01i %
+%<!none&!packageEnd> [2024-07-10 v7.01j %
%<package> Hypertext links for LaTeX]
%<nohyperref> Dummy hyperref (SR)]
%<driver> Hyperref documentation driver file]
@@ -9177,6 +9177,8 @@
\Hy@temp{calculate}
\Hy@temp{onfocus}
\Hy@temp{onblur}
+\Hy@temp{onmousedown}
+\Hy@temp{onmouseup}
\Hy@temp{onenter}
\Hy@temp{onexit}
% \end{macrocode}
@@ -9201,8 +9203,6 @@
}%
\fi
\Hy@temp{ondblclick}
-\Hy@temp{onmousedown}
-\Hy@temp{onmouseup}
\Hy@temp{onmouseover}
\Hy@temp{onmousemove}
\Hy@temp{onmouseout}
@@ -12103,7 +12103,10 @@
% the hyperref version of the counter print command
% \cs{theHcounter} is redefined in order to add the
% parent counter.
+% change 2024-07-10: define |\HyOrg@addtoreset| always for cleveref
+% compability with tagging code, see https://github.com/latex3/tagging-project/issues/2
% \begin{macrocode}
+\def\HyOrg@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}
\@ifundefined{hyper@nopatch@counter}
{
\let\HyOrg@addtoreset\@addtoreset
diff --git a/macros/latex/contrib/hyperref/xr-hyper.dtx b/macros/latex/contrib/hyperref/xr-hyper.dtx
index aced2ac70b..f7b39072f5 100644
--- a/macros/latex/contrib/hyperref/xr-hyper.dtx
+++ b/macros/latex/contrib/hyperref/xr-hyper.dtx
@@ -26,7 +26,7 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{xr-hyper}
-%<package> [2024-05-23 v7.01i eXternal References (DPC)]
+%<package> [2024-07-10 v7.01j eXternal References (DPC)]
%
%<*driver>
\documentclass{l3doc}
diff --git a/macros/latex/contrib/iwonamath/Makefile b/macros/latex/contrib/iwonamath/Makefile
index 5b8322bf33..fcac414a15 100644
--- a/macros/latex/contrib/iwonamath/Makefile
+++ b/macros/latex/contrib/iwonamath/Makefile
@@ -48,6 +48,7 @@ all: ${PDF} $(PACKAGE).sty $(FD)
pdflatex $<
- bibtex $*
pdflatex $<
+ pdflatex $<
while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
do pdflatex $<; done
@@ -64,7 +65,8 @@ clean:
*.ilg *.ind *.out *.lof \
*.lot *.bbl *.blg *.gls \
*.dvi *.ps *.thm *.tgz *.zip *.rpi \
- *.hd sample-blx.bib
+ *.hd sample-blx.bib \
+ omsiwonamathcmsy.fd *.sty
distclean: clean
@@ -75,7 +77,7 @@ distclean: clean
#
archive: all clean
COPYFILE_DISABLE=1 \
- tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' \
+ tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude LICENSE \
--exclude '*.tgz' --exclude '*.zip' --exclude .git $(PACKAGE)
mv ../$(PACKAGE).tgz .
diff --git a/macros/latex/contrib/iwonamath/README b/macros/latex/contrib/iwonamath/README
index 72fe9e3508..8bf59e86c3 100644
--- a/macros/latex/contrib/iwonamath/README
+++ b/macros/latex/contrib/iwonamath/README
@@ -2,4 +2,9 @@ This package provides an interface to Iwona math fonts by Janusz
Marian Nowacki. It allows to use Iwona as math complement for sans
serif fonts without native math. The package allows font scaling, the
choice of light and condensed versions and the creation of multiple
-math versions. \ No newline at end of file
+math versions.
+
+Author: Boris Veytsman, borisv@lk.net, boris@varphi.com
+License: LPPL 1.3c, https://www.latex-project.org/lppl/lppl-1-3c/
+
+Version 1.1: Improved delimitershack as suggested by Enrico Gregorio. \ No newline at end of file
diff --git a/macros/latex/contrib/iwonamath/iwonamath.dtx b/macros/latex/contrib/iwonamath/iwonamath.dtx
index 020c8d6ad0..38aebd666a 100644
--- a/macros/latex/contrib/iwonamath/iwonamath.dtx
+++ b/macros/latex/contrib/iwonamath/iwonamath.dtx
@@ -141,7 +141,7 @@
%<oms>{oms_FAMILY_.fd}
%<omx>{omx_FAMILY_.fd}
%<cmsy>{omsiwonamathcmsy.fd}
-%<package|fd>{2023-08-31} {1.0}
+%<package|fd>{2024-07-19} {1.1}
%<package|fd>{Scaled Iwona math fonts}
%<*package>
% \end{macrocode}
@@ -233,7 +233,8 @@
%
% We add delimiters from |cmsy|, as discussed in
% \citep[\S~12.5.5]{TLC3}). We predefine the symbols for the standard
-% versions just in case.
+% versions just in case. The last line is suggested by Enrico
+% Gregorio.
% \begin{macrocode}
\bool_if:NTF \l_@@_delimitershack_bool
{
@@ -241,6 +242,7 @@
\SetSymbolFont{symbols2} {bold}{OMS}{cmsy}{b}{n}
\DeclareMathDelimiter{\lVert}{\mathopen} {symbols2}{"6B}{largesymbols}{"0D}
\DeclareMathDelimiter{\rVert}{\mathclose}{symbols2}{"6B}{largesymbols}{"0D}
+ \DeclareMathDelimiter{\|}{\mathclose}{symbols2}{"6B}{largesymbols}{"0D}
}
{}
% \end{macrocode}
diff --git a/macros/latex/contrib/iwonamath/iwonamath.pdf b/macros/latex/contrib/iwonamath/iwonamath.pdf
index fc0b5e6e2c..e80a3e33d0 100644
--- a/macros/latex/contrib/iwonamath/iwonamath.pdf
+++ b/macros/latex/contrib/iwonamath/iwonamath.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwonamath/omliwonamath.fd b/macros/latex/contrib/iwonamath/omliwonamath.fd
index eca19657e2..869b63021f 100644
--- a/macros/latex/contrib/iwonamath/omliwonamath.fd
+++ b/macros/latex/contrib/iwonamath/omliwonamath.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omliwonamath.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omliwonamathc.fd b/macros/latex/contrib/iwonamath/omliwonamathc.fd
index 452341075f..567abb4d8c 100644
--- a/macros/latex/contrib/iwonamath/omliwonamathc.fd
+++ b/macros/latex/contrib/iwonamath/omliwonamathc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omliwonamathc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omliwonamathl.fd b/macros/latex/contrib/iwonamath/omliwonamathl.fd
index a0dba2a829..c52bb24dcf 100644
--- a/macros/latex/contrib/iwonamath/omliwonamathl.fd
+++ b/macros/latex/contrib/iwonamath/omliwonamathl.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omliwonamathl.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omliwonamathlc.fd b/macros/latex/contrib/iwonamath/omliwonamathlc.fd
index 90d147d1ee..ebfaea2b69 100644
--- a/macros/latex/contrib/iwonamath/omliwonamathlc.fd
+++ b/macros/latex/contrib/iwonamath/omliwonamathlc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omliwonamathlc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omsiwonamath.fd b/macros/latex/contrib/iwonamath/omsiwonamath.fd
index 958053cd49..7a0c889c7d 100644
--- a/macros/latex/contrib/iwonamath/omsiwonamath.fd
+++ b/macros/latex/contrib/iwonamath/omsiwonamath.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omsiwonamath.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathc.fd b/macros/latex/contrib/iwonamath/omsiwonamathc.fd
index 02b892ffc5..22c1755011 100644
--- a/macros/latex/contrib/iwonamath/omsiwonamathc.fd
+++ b/macros/latex/contrib/iwonamath/omsiwonamathc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omsiwonamathc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathl.fd b/macros/latex/contrib/iwonamath/omsiwonamathl.fd
index d291ba7eb0..3e0815ef80 100644
--- a/macros/latex/contrib/iwonamath/omsiwonamathl.fd
+++ b/macros/latex/contrib/iwonamath/omsiwonamathl.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omsiwonamathl.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathlc.fd b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd
index 55a040e93e..8cdb0f6503 100644
--- a/macros/latex/contrib/iwonamath/omsiwonamathlc.fd
+++ b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omsiwonamathlc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omxiwonamath.fd b/macros/latex/contrib/iwonamath/omxiwonamath.fd
index 662121a6be..8b33fd85b9 100644
--- a/macros/latex/contrib/iwonamath/omxiwonamath.fd
+++ b/macros/latex/contrib/iwonamath/omxiwonamath.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omxiwonamath.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathc.fd b/macros/latex/contrib/iwonamath/omxiwonamathc.fd
index fce676f1e8..9738a6961d 100644
--- a/macros/latex/contrib/iwonamath/omxiwonamathc.fd
+++ b/macros/latex/contrib/iwonamath/omxiwonamathc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omxiwonamathc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathl.fd b/macros/latex/contrib/iwonamath/omxiwonamathl.fd
index 895f359e35..759ecad381 100644
--- a/macros/latex/contrib/iwonamath/omxiwonamathl.fd
+++ b/macros/latex/contrib/iwonamath/omxiwonamathl.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omxiwonamathl.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathlc.fd b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd
index 85f60415e3..fbe5cdc48c 100644
--- a/macros/latex/contrib/iwonamath/omxiwonamathlc.fd
+++ b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{omxiwonamathlc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamath.fd b/macros/latex/contrib/iwonamath/ot1iwonamath.fd
index 20be53c3af..789656bfa7 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamath.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamath.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamath.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd
index a0b92a2b37..182d34be2f 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathc.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
index a5e69e07ad..4f49f9befb 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathcm.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathl.fd b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd
index 82060b21d1..504e9c87ad 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathl.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathl.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
index c5b2f0024b..5ad18477c7 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathlc.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
index 130c63822e..c1b3f9bb44 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathlcm.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
index ab72419cd8..f15d880adc 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathlm.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd
index 7a103a029b..9f82d65734 100644
--- a/macros/latex/contrib/iwonamath/ot1iwonamathm.fd
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd
@@ -22,7 +22,7 @@
%% in the same archive or directory.)
\ProvidesExplFile
{ot1iwonamathm.fd}
-{2023-08-31} {1.0}
+{2024-07-19} {1.1}
{Scaled Iwona math fonts}
\tl_if_exist:NTF \l__iwonamath_scale_tl
{}
diff --git a/macros/latex/contrib/iwonamath/sample.pdf b/macros/latex/contrib/iwonamath/sample.pdf
index c64d5e078d..342ba53f87 100644
--- a/macros/latex/contrib/iwonamath/sample.pdf
+++ b/macros/latex/contrib/iwonamath/sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfc-a-answer.pdf b/macros/latex/contrib/jnuexam/examfc-a-answer.pdf
index f6f0a50649..e12e04e047 100644
--- a/macros/latex/contrib/jnuexam/examfc-a-answer.pdf
+++ b/macros/latex/contrib/jnuexam/examfc-a-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfc-a-blank.pdf b/macros/latex/contrib/jnuexam/examfc-a-blank.pdf
index 09d8a14b15..d033fe6d75 100644
--- a/macros/latex/contrib/jnuexam/examfc-a-blank.pdf
+++ b/macros/latex/contrib/jnuexam/examfc-a-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfc-b-answer.pdf b/macros/latex/contrib/jnuexam/examfc-b-answer.pdf
index 2356b53690..6497883408 100644
--- a/macros/latex/contrib/jnuexam/examfc-b-answer.pdf
+++ b/macros/latex/contrib/jnuexam/examfc-b-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfc-b-blank.pdf b/macros/latex/contrib/jnuexam/examfc-b-blank.pdf
index d9160a13ed..5682c2d24b 100644
--- a/macros/latex/contrib/jnuexam/examfc-b-blank.pdf
+++ b/macros/latex/contrib/jnuexam/examfc-b-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfe-a-answer.pdf b/macros/latex/contrib/jnuexam/examfe-a-answer.pdf
index 6ac1d17806..c029ef99ea 100644
--- a/macros/latex/contrib/jnuexam/examfe-a-answer.pdf
+++ b/macros/latex/contrib/jnuexam/examfe-a-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfe-a-blank.pdf b/macros/latex/contrib/jnuexam/examfe-a-blank.pdf
index 4192ead99f..e2f4dac7e2 100644
--- a/macros/latex/contrib/jnuexam/examfe-a-blank.pdf
+++ b/macros/latex/contrib/jnuexam/examfe-a-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfe-b-answer.pdf b/macros/latex/contrib/jnuexam/examfe-b-answer.pdf
index bf5e9342ee..8e60df9eac 100644
--- a/macros/latex/contrib/jnuexam/examfe-b-answer.pdf
+++ b/macros/latex/contrib/jnuexam/examfe-b-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/examfe-b-blank.pdf b/macros/latex/contrib/jnuexam/examfe-b-blank.pdf
index c37242241f..03bcefee49 100644
--- a/macros/latex/contrib/jnuexam/examfe-b-blank.pdf
+++ b/macros/latex/contrib/jnuexam/examfe-b-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jnuexam/jnuexam.cls b/macros/latex/contrib/jnuexam/jnuexam.cls
index f5df920469..086c55f2b0 100644
--- a/macros/latex/contrib/jnuexam/jnuexam.cls
+++ b/macros/latex/contrib/jnuexam/jnuexam.cls
@@ -6,7 +6,7 @@
% ----------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{jnuexam}[2024-02-18 v2024E An exam class for Jinan University]
+\ProvidesClass{jnuexam}[2024-07-09 v2024F An exam class for Jinan University]
%% 旧版本的 LaTeX 不能识别 2022-11-01 这种日期格式
%\@ifl@t@r\fmtversion{2022-11-01}{}{
@@ -521,9 +521,10 @@
\let\doscratchpaper=\doscratchpaperone
}
-% 在旧版本 ctex 宏包中不能用 \AtEndDocument 添加含中文的内容,即不能用 \appto 而要用 \preto
+%% 此时 \AtEndDocument{...} 等价于 \AddToHook{enddocument}[jnuexam]{...}
+%% 而且默认会在 \AddToHook{enddocument}[randexam]{...} 所加的代码之后执行
\newcommand{\addscratchpaper}{
- \preto{\@enddocumenthook}{\doscratchpaper}
+ \AtEndDocument{\doscratchpaper}
}
\IfExamBoolF{plain}{\IfExamBoolF{answer}{\addscratchpaper}}
@@ -534,6 +535,7 @@
\DeclareExamTheme{final-chinese}{
\SetExamOption{chinese}
+ \SetExamBoolTrue{evaluator}
\SelectExamTranslation{chinese}
\SetExamValue{exampart}{number=\Chinese}
\SelectExamTemplate{examtitle}{final-chinese}
diff --git a/macros/latex/contrib/jnuexam/jnuexam.pdf b/macros/latex/contrib/jnuexam/jnuexam.pdf
index 0cc01cc3f1..c0a756123c 100644
--- a/macros/latex/contrib/jnuexam/jnuexam.pdf
+++ b/macros/latex/contrib/jnuexam/jnuexam.pdf
Binary files differ
diff --git a/macros/latex/contrib/lni/CHANGELOG.md b/macros/latex/contrib/lni/CHANGELOG.md
index 5bb6f9697c..377ce68c43 100644
--- a/macros/latex/contrib/lni/CHANGELOG.md
+++ b/macros/latex/contrib/lni/CHANGELOG.md
@@ -6,9 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
## [Unreleased]
-## [1.9] - 2024-07-1
+## [1.10] - 2024-07-23
+### Changed
+- Footnotes are set as superscripts in the footer
+- URLs are set using the text font instead of a typewriter font
+
+### Fixed
+- Support for multiple affiliations (#173)
+
+## [1.9] - 2024-07-01
### Added
-- Support for multiple affiliations
+- Support for multiple affiliations (#158)
## [1.8.1] - 2024-01-08
@@ -171,7 +179,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
First release of the revised files
-[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.9...HEAD
+[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.10...HEAD
+[1.10]: https://github.com/gi-ev/LNI/compare/v1.9...v1.10
[1.9]: https://github.com/gi-ev/LNI/compare/v1.8.1...v1.9
[1.8.1]: https://github.com/gi-ev/LNI/compare/v1.8...v1.8.1
[1.8]: https://github.com/gi-ev/LNI/compare/v1.7...v1.8
diff --git a/macros/latex/contrib/lni/README.md b/macros/latex/contrib/lni/README.md
index 034ef480d8..9935391e3b 100644
--- a/macros/latex/contrib/lni/README.md
+++ b/macros/latex/contrib/lni/README.md
@@ -4,7 +4,7 @@
----------------------------------------------------------------------------
lni -- A class for submissions to the ``Lecture Notes in Informatics''
(c) 2016-2024 Gesellschaft für Informatik (GI)
-Version: 1.9
+Version: 1.10
Maintainer: Martin Sievers
Email: martin.sievers@schoenerpublizieren.de
License: Released under the LaTeX Project Public License v1.3c or later
diff --git a/macros/latex/contrib/lni/lni.dtx b/macros/latex/contrib/lni/lni.dtx
index 257f0d4bb0..b5699cbac6 100644
--- a/macros/latex/contrib/lni/lni.dtx
+++ b/macros/latex/contrib/lni/lni.dtx
@@ -134,7 +134,7 @@ This work consists of the file lni.dtx
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{lni}
%<*class>
- [2024/07/01 v1.9 Official class for submissions to the ``Lecture Notes
+ [2024/07/23 v1.10 Official class for submissions to the ``Lecture Notes
in Informatics'']
%</class>
%<*driver>
@@ -287,6 +287,8 @@ This work consists of the file lni.dtx
% \changes{v1.8}{2022/11/25}{Make class compatable with latest publisher requirements (#121)}
% \changes{v1.8}{2022/11/25}{Make usage of `hyperref` mandatory (#131)}
% \changes{v1.9}{2024/07/01}{Support multiple affiliations (#158)}
+% \changes{v1.10}{2024/07/01}{Change font for URLs to text font and change footnote numbers to superscript}
+% \changes{v1.10}{2024/07/23}{Fix support multiple affiliations (#173)}
%
% \GetFileInfo{\jobname.dtx}
% \DoNotIndex{\newcommand,\newenvironment}
@@ -1046,7 +1048,7 @@ This work consists of the file lni.dtx
\RequirePackage[hang]{footmisc}
\setlength{\footnotemargin}{1em}
\long\def\@makefntext#1{%
- \def\@makefnmark{\rlap{\normalfont\@thefnmark}}%
+ \def\@makefnmark{\rlap{\normalfont\textsuperscript{\@thefnmark}}}%
\ifFN@hangfoot
\bgroup
\setbox\@tempboxa\hbox{%
@@ -1160,9 +1162,9 @@ This work consists of the file lni.dtx
\newcommand{\@multiaffil}[1]{%
\ifcsundef{@emailsandorcids#1}{\csgdef{@emailsandorcids#1}{}}{}%
\ifcsempty{@emailsandorcids#1}%
- {\csgappto{@emailsandorcids#1}{%
+ {\protected@csxappto{@emailsandorcids#1}{%
\if\relax\@currEmail\relax\else\email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
- {\csgappto{@emailsandorcids#1}{%
+ {\protected@csxappto{@emailsandorcids#1}{%
\if\relax\@currEmail\relax\else;\ \email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
}
@@ -1549,6 +1551,7 @@ This work consists of the file lni.dtx
% \end{macrocode}
% \begin{macrocode}
\RequirePackage{url}
+\urlstyle{same}
% \end{macrocode}
% improve wrapping of URLs - hint by http://tex.stackexchange.com/a/10419/9075
% \begin{macrocode}
diff --git a/macros/latex/contrib/lni/lni.pdf b/macros/latex/contrib/lni/lni.pdf
index c3b50c0cd1..b79a12a091 100644
--- a/macros/latex/contrib/lni/lni.pdf
+++ b/macros/latex/contrib/lni/lni.pdf
Binary files differ
diff --git a/macros/latex/contrib/mailing/CATALOG b/macros/latex/contrib/mailing/CATALOG
new file mode 100644
index 0000000000..bfc37ff238
--- /dev/null
+++ b/macros/latex/contrib/mailing/CATALOG
@@ -0,0 +1,15 @@
+Name: mailing
+Problems-To: texniek at texniek.nl
+Author: J.L. Braams
+Version: 1.0c
+
+Description:
+
+The mailing package implements support for producing letters to
+multiple people.
+
+Keywords: latex mailing
+
+Address:
+TeXniek
+The Netherlands
diff --git a/macros/latex/contrib/mailing/manifest.txt b/macros/latex/contrib/mailing/MANIFEST
index b0653434c7..b93e68a619 100644
--- a/macros/latex/contrib/mailing/manifest.txt
+++ b/macros/latex/contrib/mailing/MANIFEST
@@ -2,11 +2,11 @@
% CONTENTS OF THE MAILING PACKAGE
% ===============================
%
-% manifest.txt -- This file
+% MANIFEST -- This file
%
% mailing.dtx -- A package to produce a `mailing' ie a large number
% of letters with (almost) identical text.
-% mailing.pdf -- The `printed version of mailing.dtx
+% mailing.pdf -- The `printed´ version of mailing.dtx
%
% Installation script for the various parts:
% -------------------------------------------
diff --git a/macros/latex/contrib/mailing/README b/macros/latex/contrib/mailing/README
new file mode 100644
index 0000000000..6dccf798b9
--- /dev/null
+++ b/macros/latex/contrib/mailing/README
@@ -0,0 +1,14 @@
+ mailing bundle
+
+ July 2024, 2024
+
+This bundle contains a package that provides functionality to
+produce multiple letters with the same text to different addressses.
+It provides three commands \addressfile, \mailingtext and \makemailing.
+
+Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1.3c of the License, or any later version.
diff --git a/macros/latex/contrib/mailing/mailing.dtx b/macros/latex/contrib/mailing/mailing.dtx
index 01aabfcfd4..2a1747d440 100644
--- a/macros/latex/contrib/mailing/mailing.dtx
+++ b/macros/latex/contrib/mailing/mailing.dtx
@@ -1,33 +1,34 @@
% \iffalse meta-comment
%
-% Copyright 1994-2004 Johannes Braams. All rights reserved.
-%
+% Copyright 1999-2024 Johannes L. Braams. All rights reserved.
+%
% This file is part of the mailing package.
% -----------------------------------------
-%
+%
% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
% This work has the LPPL maintenance status "maintained".
-%
+%
% The Current Maintainer of this work is Johannes Braams.
-%
-% The list of all files belonging to the mailing package is
-% given in the file `manifest.txt'.
-%
+%
+% The list of all files belonging to the supertabular package is
+% given in the file `MANIFEST.
+%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
% \fi
+%
% \CheckSum{157}
%
%\iffalse
-%% Copyright (C) 1999-2004 Johannes L. Braams texniek at braams.cistron.nl
+%% Copyright (C) 1999-2024 Johannes L. Braams texniek at texniek.nl
%%
%%
%<*dtx>
@@ -38,7 +39,7 @@
%<driver>\ProvidesFile{mailing.drv}
%\fi
%\ProvidesFile{mailing}
- [2004/02/20 v1.0b Send letters to multiple addresses]
+ [2024/07/20 v1.0c Send letters to multiple addresses]
%\iffalse
%<*driver>
\documentclass{ltxdoc}
@@ -48,11 +49,14 @@
\end{document}
%</driver>
%\fi
+% \changes{v1.0c}{2024/07/20}{Updated contact info}
%
% \GetFileInfo{mailing}
-% \title{Creating a mailing}
+% \title{Creating a mailing\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
% \author{Johannes Braams}
-% \date{september 7, 1994}
+% \date{\filedate}^^AA original date{september 7, 1994}
% \maketitle
%
% \markboth
@@ -304,4 +308,4 @@
% \end{macro}
%
% \Finale
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/mailing/mailing.ins b/macros/latex/contrib/mailing/mailing.ins
index b9143a89b6..a9c133d718 100644
--- a/macros/latex/contrib/mailing/mailing.ins
+++ b/macros/latex/contrib/mailing/mailing.ins
@@ -3,54 +3,43 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 1989-2004 Johannes L. Braams. All rights reserved.
%%
-%% This file is part of the mailing package.
-%% ------------------------------------------
+%% This file is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
%%
-%% It 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 in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2003/12/01 or later.
+%% IMPORTANT NOTICE:
%%
-%% This work has the LPPL maintenance status "maintained".
+%% Copyright (C) 1994-2024 Johannes Braams, All rights reserved.
%%
-%% The Current Maintainer of this work is Johannes Braams.
-%%
-%% The list of all files belonging to the mailing package is
-%% given in the file `manifest.txt.
-%%
-%% The list of derived (unpacked) files belonging to the distribution
-%% and covered by LPPL is defined by the unpacking scripts (with
-%% extension .ins) which are part of the distribution.
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1.3c of the License, or any later version.
%%
%% --------------- start of docstrip commands ------------------
%%
% ignored commands
-\def\filedate{2004/02/20}
+\def\filedate{2024/07/20}
\def\batchfile{mailing.ins}
\input docstrip.tex
-
% package file
\preamble
-Copyright (C) 1999-2004 Johannes Braams. All rights reserved.
+Copyright (C) 1999-2024 Johannes Braams. All rights reserved.
This file was generated from file(s) of the mailing package.
------------------------------------------------------------
It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3c
of this license or (at your option) any later version.
The latest version of this license is in
http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2003/12/01 or later.
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008 or later.
This work has the LPPL maintenance status "maintained".
@@ -61,12 +50,13 @@ mailing package. You may however distribute the mailing package
without such generated files.
The list of all files belonging to the mailing package is
-given in the file `manifest.txt.
+given in the file `MANIFEST'.
The list of derived (unpacked) files belonging to the distribution
and covered by LPPL is defined by the unpacking scripts (with
extension .ins) which are part of the distribution.
\endpreamble
+\keepsilent
\generateFile{mailing.sty}{t}{\from{mailing.dtx}{package}}
diff --git a/macros/latex/contrib/mailing/mailing.pdf b/macros/latex/contrib/mailing/mailing.pdf
index 1625f90e04..109c5c3de0 100644
--- a/macros/latex/contrib/mailing/mailing.pdf
+++ b/macros/latex/contrib/mailing/mailing.pdf
Binary files differ
diff --git a/macros/latex/contrib/mathastext/README.md b/macros/latex/contrib/mathastext/README.md
index 44b778b728..f2c55cf149 100644
--- a/macros/latex/contrib/mathastext/README.md
+++ b/macros/latex/contrib/mathastext/README.md
@@ -8,13 +8,13 @@
+-------------------------------------------+
This Work may be distributed and/or modified under the conditions
-of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt)
+of the [LPPL 1.3c](https://www.latex-project.org/lppl/lppl-1-3c.txt)
The Author of this Work is Jean-Francois Burnol (`jfbu at free dot fr`)
-Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
+Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol
- Source: mathastext.dtx 1.3zb 2023/12/29
+ Source: mathastext.dtx 1.4b 2024/07/27
DESCRIPTION
@@ -82,6 +82,98 @@ Main options: `italic`, `frenchmath`, `subdued`, `LGRgreek`.
RECENT CHANGES
==============
+1.4b \[2024/07/27\]
+----
+
+* Fix a regression at `1.4` regarding option `nodigits`.
+
+* New option: `noletters`. I am in old age now so I can provide an option
+ completely antithetical to my life work.
+
+* Option `everymath` which is destined to be removed at next major
+ release warns user about it. As major releases tend to happen once
+ per decade I think the constant nagging will become insufferable
+ and you will adapt to the `1.4` changes rather than persisting into
+ using this option.
+
+1.4a \[2024/07/20\]
+----
+
+* There was a documentation glitch in 1.4 and also a problem with the
+ `\MTprimeskip` feature being lost under the emergency fall-back
+ `everymath` option.
+
+1.4 \[2024/07/20\]
+---
+
+* Since 1.2 of 2012/12/20, mathastext has used mathematically active
+ characters to propose certain advanced functionalities. For reasons half
+ lost in the mists of time but whose main one was surely to keep the
+ meaning of the active shape of characters unchanged outside of math mode,
+ this mathematical activation, and (in most cases) the definitions of what
+ active characters do, were done again at *each* entrance into math mode.
+ At this 1.4 release, mathastext does not inject *any* code whatsoever into
+ the `\everymath` and `\everydisplay` toks registers anymore (except for
+ one font-related hack needed under LuaLaTeX, see below). Your documents
+ will compile a tiny bit faster.
+
+* In (unsual) documents where users play with catcodes and mathcodes it is
+ impossible to keep exact backward compatibility, because documented user
+ commands which acted formerly a toggles with delayed action now will enact
+ changes immediately if in the document body. In practice consequences are
+ expected to be few, because catcode active characters are (as was already
+ the case with earlier releases) hacked only when they are Babel shorthands
+ and they are then modified in a way altering only their action in math
+ mode. The precise description of what mathastext does when mathematically
+ activating (or not) a character, depending on circumstances, is to be
+ found among small-print comments in the section "Extended scope of the
+ math alphabets commands". See also the documentation of the
+ `\MTmathactiveletters` command for some specifics regarding ascii letters.
+
+* New option: `everymath`. It instructs mathastext to revert (partially)
+ to its legacy code which uses `\everymath/\everydisplay`. This reversal
+ is partial, the handling of ascii letters not being included into it. The
+ `everymath` option is there only to try as a quick fix in case transition
+ to this release causes a major problem in a user document and time is
+ lacking to investigate. Please report to the author such issues. Option
+ `everymath` is destined to be removed at next major release.
+
+* New option: `activedigits`. Enjoy.
+
+* It is now easier to hook into the mathastext architecture for
+ mathematically activated ascii letters. See the new section "Hacking
+ letters (and even digits) for special tasks".
+
+* Bugfix: do not override special behavior of the math mode dot in
+ babel-spanish.
+
+* Bugfix: A desperate hack related to LuaLaTeX font matters and dating
+ back to 1.3o 2016/05/03 had been for some years in dire need of an update
+ regarding fonts using `Renderer=HarfBuzz`. This is done now. Thanks to
+ tex.sx `user691586` for report. This is currently the sole remaining
+ usage of `\everymath/\everydisplay`.
+
+* Bugfix: an optional feature related to `\{` and `\}` was broken since an
+ upstream LaTeX change at its 2020-02-02 release.
+
+* With option symbolmisc, those math symbol macros formerly defined via
+ `\DeclareRobustCommand` are now declared via `\protected\def`.
+
+* Removal of legacy branches previously kept to support LaTeX earlier than
+ 2020-02-02.
+
+* Removal of support for EU1 and EU2 font encodings.
+
+* Option `noasterisk` deprecated at 1.2d 2013/01/02 has (finally) been removed.
+
+* Four test files previously included and auto-extracted from the
+ distributed dtx have been dropped. One of them is still available
+ on the package homepage.
+
+* Some parts of the documentation have been massively re-ordered and even to some
+ extent improved. But there may be some occasions where obsolete statements will
+ be found having the legacy `\everymath/\everydisplay` situation as background.
+
1.3zb \[2023/12/29\]
-----
@@ -133,63 +225,3 @@ RECENT CHANGES
* Fix long-standing hyperlink problems in the documentation:
blue color words should now all be functioning hyperlinks.
-1.3z \[2023/09/01\]
-----
-
-Fix 1.3y regression which broke `selfGreek` option due to internal
-renamings. Thanks to Stephan Korell for report.
-
-1.3y \[2022/11/04\]
-----
-
-(the 1.3x had an annoying documentation bug, and had already
-been pushed to CTAN, hence the version increase to 1.3y)
-
-* mathastext now requires the `\expanded` primitive (which is
- available with all major engines since TeXLive 2019).
-
-* Revisit parts of the documentation (mainly
- the Examples, and the section on Greek letters) and shuffle
- the other parts to surely improve things. Mention
- the [mathfont](https://ctan.org/pkg/mathfont)
- and [frenchmath](https://ctan.org/pkg/frenchmath) packages.
-
-* Add the `ncccomma` option which loads the
- [ncccomma](https://ctan.org/pkg/ncccomma)
- package to allow the comma as decimal separator.
-
-* Add the `binarysemicolon` option to let the semi-colon
- be of type `\mathbin`, not `\mathpunct`.
-
-* Add the `frenchmath*` option which does all three of
- `frenchmath`, `ncccomma` and `binarysemicolon`.
-
-* Under the `LGRgreek` and `LGRgreeks` options only:
-
- - make available upright and italic Greek letters in math mode
- via `\alphaup`, `\alphait`, ... control sequences, in
- addition to those not using such postfixed-names.
-
- - add `\mathgreekup` and `\mathgreekit` math alphabets.
-
- - add `\MTgreekupdefault` and `\MTgreekitdefault`. The former
- replaces `\updefault` which was used in some places and since
- LaTeX 2020-02-02 caused systematic Font Warnings about the
- substitution of `up` by `n`.
-
- These new features required an extensive internal refactoring
- which is expected to not induce changes to most existing
- documents. But it may induce changes to those using some
- unusual configuration in the preamble, as made possible via the
- package macros; this can apply only to documents authored by
- those few people who actually read the documentation. For full
- details make sure to read the PDF documentation about this
- change.
-
-* Fix "`\Digamma` under `LGRgreek` option uses the shape for
- lowercase not uppercase Greek".
-
-* Fix some incongruities in log messages related to Greek
- letters and emitted during math version creation in the
- preamble.
-
diff --git a/macros/latex/contrib/mathastext/mathastext.dtx b/macros/latex/contrib/mathastext/mathastext.dtx
index d8c464a117..7857f9b70a 100644
--- a/macros/latex/contrib/mathastext/mathastext.dtx
+++ b/macros/latex/contrib/mathastext/mathastext.dtx
@@ -2,8 +2,8 @@
% N.B.: this dtx file does NOT use \DocInput, it only uses docstrip.
% The LaTeX source of the documentation is NOT prefixed with %'s.
%<*dtx>
-\def\dtxtimestamp {Time-stamp: <29-12-2023 at 10:54:52 CET>}
-\def\docdate{2023/12/29}
+\def\dtxtimestamp {Time-stamp: <26-07-2024 at 11:21:35 CEST>}
+\def\docdate{2024/07/27}
% To extract run etex on this file, then to build documentation run
% latexmk on mathastext.tex then dvipdfmx on the dvi.
% For more information see http://jf.burnol.free.fr/v13/INSTALL.txt
@@ -11,8 +11,8 @@
% due to usage of (<A7>) as an active character.
%</dtx>
%<*drv>
-\def\MSTpkgdate {2023/12/29}
-\def\MSTpkgversion {1.3zb}
+\def\MSTpkgdate {2024/07/27}
+\def\MSTpkgversion {1.4b}
%</drv>
%<*dtx>
\iffalse % meta-comment
@@ -28,13 +28,13 @@
+-------------------------------------------+
This Work may be distributed and/or modified under the conditions
-of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt)
+of the [LPPL 1.3c](https://www.latex-project.org/lppl/lppl-1-3c.txt)
The Author of this Work is Jean-Francois Burnol (`jfbu at free dot fr`)
-Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
+Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol
- Source: mathastext.dtx 1.3zb 2023/12/29
+ Source: mathastext.dtx 1.4b 2024/07/27
%</readme>
%<*dtx>
@@ -44,10 +44,10 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
%%----------------------------------------------------------------
%% Package: mathastext
%% Info: Use the text font in math mode (JFB)
-%% Version: 1.3zb 2023/12/29
+%% Version: 1.4b 2024/07/27
%% License: LPPL 1.3c (http://www.latex-project.org/lppl/lppl-1-3c.txt)
-%% Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
-%% <jfbu at free dot fr>
+%% Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol
+%% <jfbu at free dot fr>
%% Examples of use of mathastext:
%% http://jf.burnol.free.fr/mathastext.html
%% http://jf.burnol.free.fr/showcase.html
@@ -95,19 +95,11 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
\begingroup
\input docstrip.tex
\askforoverwritefalse
-\def\testfilepreamble{\string\def\string\testfileincipit{Test file
- to accompany \string\texttt{mathastext}^^J%
- version \string\texttt{\MSTpkgversion} of \string\texttt{\MSTpkgdate}}}
\generate{\nopreamble\nopostamble
\file{README.md}{\from{mathastext.dtx}{readme}}
\file{ChangeLog.md}{\from{mathastext.dtx}{changelog}}
\usepostamble\defaultpostamble
\file{mathastext.tex}{\from{mathastext.dtx}{drv}}
- \usepreamble\testfilepreamble
- \file{mathastexttestmathversions.tex}{\from{mathastext.dtx}{mathversions}}
- \file{mathastexttestunicodemacos.tex}{\from{mathastext.dtx}{macos}}
- \file{mathastexttestunicodelinux.tex}{\from{mathastext.dtx}{linux}}
- \file{mathastexttestalphabets.tex}{\from{mathastext.dtx}{alphabets}}
\usepreamble\defaultpreamble
\file{mathastext.sty}{\from{mathastext.dtx}{package}}%
}
@@ -120,7 +112,8 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol
% no file extractions if latex compilation was on mathastext.tex
\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi
\begingroup\catcode1 0 \catcode`\\ 12
-% this is to fool TeX's recognition of \if/\else/\fi like tokens in test files
+% This is to fool TeX's recognition of \if/\else/\fi like tokens in test files,
+% but on 2024/07/14 I removed from the dtx four previously included such filss.
^^Aiffalse
%</dtx>
%<*readme>
@@ -200,6 +193,98 @@ MATHASTEXT CHANGE LOG
%</changelog>
%<*readme|changelog>
+1.4b \[2024/07/27\]
+----
+
+* Fix a regression at `1.4` regarding option `nodigits`.
+
+* New option: `noletters`. I am in old age now so I can provide an option
+ completely antithetical to my life work.
+
+* Option `everymath` which is destined to be removed at next major
+ release warns user about it. As major releases tend to happen once
+ per decade I think the constant nagging will become insufferable
+ and you will adapt to the `1.4` changes rather than persisting into
+ using this option.
+
+1.4a \[2024/07/20\]
+----
+
+* There was a documentation glitch in 1.4 and also a problem with the
+ `\MTprimeskip` feature being lost under the emergency fall-back
+ `everymath` option.
+
+1.4 \[2024/07/20\]
+---
+
+* Since 1.2 of 2012/12/20, mathastext has used mathematically active
+ characters to propose certain advanced functionalities. For reasons half
+ lost in the mists of time but whose main one was surely to keep the
+ meaning of the active shape of characters unchanged outside of math mode,
+ this mathematical activation, and (in most cases) the definitions of what
+ active characters do, were done again at *each* entrance into math mode.
+ At this 1.4 release, mathastext does not inject *any* code whatsoever into
+ the `\everymath` and `\everydisplay` toks registers anymore (except for
+ one font-related hack needed under LuaLaTeX, see below). Your documents
+ will compile a tiny bit faster.
+
+* In (unsual) documents where users play with catcodes and mathcodes it is
+ impossible to keep exact backward compatibility, because documented user
+ commands which acted formerly a toggles with delayed action now will enact
+ changes immediately if in the document body. In practice consequences are
+ expected to be few, because catcode active characters are (as was already
+ the case with earlier releases) hacked only when they are Babel shorthands
+ and they are then modified in a way altering only their action in math
+ mode. The precise description of what mathastext does when mathematically
+ activating (or not) a character, depending on circumstances, is to be
+ found among small-print comments in the section "Extended scope of the
+ math alphabets commands". See also the documentation of the
+ `\MTmathactiveletters` command for some specifics regarding ascii letters.
+
+* New option: `everymath`. It instructs mathastext to revert (partially)
+ to its legacy code which uses `\everymath/\everydisplay`. This reversal
+ is partial, the handling of ascii letters not being included into it. The
+ `everymath` option is there only to try as a quick fix in case transition
+ to this release causes a major problem in a user document and time is
+ lacking to investigate. Please report to the author such issues. Option
+ `everymath` is destined to be removed at next major release.
+
+* New option: `activedigits`. Enjoy.
+
+* It is now easier to hook into the mathastext architecture for
+ mathematically activated ascii letters. See the new section "Hacking
+ letters (and even digits) for special tasks".
+
+* Bugfix: do not override special behavior of the math mode dot in
+ babel-spanish.
+
+* Bugfix: A desperate hack related to LuaLaTeX font matters and dating
+ back to 1.3o 2016/05/03 had been for some years in dire need of an update
+ regarding fonts using `Renderer=HarfBuzz`. This is done now. Thanks to
+ tex.sx `user691586` for report. This is currently the sole remaining
+ usage of `\everymath/\everydisplay`.
+
+* Bugfix: an optional feature related to `\{` and `\}` was broken since an
+ upstream LaTeX change at its 2020-02-02 release.
+
+* With option symbolmisc, those math symbol macros formerly defined via
+ `\DeclareRobustCommand` are now declared via `\protected\def`.
+
+* Removal of legacy branches previously kept to support LaTeX earlier than
+ 2020-02-02.
+
+* Removal of support for EU1 and EU2 font encodings.
+
+* Option `noasterisk` deprecated at 1.2d 2013/01/02 has (finally) been removed.
+
+* Four test files previously included and auto-extracted from the
+ distributed dtx have been dropped. One of them is still available
+ on the package homepage.
+
+* Some parts of the documentation have been massively re-ordered and even to some
+ extent improved. But there may be some occasions where obsolete statements will
+ be found having the legacy `\everymath/\everydisplay` situation as background.
+
1.3zb \[2023/12/29\]
-----
@@ -251,6 +336,8 @@ MATHASTEXT CHANGE LOG
* Fix long-standing hyperlink problems in the documentation:
blue color words should now all be functioning hyperlinks.
+%</readme|changelog>
+%<*changelog>
1.3z \[2023/09/01\]
----
@@ -311,8 +398,6 @@ been pushed to CTAN, hence the version increase to 1.3y)
letters and emitted during math version creation in the
preamble.
-%</readme|changelog>
-%<*changelog>
1.3w \[2019/11/16\]
----
@@ -358,7 +443,7 @@ been pushed to CTAN, hence the version increase to 1.3y)
to some other (robust) math alphabet macros, but were not
robust in the strict sense. This does cause some issues for
moving arguments in the context of multiple math versions,
- hence it was a bug. The special behaviour of the math
+ hence it was a bug. The special behavior of the math
alphabet commands (they redefine themselves and other macros
on first use) makes is somewhat problematic for mathastext
to keep them updated across math versions and at the same
@@ -620,16 +705,14 @@ been pushed to CTAN, hence the version increase to 1.3y)
redefined as math symbols and could not be used as delimiters.
-1.3d \[2015/02/26\]
+1.3d \[2014/05/23\]
----
-* the documentation mentions the improved compatibility of mathastext
+* A 2015/02/26 edit to the documentation mentions the
+ improved compatibility of mathastext
with the latest (3.34) beamer release: no more need for
`\usefonttheme{professionalfonts}`.
-1.3d \[2014/05/23\]
-----
-
* new commands `\MTstandardgreek` and `\MTcustomgreek`.
* The Greek letters, in case of use of one of the package related
@@ -760,6 +843,8 @@ use of mathematically active characters in versions 1.2 and 1.2b.
mechanism of letting non-letter symbols obey the math alphabet
commands.
+* the `noasterisk` option is deprecated and made a no-op.
+
* documentation extended and improved.
1.2c \[2012/12/31\]
@@ -904,6 +989,11 @@ use of mathematically active characters in versions 1.2 and 1.2b.
complete manner to adapt the math configuration to fonts
provided with no math support.
+1.13d
+----
+
+* new macros `\MTstandardgreek` and `\MTcustomgreek`
+
1.13b
----
@@ -972,502 +1062,6 @@ use of mathematically active characters in versions 1.2 and 1.2b.
%%% mode: latex
%%% End:
%</drv>
-%<*mathversions>
-%% This file `mathastexttestversions.tex' is for testing the enhanced
-%% concept of math versions provided by the package `mathastext'.
-%%
-%% See `mathastext.dtx' for the copyright and conditions of distribution or
-%% modification.
-%%
-\documentclass{article}
-\usepackage[T1]{fontenc}
-\usepackage{newcent}
-\usepackage[subdued]{mathastext}
-\Mathastext[newcent]
-\renewcommand\familydefault\ttdefault
-\Mathastext[courier]
-\renewcommand\familydefault\sfdefault
-\Mathastext[avantgarde]
-\renewcommand\familydefault\rmdefault
-\begin{document}
-\testfileincipit
-
-text in NewCentury and $math\ as\ in\ default$,%
-\MTversion{courier} text in Courier and $math\ in\ Courier$,%
-\MTversion{avantgarde} text in AvantGarde and $math\ in\ AvantGarde$,%
-\MTversion[newcent]{courier} text in NewCentury and $math\ in\
-Courier$,\MTversion{bold} text in bold NewCentury and $math\ as\ in\
-bold\ default$,\MTversion[courier]{avantgarde} text in Courier and
-$math\ in\ AvantGarde$.
-\end{document}
-%</mathversions>
-%<*macos>
-%% This file `mathastexttestunicodemacos.tex' is for testing the use
-%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX.
-%%
-%% Mac OS X specific fonts are used (initially tested on 10.8.2).
-%%
-%% See `mathastext.dtx' for the copyright and conditions of distribution or
-%% modification.
-%%
-\documentclass{article}
-\usepackage[hscale=0.85]{geometry}
-\usepackage{multicol}
-\usepackage[no-math]{fontspec}
-\usepackage{lmodern}
-\usepackage{metalogo}
-\usepackage{iftex}
-\ifXeTeX
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \XeLaTeX)}
-\else
-\ifLuaTeX
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \LuaLaTeX)}
-\fi\fi
-\usepackage[subdued,italic,asterisk]{mathastext}
-\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler]
-\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter]
-\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum]
-\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot]
-\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic]
-\MTDeclareVersion{Times}{T1}{ptm}{m}{n}
-\begin{document}
-\MTversion{normal}
-\testfileincipit
-
-This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and
-\emph{subdued} options. The base document fonts are the Latin Modern ones (in
-OpenType format). The other OpenType fonts were chosen from those available on
-a Mac OS machine. We also used the Times font in traditional \TeX\ font T1
-encoding, to demonstrate the removal since release \texttt{1.3u} of a former
-limitation that all math versions had to share the same font encoding, else
-some characters such as the dotless \texttt{i} ($\imath$), or the minus sign
-could well vanish from the output in the non-normal math versions.
-
-Furthermore we test (last line of each block, on the left) if the non-letter
-characters obey the math alphabet \verb|\mathbf|. In the normal and bold math
-versions, this feature is de-activated, as option \emph{subdued} was used; and
-if activated we should then use in these math versions the package
-\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original
-one, which will use encoding \verb|OT1| in the normal and bold versions, as we
-loaded \verb|fontspec| with its option \emph{no-math}.
-
-Some among the fonts tested have no bold variant or no italic variant.
-
-Note (tested 2013/09/03): for some reason the \verb|Color| specifications in the
-\verb|\setmainfont| commands work only
-with \XeLaTeX{}, not with \LuaLaTeX{}; a few months back I had not noticed
-such a difference between the two engines.
-
-Update (tested 2016/01/15 with reasonably up-to-date TL2015): \verb|Color|
-spec in use of \verb|\setmainfont| command now functional again with
-\LuaLaTeX.
-
-Note (tested 2019/08/11, reasonably up-to-date TL2019): spacing with the Didot
-font differs widely between \XeLaTeX\ and \LuaLaTeX{} (perhaps related to
-italic corrections, see the package documentation), and also it seems
-\LuaLaTeX{} will not find (from our generic usage of the \verb|fontspec|
-interface, at least) bold variants of the Hoefler Text and American Typewriter
-fonts, contrarily to \XeLaTeX. Also, the \emph{italic} option remains
-seemingly without effect with \LuaLaTeX{} in the case of the Hoefler Text font
-(see the package source code comments on some problems with the two ``modes''
-for text fonts under \LuaLaTeX, which may be related with this specific issue
-here).
-
-Update (tested 2022/10/29, with 1.3x and up-to-date TL2022): it appears that
-most, perhaps even all, of the remarks in the preceding note are now obsolete
-as I do not see obvious differences between outputs from \XeLaTeX{} versus
-\LuaLaTeX{} but I did not seriously compare, only quickly done.
-
-\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}%
- \def\tmpb{normal}\def\tmpc{bold}%
- \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx
- \MTexplicitbracesobeymathxx\fi\fi
-\begin{multicols}{2}
-\hbox to\columnwidth{\hbox to\columnwidth{\hfil
- $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}}
- \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ }
- \centerline{ $0123456789$ }
- \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ }
- \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ }
-\columnbreak
- \centerline{ abcdefghijklmnopqrstuvwxyz }
- \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ }
- \centerline{ 0123456789 }
- \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
- \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
-\end{multicols}}
-\begin{multicols}{2}
- \centerline{\textbf{math mode}}
-\columnbreak
- \centerline{ \textbf{text} }
-\end{multicols}
-\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum}
-\TEST{Hoefler}\TEST{Typewriter}\TEST{bold}\TEST{Times}
-\end{document}
-%</macos>
-%<*linux>
-%% This file `mathastexttestunicodelinux.tex' is for testing the use
-%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX.
-%%
-%% Fonts which were available on a Linux machine are used. Beware that
-%% compilation with LuaLaTeX will abort with errors if specified fonts do not
-%% exist on your system.
-%%
-%% See `mathastext.dtx' for the copyright and conditions of distribution or
-%% modification.
-%%
-\documentclass{article}
-\usepackage[hscale=0.8]{geometry}
-\usepackage{multicol}
-\usepackage[no-math]{fontspec}
-\usepackage{lmodern}
-\usepackage{metalogo}
-\usepackage{iftex}
-\ifXeTeX
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \XeLaTeX)}
-\else
-\ifLuaTeX
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \LuaLaTeX)}
-\fi\fi
-\usepackage[subdued,italic,asterisk]{mathastext}
-\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana]
-\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial]
-\setmainfont[Color=00C000]{DejaVu Serif} \Mathastext[DejaVu]
-\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale]
-%% commented out as these fonts do not exist anymore on the Linux box
-%% I have access to (test last done 2016/01/15)
-%%\setmainfont[Color=C000C0]{URW Chancery L} \Mathastext[Chancery]
-%%\setmainfont[Color=800080]{URW Palladio L} \Mathastext[Palladio]
-\setmainfont[Color=808000]{Liberation Serif} \Mathastext[Liberation]
-\MTDeclareVersion{Times}{T1}{ptm}{m}{n}
-\begin{document}
-\MTversion{normal}
-\testfileincipit
-
-This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and
-\emph{subdued} options. The base document fonts are the Latin Modern ones (in
-OpenType format). The other OpenType fonts were chosen from those available on
-a Linux machine. We also used the Times font in traditional \TeX\ font T1
-encoding, to demonstrate the removal since release \texttt{1.3u} of a former
-limitation that all math versions had to share the same font encoding, else
-some characters such as the dotless \texttt{i} ($\imath$), or the minus sign
-could well vanish from the output in the non-normal math versions.
-
-Furthermore we test (last line of each block, on the left) if the non-letter
-characters obey the math alphabet \verb|\mathbf|. In the normal and bold math
-versions, this feature is de-activated, as option \emph{subdued} was used; and
-if activated we should then use in these math versions the package
-\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original
-one, which will use encoding \verb|OT1| in the normal and bold versions, as we
-loaded \verb|fontspec| with its option \emph{no-math}.
-
-Some among the fonts tested have no bold variant or no italic variant.
-
-Note: the two unicode engines \XeLaTeX\ and \LuaLaTeX\ give likely not fully
-identical results particularly for the math mode. At least this is what I
-observed regularly over the years with the variant of this file prepared for
-fonts available on Mac OS, which is my main system where I develop
-|\mathastext|. Lastly for example (TL2019, august 2019), \LuaLaTeX\ could not
-find the bold variant of some system font, but \XeLaTeX\ did. And the spacing
-for the letters of the Didot font was vastly different between the two
-engines.
-
-\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}%
- \def\tmpb{normal}\def\tmpc{bold}%
- \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx
- \MTexplicitbracesobeymathxx\fi\fi
-\begin{multicols}{2}
-\hbox to\columnwidth{\hbox to\columnwidth{\hfil
- $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}}
- \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ }
- \centerline{ $0123456789$ }
- \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ }
- \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ }
-\columnbreak
- \centerline{ abcdefghijklmnopqrstuvwxyz }
- \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ }
- \centerline{ 0123456789}
- \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
- \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
-\end{multicols}}
-\begin{multicols}{2}
- \centerline{\textbf{math mode}}
-\columnbreak
- \centerline{ \textbf{text} }
-\end{multicols}
-\TEST{DejaVu}
-\TEST{Verdana}
-\TEST{Andale}
-%%\TEST{Palladio}
-\TEST{Arial}
-%%\TEST{Chancery}
-\TEST{Liberation}
-\TEST{bold}\TEST{normal}\TEST{Times}
-\end{document}
-%</linux>
-%<*alphabets>
-%% This file `mathastexttestalphabets.tex' is for testing the extended
-%% scope of the math alphabet commands with package `mathastext', via
-%% the package command \MTnonlettersobeymathxx.
-%%
-%% Compile either with latex, pdflatex, lualatex (pdf output) or xelatex.
-%%
-%% See `mathastext.dtx' for the copyright and conditions of distribution or
-%% modification.
-%%
-\documentclass{article}
-\usepackage[hscale=0.66, vscale=0.72]{geometry}
-\usepackage{amsmath}
-\usepackage{mathtools}\mathtoolsset{centercolon}
-%% WARNING THIS IS INCOMPATIBLE WITH BABEL+FRENCHB
-%% BUT WITH MATHASTEXT LOADED THIS IS CORRECTED
-%% *IF* \MTnonlettersobeymathxx IS MADE USE OF.
-\usepackage{iftex}
-\ifXeTeX
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \XeLaTeX)}
-\usepackage[no-math]{fontspec}
-\setmainfont[ExternalLocation,
- Mapping=tex-text,
- BoldFont=texgyretermes-bold,
- ItalicFont=texgyretermes-italic,
- BoldItalicFont=texgyretermes-bolditalic]{texgyretermes-regular}
-\setmonofont[ExternalLocation,
- Mapping=tex-text]{texgyrecursor-regular}
-\setsansfont[ExternalLocation,
- Mapping=tex-text]{texgyreheros-regular}
-\else
-\ifLuaTeX % for pdf output
-\expandafter\def\expandafter\testfileincipit\expandafter
- {\testfileincipit\ (compiled with \LuaLaTeX)}
-\usepackage[no-math]{fontspec}
-\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
-\setmonofont[Ligatures=TeX]{TeX Gyre Cursor}
-\setsansfont[Ligatures=TeX]{TeX Gyre Heros}
-\else
-\usepackage[utf8]{inputenc}
-\usepackage[T1]{fontenc}
-\usepackage{tgtermes}
-\usepackage{tgcursor}
-\usepackage{tgheros}
-\fi\fi
-\usepackage{metalogo} % must be loaded /after/ [no-math]fontspec
-\usepackage[french]{babel}
-\usepackage[italic,asterisk]{mathastext}
-\MTlettershape{n}\Mathastext[upright]
-\MTnonlettersobeymathxx
-\MTexplicitbracesobeymathxx
-\delimitershortfall-1pt
-\usepackage{color}
-\begin{document}
-\testfileincipit
-
-\begin{center}
- \bfseries Two features of \texttt{mathastext}:\\
-extended scope of the math alphabets and added italic corrections\par
-\end{center}
-
-The package makes
-${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$,
-the asterisk $*$, and $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$ obey the
-math alphabet commands (this is the maximal list, some characters may have been
-excluded by the corresponding package options). For the characters listed first
-the mechanism involves a `mathematical activation'.
-
-As this process may create incompatibilities, it will be put into action
-for
-${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}$
-only if the user makes use of the package command
-\verb|\MTnonlettersobeymathxx| (and the braces necessitate
-\verb|\MTexplicitbracesobeymathxx|).
-
-It could be that one such character has been made `active' in the entire
-document by some other package, typically a language definition file for the
-\verb|babel| system. Here for example we have used \verb|babel| with the
-\verb|french| option, which makes the high punctuation characters !?:; active
-throughout the document (extra spacing is put in front of the character when
-used in text; no change in math but perhaps for other languages and characters
-this could happen, it is up to the language definition file to decide).
-
-When \verb|mathastext| detects that a character it wants to `mathematically
-activate' is already `active', it does not go further except if it seems that
-the activation was done by Babel. If the activation was done by Babel, then
-\verb|mathastext| replaces the expansion of the active character in math mode by
-what is necessary to achieve its goal. It does not additionally mathematically
-activate the character; rather it makes sure that the character is \emph{not}
-mathematically active. In the present document the colon was made mathematically
-active by \verb|mathtools| but this was already canceled in the preamble by
-\verb|mathastext| as it was loaded later. And it is better so, because the
-combination \verb|babel| (with option \verb|frenchb|) +\verb|mathtools| (with
-\verb|centercolon|) makes \verb|$:$| create an infinite loop!
-
-But even if someone had mathematically activated the colon after the preamble,
-or after the loading of \verb|mathastext|, this would be canceled again
-automatically for each inline or displayed mathematical formula (if the user
-does \verb|\MTnonlettersobeymathxx|).
-
-The conclusion with \verb|\MTnonlettersobeymathxx| is: if some package has tried
-to make the character mathematically active, this will be overruled by
-\verb|mathastext|; if some package has made the character globally active, then
-the package wins except if it is Babel, as \verb|mathastext| may in the latter
-case safely modify the action in math mode (paying attention to the fact that
-the character should be usable in \verb|\label| and \verb|\ref| in and outside
-of math mode).
-
-The displayed equations next illustrate the extended scope of the math alphabets
-which now apply to $=$, $-$, $($, $)$, $[$, $]$ (but not to the large delimiters
-of course). Furthermore, for testing purposes the equations were labeled using
-such characters, for example the last one has label \verb|eq=7|, to check that
-the mathematical activation of $=$ does not cause problems with
-\verb|\label/\ref|.
-
-\def\testformula{\quad\Biggl\lbrace\biggl(\left(\left[[\sin(a) + \cos(b) - \log(c) =
-\sec(d)]\right]\right)\biggr)\Biggr\rbrace}
-\begin{equation}\testformula\label{eq:1}\end{equation}
-\begin{equation}\mathnormalbold{mathnormalbold:\testformula}\label{eq;2}\end{equation}
-\begin{equation}\mathrm{mathrm:\testformula}\label{eq?3}\end{equation}
-\begin{equation}\mathbf{mathbf:\testformula}\label{eq!4}\end{equation}
-\begin{equation}\mathit{mathit:\testformula}\label{eq(5}\end{equation}
-\begin{equation}\mathtt{mathtt:\testformula}\label{eq)6}\end{equation}
-\begin{equation}\mathsf{mathsf:\testformula}\label{eq=7}\end{equation}
-
-Equations above are numbered \ref{eq:1}, \ref{eq;2}, \ref{eq?3}, \ref{eq!4}, and
-$\ref{eq(5}$, $\ref{eq)6}$, and $\ref{eq=7}$.
-
-\def\testline#1{$#1$&$\mathnormalbold{#1}$&$\mathrm{#1}$&$\mathbf{#1}$&$\mathit{#1}$&$\mathtt{#1}$&$\mathsf{#1}$}
-
-\centerline{\begin{tabular}{ccccccc}
-\testline{a!b}\\
-\testline{a?b}\\
-\testline{a,b}\\
-\testline{a;b}\\
-\testline{a:b}\\
-\testline{a:=b}\\
-\testline{a\vcentcolon= b}\\
-\testline{a\colon b}\\
-\testline{a.b}\\
-\testline{a-b}\\
-\testline{a+b}\\
-\testline{a=b}\\
-\testline{a<b}\\
-\testline{a>b}\\
-\testline{<x,y>}\\
-\testline{\mathopen{<} x,y\mathclose{>}}\\
-\testline{\left< x,y\right>}\\
-\testline{a/b}\\
-\testline{a\backslash b}\\
-\testline{a\setminus b}\\
-\testline{a|b}\\
-\testline{a\mid b}\\
-\testline{(a,b)}\\
-\testline{[a,b]}\\
-\testline{\{a,b\}}
-\end{tabular}}
-
-The question mark has been made active by \verb|babel+frenchb|.
-\verb|mathastext| has imposed in math mode its ways (now \verb|$\mathbf{???}$|
-gives $\mathbf{???}$). As the extra spacing is added by \verb|frenchb| only in
-text, we had to use the math alphabet to check that indeed \verb|mathastext|
-overruled Babel.
-
-To double-check we will now make \string? mathematically active:
-\verb|\mathcode`?="8000|\mathcode`?="8000. This is a sure cause for disaster
-normally with Babel (don't do this at home without \verb|mathastext|!). But here
-with \verb|$?$| no bad surprise (infinite loop!) awaits us: just $?$.
-
-Let's take some other character, for example the opening parenthesis, and make
-it catcode active:
-\verb|\catcode`(=\active \def ({X}|.
-Let's try the input
-\verb|( and $($|.
-\begingroup
-\catcode`(=\active \gdef ({X}
-This gives ( and $($. We see that \verb|mathastext| does not attempt to modify
-the definition of the active character, as this activation was not done via the
-\verb|babel| services. \catcode`\(=12 \mathcode`(="8000 We now revert the
-parenthesis to catcode other (but maintain \verb|\def ({X}| as definition of its
-active version), and then make it mathematically active using the command
-\verb|\mathcode`(="8000|. If we try \verb|$((($| we see that the parenthesis is
-not converted into an $X$: $((($. The mathematically active character was
-overruled by \verb|mathastext|.
-
-Issuing \verb|\MTnonlettersdonotobeymathxx|\MTnonlettersdonotobeymathxx\ we do
-get the $X$'s from the input \verb|$((($|: $((($
-\endgroup
-This shows that \verb|mathastext| now does not modify in math mode the
-non-letter \verb|(|.
-
-\MTversion{upright}\MTnonlettersobeymathxx
-We defined in the preamble of the document a \verb|mathastext|-enhanced
-math version (named \verb|upright|) having the Latin letters upright in
-math mode. Let's switch to
-it: \newline
-\hbox to\linewidth{\hss\verb|\MTversion{upright}|\hss}
-
-With a font which is neither italic nor slanted, \verb|mathastext| automatically
-inserts italic corrections for better positioning of the subscript:
-\verb|$f_i^i$| gives
-$f_i^i$.
-After \verb|\MTnoicinmath| which turns off this feature\MTnoicinmath{}, the same
-input gives $f_i^i$, which is different.
-\footnote{last time I tried, this only worked with PDF\LaTeX{}, not with
- \LuaLaTeX{} or \XeTeX{}.}
-
-Again with italic corrections on (\verb|\MTicinmath|)\MTicinmath{}
-\verb|$f_{abc}^{def}$| gives $f_{abc}^{def}$, and here is another one:
-$f^{f_{abc}^{def}}_u$. Without italic corrections\MTnoicinmath: $f_{abc}^{def}$,
-and respectively $f^{f_{abc}^{def}}_u$.
-
-\MTicinmath
-
-\verb|mathastext| does not add these italic corrections inside arguments of
-math alphabets, as this would prevent the formation of ligatures:
-$\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$
-(no ligature in teletype) and $\mathsf{ff}$.\footnote{\llap{\textcolor{magenta}{\bfseries Changed!\kern3em}}Prior to 1.3i,
- italic corrections were added to the \string\mathnormal\ arguments.}
-
-\centerline{\begin{tabular}{ccccccc}
-\testline{a!b}\\
-\testline{a?b}\\
-\testline{a,b}\\
-\testline{a;b}\\
-\testline{a:b}\\
-\testline{a:=b}\\
-\testline{a\vcentcolon= b}\\
-\testline{a\colon b}\\
-\testline{a.b}\\
-\testline{a-b}\\
-\testline{a+b}\\
-\testline{a=b}\\
-\testline{a<b}\\
-\testline{a>b}\\
-\testline{<x,y>}\\
-\testline{\mathopen{<} x,y\mathclose{>}}\\
-\testline{\left< x,y\right>}\\
-\testline{a/b}\\
-\testline{a\backslash b}\\
-\testline{a\setminus b}\\
-\testline{a|b}\\
-\testline{a\mid b}\\
-\testline{(a,b)}\\
-\testline{[a,b]}\\
-\testline{\{a,b\}}
-\end{tabular}}
-
-\end{document}
-%</alphabets>
%<*dtx>
^^Afi^^Aendgroup % end of big \iffalse block including generated files
% Removal of the *sfixed found in tex/latex/mlmodern/omxmlmex.fd
@@ -1523,7 +1117,7 @@ $\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$
\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}}
\def\cmd@to@cs#1#2{\char\number`#2\relax}
% Here I am loading doc=v2 but formerly I was using ltxdoc via scrdoc
-% which I dropped at release 1.4l (2022-05-29) and without much
+% which I dropped at (etoc) release 1.4l (2022-05-29) and without much
% thinking I had kept this.
\DeclareRobustCommand\cs[1]{\texttt{\bslash#1}}
% As I may have the * active, or macro names with _ or ^, I should
@@ -1552,12 +1146,19 @@ $\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$
% is set by geometry package and a4paper option from xint.tex file. So it
% seems I only need the hologo loading:
\usepackage{hologo}
-\DeclareRobustCommand*{\eTeX}{\hologo{eTeX}}%
-\DeclareRobustCommand*{\pdfLaTeX}{\hologo{pdfLaTeX}}%
-\DeclareRobustCommand*{\LuaTeX}{\hologo{LuaTeX}}%
-\DeclareRobustCommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}%
-\DeclareRobustCommand*{\XeTeX}{\hologo{XeTeX}}%
-\DeclareRobustCommand*{\XeLaTeX}{\hologo{XeLaTeX}}%
+% 1.4 fix to some extra line spacing obviously caused by usage of the
+% \hologo macro.
+% I opened https://github.com/ho-tex/hologo/issues/9
+% after testing, actually only XeTeX and XeLaTeX are problematic
+% update: as per @u-fischer the problem goes away if graphicx package
+% is loaded, but we don't use it in this document...
+\def\msthologo#1{\smash{\hologo{#1}}}
+\DeclareRobustCommand*{\eTeX}{\msthologo{eTeX}}%
+\DeclareRobustCommand*{\pdfLaTeX}{\msthologo{pdfLaTeX}}%
+\DeclareRobustCommand*{\LuaTeX}{\msthologo{LuaTeX}}%
+\DeclareRobustCommand*{\LuaLaTeX}{\msthologo{LuaLaTeX}}%
+\DeclareRobustCommand*{\XeTeX}{\msthologo{XeTeX}}%
+\DeclareRobustCommand*{\XeLaTeX}{\msthologo{XeLaTeX}}%
%
\makeatother
%%% end of ltxdoc+srcdoc emulation from June 2022 xint.dtx,
@@ -1669,7 +1270,8 @@ pdfpagemode=UseOutlines,%
asterisk,%
defaultmathsizes,%
symbolmisc,symbolre,%
- LGRgreek+]{mathastext}
+ LGRgreek+,
+ activedigits]{mathastext}
\let\symbolbullet\bullet
\let\bullet\originalbullet
% This version will use the mlmodern font which is current
@@ -1790,15 +1392,15 @@ pdfpagemode=UseOutlines,%
\def\tt {\normalfont\ttfamily}
% mais bon, en fait je ne les utilise pas.
-% 2023/12/27 pas encore
-% \newcommand\mstrelease[1]{\hyperlink{v#1}{\texttt{#1}}}
-
% 2023/12/27
\DeclareRobustCommand\ctanpkg[1]
{\texorpdfstring{\href{https://ctan.org/pkg/#1}{#1}}{#1}}
-% bataille avec le rendu de l'entre 1.3zb du change log
-% \hyphenation{ncc-comma}
+% 2024/07/10
+% Attention que si la cible n'existe pas il n'y a AUCUN warning
+% dans le log...
+\newcommand\mstrelease[1]{\hyperlink{#1}{\texttt{#1}}}
+
\begin{document}
% \makeatletter\show\mv@normal\makeatother
% contient
@@ -1924,10 +1526,6 @@ the preamble:
\end{verbatim}
The package records which font is set up for text, at the time it is
loaded,
-%\footnote{alternatively it is possible to configure the text font after
- % loading \mst, and then the command \cs{Mathastext} will accomplish the
- % necessary changes to the font for letters, digits and a few extra ascii
- % symbols in math mode.}
and
then arranges things in order for this text font to be used in math mode as
well. So, with the preamble as above
@@ -1955,293 +1553,6 @@ The exact list of characters concerned by
As one can see, this is a very limited list! Some possibilities exist
regarding Greek letters and will be described later.
-\subsection{Miscellanea}
-
-Please note that most of this section was written many years ago (except for
-the item about math alphabets which was enriched with important background
-information and moved upfront at |1.3zb|). But it should still be valid!
-%
-\begin{description}
-
-\item[math alphabets:] Let us first recall fundamental facts of life, in the
- world of traditional PDF\TeX\ engine and \TeX\ fonts, as background for
- understanding what \mst does in this context, which will be explained next.
- People familiar with using Unicode engines and \ctanpkg{unicode-math}, please be
- aware that the semantics there of the \LaTeX\ math alphabet commands are
- \textbf{significantly} modified!
-\begin{snugshade}
-\begin{itemize}
-\item In the default \LaTeX\ set-up all five of \mathrm, \mathbf,
- \mathit, \mathsf and \mathtt tell \TeX\ to use for their arguments
- specific \texttt{OT1}-encoded fonts,
-\item if the document body uses, as will be the case probably with any
- language other than English or its variants, some other encoding such as
- \texttt{T1} for its fonts, there is no change whatsoever to the math
- configuration, indeed most font packages ignore it completely,
-\item it is thus a priori wrong to think of these commands as switching to
- some body text font, although letters within their scopes will act as in a
- text font, and in particular obey ligatures (this also applies to operator
- names defined by |amsmath|'s \cs{DeclareMathOperator} which are, with some
- extras not mentioned here, as using \mathrm),
-\item these commands are completely different in spirit from the \LaTeX\
- \cs{textrm}, \cs{textbf}, and others, which change only some font axis;
- indeed the math alphabet commands inherit from legacy Knuth's \cs{rm},
- \cs{bf}, and others which are complete font specifiers,
-\item in particular when nesting, it is the inner-most which wins,
-\item only mathematical characters (such as letters) which are declared to
- \TeX\ as being of ``variable family type'' react to being in the argument of
- a math alphabet command,
-\item lowercase Greek letters are by default in \LaTeX\ immune to math
- alphabets (so \verb|\mathrm{\pi}| induces no change in output), but the
- eleven uppercase Greek letters are of ``variable family type'' because they
- are picked in the \texttt{OT1}-encoded font also used for operator names
- (the one to which \mathrm maps), \emph{and they occupy the exact same
- slots in the \emph{\texttt{OML}}-encoding to which} \mathnormal maps! So
- in default \TeX, \verb|\mathnormal{\Gamma}| gives a slanted one. The slots
- occupied in \texttt{OML}-encoding by the lowercase Greek letters (to which
- encoding they are a priori assigned) give
- completely unrelated glyphs in the \texttt{OT1}-encoding, so it makes sense
- that the default \LaTeX\ declares them to not react to math alphabets.
- Notice though, that if \LaTeX\ had declared a \cs{mathnormalbold}, mapping
- to a bold \texttt{OML}-encoded font, it would have made sense to also have
- \cs{alpha}, \cs{beta}, etc... be of ``variable family type'',
-\item but of course then one should a priori never use |\mathbf{\pi}| for
- example, because the default \mathbf selects an \texttt{OT1}-encoded
- font, where there is no pi glyph whatsoever and in particular not at the slot of
- pi in the \texttt{OML} encoding (slot number 25)!
-\end{itemize}
-\end{snugshade}
-Please keep all the above in mind when trying to understand what \mst does
-with math alphabets. The most significant point described next naturally is that
-\mst will sync \mathnormal, \mathrm, \mathbf, \mathit, \mathsf and
-\mathtt to map to the \mst-ified body text fonts.
- \begin{itemize}
- \item \mathnormal, \mathrm, \mathbf, \mathit,
- \mathsf and \mathtt are modified to use the \mst-ified
- text fonts; this can be disabled via defaultalphabets and
- related individual options, but the package always provides
- \Mathnormal, \Mathrm, etc..., to match the \mst font
- configuration (\RLNote{changed:}{1.3za}prior to |1.3za|
- defaultalphabets and related options also caused the \mst
- alphabet commands not to be defined). Recall that there may
- arise a ``too many math alphabets'' error if too many of these
- commands are \emph{used} in the document:
- \emph{declaring} them is not by itself the cause of the error. See the
- \LaTeX\ news entry of its \texttt{2021-11-15} release for
- the counter \texttt{localmathalphabets} (with default value 2)
- which can be now be used if one hits such a difficulty.
- \item We define a new math alphabet command
- \mathnormalbold which gives direct access to
- the bold version of the \mathnormal alphabet
- (rather than using either the \cs{bm} command from
- the \ctanpkg{bm} package or the \cs{boldsymbol} command
- from the \ctanpkg{amsbsy} package). As it does not
- exist in the default \LaTeX{} math font set-up, this
- alphabet is \emph{not} subjected to the {subdued option} action.
-
-\item version \RightNote{1.2}|1.2| of \mst has extended the scope of the math
- alphabets to apply to non-alphabetical characters and to
- operator names. This respects the automatic white spaces
- added by \TeX{} around math symbols.
-\item The\RightNote{1.3i}
- extra skips around letters (see \autoref{sec:mathskips} and
- \autoref{sec:ic}) are removed in the scope of the math alphabets.
-
- \item Depending on options, further math alphabet commands
- are defined by the package: \MathEulerBold,
- \MathEuler, \MathPSymbol, and since |1.3x| under
- the LGRgreek family of options\RightNote{1.3x} also
- \mathgreekup and \mathgreekit. See
- \autoref{sec:newgreek}.
- \item \RightNote{1.3za}Addition of \mathgreekupbold and
- \mathgreekitbold under the LGRgreek family of options.
- \item With\RightNote{1.3za} the LGRgreek+ option
- which enhances Greek letters with a specific behavior when in the
- arguments of the \mathrm, \mathbf, etc..., math alphabet
- commands, this special behavior is not triggered by the \Mathrm,
- \Mathbf, et al., which are genuine unmodifed math alphabet commands. See
- \autoref{sec:newgreekplus}.
- \end{itemize}
-
-\item[the en-dash as minus sign:] very often the -
- character from the text font does not give a good
- minus sign. So by default, the package uses the
- en-dash sign \textendash{}. Use noendash to
- deactivate it. Starting with version |1.12| of the
- package this `en-dash as minus' should work in all
- encodings, including Unicode (if \ctanpkg{fontspec} has been
- loaded); see also |unicodeminus| for OpenType fonts.
-
-\item[amsmath:] \strut the behaviour of the
- \cs{DeclareMathOperator}\RightNote{1.3n} command
- of |amsmath| is modified by \mst for it to use the correct font.
- Additionally, release |1.3n| of \mst at long last also handles an extra
- operation done by |amsmath| for |'.:/-*| to be used in operator names
- without the extra math spacing.%
-%
-\footnote{To the experts: there is a long story here that \cs{newmcodes@}
- hardcodes the font, that it was not compatible with Unicode engines, that
- during some time (2013-2016) \texttt{lualatex-math} fixed that and very
- recently |amsopn.sty 2016/03/08 v2.02| also, so now \texttt{lualatex-math
- 1.6} does nothing as it is already fixed ``upstream'' in |amsopn.sty|, but
- anyhow in both cases, this still hardcoded the font, so finally \mst does
- the right thing from its point of view. See the code comments for more,
- there is an issue here with \LuaLaTeX\ not applying the curly right quote
- contrarily to \XeLaTeX.}
-%
-This customization is suppressed in subdued mode for the |normal| and |bold|
-math versions.
-
-\item[hbar:] the default \LaTeX\ definition of \hbar would in our context
- make use of the |h| of the current math font (so for us, it is also the text
- font, perhaps in italic shape), but with a bar accross the |h| from the
- original default math font for letters (usually |cmmi|). We redefine
- \cs{hbar} to use the text font macron accent (|\=|) as a mock math accent
- (this takes into account the italic option and is compatible with
- subscripts and superscripts).
-
- Since |1.12| \mst when dealing with a Unicode font sets the \cs{hbar}
- to be the character from the font having hexadecimal codepoint |U+0127|.
-
- Since |1.3u| the general 8bits font encoding is
- supported\RightNote{1.3u} (see discussion of the |mathaccents| option
- at end of this list for the shared limitations). Brief testing with
- various usual \TeX\ fonts shows that the vertical positioning of
- the bar isn't satisfying. It is planned to either add a parameter to
- adjust it or to modify altogether the mode of construction of the |\hbar|.
-
- Use nohbar to tell \mst not do provide its own |\hbar|.
-
-
-\item[dotless i and j:] by default the package redefines \cs{imath} and
- \cs{jmath} to give (in math mode) the dotless i and j (if it exists at
- all) from the text font.%
-%
-\footnote{\RightNote{1.3t}Since \texttt{1.12} it also redefined \cs{i} and
- \cs{j} for usability both in text and math modes, but this has been
- dropped at \texttt{1.3t}. Breaking change!}
-
-\item[asterisk:] versions of \mst earlier than |1.2d [2013/01/02]|
- did not do anything
- with the \cs{ast} control sequence but did pick the asterisk
- $*$ in the document text font, and this often was a rather
- silly thing as the text asterisk is generally in a raised
- position. Furthermore, the $*$ lost its status of a binary
- operator and was treated as an `ordinary' symbol. An option
- |noasterisk| turned this feature off. Starting with |1.2d|,
- the |noasterisk| option is deprecated and the new default is
- to do nothing. But when option asterisk is received by the
- package, then both \cs{ast} and $*$ are simultaneously
- modified to use (as binary operators) the text asterisk,
- slightly lowered. The amount of lowering\footnote{with the
- option \texttt{symbolmisc}, the asterisk is picked from
- the Symbol font, and the amount of lowering is
- non-customizable; however if a math alphabet command is
- used, the asterisk is then again from a text font and the
- lowering will be as specified by \cs{MTlowerast}.} is
- decided by the mandatory argument to the command
- \csb{MTlowerast}\marg{dimen}. The package initially does
- \cs{MTlowerast}|{.3\height}|. Doing \cs{MTlowerast}|{.5ex}| is
- not a good idea as it does not scale properly in the script
- and scriptscript styles. With an argument given as a
- multiple of |\height|, the asterisk will behave as expected
- in subscripts and subscripts of subscripts. But $*$ is now
- `mathematically active'\thinspace\footnote{in a hopefully
- safe way, for example {\ttfamily\$\string\label\{eq*1\}\$}
- is ok.} and |$R^*$| or |$R^\ast$| \emph{must} be input as
- |$R^{*}$| and |$R^{\ast}$|. Furthermore, they will obey the
- math alphabet commands.
-
-\item[\XeTeX{} and \LuaLaTeX{}:] regarding the en-dash and the
- dotless i and j, the package is now under the Unicode engines
- compatible not only with the ``Unicode'' \LaTeX\ font encodings
- EU1 (\XeTeX, old fontspec), EU2 (\LuaLaTeX, old fontspec), TU
- (\XeTeX\ and \LuaLaTeX, modern fontspec), but also with
- traditional 8bits-encodings declared as a |fontenc|
- option.\RightNote{1.3u}
-
-% obsolete
- % Formerly, with a Unicode engine,
- % only OT1, T1 and LY1 were supported by \mst as the 8bit encoding
- % of the document text font, regarding the minus as en-dash and
- % the dotless i and j.
-
- \item[fontspec:] one more note to users of
-\XeTeX{}/\LuaLaTeX{} with \ctanpkg{fontspec}:\newline
-\fbox{it has to be
-loaded {with the option} |no-math|},
-and \emph{before} \mst.
-
-\item[vec accent:] The default \cs{vec} accent is not
- appropriate for upright letters, so \mst
- provides a \cs{fouriervec} which takes its glyph in a
- Fourier font, and an Ersatz \cs{pmvec}
- which is reasonably good looking on upright letters
- and works with the \cs{rightarrow} glyph. Contrarily
- to version |1.0|, the default \cs{vec} is not
- overwritten with \cs{fouriervec}. And contrarily to
- version |1.1|, one now needs to pass the option
- fouriervec to have the math accent \cs{fouriervec}
- defined by the package.%
-%
-\footnote{this costs a math family, as I never came back to this to try to
- do otherwise.}
-
-\item[math accents:] if option mathaccents is used then \mst attempts to let
- the math accents |\acute|, |\grave|, etc... use the suitable glyphs from the
- text font. Prior to |1.3u| only |OT1|, |T1|, and |LY1| were supported (via
- hardcoded slots). It should now work with any 8bits font
- encoding\RightNote{1.3u} having been declared as an option to the
- \ctanpkg{fontenc} package (and of course providing the ten needed text accents which
- will mock math accents).%
- %
- \footnote{The code will raise low-level \TeX\ errors if the user attempts to
- use an 8bits font encoding whose \LaTeX\ definition file is lacking the
- suitable uses of \cs{DeclareTextAccent} or if the low level \LaTeX\ macro
- implementation of text accents changes significantly; in such cases please
- report the problem to the author, so that it can be documented in future
- releases!}
-
- The |\vec| math accent is not handled here, as it is not available in the
- usual 8bits font encodings. See the fouriervec option or the \pmvec
- command.
-
- The math accents obey the subdued option\RightNote{1.3u}
- and will change in sync with the \mst-ified text font used in
- each non subdued math version.
-
- (Very) brief testing during |1.3u| development with \XeTeX\ and \LuaTeX\ let
- the author conclude that usage with the \cs{Umathaccent} primitive of an
- OpenType accent glyph slot (which in the text font is for usage as a
- postpended combining character) gives definitely bad horizontal placements
- for both engines (each in its own way). Thus, the redefinitions of accents
- for a \mst declared math version with an OpenType font is by default
- canceled.%
-%
-\footnote{I.e., the \cs{grave} etc... control sequences will, in math versions
- with an OpenType \mst-ified font, expand to macros holding their initial
- meanings, unmodified by \mst, which was in force at the
- |\string\begin\string{document\string}|.}
-%
- Use unimathaccents to force usage of the OpenType font text
- accents glyph slots with the \cs{Umathaccent} primitive. Expert users are
- invited to check out the code and to contribute suggestions if some extras
- can improve it.
-
-\item[varying font encodings:] the very first release of \mst dealt with only
- one font; very soon thereafter it acquired the capacity to define multiple
- math versions, each one using its own text font. But, as was documented at
- this location formerly, various encoding dependent decisions were done once
- and for all during package loading.
-
- This meant in particular that the minus sign (using the text endash), the
- dotless |i| and |j|, the |\hbar|, the math accents were all set up for only
- one unique font encoding. It was thus recommended that all math versions
- share the same font encoding.
-
- The |1.3u| release has lifted this restriction.\RightNote{1.3u}
-\end{description}
-
\subsection{Examples}
\label{sec:examples}
@@ -2473,7 +1784,7 @@ versions.%
% \href{http://mirrors.ctan.org/help/Catalogue/entries/cbgreek-complete.html}{cbfonts},
% \href{http://mirrors.ctan.org/help/Catalogue/entries/txfontsb.html}{txfontsb}.
-\emph{Since |1.3x| this documentation uses globally the |mlmodern|%
+\emph{Since \mstrelease{1.3y} this documentation uses globally the |mlmodern|%
%
\footnote{Daniel Benjamin \textsc{Miller}, \emph{A blacker Type 1 version of Computer Modern, with multilingual
support}, \url{https://ctan.org/pkg/mlmodern}. I have added to the preamble
@@ -2500,7 +1811,7 @@ reasons of PDF file size.}%
\subsubsection{The \blueit{italic} option}
-In the initial version |1.0|, the Latin letters in
+In the initial version \mstrelease{1.0}, the Latin letters in
mathematical mode assumed the exact same shape as in
text mode, and this meant, generally speaking, that
they would turn up upright. Doing this gives a very
@@ -2510,15 +1821,15 @@ one of the design goals of \mst.
Nevertheless, soon after I posted the initial version
of the package to CTAN, I was overwhelmed by
-numerous\footnote{this means ``more then one.''}
+numerous\footnote{this means ``more than one.''}
questions\footnote{I thank in particular
Tariq~\textsc{Perwez} and Kevin~\textsc{Klement} for
their kind remarks (chronological order).} on how to
have the letters be in italic shape.
-The default is still, as in version |1.0|, for everything to be in
+The default is still, as in version \mstrelease{1.0}, for everything to be in
upright shape, but it suffices to pass to the package the option
-italic\RightNote{1.1} to let the Latin letters in math mode be
+italic\RightNote{\mstrelease{1.1}} to let the Latin letters in math mode be
in italic shape.%
%
\footnote{more precisely stated, the value of \cs{itdefault}
@@ -2547,7 +1858,7 @@ the \ctanpkg{moresize} package. To cancel all of this use option
\subsubsection[The subdued option]{The \blueit{subdued} option}\label{sec:subdued}
-This option was introduced in |v1.15|.\RightNote{1.15} It provides a manner to
+This option was introduced in |v1.15|.\RightNote{\mstrelease{1.15}} It provides a manner to
switch on the \mst-\emph{ification} only for limited portions of
the document, with the help of the mechanism of math versions. Without the
subdued option, the \emph{mathastextification} applies by default
@@ -2560,7 +1871,7 @@ Despite some limitations I will now partially describe, the subdued option
has its utility, as I think is illustrated enough by the examples given at the
start of this document and it works reasonably well.
-\begin{framed}
+\begin{shaded*}
\mst was not written initially in order to allow its action to
be completely canceled. It does not store (all) mathcodes nor
does it set them (all) when changing math versions; only that would
@@ -2569,7 +1880,7 @@ start of this document and it works reasonably well.
official interface to math mode, as it is almost entirely
preamble only).
- Releases |1.3t| and |1.3u| do this kind of things to maintain
+ Releases \mstrelease{1.3t} and \mstrelease{1.3u} do this kind of things to maintain
usability across multiple \mst-ified math versions of characters
which are obviously font encoding dependent such as the minus
sign as en-dash (or unicode minus), the dotless i, the |\hbar|,
@@ -2581,7 +1892,7 @@ start of this document and it works reasonably well.
mode and to multiple math versions amounts to some kind of a
kludge, added to an initial design which handled a single unique
text font.
-\end{framed}
+\end{shaded*}
To get the displayed math
(almost) as if \mst had not been loaded, one must also
@@ -2590,7 +1901,7 @@ as, for example, the colon, the dot, and the minus sign belong
in the default \LaTeX{} math mode set-up to three distinct fonts
whereas \mst will pick (even subdued) the three of them in the same
font,%
-\footnote{\RightNote{1.3t}The minus sign is now perfectly subdued,
+\footnote{\RightNote{\mstrelease{1.3t}}The minus sign is now perfectly subdued,
because its original mathcode is stored and restored; this was only
way to handle the case with Unicode engines
where the math operator font is in a classic
@@ -2604,13 +1915,13 @@ mathcodes, so to
be on the safe side one needs the basic option which limits the
mathastextification to letters and digits.%
%
-\footnote{\RightNote{1.3d}The subdued mode does extinguish
+\footnote{\RightNote{\mstrelease{1.3d}}The subdued mode does extinguish
in the normal and bold math versions the action of options selfGreek,
eulergreek, and symbolgreek (previously only LGRgreek was
subdue-able).}
-\footnote{\RightNote{1.3t}The \texttt{\string\imath} and
+\footnote{\RightNote{\mstrelease{1.3t}}The \texttt{\string\imath} and
\texttt{\string\jmath} now obey the subdued regime.}
-\footnote{\RightNote{1.3u}Also \texttt{\string\hbar}
+\footnote{\RightNote{\mstrelease{1.3u}}Also \texttt{\string\hbar}
and the math accents (see mathaccents option) obey the subdued regime.}
%
Even then, in some circumstances, this may not suffice: for example the
@@ -2644,80 +1955,192 @@ customization of Greek letters. The command \MTcustomgreek reenables the
customization done by \mst, if it was loaded with the LGRgreek or one of the
other Greek related options.
-\begin{framed}
- Release |1.3x| has added important new aspects to the handling of Greek
+\begin{shaded*}
+ Release \mstrelease{1.3y} has added important new aspects to the handling of Greek
letters via the LGRgreek option. Make sure to read the \autoref{sec:newgreek}.
-\end{framed}
+\end{shaded*}
+
+\subsection{Miscellanea}
+
+Please note that most material to be found in this section was written many
+years ago (except the two subsections on frenchmath on one hand and
+intervals on the other hand). But it should still be valid!
-\subsection{More miscellanea}
+Ultimately most information here should be moved into the
+reference sections \autoref{sec:cmd} and \autoref{sec:opt}, and only some
+generalities should be kept here.
-This may repeat information already given.
+\subsubsection{Load \mst always last}
+
+The ``large'' math symbols are not modified in any way by \mst. Only loading
+some math font packages such as \ctanpkg{fourier}, \ctanpkg{kpfonts}, \ctanpkg{mathabx}, \ctanpkg{mathdesign},
+\ctanpkg{txfonts}, \ctanpkg{newtxmath}, \ctanpkg{libertinust1math}, others\dots{} will change them. Think of loading these
+packages before \mst, else they might undo what \mst did.
+
+More generally any package (such as \ctanpkg{amsmath}) dealing with math mode should be
+loaded \emph{before} \mst.
\subsubsection{Avoid \texorpdfstring{\texttt{OT1}}{OT1} encoding}
- We specified in our minimal working example a |T1| encoding (|LY1| would
- have been ok, too) because the default |OT1| does not have the
+ The default |OT1| does not have the
{\color{joli}\DeleteShortVerb{\|}
$\mathord{<}\,\mathord{>}\,\mathord{|}$\,\{\,\}} and
{\color{joli}$\backslash$\MakeShortVerb{\|}} glyphs. If
\mst detects |OT1| as the default encoding it will leave these characters to
- their defaults from the math fonts.\footnote{the subdued option, described next,
+ their defaults from the math fonts.%
+%
+\footnote{The subdued option, described next,
acts a bit otherwise, it forces, contrarily to its usual low-key character,
the replacement of |OT1| by |T1| for the fonts ultimately used with letters
and digits in math mode.}
-\begin{framed}
+%
+\begin{shaded*}
If \mst detects the obsolete |OT1| encoding it does not do anything with
\DeleteShortVerb{\|}<, >, |, \{, and \} which (except for monospace fonts)
are not available in that encoding.\MakeShortVerb{\|}
To fully benefit from \mst it is
recommended to use some other encoding having these glyphs such as |T1| or
|LY1|.
-\end{framed}
+\end{shaded*}
\subsubsection{Derivative, minus, asterisk}
The text characters {}'{} and {}-{} are not used, and the asterisk is
-done optionally:
+done only optionally:
\begin{itemize}
\item the derivative sign ${}'$ is left to its default as the text font
- glyph {}'{} is not, as a rule, a satisfying alternative.\footnote{|v1.2| adds
+ glyph {}'{} is not, as a rule, a satisfying alternative.%
+%
+\footnote{|v1.2| adds
a customizable tiny space before ${}'$ to separate it from the previous
letter, this is really needed when using upright letters in math mode with
the CM derivative glyph.{\MTversion{upright}\sffamily\MTprimeskip{.5mu}%
Compare $f'$ with \MTprimeskip{0mu}$f'$.} }
+
\item for the minus sign \mst uses the endash character
- \textendash, if available, and not the hyphen character -.%
-%
-\footnote{see the unicodeminus option if using an OpenType font.}
-%
-\item the asterisk option is mandatory for \mst to replace the binary math
- operator $*$ (and the equivalent control sequence \cs{ast}) with a version
- which uses the text asterisk * suitably lowered\footnote{the amount of
- lowering can be customized.} (and with the correct spaces around it as
- binary operator). The reason is that after this inputs such as |$R^*$|
- or |$R^\ast$| raise errors and \emph{must} be written |$R^{*}$| or |$R^{\ast}$|.
+ \textendash, if available, and not the hyphen character -. With
+an OpenType font, \mst uses per default the EN DASH U+2013 (see unicodeminus).
+
+\item the asterisk option is required for \mst to use the text font for the
+ binary infix math operator $*$ and
+ the control sequence \cs{ast}. They will use then the text asterisk
+ * suitably lowered, and with the correct spaces around it as binary
+ operator.
+ \begin{snugshade}
+ Attention that with this option, inputs such as |$R^*$| or |$R^\ast$|
+ raise errors and \emph{must} be replaced by |$R^{*}$|, respectively
+ |$R^{\ast}$|.
+ \end{snugshade}
\end{itemize}
+\subsubsection{Large symbols and delimiters}
+
Nothing is changed to the ``large'' math symbols, except for
$\MToriginalprod$ and $\MToriginalsum$ in inline math which, like here:
$\prod\sum$, will be taken from the Symbol Font if option symbolmisc
was used.
The left and right delimiters are taken from
-the text font only for the base size: any |\big|, |\bigl|, |\bigr|,
-etc\dots reverts to the original math symbols.
+the text font only for the base size: any one of |\big|, |\bigl|, |\bigr|,
+etc\dots will trigger the use of the original math symbols.
+\subsubsection{amsmath}
+The behavior of the
+ \cs{DeclareMathOperator}\RightNote{\mstrelease{1.3n}} command
+ of |amsmath| is modified by \mst for it to use the correct font.
+ Additionally, release \mstrelease{1.3n} of \mst at long last also handles an extra
+ operation done by |amsmath| for |'.:/-*| to be used in operator names
+ without the extra math spacing.%
+%
+\footnote{To the experts: there is a long story here that \cs{newmcodes@}
+ hardcodes the font, that it was not compatible with Unicode engines, that
+ during some time (2013-2016) \texttt{lualatex-math} fixed that and very
+ recently |amsopn.sty 2016/03/08 v2.02| also, so now \texttt{lualatex-math
+ 1.6} does nothing as it is already fixed ``upstream'' in |amsopn.sty|, but
+ anyhow in both cases, this still hardcoded the font, so finally \mst does
+ the right thing from its point of view. See the code comments for more,
+ there is an issue here with \LuaLaTeX\ not applying the curly right quote
+ contrarily to \XeLaTeX.}
+%
+This customization is suppressed in subdued mode for the |normal| and |bold|
+math versions.
-\subsubsection{Load \mst always last}
+\subsubsection{hbar}
+The default \LaTeX\ definition of \hbar would in our context
+ make use of the |h| of the current math font (so for us, it is also the text
+ font, perhaps in italic shape), but with a bar accross the |h| from the
+ original default math font for letters (usually |cmmi|). We redefine
+ \cs{hbar} to use the text font macron accent (|\=|) as a mock math accent
+ (this takes into account the italic option and is compatible with
+ subscripts and superscripts).
-The ``large'' math symbols are not modified in any way by \mst. Only loading
-some math font packages such as \ctanpkg{fourier}, \ctanpkg{kpfonts}, \ctanpkg{mathabx}, \ctanpkg{mathdesign},
-\ctanpkg{txfonts}, \ctanpkg{newtxmath}, etc\dots{} will change them. Think of loading these
-packages before \mst, else they might undo what \mst did.
+ Since \mstrelease{1.12} \mst when dealing with a Unicode font sets the \cs{hbar}
+ to be the character from the font having hexadecimal codepoint |U+0127|.
-More generally any package (such as \ctanpkg{amsmath}) dealing with math mode should be
-loaded \emph{before} \mst.
+ Since \mstrelease{1.3u} the general 8bits font encoding is
+ supported\RightNote{\mstrelease{1.3u}} (see discussion of the |mathaccents| option
+ at end of this list for the shared limitations). Brief testing with
+ various usual \TeX\ fonts shows that the vertical positioning of
+ the bar isn't satisfying. It is planned to either add a parameter to
+ adjust it or to modify altogether the mode of construction of the |\hbar|.
+
+ Use nohbar to tell \mst not do provide its own |\hbar|.
+
+
+\subsubsection{Dotless i and j}
+By default the package redefines \cs{imath} and
+ \cs{jmath} to give (in math mode) the dotless i and j (if it exists at
+ all) from the text font.%
+
+ \subsubsection{fontspec}
+
+\fbox{\ctanpkg{fontspec}
+has to be
+loaded {with the option} |no-math|},
+\emph{and before} \mst.
+
+\subsubsection{vec accent}
+
+The default \cs{vec} accent is not appropriate for upright letters, so \mst
+provides under option fouriervec a math accent control sequence
+\cs{fouriervec} which takes its glyph in a Fourier font. A poorman Ersatz
+\cs{pmvec} is always available ; it is reasonably good looking on upright
+letters and works with the \cs{rightarrow} glyph.
+
+\subsubsection{math accents}
+If option mathaccents is used then \mst attempts to let
+ the math accents |\acute|, |\grave|, etc... use the suitable glyphs from the
+ text font.
+
+ The |\vec| math accent is not handled here, as it is not available in the
+ usual 8bits font encodings. See the fouriervec option or the \pmvec
+ command.
+
+ The math accents obey the subdued option\RightNote{\mstrelease{1.3u}}
+ and will change in sync with the \mst-ified text font used in
+ each non subdued math version.
+
+\begin{footnotesize}
+ (Very) brief testing during \mstrelease{1.3u} development with \XeTeX\ and \LuaTeX\ let
+ the author conclude that usage with the \cs{Umathaccent} primitive of an
+ OpenType accent glyph slot (which in the text font is for usage as a
+ postpended combining character) gives definitely bad horizontal placements
+ for both engines (each in its own way). Thus, the redefinitions of accents
+ for a \mst declared math version with an OpenType font is by default
+ canceled.%
+%
+\footnote{I.e., the \cs{grave} etc... control sequences will, in math versions
+ with an OpenType \mst-ified font, expand to macros holding their initial
+ meanings, unmodified by \mst, which was in force at the
+ |\string\begin\string{document\string}|.}
+%
+ Use unimathaccents to force usage of the OpenType font text
+ accents glyph slots with the \cs{Umathaccent} primitive. Expert users are
+ invited to check out the code and to contribute suggestions if some extras
+ can improve it.\par
+\end{footnotesize}
+
\subsubsection{Sans serif in math}
@@ -2733,8 +2156,6 @@ text.
\subsubsection{\mst with \ctanpkg{beamer}}\label{ssec:beamer}
-%\noindent\llap{\textcolor{green}{\bfseries 2015/02/26}\hspace{1em}}
-
Starting
with release |3.34| of \ctanpkg{beamer}%
%
@@ -2791,24 +2212,9 @@ Antoine~\textsc{Missier}:
\item and load \mst afterwards (with possibly some font packages loaded in-between), passing it
the option frenchmath*.
\end{itemize}
-% \begin{footnotesize}
-% The\RightNote{1.3zb} release |2.7| dated |2023/12/23| of
-% \ctanpkg{frenchmath} required \mst to add a compatiblity patch and modify
-% the frenchmath* option. The above instructions cause a build crash with
-% |2.7| \ctanpkg{frenchmath} and \mst |1.3za| and earlier. One must use \mst
-% |1.3zb| or later.\par
-% \end{footnotesize}
-% Also, \ctanpkg{frenchmath} must be at least at
-% version |2.7| of |2023/12/23|.%
Limited testing indicated that the combination of the two packages (using the
options as indicated above) works satisfactorily.
-% as expected but that some adjustments may be needed for some of
-% the macros defined by \ctanpkg{frenchmath}: we
-% observed in particular that the |\paral| command (which produces
-% $\mathrel{/\!\!/}$) may not work well if the $/$ is picked up from the text
-% font due to \mst (alternative could be for most text fonts
-% |\def\paral{\mathrel{//}}|),
There may be some minor adjustments to do, as the \mst-ified math font may
cause issues to some of
the \ctanpkg{frenchmath} macros: for exemple \cs{Oijk} may not work
@@ -2886,9 +2292,9 @@ respectively, which make
the comma (to some extent) `intelligent', i.e. decide on the spacing type
(ordinary or punctuation) depending on next token. Do not load directly the packages
but simply use the corresponding option and \mst will do the loading and take
-appropriate needed measures for compatibility. The\RightNote{1.3zb} decimalcomma option is
+appropriate needed measures for compatibility. The\RightNote{\mstrelease{1.3zb}} decimalcomma option is
included in the frenchmath* option, and the ncccomma
-option is included in the frenchmath+ option.\RightNote{1.3zb}
+option is included in the frenchmath+ option.\RightNote{\mstrelease{1.3zb}}
Let's give another example of usage of \ctanpkg{mathtools} here to define a
macro for integer ranges:
@@ -2924,6 +2330,417 @@ multiple math versions. Read the fine print below for some limitations though.
\mst actions on square brackets (and parentheses).\par
\end{footnotesize}
+\subsubsection{Unicode engines}
+
+\mst is minimally Unicode aware since \mstrelease{1.12} and can be used with \XeTeX{} or
+\LuaTeX{}. Starting with release \mstrelease{1.3}, it needs |luatex| to be at least
+as recent as the one which was provided with the TL2013 distribution.
+
+However \mst applies only to (a subset of) the |32-127| ascii range, and
+optionally to Greek letters, but for the latter only if provided via ``\TeX\
+fonts'' such as Euler, Symbol or LGR-encoded fonts.
+It does not know how to use a given Unicode font simultaneously for Latin and
+Greek letters.
+
+Thus, first consider much better alternatives:
+\begin{itemize}
+\item Since 2018, the package \ctanpkg{mathfont}%
+%
+\footnote{Conrad \textsc{Kosowsky}, \emph{Use TrueType and OpenType fonts in math mode}
+\url{https://ctan.org/pkg/mathfont}.}
+%
+adapts Unicode text fonts to usage in math mode. It works with both \XeTeX\
+and \LuaTeX.
+\item For \XeTeX\ only, \ctanpkg{mathspec}%
+%
+\footnote{Andrew Gilbert \textsc{Moschou}, \emph{Specify arbitrary fonts for mathematics in \XeTeX}
+\url{https://ctan.org/pkg/mathspec}.}
+%
+also allows usage of arbitrary text fonts in mathematics.
+\item and of course
+\ctanpkg{unicode-math}%
+%
+\footnote{Will \textsc{Robertson}, et al., \emph{Unicode mathematics with
+ support for XeTeX and LuaTeX} \url{https://ctan.org/pkg/unicode-math}.}
+%
+is the standard package for using OpenType fonts which are equipped with the needed extra
+support being used in \TeX\ math mode.
+\end{itemize}
+
+If using any one of the above you probably don't need, don't want, and should
+not use \mst.
+
+Let me insist that \mst has not been tested in any systematic
+manner under the Unicode engines; and that it is expected to be most definitely
+incompatible with \ctanpkg{unicode-math}, although your mileage may vary and some
+features may appear to work.
+
+When using \mst with either \XeTeX{} or \LuaTeX{} it is recommended to use the
+\ctanpkg{fontspec} package (see remark below on \cs{encodingdefault}). Furthermore,
+if using \ctanpkg{fontspec} it is \emph{necessary} to load it with its
+|no-math| option, and this \emph{must} happen before loading \mst.
+\begin{shaded*}
+\begin{itemize}[label=$\bullet$, leftmargin=1em]
+\item
+ Use \ctanpkg{fontspec} with its
+ \emph{no-math} option, and load it \emph{prior} to \mst. As some packages
+ load \ctanpkg{fontspec} themselves (for example |polyglossia|), a
+ \centeredline{|\PassOptionsToPackage{no-math}{fontspec}|} early in the
+ preamble might be needed.
+
+\item
+ The \ctanpkg{amsmath} package, if used, \emph{must} be loaded \emph{prior} to \mst.
+
+\item
+ Under |lualatex| engine, it is recommended to also load the package
+ \ctanpkg{lualatex-math}.% Please check its documentation as possibly it has now
+ % been incorporated upstream (I am not following up on the situation).
+\end{itemize}
+\end{shaded*}
+
+I already mentioned in the \autoref{sec:ic} the fact that
+the italic corrections were not available for OpenType fonts
+under the \XeTeX{} engine and only partially available for the
+\LuaTeX{} engine, with the result that the spacings in math
+mode when using for the letters an upright text font will be
+less satisfying than with the standard PDF\TeX{} engine (the
+OpenType fonts not being usable with the latter engine, this is
+not a criterion of choice anyhow).
+
+To define math versions when using unicode fonts, use \ctanpkg{fontspec}'s
+\cs{setmainfont} before the \cs{Mathastext}\oarg{version} command, or simply
+before loading \mst for the default math versions.
+
+It is possible to mix usage of Unicode fonts and classical \TeX{}
+fonts. All used 8bits font encoding must have been passed as
+options to the \ctanpkg{fontenc} package.
+
+\subsubsection{The unicodeminus option}
+
+For legacy reason, \mst uses by default the |EN DASH U+2013| for the minus
+sign in math mode, if the font is determined to be a ``Unicode'' font.
+
+There is now the unicodeminus\RightNote{\mstrelease{1.3q}} to use rather
+% BORDEL DE BORDEL DE FAIT CHIER \verb ET Text for \verb command ended by end
+% of line. je l'ai patch dans etoc et xint mais pas ici encore.
+|MINUS SIGN U+2212|.%
+\footnote{Thanks to Tobias~\textsc{Brink} who asked for this feature.}
+%
+Check \hyperref[nicodeminus]{\ttfamily\hyphenchar\font=189 its documentation}
+on page \pageref{nicodeminus}.
+
+\subsubsection{Two examples with OpenType fonts}
+
+\begingroup\def\MacroFont{\normalfont\footnotesize\ttfamily}
+I include
+here two examples which compiled successfully (a long time ago!) with \XeTeX{} and
+\LuaLaTeX{}, the first one on a Linux machine, the second one on a Mac
+OS X machine.
+\begin{verbatim}
+\documentclass{article}
+\usepackage[hscale=0.8]{geometry}
+\usepackage{multicol}
+\usepackage[no-math]{fontspec}
+\usepackage{lmodern}
+\usepackage[subdued,italic]{mathastext}
+\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana]
+\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial]
+\setmainfont[Color=00FF00]{DejaVu Serif} \Mathastext[DejaVu]
+\MTDeclareVersion{times}{T1}{ptm}{m}{n}
+\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale]
+\begin{document}
+\newcommand\TEST[1]{\MTversion{#1}%
+\begin{multicols}{2}
+\hbox to\columnwidth{\hbox to\columnwidth{\hfil
+ $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}}
+ \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ }
+ \centerline{ $0123456789$ }
+ \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
+ \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ }
+\columnbreak
+ \centerline{ abcdefghijklmnopqrstuvwxyz }
+ \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ }
+ \centerline{ 0123456789}
+ \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
+ \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
+\end{multicols}}
+\begin{multicols}{2}
+ \centerline{\textbf{math mode}}
+\columnbreak
+ \centerline{ \textbf{text} }
+\end{multicols}
+\TEST{DejaVu}\TEST{Verdana}\TEST{times}\TEST{Andale}
+\TEST{Arial}\TEST{bold}\TEST{normal}
+\end{document}
+\end{verbatim}
+And now the same thing with fonts available on Mac OS X:
+\begin{verbatim}
+\documentclass{article}
+\usepackage[hscale=0.8]{geometry}
+\usepackage{multicol}
+\usepackage[no-math]{fontspec}
+\usepackage{lmodern}
+\usepackage[subdued,italic]{mathastext}
+\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler]
+\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter]
+\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum]
+\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot]
+\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic]
+\begin{document}
+ --- copy here the code from the previous example ---
+\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum}
+\TEST{Hoefler}\TEST{Typewriter}\TEST{bold}
+\end{document}
+\end{verbatim}
+\endgroup
+
+
+\subsubsection{Compatibility with other packages}\label{sec:compat}
+
+Regarding the namespace of the package: all internal macros use
+\cs{mst@} (or \cs{ifmst@} for \TeX{} conditionals) as prefix. Almost all user
+commands have \cs{MT} prefix, the oldest ones
+may use \cs{Mathastext} or variants.%
+%
+\footnote{It is only years after initial release that I became aware that
+package \ctanpkg{mathtools} used \cs{MT\string_} prefix (with an underscore as
+shown) for most internal constructs, and sometimes \cs{MT@}, and those can not
+clash with our \cs{MT[a-z\string|A-Z]} for public commands and \cs{mst@} for
+internal macros. They do have however user commands \cs{MTFlushSpaceAbove} and
+\cs{MTFlushSpaceBelow}, but nothing else hence some retroactive relief.}
+
+Compatibility issues are often questions of who decides last. They are
+naturally to be expected with packages dealing with the math setting. The fix
+is simply to load \mst last. In particular one should \emph{always} load \mst
+\emph{after} \ctanpkg{amsmath} (this is especially needed with Unicode engines
+but applies in general as well).
+
+Any definition made in a package loaded before \mst of the font to be
+used for letters or for the common characters in the |ascii| basic range
+will be overruled by the loading of \mst.
+Conversely most of the set-up done by \mst may well be overruled by
+packages loaded later which do math related things.
+
+Starting with version \mstrelease{1.2}, \mst makes some characters
+`mathematically active' to achieve certain effects: automatic insertion of the
+italic corrections when using an upright text font in math (\autoref{sec:ic}),
+extended scope of the math alphabet commands which now apply to non-letter
+symbols (\autoref{sec:mathxx}; and also to math operator names, but this is
+much easier to achieve). And the (already mathematically active) right quote
+is modified to have some extra space added before the derivative glyph ${}'$
+(see \MTprimeskip).
+
+This mathematical activation is compatible with the \cs{label} and \cs{ref}
+commands in and outside of math mode.
+
+But a difficulty arises when some other package has
+made the character `catcode active' everywhere in the document. If it is
+detected for such a character that \mst wishes to make `mathematically active'
+that it is already `catcode active', \mst then checks if it is handling a Babel
+shorthand. If yes, it then hacks into \ctanpkg{babel} support macros for that
+character to let it do what it desires it to do in math mode. And it does not
+make the character mathematically active, to the contrary it makes sure
+that the character is \emph{not} mathematically active.
+
+\begin{footnotesize}
+ This last paragraph applies to the characters
+ {{;}\,{,}\,{:}\,{!}\,{?}\,{+}\,{\textendash}\,{=}\,{<}\,{>}\,{(}\,{)}\,{[}\,{]}*}
+ mentioned in \autoref{sec:mathxx} as `hard non-letters'. The right tick
+ (which is already mathematically active per default) is also handled via a
+ similar process, and in particular is tested for being a Babel shorthand
+ (which happens in particular with the Spanish language |activeacute| option).
+
+ The reason for avoiding in general for a catcode active character to be at
+ same time mathematically active is illustrated in next shaded box.
+
+ In the case of the Spanish active |'|, the advantage of \mst intervention to
+ reset its mathcode is that in case of a faulty input as a curly right tick
+ |U+8217| ', which \LaTeX{} will map to \cs{textquoteright} which itself
+ gives the catcode 12 |'|, it will show as curly quote in output not as prime
+ glyph, as \mst removes its mathematical activation. This complements the
+ \LaTeX{} warnings about \cs{textquoteright} being invalid in math mode.
+
+ The ascii letters can not have been made active by Babel interface (see code
+ comments of \cs{mst@do@activecase}) so if an ascii letter is catcode active
+ when \mst examines it, nothing will change to its meaning.
+
+ \CHANGED{\mstrelease{1.4}}At \mstrelease{1.4} these actions are done for
+ ascii letters at loading of the package or via \csb{MTmathactiveletters},
+ which is itself done by \csb{MTversion} when entering non-subdued math
+ version. Check documentation of \csb{MTmathactiveletters} for some relevant
+ details.\par
+\end{footnotesize}
+
+\begin{shaded*}
+\footnotesize
+On matters of \emph{mathematical} versus \emph{catcode} active character
+tokens, here is some code, not involving \mst, that you should \textbf{not}
+try at home:
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage[french]{babel}
+ \usepackage{mathtools}\mathtoolsset{centercolon}
+ \begin{document}
+ $:$
+ \end{document}
+\end{verbatim}
+\fbox{DO NOT DO THIS AT HOME}\thinspace: it creates (with |pdflatex|) an infinite
+loop.
+% %
+% \footnote{This seems to still be the case with Babel |3.9f| and
+% frenchb.ldf |2.6e|, as tested on Sep. 2, 2013. Again tested with up-to-date
+% TL2015 Jan. 15, 2016 with same result. Again tested July 11, 2024 with
+% up-to-date TL2024 with the
+% same result.}
+% %
+This is due
+to the fact that the colon is simultaneously active (this is made by
+\ctanpkg{babel-french} at begin document) and mathematically active (done by
+\ctanpkg{mathtools} in the preamble). The interaction gives an infinite loop.
+%
+% Such a
+% situation will be cured by \mst, even loaded before \ctanpkg{mathtools},
+% \emph{if} use is made of \MTnonlettersobeymathxx.
+%
+% At each math formula
+% \mst will detect that Babel has activated the colon, and will cancel the
+% mathematical activation (the precise definition done by \ctanpkg{mathtools} was
+% already lost at begin document due to overwriting by \ctanpkg{babel} but the fact that
+% the character was mathematically active remained true).
+\par
+\end{shaded*}
+
+
+ Regarding mathematical activation, an incompatibility of
+ another type arose with \ctanpkg{amsmath}. To fix it, \mst now replaces
+ an inner macro of \ctanpkg{amsmath}
+ (\cs{resetMathstrut@}) with its own version.\\
+ \null\hspace{1cm}\fbox{Always load \ctanpkg{amsmath} before \mst.}
+
+\begin{footnotesize}
+ Actually this last commandment was already made necessary by the use of the
+ text endash to represent the minus sign in math mode, and, especially for
+ Unicode engines, some aspects of the \cs{DeclareMathOperator} macro from
+ \ctanpkg{amsmath}.\par
+\end{footnotesize}
+
+
+
+ \begin{shaded*}
+ \textcolor{magenta}{\bfseries New with 1.3i:} \mst patches |\url| of
+ packages \ctanpkg{url} and \ctanpkg{hyperref}, and also |\nolinkurl|, to force them
+ to do automatically \MTeverymathoff. Indeed they use math mode, and it
+ is better to turn \mst off for their dealings.
+
+ See the \MTeverymathoff documentation.
+ \end{shaded*}
+
+
+
+\subsection{Math alphabets}
+
+Let us first recall fundamental facts of life, in the
+ world of traditional PDF\TeX\ engine and \TeX\ fonts, as background for
+ understanding what \mst does in this context.
+ People familiar with using Unicode engines and \ctanpkg{unicode-math}, please be
+ aware that the semantics there of the \LaTeX\ math alphabet commands are
+ \textbf{significantly} modified!
+\begin{shaded*}
+\begin{itemize}
+\item In the default \LaTeX\ set-up all five of \mathrm, \mathbf,
+ \mathit, \mathsf and \mathtt tell \TeX\ to use for their arguments
+ specific \texttt{OT1}-encoded fonts.
+\item If the document body uses, as will be the case probably with any
+ language other than English or its variants, some other encoding such as
+ \texttt{T1} for its fonts, there is no change whatsoever to the math
+ configuration, indeed most font packages ignore it completely.
+\item It is thus a priori wrong to think of these commands as switching to
+ some body text font, although letters within their scopes will act as in a
+ text font, and in particular obey ligatures (this also applies to operator
+ names defined by |amsmath|'s \cs{DeclareMathOperator} which are, with some
+ extras not mentioned here, as using \mathrm).
+\item These commands are completely different in spirit from the \LaTeX\
+ \cs{textrm}, \cs{textbf}, and others, which change only some font axis;
+ indeed the math alphabet commands inherit from legacy Knuth's \cs{rm},
+ \cs{bf}, and others which are complete font specifiers.
+\item In particular when nesting, it is the inner-most which wins.
+\item Only mathematical characters (such as letters) which are declared to
+ \TeX\ as being of ``variable family type'' react to being in the argument of
+ a math alphabet command.
+\item Lowercase Greek letters are by default in \LaTeX\ immune to math
+ alphabets (so \verb|\mathrm{\pi}| induces no change in output), but the
+ eleven uppercase Greek letters are of ``variable family type'' because they
+ are picked in the \texttt{OT1}-encoded font also used for operator names
+ (the one to which \mathrm maps), \emph{and they occupy the exact same
+ slots in the \emph{\texttt{OML}}-encoding to which} \mathnormal maps! So
+ in default \TeX, \verb|\mathnormal{\Gamma}| gives a slanted glyph. The slots
+ occupied in \texttt{OML}-encoding by the lowercase Greek letters (to which
+ encoding they are a priori assigned) give
+ completely unrelated glyphs in the \texttt{OT1}-encoding, so it makes sense
+ that the default \LaTeX\ declares lowercase Greek to not react to math alphabets.
+ Notice though, that if \LaTeX\ had declared a \cs{mathnormalbold}, mapping
+ to a bold \texttt{OML}-encoded font, it would have made sense to also have
+ \cs{alpha}, \cs{beta}, etc... be of ``variable family type''.
+\item But of course even if |\pi| is of such ``variable family type'' then
+ |\mathbf{\pi}| will give garbage because the default \mathbf selects an
+ \texttt{OT1}-encoded font, where there is no pi glyph whatsoever and in
+ particular not at the slot (which is 25) of $\pi$ in the \texttt{OML} encoding!
+\end{itemize}
+\end{shaded*}
+
+Please keep all the above in mind when trying to understand what \mst does
+with math alphabets. The most significant point described next naturally is that
+\mst will sync \mathnormal, \mathrm, \mathbf, \mathit, \mathsf and
+\mathtt to map to the \mst-ified body text fonts.
+ \begin{itemize}
+ \item \mathnormal, \mathrm, \mathbf, \mathit,
+ \mathsf and \mathtt are modified to use the \mst-ified
+ text fonts; this can be disabled via defaultalphabets and
+ related individual options, but the package always provides
+ \Mathnormal, \Mathrm, etc..., to match the \mst font
+ configuration (\RLNote{changed:}{\mstrelease{1.3za}}prior to \mstrelease{1.3za}
+ defaultalphabets and related options also caused the \mst
+ alphabet commands not to be defined). Recall that there may
+ arise a ``too many math alphabets'' error if too many of these
+ commands are \emph{used} in the document:
+ \emph{declaring} them is not by itself the cause of the error. See the
+ \LaTeX\ news entry of its \texttt{2021-11-15} release for
+ the counter \texttt{localmathalphabets} (with default value 2)
+ which can be now be used if one hits such a difficulty.
+ \item We define a new math alphabet command
+ \mathnormalbold which gives direct access to
+ the bold version of the \mathnormal alphabet
+ (rather than using either the \cs{bm} command from
+ the \ctanpkg{bm} package or the \cs{boldsymbol} command
+ from the \ctanpkg{amsbsy} package). As it does not
+ exist in the default \LaTeX{} math font set-up, this
+ alphabet is \emph{not} subjected to the {subdued option} action.
+
+\item Version \RightNote{\mstrelease{1.2}}\mstrelease{1.2} of \mst has extended the scope of the math
+ alphabets to apply to non-alphabetical characters and to
+ operator names. This respects the automatic white spaces
+ added by \TeX{} around math symbols. See the devoted \autoref{sec:mathxx}.
+\item The optional\RightNote{\mstrelease{1.3i}}
+ extra skips around letters (see \autoref{sec:mathskips} and
+ \autoref{sec:ic}) are removed in the scope of the math alphabets.
+
+ \item Depending on options, further math alphabet commands
+ are defined by the package: \MathEulerBold,
+ \MathEuler, \MathPSymbol, and since \mstrelease{1.3y} under
+ the LGRgreek family of options\RightNote{\mstrelease{1.3y}} also
+ \mathgreekup and \mathgreekit. See
+ \autoref{sec:newgreek}. And also \mathgreekupbold and
+ \mathgreekitbold under the LGRgreek family of
+ options.\RightNote{\mstrelease{1.3za}}
+
+ \item With\RightNote{\mstrelease{1.3za}} the LGRgreek+ option
+ which enhances Greek letters with a specific behavior when in the
+ arguments of the \mathrm, \mathbf, etc..., math alphabet
+ commands, this special behavior is not triggered by the \Mathrm,
+ \Mathbf, et al., which are genuine unmodifed math alphabet commands. See
+ \autoref{sec:newgreekplus}.
+ \end{itemize}
+
\subsection{Math versions}\label{sec:mathversions}
@@ -2972,13 +2789,13 @@ It is still possible to switch on via \MTversion in the document body
\footnote{When not using math versions at all (so not using \texttt{subdued}
mode either) another way to achieve distinct fonts in text and math is
naturally to modify the document text font \emph{after} having loaded \mst (or
-after last usage of \cs{Mathastext} without optional argument).
-Another way is to use \cs{MTfamily}, \cs{MTencoding}, \cs{MTseries},
-\cs{MTshape}, \cs{MTlettershape} in the preamble before a call to
-\cs{Mathastext} which will configure math fonts without having modified the
+after last usage of \csb{Mathastext} without optional argument).
+Another way is to use \csb{MTfamily}, \csb{MTencoding}, \csb{MTseries},
+\csb{MTshape}, \csb{MTlettershape} in the preamble before a call to
+\csb{Mathastext} which will configure math fonts without having modified the
document text fonts. However if one does \texttt{\string\MTversion\{normal\}}
in the document then the text font will be reset to what was recorded as math
-font by the \cs{Mathastext} call in the preamble (as said above, when not
+font by the \csb{Mathastext} call in the preamble (as said above, when not
using \texttt{subdued} option).}
The native \LaTeX{} command \cs{mathversion}\marg{version\_name} would change
@@ -3000,19 +2817,19 @@ For all math versions if not using the subdued option, or only
for the non-\emph{normal} and non-\emph{bold} math versions if
using the subdued option, \cs{MTversion} does further additional tasks:
\begin{itemize}
-\item it resets\RightNote{1.3u} the \hbar, \cs{imath}
+\item it resets\RightNote{\mstrelease{1.3u}} the \hbar, \cs{imath}
(see \inodot), \cs{jmath}, math accents (see option
mathaccents) and minus sign as en dash according to the used
font encoding for the \mst-ified text font,
-\item (see sections \ref{sec:mathskips} and \ref{sec:ic}) it re-issues the
+\item (see \autoref{sec:mathskips} and \autoref{sec:ic}) it re-issues the
command \MTmathactiveletters to let a to z, A to Z, be mathematically
active in order to automatically insert the skips as defined by the user
with \MTsetmathskips, and the italic corrections (if the font is not
italic or slanted),
-\item (see section \ref{sec:extraskips}) it resets the extra spaces after the
+\item (see \autoref{sec:extraskips}) it resets the extra spaces after the
symbols $\exists$, $\forall$ and before the derivative ${}'$ to the values as
decided by the user in the preamble on a \emph{per version} basis,
-\item (see section \ref{sec:mathxx}) it re-issues the commands
+\item (see \autoref{sec:mathxx}) it re-issues the commands
\MTmathoperatorsobeymathxx and \MTeasynonlettersobeymathxx to let
the math operator names and (`easy') non letter characters obey the math
alphabets,
@@ -3058,8 +2875,9 @@ provided by \mst:
package, Greek letters are the default Computer
Modern ones or have been set-up by other packages;
for example by the \ctanpkg{fourier} package with option
- `upright', which gives upright Greek letters.
-\item[LGRgreek:] (this was substantially updated at |1.3x|, make sure to
+ `upright', which gives upright Greek letters
+ or by the author \ctanpkg{lgrmath} package.
+\item[LGRgreek:] (this was substantially updated at \mstrelease{1.3y}, make sure to
read the new documentation at \autoref{sec:newgreek})
this option is for fonts which additionally to Latin
letters also provide Greek letters in |LGR| encoding. Here is
@@ -3088,7 +2906,7 @@ provided by \mst:
If you use the italic option note that the italic Greek
letters from the |cbfonts| are not the same glyphs as
the default Greek letters from the |OML| encoded font |cmmi|.
-\item[LGRgreek+:] \RightNote{1.3za}extends LGRgreek to allow abusive
+\item[LGRgreek+:] \RightNote{\mstrelease{1.3za}}extends LGRgreek to allow abusive
usage of \cs{mathrm} and alike commands with Greek letters.
This is very much not in the spirit (especially with traditional
``8bit'' \TeX\ fonts) of the \LaTeX\ kernel concept of math alphabet
@@ -3146,17 +2964,17 @@ from the lowest to the highest priority:
the digits and operator names (most of the time this means ``upright
shape'', but it can be otherwise),
\item[itgreek]: says that Greek letters (both lowercase and uppercase) will
- be in `|it|' shape. \RLNote{changed:}{1.3x}More precisely the expansion of
+ be in `|it|' shape. \RLNote{changed:}{\mstrelease{1.3y}}More precisely the expansion of
\MTgreekitdefault is used.
- This was changed at |1.3x|, formerly the value of \cs{itdefault} which was in
+ This was changed at \mstrelease{1.3y}, formerly the value of \cs{itdefault} which was in
force at the time of using \Mathastext (or at time of loading the package
if no use is made of \Mathastext) was used.
\item[upgreek]: says that Greek letters (both lowercase and uppercase) will
- be in `|n|' shape. \RLNote{changed:}{1.3x}More precisely the expansion of
+ be in `|n|' shape. \RLNote{changed:}{\mstrelease{1.3y}}More precisely the expansion of
\MTgreekupdefault is used.
- This was changed at |1.3x|, formerly the value of \cs{updefault} which was in
+ This was changed at \mstrelease{1.3y}, formerly the value of \cs{updefault} which was in
force at the time of using \Mathastext (or at time of loading the package
if no use is made of \Mathastext) was used. But since \LaTeX{}
|2020-02-02| this caused many Font Warnings in the log because
@@ -3187,7 +3005,7 @@ font family available in |LGR| encoding: for example |lmr|,
|DejaVuSerif-TLF| (needs \ctanpkg{dejavu} package on your system),
etc\dots
-\begin{framed}
+\begin{shaded*}
\MTitgreek, \MTupgreek, \MTitGreek, \MTupGreek
have some effect only if one of the LGRgreek, LGRgreeks,
selfGreek or selfGreeks options was passed to the package.
@@ -3198,14 +3016,14 @@ etc\dots
\MTgreekfont has an effect only for LGRgreek and selfGreek. It is
without any effect with LGRgreeks and selfGreeks.
-\end{framed}
+\end{shaded*}
\subsubsection{Control sequences to access directly upright or italic
shape for Greek under \texttt{LGRgreek} option}
\label{sec:newgreek}
-Some changes were made at |1.3x| to enhance the LGRgreek (and LGRgreeks)
+Some changes were made at \mstrelease{1.3y} to enhance the LGRgreek (and LGRgreeks)
options with new features. Everything which will be explained here applies
only to these two options.
@@ -3224,7 +3042,7 @@ command in the preamble (possibly with \oarg{version\_name} optional
argument). Their default definitions are to expand to `|n|' and `|it|'
respectively. They can also be defined prior to loading \mst.
-See\RightNote{1.3x} the \autoref{table:greekup} and \autoref{table:greekit}
+See\RightNote{\mstrelease{1.3y}} the \autoref{table:greekup} and \autoref{table:greekit}
for illustrations (using here the Libertinus Serif font).
\begin{table}[htbp]
\MTversion{libertinus}
@@ -3364,7 +3182,7 @@ etc\dots\ options or \MTitgreek et al.\@ commands. This is on a per \mst-enri
math version basis, depending only on how the options or commands were used
in the preamble.
-Furthermore\RightNote{1.3x} two math alphabets are provided
+Furthermore\RightNote{\mstrelease{1.3y}} two math alphabets are provided
\centeredline{\mathgreekup}
\centeredline{\mathgreekit}
which can be used to map a letter to the corresponding Greek fonts:
@@ -3379,14 +3197,14 @@ which can be used to map a letter to the corresponding Greek fonts:
\centeredline{$\mathgreekit{W}=\mathgreekit{\Omega}=\mathgreekit{\Omegaup}=\Omegait$}
}
-Some\RightNote{1.3x} refactoring%
+Some\RightNote{\mstrelease{1.3y}} refactoring%
%
\footnote{Technically, formerly two symbol fonts were declared, one for the
lowercase Greek letters and one for the uppercase Greek letters; now those
are dropped and replaced by two symbol fonts, one for `italic' Greek letters,
the other for `upright' Greek letters.}
%
-was required to achieve this at |1.3x|
+was required to achieve this at \mstrelease{1.3y}
and it is not 100\% backwards compatible: if none of the itgreek etc\dots\
things was used, the Greek letters formerly would follow the shape of Latin
letters (for lowercase Greek) and of operator names (for uppercase Greek).
@@ -3414,10 +3232,10 @@ compatibility.
\subsubsection{\cs{mathgreekupbold} and \cs{mathgreekitbold}}
\label{sec:newgreekbold}
-Again this applies only to LGRgreek and LGRgreeks options (and the |1.3za|
+Again this applies only to LGRgreek and LGRgreeks options (and the \mstrelease{1.3za}
added LGRgreek+ and LGRgreeks+).
-See\RightNote{1.3za} the \autoref{table:greekupbold} and \autoref{table:greekitbold}
+See\RightNote{\mstrelease{1.3za}} the \autoref{table:greekupbold} and \autoref{table:greekitbold}
for illustration of usage (in math mode only) of code such as
\begin{verbatim}
\mathgreekupbold{\alpha}
@@ -3594,7 +3412,7 @@ commands on Latin letters also:
the \texttt{LGRgreek+} option}
\label{sec:newgreekplus}
-With option\RightNote{1.3za} LGRgreek+ or LGRgreeks+, \mst makes Greek
+With option\RightNote{\mstrelease{1.3za}} LGRgreek+ or LGRgreeks+, \mst makes Greek
letters control sequences \cs{alpha}, \cs{beta}, ... (but not \cs{alphaup} or
\cs{betait} and the others) react in a special manner within the scope of
\mathnormal, \mathrm, \mathit, \mathbf, and \mathnormalbold, but not
@@ -3671,15 +3489,24 @@ fonts having only 128 or 256 glyphs, and from the fact that \mathrm and
\mathbf originate in Plain \TeX\ \cs{rm} and \cs{bf} and are still quite
akin to it, they are font switching commands nothing more or less.
+\subsection{Advanced capacities}
+
+Some such capacities are on per default (but if with subdued option will be
+turned off in the \emph{normal} and \emph{bold} math versions), others require
+an action from the user for activation.
-\subsection{Extra spaces around letters}
+\subsubsection{Extra spaces around letters}
\label{sec:mathskips}
-This is a new feature added with release |1.3|: the command \MTsetmathskips
-allows the user to set up some spaces (more precisely, `mu glue'; but stretch
-and shrink are discarded) to be
-automatically inserted around the letters in math mode. Some (very) unrealistic
-uses:
+This is a new feature%
+%
+\footnote{It was new in 2013 indeed. Not so much new now, but it is never too
+late to try it out.}
+%
+added with release \mstrelease{1.3}: the command \MTsetmathskips allows the
+user to set up some spaces (more precisely, `mu glue'; but stretch and shrink
+are discarded) to be automatically inserted around the letters in math
+mode. Some (very) unrealistic uses:
\begin{verbatim}
% this may be anywhere in the document (also within a math group):
\MTsetmathskips{x}{20.33mu}{15.66mu}% 20.33mu before all x's and 15.66mu after.
@@ -3699,28 +3526,25 @@ limits as usual the scope of this command. Furthermore the command
\MTunsetmathskips cancels previous use of \cs{MTsetmathskips} for a given
letter.
-The implementation relies on the `mathematical activation' of letters, which is
-done by default by the package since release |1.2b|. Should this cause
-compatibility problems, the command \MTmathstandardletters cancels it
+The implementation relies on the `mathematical activation' of letters, which
+is done by default by the package since release \mstrelease{1.2b}. Should this
+cause compatibility problems, the command \MTmathstandardletters cancels it
entirely. To reactivate it, there is \MTmathactiveletters. Note that
-\cs{MTmathactiveletters} is done automatically by \mst when loaded, and also
-each time the package enhanced math-version-switch command \MTversion is used,
-except for the normal and bold math versions under the subdued option.
-
-% Earlier this `mathematical activation' of letters had been used by the package
-% only to add automatically italic corrections, as described in the next
-% section.
+\MTmathactiveletters is done automatically (as part of \MTicinmath) by
+\mst when loaded (if not with subdued option), and also each time the
+package enhanced math-version-switch command \MTversion is used, except for
+the normal and bold math versions under the subdued option.
-\begin{framed}
+\begin{shaded*}
The extra skips are set at natural width; they do not contribute to the
overall stretchability or shrinkability of the math formula and do not
create break points.
- \textcolor{magenta}{\bfseries Changed with |1.3i|}: they are \emph{not}
+ \textcolor{magenta}{\bfseries Changed with \mstrelease{1.3i}}: they are \emph{not}
applied within the scope of math alphabet commands.
-\end{framed}
+\end{shaded*}
-\subsection{Italic corrections}
+\subsubsection{Background on italic corrections in math mode}
\label{sec:ic}
{\small Note: this is somewhat technical discussion which may well be skipped in
@@ -3824,9 +3648,14 @@ $\xdef\mstrestorefontdimen{\fontdimen2\textfont\symmtletterfont=
We learn in Appendix G of the \TeX book that the italic correction is used for
the horizontal shift of the superscript with respect to the position of
-the subscript: $\mathit{f_i^j}$, or,
+% CETTE LIGNE PROVOQUE L'AJOUT D'UN LINESKIP
+% the subscript: $\mathit{f_i^j}$, or,
+% En fait dj en Plain TeX, configuration de base la hauteur totale de
+% $f_i^j$ est > 12pt = baselineskip !
+% Work-around ad hoc
+the subscript: \smash{$\mathit{f_i^j}$}, or,
going back now to the standard math italics $f_i^j$. In the next paragraphs
-we use $f_i^i$ for more accurate comparison of the positioning of the sub- and superscript.
+we use \smash{$f_i^i$} for more accurate comparison of the positioning of the sub- and superscript.
If we try something like this: |${f\/}_i^i$| we obtain ${f\/}_i^i$. Our
overlapping game with |\rlap{$f_i^i$}${f\/}_i^i$| gives
@@ -3889,15 +3718,10 @@ to preserve this behavior).
italic corrections are canceled inside the arguments to the math alphabet
commands, to allow the formation of ligatures as
is expected in the standard default \TeX{} font set-up in math.%
-% \footnotemark
-% \global\let\saved@Href@B\Hy@footnote@currentHref
\end{framed}\vskip-.75\baselineskip
\end{framed}
-%\addtocounter{footnote}{-1}%
-%\let\Hy@footnote@currentHref\saved@Href@A
-%
\footnotetext{the situation is rather ironical! by the way, the warnings in
- section \ref{sec:mathxx} with \texttt{\$x\^{}?\$} or similar are less of an
+ \autoref{sec:mathxx} with \texttt{\$x\^{}?\$} or similar are less of an
issue here, because the letter is only \emph{followed} by \texttt{\char92/}
and anyhow the whole is put by \mst within group braces, so no surprises
with \texttt{\$x\^{}y\$} or \texttt{\$\char92mathbin x\$}. Nevertheless it
@@ -3905,16 +3729,10 @@ to preserve this behavior).
composite objects, something which could surprise other packages. The
command \csb{MTmathstandardletters} cancels this mechanism.}
-%\addtocounter{footnote}{1}%
-% \let\Hy@footnote@currentHref\saved@Href@B
-%
-% \footnotetext{\RightNote{1.3i}Formerly, italic corrections were added to the
-% \cs{mathnormal} arguments.}
-
\makeatother
The feature-implementing commands \MTicinmath, \MTnoicinmath,
-\MTicalsoinmathxx are described in section \ref{sec:cmds}.
+\MTicalsoinmathxx are described in \autoref{sec:cmds}.
\endgroup
\textbf{\hbox{Note:}} \emph{from brief testing on 2012/12/28, \XeTeX{} seems not
@@ -3944,11 +3762,7 @@ at least on current TL2016.
\noindent\kern-0.5em\relax2022/10/29: no change with current TL2022.}
-% For more see
-% \url{http://tex.stackexchange.com/a/337076} which explores also the differences
-% between the two Unicode engines regarding italic corrections in pure text mode.
-
-\subsection{Extra glue after \texorpdfstring{\cs{exists}}{\textbackslash
+\subsubsection{Extra glue after \texorpdfstring{\cs{exists}}{\textbackslash
exists}, \texorpdfstring{\cs{forall}}{\textbackslash forall}, and before the prime glyph}
\label{sec:extraskips}
@@ -3998,21 +3812,16 @@ Under the subdued option, the \emph{normal} math version (at the start of
the document body, or after |\MTversion{normal}|) and the \emph{bold} math
version (either at the start of the document body after \cs{boldmath}, or after
|\MTversion{bold}|) do not have any extra skip inserted (even one of zero
-width) after $\oldforall$, $ \oldexists$, or before the ${}'$.%
-%
-%\footnote{\RightNote{1.3j}Formerly, skips of zero widths were inserted.}
+width) after $\oldforall$, $ \oldexists$, or before the ${}'$.
\endgroup
-
-\subsection{Extended scope of the math alphabets commands}
+\subsubsection{Extended scope of the math alphabets commands}
\label{sec:mathxx}
\begingroup
\MTversion{italic}\renewcommand\familydefault\sfdefault
-% il faudra peut-tre que j'annule cette faon qu' mathastext de tripatouiller
-% \familydefault...
-\makeatletter\let\mst@doasterisk\relax\makeatother
+\MTnormalasterisk
Ever since the initial version of the package, some characters usually
unaffected by the math alphabet commands \cs{mathbf}, \cs{mathtt},
@@ -4027,21 +3836,31 @@ $<$, or $]$ could not be declared of `variable family' (in addition to being
picked up in the text font) as this would, for reasons of the inner workings of
\TeX{}, not be compatible with the automatically inserted spaces around them.
-A revolutionary\RightNote{1.2} ;-) novelty is introduced with version |1.2| of the package:
+A revolutionary\RightNote{\mstrelease{1.2}} ;-) novelty is introduced with
+version \mstrelease{1.2} of the package:
\begin{enumerate}
\item the pre-declared or user-declared (using the |amsmath|
\cs{DeclareMathOperator} or equivalent) operator names obey the math
alphabet commands,\footnote{contrarily to the next feature, this one is not
likely to create incompatibilities with other packages, so it is
activated by default.}
-\item and, \emph{optionally}, all non alphabetical
- characters\footnote{of course some of them are input preceded by a
- backslash, and the backslash itself is input as \cs{backslash}.} treated by
- \mst, \emph{i.e.}, if not disabled by options,
- ${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$,
- the asterisk $*$, and
- $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$%
-%
+\item as well as all non alphabetical characters treated by \mst.
+\end{enumerate}
+
+The non-letters handled by \mst (if not disabled by options) fall into two
+groups:
+\begin{itemize}[nosep]
+\item Those to which \TeX{} associates some specific spacings:
+ \centeredline{${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,%
+ {(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}\,*$}
+ We call them the ``hard'' ones.
+\item Those for which \TeX{} uses so-called ordinary spacings:
+ \centeredline{$.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$}
+ We call them the ``easy'' ones.
+\end{itemize}
+The ``easy'' non-letters are handled \emph{easily} by \mst, simply
+by declaring them to be of ``variable family type''. This will
+be done automatically.%
\footnote{%
${\#}\,{\$}\,{\%}\,{\&}$ obey the math alphabets since the initial version
of \mst; the dot $.$, the slash $/$, the vertical bar $\vert$ and the
@@ -4049,431 +3868,326 @@ A revolutionary\RightNote{1.2} ;-) novelty is introduced with version |1.2| of t
around them, and the procedure is then activated by default since
\texttt{1.2} for these characters as they are `easy non-letters'. But for
\cs{mid} and \cs{setminus} which are $\vert$ and $\backslash$ with special
- spacing (of type \cs{mathrel} and \cs{mathbin} resp.) the procedure has
- some constraints explained in the framed box on next page and the
- activation requires \cs{MTnonlettersobeymathxx}.}
+ spacing (of type \cs{mathrel} and \cs{mathbin} resp.) the
+ activation requires \csb{MTnonlettersobeymathxx}.}
%
-will also obey
- the math alphabet commands (when not used as delimiters). The
- important thing is that the spaces added by \TeX{} before and after
- are not modified.
-\end{enumerate}
+The ``hard'' non-letters require a more complex approach using a concept
+called ``mathematical activation''. For reasons explained next, this is not
+done automatically and requires the user to employ the command
+\MTnonlettersobeymathxx (or, for the specific case of the asterisk the option
+asterisk).
+
+\begin{shaded*}
+ It is a fundamental feature that the spacing added by \TeX{} before and
+ after each such \mst-ified non-letter is in no way modified.
+\end{shaded*}
+
+
Let us compare, for example, the new behavior of \cs{mathtt} and \cs{mathbf}
-\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTeasynonlettersobeymathxx
-\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\]
-with the traditional default behavior:
-\MTmathoperatorsdonotobeymathxx\MTnonlettersdonotobeymathxx
+when \MTnonlettersobeymathxx has been used
+\MTmathoperatorsobeymathxx
+\MTnonlettersobeymathxx
+\MTeasynonlettersobeymathxx
+\[ new:\quad \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\]
+with the traditional default behavior one observes without \mst or in
+subdued normal or bold math version:
+\MTmathoperatorsdonotobeymathxx
+\MTnonlettersdonotobeymathxx
\MTeasynonlettersdonotobeymathxx
-\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\]
-
-The first feature is activated by default, except of course for the normal and
-bold math versions when the package was given the \emph{subdued} option. The
-second feature is \emph{off} by default for the characters listed first. It is
-\emph{on} for the `easy' cases
-${\#}\,{\$}\,{\%}\,{\&}\,.\,/\,\vert\,\backslash$ (activating the feature for
-them puts no constraint on the user input and should not be too upsetting to
-other packages), and also for $*$ but only if this was required explicitly by
-the option asterisk, as the user then is supposed to know that |$R^*$| is no
-valid input anymore and should be replaced by |$R^{*}$|. The remaining `difficult'
-cases create similar
-constraints, which will be commented more upon next. The commands%
-\footnote{these commands are to be used outside of math mode.
- Their scope is limited to the current \LaTeX{} environment or group. They use
- the \cs{everymath} and \cs{everydisplay} mechanism so if the document needs to
- modify these token lists it has to do so in a responsible manner, extending
- not annihilating their previous contents.}
-%
-for deactivation are:\\
+\[ standard:\quad \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\]
+
+The commands for
+\emph{deactivation} are:\\
\mbox{}\hspace{1cm}\csb{MTmathoperatorsdonotobeymathxx},\\
\mbox{}\hspace{1cm}\csb{MTeasynonlettersdonotobeymathxx},\\
\mbox{}\hspace{1cm}\csb{MTnonlettersdonotobeymathxx},\\
-and those for activation:\\
-\mbox{}\hspace{1cm}\csb{MTmathoperatorsobeymathxx} regards operator names and is executed by default,\\
-\mbox{}\hspace{1cm}\csb{MTeasynonlettersobeymathxx} is done by default and applies to \centeredline{${\#}\,{\$}\,{\%}\,{\&}\,.\,/\,\vert\,\backslash$} and also to $*$ under package option asterisk,\\
-\mbox{}\hspace{1cm}\csb{MTnonlettersobeymathxx} is \emph{not} done by default (see explanations why in the framed box next) and regards \centeredline{${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}$} and also \cs{mid} and \cs{setminus} but applies to
-the braces ${\{}\,{\}}$ only if \csb{MTexplicitbracesobeymathxx} is also used.\par
-%
-%% suppression de cette note de bas de page 1.3u car elle est obsolte
-%% (pas sr si 100%, mais en tout cas l'exemple avec \mathbf{-} n'a plus
-%% de problme.
-% \footnote{when in subdued mode, the
-% math alphabets are the default ones, not the ones modified by \mst to use the
-% document text fonts. As a result, matters of font encodings may then give
-% unexpected results, for example for $-$. On the present document page we
-% switched to a math version to escape from the |subdued| mode and avoid the
-% problem with \cs{mathbf\{-\}} giving in the normal (subdued) math version
-% {\MTversion{normal}\MTnonlettersobeymathxx$\mathbf-$\sffamily, when
-% `non-letters' are declared to obey math alphabets.}}
+and those for \emph{activation}:\\
+\mbox{}\hspace{1cm}\csb{MTmathoperatorsobeymathxx} (done by default),\\
+\mbox{}\hspace{1cm}\csb{MTeasynonlettersobeymathxx} (done by default),\\
+\mbox{}\hspace{1cm}\csb{MTnonlettersobeymathxx} is \emph{not} done by default
+(see explanations why in the shaded box next) and applies to the ``hard''
+non-letters mentioned above and also to \cs{mid} and \cs{setminus}.
+Furthermore, it applies to
+the braces ${\{}\,{\}}$ only if \csb{MTexplicitbracesobeymathxx} is also used.
+
+
+\begin{shaded*}
+ \textbf{Important:} the package does not execute on its own
+ \csb{MTnonlettersobeymathxx}. The reason is that the
+ mechanism in effet replaces the original ``hard'' characters such as
+ |?|, |[|, |<| by (in math mode only) a more complex structure, which
+ ceases looking to \TeX{} as only one token, and as a consequence |$x^?$|, |$R^+$|
+ or |$\mathopen<A\mathclose>$| raise an error, the workaround being to
+ employ additional braces: |$x^{?}$|, |$R^{+}$| and |$\mathopen{<}A\mathclose{>}$|.
+
+ Similarly |$R^*$| does not work anymore under option asterisk, the user is
+ supposed to know that with this option |$R^{*}$| is the mark-up to use.
+
+ Thus, if one adds
+ \centeredline{|\usepackage{mathastext}|\MTnonlettersobeymathxx} to a
+ pre-existing document, it is needed to check if the mark-up satisfies
+ to the above guidelines. For this reason the mechanism is by default
+ not activated and the user has to execute:
+ \centeredline{\MTnonlettersobeymathxx}
+ This can be done in the preamble and will trigger actual modifications
+ only at time of |\begin{document}|.
+\end{shaded*}
-\begin{framed}
- \textbf{Important:} the package does \csb{MTnonlettersdonotobeymathxx} by
- default. The reason is that activating the mechanism adds some constraints to
- the way things must be input, adding
-\centeredline{|\usepackage{mathastext}|\csb{MTnonlettersobeymathxx}}
- to a pre-existing
- document might well create errors:
- all these characters treated by \mst, such
- as |?|, |[|, |<| now represent (in math mode only!) \emph{two} `tokens' and
- this will utterly confuse \TeX{} if some precautions are not taken: |$x^?$|,
- |$R^+$| or |$\mathopen<A\mathclose>$| \emph{must} now be coded as |$x^{?}$|,
- |$R^{+}$| and |$\mathopen{<}A\mathclose{>}$| (the rule is to do as if |?|,
- |+|, |<| or |>| were each really \emph{two} characters).
-
- Even if this rule is respected in the document source, it is still a
- possibility that incompatibilities with other packages will arise because
- \mst does a \emph{mathematical activation} of the characters which could be
- unexpected and unchecked for by other packages. This is precisely the case
- with the \ctanpkg{amsmath} package, and the problem goes away by just making sure
- that |amsmath| is loaded before \mst{} (generally speaking, \mst should be
- loaded last after all packages dealing with math things).
-\end{framed}
+
+\begin{footnotesize}
+Some \TeX nical notes:%
+%
+\footnote{The complete truth is only to be found in source code. Here are
+ some extra details:
+
+ The
+ dollar sign and the curly braces are not tested for mathematical or catcode
+ activation.
+
+ The $*$\RLNote{changed:}{\mstrelease{1.4}} is tested as
+ are the ``hard'' non-letters, except under option everymath. On the
+ other hand \cs{ast} will be modified independently of what is decided for
+ $*$. Comprenne qui pourra.}
+
+\begin{itemize}[nosep]
+\item
+The asterisk $*$ is associated with its own option asterisk, because
+independently of the matter of its behavior in the scope of math alphabets
+commands, its handling by \mst (via the \MTlowerast associated
+configuration) always requires it to be made mathematically active and to
+expand to a more complex structure. So once this option is received by the
+package, it goes full steam and also adds by default the responsiveness to
+math alphabet commands (in non-subdued math versions).
+
+\item The legacy situation which is a bit late to change is that the
+ responsiveness of the asterisk to math alphabets being on by default under
+ option asterisk, it was decided that this responsiveness would be turned
+ off by \MTeasynonlettersdonotobeymathxx and back on by
+ \MTeasynonlettersobeymathxx, although the $*$ is part of the ``hard''
+ non-letters. One can use \MTnormalasterisk to stop the $*$ to obey math
+ alphabet commands, but it also cancels the \MTlowerast mechanism.
+
+\item At\RLNote{changed:}{\mstrelease{1.4}} \mstrelease{1.4} ``easy''
+ non-letters found out to be (at |\begin{document}| or with \MTversion
+ except for subdued \emph{normal} or \emph{bold}) mathematically active
+ characters will not get overridden by \mst.
+ This applies for example with
+ the dot ``.'' under \ctanpkg{babel} with Spanish language. Its special
+ behavior to transform into a comma ``,'' if before a digit is now
+ kept. As an amusing side note, if \MTnonlettersobeymathxx is used, this
+ comma does obey math alphabet commands.
+
+\item An ``easy'' non-letter which (at |\begin{document}| or with \MTversion
+ except for subdued \emph{normal} or \emph{bold}) is catcode active will
+ still be set by \mst to be of ``variable family type'', if it is not
+ mathematically active. The catcode status is not checked nor modified, only
+ the mathcode as per previous item. Now whether the \mst-ification has any
+ effect depends on how the user has configured the catcode active character
+ to behave if in math mode.
+
+\item When \mst wants to employ mathematical activation for a non-letter
+ character among the ``hard'' cases (inclusive of the asterisk), which is done
+ at |\begin{document}| if not subdued or with every \MTversion except for
+ subdued \emph{normal} or \emph{bold}, it first checks if this character
+ is currently catcode active. If this is the case, it then checks if the
+ character is a \ctanpkg{babel} shorthand. If yes, it then hooks into
+ \ctanpkg{babel} internals to modify the way this shorthand acts in math
+ mode, so that now the character will respond to math alphabet commands.
+ If however the catcode active character does not appear to be a
+ \ctanpkg{babel} shorthand, then \mst does not do anything at all (beyond
+ its general business at package loading time to set-up the
+ font used for the non-active token).
+%
+ In relation to this context \mst should always be loaded \emph{after} \ctanpkg{babel}.
+ And also \emph{after} the \ctanpkg{amsmath} package.
+
+\item
The braces |\{| and |\}| remain unresponsive to the alphabet changing commands
-even after \csb{MTnonlettersobeymathxx}. One must issue also
-\csb{MTexplicitbracesobeymathxx}, but it has the disadvantage that |\{| and
+even after \csb{MTnonlettersobeymathxx}. The user must employ for this
+\centeredline{\csb{MTexplicitbracesobeymathxx}}
+This has the disadvantage that |\{| and
|\}| become then unusable as variable-size delimiters: |\big\{| or |\big\}|
create errors and one must make use of |\big\lbrace| and |\big\rbrace|. But
-\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTexplicitbracesobeymathxx
+%
+\MTmathoperatorsobeymathxx
+\MTnonlettersobeymathxx
+\MTexplicitbracesobeymathxx
+%
one can now enjoy $\mathtt{\{a, a>b\}}$, $\mathbf{\{a, a>b\}}$,
-$\mathsf{\{a, a>b\}}$, or even $\mathnormalbold{\{a, a>b\}}$.\footnote{this
- last example uses the \cs{mathnormalbold} additional alphabet defined by
- \mst.}\footnote{Let me recall that braces will anyhow not be handled at all
+$\mathsf{\{a, a>b\}}$, or even $\mathnormalbold{\{a, a>b\}}$.%
+%
+\footnote{This
+ last example uses the \csb{mathnormalbold} additional alphabet defined by
+ \mst.}%
+%
+\footnote{Let me recall that braces will anyhow not be handled at all
by \mst if the document
font encoding is |OT1|, except under option |alldelims|.}
-Even with \csb{MTnonlettersobeymathxx}, the parenthese-like symbols $($, $)$,
+\item
+Even with \csb{MTnonlettersobeymathxx}, the parentheses-like symbols $($, $)$,
$[$, $]$, $<$ and $>$ and the slashes $/$, $\backslash$, \emph{if used as
- left/right delimiters} (i.e.\@ with |\left/\right|) do not react to math
+ left/right delimiters} (i.e.\@ with |\left/\right|) will not respond to math
alphabet commands. This is mainly explained by the fact that the text font
-will not contain suitable glyphs, hence no attempt was made to make the
+will not contain suitable glyphs, hence no attempt was made by \mst to make the
delimiters pick up their glyphs there.
But \mst does try to pick up most of the `small variants' of the delimiters
-from the text font: |$\left<x\right>$| gives $\left<x\right>$ (but
-|$\left<b\right>$| gives $\left<b\right>$.) Notice that this differs from
+from the text font: |$\left<x\right>$| gives $\left<x\right>$ but
+|$\left<b\right>$| gives $\left<b\right>$. Notice that this differs from
standard \LaTeX{} for which |$\left< x\right>$| gives $\langle x\rangle$. As
-it is perhaps a bit strange to have $\left< x\right>$ next to
-$\left< X\right>$ there is option nosmalldelims: with this option the
-small-sized variants of the delimiters are not modified by \mst (option
-nosmalldelims has the side effect that, for the non-delimiter uses of
-|\{, \}|
-to be \mst-ified it is necessary to issue \csb{MTnonlettersobeymathxx} and
-\csb{MTexplicitbracesobeymathxx}.)
-
-At any rate, as said above, whether `small' or not, delimiters are
-unresponsive to math alphabet commands, due to technical aspects of \TeX, and
-the way \mst handles these things. Examples: |\mathbf{<a,b>}| gives
-$\mathbf{<a,b>}$
-%{\setbox0\hbox{$\mathbf{<a,b>}$}\typeout{ICI}\showboxdepth\maxdimen
-% \showboxbreadth\maxdimen \showbox0}
-(no use of |\left/\right|, hence brackets do obey the math alphabets --- as we
-issued \MTnonlettersobeymathxx a bit earlier), |\mathbf{\left<a,b\right>}|
-gives $\mathbf{\left<a,b\right>}$ (brackets used with |\left/\right| do not
-obey the math alphabets), |\mathbf{\mathopen{<}a,b \mathclose{>}}| gives
-$\mathbf{\mathopen{<} a,b \mathclose{>}}$ (no |\left/\right|, brackets
-do obey the math alphabets).
-
-\endgroup
-For comparison, the \LaTeX{} standard behavior for
-\centeredline{|\mathbf{\mathopen{<}a,b\mathclose{>}}|}
-is $\mathbf{\mathopen{<} a,b
- \mathclose{>}}$ (neither brackets nor the comma do respond).
-
-
-\subsection{Unicode engines}
-
-\mst is minimally Unicode aware since |1.12| and can be used with \XeTeX{} or
-\LuaTeX{}. Starting with release |1.3|, it needs |luatex| to be at least
-as recent as the one which was provided with the TL2013 distribution.
-
-However \mst applies only to (a subset of) the |32-127| ascii range, and
-optionally to Greek letters, but for the latter only if provided via ``\TeX\
-fonts'' such as Euler, Symbol or LGR-encoded fonts.
-It does not know how to use a given Unicode font simultaneously for Latin and
-Greek letters.
-
-Thus, first consider much better alternatives:
-\begin{itemize}
-\item Since 2018, the package \ctanpkg{mathfont}%
-%
-\footnote{Conrad \textsc{Kosowsky}, \emph{Use TrueType and OpenType fonts in math mode}
-\url{https://ctan.org/pkg/mathfont}.}
-%
-adapts Unicode text fonts to usage in math mode. It works with both \XeTeX\
-and \LuaTeX.
-\item For \XeTeX\ only, \ctanpkg{mathspec}%
-%
-\footnote{Andrew Gilbert \textsc{Moschou}, \emph{Specify arbitrary fonts for mathematics in \XeTeX}
-\url{https://ctan.org/pkg/mathspec}.}
-%
-also allows usage of arbitrary text fonts in mathematics.
-\item and of course
-\ctanpkg{unicode-math}%
-%
-\footnote{Will \textsc{Robertson}, et al., \emph{Unicode mathematics with
- support for XeTeX and LuaTeX} \url{https://ctan.org/pkg/unicode-math}.}
-%
-is the standard package for using OpenType fonts which are equipped with the needed extra
-support being used in \TeX\ math mode.
-\end{itemize}
-
-If using any one of the above you probably don't need, don't want, and should
-not use \mst.
-
-Let me insist that \mst has not been tested in any systematic
-manner under the Unicode engines; and that it is expected to be most definitely
-incompatible with \ctanpkg{unicode-math}, although your mileage may vary and some
-features may appear to work.
+it is perhaps a bit strange to have $\left< x\right>$ and $\left< y\right>$
+not use the same bracketing glyphs, there is an option nosmalldelims: with
+this option the small-sized variants of the delimiters are not modified by
+\mst (option nosmalldelims has the side effect that, for the non-delimiter
+uses of |\{, \}| to be \mst-ified it is necessary to issue
+\csb{MTnonlettersobeymathxx} and \csb{MTexplicitbracesobeymathxx}.)\par
-When using \mst with either \XeTeX{} or \LuaTeX{} it is recommended to use the
-\ctanpkg{fontspec} package (see remark below on \cs{encodingdefault}). Furthermore,
-if using \ctanpkg{fontspec} it is \emph{necessary} to load it with its
-|no-math| option, and this \emph{must} happen before loading \mst.
-\begin{framed}
-\begin{itemize}[label=$\bullet$, leftmargin=1em]
\item
- Use \ctanpkg{fontspec} with its
- \emph{no-math} option, and load it \emph{prior} to \mst. As some packages
- load \ctanpkg{fontspec} themselves (for example |polyglossia|), a
- \centeredline{|\PassOptionsToPackage{no-math}{fontspec}|} early in the
- preamble might be needed.
-
-\item
- The \ctanpkg{amsmath} package, if used, \emph{must} be loaded \emph{prior} to \mst.
-
-\item
- Under |lualatex| engine, it is recommended to also load the package
- \ctanpkg{lualatex-math}.% Please check its documentation as possibly it has now
- % been incorporated upstream (I am not following up on the situation).
+At any rate, as said above, whether `small' or not, delimiters will remain
+unresponsive to math alphabet commands, due to technical aspects of \TeX, and
+the way \mst handles these things. Examples:
+\begin{itemize}[nosep]
+\item |\mathbf{<a,b>}| gives $\mathbf{<a,b>}$: no use of |\left/\right|, hence
+ brackets do obey the math alphabets --- as we issued
+ \MTnonlettersobeymathxx a bit earlier,
+\item |\mathbf{\left<a,b\right>}| gives
+ $\mathbf{\left<a,b\right>}$: delimiters used with |\left/\right| will not obey
+ the math alphabets,
+\item |\mathbf{\mathopen{<}a,b \mathclose{>}}| gives
+ $\mathbf{\mathopen{<} a,b \mathclose{>}}$: no |\left/\right|, so the
+ brackets do obey the math alphabets due to \MTnonlettersobeymathxx.
+\item
+\MTnonlettersdonotobeymathxx
+to compare, the \LaTeX{} standard for
+|\mathbf{\mathopen{<}a,b\mathclose{>}}| is to produce
+$\mathbf{\mathopen{<} a,b \mathclose{>}}$: neither brackets nor the comma are
+responding to \cs{mathbf}.
\end{itemize}
-\end{framed}
-
-% obsolete with release 1.3:
-% A little piece of the functionality of \mst is less fully
-% realized under the \LuaLaTeX{} engine than it is with
-% \XeTeX{}. This is a temporary situation as the needed feature
-% of \LuaLaTeX{} has been implemented in its latest development
-% release. I will update \mst when these binaries will have
-% reached the distribution stage.
-
-I already mentioned in the section \ref{sec:ic} the fact that
-the italic corrections were not available for OpenType fonts
-under the \XeTeX{} engine and only partially available for the
-\LuaTeX{} engine, with the result that the spacings in math
-mode when using for the letters an upright text font will be
-less satisfying than with the standard PDF\TeX{} engine (the
-OpenType fonts not being usable with the latter engine, this is
-not a criterion of choice anyhow).
-
-To define math versions when using unicode fonts, use \ctanpkg{fontspec}'s
-\cs{setmainfont} before the \cs{Mathastext}\oarg{version} command, or simply
-before loading \mst for the default math versions.
-
-It is possible to mix usage of Unicode fonts and classical \TeX{}
-fonts. All used 8bits font encoding must have been passed as
-options to the \ctanpkg{fontenc} package.
-
-\subsubsection{The unicodeminus option}
-
-For legacy reason, \mst uses by default the |EN DASH U+2013| for the minus
-sign in math mode, if the font is determined to be a ``Unicode'' font.
-
-There is now the unicodeminus\RightNote{1.3q} to use rather
-% BORDEL DE BORDEL DE FAIT CHIER \verb ET Text for \verb command ended by end
-% of line. je l'ai patch dans etoc et xint mais pas ici encore.
-|MINUS SIGN U+2212|.%
-\footnote{Thanks to Tobias~\textsc{Brink} who asked for this feature.}
-%
-Check \hyperref[nicodeminus]{\ttfamily\hyphenchar\font=189 its documentation}
-on page \pageref{nicodeminus}.
+\end{itemize}
+\end{footnotesize}
-\subsubsection{Two examples}
+\endgroup
-I include
-here two examples which compiled successfully with \XeTeX{} and
-\LuaLaTeX{}, the first one on a Linux machine, the second one on a Mac
-OS X machine.\footnote{A |tex mathastext.dtx| (in a temporary repertory) on a
- copy of |kpsewhich mathastext.dtx| will extract extended versions of
- these examples as test files.}
+\subsubsection{Hacking letters (and even digits) for special tasks}
+\label{ssec:hackingletters}
+
+For some ascii characters, i.e.\@ the ``hard'' non-letters considered in the
+previous section, and even more spectacularly for all ascii letters, \mst
+achieves the capabilities describes in earlier sections via a \TeX nique known
+as ``mathematically active characters''. For letters this is turned on by
+default, but for the non-letter characters it is the command
+\cs{MTnonlettersobeymathxx} which triggers this mathematical activation.
+
+It is possible for daring \LaTeX{} users to hook into this architecture.
+Release \mstrelease{1.4} has made this especially easy regarding ascii letters
+(and even for digits if using the package option activedigits).
+
+Except if told otherwise, \mst will make all Latin ascii letters mathematically
+active, and when \TeX{} encounters e.g.\@ `e' in math mode it replaces it with
+the macro having name \cs{MTcommandlettere} (mind the ending |e|). Its
+default definition inserts \hyperref[sec:mathskips]{optional extra skips}
+and/or an \hyperref[sec:ic]{italic correction}.
+
+You can redefine this \cs{MTcommandlettere}, or any
+\cs{MTcommandletter}\meta{ascii-letter}, to achieve (globally or locally)
+custom goals.%
+%
+\footnote{\CHANGED{\mstrelease{1.4}}%
+Prior to \mstrelease{1.4}, there was no equivalent to
+\cs{MTcommandletter}\meta{letter}. An internal macro \cs{mst@}\meta{letter}
+stood for what is denoted now \cs{MTmathcharletter}\meta{letter}, but required
+a \cs{protected} if redefined as it was submitted to an \cs{edef} during
+processing.}
+%
+Attention, this redefinition should not use `e' itself as a ``naked''
+character to typeset in math mode, else an infinite loop will arise at time of
+use. To access a symbol equivalent to the ``naked'' `e', use
+\cs{MTmathcharlettere} (again mind the ending |e|). For example:
\begin{verbatim}
-\documentclass{article}
-\usepackage[hscale=0.8]{geometry}
-\usepackage{multicol}
-\usepackage[no-math]{fontspec}
-\usepackage{lmodern}
-\usepackage[subdued,italic]{mathastext}
-\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana]
-\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial]
-\setmainfont[Color=00FF00]{DejaVu Serif} \Mathastext[DejaVu]
-\MTDeclareVersion{times}{T1}{ptm}{m}{n}
-\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale]
-\begin{document}
-\newcommand\TEST[1]{\MTversion{#1}%
-\begin{multicols}{2}
-\hbox to\columnwidth{\hbox to\columnwidth{\hfil
- $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}}
- \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ }
- \centerline{ $0123456789$ }
- \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ }
-\columnbreak
- \centerline{ abcdefghijklmnopqrstuvwxyz }
- \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ }
- \centerline{ 0123456789}
- \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
- \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 }
-\end{multicols}}
-\begin{multicols}{2}
- \centerline{\textbf{math mode}}
-\columnbreak
- \centerline{ \textbf{text} }
-\end{multicols}
-\TEST{DejaVu}\TEST{Verdana}\TEST{times}\TEST{Andale}
-\TEST{Arial}\TEST{bold}\TEST{normal}
-\end{document}
+\renewcommand\MTcommandlettere{\mathsf{\MTmathcharlettere}}% not \mathsf{e}!
\end{verbatim}
-And now the same thing with fonts available on Mac OS X:
+In this case we could do the simpler approach with \cs{textsf}, which works
+as it will then typeset the |e| in text mode, not math mode.
\begin{verbatim}
-\documentclass{article}
-\usepackage[hscale=0.8]{geometry}
-\usepackage{multicol}
-\usepackage[no-math]{fontspec}
-\usepackage{lmodern}
-\usepackage[subdued,italic]{mathastext}
-\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler]
-\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter]
-\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum]
-\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot]
-\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic]
-\begin{document}
- --- copy here the code from the previous example ---
-\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum}
-\TEST{Hoefler}\TEST{Typewriter}\TEST{bold}
-\end{document}
+\renewcommand\MTcommandlettere{\textsf{e}}% not \mathsf{e}!
\end{verbatim}
-% The test files which will be produced by running |latex| on
-% |mathastext.dtx| are more extent.
+This gives a priori the same result in our \mst context, which
+picks the font for \cs{mathsf} from the one used by \cs{textsf}, assuming here
+default configuration in the preamble following the loading of \mst.%
+%
+\footnote{This example simply reassigns \texttt{e} to another font, and one
+could use also the \LaTeX{} command \cs{DeclareMathSymbol} for this. But few
+\LaTeX{} users are familiar with its interface, and such an approach could
+cost adding an extra math symbol font, depending on what one wants to do.
+Besides \cs{DeclareMathSymbol} is a preamble-only command, which limits
+considerably its usability, forcing basically the change to apply to the whole
+document. Using the \mst interface via mathematically active characters opens
+up the possibility of arbitrary replacements, of local scope in the document
+body.}
-\subsection{Compatibility issues}\label{sec:compat}
-
-Compatibility issues (or just questions of who decides last) are naturally to
-be expected with packages dealing with the math setting; the fix is simply to
-load \mst last. And one should always load |amsmath| before \mst (this is
-especially true when using Unicode engines but applies in general as well).
-
-Any definition made in a package loaded before \mst of the font to be
-used for letters or for the common characters in the |ascii| basic range
-will be overruled by the loading of \mst (this includes the case
-when the earlier package had made the character `mathematically active').
-Conversely most of the set-up done by \mst may well be overruled by
-packages loaded later which do math related things.
-
-Starting with version |1.2|, \mst makes some characters `mathematically
-active' to achieve certain effects: automatic insertion of the italic
-corrections when using an upright text font in math, extended scope of
-the math alphabet commands which now apply to non-letter symbols (and
-also to math operator names, but this is much easier to achieve). And
-the (already mathematically active) right quote is modified to have some
-extra space added before the derivative glyph ${}'$.
-
-This is compatible with using \cs{label} and \cs{ref} in and outside of
-math mode. But a difficulty arises when some other package has made the
-character `globally active' everywhere in the document. The action of
-\mst is made anew at each mathematical inline or displayed formula. If
-it is detected that a character has been activated then nothing further
-will be done (so the \mst feature\footnote{italic correction insertion
- for the latin letters, receptivity to the math alphabet action for the
- other characters.} for that character is lost) \emph{except} if it
-appears that this activation was done by the Babel system. In that case
-\mst does not make the character mathematically active but it modifies
-in the appropriate manner the action of Babel for that character in math
-mode. Furthermore \mst makes the character mathematically
-\emph{inactive}.\footnote{only the characters
- {{;}\,{,}\,{:}\,{!}\,{?}\,{+}\,{\textendash}\,{=}\,{<}\,{>}\,{(}\,{)}\,{[}\,{]}\,*}
- mentioned in section \ref{sec:mathxx} as `difficult non letters' (and
- the right quote {'}) and
- the latin letters are concerned here; it seems highly unprobable that
- a latin letter ${\in}\{a\mbox{--}z,A\mbox{--}Z\}$ will have been made
- globally active (only letters never being used in command names are
- possible candidates), but \mst has been
- designed to cope with it, should it happen ...}
-
-Here is indeed some code that you should \textbf{not} try at
-home:
+
+It is recommended in general to add an extra pair of braces
+to avoid problems when used with |_| and |^|. Let's give an other example and
+demonstrate its output:
\begin{verbatim}
- \documentclass{article}
- \usepackage[french]{babel}
- \usepackage{mathtools}\mathtoolsset{centercolon}
- \begin{document}
- $:$
- \end{document}
+\[
+\renewcommand\MTcommandlettere{{\mathcolor{blue}{\mathsf{\MTmathcharlettere}}}}%
+abcde^efgh
+\]
\end{verbatim}
-\fbox{DO NOT DO THIS AT HOME}\thinspace: it creates an infinite
-loop.\footnote{This seems to still be the case with Babel |3.9f| and
- frenchb.ldf |2.6e|, as tested on Sep. 2, 2013. Again tested with up-to-date
- TL2015 Jan. 15, 2016 with same result.} This is due
-to the fact that the colon is simultaneously active (this is made by
-\ctanpkg{babel-french} at begin document) and mathematically active (done by
-\ctanpkg{mathtools} in the preamble). The interaction gives an infinite loop. Such a
-situation will be cured by \mst, even loaded before \ctanpkg{mathtools},
-\emph{if} use is made of \cs{MTnonlettersobeymathxx}. At each math formula
-\mst will detect that Babel has activated the colon, and will cancel the
-mathematical activation (the precise definition done by \ctanpkg{mathtools} was
-already lost at begin document due to overwriting by \ctanpkg{babel} but the fact that
-the character was mathematically active remained true).
+\MTversion{times}
+\[
+\renewcommand\MTcommandlettere{{\mathcolor{blue}{\mathsf{\MTmathcharlettere}}}}%
+abcde^efgh
+\]%
+\MTversion{normal}%
+As this document is in subdued mode, we had, to show the effect, to
+switch temporarily to some math version activating \mst, and we used here a
+|times| math version with Times and Helvetica clones.
+
+If you redefine \cs{MTcommandlettere} as described in this section the optional extra
+math skips added before or after via \MTsetmathskips will be lost, as well
+as the automatic italic correction |\/| added by \mst for an upright font, and it
+is up to the redefinition of \cs{MTcommandlettere} to do the job.
+
+The explanations above apply to any (ascii) Latin letters \meta{ascii-letter}
+with associed macros \cs{MTcommandletter}\meta{ascii-letter} and ``naked''
+symbol command \cs{MTmathcharletter}\meta{ascii-letter}.
+
+With option activedigits you can even extend the game to digits. The
+``raw'' digit symbol is kept as a math symbol control sequence
+\cs{MTmathchardigit}\meta{y} where \meta{y} stands for the Roman version of
+the digit: empty
+for $0$, then |i|, |ii|, etc... until |ix|. The macro to redefine for special
+effect is \cs{MTcommanddigit}\meta{y}. Example:
+\begin{verbatim}
+\[
+\renewcommand\MTcommanddigit{{\MTmathchardigit^{\mathcolor{blue}{1}}
+ _{\mathcolor{red}{2}}}}%
+\renewcommand\MTcommanddigiti{{\boxed{\mathbf{\MTmathchardigiti}}}}
+0^0_0
+\]
+\end{verbatim}
+\MTversion{times}
+\[
+\renewcommand\MTcommanddigit{{\MTmathchardigit^{\mathcolor{blue}{1}}
+ _{\mathcolor{red}{2}}}}%
+\renewcommand\MTcommanddigiti{{\boxed{\mathbf{\MTmathchardigiti}}}}
+0^0_0
+\]%
+\MTversion{normal}%
+(\cs{boxed} is from \ctanpkg{amsmath}) Let's hope you find better
+usage... recall that you can't use digit $0$ in its redefinition but must use
+\cs{MTcommanddigit}. But you can of course use other digits... except if
+their definitions use the digit $0$ rather than the non-active symbol control
+sequence \cs{MTmathchardigit}.
+See also \MTmathactiveletters and \MTmathactivedigits.
- So far I have briefly described the problem of document active
- characters (see the test file |mathastexttestalphabets.tex| for more
- explanations and illustrations, and the commented source code of the
- package). Pure mathematical activation revealed an incompatibility of
- another type with \ctanpkg{amsmath}. To fix it, \mst now replaces
- an inner macro of \ctanpkg{amsmath}
- (\cs{resetMathstrut@}) with its own version.\\
- \null\hspace{1cm}\fbox{Always load \ctanpkg{amsmath} before \mst.}\\
- Actually this last commandment was already made necessary by the use of the
- text endash to represent the minus sign in math mode, and, especially for
- Unicode engines, some aspects of the \cs{DeclareMathOperator} macro from
- \ctanpkg{amsmath}.
-
- \begin{framed}\kern-.75\baselineskip
- \begin{framed}
- \textbf{Important!} As is mentioned in the section \ref{sec:mathxx},
- after command \MTnonlettersobeymathxx, characters such as
- |?|, or |[|, now represent \emph{two} `tokens' and this will utterly
- confuse \TeX{} if some precautions are not taken. Examples: |$0^+$| or
- |$x\mathrel?y$| or |$R^*$| \emph{must} be input now as |$0^{+}$|
- and, respectively,
- |$x\mathrel{?}y$| or |$R^{*}$|. This is why the package does
- \MTnonlettersdonotobeymathxx by default.
- \end{framed}\vskip-.75\baselineskip
- \end{framed}
- One thing to take note of is that this mechanism uses the \cs{everymath}
- and \cs{everydisplay}, so if it is needed to add to these \TeX{} `token
- lists' some additional things this should be done in a way preserving the
- former contents.
-
- If one issues (after |\begin{document}|) |\everymath={}| and
- |\everydisplay={}| this annihilates not only all the \mst (evil ?) doings
- with math active characters but also everything else some other package
- might have put in these token registers, so it is better, if the need
- arises to cancel the math activation of characters done by \mst to use the
- command \MTeverymathoff, which does all of
- \MTmathoperatorsdonotobeymathxx, \MTnonlettersdonotobeymathxx (already
- default), \MTmathstandardletters, \MTnormalprime, and
- \MTnormalasterisk. This is supposed to be used in a group or
- environment (as there is no |\MTactivemathon|). It must be used prior to
- entering math mode.
-
- \begin{framed}
- \textcolor{magenta}{\bfseries New with 1.3i:} \mst patches |\url| of
- packages \ctanpkg{url} and \ctanpkg{hyperref}, and also |\nolinkurl|, to force them
- to do automatically \MTeverymathoff. Indeed they use math mode, and it
- is better to turn \mst off for their dealings.
- \end{framed}
-
% 2 septembre 2013; finalis 22:58
% Mardi 19 dcembre 2023: l'utilisation de bleu alors que ce n'est
@@ -4503,7 +4217,7 @@ option).
\item \mstcmd{Mathastext} (or \mstcmd{mathastext}) reinitializes \mst: it sets the
fonts used in math mode (in versions |normal| and |bold|) for letters,
digits and a few ascii symbols to the \emph{current} defaults of encoding,
- family, series and shape.\footnote{\texttt{\char92Mathastext} updates also
+ family, series and shape.\footnote{\csb{Mathastext} updates also
the font and shapes for the Greek letters (|LGRgreek| option), and the
skips to be inserted after the symbols $\oldforall$ and $\oldexists$,
see \emph{infra.}} Both the normal and bold math version are modified by
@@ -4517,7 +4231,7 @@ option).
the \LaTeX{} \cs{DeclareMathVersion} macro. \emph{Do not use}
|\string\Mathastext[foo]| \emph{with
|foo| equal to ``normal'' or ``bold'';} this is already taken care of by the
- initial loading of the package or a later command \cs{Mathastext}
+ initial loading of the package or a later command \csb{Mathastext}
without any optional argument. And it will be rejected.}
\item %\textbf{inheritance:}
\csb{Mathastext}\oarg{version\_name}\oarg{parent\_name}
@@ -4553,7 +4267,7 @@ option).
\mstcmd{MTlettershape}\marg{sh}.%
%
\footnote{These commands exist also with
- long names: \texttt{\char92Mathastextencoding},
+ long names: \csb{Mathastextencoding},
etc\dots{} The same applies to the other commands
mentioned in this section.}
%
@@ -4597,7 +4311,7 @@ optional argument) will these commands have any real effect.
of the time of loading the package.} else letters will
have the same shape as used for digits and operator-names.
- Another optional argument may be used as last argument.\RightNote{1.3c}
+ Another optional argument may be used as last argument.\RightNote{\mstrelease{1.3c}}
Similarly as its
use with \Mathastext this makes the declared math version inherit, for
things not modified by \mst like large symbols, the font set up of the math
@@ -4645,7 +4359,7 @@ optional argument) will these commands have any real effect.
redefined). In the absence of the optional argument, the mandatory one is
used. The versions \emph{must} be either |normal|, or |bold|, or previously
declared ones via \Mathastext or \MTDeclareVersion.
- \item the starred variant\RightNote{1.3c} does the math set-up, but changes \emph{nothing} to
+ \item the starred variant\RightNote{\mstrelease{1.3c}} does the math set-up, but changes \emph{nothing} to
the text fonts (see \autoref{sec:mathversions} for a description of the math
set-up, which summarizes
what is done additionally to only using \LaTeX{}'s |\mathversion|).
@@ -4659,7 +4373,7 @@ optional argument) will these commands have any real effect.
option the package checks separately the letter shape for lowercase and
uppercase.
- \RightNote{1.3j}\MTversion also does \MTexistsdoesskip,
+ \RightNote{\mstrelease{1.3j}}\MTversion also does \MTexistsdoesskip,
\MTforalldoesskip, and also \MTprimedoesskip,
\csb{MTmathoperatorsobeymathxx}, except under the |subdued| option for
\emph{normal} and \emph{bold}, in which case it does the opposite actions.
@@ -4668,17 +4382,13 @@ optional argument) will these commands have any real effect.
the |italic| option) combining the |h| letter and the \={ } accent from the
\mst font. Note that \cs{mathrm}|{\hbar}| and \cs{mathbf}|{\hbar}| will
work and that \cs{hbar} does scale in subscripts and exponents. Since
- |1.3u|, this is a priori compatible with all 8bits text font
- encodings\RightNote{1.3u} supporting the |\=| text accent in
+ \mstrelease{1.3u}, this is a priori compatible with all 8bits text font
+ encodings\RightNote{\mstrelease{1.3u}} supporting the |\=| text accent in
the LaTeX way.%
%
-\footnote{\RightNote{1.3u}The horizontal skips for letter |h| from
- \cs{MTsetmathskips} are ignored for \cs{hbar}.% Formerly, a positive
- % ``before'' skip was not properly taken into account for the horizontal
- % positioning of the accent and thus gave a bad result. The user can extend
- % the package \cs{hbar} definition to add skips.
-}
-\footnote{\RightNote{1.3u}The \cs{hbar} redefinition is canceled in normal and
+\footnote{\RightNote{\mstrelease{1.3u}}The horizontal skips for letter |h| from
+ \csb{MTsetmathskips} are ignored for \cs{hbar}.}
+\footnote{\RightNote{\mstrelease{1.3u}}The \cs{hbar} redefinition is canceled in normal and
bold math versions under the |subdued| option.}
\item \mstcmd{fouriervec}: this is a |\vec| accent taken from the Fourier font;
@@ -4687,7 +4397,7 @@ if option fouriervec.
\item \mstcmd{pmvec}: this provides a poor man \cs{vec} accent command, for
upright letters. It uses the right arrow. Does not change
size in subscripts and exponents.
-\item \RLNote{new description:}{1.3za}\mstcmd{Mathnormal}, \mstcmd{Mathrm},
+\item \RLNote{new description:}{\mstrelease{1.3za}}\mstcmd{Mathnormal}, \mstcmd{Mathrm},
\mstcmd{Mathbf}, \mstcmd{Mathit}, \mstcmd{Mathsf}, \mstcmd{Mathtt}: they use the
\mst-ified fonts. By default, \mstcmd{mathnormal}, \mstcmd{mathrm},
\mstcmd{mathbf}, \mstcmd{mathit}, \mstcmd{mathsf}, \mstcmd{mathtt} are redefined
@@ -4707,7 +4417,7 @@ size in subscripts and exponents.
This command is also made available under subdued option in
the ``normal'' and ``bold'' math versions, as \LaTeX\ does not define it a
priori, contrarily to \mathbf and other math alphabet commands.
- \item \RightNote{1.3x}\mstcmd{mathgreekup}: math alphabet, only available
+ \item \RightNote{\mstrelease{1.3y}}\mstcmd{mathgreekup}: math alphabet, only available
under LGRgreek (or LGRgreeks) option, which gives access to `upright'
Greek letters (picked up from a font available in |LGR|-encoding). Note
that the package also defines \cs{alphaup}, \dots, \cs{piup}, \dots\
@@ -4725,7 +4435,7 @@ size in subscripts and exponents.
support as long as suitable usage of \MTgreekfont later on configures a
suitable font).
- \RightNote{1.3za}Also \mstcmd{mathgreekupbold}.
+ \RightNote{\mstrelease{1.3za}}Also \mstcmd{mathgreekupbold}.
\begin{footnotesize}
These math alphabets are also available under subdued option in the
@@ -4764,14 +4474,14 @@ size in subscripts and exponents.
the subdued option anyhow.\par
\end{footnotesize}
-\item \RightNote{1.3x}\mstcmd{mathgreekit}: math alphabet, only available
+\item \RightNote{\mstrelease{1.3y}}\mstcmd{mathgreekit}: math alphabet, only available
under LGRgreek (or LGRgreeks) option, which gives access to `italic'
Greek letters (picked up from a font available in |LGR|-encoding). The
actual shape is configurable via re-defining \MTgreekitdefault and then
redeclaring the math version via \Mathastext (with optional argument if
for a math version other than the ``normal'' one), or \MTDeclareVersion.
- \RightNote{1.3za}Also \mstcmd{mathgreekitbold}.
+ \RightNote{\mstrelease{1.3za}}Also \mstcmd{mathgreekitbold}.
\begin{footnotesize}
See the discussion of \mathgreekup for some \TeX\ hacker level
@@ -4782,13 +4492,6 @@ size in subscripts and exponents.
font for use in math mode. By default, |\imath| and |\jmath| are redefined to use
them. Since \texttt{1.3t}, these macros obey the \texttt{subdued}
regime.
-%
-% \footnote{\RightNote{1.3t}Formerly (i.e.\@ since \texttt{1.12}) \mst
-% redefined the \texttt{\string\i} and \texttt{\string\j} as robust
-% commands usable both in text and math mode and using the above macros
-% in the latter. I have decided it wasn't such a good idea and there is
-% from now on \texttt{1.3t} no such redefinition of \texttt{\string\i}
-% and \texttt{\string\j}!}
\item \mstcmd{MathEuler}, \mstcmd{MathEulerBold}: math alphabets to access
all the glyphs of the Euler font, if option |eulergreek| (or
|eulerdigits| was passed to the package.
@@ -4811,14 +4514,14 @@ all the glyphs of the Euler font, if option |eulergreek| (or
\cs{let}\cs{varepsilon}$=$\cs{epsilon}, etc\dots,
in case only the `variant' form of the letter was used
in the documents.
-\item \hypertarget{symbolmisc}{Miscelleneous mathematical symbols} from the
+\item \hypertarget{symbolmisc}{Miscellaneous mathematical symbols} from the
postscript Symbol font are made available (or replaced) by option
symbolmisc.\footnote{option \blueit{asterisk} is also required to treat the
$*$.
Recall from \autoref{sec:mathxx} that the asterisk in math mode (also
when using the control sequence \cs{ast}) appears then to \TeX{} to be
a composite object.}
- \makeatletter\let\mst@doasterisk\mst@@doasterisk\makeatother They are
+ \MTactiveasterisk They are
\cs{prod}~$\prod$ \cs{sum}~$\sum$ \cs{implies}~$\implies$
\cs{impliedby}~$\impliedby$ \cs{iff}~$\iff$ \cs{shortiff}~$\shortiff$
\cs{to}~$\to$ \cs{longto}~$\longto$ \cs{mapsto}~$\mapsto$
@@ -4864,64 +4567,106 @@ comments).
The timing for actions of \mst falls into three cases:
\begin{enumerate}
-\item things done during the loading of the package, or delayed to
- |\AtBeginDocument|,
+\item things done by \mst itself during its loading (some are delayed to
+ |\begin{document}|),
\item things done as the result of user commands, either in the preamble or in
- the body of the document,
+ the body of the document, (but note that some commands if used in preamble
+ have a real effect only at the time of |\begin{document}|),
\item things done everytime math mode is entered.
\end{enumerate}
-The second category overlaps with the others, as the (preamble) use of some
-commands can have either immediate effect or only trigger some actions in
-|\AtBeginDocument| or perhaps only influence the things done later by \mst
-each time math mode is entered.
-
-The third category deserves some brief additional comments: it mainly (but not
-exclusively) regards the ``math activation'' of characters, and conversely all
-``math activations'' fall into this category. The package re-checks each time
-math mode is entered if some characters have been made in-between catcode
-active, or math active, and takes appropriate decisions: one important aspect
-of this issue is that |babel|'s mechanism for activating character was not, last
-time I checked, very robust against math active characters. I now checked
-again (on January 15, 2016) that
-\begin{verbatim}
- \documentclass{article}
- \usepackage[french]{babel}
- \usepackage{mathtools}\mathtoolsset{centercolon}
- \begin{document}
- $:$
- \end{document}
-\end{verbatim}
-creates an infinite loop (see section \ref{sec:compat} where this was
-mentioned already, some years ago). Thus \mst has (since |1.2e 2013/01/10|) a
-somewhat elaborate mechanism related to these issues (see the code comments),
-installed into the list of things done by \TeX\ systematically each time
-it enters math mode. For some legacy reason the package also puts into
-this list a few other things which could arguably be done elsewhere once and
-for all. The command \csb{MTeverymathoff} cancels all actions done by
-\mst.
+At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} a very significant
+change took place: the last category, the one of things done everytime math mode
+is entered, has become \emph{empty}.%
+%
+\footnote{There ia always an exception to a good
+rule, and here it is: only with \LuaLaTeX{} engine, a certain
+command is executed as part of \cs{everymath}. For details see
+\csb{MTfixfonts}.}
+
+The everymath option added at \mstrelease{1.4} re-establishes the legacy
+behavior. Except for ascii letters: they will not even then be made
+mathematically active at each entrance in to math mode, but only once at time
+of package loading (if not subdued) and also when using \MTversion (for
+non-subdued math versions).
+
+\begin{shaded*}
+Under everymath option some commands described here as being usable
+everywhere have in fact an effect only if used externally of math mode.
+The documentation is only accurate for the default \mstrelease{1.4}
+configuration, not for the legacy one as re-enacted by everymath.
+\end{shaded*}
+
+\subsubsection{Expert commands which are preamble-only}
+
+\begin{enumerate}[label=$\bullet$, leftmargin=1em]
+\item \mstcmd{MTgreekupdefault}:\RightNote{\mstrelease{1.3y}} a command with
+ no argument whose expansion specifies, under LGRgreek regime, the
+ shape for the `|up|' Greek control sequences (and for the no-postfix
+ Greek control sequences under upgreek option) in all \mst math
+ versions declared \emph{afterwards} via \cs{Mathastext} or
+ \cs{MTDeclareVersion}. The a priori default for this shape is `|n|'
+ (without the quotes). See
+ \autoref{sec:newgreek}.
+
+ This command can also be defined \emph{prior} to loading the package,
+ as the package itself only does:
+ \centeredline{|\providecommand*\MTgreekupdefault{n}|}
+
+\item \mstcmd{MTgreekitdefault}:\RightNote{\mstrelease{1.3y}} a command with
+ no argument whose expansion specifies, under LGRgreek regime, the
+ shape for the `|it|' Greek control sequences (and for the no-postfix
+ Greek control sequences under itgreek option) in all \mst math
+ versions declared \emph{afterwards} via \cs{Mathastext} or
+ \cs{MTDeclareVersion}. The a priori default for this shape is `|it|'
+ (without the quotes).
+ See \autoref{sec:newgreek}.
+
+ This command can also be defined \emph{prior} to loading the package,
+ as the package itself only does:
+ \centeredline{|\providecommand*\MTgreekitdefault{it}|}
+\end{enumerate}
+
\subsubsection{Expert commands usable everywhere}\label{sec:cmds}
\begin{enumerate}[label=$\bullet$, leftmargin=1em]
+ \item \mstcmd{MTcustomgreek}:\RightNote{\mstrelease{1.3d}} in case \mst has been loaded with one of its
+ Greek related options, this activates the corresponding
+ customization of Greek letters in math mode. It is issued
+ automatically by the package in the preamble (except if loaded with
+ |subdued| option) and at each switch of math version via
+ |\MTversion| or |\MTversion*| (except for the normal and bold math
+ versions in subdued mode). Also available as
+ |\Mathastextcustomgreek|. May be used even inside of math mode.
+
+ \item \mstcmd{MTstandardgreek}:\RightNote{\mstrelease{1.3d}} in case \mst was loaded with one of the Greek
+ related options this command reverts the customization, it resets the Greek
+ letters to their definitions in force at package loading time. Can be used
+ in the preamble, but is mainly for the document body (may even be used
+ inside math mode ...). Done automatically
+ under the |subdued| option when switching to the normal or bold math
+ version. Also available as |\Mathastextstandardgreek|.
+
+
\DeleteShortVerb{\|}%
\item \mstcmd{MTsetmathskips}\marg{a-z|A-Z}\marg{muglue\_before}\marg{muglue\_after}:
%
\MakeShortVerb{\|}%
%
- is\RightNote{1.3a} used to specify extra skips (or rather mu glue) to be
+ is\RightNote{\mstrelease{1.3a}} used to specify extra skips (or rather mu glue) to be
inserted in math mode, before and after a letter. The rationale is that
standard text fonts used in math mode may sometimes cause glyph (near-)
collisions with math symbols, as \TeX{} has some implicit expectations on the
design of fonts for math letters.
- \begin{framed}
+ \begin{snugshade}
These extra skips around letters are set at their natural width and do not
add any stretchability or shrinkability to the math formula as a whole,
nor do they result in extra potential break points.
- \end{framed}
+ \end{snugshade}
Random (silly) examples:
\centeredline{|\MTsetmathskips{x}{\medmuskip}{\thickmuskip}|} \centeredline
@@ -4941,19 +4686,19 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by
\makeatother
\end{verbatim}
- \begin{framed}
+ \begin{snugshade}
\emph{\color{magenta}\bfseries Starting with |v1.3i|:} the extra skips are
\emph{not} applied to the letters within the scope of math alphabet
commands, or the letters from operator names (pre-defined or user
declared).
- \end{framed}
+ \end{snugshade}
{\footnotesize
Note that contrarily to the \csb{MTexistsskip}, \csb{MTforallskip}, and
\csb{MTprimeskip} commands described next, these extra skips (which may be
specified in the preamble) are not recorded in the definition of the math
- version (as defined via \Mathastext with its optional argument or via
- \MTDeclareVersion). The declared skips hold thoughout the document
+ version (as defined via \csb{Mathastext} with its optional argument or via
+ \csb{MTDeclareVersion}). The declared skips hold thoughout the document
until modified or canceled, independently of math versions (of
course, \mst cancels the skips in the normal and bold math versions if
package option \blueit{subdued} was used).\par}
@@ -4967,18 +4712,15 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by
cancels the skips
for that letter (they are not set to |0mu| but completely removed).
-
- % setting the skips to |0mu| which prevents formation of ligatures
- % when the letter is used inside a \cs{mathbf} for example). Example (using a
- % version with upright Latin Modern): \centeredline
- % {|\MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$|}
- % gives: \begingroup\MTversion{upright}%
- % \MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$\endgroup.
- % The ligature was correctly formed.
-
The argument may be a macro (or any expandable code) expanding to a letter.
+\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalexists}, \mstcmd{MTexistsdoesskip}: the
+ latter (done by default if not |subdued|, and also on each use of
+ |\MTversion| in the body of the document) makes it so that $\oldexists$
+ takes into account the math glue as specified by \MTexistsskip. The
+ former is its opposite.
+
\item \mstcmd{MTexistsskip}\marg{math glue}: specifies the amount of skip or more
generally glue to put after each $\oldexists$ math symbol. Indeed, upright
letters (or digits for that matter) often appear to be positioned a bit too
@@ -4991,17 +4733,13 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by
version (and subsequent ones). One may also use the command at any time in
the document. In the case of the option |subdued|, the skip is canceled in
the \emph{normal} and \emph{bold} math versions.
-%
-% \footnote{\RightNote{1.3j}%
-% Formerly, it was set to |0mu|.}
-%
In the case of the option |italic|, the
default skip is set to zero.
-\item \RightNote{1.3j}\mstcmd{MTnormalexists}, \mstcmd{MTexistsdoesskip}: the
+\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalforall}, \mstcmd{MTforalldoesskip}: the
latter (done by default if not |subdued|, and also on each use of
- |\MTversion| in the body of the document) makes it so that $\oldexists$
- takes into account the math glue as specified by \csb{MTexistsskip}. The
+ |\MTversion| in the body of the document) makes it so that $\oldforall$
+ takes into account the math glue as specified by \MTforallskip. The
former is its opposite.
\item \mstcmd{MTforallskip}\marg{math glue}: the default is to add a |.6667mu| math
@@ -5012,138 +4750,191 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by
be declared} math versions. In the case of the option |subdued|, the skip
is canceled in the \emph{normal} and \emph{bold} math
versions.
-%
-%\footnote{\RightNote{1.3j}Formerly, it was set to |0mu|.}
In the
case of the option |italic|, the default skip is zero for all math versions.
One may use the command at any location in the document.
-\item \RightNote{1.3j}\mstcmd{MTnormalforall}, \mstcmd{MTforalldoesskip}: the
- latter (done by default if not |subdued|, and also on each use of
- |\MTversion| in the body of the document) makes it so that $\oldforall$
- takes into account the math glue as specified by \csb{MTforallskip}. The
- former is its opposite.
+\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalprime},
+ \mstcmd{MTprimedoesskip}: the latter (done by default if not |subdued|,
+ and also on each use of \csb{MTversion} in the body of the document except
+ for the subdued \emph{normal} and \emph{bold} math version) makes it so
+ that $'$ takes into account the math glue as specified by
+ \MTprimeskip. The former is its opposite. In all cases the right quote
+ |'| is a mathematically active character throughout the document producing
+ ${}'$ as is the default in \TeX, it is only its meaning which changes to
+ include or not an extra skip.
+
+ \begin{footnotesize}
+ Even though \MTprimedoesskip is not done in the subdued case, it is
+ \emph{not} a no-op even then in the preamble or in the \emph{normal} and
+ \emph{bold} math versions.\par
+ \end{footnotesize}
-\item \mstcmd{MTprimeskip}\marg{math glue}: the default is to add a |0.5mu| skip
- before the derivative glyph, except for the |italic| option. In the case of
- the option |subdued|, the skip is canceled in the \emph{normal} and
+\item \mstcmd{MTprimeskip}\marg{math glue}: specifies the amount of math
+ skip to add before the derivative glyph. The default iniitial value is
+ |0.5mu|, except with the |italic| option where it is |0mu|. In the case
+ of the option |subdued|, the skip is canceled in the \emph{normal} and
\emph{bold} math versions.
-%
-%\footnote{\RightNote{1.3j}Formerly, it was set to
-% |0mu|.}
-% obsolete et mme faux avec 1.3j
-% \footnote{if \cs{begin\{document\}} is not followed
-% with \cs{MTversion\{normal\}}, the latest values set in the preamble by
-% these commands are used at the beginning of the document,
-% even under option \texttt{subdued}.}
+\item \mstcmd{MTnormalasterisk}, \mstcmd{MTactiveasterisk}: the latter will
+ use for |*| and |\ast| the text font asterisk, suitably lowered; the former
+ if used in the preamble tells \mst to not modify the non-\mst situation, or
+ if used in the body to revert to it. Both are no-op's in absence of option
+ asterisk.
+
+\begin{footnotesize}
+ A legacy feature is that \MTactiveasterisk is \emph{not} a no-op in
+ subdued \emph{normal} or \emph{bold} math versions, and does let the
+ asterisk obey the \MTlowerast configuration, if used explicitly by user
+ (even in the preamble).
+
+ At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} \mst checks at
+ |\begin{document}| (or each time \MTaciveasterisk is made use of) if
+ * is a Babel shorthand (which I far as I know is the case of no
+ language) or is already mathematically active. In the latter case the
+ * is not modified in math mode; and it is not modified either if
+ found to be catcode active but not a \ctanpkg{babel} shorthand. In
+ contrast, the \cs{ast} will always be set to obey \MTlowerast
+ configuration after \MTactiveasterisk.
+
+\end{footnotesize}
-\item \mstcmd{MTlowerast}\marg{dimen}: a \cs{raisebox} command is
+\item \mstcmd{MTlowerast}\marg{dimen}: under option asterisk
+ a \cs{raisebox} command is
used to lower the text asterisk to produce a reasonable math
asterisk. The package uses this command initially with
argument |0.3\height|, this will have to be fine-tuned for
each given text font but worked out ok with the fonts we
- tried. Note that the dimension argument will be used also in
+ tried. The dimension argument will be used also in
sub-scripts and sub-sub-scripts, so it is best not to use an
- absolute dimension.
+ absolute dimension. The dimension specification is for text
+ it can not be with |mu| unit.
\item \mstcmd{MTmathoperatorsobeymathxx}, \mstcmd{MTmathoperatorsdonotobeymathxx}: the
former is done by default, it makes operator names obey math alphabets. See
- also section \ref{sec:mathxx}. This functionality \emph{does
+ also \autoref{sec:mathxx}. This functionality \emph{does
{\normalfont\bfseries not} rely}
on ``math active characters''. Automatically issued by each \cs{MTversion},
except under option |subdued| when switching to \emph{normal} or \emph{bold}.
- \item \mstcmd{MTcustomgreek}:\RightNote{1.3d} in case \mst has been loaded with one of its
- Greek related options, this activates the corresponding
- customization of Greek letters in math mode. It is issued
- automatically by the package in the preamble (except if loaded with
- |subdued| option) and at each switch of math version via
- |\MTversion| or |\MTversion*| (except for the normal and bold math
- versions in subdued mode). Also available as
- |\Mathastextcustomgreek|. May be used even inside of math mode.
+\item \mstcmd{MTmathactiveletters}:\RightNote{\mstrelease{1.3}}
+ `math activation' of all ascii Latin
+ letters. This is done by the package automatically except under the
+ subdued option.
- \item \mstcmd{MTstandardgreek}:\RightNote{1.3d} in case \mst was loaded with one of the Greek
- related options this command reverts the customization, it resets the Greek
- letters to their definitions in force at package loading time. Can be used
- in the preamble, but is mainly for the document body (may even be used
- inside math mode ...). Done automatically
- under the |subdued| option when switching to the normal or bold math
- version. Also available as |\Mathastextstandardgreek|.
-\end{enumerate}
-
-\subsubsection{Expert commands which are preamble-only}
-
-\begin{enumerate}[label=$\bullet$, leftmargin=1em]
-\item \mstcmd{MTgreekupdefault}:\RightNote{1.3x} a command with
- no argument whose expansion specifies, under LGRgreek regime, the
- shape for the `|up|' Greek control sequences (and for the no-postfix
- Greek control sequences under upgreek option) in all \mst math
- versions declared \emph{afterwards} via \cs{Mathastext} or
- \cs{MTDeclareVersion}. The a priori default for this shape is `|n|'
- (without the quotes). See
- \autoref{sec:newgreek}.
-
- This command can also be defined \emph{prior} to loading the package,
- as the package itself only does:
- \centeredline{|\providecommand*\MTgreekupdefault{n}|}
-
-\item \mstcmd{MTgreekitdefault}:\RightNote{1.3x} a command with
- no argument whose expansion specifies, under LGRgreek regime, the
- shape for the `|it|' Greek control sequences (and for the no-postfix
- Greek control sequences under itgreek option) in all \mst math
- versions declared \emph{afterwards} via \cs{Mathastext} or
- \cs{MTDeclareVersion}. The a priori default for this shape is `|it|'
- (without the quotes).
- See \autoref{sec:newgreek}.
-
- This command can also be defined \emph{prior} to loading the package,
- as the package itself only does:
- \centeredline{|\providecommand*\MTgreekitdefault{it}|}
-\end{enumerate}
-
-\subsubsection{Expert commands usable only outside of math mode}\label{sec:cmdsoutmath}
+ At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} its behavior was
+ modified significantly: instead of setting some toggle obeyed only at
+ entrance of math mode, it acts on the spot immediately.
+\begin{snugshade}
+ Formerly, this command was only a configuration toggle with no immediate
+ impact (and was not usable from inside math mode). Indeed, the \mst work of
+ mathematical activation was done (or not done) \emph{each time} math mode
+ was entered (if not in subdued), and the ascii letters kept standard
+ mathcodes outside of math mode.
+
+ The command now does the mathematical activation on the spot and the meaning
+ of the active shape of the ascii letters --- a priori undefined because
+ typesetting a document with an active ascii letter is near impossible, as no
+ \LaTeX{} command name used in the document can contain it --- is modified
+ here and then; but of course the catcodes are not modified only the
+ mathcodes are. Except if \mst is loaded with the subdued option, this
+ mathematical activation is executed already at package loading time.
+
+ If with the subdued option, the command is inactive in the preamble, as
+ well as in the \emph{normal} and \emph{bold} math versions. In all cases it
+ gets (re-)executed automatically when \MTversion is used for activating a
+ non-subdued math version.
-They are usable only from outside math mode because they act via turning on
-or off the execution, each time math mode is entered, of certain macros added
-by \mst to the \cs{everymath} and \cs{everydisplay} token list variables.
+ \begin{footnotesize}
+ The new situation may be dangerous if the document author makes a letter,
+ say |A|, catcode active at some point, with a definition of the active
+ state using |\string A|. As \mst has (earlier, in the preamble) set |A|
+ to be mathematically active as well, and as the \cs{string} changes
+ nothing to that, an infinite loop will be triggered by such an |A| in math
+ mode.
+
+ But, having an active ascii letter can only be in very localized portions
+ of a document, and only be authored by experts. The experts should
+ carefully make sure the mathcode of the letter is not active if they set
+ the catcode to active and let the active meaning use \cs{string} on the
+ letter itself, thus we can trust that the mathematical activation done
+ earlier by \mst is undone and there will be no problems.\par
+ \end{footnotesize}
-\begin{enumerate}[label=$\bullet$, leftmargin=1em]
+ This \mstrelease{1.4} change may thus need to be followed by some
+ adjustments in some quite special circumstances caused by some expert
+ interventions.
-\item \mstcmd{MTmathactiveletters}: activates the `math activation' of Latin
- letters. This is done by the package during loading, except under the
- |subdued| option.
-%
-% \footnote{\RightNote{1.3j}Formerly, it was also executed
-% from each \cs{Mathastext} in the preamble.}
- It is again executed in the
- body at each \cs{MTversion}, except under the |subdued| option when
- switching to the \emph{normal} or \emph{bold} math versions.
+ See \autoref{sec:mathskips} and \autoref{sec:ic} for the rationale of this
+ mathematical activation, and \autoref{ssec:hackingletters} for ways to
+ use it for other goals.
+\end{snugshade}
+ \begin{footnotesize}
+ If you do want mathematically active letters also in subdued \emph{normal}
+ or \emph{bold} math versions (to apply tricks such as those of
+ \autoref{ssec:hackingletters}) there is \cs{mst@mathactivateletters} which
+ does not check the subdued status.\par
+ \end{footnotesize}
+
+\item \mstcmd{MTmathstandardletters}:\RightNote{\mstrelease{1.3}}
+ turns off the mathematical active
+ ascii letters, i.e.\@ reverts their mathcodes to package font configuration.
+ Here ``standard'' only means
+ that the letters will not be mathematically active, but they are still under the
+ influence of \mst regarding the typeface they use, so they are only
+ ``standard'' from \mst point of view.
+
+ At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} its behavior was
+ modified: instead of setting some toggle obeyed only at entrance of math
+ mode, it acts on the spot immediately.
+ \begin{snugshade}
+ \MTmathstandardletters will not try to restore the meaning associated to
+ the catcode active variant of the letter token which may have been in place
+ at the time of \MTmathactiveletters. This meaning is not saved for
+ later reset.
+
+ \emph{Except} if the \emph{letter} was an active Babel-shorthand at the time
+ of \MTmathactiveletters, which is in fact almost impossible to achieve
+ via the \ctanpkg{babel} interface.
+
+ And if the letter was catcode-active due to user action,
+ \MTmathactiveletters will not have made it mathematically active, nor
+ will it have modified its active meaning. So the active meaning may get
+ overwritten only for a letter having a normal catcode at time of
+ \MTmathactiveletters but which for some reason has some meaning
+ associated to its catcode active variant.
+ \end{snugshade}
+
+\item \mstcmd{MTmathactivedigits}:\RLNote{new:}{\mstrelease{1.4}}
+ is a no-op except under option
+ activedigits. It then makes all digits mathematically active and is
+ executed during package loading, except if subdued. It is again executed
+ when entering any non-subdued math version in the document body. See
+ \autoref{ssec:hackingletters} for an example of use.
- The letters are made mathematically active\footnote{the |mathcode|'s are
- only modified at the time of execution of \cs{everymath},
- \cs{everydisplay}.} to insert the extra skips as specified by
- \csb{MTsetmathskips} (see section \ref{sec:mathskips}), and also possibly
- the italic corrections when using upright fonts (see section \ref{sec:ic}).
+ \begin{footnotesize}
+ If you do want mathematically active digits also in subdued \emph{normal}
+ or \emph{bold} math versions (to apply tricks such as those of
+ \autoref{ssec:hackingletters}) there is \cs{mst@mathactivatedigits} which
+ does not check the subdued status.\par
+ \end{footnotesize}
-\item \mstcmd{MTmathstandardletters}: cancels the `math activation' of the letters.
- Must be re-issued after each \csb{MTversion}, but see
- \csb{MTeverymathdefault}.
+\item \mstcmd{MTmathstandarddigits}:\RLNote{new:}{\mstrelease{1.4}}
+ a no-op except under option
+ activedigits. Under this option it resets the digits to their normal
+ mathcodes as configured by the package.
\item \mstcmd{MTicinmath}: this command is executed by default by \mst except in
case of option |subdued| or if the user chosen letter shape is oblique (|it|
or |sl|). It tells \mst to add italic corrections after all letters in math
mode, except within the scope of math alphabets.
-%
-% \footnote{\RightNote{1.3i}%
-% Formerly, italic corrections were added to the (non-oblique) letters of
-% \cs{mathnormal} arguments.}
- This command and the next ones in this item can be used in the preamble as
- well as in the body of the document (in case of |subdued| option, using the
- commands from within the preamble will remain without effect, as the
- document body will start in the subdued normal math version anyhow.) But
- each \cs{MTversion} in the body will re-emit \cs{MTicinmath} (in case of
+ This\RLNote{changed:}{\mstrelease{1.4}}
+ command and the next ones in this item can be used anywhere in the
+ document and even from inside math mode. In case of subdued option, using the
+ command from within the preamble remains without effect, as the
+ document body will start in the subdued normal math version anyhow.
+ Each \cs{MTversion} in the body reemits \cs{MTicinmath} (in case of
non-oblique letter shape), except if the
|subdued| option was used and the chosen math version is \emph{normal} or
\emph{bold}.
@@ -5153,54 +4944,38 @@ by \mst to the \cs{everymath} and \cs{everydisplay} token list variables.
{\footnotesize
- It may theoretically be used from inside math mode, but the included
- \MTmathactiveletters will have an effect only if issued prior to
- entering math mode.
+ The description above about the command not being executed if the letter
+ shape is italic or slanted is not quite right, as it refers only to the
+ act of inserting or not italic correction. The
+ \MTmathactiveletters component is always executed, however it will be a
+ no-op in |subdued| \emph{normal} and \emph{bold}.
\mstcmd{MTnoicinmath}: this command deactivates the package added
italic corrections. It can be used inside as well as outside
- of math mode (or in the preamble of the document).
-
- \mstcmd{MTICinmath}, \mstcmd{MTnoICinmath}: these commands activate the italic
- corrections only for the uppercase letters (but recall that \cs{MTicinmath}
- is done by default, thus this will typically have to follow
- \cs{MTnoicinmath}.)
-
-% obsolte 1.3i
- % Following some decision of the package author whose rationale has been
- % forgotten, afer \cs{MTICinmath} italic corrections for uppercase letters in
- % arguments to all math alphabets (\emph{i.e.} also \cs{mathnormal}) are
- % suppressed (with \cs{MTicinmath} the italic corrections are suppressed
- % inside the scope of math alphabets \emph{except} \cs{mathnormal}.)
- % No italic corrections are explicitly added inside arguments of math
- % alphabets.
+ of math mode (or in the preamble of the document). Note that it does not
+ deactivate the mathematical activation of the ascii letters. Use
+ \MTmathstandardletters for that.
+
+ \mstcmd{MTICinmath}, \mstcmd{MTnoICinmath}: only acts on the uppercase
+ letters. But recall that \cs{MTicinmath} is done by default, thus
+ using italic corrections only for uppercase needs to go via
+ \cs{MTnoicinmath} then \cs{MTICinmath}.
\mstcmd{MTicalsoinmathxx}: this command de-activates the de-activation of
the italic corrections inside the arguments to the math alphabet
- commands.
-% apart from \cs{mathnormal}.
+ commands.
It can be issued inside as well as outside of math mode. Will be effective
only if \MTicinmath or \MTICinmath is in force.
-% obsolte 1.3i
- % \footnote{it is provided
- % for the \mst defined math alphabet \cs{mathnormalbold} which
- % contrarily to \cs{mathnormal} is not treated apart from the other
- % math alphabets.}
To cancel its effect either enclose it in a group or
environment or re-issue \MTicinmath after it.
}
-\item \mstcmd{MTnormalasterisk}, \mstcmd{MTactiveasterisk}: the latter will use for |*|
- and |\ast| the text font asterisk, suitably lowered; the former tells \mst
- to not modify the \LaTeX\ default. Both are no-op without option
- asterisk.
-
\item \mstcmd{MTeasynonlettersobeymathxx}, \mstcmd{MTeasynonlettersdonotobeymathxx}: the
former is done by default, it makes characters \verb+.+, \verb+/+, \verb+|+,
\verb+\+, \verb+#+, \verb+$+, \verb+%+, and \verb+&+
(if not excluded by package options) obey math alphabet commands. See also
- section \ref{sec:mathxx}. This functionality does \emph{not} make the
+ \autoref{sec:mathxx}. This functionality does \emph{not} make the
characters ``math active'' (but it does modify |\mathcode|'s, naturally).
\item \mstcmd{MTnonlettersobeymathxx}, \mstcmd{MTnonlettersdonotobeymathxx}: the former
@@ -5213,105 +4988,110 @@ by \mst to the \cs{everymath} and \cs{everydisplay} token list variables.
it will have to be coded |$a^{!}$|. Hence, by default, the package does
\MTnonlettersdonotobeymathxx.
- \begin{framed}
- Under |subdued| option, \cs{MTnonlettersobeymathxx} effect is of course
- canceled in the \emph{normal} and \emph{bold} math versions; but please
- note that when switching back to a non-subdued math version it will be
- mandatory to issue again \cs{MTnonlettersobeymathxx} explicitly if its
- effect is to be re-activated.
-
- In particular, executing \cs{MTnonlettersobeymathxx} in the preamble or at
- the start of the document body serves nothing, because the document is in
- the subdued \emph{normal} math version regime then. It must thus be
- executed after the first usage of \cs{MTversion} switching to a
- non-subdued math version, and again on each successive exit from the
- \emph{normal} or \emph{bold} math versions.
- \end{framed}
-
\item \mstcmd{MTexplicitbracesobeymathxx}: extends an earlier \MTnonlettersobeymathxx
to also treat \verb|\{| and \verb|\}|. But then |\left\{|, |\right\}| must
be coded |\left\lbrace|, |\right\rbrace| rather. There is also
\mstcmd{MTexplicitbracesdonotobeymathxx}.
-\item \RightNote{1.3j}\mstcmd{MTnormalprime}, \mstcmd{MTprimedoesskip}: the latter (done by default if not
- |subdued|, and also on each use of \csb{MTversion} in the body of the document
- except for the |subdued| \emph{normal} and \emph{bold} math version)
- makes it so that $'$ takes into account the math glue as specified by
- \csb{MTprimeskip}. The former is its opposite. In all cases the right quote
- |'| is a mathematically active character producing ${}'$ as is the default
- in \TeX, it is only its meaning which changes to include or not an extra
- skip. For some (legacy) reason, this change of meaning is done anew
- by \mst each time math mode is entered. The commands of this item are thus
- no-op from inside math mode.
-
-
-\item \RightNote{1.3j}\mstcmd{MTeverymathdefault}: this hook is executed by
- \csb{MTversion}\marg{version\_name}, except under option |subdued|
- when switching to the \emph{normal} or \emph{bold} math versions. Its
+\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTeverymathdefault}: this hook is executed by
+ \csb{MTversion}\marg{version\_name} (but if under option |subdued|
+ and switching to the \emph{normal} or \emph{bold} math version its default
+ effect is overruled by an \MTeverymathoff executed after it). Its
default meaning is:
\begin{verbatim}
\MTactiveasterisk % this has no effect without option asterisk
\MTprimedoesskip % this makes prime glyph obey extra space
\MTeasynonlettersobeymathxx
- \MTicinmath % this does \MTmathactiveletters, hence also skips from
- % \MTsetmathskips are obeyed.
+ \MTicinmath % this does \MTmathactiveletters, hence the extra
+ % skips from \MTsetmathskips are obeyed.
+ \MTmathactivedigits % this is a no-op in absence of option activedigits
\MTfixfonts % only operant under LuaLaTeX.
\end{verbatim}
- {\footnotesize Notice that under |subdued| option, switching to the
+ {\footnotesize Under |subdued| option, switching to the
\emph{normal} or \emph{bold} version does \csb{MTeverymathoff} which
- includes \cs{MTnonlettersdonotobeymathxx}.
+ includes \MTnonlettersdonotobeymathxx.
The default
\MTeverymathdefault which is issued when going back to a
non-\emph{normal} or \emph{bold} math version doesn't do
- \cs{MTnonlettersobeymathxx}: thus it is up to the user to correct this if
- needed (no issue without |subdued| option).
+ \MTnonlettersobeymathxx: thus it is up to the user to correct this if
+ desired.
Notice also that \csb{MTversion}\marg{version\_name}, except for \emph{normal}
or \emph{bold} if |subdued| does \csb{MTforalldoesskip} and
\csb{MTexistsdoesskip}, which are not included in \cs{MTeverymathdefault}
-actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
+actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par
-\item \RightNote{1.3j}\mstcmd{MTeverymathoff}: does \MTnormalasterisk,
+At \mstrelease{1.4}, the name of this command diverges somewhat from its
+action as mathematical activation of ascii letters (or, optionally, of digits)
+will happen on the spot and not during \cs{everymath} or \cs{everydisplay}
+execution.\par
+}
+
+\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTeverymathoff}: does \MTnormalasterisk,
\MTnormalprime, \MTnonlettersdonotobeymathxx,
- \MTeasynonlettersdonotobeymathxx, \MTmathstandardletters and
+ \MTeasynonlettersdonotobeymathxx, \MTmathstandardletters,
+ \MTmathstandarddigits\RightNote{\mstrelease{1.4}} and
\MTdonotfixfonts.
- {\footnotesize \RightNote{1.3i}The commands
- |\url/\nolinkurl| of package |hyperref| and |url| from |url.sty| (which
+ Automatically done by \csb{MTversion}|{normal}| (or |{bold}|) under option |subdued|
+ (and
+ also \csb{MTnormalexists} and
+ \csb{MTnormalforall} are executed then).
+
+
+ {\footnotesize \RightNote{\mstrelease{1.3i}}The commands
+ |\url/\nolinkurl| of package |hyperref| and |\url| from |url.sty| (which
use math mode under the hood) are patched by \mst to do \MTeverymathoff
automatically: this is needed because \mst modifies anew some mathcodes
\emph{each time math mode is entered,} hence may overwrite to some extent
- the specific preparation done by |{url,hyperref}.sty|.
- % {\parfillskip0pt\hfill
- % \rlap{\kern10pt\textcolor{magenta}{\bfseries New! (1.3i)}}\par}
+ the specific preparations done by |{url,hyperref}.sty|.
+
+ \RightNote{\mstrelease{1.4}}However, in some cases it may be interesting to
+ be able to apply hacks as described in \autoref{ssec:hackingletters}.
+ You can use now \MTeverymathoff as a hook inside
+ |\url| and |\nolinkurl| commands. Perhaps redefine it (locally) to do
+ all of the above except \MTmathstandardletters and/or
+ \MTmathstandarddigits, and use the \autoref{ssec:hackingletters}
+ instructions to achieve special effects for some letters or digits in
+ the URLs rendered via |\url| and |\nolinkurl|.
+ \par
+ }
+
+\end{enumerate}
- Automatically done by \csb{MTversion} under option |subdued|
- if switching to the \emph{normal} or \emph{bold} math versions; and
- \csb{MTversion} then does also \csb{MTnormalexists} and
- \csb{MTnormalforall}.
-\par}
+\subsubsection{Expert commands usable only outside of math mode}\label{sec:cmdsoutmath}
+
+There is only one pair of commands here: \MTfixfonts and \MTdonotfixfonts.
+They are operant only under \LuaLaTeX{}. As \MTeverymathdefault and
+\MTeverymathoff use them, they arguably could have been listed here, but
+only for engine \LuaLaTeX{}.
\small
-\item \RightNote{1.3o}\mstcmd{MTfixfonts}: this is operant only under
+\begin{enumerate}[label=$\bullet$, leftmargin=1em]
+
+\item \RightNote{\mstrelease{1.3o}}\mstcmd{MTfixfonts}: this is operant only under
\LuaLaTeX{}. It has the effect that each time math mode is entered macro
\csb{MTfixmathfonts} will be executed. The latter forces so-called |base|
mode for the used text font in math mode, in an effort to (only partially,
see code comments) fix the fact that OpenType features such as Lining
Figures were in some cases not being applied in math mode when one uses text
fonts there (text fonts are declared by \LuaTeX+|luaotfload| to use |node|
- mode, which is non-functional in math.) It is invoked automatically by the
+ or |harf| mode, which are non-functional in math.) It is invoked automatically by the
package (except for |normal| and |bold| math versions under |subdued|
option), and in normal situations, there is no reason to use it directly.
+ \RLNote{changed:}{\mstrelease{1.4}}The hack was updated at \mstrelease{1.4}
+ in order to also handle fonts using |Renderer=HarfBuzz|.
+
% pas envie de perdre mon temps l-dessus. D'ailleurs peut-tre dj pour
% commencer bm ne fonctionne pas avec fontes OpenType.
% Notice (not tested) that package |bm| is presumably not compatible.
-\item \RightNote{1.3o}\mstcmd{MTdonotfixfonts}: cancels the job of
+\item \RightNote{\mstrelease{1.3o}}\mstcmd{MTdonotfixfonts}: cancels the job of
|\MTfixfonts|. Done automatically in subdued mode when in the |normal| or
|bold| math version; in normal contexts, there is no reason to use this
command. Only operant under \LuaLaTeX.
@@ -5321,17 +5101,19 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
\subsubsection{Expert commands usable only in math mode}
\begin{enumerate}[label=$\bullet$, leftmargin=1em]
-{\small
-\item\RightNote{1.3p}%
+
+\item\RightNote{\mstrelease{1.3p}}%
\mstcmd{MTfixmathfonts}: this used to be an internal package macro
- but it is given a public name at |1.3p| because I discovered that
+ but it is given a public name at \mstrelease{1.3p} because I discovered that
|$..\hbox{\mathversion{foo}$..$}..$| causes an
issue and one needs to invoke again \cs{MTfixmathfonts} \emph{after} the
\verb|\hbox|, for some reason. To be used \emph{only} under \LuaLaTeX{} and only for
such rare cases where it may be needed.\par
-}
+
\end{enumerate}
+\normalsize
+
\section{Package options}
\subsection{Summary of main options}
@@ -5388,7 +5170,8 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
roughly by themes. So, objectively, the best for the diligent reader is to
read thoroughly all descriptions.
\begin{enumerate}[label=$\bullet$, leftmargin=1em]
- \item \mstopt{basic}: only mathastextify letters and digits.
+ \item \mstopt{basic}: only mathastextify (ascii) letters and digits. Can
+ be combined with either nodigits or noletters.
\item \mstopt{subdued}: acts in a subdued way, which means that the \LaTeX\
``normal'' (default) and ``bold'' (triggered by \cs{boldmath} or
\cs{mathversion}|{bold}|, undone by \cs{unboldmath} or on exit from a
@@ -5410,10 +5193,10 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
handles Greek letters, also lowercase (but not uppercase) Greek
letters will use this a priori italic shape except if some other
option such as \blueit{upgreek} was used.%
- \footnote{Since \texttt{1.3x}, in presence of the \blueit{LGRgreek}
- option in addition to \blueit{italic}, the \cs{MTgreekitdefault}
+ \footnote{Since \texttt{1.3y}, in presence of the \blueit{LGRgreek}
+ option in addition to \blueit{italic}, the \csb{MTgreekitdefault}
shape is then used for lowercase Greek letters and
- \cs{MTgreekupdefault} for uppercase.}
+ \csb{MTgreekupdefault} for uppercase.}
\item \mstopt{frenchmath}: configures the lowercase Latin letters to use
italic shape (\cs{itdefault}), and uppercase Latin letters to be in
same shape as for digits and operator names (i.e.\@ a priori
@@ -5424,8 +5207,8 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
and uppercase Greek letters will use the same shape as
operator names, except if some other option such as \blueit{itgreek}
was used.%
- \footnote{Under \blueit{LGRgreek} and since |1.3x|, the
- \cs{MTgreekupdefault} is used for Greek letters if no other option
+ \footnote{Under \blueit{LGRgreek} and since \mstrelease{1.3y}, the
+ \csb{MTgreekupdefault} is used for Greek letters if no other option
such as \blueit{itgreek} was employed.}
\begin{snugshade}
@@ -5434,9 +5217,7 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
be in the same shape as the one for digits and operator
names) is \textbf{not} undone in the subdued ``normal''
and ``bold'' math versions. It holds throughout the
- document, but math versions declared by \mst may use
- \MTshape and \MTlettershape to, in effect, obtain
- whatever configuration is desired.
+ document.
As a bonus, note that doing
\centeredline{|\usepackage[basic,subdued,frenchmath]{mathastext}|}
@@ -5490,7 +5271,7 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
%\end{footnotesize}
-\item \mstopt{defaultalphabets}: \RLNote{new behavior}{1.3za}\mst
+\item \mstopt{defaultalphabets}: \RLNote{new behavior}{\mstrelease{1.3za}}\mst
always defines \cs{Mathnormal}, \cs{Mathrm}, \cs{Mathbf} etc... to
refer to the \mst-ified text fonts, and redefines the math
alphabets \cs{mathrm}, \cs{mathit}, \cs{mathtt} etc\dots{} (but
@@ -5501,22 +5282,22 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
be available whether or not this option is made use of.
\begin{footnotesize}
- Prior to |1.3za| (and since |1.15f|), this option also prevented the
+ Prior to \mstrelease{1.3za} (and since \mstrelease{1.15f}), this option also prevented the
package to declare the \cs{Mathnormal} et al.\@ and \cs{mathnormalbold}
commands. In this context, recall that the dreaded ``too many math
alphabets'' error can only occur on \emph{use} in the document of too many
of such commands, and not at the time of their declarations. The author's
- notes from time of |1.15f| release (|2012/10/25|) only say that it may not
+ notes from time of \mstrelease{1.15f} release (|2012/10/25|) only say that it may not
be ``useful'' to package user to have both (for example) |\mathrm| and
|\Mathrm|, which sounds weird if they are to acquire distinct meanings.
- So since |1.3za| both will exist. In the default package configuration
+ So since \mstrelease{1.3za} both will exist. In the default package configuration
|\mathrm| is configured to expand to |\Mathrm| (with some extra behavior
under LGRgreek+), and with this option or the defaultrm option
|\mathrm| is kept with its original meaning (and the LGRgreek+ extras do
not work).\par
\end{footnotesize}
-\item \RLNote{changed:}{1.3za}\mstopt{defaultnormal}, \mstopt{defaultrm},
+\item \RLNote{changed:}{\mstrelease{1.3za}}\mstopt{defaultnormal}, \mstopt{defaultrm},
\mstopt{defaultbf}, \mstopt{defaultit}, \mstopt{defaultsf},
\mstopt{defaulttt}: tell \mst to not set up, respectively, the
\cs{mathnormal}, \cs{mathrm}, \cs{mathbf}, \cs{mathit}, \cs{mathsf}, and
@@ -5524,11 +5305,11 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par}
always via \cs{Mathnormal}, \cs{Mathrm}, \cs{Mathbf}, \cs{Mathit}, etc...
\begin{footnotesize}
- Prior to |1.3za| these options also prevented the creation of the
+ Prior to \mstrelease{1.3za} these options also prevented the creation of the
corresponding \mst command with an uppercased initial.\par
\end{footnotesize}
-\item \mstopt{ncccomma}:\RightNote{1.3x} it triggers the loading of the
+\item \mstopt{ncccomma}:\RightNote{\mstrelease{1.3y}} it triggers the loading of the
\ctanpkg{ncccomma} package%
%
\footnote{Alexander I. \textsc{Rozhenko}, \emph{Use comma as decimal
@@ -5553,8 +5334,8 @@ those parts of the document using another language than French.%
reenact it. For background on this issue see
\url{https://github.com/latex3/babel/issues/190}.
- This does not apply to \ctanpkg{decimalcomma} |1.3| or later.}
-\item \mstopt{decimalcomma}:\RightNote{1.3zb} it triggers the loading of the
+ This does not apply to \ctanpkg{decimalcomma} \mstrelease{1.3} or later.}
+\item \mstopt{decimalcomma}:\RightNote{\mstrelease{1.3zb}} it triggers the loading of the
\ctanpkg{decimalcomma} package%
%
\footnote{Antoine \textsc{Missier}, \emph{Comma for decimal numbers},
@@ -5565,7 +5346,7 @@ The same remarks apply as for the ncccomma option. In particular \emph{note
\emph{\texttt{decimalcomma}}, the correct way is to use the eponymous
option.}
-\item \mstopt{binarysemicolon}:\RightNote{1.3x} sets (except if
+\item \mstopt{binarysemicolon}:\RightNote{\mstrelease{1.3y}} sets (except if
\blueit{nopunctuation} is used) the semi-colon to let \TeX\ use
spacing of binary type, not punctuation type, around the semi-colon
(it is often used in French mathematical typesetting as separator in
@@ -5575,12 +5356,12 @@ The same remarks apply as for the ncccomma option. In particular \emph{note
The effect applies to all math versions, even the \emph{normal} and
\emph{bold} math versions with \mst having been loaded with the
\blueit{subdued} option.
-\item \mstopt{frenchmath*}:\RLNote{CHANGED!}{1.3zb} does all three of \blueit{frenchmath},
+\item \mstopt{frenchmath*}:\RLNote{CHANGED!}{\mstrelease{1.3zb}} does all three of \blueit{frenchmath},
\blueit{decimalcomma} and \blueit{binarysemicolon}.
\begin{footnotesize}
- Prior to |1.3zb|, this option did what is now available via frenchmath+.
- The |1.3zb|
+ Prior to \mstrelease{1.3zb}, this option did what is now available via frenchmath+.
+ The \mstrelease{1.3zb}
change was made as a follow-up consecutive to the |2.7| release \ctanpkg{frenchmath}.
Indeed this option as explained in \autoref{ssec:frenchmath} is provided as
a compatiblity layer with \ctanpkg{frenchmath}, and it was mandatory to
@@ -5588,20 +5369,75 @@ The same remarks apply as for the ncccomma option. In particular \emph{note
consecutive to the internal change of \ctanpkg{frenchmath} at its |2.7|
release to use \ctanpkg{decimalcomma}.\par
\end{footnotesize}
-\item \mstopt{frenchmath+}:\RightNote{1.3zb} does all three of \blueit{frenchmath},
+\item \mstopt{frenchmath+}:\RightNote{\mstrelease{1.3zb}} does all three of \blueit{frenchmath},
\blueit{ncccomma} and \blueit{binarysemicolon}. This is what used to be
- called frenchmath* prior to |1.3zb|.
+ called frenchmath* prior to \mstrelease{1.3zb}.
\item \mstopt{endash}, \mstopt{emdash}: use the text font en-dash (\textendash) or even
the em-dash (\textemdash, but this seems crazy) for the minus sign
rather than {}-{}. endash option is default for the package.
-\item \mstopt{unicodeminus}:\RightNote{1.3q} use the |MINUS SIGN U+2212| (requires
+\item \mstopt{unicodeminus}:\RightNote{\mstrelease{1.3q}} use the |MINUS SIGN U+2212| (requires
\ctanpkg{fontspec}.) Or, in the form |unicodeminus=HHHH| with four \emph{uppercased}
hexadecimal digits: use the |U+HHHH| code point. As noendash really means
``use the hyphen from the text font'', unicodeminus remains without effect
under it, or, naturally, under nominus. Without this option,
\mst uses the |EN DASH U+2013| by default for OpenType fonts.
-\item \mstopt{asterisk}: use the text font (or the Symbol font) asterisk in math mode.
-\item \mstopt{nohbar}: prevents \mst from defining its own
+\item \mstopt{asterisk}: this tells \mst to replace the binary math operator $*$
+ and the control sequence \cs{ast} with versions which uses the text asterisk
+ * suitably lowered, and with the correct spaces around it as binary
+ operator. The amount of lowering%
+%
+\footnote{With the option
+ \texttt{symbolmisc}, the asterisk is picked from the Symbol font, and the
+ amount of lowering is non-customizable; however if a math alphabet command
+ is used, the asterisk is then again from a text font and the lowering will
+ be as specified by \cs{MTlowerast}.}
+%
+ is decided by the mandatory argument to the command
+ \csb{MTlowerast}\marg{dimen}. The package does
+ \cs{MTlowerast}|{.3\height}|. Using the |ex| unit as in
+ \cs{MTlowerast}|{.5ex}| is not a good idea as it does not scale properly in
+ the script and scriptscript styles.
+
+ Attention that if using this option, inputs such as |$R^*$| or |$R^\ast$|
+ raise errors and \emph{must} be replaced by |$R^{*}$|, respectively
+ |$R^{\ast}$|. The $*$ is now `mathematically active'\thinspace%
+%
+\footnote{In
+ a hopefully safe way, for example {\ttfamily\$\string\label\{eq*1\}\$} is
+ ok.}
+%
+ and |*| and |\ast| will obey the math alphabet
+ commands (see \autoref{sec:mathxx}).
+
+\item \mstopt{activedigits}:\RLNote{new:}{\mstrelease{1.4}}
+ it makes all digits mathematically active! This is
+ reserved to expert \LaTeX{} users. See \autoref{ssec:hackingletters} for an
+ example. Do not use this option if you don't intend to make use of such
+ techniques to achieve special effects at some location of your document at
+ least. (I know this goes without saying, but passing this option and not
+ using it is only adding overhead to all your equations with digits).
+
+\item \mstopt{nodigits}: no \mst-ification of digits.
+\item \mstopt{noletters}:\RLNote{new:}{\mstrelease{1.4b}}
+ This is quite antithetical to the package core aim, but here you go.
+
+ \begin{footnotesize}
+ This option implies nohbar and defaultimath.
+
+ Note though that \mst will still declare to \LaTeX{} two extra symbol
+ fonts and define alphabet commands such as \Mathrm, \Mathnormal and
+ \mathnormalbold which map to them. But ascii letters will if not in
+ arguments of these commands not use the \mst-font and all business of
+ active letters (see \autoref{ssec:hackingletters}) is now irrevocably
+ inaccessible.
+
+ If you simply want to avoid the overhead of math active
+ letters, use rather \MTmathstandardletters in the preamble after having
+ loaded the package (although this does not undo the fact that \mst will
+ have redefined what a letter does if it is catcode active but that remark
+ should have been made in an even smaller typeface).\par
+ \end{footnotesize}
+ \item \mstopt{nohbar}: prevents \mst from defining its own
\cs{hbar}.
\item \mstopt{noendash}: the minus sign will be the - from the
text font, not the en-dash \textendash.
@@ -5616,7 +5452,7 @@ The same remarks apply as for the ncccomma option. In particular \emph{note
\ \mstopt{nopunctuation} ,\,.\,:\,;\ \mstopt{noplus},
\mstopt{nominus}, \mstopt{noplusnominus}\ +\,\textendash{} \mstopt{noequal} =\
\mstopt{noparenthesis} (\,)\,[\,]\,/\ \mstopt{nospecials}
-\#\,\$\,\%\,\&\ and \mstopt{nodigits}.
+\#\,\$\,\%\,\&\ (and nodigits and noletters mentioned earlier).
\item \mstopt{alldelims}: true by default, means that the
characters excluded by nolessnomore are
treated. Use this option in case of a mono-width
@@ -5690,7 +5526,7 @@ Euler font.
declared |\alphaup|, |\alphait|, ...., and the
associated \mathgreekup
and \mathgreekit commands to access the underlying fonts, and also since
- |1.3za| \mathgreekupbold and \mathgreekitbold.
+ \mstrelease{1.3za} \mathgreekupbold and \mathgreekitbold.
The font used by these math
alphabet commands in the subdued ``normal'' and ``bold'' is either
@@ -5699,7 +5535,7 @@ Euler font.
\MTgreekfont when the command \Mathastext (without
optional argument) was used in the preamble.
- |1.3za| fixes here a bug which froze the target font to be
+ \mstrelease{1.3za} fixes here a bug which froze the target font to be
the one at time of loading the package: this bug applied
(only) to the subdued ``normal'' and ``bold'' math versions
and was not readily visible as there is a priori no reason to
@@ -5716,7 +5552,7 @@ Euler font.
LGRgreek and then \MTgreekfont manually appropriately.
\item \mstopt{LGRgreek+} and
- \mstopt{LGRgreeks+}:\RightNote{1.3za} they extend
+ \mstopt{LGRgreeks+}:\RightNote{\mstrelease{1.3za}} they extend
respectively LGRgreek or LGRgreeks to let Greek letters
control sequences when in the scope of \mathrm, \mathit,
and \mathbf behave as would be expected by LaTeX users who
@@ -5747,7 +5583,7 @@ Euler font.
accents. As in vanilla \LaTeX{}, they are taken from the font
for the digits and \cs{log}-like names. Obey the alphabet
changing commands.
- \item \mstopt{unimathaccents}:\RightNote{1.3u} extends |mathaccents| to
+ \item \mstopt{unimathaccents}:\RightNote{\mstrelease{1.3u}} extends |mathaccents| to
OpenType fonts. Gave bad results in my brief testing.
\item \mstopt{defaultimath}: do not overwrite \cs{imath} and
\cs{jmath} to use \cs{inodot} and \cs{jnodot}.
@@ -5756,7 +5592,29 @@ OpenType fonts. Gave bad results in my brief testing.
\item \mstopt{fouriervec}: provides a \cs{fouriervec} command. The user can then
add in the preamble \cs{let}\cs{vec}$=$\cs{fouriervec}. There is also
always available a ``poor man'' vec accent \cs{pmvec} for upright letters.
- \end{enumerate}
+\item \mstopt{everymath}:\RLNote{new:}{\mstrelease{1.4}} this option tells
+ \mst to employ as in the \mstrelease{1.3} releases the
+ \cs{everymath}/\cs{everydisplay} registers to store certain actions to be
+ executed at each entrance into math mode. The main change with
+ \mstrelease{1.4} is that mathcode changes done by user (or possibly via
+ language changes in a multilingual \ctanpkg{babel} context) in the document
+ body, and which apply to those characters which \mst used to handle as part of
+ \cs{everymath}/\cs{everydisplay}, will now have an effect, whereas with
+ earlier releases or this one
+ with the everymath option, they may get overruled by \mst. Use
+ everymath for backward compatibility if needed (and \emph{only} if needed).
+ Notice though that regarding ascii letters, there is no return to the
+ pre-\mstrelease{1.4}: they will not acquire their mathcode active status only
+ at each entrance into math mode, even with this option,
+ but once and for all at package loading time, if not subdued, or when using
+ \MTversion to enter a non-subdued math version.
+
+ Please report breakages due to the \mstrelease{1.4} release, which made it
+ necessary for you to use this option everymath as workaround.
+
+ The option is destined to be removed at next major release and it will warn
+ the user about this.
+\end{enumerate}
Thanks to Kevin~\textsc{Klement}, Tariq~\textsc{Perwez}
and Ricard~\textsc{Torres} for sending bug reports and feature requests when
@@ -5780,6 +5638,7 @@ Numerous examples will be found there:\\
\label{sec:changelog}
\begingroup
+\hyphenation{Lua-La-TeX}
\def\MacroFont{\footnotesize\normalfont}
% utilis par verbatim en classe scrdoc (ou plutt shortvrb)
@@ -5817,16 +5676,27 @@ Numerous examples will be found there:\\
\lccode`\~`1
\lowercase{\endgroup\def~}{\ifvmode\medskip\expandafter\@DTXLOGhelper\fi 1}
+% 2024/07/10 hypertargets pour \mstrelease (import de etoc, et j'ai dj ici
+% toute une infrastructure rendant le truc trivial avec un fol 1 actif). Par
+% contre j'ai fait une modification s/#1\[/#1 \[/ car le #1 avant se terminait
+% par un espace.\]\]
+% Et attention au detokenize...
+% Il y a juste un problme avec le cas "1.15f and 1.15g".
\begingroup
\catcode`\| 0
\catcode`\\ 12
-|long|gdef|@DTXLOGhelper #1 ----#2|par{|@@DTXLOGhelper #1\[\]|par}
-|long|gdef|@@DTXLOGhelper #1\[#2\]#3|par%
- {|textbf{#1}% le #1 ici contient un espace
+% Je rduis --- ici.
+|long|gdef|@DTXLOGhelper #1 ---#2|par{|@@DTXLOGhelper #1 \[\]|par}
+|long|gdef|@@DTXLOGhelper #1 \[#2\]#3|par%
+ {|hypertarget{|detokenize|expandafter{|fixonexv#1 and|relax}}{|textbf{#1}} %
|ifx|relax #2|relax|else [#2]|fi
|par|nopagebreak}
|endgroup
+% uniquement pour s'occuper de "1.15f and 1.15g" et en profitant du fait qu'il
+% n'y a de rfrence 1.15g nulle part.
+\def\fixonexv#1 and#2\relax{#1}
+
\catcode`-=\active
\def-{%
\catcode`M\active
@@ -5869,7 +5739,7 @@ Numerous examples will be found there:\\
\StopEventually{\end{document}\endinput}
\cleardoublepage
-\newgeometry{hmarginratio=3:2}
+\newgeometry{hmarginratio=2:1}
\small
\section{Implementation}
@@ -5884,27 +5754,44 @@ Numerous examples will be found there:\\
%
%</dtx>
%<*package>
-% The usual catcode regime for letters and digits is assumed and some characters
-% such as |*|, |`|, |"|, |=| are supposed to be of catcode other at the time of loading
-% of \mst. The source of \mst takes precautions for some other characters such
-% as the right quote |'|, which may thus be active with no harm at the time of
-% loading. By the way, I think \LaTeX2e should have provided to authors a
+% The comments are a kind of palimpsest. Indeed they are not destined to the
+% reader but to the author: when coming back to the source code perhaps years
+% after having last looked at it, all bits of past information even if
+% obsolete are useful. Not only comments but perhaps also some ancient parts
+% of the code itself are a bit strange (the author hardly new any \LaTeX{} at
+% that time).
+%
+% For about the same reason, there may be some long macro names which do not
+% fit in the margins and that one sees only partially. The author sometimes
+% has used a workaround to hyphenate, but not systematically. Life is
+% time-limited. At \mstrelease{1.4} large chunks of code have been re-ordered
+% but the global architecture is still somewhat of a mess and doing some such
+% large diffs makes it sometimes difficult to follow small bits of code across
+% commit history, so this is done reluctantly.
+%
+% The usual catcode regime for letters and digits is assumed and some
+% characters such as |*|, |`|, |"|, |=| are supposed to be of catcode other at
+% the time of loading of \mst. The source of \mst takes precautions for some
+% other characters such as the right quote |'|, which may thus be active with
+% no harm at the time of loading (note added |2024/07/16|: very hard to
+% understand why I was so paranoid, but I have kept this annoying constraint).
+%
+% By the way, I think \LaTeX2e should have provided to authors a
% standard macro to be used at the beginning of a style file to make sure the
% catcodes are standard. Shorthands created by Babel should be mostly no problem
% as Babel does the activation only at the |\begin{document}|.
%
-% The comments have been accumulating through successive versions with only
-% partial efforts to achieve some sort of coherence; as a result some are a
-% bit strange or obsolete to various degrees. And the similar remark
-% applies to some ancient parts of the code itself!
-%
-% Should I require |2005/12/01| \LaTeX? (not sure about the month).
+% \mstrelease{1.4} removes a few code branches still there for support to
+% old \LaTeX{} and requires \LaTeX{} |2020-02-02| (which made |\{| and |\}|
+% \cs{protected}; earlier release |2019-10-01| had math macros such as the
+% math accents and \cs{hbar} robust and so far we kept supporting both new and
+% old contexts).
% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}
+\NeedsTeXFormat{LaTeX2e}[2020/02/02]
\ProvidesPackage {mathastext}
- [2023/12/29 v1.3zb Use the text font in math mode (JFB)]
+ [2024/07/27 v1.4b Use the text font in math mode (JFB)]
% \end{macrocode}
-% |1.3zb| avoids writing \mst info messages also to console output, only log file.
+% \mstrelease{1.3zb} avoids writing \mst info messages also to console output, only log file.
% Make prefix occupy 20 not 25 characters for alignment with \texttt{LaTeX Font Info},
% as the latter often issues info messages. For similar reason the usages of
% \cs{PackageInfo} will be done with empty lines above and below for better visual
@@ -5915,16 +5802,9 @@ Numerous examples will be found there:\\
\immediate\write\m@ne{}
\PackageInfo{mathastext}{Starting the math mode configuration\@gobble}
% \end{macrocode}
-% \LaTeX{} |2019-10-01| release has made robust math macros such as the math
-% accents and \cs{hbar}.
-% \begin{macrocode}
-\newif\ifmst@robust@obsessed@LaTeX@era
-\@ifl@t@r\fmtversion{2019/10/01}{\mst@robust@obsessed@LaTeX@eratrue}{}
-\edef\mst@robustifyingspace{\ifmst@robust@obsessed@LaTeX@era\space\fi}
-% \end{macrocode}
% Testing for \XeTeX\ and \LuaLaTeX.
%
-% |1.3g 2015/10/15|: update for the naming of primitives, the situation has
+% \mstrelease{1.3g} |2015/10/15|: update for the naming of primitives, the situation has
% evolved both on \XeTeX\ side and on the \LuaLaTeX\ side (LaTeX base
% |2015/10/01|): I was told "U" named math primitives were always available
% for \LuaLaTeX. For \XeTeX, the XeTeX prefix got replaced by U prefix with
@@ -5967,10 +5847,37 @@ Numerous examples will be found there:\\
\ifmst@LuaTeX\mst@XeOrLuatrue\fi
\ifmst@XeTeX \mst@XeOrLuatrue\fi
% \end{macrocode}
-% |1.2|: all inner macros of \mst now starts with |\mst@| for a cleaner
+% \mstrelease{1.4}. I only checked this is correct with TL2024.
+% The macro will be used with |#1| a catcode 11 or 12 token or a one character
+% control sequence such as |\#|.
+% \begin{macrocode}
+\ifmst@XeTeX
+ \def\mst@OnlyIfNotMathActive#1{%
+ \ifnum\mst@Umathcodenum`#1="1FFFFF
+ \expandafter\@gobble
+ \else\expandafter\@firstofone
+ \fi
+ }
+\else\ifmst@LuaTeX
+ \def\mst@OnlyIfNotMathActive#1{%
+ \ifnum\mst@Umathcodenum`#1="1000000
+ \expandafter\@gobble
+ \else\expandafter\@firstofone
+ \fi
+ }
+\else
+ \def\mst@OnlyIfNotMathActive#1{%
+ \ifnum\mathcode`#1="8000
+ \expandafter\@gobble
+ \else\expandafter\@firstofone
+ \fi
+ }
+\fi\fi
+% \end{macrocode}
+% \mstrelease{1.2}: all inner macros of \mst now starts with |\mst@| for a cleaner
% name-space.
%
-% |1.3l 2016/01/29|: hmmm... at this late stage where nobody would expect me
+% \mstrelease{1.3l} |2016/01/29|: hmmm... at this late stage where nobody would expect me
% to still look at the code, I have found at least two macros which still
% didn't: \cs{do@the@endashstuff} and \cs{do@the@emdashstuff}.
%
@@ -5980,16 +5887,16 @@ Numerous examples will be found there:\\
% engines for a while, hence it is not hard to adapt to the replacement of
% |EU1/EU2| by |TU|, maintaining compatibility with legacy installations.
%
+% At \mstrelease{1.4} the support for obsolete |EU1| and |EU2| font encodings
+% has been removed.
+%
% \begin{macro}{\mst@OneifUniEnc}
% The \cs{mst@OneifUniEnc} is expandable but must be used after
% having set \cs{mst@tmp@enc}...
% \begin{macrocode}
\def\mst@oti{OT1}
-\def\mst@eui{EU1}\def\mst@euii{EU2}\def\mst@tu{TU}
-\def\mst@OneifUniEnc {%
- \ifx \mst@tmp@enc\mst@tu 1\else
- \ifx \mst@tmp@enc\mst@eui 1\else
- \ifx \mst@tmp@enc\mst@euii 1\else 0\fi\fi\fi }
+\def\mst@tu{TU}
+\def\mst@OneifUniEnc{\ifx\mst@tmp@enc\mst@tu1\else0\fi}
\newif\ifmst@goahead
\newif\ifmst@abort
% \end{macrocode}
@@ -6006,9 +5913,13 @@ Numerous examples will be found there:\\
\def\mst@enc{\encodingdefault}
\def\mst@fam{\familydefault}
\def\mst@ser{\seriesdefault}
- \def\mst@opsh{\shapedefault} %% will be default shape for operator names
+% \end{macrocode}
+% \noindent\cs{mst@opsh} will hold default shape for operator names.\newline
+% \cs{mst@ltsh} will hold default shape for letters.
+% \begin{macrocode}
+ \def\mst@opsh{\shapedefault}
\def\mst@bold{\bfdefault}
- \def\mst@ltsh{\shapedefault} %% will be default shape for letters
+ \def\mst@ltsh{\shapedefault}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -6017,7 +5928,7 @@ Numerous examples will be found there:\\
% \end{macro}
% \end{macro}
% \begin{macro}{\mst@greekfont}
-% |1.15c|: for use by the LGRgreek and selfGreek options. Defined as
+% \mstrelease{1.15c}: for use by the LGRgreek and selfGreek options. Defined as
% an \cs{edef} in order to be able to set-up once and for all the
% Greek at the time of \cs{usepackage}. Modifiable in the preamble
% via \cs{MTgreekfont}\marg{font\_name}\cs{Mathastext}.
@@ -6026,20 +5937,24 @@ Numerous examples will be found there:\\
% \end{macrocode}
% \end{macro}
% \begin{macro}{Package options}
-% |2011/03/09|: |1.13| introduces the option LGRgreek and systematic use
+% |2011/03/09|: \mstrelease{1.13} introduces the option LGRgreek and systematic use
% of \cs{if...} conditionals, for better readability (by myself) of
% the code.
%
-% |1.3x| of |2022/11/03| adds |ncccomma|, |binarysemicolon| and
+% \mstrelease{1.3y} of |2022/11/03| adds |ncccomma|, |binarysemicolon| and
% |frenchmath*| options.
%
-% |1.3za| adds |LGRgreek+| and |LGRgreeks+|.
+% \mstrelease{1.3za} adds |LGRgreek+| and |LGRgreeks+|.
%
-% |1.3zb| adds |decimalcomma| and modifies |frenchmath*| to use it. And
-% provides |frenchmath+| as an alias to former |frenchmath*|. Consecutive
-% to the change at |2.7| of \ctanpkg{frenchmath} which replaced
+% \mstrelease{1.3zb} adds |decimalcomma| and modifies |frenchmath*| to use
+% it. And provides |frenchmath+| as an alias to former |frenchmath*|.
+% Consecutive to the change at |v2.7| of \ctanpkg{frenchmath} which replaced
% \ctanpkg{ncccomma} by \ctanpkg{decimalcomma} and broke the compatibility
% recipe explained in \autoref{ssec:frenchmath}.
+%
+% \mstrelease{1.4} adds options |everymath| and |activedigits|.
+%
+% \mstrelease{1.4b} adds |noletters|.
% \begin{macrocode}
\newif\ifmst@italic
\newif\ifmst@frenchmath
@@ -6082,25 +5997,32 @@ Numerous examples will be found there:\\
\newif\ifmst@noexclam
\DeclareOption{noexclam}{\mst@noexclamtrue}
\newif\ifmst@asterisk
- \DeclareOption{noasterisk}{\PackageWarningNoLine{mathastext}
- {option `noasterisk\string' is deprecated.^^J\space\space\space
- Check the documentation}}
\DeclareOption{asterisk}{\mst@asterisktrue}
\newif\ifmst@nospecials
\DeclareOption{nospecials}{\mst@nospecialstrue}
-\newif\ifmst@basic % 1.3 to avoid unnecessary patch of amsmath \newmcodes@
+\newif\ifmst@basic
\DeclareOption{basic}{\mst@basictrue
\ExecuteOptions{noparenthesis,nopunctuation,%
noplusnominus,noequal,noexclam,nospecials,nolessnomore}}
\newif\ifmst@nohbar
\DeclareOption{nohbar}{\mst@nohbartrue}
+% \end{macrocode}
+% \mstrelease{1.4} adds option |activedigits|.
+% \begin{macrocode}
+\newif\ifmst@activedigits
+ \DeclareOption{activedigits}{\mst@activedigitstrue}
\newif\ifmst@nodigits
\DeclareOption{nodigits}{\mst@nodigitstrue}
\newif\ifmst@defaultimath
\DeclareOption{defaultimath}{\mst@defaultimathtrue}
+% \end{macrocode}
+% \mstrelease{1.4b} adds option |noletters|.
+% \begin{macrocode}
+\newif\ifmst@noletters
+ \DeclareOption{noletters}{\mst@noletterstrue\ExecuteOptions{nohbar,defaultimath}}
\newif\ifmst@mathaccents
\DeclareOption{mathaccents}{\mst@mathaccentstrue}
-\newif\ifmst@unimathaccents % 1.3u
+\newif\ifmst@unimathaccents
\DeclareOption{unimathaccents}{\mst@mathaccentstrue\mst@unimathaccentstrue}
\newif\ifmst@needsymbol
\newif\ifmst@symboldelimiters
@@ -6108,7 +6030,7 @@ Numerous examples will be found there:\\
\newif\ifmst@symboldigits
\DeclareOption{symboldigits}{\mst@needsymboltrue\mst@symboldigitstrue}
\newif\ifmst@symbolgreek
-\newif\ifmst@customgreek %% new with 1.3d
+\newif\ifmst@customgreek
\DeclareOption{symbolgreek}{\mst@needsymboltrue\mst@symbolgreektrue
\mst@customgreektrue }
\newif\ifmst@symbolre
@@ -6144,13 +6066,13 @@ Numerous examples will be found there:\\
\DeclareOption{itGreek}{\def\mst@greek@select{1}}
\DeclareOption{upGreek}{\def\mst@greek@select{2}}
% \end{macrocode}
-% Starting with |1.15f| the meaning of the `defaultxx' options has changed. They
+% Starting with \mstrelease{1.15f} the meaning of the `defaultxx' options has changed. They
% now prevent |mathastext| from defining additional alphabets rather than
% prevent it from identifying the `mathxx' with the new `Mathxx'. The
% `Mathnormal' and `Mathrm' alphabet commands are always created as they are
% SymbolFontAlphabets.
%
-% This was again changed at |1.3za|. The additional alphabets are
+% This was again changed at \mstrelease{1.3za}. The additional alphabets are
% always declared, the options only prevent mapping the existing
% `mathxx' to the new `Mathxx'. This may be breaking change if
% people used these options because they had a need for the
@@ -6169,7 +6091,7 @@ Numerous examples will be found there:\\
\newif\ifmst@defaulttt
\DeclareOption{defaulttt}{\mst@defaulttttrue}
% \end{macrocode}
-% Here and elsewhere |1.3za| has removed an
+% Here and elsewhere \mstrelease{1.3za} has removed an
% \cs{ifmst@nonormalbold} conditional.
% \begin{macrocode}
\DeclareOption{defaultalphabets}{\ExecuteOptions{defaultnormal,defaultrm,%
@@ -6185,14 +6107,25 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\newif\ifmst@fouriervec
\DeclareOption{fouriervec}{\mst@fouriervectrue}
% \end{macrocode}
-% |1.15|: the subdued option.
+% \mstrelease{1.15}: the |subdued| option.
% \begin{macrocode}
\newif\ifmst@subdued
\DeclareOption{subdued}{\mst@subduedtrue}
% \end{macrocode}
-% |1.3q|: the unicode option. Thanks to Tobias~\textsc{Brink} for suggesting its
-% incorporation. The parsing of |\CurrentOption| does not seek any robustness,
-% it just does its job if the option is used correctly.
+% \mstrelease{1.4}: the |everymath| option.
+% \begin{macrocode}
+\newif\ifmst@everymath
+ \DeclareOption{everymath}{\mst@everymathtrue
+\PackageWarningNoLine{mathastext}{%
+ `everymath\string' will be removed at next major release.\MessageBreak
+ Please report to the author the circumstances\MessageBreak
+ which mandated its use in the present document}%
+}
+% \end{macrocode}
+% \mstrelease{1.3q}: the |unicode| option. Thanks to Tobias~\textsc{Brink}
+% for suggesting its incorporation. The parsing of \cs{CurrentOption} does
+% not seek any robustness, it just does its job if the option is used
+% correctly.
% \begin{macrocode}
\def\mst@unicodeminus {2013}
\def\mst@checkoption #1unicodeminus#2\mst@#3\mst@@
@@ -6216,7 +6149,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% This broke usage of \cs{Mathastext} macro in preamble.
%
-% |1.3w| works around this via \cs{mst@DeclareMathAccent}. And other
+% \mstrelease{1.3w} works around this via \cs{mst@DeclareMathAccent}. And other
% changes were made in \mst code to cope with these complications around
% robustness.
% \begin{macrocode}
@@ -6226,13 +6159,36 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\DeclareMathAccent{#1}}
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\mst@normalversionname}
+% \begin{macro}{\mst@boldversionname}
% Helper macros to test math version names. User is not allowed to redefine
% via \cs{Mathastext} with optional argument or via \cs{MTDeclareVersion} the
-% |normal| and |bold| math versions! Added at |1.3w|, about 7 years late.
+% |normal| and |bold| math versions. Added at \mstrelease{1.3w}, about 7 years late.
% \begin{macrocode}
\def\mst@normalversionname{normal}%
\def\mst@boldversionname{bold}%
% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\mst@OnlyIfNotSubdued}
+% \mstrelease{1.3u} adds this check that we are not in a subdued normal or
+% bold math version. We do not push the |#1| out of the TeX conditionals,
+% and anyhow there was no real need for expandable coding.
+% \begin{macrocode}
+\def\mst@OnlyIfNotSubdued#1{%
+ \ifmst@subdued
+ \ifx\math@version\mst@normalversionname
+ \else
+ \ifx\math@version\mst@boldversionname
+ \else
+ #1%
+ \fi
+ \fi
+ \else
+ #1%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{\exists} \begin{macro}{\mst@exists@skip}
% \begin{macro}{\forall} \begin{macro}{\mst@forall@skip}
% \begin{macro}{\MTnormalexists}
@@ -6240,7 +6196,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\MTnormalforall}
% \begin{macro}{\MTforalldoesskip }
%
-% |1.15e| |2012/10/21|: math skip/glue \emph{after} \cs{exists} and
+% \mstrelease{1.15e} |2012/10/21|: math skip/glue \emph{after} \cs{exists} and
% \cs{forall}, this is useful with upright letters in math mode.
% Each math version has its own user defined values for the skips,
% stored as macros. The redefinitions of $\exists$ and $\forall$ are
@@ -6249,32 +6205,32 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% The subdued option (later and only for the normal and bold math
% version) and the italic option (here) set to zero the package
-% default skips. With |1.2| the skips can be modified on the fly in
+% default skips. With \mstrelease{1.2} the skips can be modified on the fly in
% the document, they are not necessarily set in the preamble once
% and for all for each math version.
%
-% |1.3j| adds \cs{MTnormalexists}, \cs{MTexistsdoesskip},
+% \mstrelease{1.3j} adds \cs{MTnormalexists}, \cs{MTexistsdoesskip},
% \cs{MTnormalforall}, \cs{MTforalldoesskip}.
%
-% Earlier to |1.3j|, |\let\mst@exists@original\exists| was done at End of
+% Earlier to \mstrelease{1.3j}, |\let\mst@exists@original\exists| was done at End of
% Package, now it is done at Begin Document, and same for |\forall|. We
% pay attention that use of \cs{MTnormalexists} etc... inside the
% preamble does not create self-let's.
%
% Also |subdued| mode will do \cs{MTnormalexists}, \cs{MTnormalforall}
-% (earlier than |1.3j|, it only set the muskips to |0mu|.) Same when
+% (earlier than \mstrelease{1.3j}, it only set the muskips to |0mu|.) Same when
% using |\MTversion{normal}|, if |subdued|.
%
% For some (random, legacy) reason, the handling of $\exists$ and
% $\forall$ is part of the things
% not included inside |\everymath/\everydisplay|.
%
-% |1.3v| The \mst-defined \cs{exists} and \cs{forall} are created
+% \mstrelease{1.3v} The \mst-defined \cs{exists} and \cs{forall} are created
% \cs{protected}. We feel this matches better with their default
% definition as \cs{mathchardef} tokens than dealing with \LaTeX2e robust
% macros. Besides, the coding is simpler.
% \begin{macrocode}
-\newmuskip\mst@exists@muskip %% v 1.15e
+\newmuskip\mst@exists@muskip
\newmuskip\mst@forall@muskip
\def\mst@exists@skip{1mu}
\def\mst@forall@skip{.6667mu}
@@ -6318,13 +6274,13 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\MTnormalprime}
% \begin{macro}{\MTprimedoesskip}
%
-% |1.2| |2012/12/17|: math skip/glue \emph{before} the \cs{prime}
+% \mstrelease{1.2} |2012/12/17|: math skip/glue \emph{before} the \cs{prime}
% glyph. This is useful with the default CM glyph and upright letters
% (in contrast the prime from |txfonts| works fine with upright
% letters). For this we replace the \LaTeX{} kernel \cs{active@math@prime}
% with our own skip-enhanced version \cs{mst@active@math@prime}.
%
-% |1.2b| |2012/12/31|: doing\\
+% \mstrelease{1.2b} |2012/12/31|: doing\\
% \null\hspace{1cm}|{\catcode`\'=\active \global\let'\mst@active@math@prime}|\\
% is awfully wrong when the right quote is made active at begin document by
% some other package (as happens with |babel| for some languages). So \mst
@@ -6340,47 +6296,102 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% does its job only as part of the \cs{everymath} and
% \cs{everydisplay} token lists.
%
-% |1.2e| being paranoid, we take precautions against a possibly
+% \mstrelease{1.2e} being paranoid, we take precautions against a possibly
% catcode active right quote at
% the time of loading mathastext.
%
-% |1.3i| adds \cs{MTactiveprime}.
+% \mstrelease{1.3i} adds \cs{MTactiveprime}.
%
-% |1.3j| renames it to \cs{MTprimedoesskip}. Besides, it makes use in the
-% preamble of \cs{MTnormalprime} or \cs{MTprimedoesskip}.
+% \mstrelease{1.3j} renames it to \cs{MTprimedoesskip}. Besides, it makes use in the
+% preamble of \cs{MTnormalprime} or \cs{MTprimedoesskip}.
+%
+% \mstrelease{1.4} adds the support for the new ``non-everymath''
+% implementation, which has to satisfy to very different constraints.
+%
+% The \cs{MTprimedoesskip} is not a |no-op| in |subdued| math version.
+% This is legacy situation, not changed at \mstrelease{1.4}.
+%
% \begin{macrocode}
-\newmuskip\mst@prime@muskip %% v 1.2
+\newmuskip\mst@prime@muskip
\def\mst@prime@skip{.5mu}
\ifmst@italic\ifmst@frenchmath\else\def\mst@prime@skip{0mu}\fi\fi
+% \end{macrocode}
+% Shouldn't I have rather hacked \cs{prim@s}? (answer: perhaps related to
+% Babel see a comment above).\par
+% \noindent
+% TODO: clarify why I used \cs{sp} not |^| in
+% \cs{mst@active@math@prime} in 2012/2013.\newline
+% TODO: clarify why I am paranoid regarding the |'| catcode here.
+%
+% The |everymath| branch was initially superficially refactored at
+% \mstrelease{1.4}, but unfortunately as \cs{mst@mathactivate} had been
+% modified to not handle mathematically active characters, this meant that the
+% \mst feature of extra math skip was lost under the |everymath| option, due to
+% an oversight by the author. For this among other reasons having mainly to
+% do with code comments we did \mstrelease{1.4a}.
+%
+% At \mstrelease{1.4} we can not go via \cs{mst@mathactivate} (defined further
+% down in the code) which filters out the already mathematically active
+% characters.
+%
+% Why am I paranoid here about |'| catcode at package loading time? (this
+% looks ridiculous...).
+% \begin{macrocode}
+\def\mst@tmp#1{%
+\def\mst@mathactivateprime{%
+ \ifnum\catcode`#1=\active
+ \@ifundefined{active@char#1}
+ {}
+ {\mst@do@activecase #1{}{\mst@active@math@prime}}%
+ \else
+ \mst@@mathactivate #1{}{\mst@active@math@prime}%
+ \fi
+}%
+% \end{macrocode}
+% The ``undo'' is needed at \mstrelease{1.4} (but not if |everymath|).
+% \begin{macrocode}
+\def\mst@undo@mathactivateprime{\mst@mathdeactivate#1{"8000}}%
+}\expandafter\mst@tmp\string'
\def\mst@active@math@prime{\sp\bgroup\mskip\mst@prime@muskip\prim@s}
-{\catcode`\'=12
-\gdef\mst@@modifyprime{\mst@mathactivate'{}\mst@active@math@prime}}
-\newcommand*\MTnormalprime {\let\mst@modifyprime\@empty }
-\newcommand*\MTprimedoesskip {\let\mst@modifyprime\mst@@modifyprime}
-\ifmst@subdued
- \MTnormalprime
+\ifmst@everymath
+ \newcommand*\MTnormalprime {\let\mst@modifyprime\@empty}
+ \newcommand*\MTprimedoesskip{\let\mst@modifyprime\mst@mathactivateprime}%
+ \AtBeginDocument{%
+ \everymath\expandafter
+ {\the\everymath \mst@modifyprime \MTnormalprime}%
+ \everydisplay\expandafter
+ {\the\everydisplay \mst@modifyprime \MTnormalprime}%
+% \end{macrocode}
+% MEMO: |subdued| case will do its own \cs{MTnormalprime} at
+% |\begin{document}| later as part of \cs{MTeverymathoff}.
+% \begin{macrocode}
+ \MTprimedoesskip
+ }
\else
- \MTprimedoesskip
+% \end{macrocode}
+% \mstrelease{1.4} must do things a bit differently.
+% \begin{macrocode}
+ \newcommand*\MTnormalprime {\mst@undo@mathactivateprime}
+ \newcommand*\MTprimedoesskip{\mst@mathactivateprime}
+% \end{macrocode}
+% MEMO: |subdued| case will do its own \cs{MTnormalprime} at
+% |\begin{document}| later as part of \cs{MTeverymathoff}.
+% \begin{macrocode}
+ \AtBeginDocument{\MTprimedoesskip}
\fi
-\AtBeginDocument{%
- \everymath\expandafter
- {\the\everymath \mst@modifyprime \MTnormalprime}%
- \everydisplay\expandafter
- {\the\everydisplay \mst@modifyprime \MTnormalprime}%
-}
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
% \begin{macro}{\MTexistsskip}
% \begin{macro}{\MTforallskip}
% \begin{macro}{\MTprimeskip}
-% |1.15e|: These user macros set up the amount of muglue after
+% \mstrelease{1.15e}: These user macros set up the amount of muglue after
% \cs{exists} or \cs{forall}. The normal and
% bold math versions inherit the same skips; these skips are set to
% zero in case of the subdued, or the italic option. Each command
% \cs{Mathastext}\oarg{version\_name} stores the current values in
% the definition of the math version.
%
-% |1.2|: \cs{MTprimeskip} added, the silly \cs{@onlypreamble} are removed
+% \mstrelease{1.2}: \cs{MTprimeskip} added, the silly \cs{@onlypreamble} are removed
% and the macros are modified to have immediate effect in the document,
% independently of their possible use in the preamble for the math
% versions to store values.
@@ -6433,35 +6444,49 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% mathastext font (both in the current math version). If option
% |noparenthesis| was used, we leave everything untouched.
%
-% In |1.3a|, |2013/09/04|, the modification is done only at the time of
+% In \mstrelease{1.3a}, |2013/09/04|, the modification is done only at the time of
% \cs{MTnonlettersobeymathxx}. It is canceled by
% \cs{MTnonlettersdonotobeymathxx}. So the code has been moved to these
% macros and here we just store at the begin document the then meaning of
% \cs{resetMathstrut@}, and check also if \cs{MTnonlettersobeymathxx} has
% been invoked in the preamble.
%
-% |1.3f| |2015/09/12| issues only an Info message not a Warning, as I am
+% \mstrelease{1.3f} |2015/09/12| issues only an Info message not a Warning, as I am
% becoming aware from another context (etoc) that Warnings are stressful to
% users, in some integrated environments for editing and compiling \LaTeX{}
% source files.
+%
+% \mstrelease{1.4} adds here an \cs{AtEndOfPackage}. As this must be
+% executed (if not in the legacy |everymath| context) after the
+% redefinition of \cs{MTnonlettersobeymathxx} which happens at begin
+% document.
% \begin{macrocode}
\ifmst@noparen\else
-\AtBeginDocument{%
- \@ifundefined{resetMathstrut@}{% nothing to do, no amsmath
- }{% amsmath loaded, and possibly patched by things such as lualatex-math
- \let\mst@savedresetMathstrut@\resetMathstrut@
-% \PackageInfo{mathastext}{current `at begin document\string' meaning of
-% amsmath\MessageBreak
-% \string\resetMathstrut@\space preserved for
-% future use\@gobble}%
- \ifx\mst@the\the % means that \MTnonlettersobeymathxx was used in preamble
- \let\mst@the\@gobble\MTnonlettersobeymathxx
- \fi}}
+\AtEndOfPackage{%
+ \AtBeginDocument{%
+ \@ifundefined{resetMathstrut@}
+ {}%
+ {%
+ \let\mst@savedresetMathstrut@\resetMathstrut@
+% \end{macrocode}
+% The |\ifx\mst@the\the| is true iff \cs{MTnonlettersobeymathxx} was used in preamble
+% (last compared to \cs{MTnonlettersdonotobeymathxx}).
+% Setting \cs{mst@the} to \cs{@gobble} here wiil cause \cs{MTnonlettersobeymathxx}
+% to indeed modify \cs{resetMathstrut@} (and it resets \cs{mst@the} to \cs{the} for
+% its behavior in \cs{everymath}).
+% \begin{macrocode}
+ \ifx\mst@the\the
+ \let\mst@the\@gobble
+ \MTnonlettersobeymathxx
+ \fi
+ }%
+ }%
+}%
\fi
% \end{macrocode}
% \end{macro}
%
-% |1.2| |2012/12/20| does some rather daring \emph{math} activation of
+% \mstrelease{1.2} |2012/12/20| does some rather daring \emph{math} activation of
% \verb$; , : ! ? + - = < > ( ) [ ]$ in
% math mode to achieve something I wanted to do since a long time: overcome
% the mutually excluding relation between the variable-family concept and
@@ -6476,7 +6501,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% the entrance of the math mode are discussed later),\\
% \null\hspace{1cm}\fbox{but the concerned characters will now expand in math
% mode to \emph{two} tokens.}\\
-% |1.2c| |2012/12/31|: hence, this current
+% \mstrelease{1.2c} |2012/12/31|: hence, this current
% implementation puts constraints on the input: |$x^?$| or |$x\mathrel?y$|
% now create errors. They must be input
% |$x^{?}$|, respectively |$x\mathrel{?}y$|.\\
@@ -6488,8 +6513,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% should be used instead) but it can be activated for them too.
%
%
-% \begin{macro}{\mst@mathactivate}
-% |1.2b| |2012/12/30|: there were bad oversights in the |1.2| code
+% \mstrelease{1.2b} |2012/12/30|: there were bad oversights in the \mstrelease{1.2} code
% for \cs{mst@mathactivate} related to the possibility for some
% characters to have been made active (in the sense of the catcode)
% elsewhere (something which often is done by language definition
@@ -6503,7 +6527,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% |:| (assuming for the latter that things would have worked ok before
% the twiddling by \mst).
%
-% |1.2e| |2013/01/09|: alas |$\ref{eq:1}$| still was a problem.
+% \mstrelease{1.2e} |2013/01/09|: alas |$\ref{eq:1}$| still was a problem.
% Indeed in that case the \mst prefix had no means to know it was
% inside a \cs{ref} so it made the character expand to its \mst
% redefinition, which is not acceptable inside a
@@ -6566,13 +6590,13 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% the mathcode to 32768!!}, rather it makes \emph{sure} the character
% is not mathematically active.
%
-% As |1.2e| is a bit paranoid it takes precautions against
+% As \mstrelease{1.2e} is a bit paranoid it takes precautions against
% the possibility of characters it treats being active at
% the time of its loading. Excepted from the scope of the
% paranoia are the latin letters (that would be crazy!) and
% also |*|, |"| and the left quote |`|.
%
-% |1.2f| |2013/01/21| with earlier versions (*) it was important not
+% \mstrelease{1.2f} |2013/01/21| with earlier versions (*) it was important not
% to do twice the business of \cs{mst@mathactivate} (think
% |$\hbox{$?$}$|), so I used (this was a bit wasteful) some sort of
% boolean macro for each character. But now that there are the
@@ -6590,57 +6614,274 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% |\label| or |\ref|. So testing for active characters should be done
% always... many things should be done always... I leave as is.
%
-% |1.3i| |2016/01/06| removes a spurious end of line space in
+% \mstrelease{1.3i} |2016/01/06| removes a spurious end of line space in
% \cs{mst@mathactivate} (did not show as anyhow done in math mode).
%
-% \begin{macro}{\mst@do@az}
-% \begin{macro}{\mst@do@AZ}
-% \begin{macro}{\mst@addtodo@az}
-% \begin{macro}{\mst@addtodo@AZ}
-% \begin{macro}{\mst@the}
-% |1.2b| |2012/12/28| now that we understand the great advantages of |"8000|
-% we do it also for all letters a-z and A-Z to insert automatically the
-% italic corrections. See the \hyperref[sec:ic]{discussion} in the user
-% manual. Ironically I wrote the code initially for the |italic| option only
-% to realize later it was more suitable to using an \emph{upright} text font
-% in math mode! So this mathematical activation of the letters is not done if
-% the font shape is detected to be |it| or |sl|; to bypass this the command
-% \cs{MTicinmath} is provided.
-%
-% |1.2e| |2013/01/10| corrects a bad oversight of |1.2b| in
-% \cs{mst@mathactivate} which made the reproduction of the user manual
-% illustrations with |$f_i^i$| impossible. As \cs{mst@mathactivate} was
-% originally used also to get the non-letters obey math alphabet while
-% maintaining the \TeX{} spacings, it added no extra braces. The braces
-% should however be added for expansion of math active letters, in order of
-% things like |x^y| to work as expected. (the group braces do not prevent
-% ligatures when the letters are arguments to the math alphabet commands,
-% the added macros \cs{mst@itcorr} and \cs{mst@before<letter>} expanding to
-% nothing).
+% \mstrelease{1.4} has significantly refactored the coding, there were
+% simplication from a changed way to use \cs{mst@mathactivate} for letters
+% and added branches to accomodate the renouncement to \cs{everymath}.
+% \begin{macro}{\mst@do@activecase}
+% Called by \cs{mst@mathactivate} if |#1| is catcode active.
+%
+% Check if token activation originates apparently into \ctanpkg{babel}:
+% \begin{itemize}[nosep]
+% \item if NO, nothing is done. The active meaning of |#1| is not modified.
+% \item if YES, we hook into \ctanpkg{babel} associated macros so
+% that in math mode the catcode active token does what \mst expects it to
+% do. Its \cs{mathcode} is set to the
+% one of the associated \cs{mathalpha} symbol as declared by \mst, except
+% for asterisk and right tick which simply use their ascii number as mathcode.
+% \end{itemize}
+%
+% In the case of \ctanpkg{babel}-spanish which has a catcode active right
+% tick, resetting its mathcode has the advantage to reveal in output the case
+% of a faulty input using the curly right tick U+8217 which one can get easily
+% from copy paste, for example from the |babel-spanish.pdf| file.
+%
+% And in general it is dangerous to have a character both catcode active and
+% mathcode active.
+%
+% Some auxiliaries.
+% \begin{macrocode}
+\def\mst@magic@v #1#2#3#4#5{#1#3#4}
+\def\mst@magic@vi #1#2#3#4#5#6{#1#2#4#5}
+\def\mst@fork{\ifmmode\mst@magic@v\fi\@thirdofthree}
+\def\mst@safefork{\ifmmode\if@safe@actives\else\mst@magic@vi\fi\fi\@thirdofthree}
+% \end{macrocode}
+% Some refactoring (and streamlining) at \mstrelease{1.4} here.
+% \begin{footnotesize}
+% There was at some point in the case of a Babel-active token a special
+% hanlding for |#1| to use \cs{MTmathcharletter}|#1| (and event for
+% digits!). But this is almost impossible to arise in practice:
+% \begin{itemize}[nosep]
+% \item Babel commands to set up a shorthand are preamble only (they use
+% \cs{AtBeginDocument}),
+% \item A shorthand is made active at begin document, and we don't want that
+% for a letter!
+% \item Activation is recorded as an instruction in the |.aux| file which
+% breaks it almost surely (except perhaps for letter |Z| or such not
+% likely to appear in macro names in the |.aux| file).
+% \item Even if we somehow hack against that (which I did to test) a more
+% subtle problem arises that Babel updates \cs{nfss@catcodes}, so that the
+% latter will want to make (e.g.) |a| of catcode 12! This causes breakage
+% very easily at the time of \cs{process@table} almost as easily as with
+% the |a| set to be an active character...
+% \end{itemize}
+%
+%^^A In revisiting and
+%^^A improving the coding here (following up on a simplification of
+%^^A \cs{mst@mathactivate} itself, I discovered a bug of earlier releases: in
+%^^A this fictitious "letter made active by Babel" branch the insertion of mu
+%^^A glue around the letter was lost, only the italic correction was kept in the
+%^^A modified meaning of Babel active letter in math mode. This bug was
+%^^A dissolved by the new way \cs{mst@mathactivate} is used by
+%^^A \cs{mst@DeclareMathLetter} and the ensuing simplifcation here. But in fact
+%^^A as summarized above this is purely fictitious code, which will never get
+%^^A executed in real life!
+%^^A As I am not of the repenting type, I also add at \mstrelease{1.4} a similar
+%^^A fictituous layer for catcode active digits...\par
+% \end{footnotesize}
+% |#1| here is a character token of catcode 11 or 12.
+% We do something only if the catcode activation appears to have been triggered
+% by \ctanpkg{babel}. The test has been moved earlier at \mstrelease{1.4}.
+% \begin{macrocode}
+\def\mst@do@activecase#1#2#3{%
+% \end{macrocode}
+% As letters and digits are impossible here, |#2| is either empty (which
+% happens only now for asterisk and right tick) or a single token (\cs{mathclose},
+% \cs{mathopen},... ). When |#2| is not empty, |#3| is always a mathchar
+% token. For safety we make sure then the mathcode is not active.
+%
+% The rationale is
+% to avoid context where people have both catcode and math active and use
+% |\string|. In the case of \ctanpkg{babel}-spanish with
+% |activeacute| option it allows to reveal more easily input errors using
+% curly right tick U+8217.
+%
+% Arguably I probably mainly wanted to do this if the character was found
+% catcode active but not a Babel shorthand. But it ended into the Babel
+% branch and the non-Babel branch for active catcode is to do nothing.
+%
+% |#2| is empty exactly for the case of the right tick and the asterisk.
+% In all other cases, then |#3| is a mathchar token.
+% \begin{macrocode}
+ \ifx\relax #2\relax\mathcode`#1=`#1\relax\else\mathcode`#1=#3\relax\fi
+% \end{macrocode}
+% Less \cs{expandafter}'s at \mstrelease{1.4}. Also, it is now required
+% to make sure:
+% \begin{itemize}[nosep]
+% \item not do it twice in succession (else infinite loop),
+% \item and undo it when deactivating.
+% \end{itemize}
+% This was easily done under legacy code (now only used under |everymath|
+% option, and only for non-letters) as it activated only when entering into
+% math mode.
+%
+% This is more annoying when activation happens in an uncontrolled
+% scope, and we handle this via a \cs{mst@hackedshorthand@<char>} flag.
+%
+% MEMO: the undoing is done in \cs{mst@mathdeactivate} which is invoked
+% only for those non-letters submitted to \cs{mst@mathactivate}.
+% \begin{macrocode}
+ \ifmst@everymath\else\@ifundefined{mst@hackedshorthand@#1}{\fi
+ \expandafter\let\csname mst@orig@user@active#1\expandafter\endcsname
+ \csname user@active#1\endcsname
+ \expandafter\let\csname mst@orig@normal@char#1\expandafter\endcsname
+ \csname normal@char#1\endcsname
+ \ifmst@everymath\else}{}\fi
+% \end{macrocode}
+% No more \cs{edef}'s at \mstrelease{1.4}. At this release, in letter case
+% |#3| is empty and |#2| is a single token which needs no extra brace
+% pair as this brace pair will come from its expansion.
+% We can use |{#2}{#3}| in all cases rather than either |{{#2#3}}{}| versus
+% |{#2}#3| depending on whether |#1| is letter or not as was done in the past.
+% Attention that |#2| and |#3| may each be empty.
+% \begin{macrocode}
+ \def\mst@tmp##1##2{\def##1{\mst@fork{#2}{#3}##2}}%
+ \expandafter\mst@tmp\csname user@active#1\expandafter\endcsname
+ \csname mst@orig@user@active#1\endcsname
+ \def\mst@tmp##1##2{\def##1{\mst@safefork{#2}{#3}##2}}%
+ \expandafter\mst@tmp\csname normal@char#1\expandafter\endcsname
+ \csname mst@orig@normal@char#1\endcsname
+ \ifmst@everymath
+ \else
+ \expandafter\let\csname mst@hackedshorthand@#1\endcsname\@empty
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mst@@mathactivate}
+% \begin{macrocode}
+\begingroup
+ \catcode`\~=\active
+ \def\x{%
+\endgroup
+% \end{macrocode}
+% |##1| is always a token of catcode 11 or 12.
+% \begin{macrocode}
+\ifmst@everymath
+ \def\mst@@mathactivate##1##2##3{%
+ \begingroup
+ \lccode`~=`##1
+ \lccode`##1=`##1
+% \end{macrocode}
+% Careful here as |##2| is empty in the asterisk and prime case. And |##3|
+% also is at \mstrelease{1.4} empty for letters.
+% \begin{macrocode}
+ \lowercase{\endgroup
+% \end{macrocode}
+% Refactoring at \mstrelease{1.4} merged the catcode 11 and catcode 12
+% branches here and in particular avoided in former case an \cs{edef}. This
+% helped into providing the \cs{MTcommandletter}\meta{letter} as a
+% customizable macro. There was no equivalent to this macro, which here is
+% |##2|, prior to \mstrelease{1.4}.
+% \begin{macrocode}
+ \mathcode`##1="8000
+ \def~{##2##3}%
+ }%
+ }%
+\else
+ \def\mst@@mathactivate##1##2##3{%
+ \begingroup
+ \lccode`~=`##1
+ \lccode`##1=`##1
+ \lowercase{\endgroup
+ \mathcode`##1="8000
+% \end{macrocode}
+% Also, \mstrelease{1.4} possibly execute \cs{mst@mathactivate} everywhere
+% in document body (at version changes for example) or at begin document.
+% Hence this modifies globally the active meaning. So we add some safeguard
+% here using an \cs{ifmmode}. And we store the original meaning of the
+% active variant of the token to reset it when ``undoing''.
+%
+% Careful not to do it twice in a row... (but this means \cs{mst@deactivate}
+% might not revert to a user custom redefinition done in-between but to a
+% prior one; although if the character is made active the second
+% \cs{mst@mathactivate} would not have been done).
+% \begin{macrocode}
+ \@ifundefined{mst@prioractivemeaning@##1}
+ {\expandafter\let
+ \csname mst@prioractivemeaning@##1\endcsname ~}
+ {}%
+ \def~{\ifmmode##2##3\else##1\fi}%
+ }%
+ }%
+\fi
+}\x
+% \end{macrocode}
+% At \mstrelease{1.4} the macro was split into two, to test first whether the
+% character which is encountered is currently with active catcode.
%
-% Added note |2016/01/06|: it should be explicitly said that the extra
-% |{..}| in |\mst@mathactivate| for letters end up creating |\hbox|'es
-% around each letter with its extra skips and explicit italic correction,
-% when present. These skips are thus set at natural width and do not add
-% any break point.
+% At \mstrelease{1.4} the non-catcode active branch is entered only if the
+% character isn't mathematically active at time of use..
%
-% \begin{macro}{\MTmath-}\begin{macro}{activeletters}
-% \begin{macro}{\MTmath-}\begin{macro}{standardletters}
-% |1.3| |2013/09/02| extends the use of mathematically active letters to
-% allow the user to specify muglue before and after the letter itself (see
-% \cs{MTsetmathskips}, below).
-% Mathematically active letters were previously used only to add the italic
-% correction; the math activation has now been separated and put in
-% \cs{MTmathactiveletters}. There is also \cs{MTmathactiveLetters} to allow
-% math activation only for the uppercase letters. To cancel the (now default,
-% even with option |italic|) math
-% activation of letters, there is \cs{MTmathstandardletters}. Version |1.3a|
-% removes some silly |\string|'s from the code, which prevented to pass
-% macros as first argument to the command.
-% \begin{macro}{\MTnonletters-}\begin{macro}{obeymathxx}
-% \begin{macro}{\MTnonletters-}\begin{macro}{donotobeymathxx}
-% \begin{macro}{\resetMathstrut@}
-% These macros are modified in version |1.3a| |2013/09/04| in order to
+% Careful that |#2| and |#3| may each be empty. The test for being a Babel
+% shorthand is done here and not as prior to \mst@release{1.4} inside
+% \cs{mst@do@activecase}.
+% \begin{macrocode}
+\def\mst@mathactivate#1#2#3{%
+ \ifnum\catcode`#1=\active
+ \@ifundefined{active@char#1}{}{\mst@do@activecase #1{#2}{#3}}%
+ \else
+ \mst@OnlyIfNotMathActive{#1}{\mst@@mathactivate #1{#2}{#3}}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mst@mathdeactivate}
+% This is needed at \mstrelease{1.4} for non-letters which are mathematically
+% activated. See comments above in \cs{mst@do@activecase}. Works in
+% sync with \cs{mst@addtodo@nonletters}.
+%
+% The \cs{mst@mathdeactivate} is active (sic) only in the non |everymath|
+% situation. It will restore a previously existing active meaning if it has
+% been changed.
+% \begin{macrocode}
+\ifmst@everymath
+\else
+\def\mst@mathdeactivate#1#2{%
+ \mathcode`#1=#2\relax
+ \@ifundefined{active@char#1}
+ {\@ifundefined{mst@prioractivemeaning@#1}
+ {}%
+ {\mst@restoreactivemeaning#1%
+ \expandafter\let\csname mst@prioractivemeaning@#1\endcsname\relax}%
+ }
+ {\@ifundefined{mst@hackedshorthand@#1}
+ {}
+ {\expandafter\let\csname user@active#1\expandafter\endcsname
+ \csname mst@orig@user@active#1\endcsname
+ \expandafter\let\csname normal@char#1\expandafter\endcsname
+ \csname mst@orig@normal@char#1\endcsname
+ \expandafter\let\csname mst@hackedshorthand@#1\endcsname\relax
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mst@restoreactivemeaning}
+% At \mstrelease{1.4} when we undo the mathematical activation we now also
+% restore the prior existing active meaning, if any. Only in the ``no
+% |everymath|'' branch (because in the |everymath| \TeX{} itself takes care
+% of that on exiting the scope of the math mode).
+% \begin{macrocode}
+\def\mst@restoreactivemeaning#1{%
+ \begingroup
+ \lccode`~=`#1
+ \lccode`#1=`#1
+ \lowercase{\endgroup
+ \expandafter\let\expandafter~\csname mst@prioractivemeaning@#1\endcsname
+ }%
+}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mst@do@nonletters}
+% \begin{macro}{\mst@addtodo@nonletters}
+% \begin{macro}{\mst@the}
+% \begin{macro}{\MTnonlettersobeymathxx}
+% \begin{macro}{\MTnonlettersdonotobeymathxx}
+% These macros are modified in version \mstrelease{1.3a} |2013/09/04| in order to
% cleverly adjust, or not, the |amsmath| \cs{resetMathstrut@}. When used in
% the preamble, they just modify \cs{mst@the}. And there is code at begin
% document to check the status there of \cs{mst@the} and if its meaning is
@@ -6658,7 +6899,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% |2016/03/03 v2.15a| of |amsmath.sty| is still not compatible with a math
% active opening parenthesis. Hence my patch here is still needed.
%
-% At |1.3u| \cs{MTnonlettersobeymathxx} and \cs{MTeasynonlettersobeymathxx}
+% At \mstrelease{1.3u} \cs{MTnonlettersobeymathxx} and \cs{MTeasynonlettersobeymathxx}
% are made no-ops under subdued mode. This fixes some bug if for example
% the former was used in preamble or immediately after |\begin{document}|
% making the minus sign math active although the \mst action was
@@ -6667,42 +6908,42 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% versions.
% \begin{macrocode}
\newtoks\mst@do@nonletters
-\newtoks\mst@do@easynonletters
-\newtoks\mst@do@az
-\newtoks\mst@do@AZ
+\ifmst@everymath
+\else
+ \newtoks\mst@undo@nonletters
+\fi
+% \end{macrocode}
+% |#1| is a category 12 character, |#2| is a \cs{mathopen}, or \cs{mathclose},
+% etc..., |#3| is a \cs{mathchar} (of variable family type).
+%
+% At \mstrelease{1.4}, \cs{mst@mathactivate} will not do anything if |#1|
+% is mathcode active (but not catcode active) at time of use.
+% \begin{macrocode}
+\ifmst@everymath
+ \def\mst@addtodo@nonletters#1#2#3{\mst@do@nonletters\expandafter
+ {\the\mst@do@nonletters\mst@mathactivate#1#2#3}%
+ }%
+\else
+% \end{macrocode}
+% We need to automatize some safeguards related to \cs{mst@do@activecase} when
+% deactivating.
+% \begin{macrocode}
+ \def\mst@addtodo@nonletters#1#2#3{\mst@do@nonletters\expandafter
+ {\the\mst@do@nonletters\mst@mathactivate#1#2#3}%
+ \edef\mst@tmp{\noexpand\mst@mathdeactivate#1{\the\mathcode`#1}}%
+ \mst@undo@nonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@nonletters}%
+ }%
+\fi
\let\mst@the\@gobble
-\newcommand*\MTnonlettersdonotobeymathxx{%
- \ifx\mst@the\@gobble
- \else
- \@ifundefined{mst@savedresetMathstrut@}{}{%
- \PackageInfo{mathastext}{restoring for this group or environment
- the original\MessageBreak
- amsmath \protect\resetMathstrut@}%
- \let\resetMathstrut@\mst@savedresetMathstrut@}%
- \fi
- \let\mst@the\@gobble
-}%
% \end{macrocode}
-% |1.3u| adds this check that we are not in a subdued normal or bold math
-% version. No need for expandable coding.
+% As \cs{mst@savedresetMathstrut@} will only be defined at begin document,
+% the next two macros are no-op in the preamble.
% \begin{macrocode}
-\def\mst@OnlyIfNotSubdued#1{%
- \ifmst@subdued
- \ifx\math@version\mst@normalversionname
- \else
- \ifx\math@version\mst@boldversionname
- \else
- #1%
- \fi
- \fi
- \else
- #1%
- \fi
-}%
-\def\mst@nonlettersobeymathxx{%
- \ifx\mst@the\the
- \else
- \@ifundefined{mst@savedresetMathstrut@}{}{%
+\def\mst@redefine@resetMathstrut@{%
+ \@ifundefined{mst@savedresetMathstrut@}
+ {}
+ {%
\ifmst@symboldelimiters
\def\resetMathstrut@{%
\setbox\z@\hbox{\the\textfont\symmtpsymbol\char40
@@ -6715,234 +6956,186 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\the\textfont\symoperators\char40}%
\ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}%
\fi
- \PackageInfo{mathastext}{\string\resetMathstrut@\space
- from amsmath replaced for this\MessageBreak group or environment}}%
- \fi
- \let\mst@the\the
+ \PackageInfo{mathastext}{\string\resetMathstrut@\space
+ from amsmath replaced for this\MessageBreak group or environment}%
+ }%
}%
-\newcommand*\MTnonlettersobeymathxx
- {\mst@OnlyIfNotSubdued\mst@nonlettersobeymathxx}%
-\newcommand*\MTeasynonlettersdonotobeymathxx{\let\mst@theeasy\@gobble}%
-\def\mst@easynonlettersobeymathxx{\let\mst@theeasy\the}%
-\newcommand*\MTeasynonlettersobeymathxx
- {\mst@OnlyIfNotSubdued\mst@easynonlettersobeymathxx}%
-\MTeasynonlettersobeymathxx % no-op here if subdued mode
-\def\mst@mathactiveletters{\let\mst@thef\the \let\mst@theF\the}%
-\newcommand*\MTmathactiveletters
- {\mst@OnlyIfNotSubdued\mst@mathactiveletters}%
-\MTmathactiveletters % no-op here if subdued mode
-\def\mst@mathactiveLetters{\let\mst@theF\the}%
-\newcommand*\MTmathactiveLetters
- {\mst@OnlyIfNotSubdued\mst@mathactiveLetters}%
-\newcommand*\MTmathstandardletters{\let\mst@thef\@gobble \let\mst@theF\@gobble}%
+\def\mst@restore@resetMathstrut@{%
+ \@ifundefined{mst@savedresetMathstrut@}{}{%
+ \PackageInfo{mathastext}{restoring for this group or environment
+ the original\MessageBreak
+ amsmath \protect\resetMathstrut@}%
+ \let\resetMathstrut@\mst@savedresetMathstrut@}%
+}%
+\ifmst@everymath
+ \newcommand*\MTnonlettersobeymathxx{%
+ \mst@OnlyIfNotSubdued{%
+ \ifx\mst@the\the
+ \else
+ \mst@redefine@resetMathstrut@
+ \fi
+ \let\mst@the\the
+ }%
+ }%
+ \newcommand*\MTnonlettersdonotobeymathxx{%
+ \ifx\mst@the\@gobble
+ \else
+ \mst@restore@resetMathstrut@
+ \fi
+ \let\mst@the\@gobble
+ }%
+\else
+ \newcommand*\MTnonlettersobeymathxx{%
+ \mst@OnlyIfNotSubdued{%
+ \AtBeginDocument{\MTnonlettersobeymathxx}%
+ }%
+ }%
+ \newcommand*\MTnonlettersdonotobeymathxx{%
+ \AtBeginDocument{\MTnonlettersdonotobeymathxx}%
+ }%
+ \AtBeginDocument{%
+ \renewcommand*\MTnonlettersobeymathxx{%
+ \mst@OnlyIfNotSubdued{%
+ \the\mst@do@nonletters
+ \ifx\mst@the\the
+ \else
+ \mst@redefine@resetMathstrut@
+ \fi
+ \let\mst@the\the
+ }%
+ }%
+ \renewcommand*\MTnonlettersdonotobeymathxx{%
+ \the\mst@undo@nonletters
+ \ifx\mst@the\@gobble
+ \else
+ \mst@restore@resetMathstrut@
+ \fi
+ \let\mst@the\@gobble
+ }%
+ }%
+\fi
% \end{macrocode}
-% \begin{macro}{\MTicinmath}
-% \begin{macro}{\MTICinmath}
-% \begin{macro}{\MTnoicinmath}
-% \begin{macro}{\MTicalsoinmathxx}
-% \cs{MTnoicinmath} can also be used from inside math mode.
-%
-% \cs{MTicalsoinmathxx} is destined to be used inside
-% \cs{mathnormalbold} as I didn't want to add the complication of
-% extracting the family number used inside \cs{mathnormalbold} (will
-% perhaps come back if I have time to spend on
-% |source2e|). Added note |2016/01/06|: this number is a priori simply
-% |symmtletterfont+1|.
-%
-% \cs{MTicinmath} can also be used inside math mode, to revert an
-% earlier \cs{MTnoicinmath} from inside the same math group: the math mode
-% had to be entered with the math activation of letters allowed.
-%
-% |1.3i| |2016/01/06|: For some reason which I have now forgotten I did
-% until now:
-% \begin{verbatim}
-% \def\mst@itcorr{\ifnum\fam=\m@ne\/\else\ifnum\fam=\symmtletterfont\/\fi\fi}%
-% \end{verbatim}
-% hence italic corrections were also applied inside \cs{mathnormal} (for
-% upright fonts; \cs{mathnormalbold} math alphabet was not treated like
-% \cs{mathnormal}). I now drop this to be more in sync with the handling
-% of the extra skips around letters. Everything gets suppressed inside
-% all math alphabets, allowing ligatures, even for \cs{mathnormal}.
-%
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\MTeasynonlettersobeymathxx}
+% \begin{macro}{\MTeasynonlettersdonotobeymathxx}
% \begin{macrocode}
-\newcommand*\MTicinmath{%
- \MTmathactiveletters
- \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}%
- \let\mst@ITcorr\mst@itcorr}
-\newcommand*\MTICinmath{%
- \MTmathactiveLetters
- \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}}
-\newcommand*\MTnoicinmath{\let\mst@itcorr\@empty\let\mst@ITcorr\@empty}
-\newcommand*\MTnoICinmath{\let\mst@ITcorr\@empty}
-\newcommand*\MTicalsoinmathxx{%
- \ifx\mst@itcorr\@empty\else\def\mst@itcorr{\/}\fi
- \ifx\mst@ITcorr\@empty\else\def\mst@ITcorr{\/}\fi}
+\newtoks\mst@do@easynonletters
+\ifmst@everymath
+ \newcommand*\MTeasynonlettersdonotobeymathxx{\let\mst@theeasy\@gobble}%
+ \newcommand*\MTeasynonlettersobeymathxx{%
+ \mst@OnlyIfNotSubdued{\let\mst@theeasy\the}%
+ }%
+ \MTeasynonlettersobeymathxx
+\else
+ \newtoks\mst@undo@easynonletters
+ \newcommand*\MTeasynonlettersdonotobeymathxx{\the\mst@undo@easynonletters}
+ \newcommand*\MTeasynonlettersobeymathxx{%
+ \mst@OnlyIfNotSubdued{\the\mst@do@easynonletters}%
+ }%
+ \AtEndOfPackage{\MTeasynonlettersobeymathxx}%
+\fi
% \end{macrocode}
-% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
-% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
-% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
-% \begin{macro}{\MTsetmathskips}
-% \begin{macro}{\MTunsetmathskips}
-% |1.3| |2013/09/02|: user level command to specify extra spaces in math mode
-% around the letters (only the 7bit a,b,..,z and A,B,..,Z). First parameter is
-% the letter, second is the math skip to be inserted before, and third the
-% skip to be inserted after; for example \cs{thickmuskip} or explicitly
-% |0.1mu|.
-%
-% For this, letters are made mathematically active. This is now the package
-% default (version |1.2| did this only in the absence of option |italic|, or
-% more precisely when the font used was not of shape |it| or |sl|). But if
-% \cs{MTsetmathskips} has not been used for that letter, the only effect of
-% the math activation is, as in |1.2|, to add the italic correction
-% automatically, except when the font shape is detected to be |it| or |sl|; in
-% these latter cases, although mathematically active, the letter acts in the
-% standard way.
-%
-% The command \cs{MTmathstandardletters} turns off math activation and its
-% effects for all letters.
-%
-% Ligatures within the argument of a math alphabet command are impeached by
-% skips; so \cs{MTunsetmathskips} is provided to cancel the skips for one
-% specific letter (|f| for example).
+% \end{macro}\end{macro}
+% \begin{macro}{\mst@addtodo@easynonletters}
+% |#1| is a one character control sequence (|\.|, |\/|, |\#|, |\%| or |\&|)
+% and |#2| is a mathchar.
%
-% |1.3a| |2013/09/04|: I strangely had |\string#1| inside \cs{MTsetmathskips}.
-% Phobic of catcode active letters... but with |\string| one needs some
-% |\expandafter| to use \cs{MTsetmathskips} in an |\@for| loop for example. It
-% is better to allow the first argument to be a macro or anything expanding to
-% a letter, and to not be paranoid about improbable catcode active letters
-% (the user just has to tame them at the time of the \cs{MTsetmathskip}) so I
-% take out these |\string|'s.
+% Perhaps I should use the Unicode engine \cs{Umathcode} et alia. I do this
+% at other places. However
+% I realized in 2013 and it is still true in 2024 that \LaTeX{} interface
+% \cs{DeclareSymbolFont} does not allow to declare more than 16 font
+% families even with \LuaLaTeX{} despite the latter allowing 256 such.
%
-% |1.3i| |2016/01/06|: the extra skips are suppressed for the arguments of
-% math alphabet commands. This applies in particular for amsmath's
-% \cs{DeclareMathOperator}.
+% So why bother?
%
+% \mstrelease{1.4} adds to this legacy branch a test to not override
+% a mathematically active ``easy'' non-letter. Main case is the dot
+% with Babel Spanish.
% \begin{macrocode}
-\newcommand*\MTsetmathskips[3]{%
- \@namedef{mst@before#1}{\ifnum\fam=\m@ne\mskip#2\relax\fi }%
- \@namedef{mst@after#1}{\ifnum\fam=\m@ne\mskip#3\relax\fi }%
-}
-\newcommand*\MTunsetmathskips[1]{%
- \@namedef{mst@before#1}{}%
- \@namedef{mst@after#1}{}%
-}
+\ifmst@everymath
+ \def\mst@addtodo@easynonletters#1#2{%
+ \mst@do@easynonletters\expandafter{%
+ \the\mst@do@easynonletters
+ \mst@OnlyIfNotMathActive{#1}{\mathcode`#1=#2}%
+ }%
+ }%
+ \def\mst@addtodo@easynonletters@U#1#2{%
+ \mst@do@easynonletters\expandafter{%
+ \the\mst@do@easynonletters
+ \mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=#2}%
+ }%
+ }%
+\else
% \end{macrocode}
-% \end{macro}\end{macro}
-% \begin{macro}{\mst@mathactivate}
-% \begin{macro}{\mst@addtodo@nonletters}
-% \begin{macro}{\mst@addtodo@easynonletters}
-% \begin{macro}{\mst@addtodo@az}
-% \begin{macro}{\mst@addtodo@AZ}
-% Added note |2016/01/06|:
-% Notice that the initially |\relax| tokens \verb+\mst@[before|after]@<letter>+
-% formed with |\csname...\endcsname| do not modify TeX's math layout:
-% |{\relax f\relax}| is like |f| (also for ligatures inside |\mathrm| for
-% example).
+% The character may have been made mathcode active
+% exterior to \mst. We can not test this for sure at begin document as it
+% may happen later. If such an ``easy'' character is mathcode active,
+% this can not originate in \mst. So we should not overwrite when
+% we issue \cs{MTeasynonlettersdonotobeymathxx}. Example I know is
+% with \ctanpkg{babel} Spanish which makes the dot math active. With PDF\LaTeX{}
+% it is also catcode active
+%
+% This macro may be used with Unicoe engines, and \LuaTeX{} and \XeTeX{}
+% differ regarding math active characters. I have only tested this (anew)
+% for \mstrelease{1.4} for which this branch is needed, so in 2024.
% \begin{macrocode}
-\def\mst@magic@v #1#2#3#4#5{#1#3#4}
-\def\mst@magic@vi #1#2#3#4#5#6{#1#2#4#5}
-\def\mst@fork{\ifmmode\mst@magic@v\fi\@thirdofthree}
-\def\mst@safefork{\ifmmode\if@safe@actives\else\mst@magic@vi\fi\fi\@thirdofthree}
-\def\mst@do@activecase#1#2#3{% #1 is a category 11 or 12 character token
- \@ifundefined{active@char#1}{}{%
- \ifcat #1a\mathcode`#1=#2\else
- \ifx\relax #2\relax\mathcode`#1=`#1 \else\mathcode`#1=#3\fi\fi
- \expandafter\expandafter\expandafter\let\expandafter\expandafter
- \csname mst@orig@user@active#1\endcsname
- \csname user@active#1\endcsname
- \expandafter\expandafter\expandafter\let\expandafter\expandafter
- \csname mst@orig@normal@char#1\endcsname
- \csname normal@char#1\endcsname
- \ifcat #1a%
- \expandafter\edef\csname user@active#1\endcsname
- {\noexpand\mst@fork {{#2\noexpand#3}}{}\expandafter
- \noexpand\csname mst@orig@user@active#1\endcsname
- }%
- \expandafter\edef\csname normal@char#1\endcsname
- {\noexpand\mst@safefork {{#2\noexpand#3}}{}\expandafter
- \noexpand\csname mst@orig@normal@char#1\endcsname
- }%
- \else
- \expandafter\edef\csname user@active#1\endcsname
- {\noexpand\mst@fork {#2}\noexpand#3\expandafter
- \noexpand\csname mst@orig@user@active#1\endcsname
- }%
- \expandafter\edef\csname normal@char#1\endcsname
- {\noexpand\mst@safefork {#2}\noexpand#3\expandafter
- \noexpand\csname mst@orig@normal@char#1\endcsname
- }%
- \fi}}
-\begingroup
- \catcode`\~=\active
- \def\x{\endgroup
- \def\mst@mathactivate##1##2##3{% ##1 guaranteed of cat 11 or 12
- \begingroup
- \lccode`~=`##1
- \lccode`##1=`##1
- \lowercase{\endgroup
- \ifnum\catcode`##1=\active
- \mst@do@activecase ##1{##2}##3%
- % careful as ##2 is empty in the asterisk and
- % prime case!
- \else
- \mathcode`##1="8000
- % version 1.3 adds the possibility of extra skips around letters,
- % (only if non catcode active at the time of use).
- \ifcat##1a\edef~{% extra braces for a^b for example
- {\expandafter\noexpand\csname mst@before##1\endcsname
- ##2\noexpand##3%
- \expandafter\noexpand\csname mst@after##1\endcsname}}%
- \else\def~{##2##3}\fi
- \fi}}}
-\x
-\def\mst@addtodo@nonletters#1#2#3{%
- % #1 will be of cat 11 or 12.
- % #2 is empty for asterisk and right quote
- \mst@do@nonletters\expandafter
- {\the\mst@do@nonletters \mst@mathactivate#1{#2}#3}%
-}
-\def\mst@addtodo@easynonletters#1#2{% #1 is a one char control sequence
- \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters\mathcode`#1=#2}%
-}
-\def\mst@addtodo@az#1#2{%
- \mst@do@az\expandafter{\the\mst@do@az\mst@mathactivate#1#2\mst@itcorr}
-}
-\def\mst@addtodo@AZ#1#2{%
- \mst@do@AZ\expandafter{\the\mst@do@AZ\mst@mathactivate#1#2\mst@ITcorr}%
-}
+ \def\mst@addtodo@easynonletters#1#2{%
+ \mst@do@easynonletters\expandafter
+ {\the\mst@do@easynonletters
+ \mst@OnlyIfNotMathActive{#1}{\mathcode`#1=#2}}%
+ \def\mst@tmp##1\relax{%
+ \def\mst@tmp{\mst@OnlyIfNotMathActive{#1}{\mathcode`#1=##1\relax}}%
+ }%
+ \expandafter\mst@tmp\the\mathcode`#1\relax
+ \mst@undo@easynonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@easynonletters}%
+ }%
+ \def\mst@addtodo@easynonletters@U#1#2{%
+ \mst@do@easynonletters\expandafter{%
+ \the\mst@do@easynonletters
+ \mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=#2}%
+ }%
+ \def\mst@tmp##1\relax{%
+ \def\mst@tmp{\mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=##1\relax}}%
+ }%
+ \expandafter\mst@tmp\the\mst@Umathcodenum`#1\relax
+ \mst@undo@easynonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@easynonletters}%
+ }%
+\fi
% \end{macrocode}
-% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+% \end{macro}
% \begin{macro}{\newmcodes@}
% \begin{macro}{\mst@newmcodes@}
% \begin{macro}{\MTresetnewmcodes}
% \begin{macro}{\MTcustomizenewmcodes}
-% |1.15d|: the \cs{newmcodes@} amsmath macro causes an error in Unicode engines as soon
-% someone assigns a Unicode mathcode to the minus sign, and then makes a
-% \cs{DeclareMathOperator} declaration. Furthermore it hard-codes the font
-% family 0 as being the one to be used. Moreover just putting the concerned
-% signs |-|, |:|, |.|, |\| ,|'|, |*| inside braces emulates enough the
-% behavior (although the tick will give a prime).
+% \mstrelease{1.15d}: the \cs{newmcodes@} amsmath macro causes an error in
+% Unicode engines as soon someone assigns a Unicode mathcode to the minus
+% sign, and then makes a \cs{DeclareMathOperator} declaration. Furthermore
+% it hard-codes the font family 0 as being the one to be used. Moreover just
+% putting the concerned signs |-|, |:|, |.|, |\| ,|'|, |*| inside braces
+% emulates enough the behavior (although the tick will give a prime).
%
-% |1.3|: now tests if `basic' option was used.
+% \mstrelease{1.3}: now tests if `basic' option was used.
%
-% |1.3d|: I should re-examine the situation with |\newmcodes@|. In the
+% \mstrelease{1.3d}: I should re-examine the situation with |\newmcodes@|. In the
% meantime its relaxification will not be done if lualatex-math is
% loaded. And the whole thing is put at begin document.
%
-% |1.3m|: |lualatex-math 1.5| n'a pas modifi son traitement de |\newmcodes@|
+% \mstrelease{1.3m}: |lualatex-math 1.5| n'a pas modifi son traitement de |\newmcodes@|
% mais par contre a supprim le patch de \cs{resetMathstrut@}. Mais la date
-% de release est reste |2015/09/22| (date de |1.4a|) au lieu de quelque
+% de release est reste |2015/09/22| (date de \mstrelease{1.4a}) au lieu de quelque
% chose comme |2016/03/13| (date pour l'annonce sur CTAN). Il faudra suivre
% l'volution future de |amsmath.sty| maintenant assure par D.C.
%
-% |1.3n 2016/04/22|: there is no more a patch of |\newmcodes@| by
+% \mstrelease{1.3n} |2016/04/22|: there is no more a patch of |\newmcodes@| by
% |lualatex-math 1.6| |(2016/04/16)|, as |amsmath 2016/03/10 v2.15b| has now
% a version compatible with \LuaLaTeX.
%
% My very radical |\let\newmcodes@\relax| was only a temporary measure I
% adopted for lack of time on October 13, 2012, and apart from avoiding to
% do that in case |lualatex-math| was detected, I never came back... finally
-% I handle it myself for |1.3n|. The remaining problem of this macro (now
+% I handle it myself for \mstrelease{1.3n}. The remaining problem of this macro (now
% that it does not anymore crash |lualatex| or vice versa) is that (also
% with |amsmath| version |2016/03/10 v2.15b|) it hardcodes the font used.
% The aim of the macro is to modify the type of spacing affected to symbols
@@ -6954,7 +7147,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \item \mst makes (or not, depending on commands issued by the user) these
% characters math active (the right tick already is), which complicates
% recovery of former mathcode. We have mathchar type \emph{macros}, but
-% then the complication is in diverging behaviours of the engines:
+% then the complication is in diverging behaviors of the engines:
% |\numexpr\mst@varfam@minus\relax| works with \LuaTeX, not with \XeTeX.
% \item the |*| must presumably really be the non-lowered text glyph.
% \item for the |-| I hesitated but do use the hyphen in the end.
@@ -6979,7 +7172,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \item I noticed that \LuaLaTeX\ does not apply the ``TeX Ligature'' (bad
% name) regarding the right tick APOSTROPHE being transformed into RIGHT
% SINGLE QUOTATION MARK in math mode, but \XeLaTeX\ does. From the point
-% of view of \mst, the behaviour of \XeLaTeX\ is the coherent one. It
+% of view of \mst, the behavior of \XeLaTeX\ is the coherent one. It
% appears that \LuaLaTeX\ use in math mode of a text font does not obey
% the set features.^^A like this
%^^A \url{http://tex.stackexchange.com/questions/208688/oldstylefigure-issue-with-lualatex-and-mathastext}
@@ -6997,7 +7190,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% in 2012! I spent some hours on this small thing, with consequent testing and
% for example this TeX Ligature issue with Unicode engines.
%
-% Since |1.3v| we require e-\TeX{} extensions, so a test for
+% Since \mstrelease{1.3v} we require e-\TeX{} extensions, so a test for
% \cs{numexpr} has been dropped here.
% \begin{macrocode}
\ifmst@basic
@@ -7027,7 +7220,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
}%
\let\mst@originalnewmcodes@\newmcodes@
\fi
- }% end of AtBeginDocument
+ }%
\else
\AtBeginDocument {%
\ifx\newmcodes@\@undefined\else
@@ -7047,9 +7240,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
}%
\let\mst@originalnewmcodes@\newmcodes@
\fi
- }% end of second AtBeginDocument
- \fi % mst@XeOrLua
-\fi % mst@basic
+ }%
+ \fi
+\fi
\newcommand*\MTresetnewmcodes{\ifx\mst@originalnewmcodes@\undefined\else
\let\newmcodes@\mst@originalnewmcodes@\fi}
\newcommand*\MTcustomizenewmcodes{\ifx\mst@originalnewmcodes@\undefined\else
@@ -7080,7 +7273,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% we'll see.
% \begin{macro}{\MTmathoperators-}\begin{macro}{obeymathxx}
% \begin{macro}{\MTmathoperators-}\begin{macro}{donot-}\begin{macro}{obeymathxx}
-% |1.2|: rather than just replacing \cs{symoperators} by
+% \mstrelease{1.2}: rather than just replacing \cs{symoperators} by
% \cs{symmtoperatorfont} I add a modification which makes the
% declared operator names sensitive to the math alphabets... ouh le
% vilain!
@@ -7093,7 +7286,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
% \begin{macro}{mtletterfont}
-% At version |1.1|, we add the possibility to mimick the standard
+% At version \mstrelease{1.1}, we add the possibility to mimick the standard
% behavior, that is to have italic letters and upright
% digits. Thanks to Tariq~\textsc{Perwez} and
% Kevin~\textsc{Klement} who asked for such a feature.
@@ -7134,39 +7327,59 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% simultaneously when specified with |mode=base|. It does work with
% |mode=node| but this mode ``does not work in math mode.''
%
-% Done for |1.3o| of |2016/05/03|.
+% Done for \mstrelease{1.3o} of |2016/05/03|.
+%
+% \mstrelease{1.3p} renames the macro to \cs{MTfixmathfonts} for public access.
+%
+% \mstrelease{1.4} intercepts also |mode=harf|. Cf
+% \url{https://tex.stackexchange.com/questions/722084/change-number-style-with-mathastext}
+% (thanks to |user691586| for bug report). The new code unconditionally
+% replaces |mode=foo| by |mode=base|. The complications due to the output of
+% |\fontname| using only category 12 characters are handled in a different way
+% than the |2016| code.
%
-% |1.3p| renames the macro to \cs{MTfixmathfonts} for public access.
+% The \url{https://github.com/latex3/fontspec/issues/525} problem causes
+% additional complications.
+%
+% Perhaps I should simply zap spaces always rather than check for quotes?
+% Anyway this appears to work.
% \begin{macrocode}
-\begingroup
-\catcode`N 12
-\catcode`O 12
-\catcode`D 12
-\catcode`E 12
-\lowercase{\gdef\mst@fixmathfonts@ #1=NODE;#2#3\relax #4\@empty #5}%
- {\ifx#2\empty\else\font\mst@mathfont=#1=base;#2#3\relax#5=\mst@mathfont\fi}
-\lowercase{\gdef\MTfixmathfonts
-{\expandafter\mst@fixmathfonts@
- \fontname\textfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty
- {\textfont\symmtoperatorfont}%
- \expandafter\mst@fixmathfonts@
- \fontname\scriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty
- {\scriptfont\symmtoperatorfont}%
- \expandafter\mst@fixmathfonts@
- \fontname\scriptscriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty
- {\scriptscriptfont\symmtoperatorfont}%
- \expandafter\mst@fixmathfonts@
- \fontname\textfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty
- {\textfont\symmtletterfont}%
- \expandafter\mst@fixmathfonts@
- \fontname\scriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty
- {\scriptfont\symmtletterfont}%
- \expandafter\mst@fixmathfonts@
- \fontname\scriptscriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty
- {\scriptscriptfont\symmtletterfont}%
- }%
+\def\mst@fixmathfonts@#1.#2.#3.{%
+\def\mst@fixmathfonts@##1##2#1=##3;##4##5\relax##6\@empty##7{%
+ \ifx##3\empty\else
+ \if"##1%
+ \font\mst@mathfont=##1##2#1=base;##4##5\relax
+ \else
+ \mst@arrrrgh@fixmathfonts##1##2#1=base;##4##5#2\empty#3\relax
+ \fi
+ ##7=\mst@mathfont
+ \fi
}%
-\endgroup
+\def\mst@arrrrgh@fixmathfonts##1#2##2##3#3##4\relax{%
+ \ifx##2\empty
+ \font\mst@mathfont="##1"\relax
+ \else
+ \font\mst@mathfont="##1"#2##2##3#3\relax
+ \fi
+}%
+}%
+\expandafter\mst@fixmathfonts@\detokenize{mode. at.pt.}%
+\def\MTfixmathfonts#1{%
+\def\MTfixmathfonts{%
+ \expandafter\mst@fixmathfonts@\fontname\textfont\symmtoperatorfont
+ \relax\relax #1=;\empty\relax\@empty{\textfont\symmtoperatorfont}%
+ \expandafter\mst@fixmathfonts@\fontname\scriptfont\symmtoperatorfont
+ \relax\relax #1=;\empty\relax\@empty{\scriptfont\symmtoperatorfont}%
+ \expandafter\mst@fixmathfonts@\fontname\scriptscriptfont\symmtoperatorfont
+ \relax\relax #1=;\empty\relax\@empty{\scriptscriptfont\symmtoperatorfont}%
+ \expandafter\mst@fixmathfonts@\fontname\textfont\symmtletterfont
+ \relax\relax #1=;\empty\relax\@empty{\textfont\symmtletterfont}%
+ \expandafter\mst@fixmathfonts@\fontname\scriptfont\symmtletterfont
+ \relax\relax #1=;\empty\relax\@empty{\scriptfont\symmtletterfont}%
+ \expandafter\mst@fixmathfonts@\fontname\scriptscriptfont\symmtletterfont
+ \relax\relax #1=;\empty\relax\@empty{\scriptscriptfont\symmtletterfont}%
+}}%
+\expandafter\MTfixmathfonts\expandafter{\detokenize{mode}}%
\ifmst@LuaTeX
\everymath\expandafter{\the\everymath\mst@fixmathfonts}%
\everydisplay\expandafter{\the\everydisplay\mst@fixmathfonts}%
@@ -7198,7 +7411,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \cs{mathrm} and not \cs{mathnormal}.
%
% Actually math alphabet macros are created robust since \LaTeX{} from 2005,
-% so at |1.3v 2019/09/19| I decided to modify the old \mst approach a bit.
+% so at \mstrelease{1.3v} |2019/09/19| I decided to modify the old \mst approach a bit.
% Indeed with the old approach a \cs{mathtt} in a moving argument translates
% ultimately into \cs{Mathtt} but if for example the new context where it
% gets expanded is a subdued normal math version, this does not give the same
@@ -7220,10 +7433,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% robustness (except of course in the subdued math versions as there the math
% alphabets acquire back their original robust meanings.)
%
-% Potential breaking change at |1.3za|, the |defaultbf| etc... options do
+% Potential breaking change at \mstrelease{1.3za}, the |defaultbf| etc... options do
% not prevent the package declaring |\Mathbf| etc... commands.
%
-% |1.3za| defines a \cs{Mathnormalbold} and then defines \cs{mathnormalbold}
+% \mstrelease{1.3za} defines a \cs{Mathnormalbold} and then defines \cs{mathnormalbold}
% in terms of it in place of defining directly \cs{mathnormalbold} as a math
% alphabet. This is in relation to implementation of the |LGRgreek+|
% option. There was some hesitation though to restrict this change to that
@@ -7249,7 +7462,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\mst@original@it\mathit
\let\mst@original@sf\mathsf
\let\mst@original@tt\mathtt
-\def\mst@restorealphabets{% for subdued
+\def\mst@restorealphabets{%
\let\mathnormal\mst@original@normal
\let\mathrm\mst@original@rm
\let\mathbf\mst@original@bf
@@ -7264,7 +7477,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% there to be a robust and easy way to know when one is in the argument of
% \cs{mathrm} or \cs{mathbf}, and the code is spread on various chapters of
% \texttt{source2e.pdf}, and the comments are often not up-to-date. So I did
-% not try a too complex hack and decided for |1.3za| to add a numeric
+% not try a too complex hack and decided for \mstrelease{1.3za} to add a numeric
% indicator to let Greek letters react to it. It incorporates a space to be
% self-delimiting in an \cs{ifcase} to maintain expandability in numeric
% context of the to-be-defined Greek control sequences.
@@ -7316,7 +7529,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\MTgreekupdefault}
% \begin{macro}{\MTgreekitdefault}
% \begin{macro}{selfGreek}
-% |1.14b|: We can not move the \cs{DeclareSymbolFont} to the
+% \mstrelease{1.14b}: We can not move the \cs{DeclareSymbolFont} to the
% \cs{Mathastext} macro because it resets the font family in *all*
% math versions, and some could have been defined by the user with
% previous calls to \cs{Mathastext}. So we have to have them here.
@@ -7336,7 +7549,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% First we establish the cumulative effect of the greek related options.
%
-% |1.15c| introduces some possibilities to change the shapes of Greek letters
+% \mstrelease{1.15c} introduces some possibilities to change the shapes of Greek letters
% in each math versions, and even the Greek font (in LGR encoding). The
% commands \cs{MTitgreek} etc... will be used in-between calls to
% \cs{Mathastext} and re-adjust the shapes. And the command \cs{MTgreekfont}
@@ -7355,7 +7568,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \LaTeX\ (since 2020-02-02 now that I check this out). As a result this
% triggered Font Warnings in the log about the replacement of |up| by |n|.
%
-% |1.3x| refactors completely the handling of Greek letter shapes under the
+% \mstrelease{1.3y} refactors completely the handling of Greek letter shapes under the
% |LGRgreek(s)| options (and only under them). Under these options we don't
% use one font for lowercase Greek and anotherone for uppercase Greek (some
% above code comments have not been updated) but one math font |mtgreekit| for italic Greek
@@ -7372,7 +7585,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% In order to maintain perfect identical code for non-|LGRgreek|, the
% |LGRgreek| related code is simply added to previously shared
-% constructions. The |LGRgreek| behaviour will remain identical in most
+% constructions. The |LGRgreek| behavior will remain identical in most
% documents, but for example those who used some adventurous `|sc|' for the
% main shape (the one used per default for operator names) need to adjust
% \cs{MTgreekupdefault} to be `|sc|', for the math version being defined, or
@@ -7386,9 +7599,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% package; to be examined next time --- which may be a long time in
% future!).
%
-% Unfortunately the |1.3x/1.3y| did some internal renamings here (using
+% Unfortunately the \mstrelease{1.3y} did some internal renamings here (using
% |@lgr@| in macro names in place of |@greek@|) which were not everywhere
-% followed up, and this broke the |selfGreek| option. Fixed at |1.3z|.
+% followed up, and this broke the |selfGreek| option. Fixed at \mstrelease{1.3z}.
%
% \begin{macrocode}
\providecommand*\MTgreekupdefault{n}
@@ -7442,14 +7655,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\mathgreekit}
% \begin{macro}{\mathgreekupbold}
% \begin{macro}{\mathgreekitbold}
-% The |1.3x| refactoring was done in order to be able to define \cs{alphaup},
+% The \mstrelease{1.3y} refactoring was done in order to be able to define \cs{alphaup},
% etc \dots\ control sequences (\cs{mathchar}'s), as well as the italic ones.
% Formerly two math fonts were created but to be used respectively with
% lowercase or uppercase Greek. Now we have two fonts indexed by their shape,
% and we take advantage to create two math alphabets mapping to the two
% defined symbol fonts |mtgreekup| and |mtgreekit|.
%
-% |1.3za| adds \cs{mathgreekupbold} and \cs{mathgreekitbold}.
+% \mstrelease{1.3za} adds \cs{mathgreekupbold} and \cs{mathgreekitbold}.
% \begin{macrocode}
\ifmst@LGRgreek
\DeclareFontEncoding{LGR}{}{}
@@ -7484,10 +7697,11 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% In case we need the Euler font, we declare it here. It will use
% |uzeur.fd| from the \ctanpkg{eulervm} package of Walter~\textsc{Schmidt}
% \begin{macrocode}
-\ifmst@needeuler\mst@infoline{will use Euler font; command \string\MTEulerScale}
-\DeclareSymbolFont{mteulervm}{U}{zeur}{m}{n}
-\DeclareSymbolFontAlphabet{\MathEuler}{mteulervm}
-\DeclareMathAlphabet{\MathEulerBold}{U}{zeur}{\mst@bold}{n}
+\ifmst@needeuler
+\mst@infoline{will use Euler font; command \string\MTEulerScale}
+ \DeclareSymbolFont{mteulervm}{U}{zeur}{m}{n}
+ \DeclareSymbolFontAlphabet{\MathEuler}{mteulervm}
+ \DeclareMathAlphabet{\MathEulerBold}{U}{zeur}{\mst@bold}{n}
\fi
\newcommand*\MTEulerScale[1]{\edef\zeu@Scale{#1}}
\let\MathastextEulerScale\MTEulerScale
@@ -7534,14 +7748,15 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \cs{psy@scale} will be used to scale the font (see at the
% very end of this file).
% \begin{macrocode}
-\ifmst@needsymbol\mst@infoline{will use Symbol font; command \string\MTSymbolScale}
- \def\psy@scale{1}
- \DeclareSymbolFont{mtpsymbol}{U}{psy}{m}{n}
- \DeclareSymbolFontAlphabet{\MathPSymbol}{mtpsymbol}
-\AtBeginDocument{%
- \DeclareFontFamily{U}{psy}{}%
- \DeclareFontShape{U}{psy}{m}{n}{<->s*[\psy@scale] psyr}{}%
-}
+\ifmst@needsymbol
+ \mst@infoline{will use Symbol font; command \string\MTSymbolScale}
+ \def\psy@scale{1}
+ \DeclareSymbolFont{mtpsymbol}{U}{psy}{m}{n}
+ \DeclareSymbolFontAlphabet{\MathPSymbol}{mtpsymbol}
+ \AtBeginDocument{%
+ \DeclareFontFamily{U}{psy}{}%
+ \DeclareFontShape{U}{psy}{m}{n}{<->s*[\psy@scale] psyr}{}%
+ }
\fi
\newcommand*\MTSymbolScale[1]{\edef\psy@scale{#1}}
\let\MathastextSymbolScale\MTSymbolScale
@@ -7553,10 +7768,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macro}
% \end{macro}
% \begin{macro}{\pmvec}
-% Definition of a poor man version of the \cs{vec} accent
+% Definition of a poor man version of the \cs{vec} accent.
+% Done using \cs{protected}\cs{def} at \mstrelease{1.4}.
% \begin{macrocode}
-\DeclareRobustCommand*\pmvec[1]{\mathord{\stackrel{\raisebox{-.5ex}%
-{\tiny\boldmath$\mathord{\rightarrow}$}}{{}#1}}}
+\protected\def\pmvec#1{%
+ \mathord{\stackrel{\raisebox{-.5ex}{\tiny\boldmath$\mathord{\rightarrow}$}}%
+ {{}#1}%
+ }%
+}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\fouriervec}
@@ -7584,7 +7803,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% Some public macros to modify our private internals, and
% we will use them also ourself.
%
-% In version |1.1| we add the possibility to have two
+% In version \mstrelease{1.1} we add the possibility to have two
% distinct font shapes for letters and digits. So in fact
% we could as well have two really unrelated fonts but
% this is really not the spirit of the package.
@@ -7594,7 +7813,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% same time not modifying the \cs{familydefault} or \cs{romandefault}
% etc\dots
%
-% At time of |1.3za| I considered letting |LGRgreeks| and |selfGreeks|
+% At time of \mstrelease{1.3za} I considered letting |LGRgreeks| and |selfGreeks|
% support \cs{MTgreekfont} and this needed a chaneg to \cs{MTfamily}
% here but I dropped the idea. Too wary of documentation changes.
% \begin{macrocode}
@@ -7622,14 +7841,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\MTitGreek}
% \begin{macro}{\MTupGreek}
% \begin{macro}{\MTgreekfont}
-% |1.15c|: These new macros can be used in-between calls to \cs{Mathastext}.
+% \mstrelease{1.15c}: These new macros can be used in-between calls to \cs{Mathastext}.
% They reset the shapes for Greek letters (applies to LGRgreek(s) and
% selfGreek(s) options). The \cs{MTgreekfont} presupposes either LGRgreek or
% selfGreek (it is inoperant under |LGRgreeks| or |selfGreeks|).
% |\MTgreekfont{\familydefault}| is somewhat like using LGRgreeks or
% selfGreeks.
%
-% At time of |1.3za| I let \cs{MTgreekfont} also have an effect under option
+% At time of \mstrelease{1.3za} I let \cs{MTgreekfont} also have an effect under option
% |LGRgreeks| or |selfGreeks|, via a refactoring which also modified \cs{MTfamily}.
% \begin{macrocode}
\newcommand*\MTitgreek{\mst@itgreektrue\mst@upgreekfalse\def\mst@greek@select{0}}
@@ -7648,55 +7867,359 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macro}
% \end{macro}
% \end{macro}
+%
% At (long...) last we now change the font for the letters of the
-% latin alphabet. In version |1.1|, Latin letters have their own font
+% latin alphabet. In version \mstrelease{1.1}, Latin letters have their own font
% (shape).
%
-% |1.2b| initiated the use of mathematically active letters to insert the italic
-% corrections. With version |1.3| the use of math active letters is also for
-% extra muglue added before and after the letters. Use of |\@for| to shorten the
-% code initiated with release |1.3|.
+% \mstrelease{1.2b} |2012/12/28| now that we understand the great advantages of |"8000|
+% we do it also for all letters a-z and A-Z to insert automatically the
+% italic corrections. See the \hyperref[sec:ic]{discussion} in the user
+% manual. Ironically I wrote the code initially for the |italic| option only
+% to realize later it was more suitable to using an \emph{upright} text font
+% in math mode! So this mathematical activation of the letters is not done if
+% the font shape is detected to be |it| or |sl|; to bypass this the command
+% \cs{MTicinmath} is provided.
+%
+% \mstrelease{1.2e} |2013/01/10| corrects a bad oversight of \mstrelease{1.2b} in
+% \cs{mst@mathactivate} which made the reproduction of the user manual
+% illustrations with |$f_i^i$| impossible. As \cs{mst@mathactivate} was
+% originally used also to get the non-letters obey math alphabet while
+% maintaining the \TeX{} spacings, it added no extra braces. The braces
+% should however be added for expansion of math active letters, in order of
+% things like |x^y| to work as expected. (the group braces do not prevent
+% ligatures when the letters are arguments to the math alphabet commands,
+% the added macros \cs{mst@itcorr} and \cs{mst@before@<letter>} expanding to
+% nothing).
+%
+% Added note |2016/01/06|: it should be explicitly said that the extra
+% |{..}| in |\mst@mathactivate| for letters end up creating |\hbox|'es
+% around each letter with its extra skips and explicit italic correction,
+% when present. These skips are thus set at natural width and do not add
+% any break point.
+%
+% Added note at \mstrelease{1.4}: the extra pair of braces is inserted here
+% at \cs{mst@DeclareMathLetter}, not at \cs{mst@mathactivate}.
+%
+% \mstrelease{1.3} |2013/09/02| extends the use of mathematically active letters to
+% allow the user to specify muglue before and after the letter itself (see
+% \cs{MTsetmathskips}, below).
+% Mathematically active letters were previously used only to add the italic
+% correction; the math activation has now been separated and put in
+% \cs{MTmathactiveletters}. There is also \cs{MTmathactiveLetters} to allow
+% math activation only for the uppercase letters. To cancel the (now default,
+% even with option |italic|) math
+% activation of letters, there is \cs{MTmathstandardletters}. Version \mstrelease{1.3a}
+% removes some silly |\string|'s from the code, which prevented to pass
+% macros as first argument to the command.
+%
+% Added note |2016/01/06|:
+% Notice that the initially |\relax| tokens \verb+\mst@[before|after]@<letter>+
+% formed with |\csname...\endcsname| do not modify TeX's math layout:
+% |{\relax f\relax}| is like |f| (also for ligatures inside |\mathrm| for
+% example).
+%
+% The code here was refactored at \mstrelease{1.4} and this simplified
+% \cs{mst@mathactivate} definition.
+%
+% The \cs{mst@before}\meta{letter} were renamed at \mstrelease{1.4} into
+% \cs{mst@before@}\meta{letter} and are incorporated at the
+% \cs{mst@DeclareMathLetter} location. Formerly \cs{mst@}\meta{letter} was
+% only the math symbol, now \cs{MTmathcharletter}\meta{letter} is used for that and
+% \cs{MTcommandletter}\meta{letter} is the whole thing to which the active letter
+% expands (the definition of the active letter done by \cs{mst@mathactivate}
+% is done with a \cs{def}, not a \cs{let}).
+% \begin{macro}{\mst@DeclareMathLetter}
+%
+% \mstrelease{1.4b} adds |noletters| option.
% \begin{macrocode}
-\def\mst@DeclareMathLetter #1{%
+\ifmst@noletters
+ \let\MTmathactiveletters\@empty
+ \let\MTmathactiveLetters\@empty
+ \let\MTmathstandardletters\@empty
+\else
+\def\mst@DeclareMathLetter#1#2#3#4#5{%
\DeclareMathSymbol {#1}{\mathalpha}{mtletterfont}{`#1}%
- \expandafter
- \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{mtletterfont}{`#1}%
- \expandafter\mst@addtodo@az\expandafter #1\csname mst@#1\endcsname
+ \DeclareMathSymbol {#4}{\mathalpha}{mtletterfont}{`#1}%
+ \def#2{{#3#4#5\mst@itcorr}}%
+}%
+\@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{%
+ \expandafter\expandafter\expandafter\mst@DeclareMathLetter
+ \expandafter\mst@tmp
+ \csname MTcommandletter\mst@tmp\expandafter\endcsname
+ \csname mst@before@\mst@tmp\expandafter\endcsname
+ \csname MTmathcharletter\mst@tmp\expandafter\endcsname
+ \csname mst@after@\mst@tmp\endcsname
}%
-\@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do
- {\expandafter\mst@DeclareMathLetter\mst@tmp}%
\ifmst@frenchmath \def\mst@font@tbu{mtoperatorfont}%
\else \def\mst@font@tbu{mtletterfont}%
\fi
-\def\mst@DeclareMathLetter #1{%
+\def\mst@DeclareMathLetter #1#2#3#4#5{%
\DeclareMathSymbol {#1}{\mathalpha}{\mst@font@tbu}{`#1}%
- \expandafter
- \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{\mst@font@tbu}{`#1}%
- \expandafter\mst@addtodo@AZ\expandafter #1\csname mst@#1\endcsname
+ \DeclareMathSymbol {#4}{\mathalpha}{\mst@font@tbu}{`#1}%
+ \def#2{{#3#4#5\mst@ITcorr}}%
}%
-\@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do
- {\expandafter\mst@DeclareMathLetter\mst@tmp}%
-\let\mst@DeclareMathLetter\relax
+\@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
+ \expandafter\expandafter\expandafter\mst@DeclareMathLetter
+ \expandafter\mst@tmp
+ \csname MTcommandletter\mst@tmp\expandafter\endcsname
+ \csname mst@before@\mst@tmp\expandafter\endcsname
+ \csname MTmathcharletter\mst@tmp\expandafter\endcsname
+ \csname mst@after@\mst@tmp\endcsname
+}%
+\def\mst@mathactivate@lowercase{%
+ \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{%
+ \expandafter\expandafter\expandafter
+ \mst@mathactivate\expandafter\mst@tmp\csname MTcommandletter\mst@tmp\endcsname{}%
+ }%
+}%
+\def\mst@mathactivate@uppercase{%
+ \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
+ \expandafter\expandafter\expandafter
+ \mst@mathactivate\expandafter\mst@tmp\csname MTcommandletter\mst@tmp\endcsname{}%
+ }%
+}%
+\def\mst@mathdeactivate@lowercase{%
+ \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp=\csname MTmathcharletter\mst@tmp\endcsname
+ }%
+}%
+\def\mst@mathdeactivate@uppercase{%
+ \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp=\csname MTmathcharletter\mst@tmp\endcsname
+ }%
+}%
+% \end{macrocode}
+% We redo the definitions with some added layer (silly because will never
+% happen in pratice that a letter is Babel-active) related to
+% \cs{mst@do@activecase} in \ctanpkg{babel} context.
+% \begin{macrocode}
+\ifmst@everymath
+\else
+ \def\mst@mathdeactivate@lowercase{%
+ \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp=
+ \csname MTmathcharletter\mst@tmp\endcsname
+ }%
+ }%
+ \def\mst@mathdeactivate@uppercase{%
+ \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp=
+ \csname MTmathcharletter\mst@tmp\endcsname
+ }%
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MTmathactiveletters}
+% \begin{macro}{\MTmathstandardletters}
+%
+% Important changes at \mstrelease{1.4}.
+%
+% Ascii letters are math-activated at package loading time, rather than again and
+% again each time math mode is entered. But not under |subdued| mode, then
+% the activation is done as part of switching to some math version.
+%
+% The ordering in this code source is a bit of a mess, and it may be too early
+% here to execute \cs{MTmathactiveletters} (I think it is fine now after some
+% major moving around of code chunks but will not waste time checking
+% it) so this will be postponed to end of package loading. Prior to
+% \mstrelease{1.4} \cs{MTmathactiveletters} could be executed here as it only
+% set some toggle to be obeyed at every math mode entrance.
+% \begin{macrocode}
+\def\mst@mathactivateletters{%
+ \mst@mathactivate@lowercase
+ \mst@mathactivate@uppercase
+}%
+\newcommand*\MTmathactiveletters{%
+ \mst@OnlyIfNotSubdued
+ \mst@mathactivateletters
+}%
+\AtEndOfPackage{\MTmathactiveletters}%
+% \end{macrocode}
+% Duplication due to some legacy reasons, do not rely on these internal
+% macro names, beware they change at future release.
+% \begin{macrocode}
+\def\mst@mathactivateLetters{\mst@activate@uppercase}%
+\newcommand*\MTmathactiveLetters{%
+ \mst@OnlyIfNotSubdued
+ \mst@mathactivateLetters
+}%
+\newcommand*\MTmathstandardletters{%
+ \mst@mathdeactivate@lowercase
+ \mst@mathdeactivate@uppercase
+}%
+\fi
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\MTicinmath}
+% \begin{macro}{\MTICinmath}
+% \begin{macro}{\MTnoicinmath}
+% \begin{macro}{\MTicalsoinmathxx}
+% \cs{MTnoicinmath} can also be used from inside math mode.
+%
+% \cs{MTicalsoinmathxx} is destined to be used inside
+% \cs{mathnormalbold} as I didn't want to add the complication of
+% extracting the family number used inside \cs{mathnormalbold} (will
+% perhaps come back if I have time to spend on
+% |source2e|). Added note |2016/01/06|: this number is a priori simply
+% |symmtletterfont+1|.
+%
+% \cs{MTicinmath} can also be used inside math mode, to revert an
+% earlier \cs{MTnoicinmath} from inside the same math group.
+%
+% \mstrelease{1.3i} |2016/01/06|: For some reason which I have now forgotten I did
+% until then:
+% \begin{verbatim}
+% \def\mst@itcorr{\ifnum\fam=\m@ne\/\else\ifnum\fam=\symmtletterfont\/\fi\fi}%
+% \end{verbatim}
+% hence italic corrections were also applied inside \cs{mathnormal} (for
+% upright fonts; \cs{mathnormalbold} math alphabet was not treated like
+% \cs{mathnormal}). I now drop this to be more in sync with the handling
+% of the extra skips around letters. Everything gets suppressed inside
+% all math alphabets, allowing ligatures, even for \cs{mathnormal}.
+%
+% \begin{macrocode}
+\newcommand*\MTicinmath{%
+ \MTmathactiveletters
+ \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}%
+ \let\mst@ITcorr\mst@itcorr
+}
+\newcommand*\MTICinmath{%
+ \MTmathactiveLetters
+ \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}%
+}
+\newcommand*\MTnoicinmath{\let\mst@itcorr\@empty\let\mst@ITcorr\@empty}
+\newcommand*\MTnoICinmath{\let\mst@ITcorr\@empty}
+\newcommand*\MTicalsoinmathxx{%
+ \ifx\mst@itcorr\@empty\else\def\mst@itcorr{\/}\fi
+ \ifx\mst@ITcorr\@empty\else\def\mst@ITcorr{\/}\fi
+}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\MTsetmathskips}
+% \begin{macro}{\MTunsetmathskips}
+% \mstrelease{1.3} |2013/09/02|: user level command to specify extra spaces in math mode
+% around the letters (only the 7bit a,b,..,z and A,B,..,Z). First parameter is
+% the letter, second is the math skip to be inserted before, and third the
+% skip to be inserted after; for example \cs{thickmuskip} or explicitly
+% |0.1mu|.
+%
+% For this, letters are made mathematically active. This is now the package
+% default (version \mstrelease{1.2} did this only in the absence of option |italic|, or
+% more precisely when the font used was not of shape |it| or |sl|). But if
+% \cs{MTsetmathskips} has not been used for that letter, the only effect of
+% the math activation is, as in \mstrelease{1.2}, to add the italic correction
+% automatically, except when the font shape is detected to be |it| or |sl|; in
+% these latter cases, although mathematically active, the letter acts in the
+% standard way.
+%
+% The command \cs{MTmathstandardletters} turns off math activation and its
+% effects for all letters.
+%
+% Ligatures within the argument of a math alphabet command are impeached by
+% skips; so \cs{MTunsetmathskips} is provided to cancel the skips for one
+% specific letter (|f| for example).
+%
+% \mstrelease{1.3a} |2013/09/04|: I strangely had |\string#1| inside \cs{MTsetmathskips}.
+% Phobic of catcode active letters... but with |\string| one needs some
+% |\expandafter| to use \cs{MTsetmathskips} in an |\@for| loop for example. It
+% is better to allow the first argument to be a macro or anything expanding to
+% a letter, and to not be paranoid about improbable catcode active letters
+% (the user just has to tame them at the time of the \cs{MTsetmathskip}) so I
+% take out these |\string|'s.
+%
+% \mstrelease{1.3i} |2016/01/06|: the extra skips are suppressed for the arguments of
+% math alphabet commands. This applies in particular for amsmath's
+% \cs{DeclareMathOperator}.
+%
+% \begin{macrocode}
+\newcommand*\MTsetmathskips[3]{%
+ \@namedef{mst@before@#1}{\ifnum\fam=\m@ne\mskip#2\relax\fi}%
+ \@namedef{mst@after@#1}{\ifnum\fam=\m@ne\mskip#3\relax\fi}%
+}
+\newcommand*\MTunsetmathskips[1]{%
+ \@namedef{mst@before@#1}{}%
+ \@namedef{mst@after@#1}{}%
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\mst@DeclareMathDigit}
+% \begin{macro}{\MTmathactivedigits}
+% \begin{macro}{\MTmathstandarddigits}
+% In version \mstrelease{1.1}, we have now separated digits from letters, so paradoxically
+% it is less problematic to give them the |mathalpha| type.
+%
+% \mstrelease{1.4} had defined some no-op \cs{MTmathstandarddigits} and
+% \cs{MTmathactivedigits} but if not under option |nodigits|. As they are
+% used in \cs{MTeverymathoff} and \cs{MTeverymathdefault} though this broke
+% the option |nodigits| (either with |subdued| or when using \cs{MTversion}).
+%
+% Defining them as \cs{empty} so that \LaTeX{} defensive mechanism with
+% \cs{newcommand} works but this is sooooooo hypothetical context!
+% \begin{macrocode}
+\let\MTmathactivedigits\empty
+\let\MTmathstandarddigits\empty
\ifmst@nodigits\else
-\def\mst@font@tbu{mtoperatorfont}%
+ \def\mst@font@tbu{mtoperatorfont}%
+ \ifmst@symboldigits \def\mst@font@tbu{mtpsymbol}\fi
+ \ifmst@eulerdigits \def\mst@font@tbu{mteulervm}\fi
+ \DeclareMathSymbol{0}{\mathalpha}{\mst@font@tbu}{`0}%
+ \DeclareMathSymbol{1}{\mathalpha}{\mst@font@tbu}{`1}%
+ \DeclareMathSymbol{2}{\mathalpha}{\mst@font@tbu}{`2}%
+ \DeclareMathSymbol{3}{\mathalpha}{\mst@font@tbu}{`3}%
+ \DeclareMathSymbol{4}{\mathalpha}{\mst@font@tbu}{`4}%
+ \DeclareMathSymbol{5}{\mathalpha}{\mst@font@tbu}{`5}%
+ \DeclareMathSymbol{6}{\mathalpha}{\mst@font@tbu}{`6}%
+ \DeclareMathSymbol{7}{\mathalpha}{\mst@font@tbu}{`7}%
+ \DeclareMathSymbol{8}{\mathalpha}{\mst@font@tbu}{`8}%
+ \DeclareMathSymbol{9}{\mathalpha}{\mst@font@tbu}{`9}%
% \end{macrocode}
-% In version |1.1|, we have now separated digits from letters, so paradoxically
-% it is less problematic to give them the |mathalpha| type.
-% \begin{macrocode}
-\ifmst@symboldigits \def\mst@font@tbu{mtpsymbol} \fi
-\ifmst@eulerdigits \def\mst@font@tbu{mteulervm} \fi
-\DeclareMathSymbol{0}{\mathalpha}{\mst@font@tbu}{`0}%
-\DeclareMathSymbol{1}{\mathalpha}{\mst@font@tbu}{`1}%
-\DeclareMathSymbol{2}{\mathalpha}{\mst@font@tbu}{`2}%
-\DeclareMathSymbol{3}{\mathalpha}{\mst@font@tbu}{`3}%
-\DeclareMathSymbol{4}{\mathalpha}{\mst@font@tbu}{`4}%
-\DeclareMathSymbol{5}{\mathalpha}{\mst@font@tbu}{`5}%
-\DeclareMathSymbol{6}{\mathalpha}{\mst@font@tbu}{`6}%
-\DeclareMathSymbol{7}{\mathalpha}{\mst@font@tbu}{`7}%
-\DeclareMathSymbol{8}{\mathalpha}{\mst@font@tbu}{`8}%
-\DeclareMathSymbol{9}{\mathalpha}{\mst@font@tbu}{`9}%
+% \mstrelease{1.4} adds possibility of mathematically active digits.
+% \begin{macrocode}
+ \ifmst@activedigits
+ \def\mst@DeclareMathDigit #1#2#3{%
+ \DeclareMathSymbol{#3}{\mathalpha}{\mst@font@tbu}{`#1}%
+ \def#2{#3}%
+ }%
+ \@tfor\mst@tmp:=0123456789\do{%
+ \expandafter\expandafter\expandafter\mst@DeclareMathDigit
+ \expandafter\mst@tmp
+ \csname MTcommanddigit\romannumeral\mst@tmp\expandafter\endcsname
+ \csname MTmathchardigit\romannumeral\mst@tmp\endcsname
+ }%
+ \def\mst@mathactivatedigits{%
+ \@tfor\mst@tmp:=0123456789\do{%
+ \expandafter\expandafter\expandafter\mst@mathactivate
+ \expandafter\mst@tmp\csname MTcommanddigit\romannumeral\mst@tmp\endcsname{}%
+ }%
+ }%
+ \def\MTmathactivedigits{\mst@OnlyIfNotSubdued\mst@mathactivatedigits}%
+ \MTmathactivedigits
+ \ifmst@everymath
+ \def\MTmathstandarddigits{%
+ \@tfor\mst@tmp:=0123456789\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp
+ =\csname MTmathchardigit\romannumeral\mst@tmp\endcsname
+ }%
+ }%
+ \else
+% \end{macrocode}
+% We inject some extra layer (silly because will never happen in pratice
+% that a digit token is Babel-active) related to \cs{mst@do@activecase} in
+% \ctanpkg{babel} context.
+% \begin{macrocode}
+ \def\MTmathstandarddigits{%
+ \@tfor\mst@tmp:=0123456789\do{%
+ \expandafter\mathcode\expandafter`\mst@tmp
+ =\csname MTmathchardigit\romannumeral\mst@tmp\endcsname
+ }%
+ }%
+ \fi
+ \fi
\fi
% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
% When |symboldelimiters| is passed as an option, we use the
% Symbol font for the printable characters other than
% letters and digits.
@@ -7709,7 +8232,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\def\mst@font@tbu{mtoperatorfont}%
\fi
% \end{macrocode}
-% |1.2| adds the tricks to let non letters/digits obey math alphabets. We have
+% \mstrelease{1.2} adds the tricks to let non letters/digits obey math alphabets. We have
% to double the definitions for easy switch on-off of the mechanism, via a token
% list which is put into \cs{everymath} and \cs{everydisplay}.
% \begin{macrocode}
@@ -7727,7 +8250,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\mst@@doasterisk}
% \begin{macro}{\MTnormalasterisk}
% \begin{macro}{\MTactiveasterisk}
-% |1.12d| The \cs{ast} or |*| is defined in |fontmath.ltx| as a binary
+% \mstrelease{1.12d} The \cs{ast} or |*| is defined in |fontmath.ltx| as a binary
% operator from the |symbols| font. Usually the asterisk from the text
% font is in a raised position. Previous versions of \mst did nothing
% with \cs{ast} but strangely defined |*| to be the one from the text
@@ -7740,61 +8263,100 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% The user macro \cs{MTlowerast} sets the amount
% of lowering to be applied to the text asterisk.
%
-% |1.12e| Somehow there was a big omission in |1.12d|, the
+% \mstrelease{1.12e} Somehow there was a big omission in \mstrelease{1.12d}, the
% command \cs{MTlowerast} as described in the manual was missing!
%
-% nota bene: it is assumed that |*| is of type |other| when \mst
-% is loaded... it should neither be active, nor of type |letter|!
+% \mstrelease{1.3i} adds \cs{MTnormalasterisk} and \cs{MTactiveasterisk}.
+% They do nothing if package is loaded without option |asterisk|.
+%
+% \mstrelease{1.4} uses \cs{protected} rather than robust commands.
+% And implements the support for the new default of not using \cs{everymath}.
%
-% |1.3i| adds \cs{MTnormalasterisk} and \cs{MTactiveasterisk}. They do nothing
-% without option |asterisk|.
+% The first two \cs{newcommand*} are because the commands were previously
+% defined unconditionally anyhow, in a way making them no-op's without
+% option |asterisk|. Finally using \cs{let} here with \cs{empty} with
+% the idea of less impact on \TeX{} internals, but losing \LaTeX{} check.
% \begin{macrocode}
-\def\mst@@doasterisk{\let\ast\mst@ast\mst@mathactivate*{}\mst@ast}%
-\newcommand*\MTnormalasterisk {\let\mst@doasterisk\relax}
-\newcommand*\MTactiveasterisk {\let\mst@doasterisk\mst@@doasterisk}
+\let\MTnormalasterisk\empty
+\let\MTactiveasterisk\empty
\ifmst@asterisk\mst@infoline{asterisk: \string\ast\space and *}
- \AtBeginDocument{%
- \everymath\expandafter
- {\the\everymath \mst@doasterisk \MTnormalasterisk }%
- \everydisplay\expandafter
- {\the\everydisplay\mst@doasterisk \MTnormalasterisk }}
\ifmst@symbolmisc
- \def\mst@bin@ast{%
- \mathbin{\mathchoice{\raisebox{-.1\height}%
- {\the\textfont\symmtpsymbol\char42}}%
- {\raisebox{-.1\height}%
- {\the\textfont\symmtpsymbol\char42}}%
- {\raisebox{-.1\height}%
- {\the\scriptfont\symmtpsymbol\char42}}%
- {\raisebox{-.1\height}%
- {\the\scriptscriptfont\symmtpsymbol\char42}}}}%
+ \protected\def\mst@bin@ast{\mathbin{\mathchoice
+ {\raisebox{-.1\height}{\the\textfont\symmtpsymbol\char42}}%
+ {\raisebox{-.1\height}{\the\textfont\symmtpsymbol\char42}}%
+ {\raisebox{-.1\height}{\the\scriptfont\symmtpsymbol\char42}}%
+ {\raisebox{-.1\height}{\the\scriptscriptfont\symmtpsymbol\char42}}}%
+ }%
\else
- \def\mst@bin@ast{%
- \mathbin{\mathchoice{\raisebox{-\mst@lowerast}%
- {\the\textfont\symmtoperatorfont\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\textfont\symmtoperatorfont\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\scriptfont\symmtoperatorfont\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\scriptscriptfont\symmtoperatorfont\char42}}}}%
+ \protected\def\mst@bin@ast{\mathbin{\mathchoice
+ {\raisebox{-\mst@lowerast}{\the\textfont\symmtoperatorfont\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\textfont\symmtoperatorfont\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\scriptfont\symmtoperatorfont\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\scriptscriptfont\symmtoperatorfont\char42}}}%
+ }%
\fi
- \def\mst@varfam@ast{\ifnum\fam=\m@ne\mst@bin@ast\else
- \mathbin{\mathchoice{\raisebox{-\mst@lowerast}%
- {\the\textfont\fam\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\textfont\fam\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\scriptfont\fam\char42}}%
- {\raisebox{-\mst@lowerast}%
- {\the\scriptscriptfont\fam\char42}}}\fi}%
- \MTactiveasterisk
- \DeclareRobustCommand*{\mst@ast}{\mst@bin@ast}
+ \protected\def\mst@varfam@ast{\ifnum\fam=\m@ne
+ \mst@bin@ast
+ \else
+ \mathbin{\mathchoice
+ {\raisebox{-\mst@lowerast}{\the\textfont\fam\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\textfont\fam\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\scriptfont\fam\char42}}%
+ {\raisebox{-\mst@lowerast}{\the\scriptscriptfont\fam\char42}}}%
+ \fi}%
+ \let\mst@ast\mst@bin@ast
\newcommand*\MTlowerast[1]{\def\mst@lowerast{#1}}
\MTlowerast{.3\height}
- \mst@do@easynonletters\expandafter\expandafter\expandafter
- {\expandafter\the\expandafter\mst@do@easynonletters
- \expandafter\def\csname mst@ast \endcsname{\mst@varfam@ast}}
+% \end{macrocode}
+% Arguably \mst should have used the ``hard'' non-letters affiliation here.
+% Probably too late to change this in 2024... and costly in documentation
+% time.
+% \begin{macrocode}
+ \mst@do@easynonletters\expandafter{%
+ \the\mst@do@easynonletters\let\mst@ast\mst@varfam@ast
+ }%
+ \ifmst@everymath
+ \def\mst@@doasterisk {\let\ast\mst@ast\mst@mathactivate*{}\mst@ast}%
+ \def\MTnormalasterisk {\let\mst@doasterisk\relax}
+ \def\MTactiveasterisk {\let\mst@doasterisk\mst@@doasterisk}
+ \MTactiveasterisk
+ \AtBeginDocument{%
+ \everymath\expandafter
+ {\the\everymath \mst@doasterisk \MTnormalasterisk }%
+ \everydisplay\expandafter
+ {\the\everydisplay\mst@doasterisk \MTnormalasterisk }%
+ }%
+ \else
+ \def\MTnormalasterisk{\AtBeginDocument{\MTnormalasterisk}}
+ \def\MTactiveasterisk{\AtBeginDocument{\MTactiveasterisk}}
+% \end{macrocode}
+% For legacy reasons the responsiveness to math alphabets is made part of the
+% handling of ``easy'' non letters (probably because it is on per default),
+% and this causes me problems of internal logic and even more annoyingly of
+% documentation. I am leaving this standing because it would be too much of a
+% pain at this stage to document a change and it was already quite annoying to
+% better document actual situation.
+% \begin{macrocode}
+ \mst@undo@easynonletters\expandafter{%
+ \the\mst@do@easynonletters\let\mst@ast\mst@bin@ast
+ }%
+% \end{macrocode}
+% For legacy reasons the action of \cs{MTactiveasterisk} is not testing if
+% in |subdued| mode.
+%
+% MEMO: if |subdued| there is \cs{MTeverymathoff} added to |\begin{document}|
+% near end of package and it will do \cs{MTnormalasterisk}.
+% \begin{macrocode}
+ \AtBeginDocument{%
+ \let\mst@orig@abd@ast\ast
+ \edef\MTnormalasterisk{\noexpand\mst@mathdeactivate*{\the\mathcode`\*}%
+ \let\noexpand\ast\noexpand\mst@orig@abd@ast}%
+ \def\MTactiveasterisk{\def\ast{\mst@ast}%
+ \mst@mathactivate*{}\mst@ast
+ }%
+ \MTactiveasterisk
+ }
+ \fi
\fi
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
@@ -7807,17 +8369,19 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% [(Dec. 2012) should I reexamine these definitive sounding remarks?]
%
-% |1.3x| of |2022/11/03| adds support for |ncccomma| option.
+% \begin{macro}{ncccomma}
+% \begin{macro}{decimalcomma}
+% \mstrelease{1.3y} of |2022/11/03| adds support for |ncccomma| option.
%
% Some non-obvious hack is needed for compatibility with our home-made
% mechanism of non-letters obeying math alphabet commands. Alternative would
-% have been to not load at all \ctanpkg{ncccomma} (or since |1.3zb|
+% have been to not load at all \ctanpkg{ncccomma} (or since \mstrelease{1.3zb}
% \ctanpkg{decimalcomma}) and provide the functionality purely by our own
% means; because here in order to support \cs{MTnonlettersobeymathxx} we are
% almost contrived to override quasi entirely the contents of these tiny
% packages.
%
-% |1.3zb| adds support for the |decimalcomma| option. This was mandatory to
+% \mstrelease{1.3zb} adds support for the |decimalcomma| option. This was mandatory to
% keep a compatibility layer with \ctanpkg{frenchmath} after its |2.7| release
% of |2023/12/23|.
%
@@ -7838,7 +8402,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\RequirePackage{decimalcomma}[2023/12/28]% 1.3 or later
% \end{macrocode}
% Attention
-% that the breaking behavior of \cs{AtBeginDocument} at October 2020
+% that the \textbf{BREAKING CHANGE} to \cs{AtBeginDocument} at October 2020
% \LaTeX{} release means that, \emph{taking into account that \emph{\mst} already has
% employed some \emph{\cs{AtBeginDocument}} prior to loading} \ctanpkg{decimalcomma}, any
% code here will be executed \textbf{BEFORE} the \cs{AtBeginDocument} material
@@ -7855,7 +8419,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% latter for which \ctanpkg{babel-french} has a dectection mechanism, which as
% a result avoids the bad interactions with \ctanpkg{numprint} plus its
% |autolanguage| option, which are mentioned below in the \ctanpkg{ncccomma}
-% branch. So we don't need here the workaround done below is in the
+% branch. So we don't need here the workaround done below in the
% |ncccomma| branch. Notice though that in both cases, the `intelligent'
% comma feature will be applied to the whole document, even inside those
% portions where the user has switched to another language such as English.
@@ -7884,19 +8448,26 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\mathcomma\mst@varfam@comma
\let\sm@rtcomma\mst@sm@rtcomma
}
- \else % end of decimalcomma branch
- \ifmst@ncccomma
- \mst@infoline{loading package ncccomma for `smart comma\string'}
- \RequirePackage{ncccomma}%
+ \ifmst@everymath
+ \else
+ \edef\mst@tmp{\mathchardef\mathcomma=\the\mathcode`\,\relax}%
+ \mst@undo@nonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@nonletters}%
+ \fi
+ \else
% \end{macrocode}
% Work around some bad interaction of \ctanpkg{ncccomma}, \ctanpkg{numprint}
% with |autolanguage| and \ctanpkg{babel-french}. See
% \centeredline{\url{https://github.com/latex3/babel/issues/190}} for
-% background. Some hesitation whether I should use the \cs{noextrasfrench}
-% to work around \ctanpkg{babel-french} code influencing non-French sections
-% in the document. Update: I think the last sentence means I was hesitating
-% at time of |1.3x| whether to insert some extra code inside the \cs{noextrasfrench}.
+% background. Some hesitation whether I should use the \cs{noextrasfrench} to
+% work around \ctanpkg{babel-french} code influencing non-French sections in
+% the document. Update: I think the last sentence means I was hesitating at
+% time of \mstrelease{1.3y} whether to insert some extra code inside the
+% \cs{noextrasfrench}.
% \begin{macrocode}
+ \ifmst@ncccomma
+ \mst@infoline{loading package ncccomma for `smart comma\string'}
+ \RequirePackage{ncccomma}%
\AtBeginDocument{%
\mathcode`\,="8000\relax
\@ifpackageloaded{babel}{%
@@ -7918,34 +8489,77 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\mathcomma\mst@varfam@comma
\let\NCC@comma\mst@NCC@comma
}
- \else % neither ncccomma nor decimalcomma
+ \ifmst@everymath
+ \else
+% \end{macrocode}
+% Attention that \ctanpkg{ncccomma} (contrarily to \ctanpkg{icomma} loaded by
+% \ctanpkg{decimalcomma} has made the comma math active already when we loaded it.
+% So we don't use |\the\mathcode`\,\relax| here.
+% \begin{macrocode}
+ \edef\mst@tmp{\mathchardef\mathcomma=\the\mathcomma\relax}%
+ \mst@undo@nonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@nonletters}%
+ \fi
+ \else
+% \end{macrocode}
+% Neither option |ncccomma| nor |decimalcomma|. The \mstrelease{1.4} non-use
+% of \cs{everymath} and consequences is accounted for automatically by
+% \cs{mst@addtodo@nonletters}.
+% \begin{macrocode}
\expandafter\mst@addtodo@nonletters\string,\mathpunct\mst@varfam@comma
\fi\fi
+% \end{macrocode}
+% math dot.
+% \begin{macrocode}
\DeclareMathSymbol{.}{\mathord}{\mst@font@tbu}{"2E}
\DeclareMathSymbol{\mst@varfam@dot}{\mathalpha}{\mst@font@tbu}{"2E}
\mst@addtodo@easynonletters\.\mst@varfam@dot
- \DeclareMathSymbol{:}{\mathrel}{\mst@font@tbu}{"3A} % relation spacing
+% \end{macrocode}
+% math colon.
+% \begin{macrocode}
+ \DeclareMathSymbol{:}{\mathrel}{\mst@font@tbu}{"3A}
\DeclareMathSymbol{\mst@varfam@colon}{\mathalpha}{\mst@font@tbu}{"3A}
\expandafter\mst@addtodo@nonletters\string:\mathrel\mst@varfam@colon
\@ifpackageloaded{amsmath}
- {} % \colon defined in amsmath.sty in terms of : with some enlarged explicit
- % spacing. No need to intervene.
- {% no amsmath, use standard punctuation spacing
+% \end{macrocode}
+% \cs{colon} gets defined in \ctanpkg{amsmath} in terms of |:| with some enlarged explicit
+% spacing. No need to intervene.
+% \begin{macrocode}
+ {}
+% \end{macrocode}
+% No \ctanpkg{amsmath}, use standard punctuation spacing.
+%
+% The reason for |\et\colon\undefined| is if some package has redefined
+% \cs{colon} which then can not be used in \cs{DeclareMathSymbol} anymore (we
+% shamelessly overwrite...)
+% \begin{macrocode}
+ {%
\let\colon\undefined
- % the reason is if some package has redefined \colon which then
- % can not be used in \cs{DeclareMathSymbol} anymore (we
- % shamelessly overwrite...)
\DeclareMathSymbol{\colon}{\mathpunct}{\mst@font@tbu}{"3A}
- \mst@do@nonletters\expandafter{\the\mst@do@nonletters
+ \let\mst@colon\colon
+% \end{macrocode}
+% \mstrelease{1.3v} uses \cs{protected} for the (optional) \cs{colon} redefinition.
+% \begin{macrocode}
+ \mst@do@nonletters\expandafter{%
+ \the\mst@do@nonletters
+ \protected\def\colon{\mathpunct{\mst@varfam@colon}}%
+ }%
% \end{macrocode}
-% |1.3v| uses \cs{protected} for the (optional) \cs{colon} redefinition.
+% \mstrelease{1.4} needs extras.
% \begin{macrocode}
- \protected\def\colon{\mathpunct{\mst@varfam@colon}}}%
+ \ifmst@everymath
+ \else
+ \mst@undo@nonletters\expandafter{%
+ \the\mst@undo@nonletters
+ \let\colon\mst@colon
+ }%
+ \fi
}
- \DeclareMathSymbol{\mst@varfam@pointvirgule}{\mathalpha}{\mst@font@tbu}{"3B}
% \end{macrocode}
-% |1.3x| adds |binarysemicolon| option.
+% Semi-colon.
+% \mstrelease{1.3y} adds |binarysemicolon| option.
% \begin{macrocode}
+ \DeclareMathSymbol{\mst@varfam@pointvirgule}{\mathalpha}{\mst@font@tbu}{"3B}
\ifmst@binarysemicolon
\mst@infoline{semi-colon set to be of type \string\mathbin}
\DeclareMathSymbol{;}{\mathbin}{\mst@font@tbu}{"3B}
@@ -7953,21 +8567,22 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\else
\DeclareMathSymbol{;}{\mathpunct}{\mst@font@tbu}{"3B}
\expandafter\mst@addtodo@nonletters\string;\mathpunct\mst@varfam@pointvirgule
- \fi % binarysemicolno
-\fi % end \ifmst@nopunct else branch
+ \fi
+\fi
% \end{macrocode}
+% \end{macro}\end{macro}
% \begin{macro}{\relbar}
% Due to the way = and - are used by \LaTeX{} in arrows, we will
% have to redefine \cs{Relbar} and \cs{relbar} in order for
% them to preserve their original meanings.
%
-% |1.15d|: Oct 13, 2012. Belated amendment of the code to be compatible
+% \mstrelease{1.15d}: Oct 13, 2012. Belated amendment of the code to be compatible
% with Unicode engines in case someone changed the mathcode of -.
% However, for the time being I can do it in an easy way only for
% \XeTeX, not for \LuaLaTeX. Also I do my modifications to \cs{relbar}
% in a manner testing for the presence of amsmath.
%
-% |1.3v 2019/09/19|: \LaTeX{} of |2019-10-01| defines \cs{leftarrowfill}
+% \mstrelease{1.3v} |2019/09/19|: \LaTeX{} of |2019-10-01| defines \cs{leftarrowfill}
% and \cs{rightarrowfill} as robust macros, so we do the same.
%
% I need to put amsmath under surveillance to check if it decides to
@@ -7981,49 +8596,48 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\else
\ifmst@XeOrLua
\mst@Umathcharnumdef\mst@minus@sign=\mst@Umathcodenum`\-\relax
-%^^A I used this prior to the new \luatexUmathcodenum, as available since TL2013:
-%^^A \mathchardef\mst@minus@sign=8704\relax % "2200
+% \end{macrocode}
+% I used this prior to the new \cs{luatexUmathcodenum}, as available since TL2013:
+% \centeredline{|\mathchardef\mst@minus@sign=8704\relax % "2200|}
+%^^A L'alignement est bizarre dans l'output.
+% \begin{macrocode}
\else
\mathchardef\mst@minus@sign=\mathcode`\-\relax
\fi
\@ifpackageloaded{amsmath}
{\def\relbar{\mathrel{\mathpalette\mathsm@sh\mst@minus@sign}}}
{\DeclareRobustCommand\relbar{\mathrel{\smash\mst@minus@sign}}}
- \ifmst@robust@obsessed@LaTeX@era\expandafter\DeclareRobustCommand
- \else\expandafter\def\fi
- \rightarrowfill{$\m@th\mathord{\relbar}\mkern-7mu%
+ \DeclareRobustCommand\rightarrowfill{$\m@th\mathord{\relbar}\mkern-7mu%
\cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill
\mkern-7mu\mathord\rightarrow$}
- \ifmst@robust@obsessed@LaTeX@era\expandafter\DeclareRobustCommand
- \else\expandafter\def\fi
- \leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu%
+ \DeclareRobustCommand\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu%
\cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill
\mkern-7mu\mathord{\relbar}$}
\fi
% \end{macrocode}
% \end{macro}
% \begin{macro}{endash}
-% |1.1| |2011/01/29|: Producing this next piece of code was not a piece
+% \mstrelease{1.1} |2011/01/29|: Producing this next piece of code was not a piece
% of cake for a novice like myself!\newline
-% |1.11| |2011/02/05|: Compatibility with Unicode (via use of fontspec
+% \mstrelease{1.11} |2011/02/05|: Compatibility with Unicode (via use of fontspec
% encodings EU1 and EU2)\newline
-% |1.12| |2011/02/07|: Improved dealing of Unicode possibility.\newline
-% |1.14b| |2011/04/02|: Corrected some very irresponsible bug in the
+% \mstrelease{1.12} |2011/02/07|: Improved dealing of Unicode possibility.\newline
+% \mstrelease{1.14b} |2011/04/02|: Corrected some very irresponsible bug in the
% Unicode part which caused a problem when 10 or more math families have
% been allocated.\newline
-% |1.15| |2012/09/24|: Added AtBeginDocument to circumvent some amsmath
+% \mstrelease{1.15} |2012/09/24|: Added AtBeginDocument to circumvent some amsmath
% problem with unicode engines.
%
-% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
+% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
%
-% |1.3t| |2018/08/22|: fix to very ancient (|2012/12/20|) bug with
+% \mstrelease{1.3t} |2018/08/22|: fix to very ancient (|2012/12/20|) bug with
% |\DeclareMathSymbol| lacking last argument if encoding not T1, OT1 or
% LY1 when setting up math mode to use the en-dash character as minus
% sign (PDF\TeX\ engine).
%
% \begin{macro}{\mst@subduedminus}
% \begin{macro}{\mst@nonsubduedminus}
-% |1.3t| Further, new macros |\mst@subduedminus| and |\mst@nonsubduedminus|,
+% \mstrelease{1.3t} Further, new macros |\mst@subduedminus| and |\mst@nonsubduedminus|,
% for the good functioning of the subdued option also in case of
% presence of fontspec. This is the only character for which subdued
% option works (now) by setting the mathcode on each math version
@@ -8034,7 +8648,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% change. This means also that |\MTversion| and not |\mathversion|
% must be used for good functioning.
%
-% |1.3u| improves the handling of the minus sign by letting it be compatible
+% \mstrelease{1.3u} improves the handling of the minus sign by letting it be compatible
% with math versions (and not only with the with subdued mechanism but all
% math versions) having varying font encodings, even possibly classic 8bit
% font encoding mixed with TU encoding for Unicode engines. For this it is
@@ -8047,9 +8661,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% This is counter-intuitive and breaks expectations.
% \end{quotation}
%
-% But the |1.3u| mechanism with \cs{mst@UmathchardefWorkAround@i} introduced a
+% But the \mstrelease{1.3u} mechanism with \cs{mst@UmathchardefWorkAround@i} introduced a
% bug which showed under option |noendash| (hence also |symboldelimiters|) with
-% Unicode engines. Fixed at |1.3w|.
+% Unicode engines. Fixed at \mstrelease{1.3w}.
% \begin{macrocode}
\let\mst@subduedminus\empty
\let\mst@nonsubduedminus\empty
@@ -8063,7 +8677,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\csname\mst@tmp@enc\string\textendash\endcsname}
\DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont}
{\csname\mst@tmp@enc\string\textendash\endcsname}
- \fi}% mst@dothe@endashstuff
+ \fi
+}%
\def\mst@dothe@emdashstuff#1#2#3{%
\edef\mst@tmp@enc{#3}%
\if1\mst@OneifUniEnc
@@ -8074,7 +8689,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\csname\mst@tmp@enc\string\textemdash\endcsname}
\DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont}
{\csname\mst@tmp@enc\string\textemdash\endcsname}
- \fi}% mst@dothe@emdashstuff
+ \fi
+}%
\def\mst@dothe@hyphenstuff#1#2{%
\DeclareMathSymbol{#1}{\mathbin}{\mst@font@tbu}{"2D}%
\DeclareMathSymbol{#2}{\mathalpha}{\mst@font@tbu}{"2D}%
@@ -8090,9 +8706,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\csname mst@minus@mv\math@version\endcsname
\relax
\else
- \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% self-delimiting
+ \mathcode`\-=\@nameuse{mst@minus@mv\math@version}%
\fi
- }% \mst@nonsubduedminus
+ }%
% \end{macrocode}
% The above works only if the \cs{mst@minus@mv<name>} was really
% defined via \cs{Umathchardef}. If it was defined via \cs{DeclareMathSymbol}
@@ -8101,8 +8717,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macrocode}
\ifmst@endash\else\ifmst@emdash\else
\def\mst@nonsubduedminus{%
- \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% self-delimiting
- }% non Umathchardef \mst@minus@mv<mathversion> macros
+ \mathcode`\-=\@nameuse{mst@minus@mv\math@version}%
+ }%
\fi\fi
\fi
\def\mst@UmathchardefWorkAround@i
@@ -8112,7 +8728,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\mst@hbar@mvnormal}
% \begin{macro}{\mst@ltbar@mvnormal}
-% |2011/01/31|, |1.1| I decide to settle the question of the |\hbar|. The
+% |2011/01/31|, \mstrelease{1.1} I decide to settle the question of the |\hbar|. The
% \LaTeX{} definition is |\def\hbar{{\mathchar'26\mkern-9muh}}|
% and its advantage is that |h| is in the correct font. But of course not
% the macron character (|\=|, |\bar|). And anyway |amsfonts| uses a
@@ -8125,26 +8741,26 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% (as an aside, I am only now (April 2, 2011) aware that the package
% |mathtools| provides the |mathrlap| etc... )
%
-% |1.3l 2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
+% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
%
-% |1.3u 2019/08/20|: encoding (8bits) agnostic construct for hbar, using same
+% \mstrelease{1.3u} |2019/08/20|: encoding (8bits) agnostic construct for hbar, using same
% method as for |mathaccents| option. I should add some way to adjust the
% vertical positioning.
%
% On this occasion I replace |h| by |\mst@h| because the mechanism for
% before and after skips does not interact well with the rlap construct.
%
-% |1.3v 2019/09/19| adapts to maintain the robustness of \cs{hbar} which now
+% \mstrelease{1.3v} |2019/09/19| adapts to maintain the robustness of \cs{hbar} which now
% applies with \LaTeX{} |2019-10-01|.
%
-% |1.3w| works around \url{https://github.com/latex3/latex2e/issues/216} via
+% \mstrelease{1.3w} works around \url{https://github.com/latex3/latex2e/issues/216} via
% \cs{mst@DeclareMathAccent}. The upstream bug affected the definition of
% \cs{mst@ltbar@mvnormal} and broke usage of \cs{Mathastext} in preamble.
%
-% |1.3w| also fixes oversight that \cs{hbar} may have been redefined via
+% \mstrelease{1.3w} also fixes oversight that \cs{hbar} may have been redefined via
% \cs{DeclareMathSymbol} by some package (e.g. |amsfonts|) and with \LaTeX{}
% |2019-10-01| this means \cs{hbar<space>} is now undefined. Modifying it
-% changed nothing to \cs{hbar} behaviour in such circumstances. Finally we
+% changed nothing to \cs{hbar} behavior in such circumstances. Finally we
% opt for a \cs{protected} \cs{hbar} and choose to ignore completely if
% there is a \cs{hbar<space>} or not. To avoid extra steps we do not
% undefine it if it exists, because we would need to restore it in
@@ -8161,7 +8777,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\def\mst@mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}}
\def\mst@dothe@hbarstuff#1#2#3{%
\edef\mst@tmp@enc{#3}%
- \if1\mst@OneifUniEnc % Unicode engine and font
+ \if1\mst@OneifUniEnc
\mst@Umathchardef#1="7 \symmtletterfont "0127 \relax %% or 210F?
\else
\begingroup
@@ -8170,13 +8786,13 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\mst@DeclareMathAccent{#2}{\mathalpha}{mtletterfont}%
{\csname\mst@tmp@enc\string\=\endcsname{}}%
\endgroup
- \protected\def#1{\mst@mathrlap{#2{\ }}\mst@h}%
+ \protected\def#1{\mst@mathrlap{#2{\ }}\MTmathcharletterh}%
\fi
-}% end of \mst@dothe@hbarstuff
+}%
% \end{macrocode}
% \end{macro}
% \end{macro}
-% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing with = is (belatedly,
+% \mstrelease{1.15d}: Oct 13, 2012. The \cs{mathcode} thing with = is (belatedly,
% sorry!) made Unicode compatible.
% \begin{macro}{+,=,\Relbar}
% \begin{macrocode}
@@ -8246,7 +8862,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% sequences can not be simultaneously math symbols and math delimiters,
% thus, this complicates things for the mathastextification.
% \begin{macrocode}
-\ifmst@noparen\else\mst@infoline{parentheses \string( \string) \string[ \string] and slash \string/}
+\ifmst@noparen\else
+\mst@infoline{parentheses \string( \string) \string[ \string] and slash \string/}
\ifmst@nosmalldelims
\DeclareMathSymbol{(}{\mathopen}{\mst@font@tbu}{"28}
\DeclareMathSymbol{)}{\mathclose}{\mst@font@tbu}{"29}
@@ -8287,17 +8904,22 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% other math symbol fonts they do respect the encoding of the CM symbols and
% largesymbols, so this is 90\% safe. But in truth I should extract from the
% meaning of \cs{backslash} the |delcode|.
+%
+% At \mstrelease{1.4} I am a bit perplexed at the \cs{mathalpha} here.
+% Adding a a \cs{mst@mathord@backslash} for matters of option |noeverymath|.
% \begin{macrocode}
\DeclareMathDelimiter{\mst@varfam@backslash}
{\mathalpha}{symbols}{"6E}{largesymbols}{"0F}
+ \let\mst@mathord@backslash\backslash
\else
\DeclareMathDelimiter{<}{\mathopen}{\mst@font@tbu}{"3C}{largesymbols}{"0A}
\DeclareMathDelimiter{>}{\mathclose}{\mst@font@tbu}{"3E}{largesymbols}{"0B}
% \end{macrocode}
% There is no backslash in the Symbol font hence |mtoperatorfont| here.
% \begin{macrocode}
- \DeclareMathDelimiter{\backslash}
+ \DeclareMathDelimiter{\mst@mathord@backslash}
{\mathord}{mtoperatorfont}{"5C}{largesymbols}{"0F}
+ \let\backslash\mst@mathord@backslash
\DeclareMathDelimiter{\mst@varfam@backslash}
{\mathalpha}{mtoperatorfont}{"5C}{largesymbols}{"0F}
\fi
@@ -8309,17 +8931,38 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\expandafter\mst@addtodo@nonletters\string>\mathrel\mst@varfam@more
\mst@do@easynonletters\expandafter{\the\mst@do@easynonletters
\let\backslash\mst@varfam@backslash}
+% \end{macrocode}
+% Extras for \mstrelease{1.4} are needed:
+% \begin{macrocode}
+\ifmst@everymath
+\else
+ \mst@undo@easynonletters\expandafter{\the\mst@undo@easynonletters
+ \let\backslash\mst@mathord@backslash}
+\fi
\DeclareMathSymbol{\setminus}{\mathbin}{mtoperatorfont}{"5C}
+\let\mst@setminus\setminus
\DeclareMathSymbol{\mst@varfam@setminus}{\mathalpha}{mtoperatorfont}{"5C}
% \end{macrocode}
-% |1.3v| adds a \cs{protected} here for \cs{setminus}.
+% \mstrelease{1.3v} adds a \cs{protected} here for \cs{setminus}.
% \begin{macrocode}
-\mst@do@nonletters\expandafter{\the\mst@do@nonletters
- \protected\def\setminus{\mathbin{\mst@varfam@setminus}}}
+\mst@do@nonletters\expandafter{%
+ \the\mst@do@nonletters
+ \protected\def\setminus{\mathbin{\mst@varfam@setminus}}%
+}
+% \end{macrocode}
+% Extras for \mstrelease{1.4} are needed:
+% \begin{macrocode}
+\ifmst@everymath
+\else
+ \mst@undo@nonletters\expandafter{%
+ \the\mst@undo@nonletters
+ \let\setminus\mst@setminus
+ }
+\fi
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\models}
-% |1.15d|: 13 oct 2012. Before modifying \string| we must preserve \cs{models}.
+% \mstrelease{1.15d}: 13 oct 2012. Before modifying \string| we must preserve \cs{models}.
% \begin{macrocode}
\ifmst@XeOrLua
\mst@Umathcharnumdef\mst@vert@bar=\mst@Umathcodenum`\|\relax
@@ -8335,7 +8978,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% it used to be anyhow, so it is too late. Or not (2019)? maybe I
% \emph{should} do something here...
%
-% |1.3v 2019/09/19|: I discover this rather radical legacy
+% \mstrelease{1.3v} |2019/09/19|: I discover this rather radical legacy
% \verb+\def\vert{|}+, which is done here once in the preamble, but I leave
% it unmodified apart from prefixing it with \cs{protected}. I also add a
% \cs{protected} for the definition of \cs{mid} (which applies only under
@@ -8349,34 +8992,53 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\protected\def\vert{|}
\DeclareMathSymbol{\mst@varfam@vbar}{\mathalpha}{\mst@font@tbu}{124}
\mst@addtodo@easynonletters\|\mst@varfam@vbar
-\let\mid\undefined % 1.3: to avoid problems with some packages
+\let\mid\undefined
\DeclareMathSymbol{\mid}{\mathrel}{\mst@font@tbu}{124}
-\mst@do@nonletters\expandafter{\the\mst@do@nonletters
- \protected\def\mid{\mathrel\mst@varfam@vbar}}
+\let\mst@mid\mid
+\mst@do@nonletters\expandafter{%
+ \the\mst@do@nonletters
+ \protected\def\mid{\mathrel\mst@varfam@vbar}%
+}
+% \end{macrocode}
+% Extras for \mstrelease{1.4} are needed:
+% \begin{macrocode}
+\ifmst@everymath
+\else
+ \mst@undo@nonletters\expandafter{%
+ \the\mst@undo@nonletters
+ \let\mid\mst@mid
+ }
+\fi
% \end{macrocode}
% \begin{macro}{\MTexplicitbraces-}\begin{macro}{obeymathxx}
% \begin{macro}{\MTexplicitbraces-}\begin{macro}{donotobeymathxx}
-% Braces. With version |1.2|, |\{| and |\}| will not be acceptable as
+% Braces. With version \mstrelease{1.2}, |\{| and |\}| will not be acceptable as
% delimiters anymore if the redefinitions below in \cs{mst@dobraces} are
-% enacted. But they will obey math alphabets. Improvements in |1.2a|, to
+% enacted. But they will obey math alphabets. Improvements in \mstrelease{1.2a}, to
% preserve robustness.
%
-% For |1.3| I make |\lbrace| and |\rbrace| undefined first, else problems
+% For \mstrelease{1.3} I make |\lbrace| and |\rbrace| undefined first, else problems
% may arise with some packages.
%
-% |1.3e| suppresses under option
+% \mstrelease{1.3e} suppresses under option
% |nosmalldelims| the definitions of |\lbrace| and |\rbrace| as math
% symbols as this made |\left\lbrace| cause an error, it was a bug.
%
-% LaTeX2e defines |\{| and |\}| as robust commands for a long time
+% (obsolete) LaTeX2e defines |\{| and |\}| as robust commands since a long time
% (I don't know since when). The \mst redefinition is done only if user
% has executed \cs{MTexplicitbracesobeymathxx}, and it is done only when
% entering math mode, but there could be some |\hbox| inside math, hence
% it has to be careful to be valid in text too.
%
-% |1.3v| maintains strict \LaTeX2e robustness for |\{| and |\}|.
+% \mstrelease{1.3v} maintains strict \LaTeX2e robustness for |\{| and |\}|.
% This assumes no one fiddled with |\{| and |\}| proper (without space
% in the name).
+%
+% \LaTeX{} made |\{| and |\}| \cs{protected}, not robust, at its
+% |2020-02-02| release, so the code used by \mst under
+% \cs{MTexplicitbracesobeymathxx} toggle remained without effect since
+% as it configured a change to |\{<space>| and |\}<space>|. Fixed at
+% \mstrelease{1.4}.
% \begin{macrocode}
\ifmst@nosmalldelims
\else
@@ -8388,28 +9050,46 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
\DeclareMathSymbol{\mst@varfam@lbrace}{\mathalpha}{\mst@font@tbu}{123}
\DeclareMathSymbol{\mst@varfam@rbrace}{\mathalpha}{\mst@font@tbu}{125}
-\DeclareRobustCommand*{\mst@lbrace}
- {\ifmmode\mathopen\mst@varfam@lbrace\else\textbraceleft\fi}
-\DeclareRobustCommand*{\mst@rbrace}
- {\ifmmode\mathclose\mst@varfam@rbrace\else\textbraceright\fi}
-\mst@do@nonletters\expandafter{\the\mst@do@nonletters
- \mst@dobraces{\expandafter\let\csname\string{ \expandafter\endcsname
- \csname mst@lbrace \endcsname
- \expandafter\let\csname\string} \expandafter\endcsname
- \csname mst@rbrace \endcsname}}
-\fi % end of \ifmst@alldelims
+% \end{macrocode}
+% \begin{macrocode}
+\protected\def\mst@lbrace{\ifmmode\mathopen\mst@varfam@lbrace\else\textbraceleft\fi}
+\protected\def\mst@rbrace{\ifmmode\mathclose\mst@varfam@rbrace\else\textbraceright\fi}
+\mst@do@nonletters\expandafter{%
+ \the\mst@do@nonletters
+ \mst@dobraces{\let\{\mst@lbrace\let\}\mst@rbrace}%
+}
+\fi
\newcommand*{\MTexplicitbracesobeymathxx}{\let\mst@dobraces\@firstofone}
\newcommand*{\MTexplicitbracesdonotobeymathxx}{\let\mst@dobraces\@gobble}
+% \end{macrocode}
+% Extras for \mstrelease{1.4} are needed:
+% \begin{macrocode}
+\ifmst@everymath
+\else
+ \renewcommand*\MTexplicitbracesobeymathxx{%
+ \let\mst@dobraces\@firstofone
+ \MTnonlettersobeymathxx
+ }%
+ \renewcommand*\MTexplicitbracesdonotobeymathxx{%
+ \let\mst@dobraces\@gobble
+ \protected\def\{{\ifmmode \lbrace \else \textbraceleft \fi}%
+ \protected\def\}{\ifmmode \rbrace \else \textbraceright \fi}%
+ }%
+ \mst@undo@nonletters\expandafter{\the\mst@undo@nonletters
+ \protected\def\{{\ifmmode \lbrace \else \textbraceleft \fi}%
+ \protected\def\}{\ifmmode \rbrace \else \textbraceright \fi}%
+ }%
+\fi
\MTexplicitbracesdonotobeymathxx
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}\end{macro}
% \end{macro}\end{macro}
% \begin{macro}{specials}
-% \leavevmode\kern\parindent |1.14b| |2011/04/02|: the redefinitions of
+% \leavevmode\kern\parindent \mstrelease{1.14b} |2011/04/02|: the redefinitions of
% \#, \$, \% and \& were buggy (this showed up when 10 or more math
% families had been created).
%
-% |1.15f| |2012/10/23|: the code, although working, was perhaps a bit insane
+% \mstrelease{1.15f} |2012/10/23|: the code, although working, was perhaps a bit insane
% and
% had definitions which could surprise other packages. For example, it did:\\
% \null\hspace{1cm}|\renewcommand{\%}{\ifmmode\mt@mmode@percent\else\char37\relax\fi}|\\
@@ -8426,60 +9106,80 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% mathcode. So here it is \emph{not} a redefinition of the control sequences,
% purely an adjustment of mathcodes.
%
-% |1.2d| |2013/01/01|: previous versions imposed the variable family type. I
+% \mstrelease{1.2d} |2013/01/01|: previous versions imposed the variable family type. I
% hereby make it possible to de-activate this feature with the macro
% \cs{MTeasynonlettersdonotobeymathxx}. Besides, I have absolutely no idea
% why I had different looking code depending on the engine \XeTeX, \LuaTeX\ or
% default. Removed.
%
-% |1.3c| |2013/12/14|: I have absolutely no idea why I removed the \XeTeX\
-% and \LuaTeX\ code at the time of |1.2d|! the code for tex/pdftex engine
+% \mstrelease{1.3c} |2013/12/14|: I have absolutely no idea why I removed the \XeTeX\
+% and \LuaTeX\ code at the time of \mstrelease{1.2d}! the code for tex/pdftex engine
% could not accomodate more than 16 math families. Code for \XeTeX\ and
% \LuaTeX\ again added. (and since TL2013 no more problems with
% |\luatexUmathcode|.)
+%
+% \mstrelease{1.4} has done slight refactoring here to share more code related
+% to math activation across the two branches.
% \begin{macrocode}
\ifmst@nospecials
\else
- \mst@infoline{\string\#\space\string\mathdollar\space
- \string\%\space\string\&\space}
+ \mst@infoline{\string\#\space\string\mathdollar\space
+ \string\%\space\string\&\space}
\ifmst@XeOrLua
- \mst@Umathcode`\#=0 \symmtoperatorfont "23 \relax
- \mst@Umathchardef\mathdollar=0 \symmtoperatorfont "24 \relax
- \mst@Umathcode`\%=0 \symmtoperatorfont "25 \relax
- \mst@Umathcode`\&=0 \symmtoperatorfont "26 \relax
- \mst@do@easynonletters\expandafter{%
- \the\mst@do@easynonletters
- \mst@Umathcode`\#=7 \symmtoperatorfont "23 \relax
- \mst@Umathchardef\mathdollar=7 \symmtoperatorfont "24 \relax
- \mst@Umathcode`\%=7 \symmtoperatorfont "25 \relax
- \mst@Umathcode`\&=7 \symmtoperatorfont "26 \relax
- }
+ \mst@Umathcode`\#=0 \symmtoperatorfont "23 \relax
+ \mst@Umathchardef\mathdollar=0 \symmtoperatorfont "24 \relax
+ \mst@Umathcode`\%=0 \symmtoperatorfont "25 \relax
+ \mst@Umathcode`\&=0 \symmtoperatorfont "26 \relax
+ \mst@Umathchardef\mst@varfam@mathhash = 7 \symmtoperatorfont "23 \relax
+ \mst@Umathchardef\mst@varfam@mathdollar = 7 \symmtoperatorfont "24 \relax
+ \mst@Umathchardef\mst@varfam@mathpercent = 7 \symmtoperatorfont "25 \relax
+ \mst@Umathchardef\mst@varfam@mathampersand = 7 \symmtoperatorfont "26 \relax
+ \mst@addtodo@easynonletters@U\#\mst@varfam@mathhash
+ \mst@addtodo@easynonletters@U\%\mst@varfam@mathpercent
+ \mst@addtodo@easynonletters@U\&\mst@varfam@mathampersand
\else
- \count@=\symmtoperatorfont
- \multiply\count@ by \@cclvi
- \advance\count@ by 35
- \mathcode`\#\count@
- \advance\count@ by \@ne
- \mathchardef\mathdollar\count@
- \advance\count@ by \@ne
- \mathcode`\%\count@
- \advance\count@ by \@ne
- \mathcode`\&\count@
- \count@=\symmtoperatorfont
- \multiply\count@ by \@cclvi
- \advance\count@ by 28707 % = "7023
- \mathchardef\mst@varfam@mathhash\count@
- \advance\count@ by \@ne
- \mathchardef\mst@varfam@mathdollar\count@
- \advance\count@ by \@ne
- \mathchardef\mst@varfam@mathpercent\count@
- \advance\count@ by \@ne
- \mathchardef\mst@varfam@mathampersand\count@
+ \count@=\symmtoperatorfont
+ \multiply\count@ by \@cclvi
+ \advance\count@ by 35
+ \mathcode`\#\count@
+ \advance\count@ by \@ne
+ \mathchardef\mathdollar\count@
+ \advance\count@ by \@ne
+ \mathcode`\%\count@
+ \advance\count@ by \@ne
+ \mathcode`\&\count@
+ \count@=\symmtoperatorfont
+ \multiply\count@ by \@cclvi
+ \advance\count@ by 28707 % = "7023
+ \mathchardef\mst@varfam@mathhash\count@
+ \advance\count@ by \@ne
+ \mathchardef\mst@varfam@mathdollar\count@
+ \advance\count@ by \@ne
+ \mathchardef\mst@varfam@mathpercent\count@
+ \advance\count@ by \@ne
+ \mathchardef\mst@varfam@mathampersand\count@
+ \mst@addtodo@easynonletters\#\mst@varfam@mathhash
+ \mst@addtodo@easynonletters\%\mst@varfam@mathpercent
+ \mst@addtodo@easynonletters\&\mst@varfam@mathampersand
+ \fi
+% \end{macrocode}
+% It is possible to mathematically activate the dollar sign, and to use
+% it in math mode as |\string$|... well, how many documents will have
+% done that? But we do not modify the mathcode of the |$| character
+% anyhow, so why should I add here a \cs{mst@OnlyIfNotMathActive}?
+% There is no good reason for that.
+% \begin{macrocode}
\mst@do@easynonletters\expandafter{\the\mst@do@easynonletters
- \mathcode`\#=\mst@varfam@mathhash
- \let\mathdollar\mst@varfam@mathdollar
- \mathcode`\%=\mst@varfam@mathpercent
- \mathcode`\&=\mst@varfam@mathampersand}
+ \let\mathdollar\mst@varfam@mathdollar}%
+% \end{macrocode}
+% Extras for \mstrelease{1.4} are needed. Here too we do not worry
+% about math active dollar character.
+% \begin{macrocode}
+ \ifmst@everymath\else
+ \edef\mst@tmp{\ifmst@XeOrLua\mst@Umathcharnumdef\else\mathchardef\fi
+ \mathdollar=\the\mathdollar\relax}%
+ \mst@undo@easynonletters\expandafter\expandafter\expandafter
+ {\expandafter\mst@tmp\the\mst@undo@easynonletters}%
\fi
\fi
% \end{macrocode}
@@ -8495,7 +9195,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% manipulations, but well, life is finite.
% \begin{macro}{\prod}
% \begin{macro}{\sum}
-% |1.13b|: I correct the brutal re-definitions of \cs{prod} and \cs{sum} from
+% \mstrelease{1.13b}: I correct the brutal re-definitions of \cs{prod} and \cs{sum} from
% the earlier versions of the package; most of the time the Symbol glyphs do
% appear to be too small in display mode. The new redefinitions do have some
% defects: |$\displaystyle\prod_1^2$| changes the position of limits but not
@@ -8506,40 +9206,50 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% October 2012: maybe I should re-examine what I did?
%
-% |1.3c| (|2013/12/14|) renames |\defaultprod| to |\MToriginalprod| and
+% \mstrelease{1.3c} (|2013/12/14|) renames |\defaultprod| to |\MToriginalprod| and
% |\defaultsum| to
% |\MToriginalsum|.
%
-% |1.3v| hesitates about making robust here \cs{prod} and \cs{sum}. Finally I
+% \mstrelease{1.3v} hesitates about making robust here \cs{prod} and \cs{sum}. Finally I
% use \cs{protected} for them.
+%
+% \mstrelease{1.4} finally replaces all control sequences defines earlier via
+% \cs{DeclareRobustCommand} to be defined using \cs{protected}\cs{def}. It
+% also removes \cs{mst@prod} and \cs{mst@sum} which were aliases of
+% \cs{MToriginalprod} and \cs{MToriginalsum}, and having both must have
+% been some left-over of earlier versions in 2012 or 2013 (unchecked).
% \begin{macrocode}
-\ifmst@symbolmisc\mst@infoline{symbolmisc: miscellaneous math symbols from Symbol font}
-\let\mst@prod\prod
+\ifmst@symbolmisc
+\mst@infoline{symbolmisc: miscellaneous math symbols from Symbol font}
\let\MToriginalprod\prod
\DeclareMathSymbol{\prodpsy}{\mathop}{mtpsymbol}{213}
-\protected\def\prod{\ifinner\prodpsy\else\mst@prod\fi}
-\let\mst@sum\sum
+\protected\def\prod{\ifinner\prodpsy\else\MToriginalprod\fi}
\let\MToriginalsum\sum
\DeclareMathSymbol{\sumpsy}{\mathop}{mtpsymbol}{229}
-\protected\def\sum{\ifinner\sumpsy\else\mst@sum\fi}
+\protected\def\sum{\ifinner\sumpsy\else\MToriginalsum\fi}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macrocode}
\DeclareMathSymbol{\mst@implies}{\mathrel}{mtpsymbol}{222}
-\DeclareRobustCommand*{\implies}{\;\mst@implies\;}
+\protected\def\implies{\;\mst@implies\;}
\DeclareMathSymbol{\mst@impliedby}{\mathrel}{mtpsymbol}{220}
-\DeclareRobustCommand*{\impliedby}{\;\mst@impliedby\;}
-\DeclareRobustCommand*{\iff}{\;\mst@impliedby\mathrel{\mkern-3mu}\mst@implies\;}
+\protected\def\impliedby{\;\mst@impliedby\;}
+\protected\def\iff{\;\mst@impliedby\mathrel{\mkern-3mu}\mst@implies\;}
\DeclareMathSymbol{\mst@iff}{\mathrel}{mtpsymbol}{219}
-\DeclareRobustCommand*{\shortiff}{\;\mst@iff\;}
-\DeclareMathSymbol{\mst@to}{\mathrel}{mtpsymbol}{174}
+\protected\def\shortiff{\;\mst@iff\;}
+% \end{macrocode}
+% \mstrelease{1.4} drops defining a \cs{mst@to} and employs \cs{to}
+% in subsequent definitions
+% \begin{macrocode}
+\let\to\relax
+\DeclareMathSymbol{\to}{\mathrel}{mtpsymbol}{174}
\DeclareMathSymbol{\mst@trait}{\mathrel}{mtpsymbol}{190}
-\DeclareRobustCommand*\to{\mst@to}
-\DeclareRobustCommand*\longto{\mkern2mu\mst@trait\mathrel{\mkern-10mu}\mst@to}
-\DeclareRobustCommand*\mapsto{\mapstochar\mathrel{\mkern0.2mu}\mst@to}
-\DeclareRobustCommand*\longmapsto{%
-\mapstochar\mathrel{\mkern2mu}\mst@trait\mathrel{\mkern-10mu}\mst@to}
+\protected\def\longto{\mkern2mu\mst@trait\mathrel{\mkern-10mu}\to}
+\protected\def\mapsto{\mapstochar\mathrel{\mkern0.2mu}\to}
+\protected\def\longmapsto{%
+ \mapstochar\mathrel{\mkern2mu}\mst@trait\mathrel{\mkern-10mu}\to
+}
\DeclareMathSymbol{\aleph}{\mathord}{mtpsymbol}{192}
\DeclareMathSymbol{\inftypsy}{\mathord}{mtpsymbol}{165}
\DeclareMathSymbol{\emptyset}{\mathord}{mtpsymbol}{198}
@@ -8593,7 +9303,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{symbolre}
% I like the \cs{Re} and \cs{Im} from Symbol, so I overwrite the CM ones.
% \begin{macrocode}
-\ifmst@symbolre\mst@infoline{symbolre: \string\Re\space and \string\Im\space from Symbol font}
+\ifmst@symbolre
+\mst@infoline{symbolre: \string\Re\space and \string\Im\space from Symbol font}
\DeclareMathSymbol{\Re}{\mathord}{mtpsymbol}{"C2}
\DeclareMathSymbol{\Im}{\mathord}{mtpsymbol}{"C1}
\DeclareMathSymbol{\DotTriangle}{\mathord}{mtpsymbol}{92}
@@ -8603,12 +9314,12 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{Greek letters}
% LGRgreek $>$ selfGreek $>$ eulergreek $>$ symbolgreek
%
-% |1.11| I correct some bugs on how eulergreek and
+% \mstrelease{1.11} I correct some bugs on how eulergreek and
% symbolgreek interacted.
%
-% |1.12b| more bug fixes.
+% \mstrelease{1.12b} more bug fixes.
%
-% |1.13|
+% \mstrelease{1.13}
%
% * Option LGRgreek.
%
@@ -8616,10 +9327,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% the default shape is now the one for letters, not for operator-names
% and digits. This complies to the ISO standard.
%
-% * bugfix: version |1.12b| did not define the \cs{omicron} in the
+% * bugfix: version \mstrelease{1.12b} did not define the \cs{omicron} in the
% case when no Greek-related option was passed to the package.
%
-% |1.13d| has new macros |\MTstandardgreek| and |\MTcustomgreek|.
+% \mstrelease{1.13d} has new macros |\MTstandardgreek| and |\MTcustomgreek|.
% And in the subdued case |\MTstandardgreek| is done when switching to
% the normal or bold math versions (previously something like this
% was only done in case of |LGRgreek| option. )
@@ -8672,13 +9383,13 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macrocode}
\ifx\mst@mathord\mathord
% \end{macrocode}
-% symbolgreek but neither eulergreek nor selfGreek
-% \begin{macrocode}
-%% attention le P de Symbol est un \Pi pas un \Rho
+% \noindent symbolgreek but neither eulergreek nor selfGreek\newline
+% Attention le P de Symbol est un \cs{Pi} pas un \cs{Rho}.\newline
+% Attention le X de Symbol est un \cs{Xi} pas un \cs{Chi}.\newline
+% Attention le F de Symbol est un \cs{Phi}. Il n'y a pas de \cs{Digamma}.
+% \begin {macrocode}
\DeclareMathSymbol{\mst@Rho}{\mathord}{mtpsymbol}{"52}
-%% attention le X de Symbol est un \Xi pas un \Chi
\DeclareMathSymbol{\mst@Chi}{\mathord}{mtpsymbol}{"43}
-%% attention le F de Symbol est un \Phi. Il n'y a pas de \Digamma
\DeclareMathSymbol{\mst@Gamma}{\mathord}{mtpsymbol}{"47}
\DeclareMathSymbol{\mst@Delta}{\mathord}{mtpsymbol}{"44}
\DeclareMathSymbol{\mst@Theta}{\mathord}{mtpsymbol}{"51}
@@ -8690,7 +9401,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\DeclareMathSymbol{\mst@Phi}{\mathord}{mtpsymbol}{"46}
\DeclareMathSymbol{\mst@Psi}{\mathord}{mtpsymbol}{"59}
\DeclareMathSymbol{\mst@Omega}{\mathord}{mtpsymbol}{"57}
- \else % de \mst@mathord=\mathord
+ \else
% \end{macrocode}
% not symbolgreek but eulergreek or selfGreek. Note |2015/10/31| : apparemment
% un moment dans le pass je considrais eulergreek et selfGreek comme pouvant
@@ -8709,8 +9420,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\DeclareMathSymbol\mst@Phi {\mathalpha}{\mst@font@tbu}{"08}
\DeclareMathSymbol\mst@Psi {\mathalpha}{\mst@font@tbu}{"09}
\DeclareMathSymbol\mst@Omega {\mathalpha}{\mst@font@tbu}{"0A}
- \fi % de \mst@mathord=\mathord
-\fi % fin de goahead
+ \fi
+\fi
% \end{macrocode}
% There are differences regarding Euler and Symbol with respect to the
% available var-letters. We include one or two things like the |wp| and the
@@ -8796,10 +9507,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
% \end{macrocode}
% \begin{macro}{\alphaup etc...}
-% Completely refactored at |1.3x| to define |\Alphaup|, |\Alphait|,
+% Completely refactored at \mstrelease{1.3y} to define |\Alphaup|, |\Alphait|,
% |\alphaup|, |\alphait|, etc\dots{} and prepare templates |\Alpha|, \dots{},
% |\alpha|, \dots{}, which when activating a math version will be submitted to
-% an |\expanded|, whose behaviour will depend on version-specific conditionals.
+% an |\expanded|, whose behavior will depend on version-specific conditionals.
% \begin{macrocode}
\ifmst@LGRgreek
% cf http://milde.users.sourceforge.net/LGR/lgrxenc.def.html
@@ -8832,7 +9543,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\DeclareMathSymbol{\Tauit}{\mathalpha}{mtgreekit}{84}
\DeclareMathSymbol{\Chiit}{\mathalpha}{mtgreekit}{81}
% \end{macrocode}
-% |1.3w| and earlier had a bug regarding Digamma which was set up
+% \mstrelease{1.3w} and earlier had a bug regarding Digamma which was set up
% to use same font shape as for lowercase digamma.
% \begin{macrocode}
\DeclareMathSymbol{\Digammaup}{\mathalpha}{mtgreekup}{195}
@@ -8916,7 +9627,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\DeclareMathSymbol{\omegaup}{\mathalpha}{mtgreekup}{119}
%
\DeclareMathSymbol{\digammaup}{\mathalpha}{mtgreekup}{147}
-% only varsigma defined (I should check this again)
+% \end{macrocode}
+% Only varsigma defined (I should check this again).
+% \begin{macrocode}
\DeclareMathSymbol{\varsigmaup}{\mathalpha}{mtgreekup}{99}
%
\DeclareMathSymbol{\alphait}{\mathalpha}{mtgreekit}{97}
@@ -8981,12 +9694,12 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{\MTstandardgreek}
% \begin{macro}{\MTcustomgreek}
% \begin{macro}{\MTrecordstandardgreek}
-% |1.3d 2014/05/23| defines the commands |\MTstandardgreek| and
+% \mstrelease{1.3d} |2014/05/23| defines the commands |\MTstandardgreek| and
% |\MTcustomgreek| for package and user. I leave |\MTrecordstandardgreek|
% undocumented as I don't want to encourage people to load math packages
% after \mst.
%
-% |1.3h 2015/10/31|: corrected |\MTcustomgreek| as it caused |\ell| to
+% \mstrelease{1.3h} |2015/10/31|: corrected |\MTcustomgreek| as it caused |\ell| to
% become undefined under option |symbolgreek| and, much more catastrophic,
% caused |\alpha|, etc.. to become undefined under option |selfGreek| !
% \begin{macrocode}
@@ -9055,7 +9768,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
\let\mst@origpartial\partial
\let\mst@origwp\wp
- \let\mst@origell\ell }% \MTrecordstandardgreek
+ \let\mst@origell\ell }%
\MTrecordstandardgreek
\renewcommand*{\MTstandardgreek}{%
\let\Alpha\mst@origAlpha
@@ -9119,10 +9832,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\partial\mst@origpartial
\let\wp\mst@origwp
\let\ell\mst@origell
-}% \MTstandardgreek
+}%
\ifmst@greekplus
% \end{macrocode}
-% |1.3za| implementation of |LGRgreek+| option. It is not exactly
+% \mstrelease{1.3za} implementation of |LGRgreek+| option. It is not exactly
% clear what we should do for \cs{mathnormal} and \cs{mathnormalbold}.
%
% This definition allows usage of \cs{alpha} for example in numerical
@@ -9210,7 +9923,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\mst@define@lowergreekletter\omega\mst@omega
\mst@define@lowergreekletter\varsigma\mst@varsigma
\mst@define@lowergreekletter\digamma\mst@digamma
-}% end of True branch of \ifmst@greekplus
+}%
\else
% \end{macrocode}
% Under |selfGreek| or other Greek option but not |LGRgreek|, these Greek
@@ -9243,8 +9956,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\noexpand\Rho\mst@Rho
\let\noexpand\Tau\mst@Tau
\let\noexpand\Chi\mst@Chi
- }% end of first big \expanded
-% 1.3h: \mst@Digamma not defined if symbolgreek option
+ }%
+% \end{macrocode}
+% \mstrelease{1.3h}: \cs{mst@Digamma} not defined if |symbolgreek| option.
+% \begin{macrocode}
\ifmst@symbolgreek\else
\expanded{\let\noexpand\Digamma\mst@Digamma}%
\fi
@@ -9260,10 +9975,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\noexpand\Phi\mst@Phi
\let\noexpand\Psi\mst@Psi
\let\noexpand\Omega\mst@Omega
- }% end of second big \expanded
+ }%
% \end{macrocode}
-% |1.3h 2015/10/31| adds this conditional to correct the bad bug in
-% |1.3d 2014/05/23| which caused |\alpha| etc... to become undefined
+% \mstrelease{1.3h} |2015/10/31| adds this conditional to correct the bad bug in
+% \mstrelease{1.3d} |2014/05/23| which caused |\alpha| etc... to become undefined
% under option |selfGreek|.
% \begin{macrocode}
\ifmst@selfGreek\else
@@ -9293,28 +10008,34 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\noexpand\psi\mst@psi
\let\noexpand\omega\mst@omega
\let\noexpand\varsigma\mst@varsigma
- }% end of third big \expanded
-% 1.3h: digamma only defined with option LGRgreek:
+ }%
+% \end{macrocode}
+% \mstrelease{1.3h}: digamma only defined with option |LGRgreek|.
+% \begin{macrocode}
\ifmst@LGRgreek
\expanded{\let\noexpand\digamma\mst@digamma}%
\fi
-% conditional added 1.3h 2015/10/31
+% \end{macrocode}
+% Conditional added \mstrelease{1.3h} |2015/10/31|.
+% \begin{macrocode}
\ifmst@LGRgreek\else
\let\varepsilon\mst@varepsilon
\let\vartheta\mst@vartheta
\let\varpi\mst@varpi
\let\varrho\mst@varrho
\let\varphi\mst@varphi
-%
\let\partial\mst@partial
\let\wp\mst@wp
-% 1.3h: no \mst@ell if symbolgreek (bugfix 1.3h 2015/10/31)
+% \end{macrocode}
+% \mstrelease{1.3h}: no \cs{mst@ell} if |symbolgreek| (bugfix
+% \mstrelease{1.3h} |2015/10/31|).
+% \begin{macrocode}
\ifmst@symbolgreek\else\let\ell\mst@ell\fi
\fi
\fi
-}% \MTcustomgreek
-\fi% end of else branch of \ifmst@greekplus
-\fi% end of \ifmst@customgreek
+}%
+\fi
+\fi
\let\Mathastextstandardgreek\MTstandardgreek
\let\Mathastextcustomgreek\MTcustomgreek
\ifmst@subdued\else\MTcustomgreek\fi
@@ -9322,22 +10043,22 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\inodot}
% \begin{macro}{\jnodot}
-% In |1.0|, I had them of type |mathord|, here I choose |mathalpha|. If I
+% In \mstrelease{1.0}, I had them of type |mathord|, here I choose |mathalpha|. If I
% used \cs{i} and \cs{j} from the text font the problem would be with the
% fontsize, if in scriptstyle. The amsmath \cs{text} would do the trick.
%
-% |1.14b| |2011/04/02|: again this bug in the EU1/EU2 encoding part, as in the
+% \mstrelease{1.14b} |2011/04/02|: again this bug in the EU1/EU2 encoding part, as in the
% code redefining \$ etc in math mode (see above). Fixed.
%
-% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
+% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|.
%
-% |1.3t| |2018/08/22| removes the definitions done of |\i| and |\j|
-% since |1.12| (as robust commands usable both in text and math mode).
+% \mstrelease{1.3t} |2018/08/22| removes the definitions done of |\i| and |\j|
+% since \mstrelease{1.12} (as robust commands usable both in text and math mode).
%
-% |1.3u| lets the \cs{imath} and \cs{jmath} react to the font encoding at each
+% \mstrelease{1.3u} lets the \cs{imath} and \cs{jmath} react to the font encoding at each
% math version.
%
-% |1.3v| lets the redefined \cs{imath} and \cs{jmath} be \cs{protected}.
+% \mstrelease{1.3v} lets the redefined \cs{imath} and \cs{jmath} be \cs{protected}.
% \begin{macrocode}
\def\mst@subduedinodot{%
\let\inodot\mst@original@imath
@@ -9352,7 +10073,6 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\def\mst@dothe@inodotstuff#1#2#3{%
\edef\mst@tmp@enc{#3}%
\if1\mst@OneifUniEnc
- % Unicode engine and font
\mst@Umathchardef#1="7 \symmtletterfont "0131 \relax
\mst@Umathchardef#2="7 \symmtletterfont "0237 \relax
\else
@@ -9360,7 +10080,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\csname\mst@tmp@enc\string\i\endcsname}
\DeclareMathSymbol{#2}{\mathalpha}{mtletterfont}
{\csname\mst@tmp@enc\string\j\endcsname}
- \fi}% \mst@dothe@inodotstuff
+ \fi}%
\ifmst@defaultimath\else\mst@infoline{\string\imath\space and \string\jmath\space}
\AtEndOfPackage{\AtBeginDocument{%
\protected\def\imath{\inodot}%
@@ -9382,10 +10102,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% define math versions with different encodings. Here I
% take T1 if it was the default at the time of loading the
% package, else OT1.
-% |1.12b|: I add LY1 which is quasi like OT1.
+% \mstrelease{1.12b}: I add LY1 which is quasi like OT1.
% \end{quote}
%
-% At |1.3u 2019/08/20| I decide to remove the hard-coded slot positions
+% At \mstrelease{1.3u} |2019/08/20| I decide to remove the hard-coded slot positions
% for OT1, T1 and LY1, and replace them with some hack which assumes
% LaTeX2e way of handling text accents got executed by the encoding
% definition file. If not, some breakage on package loading could occur, but
@@ -9395,21 +10115,22 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% The |\vec| accent is not considered here because it has no suitable
% available glyph in a standard 8bits text font encodings.
%
-% Also at |1.3u| the math accents adapt to the font encoding at each math
+% Also at \mstrelease{1.3u} the math accents adapt to the font encoding at each math
% version.
%
-% |1.3v| adapts to \LaTeX{} |2019-10-01| which now comes with robust math
-% accent macros. The original-named macros are without the robustifying
-% space (NOT true anymore, see |1.3w| next), as they only serve as meaning
+% (obsolete at \mstrelease{1.4}) \mstrelease{1.3v} adapts to \LaTeX{}
+% |2019-10-01| which now comes with robust math accent macros. The
+% original-named macros are without the robustifying space (NOT true
+% anymore, see \mstrelease{1.3w} next), as they only serve as meaning
% holders.
%
-% On the other hand the macros
-% indexed by math version names are (in the pdflatex branch) always defined
-% via \cs{DeclareMathAccent} hence they will be robust with |2019-10-01| or
+% (obsolete at \mstrelease{1.4}) On the other hand the macros indexed by
+% math version names are (in the pdflatex branch) always defined via
+% \cs{DeclareMathAccent} hence they will be robust with |2019-10-01| or
% later and we must use the \cs{mst@robustifyingspace} with them to access
% their real meaning (this thus differs from the situation with \cs{hbar}).
%
-% |1.3w| The above was a bit optimistic as |amsmath| for example modifies
+% \mstrelease{1.3w} The above was a bit optimistic as |amsmath| for example modifies
% \LaTeX{} internals and handles math accents differently.
%
% We thus needed to double our
@@ -9456,73 +10177,63 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\add@unicode@accent\@firstoftwo
\if1\mst@OneifUniEnc
\ifmst@unimathaccents
- % \` -> \grave
\expandafter\xdef\csname mst@grave@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\`\endcsname{}\relax}%
- % \' -> \acute
\expandafter\xdef\csname mst@acute@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\'\endcsname{}\relax}%
- % \v -> \check
\expandafter\xdef\csname mst@check@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\v\endcsname{}\relax}%
- % \u -> \breve
\expandafter\xdef\csname mst@breve@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\u\endcsname{}\relax}%
- % \= -> \bar
\expandafter\xdef\csname mst@bar@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\=\endcsname{}\relax}%
- % \. -> \dot
\expandafter\xdef\csname mst@dot@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\.\endcsname{}\relax}%
- % \" -> \ddot
\expandafter\xdef\csname mst@ddot@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\"\endcsname{}\relax}%
- % \r -> \mathring
\expandafter\xdef\csname mst@mathring@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\r\endcsname{}\relax}%
- % \^ -> \hat
\expandafter\xdef\csname mst@hat@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\^\endcsname{}\relax}%
- % \~ -> \tilde
\expandafter\xdef\csname mst@tilde@mv#1\mst@robustifyingspace\endcsname
{\mst@Umathaccent
7
\number\symmtoperatorfont\space
\csname#2\string\~\endcsname{}\relax}%
- \else % false branch of ifmst@unimathaccents
+ \else
% \end{macrocode}
-% |1.3u| used some \cs{def} but this made the accent macro meanings look
+% \mstrelease{1.3u} used some \cs{def} but this made the accent macro meanings look
% slightly different depending on whether the math version being set-up was
% with an 8bit encoding or TU encoding.
%
-% For the sake of uniform treatment we modify this at |1.3v|, but this is a
+% For the sake of uniform treatment we modify this at \mstrelease{1.3v}, but this is a
% bit complicated regarding timing: we need, in absence of |unimathaccents|
% option, in math versions with an OpenType font, to let the \cs{acute} etc...
% acquire back some prior non-\mst meanings. To allow maximal flexibility,
@@ -9535,8 +10246,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% definition of the original-named macros but prior to the (last one, if
% multiple) \cs{mst@nonsubduedmathaccents}.
%
-% Hence |1.3v| delayed a bit the initial execution of this macro (see further
-% down in the code) compared to what happened in |1.3u|.
+% Hence \mstrelease{1.3v} delayed a bit the initial execution of this macro (see further
+% down in the code) compared to what happened in \mstrelease{1.3u}.
%
% We are in a group but \cs{AtEndOfPackage} does the right thing.
% \begin{macrocode}
@@ -9561,7 +10272,6 @@ defaultbf,defaultit,defaultsf,defaulttt}}
%
% But wouldn't it be simpler to manage \cs{protected} macros?
% \begin{macrocode}
- \ifmst@robust@obsessed@LaTeX@era
\@tfor\@tempa:={grave}{acute}{check}{breve}{bar}%
{dot}{ddot}{mathring}{hat}{tilde}%
\do
@@ -9569,58 +10279,47 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\noexpand\protect
\expandafter\noexpand\csname mst@\@tempa @mv#1 \endcsname}%
}%
- \fi
- \else % false branch of ifUniEnc
+ \else
% \end{macrocode}
% \cs{DeclareMathAccent} works \cs{global}ly. And with \LaTeX{} |2019-10-01|
% or later it creates robust macros.
%
% \cs{mst@DeclareMathAccent} to work around \url{https://github.com/latex3/latex2e/issues/216}
% \begin{macrocode}
- % \` -> \grave
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@grave@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\`\endcsname{}}
- % \' -> \acute
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@acute@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\'\endcsname{}}
- % \v -> \check
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@check@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\v\endcsname{}}
- % \u -> \breve
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@breve@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\u\endcsname{}}
- % \= -> \bar
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@bar@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\=\endcsname{}}
- % \. -> \dot
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@dot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\.\endcsname{}}
- % \" -> \ddot
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@ddot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\"\endcsname{}}
- % \r -> \mathring
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@mathring@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\r\endcsname{}}
- % \^ -> \hat
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@hat@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\^\endcsname{}}
- % \~ -> \tilde
\expandafter\mst@DeclareMathAccent\expandafter
{\csname mst@tilde@mv#1\endcsname}{\mathalpha}{mtoperatorfont}%
{\csname#2\string\~\endcsname{}}
\fi
\endgroup
}%
-\fi % \ifmst@mathaccents
+\fi
% \end{macrocode}
% \end{macro}
% \begin{macro}{\MTDeclareVersion}
@@ -9634,14 +10333,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \cs{SetSymbolFont}|{mteulervm}||{versionname}||{U}{zeur}{bx}{n}| if
% one wants to have a math version with bold Euler characters.
%
-% For version |1.1| we add an optional parameter specifying the shape
+% For version \mstrelease{1.1} we add an optional parameter specifying the shape
% to be used for letters.
%
% Note: (|2012/10/24|) I really should check whether the user attempts to
% redefine the `normal' and `bold' versions and issue a warning in
-% that case! Finally done at |1.3w| |2019/11/16|! Better late than never...
+% that case! Finally done at \mstrelease{1.3w} |2019/11/16|! Better late than never...
%
-% |1.3c| (|2013/12/14|) adds an extra optional parameter after all
+% \mstrelease{1.3c} (|2013/12/14|) adds an extra optional parameter after all
% previous ones, to inherit the settings from another version. Typically
% to be used with [bold]. I take this opportunity to sanitize a bit some
% line endings to avoid generating (in the preamble, document macros were
@@ -9650,11 +10349,11 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% purpose) the strange way I used |\@onlypreamble| in earlier
% version.
%
-% |1.3u| adds storage of macros holding the needed meanings for
+% \mstrelease{1.3u} adds storage of macros holding the needed meanings for
% \cs{imath}, \cs{hbar}, math accents, and the minus symbol,
% version wise.
%
-% |1.3w| adds the check to forbid |normal| and |bold| as version names.
+% \mstrelease{1.3w} adds the check to forbid |normal| and |bold| as version names.
% \begin{macrocode}
\newcommand*\MTDeclareVersion[6][]{%
\edef\mst@declareversionargs{{#1}{#2}{#3}{#4}{#5}{#6}}%
@@ -9666,14 +10365,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\MTDoNotDeclareVersion@\expandafter\@gobblefour
\fi
\relax\DeclareMathVersion{\mst@version}\MTDeclareVersion@
-}% \MTDeclareVersion
+}%
\newcommand*\MTDoNotDeclareVersion@[1][]{%
\PackageWarningNoLine{mathastext}{You asked to declare a version with name
`\mst@version'.^^J%
\@spaces Sorry but you are not allowed to do that.^^J%
\@spaces \ifmst@subdued Anyway the `subdued' option is in force\else
Use rather \string\Mathastext\space macro (with no optional argument)\fi
-}}%\MTDoNotDeclareVersion@
+}}%
\newcommand*\MTDeclareVersion@[1][]{%
\edef\mst@tmp{#1}%
\ifx\mst@tmp\empty\else
@@ -9685,7 +10384,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
inherits from `#1\string'\@gobble}%
\fi
\expandafter\MTDeclareVersion@@\mst@declareversionargs
-}% \MTDeclareVersion@
+}%
\newcommand*\MTDeclareVersion@@[6]{%
\expandafter\edef\csname mst@encoding@\mst@version\endcsname{#3}%
\expandafter\edef\csname mst@family@\mst@version\endcsname{#4}%
@@ -9706,46 +10405,69 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\ifx\mst@tmp\empty
\ifmst@italic
\SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{\mst@ltsh}%
-\immediate\write\m@ne{}%
-\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak
+ \immediate\write\m@ne{}%
+ \PackageInfo{mathastext}%
+ {\ifmst@noletters
+ \else
+ Latin letters in math version `#2\string'\MessageBreak
declared\on@line\MessageBreak
will use the font #3/#4/#5/\mst@ltsh
\ifmst@frenchmath\space(uppercase: #6)\fi\MessageBreak
+ \fi
Other characters (digits, ...) and \protect\log-like names\MessageBreak
- will be in `#6\string' shape\@gobble}%
-\immediate\write\m@ne{}%
+ \ifmst@noletters
+ will use the font #3/#4/#5/#6%
+ \else
+ will be in `#6\string' shape%
+ \fi\@gobble}%
+ \immediate\write\m@ne{}%
\expandafter\edef\csname mst@ltshape@\mst@version\endcsname{\mst@ltsh}%
\else
\SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#6}%
-\immediate\write\m@ne{}%
-\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak
+ \ifmst@noletters
+ \else
+ \immediate\write\m@ne{}%
+ \PackageInfo{mathastext}%
+ {Latin letters in math version `#2\string'\MessageBreak
declared\on@line\MessageBreak
will use the fonts #3/#4/#5(\mst@bold)/#6\@gobble}%
-\immediate\write\m@ne{}%
+ \fi
+ \immediate\write\m@ne{}%
\expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#6}%
\fi
- \else % #1 not empty
+ \else
+% \end{macrocode}
+% |#1| not empty.
+% \begin{macrocode}
\SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#1}%
-\immediate\write\m@ne{}%
-\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak
+ \immediate\write\m@ne{}%
+ \PackageInfo{mathastext}%
+ {\ifmst@noletters
+ \else
+ Latin letters in math version `#2\string'\MessageBreak
declared\on@line\MessageBreak
will use the font #3/#4/#5/#1%
\ifmst@frenchmath\space(uppercase: #6)\fi\MessageBreak
+ \fi
Other characters (digits, ...) and
\protect\log-like names\MessageBreak
- will be in `#6\string' shape\@gobble}%
-\immediate\write\m@ne{}%
- \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#1}%
+ \ifmst@noletters
+ will use the font #3/#4/#5/#6%
+ \else
+ will be in `#6\string' shape%
+ \fi\@gobble}%
+ \immediate\write\m@ne{}%
+ \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#1}%
\fi
% \end{macrocode}
-% Here and elsewhere |1.3za| has removed an
+% Here and elsewhere \mstrelease{1.3za} has removed an
% \cs{ifmst@nonormalbold} conditional.
% \begin{macrocode}
\SetMathAlphabet{\Mathnormalbold}{#2}{#3}{#4}{\mst@bold}%
{\csname mst@ltshape@\mst@version\endcsname}%
\SetSymbolFont{mtoperatorfont}{#2}{#3}{#4}{#5}{#6}%
% \end{macrocode}
-% Since |1.3za| (and prior to |1.15f|) these math alphabet
+% Since \mstrelease{1.3za} (and prior to \mstrelease{1.15f}) these math alphabet
% commands are always defined.
% \begin{macrocode}
\SetMathAlphabet{\Mathbf}{#2}{#3}{#4}{\mst@bold}{#6}
@@ -9765,12 +10487,12 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% options as well as on the (local to this version) shapes for letters
% and digits.
%
-% |1.3x| replaces \cs{updefault} by \cs{MTgreekupdefault} and
+% \mstrelease{1.3y} replaces \cs{updefault} by \cs{MTgreekupdefault} and
% \cs{itdefault} by \cs{MTgreekitdefault}. It also prepares to store
% two Boolean settings saying whether lowercase respectively uppercase
% Greek letters will use `upright' or `italic' (|LGRgreek(s)| only).
%
-% The |1.3x| refactoring of |LGRgreek| is done via a decoupling,
+% The \mstrelease{1.3y} refactoring of |LGRgreek| is done via a decoupling,
% thus things are done here under |selfGreek| or other Greek options
% which ultimately serve nothing and conversely things are done here
% for |LGRgreek| which are superfluous.
@@ -9813,7 +10535,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\mst@greek@upper@uptrue
\fi
% \end{macrocode}
-% |1.3za| refactoring to reduce code duplication; I briefly considered
+% \mstrelease{1.3za} refactoring to reduce code duplication; I briefly considered
% trying to enhance \cs{MTgreekfont} to work also with |LGRgreeks| and
% |selfGreeks| but I have dropped the idea for now.
% \begin{macrocode}
@@ -9875,7 +10597,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\expandafter\mst@dothe@hyphenstuff\mst@tmp
\fi
\fi
-}% \MTDeclareVersion@@
+}%
\let\MathastextDeclareVersion\MTDeclareVersion
% \end{macrocode}
% \end{macro}
@@ -9890,45 +10612,48 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% additionally to the math fonts. Present already in the initial
% version of the package (January 2011.)
%
-% |1.15|: some modifications for the subdued option vs LGRgreek and
+% \mstrelease{1.15}: some modifications for the subdued option vs LGRgreek and
% for the math muskips after \cs{exists} and \cs{forall}.
%
-% |1.2|: with the subdued option sets the math alphabets in the
+% \mstrelease{1.2}: with the subdued option sets the math alphabets in the
% normal and bold math versions do not apply to operator
% names and non-alphabetical symbols. The switch for braces
% is left as it is.
%
-% |1.2b|: with the subdued option, the italic corrections are not added.
+% \mstrelease{1.2b}: with the subdued option, the italic corrections are not added.
% Else, we check the shape of letters in this version. Also, there was a bug
-% since |1.15|: the values of the math skips were taken not from the
+% since \mstrelease{1.15}: the values of the math skips were taken not from the
% settings for the math version (\#2) but from those of the optional argument
% (\#1), if present...
%
-% |1.3|: activation of italic corrections is now separated from actual math
+% \mstrelease{1.3}: activation of italic corrections is now separated from actual math
% activation of letters.
%
-% |1.3c|: a starred variant is added which does not modify the text fonts,
+% \mstrelease{1.3c}: a starred variant is added which does not modify the text fonts,
% only the math set-tup.
%
-% |1.3d|: replaced in |\MTversion@| things like |\edef\mst@encoding{...}| and
-% |\renewcommand{\encodingdefault}{\mst@@encoding}| by
+% \mstrelease{1.3d}: replaced in |\MTversion@| things like |\edef\mst@encoding{...}| and
+% \centeredline{|\renewcommand{\encodingdefault}{\mst@@encoding}|} by
% |\edef\encodingdefault{...}| etc\dots All those |\mst@@...| things were
% useless. I also redefine |\seriesdefault| rather than |\mddefault|.
%
-% |1.3d|: mechanism of restoration of Greek in subdued normal and bold
+% \mstrelease{1.3d}: mechanism of restoration of Greek in subdued normal and bold
% versions has been to all cases, and not only for the
% |LGRgreek| option.
%
-% |1.3u|: version savvy (i.e.\@ font-encoding savvy) minus sign,
+% \mstrelease{1.3u}: version savvy (i.e.\@ font-encoding savvy) minus sign,
% \cs{hbar}, \cs{imath}, math accents.
%
-% |1.3x|: Booleans recovered from stored data in the math version will
+% \mstrelease{1.3y}: Booleans recovered from stored data in the math version will
% configure the things \cs{MTcustomgreek} do, under |LGRgreek| option.
% \begin{macrocode}
-\newcommand*\MTversion {\@ifstar\MTversion@s\MTversion@ }
-\newcommand*\MTversion@s [1]{\mathversion{#1}\MTversion@@ }
+\newcommand*\MTversion {\@ifstar\MTversion@s\MTversion@}
+\newcommand*\MTversion@s [1]{\mathversion{#1}\MTversion@@}
\newcommand*\MTversion@ [2][]{%
- \mathversion{#2}% defines \math@version as expanded #2
+% \end{macrocode}
+% This defines \cs{math@version} as expanded |#2|.
+% \begin{macrocode}
+ \mathversion{#2}%
\edef\mst@tmpa{#1}%
\ifx\mst@tmpa\empty
\let\mst@tmp\math@version
@@ -9946,14 +10671,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\edef\ttdefault {\csname mst@ttdefault@\mst@tmp\endcsname}%
\usefont{\encodingdefault}{\familydefault}{\seriesdefault}{\shapedefault}%
\MTversion@@
-}% \MTversion@
+}%
% \end{macrocode}
-% |1.3j| has a stronger subdued which does \cs{MTnormalprime},
+% \mstrelease{1.3j} has a stronger subdued which does \cs{MTnormalprime},
% \cs{MTnormalexists}, \cs{MTnormalforall} rather than setting the skips to
% |0mu|. Hence \cs{MTversion} by default should do \cs{MTprimedoesskip},
% \cs{MTexistsdoesskip}, \cs{MTforalldoesskip}.
%
-% |1.3u| drops the argument, as the info is in \cs{math@version} from
+% \mstrelease{1.3u} drops the argument, as the info is in \cs{math@version} from
% \LaTeX2e code.
% \begin{macrocode}
\newcommand*\MTversion@@ {%
@@ -9979,18 +10704,18 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\edef\mst@tmpa{\csname mst@ltshape@\math@version\endcsname}%
\edef\mst@tmpb{\csname mst@shape@\math@version\endcsname}%
% \end{macrocode}
-% |v1.15c|: extending subdued to LGRgreek.
+% \mstrelease{1.15c}: extending subdued to LGRgreek.
%
-% |v1.15f|: subdueing math alphabets in a simpler way than in |1.15e|.
+% \mstrelease{1.15f}: subdueing math alphabets in a simpler way than in \mstrelease{1.15e}.
%
-% |v1.2b|: subdueing the activation of characters in math mode.
+% \mstrelease{1.2b}: subdueing the activation of characters in math mode.
%
-% |v1.2d|: special treatment of the asterisk.
+% \mstrelease{1.2d}: special treatment of the asterisk.
%
-% |v1.3d|: extended LGRgreek mechanism of activation/restoration of Greek to all
+% \mstrelease{1.3d}: extended LGRgreek mechanism of activation/restoration of Greek to all
% cases.
%
-% |v1.3j|: use of \cs{MTeverymathdefault}, which includes \cs{MTicinmath}, but
+% \mstrelease{1.3j}: use of \cs{MTeverymathdefault}, which includes \cs{MTicinmath}, but
% must be corrected then according to shape of letters and presence or absence
% of option |frenchmath|. We do only |\def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}|
% and not \cs{MTICinmath} to not overwrite some user-defined
@@ -9999,6 +10724,12 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% user customizing possibilities, but if I moved it later, I would possibly
% have to put inside the \cs{MTicinmath} the check for |it| ot |sl|. Similary
% the \cs{MTcustomgreek} always executed (if not |subdued|).
+%
+% MEMO: \cs{MTeverymathdefault} is executed \emph{also} if in |subdued| mode
+% but there is a \cs{MTeverymathoff} done next in the \emph{normal} and
+% \emph{bold} version. It does \cs{MTicinmath} and \cs{MTmathactivedigits}
+% which however are no-ops (only partly for the former, and for the latter
+% always anyhow if no option |activedigits|) in subdude mode.
% \begin{macrocode}
\MTmathoperatorsobeymathxx
\MTeverymathdefault
@@ -10009,7 +10740,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\@for\mst@tmpc:=it,sl\do{\ifx\mst@tmpc\mst@tmpb\MTnoICinmath\fi}%
\fi
% \end{macrocode}
-% |1.3j| has a stronger subdued which does \cs{MTnormalprime},
+% \mstrelease{1.3j} has a stronger subdued which does \cs{MTnormalprime},
% \cs{MTnormalexists}, \cs{MTnormalforall} rather than simply setting the
% skips to |0mu|. Note: \cs{MTnormalprime} is done as part of
% \cs{MTeverymathoff}.
@@ -10027,13 +10758,18 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\MTmathoperatorsdonotobeymathxx
\MTnormalexists
\MTnormalforall
+% \end{macrocode}
+% \mstrelease{1.4} has kept \cs{MTmathstandardletters} inside
+% \cs{MTeverymathoff} but its action is now quite different from earlier
+% situation as it resets mathcodes from active to normal status on the spot.
+% \begin{macrocode}
\MTeverymathoff
\MTresetnewmcodes
% \end{macrocode}
-% |1.3t| adds better compatibility with |subdued| mode for
+% \mstrelease{1.3t} adds better compatibility with |subdued| mode for
% |\imath/\jmath| and perfect compatibility for the minus sign.
%
-% |1.3u| extends this further to allow per-math-version meanings
+% \mstrelease{1.3u} extends this further to allow per-math-version meanings
% for them.
% \begin{macrocode}
\mst@subduedhbar
@@ -10056,7 +10792,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\else
\mst@setalphabets
% \end{macrocode}
-% |1.3x| addition for \cs{MTcustomgreek} under |LGRgreeks| option.
+% \mstrelease{1.3y} addition for \cs{MTcustomgreek} under |LGRgreeks| option.
+%
+% MEMO: the needed mathematical re-activation of letters when switching from
+% \emph{normal} or \emph{bold} to a non-|subdued| math version has already
+% been done above from the \cs{MTicinmath} which is part of
+% \cs{MTeverymathdefault}.
+%
+% MEMO: idem for digits under option |activedigits|.
% \begin{macrocode}
\expandafter\let\csname ifmst@greek@upper@up\expandafter\endcsname
\csname ifmst@greek@\math@version @upper@up\endcsname
@@ -10071,19 +10814,22 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
\else
% \end{macrocode}
-% |1.3x| addition for \cs{MTcustomgreek} under |LGRgreek| option.
+% \mstrelease{1.3y} addition for \cs{MTcustomgreek} under |LGRgreek| option.
+%
+% MEMO: the mathematical activation of letters happened above from
+% \cs{MTeverymathdefault}. Idem if |activedigits| for digits.
% \begin{macrocode}
\expandafter\let\csname ifmst@greek@upper@up\expandafter\endcsname
\csname ifmst@greek@\math@version @upper@up\endcsname
\expandafter\let\csname ifmst@greek@lower@up\expandafter\endcsname
\csname ifmst@greek@\math@version @lower@up\endcsname
- \MTcustomgreek % new with 1.3d
+ \MTcustomgreek
\mst@nonsubduedhbar
\mst@nonsubduedinodot
\mst@nonsubduedmathaccents
\mst@nonsubduedminus
\fi
-}% \MTversion@@
+}%
\let\MathastextVersion\MTversion
\let\Mathastextversion\MTversion
\let\MTVersion\MTversion
@@ -10100,7 +10846,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\MTfamily{#3}
\MTseries{#4}
\MTshape{#5}
- \ifmst@italic\MTlettershape{\itdefault}\fi % was missing in v 1.14 and prior
+ \ifmst@italic\MTlettershape{\itdefault}\fi
\edef\mst@tmp{#1}
\ifx\mst@tmp\empty\else\MTlettershape{#1}\fi
\Mathastext}
@@ -10113,23 +10859,23 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% preamble and any number of time, the last one is the
% one that counts.
%
-% In version |1.1| we have two fonts: they only differ in
+% In version \mstrelease{1.1} we have two fonts: they only differ in
% shape. The |mtletterfont| is for letters, and the
% |mtoperatorfont| for digits and log-like operator
% names. The default is that both are upright.
%
-% Starting with version |1.12|, an optional argument makes
+% Starting with version \mstrelease{1.12}, an optional argument makes
% \cs{Mathastext} act as the declaration of a math
% version, to be later used in the document.
%
-% Versions |1.15x| brought some adaptations related to the subdued
+% Versions \mstrelease{1.15x} brought some adaptations related to the subdued
% option.
%
-% |1.3c| adds a second optional parameter to inherit previous settings
+% \mstrelease{1.3c} adds a second optional parameter to inherit previous settings
% from another version; mostly done to inherit the bold version fonts for
% symbols and large symbols. This is done in |\MTDeclareVersion|.
%
-% |1.3j| moves the code related to \cs{MTicinmath} from \cs{Mathastext@} to
+% \mstrelease{1.3j} moves the code related to \cs{MTicinmath} from \cs{Mathastext@} to
% \cs{AtBeginDocument} (code depending on whether |subdued| option in use).
% But we omit for this from \cs{MTicinmath} the \cs{MTmathactiveletters}
% and issue the latter during loading of package, hence allowing
@@ -10139,15 +10885,15 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% command without optional parameter does not any |\SetSymbolFont| etc...
% but it has a few other tasks to complete nevertheless.
%
-% |1.3u| fixes some long-standing bug that \cs{Mathastext} did not repeat some
+% \mstrelease{1.3u} fixes some long-standing bug that \cs{Mathastext} did not repeat some
% font-encoding dependent things: they got done only once during package
% loading (things regarding the \cs{hbar}, \cs{imath}, the math accents and
% the minus sign). They are now part of the contents of \cs{Mathastext} macro
% itself (which is executed during package loading).
%
-% |1.3x| has refactored the |LGRgreek| associated math fonts.
+% \mstrelease{1.3y} has refactored the |LGRgreek| associated math fonts.
% \begin{macrocode}
-\def\Mathastext {\@ifnextchar [\Mathastext@declare\Mathastext@ }
+\def\Mathastext {\@ifnextchar[\Mathastext@declare\Mathastext@}% ]
\def\Mathastext@declare [#1]{%
\edef\mst@tmp{#1}%
\ifx\mst@tmp\empty
@@ -10156,7 +10902,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
\Mathastext@
{\MTDeclareVersion[\mst@ltsh]{#1}{\mst@enc}{\mst@fam}{\mst@ser}{\mst@opsh}}%
-}% \Mathastext@declare
+}%
\def\Mathastext@ {%
\mst@update@greeksh
\edef\mst@encoding@normal{\mst@enc}%
@@ -10187,7 +10933,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\edef\mst@prime@skip@bold{\mst@prime@skip}%
\ifmst@subdued
% \end{macrocode}
-% Since |1.3j| this branch is actually almost superfluous, as entering
+% Since \mstrelease{1.3j} this branch is actually almost superfluous, as entering
% |normal| or |bold| with \cs{MTversion} does \cs{MTnormalexists},
% \cs{MTnormalforall}, and \cs{MTnormalprime}. But some default values are
% needed if the user insists on issuing \cs{MTexistsdoesskip}, etc...
@@ -10199,7 +10945,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\def\mst@exists@skip@bold{0mu}%
\def\mst@forall@skip@bold{0mu}%
\def\mst@prime@skip@bold{0mu}%
- \else % not subdued
+ \else
\ifmst@italic
\ifmst@frenchmath
\mst@exists@muskip\mst@exists@skip\relax
@@ -10220,8 +10966,8 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
\fi
% \end{macrocode}
-% Here and elsewhere |1.3za| has removed usage of an
-% \cs{ifmst@nonormalbold} conditional which was added at |1.15f|.
+% Here and elsewhere \mstrelease{1.3za} has removed usage of an
+% \cs{ifmst@nonormalbold} conditional which was added at \mstrelease{1.15f}.
% \begin{macrocode}
\SetMathAlphabet{\Mathnormalbold}{normal}{\mst@encoding@normal}%
{\mst@family@normal}%
@@ -10249,7 +10995,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\mst@series@bold}%
{\mst@shape@bold}%
% \end{macrocode}
-% |1.3za| removes the |1.15f| added conditional checks.
+% \mstrelease{1.3za} removes the \mstrelease{1.15f} added conditional checks.
% \begin{macrocode}
\SetMathAlphabet{\Mathbf}{normal}{\mst@encoding@normal}%
{\mst@family@normal}%
@@ -10283,10 +11029,10 @@ defaultbf,defaultit,defaultsf,defaulttt}}
{\mst@ttdefault@bold}%
{\mst@series@bold}%
{\mst@shape@bold}%
- \fi % de \ifmst@subdued
+ \fi
% \end{macrocode}
% \begin{macro}{\MathEulerBold}
-% |1.14c|: We reset |mteulervm| and \cs{MathEulerBold} here as the
+% \mstrelease{1.14c}: We reset |mteulervm| and \cs{MathEulerBold} here as the
% variant for bold may have been changed by the user via
% \cs{Mathastextboldvariant}|{m}|; and we should keep this local to
% math versions.
@@ -10309,9 +11055,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \begin{macro}{selfGreek*}
% LGRgreek, LGRgreeks, selfGreek, and selfGreeks options.
%
-% |1.3x| has refactored the |LGRgreek| associated math fonts.
+% \mstrelease{1.3y} has refactored the |LGRgreek| associated math fonts.
%
-% |1.3za| adds the math alphabets \cs{mathgreekitbold} and
+% \mstrelease{1.3za} adds the math alphabets \cs{mathgreekitbold} and
% \cs{mathgreekupbold}.
% And it executes this code also in |subdued| mode, because
% anyhow the symbolfonts |mtgreekup| and |mtgreekit| and
@@ -10352,7 +11098,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macrocode}
% \end{macro}
% \end{macro}
-% |1.3za| adds the log message in case of |selfGreek| option.
+% \mstrelease{1.3za} adds the log message in case of |selfGreek| option.
% \begin{macrocode}
\ifmst@subdued
\else
@@ -10380,7 +11126,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\mst@infoline{Other characters (digits, ...) and \string\log-like names will be}%
\mst@infoline{typeset with the \mst@shape@normal\space shape.}%
\fi
- \fi % end of else branch \ifmst@subdued
+ \fi
\ifmst@nohbar\else
\mst@infoline{\string\hbar}%
\mst@dothe@hbarstuff
@@ -10415,9 +11161,9 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\let\mst@varfam@minus@mvbold\mst@varfam@minus@mvnormal
\fi
\fi
- \fi % minus
+ \fi
% \end{macrocode}
-% |1.3zb| moves this info line last and also explicitly mentions |italic| or
+% \mstrelease{1.3zb} moves this info line last and also explicitly mentions |italic| or
% |frenchmath| (here and at some other locations above).
% \begin{macrocode}
\ifmst@subdued
@@ -10427,7 +11173,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\mst@infoline{The \ifmst@frenchmath frenchmath \else
italic \fi option is in effect.}%
\fi
-}% \Mathastext@
+}%
\let\mathastext\Mathastext
\Mathastext
% \end{macrocode}
@@ -10488,14 +11234,23 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\MTeverymathoff}
-% |1.3i 2016/01/06| Compatibility patch with |\url| from |url.sty| and
+% \mstrelease{1.3i} |2016/01/06| Compatibility patch with |\url| from |url.sty| and
% |\url/\nolinkurl| from |hyperref.sty|.
%
-% |1.3j 2016/01/15| renamed the macro from |\MTactivemathoff| to
+% \mstrelease{1.3j} |2016/01/15| renamed the macro from |\MTactivemathoff| to
% |\MTeverymathoff|, as it is not exclusively a matter of math active
% characters due to |\MTeasynonlettersdonotobeymathxx|.
%
-% |1.3o 2016/05/03| adds \cs{MTdonotfixfonts}. Operant with \LuaLaTeX\ only.
+% \mstrelease{1.3o} |2016/05/03| adds \cs{MTdonotfixfonts}. Operant with
+% \LuaLaTeX\ only.
+%
+% \mstrelease{1.4} |2024/07/20| keeps the \cs{MTmathstandardletters} as a
+% component of \cs{MTeverymathoff}. It was checked that \ctanpkg{url} and
+% \ctanpkg{hyperref} do not change mathcodes of ascii letters prior to
+% location where \cs{MTeverymathoff} gets executed, so nothing is
+% overwritten, despite the new mode of action of \cs{MTmathstandardletters}.
+%
+% \mstrelease{1.4} has \cs{MTmathstandarddigits} and inserts it into \cs{MTeverymathoff}.
% \begin{macrocode}
\newcommand*\MTeverymathoff {%
\MTnormalasterisk
@@ -10503,6 +11258,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\MTnonlettersdonotobeymathxx
\MTeasynonlettersdonotobeymathxx
\MTmathstandardletters
+ \MTmathstandarddigits
\MTdonotfixfonts
}%
\AtBeginDocument {%
@@ -10513,7 +11269,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\MTeverymathdefault}
-% |1.3j 2016/01/15| Customizable command which gets executed by
+% \mstrelease{1.3j} |2016/01/15| Customizable command which gets executed by
% \cs{MTversion} except when switching to |normal/bold| if option |subdued|.
% The included \cs{MTicinmath} does \cs{MTmathactiveletters} which will also
% activate the math skips around letters.
@@ -10537,13 +11293,18 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% it will not be overruled (as it is delayed at begin document to after \mst
% dealings).
%
-% |1.3o 2016/05/03| adds \cs{MTfixfonts}. Operant with \LuaLaTeX\ only.
+% \mstrelease{1.3o} |2016/05/03| adds \cs{MTfixfonts}. Operant with
+% \LuaLaTeX\ only.
+%
+% \cs{MTmathactivedigits} of \mstrelease{1.4} is a no-op except under option
+% |activedigits|.
% \begin{macrocode}
\newcommand*\MTeverymathdefault {%
\MTactiveasterisk
\MTprimedoesskip
\MTeasynonlettersobeymathxx
\MTicinmath
+ \MTmathactivedigits
\MTfixfonts
}%
% \end{macrocode}
@@ -10552,48 +11313,54 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% \def~{\rlap}
% \begin{macro}{Things to do last ~{``at begin document''}}
% \let~\temp
+%
+% \mstrelease{1.4} has a significant change here that mathematical
+% activation of ascii letters is now not incorporated into the \cs{everymath}
+% and \cs{everydisplay}.
% \begin{macrocode}
-\AtBeginDocument{%
- \everymath\expandafter{\the\everymath
- \mst@the\mst@do@nonletters \let\mst@the\@gobble
- \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble
- \mst@thef\mst@do@az \let\mst@thef\@gobble
- \mst@theF\mst@do@AZ \let\mst@theF\@gobble}%
- \everydisplay\expandafter{\the\everydisplay
- \mst@the\mst@do@nonletters \let\mst@the\@gobble
- \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble
- \mst@thef\mst@do@az \let\mst@thef\@gobble
- \mst@theF\mst@do@AZ \let\mst@theF\@gobble}%
-% \end{macrocode}
-% |1.3j|: moved here to be executed at begin document (and not from inside
+\ifmst@everymath
+ \AtBeginDocument{%
+ \everymath\expandafter{\the\everymath
+ \mst@the\mst@do@nonletters \let\mst@the\@gobble
+ \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble
+ }%
+ \everydisplay\expandafter{\the\everydisplay
+ \mst@the\mst@do@nonletters \let\mst@the\@gobble
+ \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble
+ }%
+ }
+\fi
+% \end{macrocode}
+% \mstrelease{1.3j}: moved here to be executed at begin document (and not from inside
% \cs{Mathastext@}.) The \cs{MTeverymathoff} does: \cs{MTnormalasterisk},
% \cs{MTnormalprime}, \cs{MTnonlettersdonotobeymathxx},
% \cs{MTeasynonlettersdonotobeymathxx}, \cs{MTmathstandardletters}.
%
-% |1.3m|: doing \cs{MTmathactiveletters} in subdued mode immediately after
+% \mstrelease{1.3m}: doing \cs{MTmathactiveletters} in subdued mode immediately after
% |\begin{document}| resulted in errors because \cs{mst@itcorr} had been left
% undefined. We thus add \cs{MTnoicinmath} to the subdued initialization.
%
-% Since |1.3n| there is \cs{MTresetnewmcodes} which needs
+% Since \mstrelease{1.3n} there is \cs{MTresetnewmcodes} which needs
% \cs{mst@originalnewmcodes@}, itself defined at begin document. Thus we have
-% wrapped the whole thing in \cs{AtEndOfPackage} (at |1.3u| whole code
+% wrapped the whole thing in \cs{AtEndOfPackage} (at \mstrelease{1.3u} whole code
% directly moved at end of package).
%
-% And |1.3p| adds here \cs{MTcustomizenewmcodes} which had been regrettably
-% forgotten by |1.3n|.
+% And \mstrelease{1.3p} adds here \cs{MTcustomizenewmcodes} which had been regrettably
+% forgotten by \mstrelease{1.3n}.
%
-% |1.3t| adds some extras to handle correctly the minus sign and
+% \mstrelease{1.3t} adds some extras to handle correctly the minus sign and
% dotless i and j in subdued mode, even in case of usage with fontspec.
%
-% |1.3u| similarly lets math accents be correctly subdued.
+% \mstrelease{1.3u} similarly lets math accents be correctly subdued.
%
-% |1.3v| adapts to \cs{hbar} and math accents now being robust with \LaTeX{}
+% \mstrelease{1.3v} adapts to \cs{hbar} and math accents now being robust with \LaTeX{}
% |2019-10-01| or later.
%
-% |1.3w| pays attention to the fact that \cs{hbar} may well be
+% \mstrelease{1.3w} pays attention to the fact that \cs{hbar} may well be
% a |\mathchar| and not a robust macro! And no need to worry about
% \cs{hbar<space>} finally in revised code.
% \begin{macrocode}
+\AtBeginDocument{%
\MTcustomizenewmcodes
\let\mst@original@hbar\hbar
\let\mst@original@imath\imath
@@ -10617,21 +11384,18 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\MTresetnewmcodes
\MTnoicinmath
\MTmathoperatorsdonotobeymathxx
- %\mst@subduedhbar
\let\inodot\imath
\let\jnodot\jmath
- %\mst@subduedmathaccents
\mst@subduedminus
\else
\mst@nonsubduedhbar
% \end{macrocode}
-% |1.3v| needs this \cs{mst@nonsubduedmathaccents} to get executed later (see
+% \mstrelease{1.3v} needs \cs{mst@nonsubduedmathaccents} to get executed later (see
% code comments for \cs{mst@dothe@mathaccentsstuff}).
% \begin{macrocode}
- % \mst@nonsubduedmathaccents % will get executed later
\mst@nonsubduedminus
% \end{macrocode}
-% |1.3j|: an earlier version of this code was earlier part of \cs{Mathastext@}.
+% \mstrelease{1.3j}: an earlier version of this code was earlier part of \cs{Mathastext@}.
% As we are now in \cs{AtBeginDocument} we try to be careful not to overwrite
% \cs{MTicinmath}, \cs{MTnoicinmath}, \cs{MTicalsoinmathxx}, ... if issued by
% the user in the preamble, though. And we do not execute
@@ -10652,12 +11416,12 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\fi
\fi
\fi
-}% \AtBeginDocument
+}%
\AtEndOfPackage{\AtBeginDocument{\ifmst@subdued\else\mst@nonsubduedmathaccents\fi}}%
% \end{macrocode}
% \end{macro}
% \begin{macro}{subdued}
-% |1.15|: The subdued code was initiated in May 2011. I returned to
+% \mstrelease{1.15}: The subdued code was initiated in May 2011. I returned to
% |mathastext| on Sep 24, 2012, and decided to complete what I had started
% then, but in the mean time I had forgotten almost all of the little I knew
% about \LaTeX{} macro programming.
@@ -10671,7 +11435,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% $^1$but the \emph{euler} package for example
% assigns the digits to the \emph{letters} symbol font...
%
-% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing has to be used with care
+% \mstrelease{1.15d}: Oct 13, 2012. The \cs{mathcode} thing has to be used with care
% under Unicode engines. Unfortunately the \cs{luatexUmathcode} macro is
% helpless as it is not possible to know if it will return a legacy mathcode
% or a Unicode mathcode. On the other hand the much saner
@@ -10683,14 +11447,14 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% treats identically under both unicode engines the equal and minus signs (and
% the vertical bar).}
%
-% |1.15e|: Oct 22, 2012. I add the necessary things to also subdue the
+% \mstrelease{1.15e}: Oct 22, 2012. I add the necessary things to also subdue the
% \cs{mathbf}, \cs{mathit}, \cs{mathsf} and \cs{mathtt} macros (previous
% version only took care of the symbol alphabets \cs{mathnormal} and
-% \cs{mathrm}.) [update: |1.15f| does that in a completely different and much
+% \cs{mathrm}.) [update: \mstrelease{1.15f} does that in a completely different and much
% simpler way] Notice that the package defines a \cs{mathnormalbold} macro,
% but it will not be subdued in the normal and bold math versions.
%
-% |1.15f|: Oct 23, 2012. The previous version of the code queried the math
+% \mstrelease{1.15f}: Oct 23, 2012. The previous version of the code queried the math
% family of a, respectively 1, to guess and then extract the fonts to be
% reassigned to mtletterfont and mtoperatorfont (which is done at the end of
% this .sty file). The present code simply directly uses letters and operators
@@ -10705,23 +11469,24 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% to revert these changes (and one would have to do even more hacking for
% |\mathversion{normal}| and not only |\MTversion{normal}| to work).
%
-% |1.15f|: and also I take this opportunity to do the subdued math
+% \mstrelease{1.15f}: and also I take this opportunity to do the subdued math
% alphabets things in a much much easier way, see below.
%
-% |1.3s 2018/08/21|: I have half-forgotten the reasons for modifiying the
+% \mstrelease{1.3s} |2018/08/21|: I have half-forgotten the reasons for modifiying the
% font encoding to current |\encodingdefault|, but at any rate this should
% not be done in a \ctanpkg{fontspec} context, encoding default being (now) |TU| it
% is very unlikely modifying from |TU| or to |TU| from something else will
-% do any good.^^A See
+% do any good.
+%^^A See
%^^A \centeredline{\url{https://tex.stackexchange.com/questions/444565/mathastext-wrong-digits-in-math-mode/}}
%^^A for original report.
% I add workaround here for case of \ctanpkg{fontspec} being
% detected via the |\encodingdefault| setting.
%
-% |1.3t 2018/08/22|: the |1.3s| fix erroneously removed the
+% \mstrelease{1.3t} |2018/08/22|: the \mstrelease{1.3s} fix erroneously removed the
% |OT1->T1| replacement in |TU| context.
%
-% |1.3u|: the whole thing will only get executed At Begin
+% \mstrelease{1.3u}: the whole thing will only get executed At Begin
% Document.
%
% I realize extremely late (|2023/12/28|) I never said explicitly anywhere
@@ -10734,7 +11499,7 @@ defaultbf,defaultit,defaultsf,defaulttt}}
% behavior of the package.
% \begin{macrocode}
\ifmst@subdued
-\AtBeginDocument{%
+ \AtBeginDocument{%
\def\mst@reserved#1\getanddefine@fonts\symletters#2#3\@nil{%
\def\mst@normalmv@letter{#2}}%
\expandafter\mst@reserved\mv@normal\@nil
@@ -10773,15 +11538,19 @@ defaultbf,defaultit,defaultsf,defaulttt}}
\else
\mst@tmp@enc
\fi/\mst@reste\endcsname}%
- \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@letter\symmtletterfont
- \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@letter\symmtletterfont
- \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@operator\symmtoperatorfont
- \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@operator\symmtoperatorfont
-\immediate\write\m@ne{}%
+ \expandafter\SetSymbolFont@
+ \expandafter\mv@normal\mst@normalmv@letter\symmtletterfont
+ \expandafter\SetSymbolFont@
+ \expandafter\mv@bold\mst@boldmv@letter\symmtletterfont
+ \expandafter\SetSymbolFont@
+ \expandafter\mv@normal\mst@normalmv@operator\symmtoperatorfont
+ \expandafter\SetSymbolFont@
+ \expandafter\mv@bold\mst@boldmv@operator\symmtoperatorfont
+ \immediate\write\m@ne{}%
\PackageInfo{mathastext}{...entering subdued mode...\MessageBreak ...done}%
-\immediate\write\m@ne{}%
-}% \AtBeginDocument
-\fi % \ifmst@subdued
+ \immediate\write\m@ne{}%
+ }%
+\fi
% \end{macrocode}
%^^A In the short-lived |1.15e| I was doing the following for alphabets:\\
%^^A |\def\mst@reservedc#1#2#3#4{\def\mst@normalmv@mathbf{#4#3}}|\\
diff --git a/macros/latex/contrib/mathastext/mathastext.pdf b/macros/latex/contrib/mathastext/mathastext.pdf
index 6e95227410..635b6149fb 100644
--- a/macros/latex/contrib/mathastext/mathastext.pdf
+++ b/macros/latex/contrib/mathastext/mathastext.pdf
Binary files differ
diff --git a/macros/latex/contrib/mercatormap/CHANGES.md b/macros/latex/contrib/mercatormap/CHANGES.md
new file mode 100644
index 0000000000..3d699e9b47
--- /dev/null
+++ b/macros/latex/contrib/mercatormap/CHANGES.md
@@ -0,0 +1,153 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on
+[Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
+and this project adheres to
+[Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [Unreleased]
+
+### Added
+### Changed
+### Deprecated
+### Removed
+### Fixed
+### Security
+
+
+## [1.1.0] - 2024-08-01
+
+### Added
+- New supply sources (web tile servers):
+ - `thunderforest atlas`
+ - `topplusopen web light`
+ - `topplusopen web light grau`
+- Needed LaTeX version 2023-11-01
+- Point definitions on an orthodrome:
+ - Command `mrcNPfromOrthoFraction`
+ - Command `mrcNPfromOrthoFractionNamed`
+ - Command `mrcNPfromOrthoDistance`
+ - Command `mrcNPfromOrthoDistanceNamed`
+- Animation support:
+ - Environment `mrcAnimation`
+ - Command `\mrcTimewarpIdentity`
+ - Command `\mrcTimewarpSlowStart`
+ - Command `\mrcTimewarpSlowFinal`
+ - Command `\mrcTimewarpSlowStartFinal`
+ - Command `\mrcAnimFrame`
+ - Command `\l_mermap_anim_frame_int`
+ - Command `\mrcAnimTime`
+ - Command `\l_mermap_anim_time_fp`
+ - Command `\mrcAnimScaleDenom`
+ - Command `\l_mermap_anim_scaledenom_fp`
+ - Command `\mrcAnimLatitude`
+ - Command `\l_mermap_anim_lat_fp`
+ - Command `\mrcAnimLongitude`
+ - Command `\l_mermap_anim_lon_fp`
+ - Option `start-position`
+ - Option `named-start-position`
+ - Option `final-position`
+ - Option `named-final-position`
+ - Option `position`
+ - Option `named-position`
+ - Option `frames`
+ - Option `drop-first-frame`
+ - Option `drop-last-frame`
+ - Option `drop-no-frame`
+ - Option `scale-denominators`
+ - Option `common-scale-denominator`
+ - Option `timewarp`
+ - Option `timewarp-identity`
+ - Option `timewarp-slow-start`
+ - Option `timewarp-slow-final`
+ - Option `timewarp-slow-start-final`
+
+### Changed
+- Version history moved from documentation Chapter 11 to this changelog
+- Versioning changed to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)
+ starting with 1.1.0
+- `README` changed to `README.md`
+- Key names start with `mermap` instead of `/mermap` now
+- All common scratch variables like `\l_tmpa_tl` replaced by package variables
+- Orthodrome code
+- Several code further revisions
+
+### Deprecated
+- Stamen Design has discontinued to server map tiles since 2023-07-31.
+ Therefore, all `supply/source` options based on Stamen Design are
+ deprecated now, namely
+ - `stamen terrain`
+ - `stamen terrain-background`
+ - `stamen terrain-labels`
+ - `stamen terrain-lines`
+ - `stamen toner`
+ - `stamen toner-lite`
+ - `stamen toner-hybrid`
+ - `stamen toner-background`
+ - `stamen toner-labels`
+ - `stamen toner-lines`
+ - `stamen watercolor`
+ All these options are now not documented any more, but for some time
+ are still available for old documents with cached map tiles.
+
+### Removed
+- Requirement for packages `expl3`, `xparse`, and `pdftexcmds`
+
+### Fixed
+- Links to the WMS maps of Bundesamt für Kartographie und Geodäsie changed
+- Overwrite warning while generating `maptiles.texpy`
+- Orthodrome drawing with identical starting and final point is now silently ignored
+
+
+
+## [1.02] - 2020-08-06
+
+### Added
+- New options
+ `/mermap/supply/area from marker input` and
+ `/mermap/supply/add area from marker input`
+ which allow to fit a map to a given external list of marker positions.
+- New option `/mermap/fail on missing resource` to control
+ compilation behavior for missing resource files.
+- New marker option `/mermap/marker/distance` with corresponding
+ macro `\mrcmarkerdistance` (issue #2)
+
+### Deprecated
+- Openrouteservice has discontinued mapsurfer tiles since June 2020.
+ Therefore, `/mermap/supply/source=openrouteservice mapsurfer`
+ is deprecated now. It is not documented any more, but
+ for some time it is still available for old documents with
+ cached map tiles.
+
+
+
+## [1.01] - 2020-05-05
+
+### Added
+- New general marker option
+ `/mermap/marker/generic` with corresponding macros
+ `\mrcmarkergeneric` and `\l_mermap_marker_generic_tl`.
+ Also, the marker uuid is made expl3 accessible as `\l_mermap_marker_uuid_tl`.
+- New hyper marker options:
+ - `/mermap/marker/url`
+ - `/mermap/marker/link`
+ - `/mermap/marker/use urls`
+ - `/mermap/marker/ignore urls`
+ - `/mermap/marker/use links`
+ - `/mermap/marker/ignore links`
+
+### Changed
+- User messages for failed Python script calls are changed from warnings to
+ errors to fail fast and to provide more information and hints about
+ possible reasons.
+
+### Fixed
+- Sorting of index key entries fixed for the documentation.
+
+
+
+## [1.00] - 2020-04-20
+
+### Added
+- Initial public release
diff --git a/macros/latex/contrib/mercatormap/README b/macros/latex/contrib/mercatormap/README
deleted file mode 100644
index c33ea99112..0000000000
--- a/macros/latex/contrib/mercatormap/README
+++ /dev/null
@@ -1,43 +0,0 @@
-%% The LaTeX package mercatormap - version 1.02 (2020/08/06)
-%%
-%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
-%% -------------------------------------------------------------------------------------------
-%%
-%% 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 in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work has the LPPL maintenance status `author-maintained'.
-%%
-%% This work consists of all files listed in README
-%%
-
-The package ...
-
-Contents of the package
-=======================
- 'README' this file
- 'mercatormap.sty' LaTeX package file (style file)
- 'mercatorsupplier.def' LaTeX package file (include file for style)
- 'mercatorpy.def' LaTeX package file (Python generator)
- 'mercatormap.pdf' Documentation
- 'mercatormap.tex' Source code of the documentation (main file)
- '*.doc.*' Source code of the documentation (include files)
- 'mercatormap-example.tex' Source code of an example
- 'mercatormap.bib' Bibliography of the documentation
-
-Installation
-============
-Copy the contents of the 'mercatormap.tds.zip' from CTAN to your local TeX file tree.
-
-Alternatively, put the files to their respective locations within the TeX installation:
- 'mercatormap.sty' -> /tex/latex/mercatormap
- 'mercatorpy.def' -> /tex/latex/mercatormap
- 'mercatorsupplier.def' -> /tex/latex/mercatormap
-
- all other files -> /doc/latex/mercatormap
diff --git a/macros/latex/contrib/mercatormap/README.md b/macros/latex/contrib/mercatormap/README.md
new file mode 100644
index 0000000000..dcea9833cc
--- /dev/null
+++ b/macros/latex/contrib/mercatormap/README.md
@@ -0,0 +1,50 @@
+# The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
+
+
+> Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+
+> 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 in
+> https://www.latex-project.org/lppl.txt
+> and version 1.3c or later is part of all distributions of LaTeX
+> version 2008-05-04 or later.
+
+> This work has the LPPL maintenance status `author-maintained`.
+
+> This work consists of all files listed in README.md
+
+
+The mercatormap package extends TikZ with tools to
+create map graphics. The provided coordinate system relies on the
+Web Mercator projection used on the Web by OpenStreetMap and others.
+The package supports the seamless integration of graphics
+from public map tile servers by a Python script. Also, common map
+elements like markers, geodetic networks, bar scales, routes, orthodrome
+pieces, and more are part of the package.
+
+
+## Contents of the package
+
+- `README.md` this file
+- `CHANGES.md` log of changes (history)
+- `mercatormap.sty` LaTeX package file (style file)
+- `mercatorsupplier.def` LaTeX package file (include file for style)
+- `mercatorpy.def` LaTeX package file (Python generator)
+- `mercatormap.pdf` Documentation
+- `mercatormap.tex` Source code of the documentation (main file)
+- `*.doc.*` Source code of the documentation (include files)
+- `mercatormap-example.tex` Source code of an example
+- `mercatormap.bib` Bibliography of the documentation
+
+
+## Installation
+
+Copy the contents of the `mercatormap.tds.zip` from CTAN to your local TeX file tree.
+
+Alternatively, put the files to their respective locations within the TeX installation:
+- `mercatormap.sty` -> /tex/latex/mercatormap
+- `mercatorpy.def` -> /tex/latex/mercatormap
+- `mercatorsupplier.def` -> /tex/latex/mercatormap
+- all other files -> /doc/latex/mercatormap
diff --git a/macros/latex/contrib/mercatormap/mercatormap-example.tex b/macros/latex/contrib/mercatormap/mercatormap-example.tex
index 0951bf14d1..fbd0bd7e17 100644
--- a/macros/latex/contrib/mercatormap/mercatormap-example.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap-example.tex
@@ -1,11 +1,11 @@
% \LaTeX-Main\
% !TeX encoding=UTF-8
%%
-%% The LaTeX package mercatormap - version 1.02 (2020/08/06)
+%% The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
%% mercatormap-example.tex: Example document with a map
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
diff --git a/macros/latex/contrib/mercatormap/mercatormap.bib b/macros/latex/contrib/mercatormap/mercatormap.bib
index ef2e9b6213..36a3e976ec 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.bib
+++ b/macros/latex/contrib/mercatormap/mercatormap.bib
@@ -1,4 +1,5 @@
% Encoding: UTF-8
+
% include file of mercatormap.tex (manual of the LaTeX package mercatormap)
@Report{Sturm:2020,
@@ -14,35 +15,27 @@
}
-@manual{package:tikz,
- author = {Till Tantau},
- title = {The TikZ and PGF Packages},
- subtitle = {Manual for version 3.1.5b},
- url = {http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf},
- date = {2020-01-08},
+@Manual{package:tikz,
+ author = {Till Tantau},
+ date = {2023-01-15},
+ title = {The TikZ and PGF Packages},
+ subtitle = {Manual for version 3.1.10},
+ url = {https://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf},
}
-@manual{package:xparse,
- author = {{The \LaTeX3 Project}},
- title = {The xparse package},
- subtitle = {Document command parser},
- url = {http://mirrors.ctan.org/macros/latex/contrib/l3packages/xparse.pdf},
- date = {2020-03-06},
+@Manual{l3kernel:interfaces,
+ author = {{The \LaTeX3 Project}},
+ date = {2024-05-27},
+ title = {The \LaTeX3 Interfaces},
}
-@manual{package:siunitx,
- author = {Joseph Wright},
- title = {siunitx -- A comprehensive (SI) units package},
- url = {http://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf},
- date = {2020-02-25},
+@Manual{package:siunitx,
+ author = {Joseph Wright},
+ date = {2024-06-24},
+ title = {siunitx -- A comprehensive (SI) units package},
+ url = {https://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf},
}
-
-@manual{package:expl3,
- author = {{The \LaTeX3 Project}},
- title = {The expl3 package and \LaTeX3 programming},
- url = {http://mirrors.ctan.org/macros/latex/contrib/l3kernel/expl3.pdf},
- date = {2020-04-06},
-}
+@Comment{jabref-meta: databaseType:biblatex;}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex
new file mode 100644
index 0000000000..67671dc165
--- /dev/null
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex
@@ -0,0 +1,480 @@
+% !TeX root = mercatormap.tex
+% !TeX encoding=UTF-8
+% !TeX spellcheck=en_US
+% include file of mercatormap.tex (manual of the LaTeX package mercatormap)
+\clearpage
+\section{Animations}\label{sec:animations}%
+
+An animation in the context of map drawing is considered to be a direct movement
+from a starting position to a final position with possible adaption of
+scale denominators.
+
+This package does not provide animation production, but allows to create a
+PDF with a sequence of maps (frames) following such an animation path.
+
+
+%-------------------------------------------------------------------------------
+\subsection{Animation Environment}
+
+\begin{docEnvironment}[doc new=2024-07-31]{mrcAnimation}{\marg{options}}
+ According to the given \meta{options}, the environment loops over the
+ \meta{environment content} several times generating \textit{frames}
+ for an external animation program.
+ A detailed description for the \meta{options} is found in \Fullref{ref:animOptions}.
+ \begin{itemize}
+ \item Basically, the position is moved from
+ a given \refKey{mermap/anim/start-position} with time index |0|
+ following an orthodrome
+ to a \refKey{mermap/anim/final-position} with time index |1|.
+ \item
+ This time interval $[0,1]$ is divided into \refKey{mermap/anim/frames}.
+ The current frame number is denoted by \refCom{mrcAnimFrame},
+ the current time is denoted by \refCom{mrcAnimTime}, and
+ the current position is denoted by
+ \refCom{mrcAnimLatitude} and \refCom{mrcAnimLongitude},
+ alternatively by the named positon \docValue{AnimNP}.
+ \item
+ During movement, a time dependent sequence of \refKey{mermap/anim/scale-denominators}
+ defines the current scale denominator \refCom{mrcAnimScaleDenom}.
+ \item
+ The frames may have an equal time distance or have different time
+ distances using a \refKey{mermap/anim/timewarp}. This could be used
+ to slow down movement near ground and to speed up with more height.
+ \end{itemize}
+ The generated sequence of frames is applicable for
+ \begin{itemize}
+ \item Movement along an orthodrome from starting to final position with an unchanged
+ common scale denominator.
+ \item Zoom in or out on a fixed position.
+ \item Combination of both animation.
+ \end{itemize}
+ For more complex animations, several \refEnv{mrcAnimation} environments may be
+ used consecutively.
+\end{docEnvironment}
+
+\clearpage
+\begin{dispExample*}{breakable}
+ \mrcNPdef{heathrow}{51.4678}{-0.4548}
+ \mrcNPdef{fiumicino}{41.8151}{12.2508}
+
+ \begin{tcbraster}[raster height=22cm,raster columns=4,raster rows=7,
+ tile,size=minimal,boxsep=1pt,colback=black!20 ]
+ \begin{mrcAnimation}
+ {
+ named-start-position = heathrow,
+ named-final-position = fiumicino,
+ frames = 36,
+ scale-denominators = 0/1000000 - 0.3/8000000 - 0.7/8000000 - 1/1000000,
+ timewarp-slow-start-final = 1.5,
+ }
+ \begin{tcolorbox}
+ \begin{tikzpicture}
+ \mermapset
+ {
+ named flex scale = \mrcAnimScaleDenom:AnimNP,
+ }
+ \mrcmap
+ [
+ type = reference,
+ named position = AnimNP,
+ source = topplusopen web,
+ tex width = \tcbtextwidth,
+ tex height = \tcbtextheight
+ ]{london-roma-\mrcAnimFrame}
+ \mrcdrawmap
+ \node[above left,font=\fontsize{3.5pt}{3.5pt}\sffamily]
+ at (mrcmap.south east) {\mrcmapattribution};
+ \mrcclipmap
+ \end{tikzpicture}
+ \end{tcolorbox}
+ \end{mrcAnimation}
+ \end{tcbraster}
+\end{dispExample*}
+
+
+\clearpage
+%-------------------------------------------------------------------------------
+\subsection{Animation Options}\label{ref:animOptions}
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = start-position,
+ doc parameter = {=\meta{latitude}/\meta{longitude}},
+ doc description = initially |51.4779/0|
+ },
+ {
+ doc name = named-start-position,
+ doc parameter = {=\meta{name}},
+ }
+ }
+ Starting position of the animation given by
+ \meta{latitude} and \meta{longitude} or by a named position using \meta{name}.
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = final-position,
+ doc parameter = {=\meta{latitude}/\meta{longitude}},
+ doc description = initially |51.4779/0|
+ },
+ {
+ doc name = named-final-position,
+ doc parameter = {=\meta{name}},
+ }
+ }
+ Final position of the animation given by
+ \meta{latitude} and \meta{longitude} or by a named position using \meta{name}.
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = position,
+ doc parameter = {=\meta{latitude}/\meta{longitude}},
+ doc description = initially |51.4779/0|
+ },
+ {
+ doc name = named-position,
+ doc parameter = {=\meta{name}},
+ }
+ }
+ Fixed position of the animation given by
+ \meta{latitude} and \meta{longitude} or by a named position using \meta{name}.
+ This sets \refKey{mermap/anim/start-position} and
+ \refKey{mermap/anim/final-position} to the identical value.
+\end{docMrcKeys}
+
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = frames,
+ doc parameter = {=\meta{frame number}},
+ doc description = initially |20|
+ },
+ }
+ Integer \meta{frame number} for the animation, at least |2|. For maps made with tiles,
+ even a large \meta{frame number} typically results in limited downloads,
+ because the tiles a reused as far as possible. For WMS maps, every frame
+ could give another download!
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ doc parameter = {\colOpt{=true\textbar false}},
+ doc description = {default |true|, initially |false|},
+ ]{
+ {
+ doc name = drop-first-frame,
+ },
+ {
+ doc name = drop-last-frame,
+ },
+ }
+ If several \refEnv{mrcAnimation} environments are used consecutively,
+ the end frame of one animation is identical to the start frame of the
+ next animation. These options allow to remove one superfluous connecting frame.
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = drop-no-frame,
+ doc description = {no value, initially set},
+ },
+ }
+ Reset to drop no frames.
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = scale-denominators,
+ doc parameter = {=\marg{time and scale sequence}},
+ doc description = {initially |0/25000-1/25000|},
+ },
+ }
+ The \meta{time and scale sequence} has to obey the following pattern:
+ \par
+ \meta{time$_1$}|/|\meta{scale$_1$} |-|
+ \meta{time$_2$}|/|\meta{scale$_2$} |-| $\ldots$ |-|
+ \meta{time$_n$}|/|\meta{scale$_n$}
+ \par
+ The time values have to be taken from the interval $[0,1]$ and have to be
+ strictly monotonically increasing, i.e.
+ \par
+ $0\le$ \meta{time$_1$} $<$
+ \meta{time$_2$} $<$ $\ldots$ $<$
+ \meta{time$_n$} $\le 1$
+ \par
+ If not given, time and scale for time $0$ and $1$ are automatically added
+ as constant continuation.\par
+ Depending on the current time value \refCom{mrcAnimTime}, the current
+ scale denominator \refCom{mrcAnimScaleDenom} is interpolated from this
+ sequence using a logarithmic approach.
+\end{docMrcKeys}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = common-scale-denominator,
+ doc parameter = {=\marg{scale denominator}},
+ doc description = {initially |25000|},
+ },
+ }
+ This is a shortcut for\par
+ \refKey{mermap/anim/scale-denominators} |=|\\
+ \hspace*{5mm} |0/|\marg{scale denominator} |- 1/|\marg{scale denominator}
+ \par
+ Thereby, a fixed \marg{scale denominator} is set for the animation.
+\end{docMrcKeys}
+
+
+\clearpage
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = timewarp,
+ doc parameter = {=\meta{macro}},
+ doc description = initially \texttt{\textbackslash mrcTimewarpIdentity}
+ },
+ }
+ \meta{macro} has to be a fully expandable \LaTeX\ macro with one parameter.
+ The expansion has to be a valid |expl3| \meta{floating point expression}
+ denoting a strictly monotonically increasing function mapping from
+ the interval \mbox{$[0,1]$} into \mbox{$[0,1]$} again.
+ This timewarp may slow down and accelerate time over the span from $0$ to $1$.
+\end{docMrcKeys}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcTimewarpIdentity,
+ doc parameter = {=\marg{time}},
+ },
+ }
+ Identity function from \mbox{$[0,1]$} into \mbox{$[0,1]$}.
+\end{docCommands}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = timewarp-identity,
+ doc description = {no value, initially set}
+ },
+ }
+ Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpIdentity}.
+ This means that time flows constantly.
+\end{docMrcKeys}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcTimewarpSlowStart,
+ doc parameter = {=\marg{exponent}\marg{time}},
+ doc description = {default |2|}
+ },
+ }
+ Function term $t^{\text{\meta{exponent}}}$
+\end{docCommands}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = timewarp-slow-start,
+ doc parameter = \colOpt{=\meta{exponent}},
+ doc description = {default |2|}
+ },
+ }
+ Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowStart}\marg{exponent}.
+ \par
+ If $\text{\meta{exponent}}>1$ is used, time flows slower at the begin of the
+ interval \mbox{$[0,1]$}. This can be used, if a low scale denominator is
+ present at begin of a movement and is becoming larger later. Here, for smoothness,
+ you may want this to have slower speed near ground and larger speed later.
+\end{docMrcKeys}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcTimewarpSlowFinal,
+ doc parameter = {=\marg{exponent}\marg{time}},
+ doc description = {default |2|}
+ },
+ }
+ Function term $1 - (1-t)^{\text{\meta{exponent}}}$
+\end{docCommands}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = timewarp-slow-final,
+ doc parameter = \colOpt{=\meta{exponent}},
+ doc description = {default |2|}
+ },
+ }
+ Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowFinal}\marg{exponent}.
+ \par
+ If $\text{\meta{exponent}}>1$ is used, time flows slower at the end of the
+ interval \mbox{$[0,1]$}. This can be used, if a large scale denominator is
+ present at begin of a movement and is becoming lower later. Here, for smoothness,
+ you may want this to have slower speed near ground at the end.
+\end{docMrcKeys}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcTimewarpSlowStartFinal,
+ doc parameter = {=\marg{exponent}\marg{time}},
+ doc description = {default |2|}
+ },
+ }
+ Combination of \refCom{mrcTimewarpSlowStart} and \refCom{mrcTimewarpSlowFinal}
+ using case discrimination for the first and the second half of the intervall.
+\end{docCommands}
+
+
+\begin{docMrcKeys}[
+ doc keypath = anim,
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = timewarp-slow-start-final,
+ doc parameter = \colOpt{=\meta{exponent}},
+ doc description = {default |2|}
+ },
+ }
+ Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowStartFinal}\marg{exponent}.
+ \par
+ If $\text{\meta{exponent}}>1$ is used, time flows slower at the begin and at the end of the
+ interval \mbox{$[0,1]$}. This can be used, if a low scale denominator is
+ present at begin of a movement, becomes larger in the middle, and finally
+ is becoming lower later. Here, for smoothness,
+ you may want this to have slower speed near ground at the begin and the end.
+\end{docMrcKeys}
+
+
+\clearpage
+%-------------------------------------------------------------------------------
+\subsection{Macros inside the Animation Environment}\label{ref:animMacros}
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcAnimFrame,
+ },
+ {
+ doc name = l_mermap_anim_frame_int,
+ },
+ }
+ The current frame number ranging from $1$ to \refKey{mermap/anim/frames}.
+\end{docCommands}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcAnimTime,
+ },
+ {
+ doc name = l_mermap_anim_time_fp,
+ },
+ }
+ The current time ranging from $0$ to $1$.
+\end{docCommands}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcAnimScaleDenom,
+ },
+ {
+ doc name = l_mermap_anim_scaledenom_fp,
+ },
+ }
+ The current scale denominator according to \refKey{mermap/anim/scale-denominators}.
+\end{docCommands}
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcAnimLatitude,
+ },
+ {
+ doc name = l_mermap_anim_lat_fp,
+ },
+ }
+ The latitude of the current position.
+\end{docCommands}
+
+
+
+\begin{docCommands}[
+ doc new = 2023-07-31,
+ ]{
+ {
+ doc name = mrcAnimLongitude,
+ },
+ {
+ doc name = l_mermap_anim_lon_fp,
+ },
+ }
+ The longitude of the current position.
+\end{docCommands}
+
+
+\docValue{AnimNP}\tcbdocmarginnote{\tcbdocnew{2024-07-31}}:
+ The current named position.
+
+
+
+
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex
index ad285fb7c9..5c914dd012 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex
@@ -23,14 +23,14 @@
\subsection{Option Setting}
\begin{docCommand}{mermapset}{\marg{options}}
Sets \meta{options} for all following maps inside the current \TeX\ group.
- All options share the common prefix |/mermap/|, e.g. for setting
- \refKey{/mermap/vicinity} use
+ All options share the common prefix |mermap/|, e.g. for setting
+ \refKey{mermap/vicinity} use
\begin{dispListing}
\mermapset{vicinity=3cm}
\end{dispListing}
Also see \refCom{mrcdefinemap}, \refCom{mermapsetsupply},
and \refCom{mermapsetmarker}.\par
- Note that the options by \refCom{mermapset} are |expl3| \cite{package:expl3}
+ Note that the options by \refCom{mermapset} are |expl3| \cite{l3kernel:interfaces}
keys while \tikzname\ \cite{package:tikz} uses its own key management.
\end{docCommand}
@@ -45,7 +45,7 @@ See \Fullref{sec:automated_map} for script aided map definitions.
\begin{docCommand}{mrcdefinemap}{\marg{options}}
Establishes a map inside a |tikzpicture| environment following
and applying the given \meta{options}.
- All options share the common prefix |/mermap/mapdef/|.
+ All options share the common prefix |mermap/mapdef/|.
After \refCom{mrcdefinemap} is applied, map drawing and map coordinates
can be used.
\begin{itemize}
@@ -60,25 +60,25 @@ See \Fullref{sec:automated_map} for script aided map definitions.
\begin{docMrcKey}[mapdef]{north}{=\meta{map north latitude}}{no default, initially 50}
Northern latitude degree of the visible map, possibly negative for the southern hemisphere,
- lower than $90$ but always larger than \refKey{/mermap/mapdef/south}.
+ lower than $90$ but always larger than \refKey{mermap/mapdef/south}.
It is accessible as \docAuxCommand{mrcmapnorth} (use read-only).
\end{docMrcKey}
\begin{docMrcKey}[mapdef]{south}{=\meta{map south latitude}}{no default, initially 48}
Southern latitude degree of the visible map, possibly negative for the southern hemisphere,
- larger than $-90$ but always lower than \refKey{/mermap/mapdef/north}.
+ larger than $-90$ but always lower than \refKey{mermap/mapdef/north}.
It is accessible as \docAuxCommand{mrcmapsouth} (use read-only).
\end{docMrcKey}
\begin{docMrcKey}[mapdef]{west}{=\meta{map west longitude}}{no default, initially 11}
Western longitude degree of the visible map, possibly negative for the western hemisphere,
- possibly shifted periodically, but always lower than \refKey{/mermap/mapdef/east}.
+ possibly shifted periodically, but always lower than \refKey{mermap/mapdef/east}.
It is accessible as \docAuxCommand{mrcmapwest} (use read-only).
\end{docMrcKey}
\begin{docMrcKey}[mapdef]{east}{=\meta{map east longitude}}{no default, initially 13}
Eastern longitude degree of the visible map, possibly negative for the western hemisphere,
- possibly shifted periodically, but always larger than \refKey{/mermap/mapdef/west}.
+ possibly shifted periodically, but always larger than \refKey{mermap/mapdef/west}.
It is accessible as \docAuxCommand{mrcmapeast} (use read-only).
\end{docMrcKey}
@@ -149,7 +149,7 @@ information.
\begin{docMrcKey}[mapdef]{attribution print}{=\meta{attribution text}}{no default, initially empty}
Attribution text for the map source.
- In contrast to \refKey{/mermap/mapdef/attribution} it is intended for media
+ In contrast to \refKey{mermap/mapdef/attribution} it is intended for media
that does not support hyperlinks like printed posters, books, etc.
It is accessible as \docAuxCommand{mrcmapattributionprint} (use read-only).
\end{docMrcKey}
@@ -166,7 +166,7 @@ information.
\end{docMrcKey}
\begin{docMrcKey}[mapdef]{tile size}{=\meta{length}}{no default, initially |32.512mm|}
- Typically set computationally. It is identical to \refKey{/mermap/tile size}
+ Typically set computationally. It is identical to \refKey{mermap/tile size}
which is the recommended user option for manual setup.
\end{docMrcKey}
@@ -204,7 +204,7 @@ The border of the visible map is denoted by a \tikzname\ node \docNode{mrcmap}.
\medskip
The |mrc cs| coordinate system defines a map point by
-\refKey{/mermap/cs/latitude} and \refKey{/mermap/cs/longitude}
+\refKey{mermap/cs/latitude} and \refKey{mermap/cs/longitude}
\begin{docMrcKey}[cs]{latitude}{=\meta{latitude}}{no default}
Sets the \meta{latitude} of a map point.
@@ -220,7 +220,7 @@ The |mrc cs| coordinate system defines a map point by
\medskip
A map point can also be defined by shorter variants
-\refKey{/mermap/cs/lat} and \refKey{/mermap/cs/lon}
+\refKey{mermap/cs/lat} and \refKey{mermap/cs/lon}
\begin{docMrcKey}[cs]{lat}{=\meta{latitude}}{no default}
Sets the \meta{latitude} of a map point.
@@ -356,7 +356,7 @@ Very similar to \refCom{ifmrcinmap} is \refCom{ifmrcinvicinity}.
\begin{docCommand}{ifmrcinvicinity}{\marg{latitude}\marg{longitude}\marg{true}\marg{false}}
If the given \meta{latitude} and \meta{longitude} describes a point
- inside a vicinity of the visible map, i.e. the map \emph{plus} a margin of \refKey{/mermap/vicinity},
+ inside a vicinity of the visible map, i.e. the map \emph{plus} a margin of \refKey{mermap/vicinity},
the \meta{true} code is executed, otherwise
the \meta{false} code.\par
Inside the \meta{true} code a \tikzname\ coordinate \docNode{mrcpos}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex
index dd86fcedbd..0b484da09b 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex
@@ -11,7 +11,7 @@
\begin{docCommand}{mrcdrawmap}{\oarg{options}}
Inside a |tikzpicture| environment, \refCom{mrcdrawmap} draws a map
prepared by \refCom{mrcdefinemap}, \refCom{mrcapplymap}, or \refCom{mrcmap}.
- All \meta{options} share the common prefix |/mermap/|.
+ All \meta{options} share the common prefix |mermap/|.
This is the principal macro to draw a prepared map respectively
the background of the map. The background consists of downloaded map tiles
or just a color rectangle.
@@ -19,10 +19,10 @@
\begin{docMrcKey}{draw}{=\meta{tile draw}}{no default, initially |auto|}
\begin{itemize}
- \item\docValue{auto}: Draws the map according to \refKey{/mermap/mapdef/resource},
+ \item\docValue{auto}: Draws the map according to \refKey{mermap/mapdef/resource},
i.e. downloaded maps or tiles are used, if available.
\item\docValue{path}: Draws the map according to the style given by
- \refKey{/mermap/map path}. Existing map tiles or merged maps are ignored
+ \refKey{mermap/map path}. Existing map tiles or merged maps are ignored
\item\docValue{tiles}: Draws the map with downloaded map tiles, if
available.
\item\docValue{mergedmap}: Draws the map with a merged picture, if
@@ -75,24 +75,24 @@
Typically, the pixel size of a map tile is fixed and a map tile is a
pixel graphics file. The actual size of such an included picture inside
the document is freely selectable. Note that a very small
-\refKey{/mermap/tile size} results in very small map lettering,
-while a very large \refKey{/mermap/tile size} results results in
+\refKey{mermap/tile size} results in very small map lettering,
+while a very large \refKey{mermap/tile size} results results in
very blurred images.
The general idea of a \emph{flexible} tile size is to specify an aspired
-tile size called \refKey{/mermap/flex tile size} and to give \LaTeX\
-the freedom to select \refKey{/mermap/tile size} in \emph{about the same size}
-as \refKey{/mermap/flex tile size}.
+tile size called \refKey{mermap/flex tile size} and to give \LaTeX\
+the freedom to select \refKey{mermap/tile size} in \emph{about the same size}
+as \refKey{mermap/flex tile size}.
This freedom is used to achieve a \emph{pseudo zoom} called
-\refKey{/mermap/flex zoom} which is a nearly arbitrary rational number instead
-of \refKey{/mermap/supply/zoom} which is a natural number.
+\refKey{mermap/flex zoom} which is a nearly arbitrary rational number instead
+of \refKey{mermap/supply/zoom} which is a natural number.
This \emph{pseudo zoom} is applied by several options which share \emph{flex}
in their names, e.g.
-\refKey{/mermap/flex scale}, \refKey{/mermap/named flex scale},
-\refKey{/mermap/supply/flex reference scale},
-\refKey{/mermap/supply/flex area scale},
-\refKey{/mermap/supply/flex area fit}.
+\refKey{mermap/flex scale}, \refKey{mermap/named flex scale},
+\refKey{mermap/supply/flex reference scale},
+\refKey{mermap/supply/flex area scale},
+\refKey{mermap/supply/flex area fit}.
@@ -101,30 +101,30 @@ in their names, e.g.
For standard tiles with 256 times 256 pixels a tile size of
\SI{32.512}{mm} = \SI{1.28}{in} results in an approximate
\SI{200}{dpi} output for the document.
- For a |beamer| document, consider to use a \refKey{/mermap/tile size} of
+ For a |beamer| document, consider to use a \refKey{mermap/tile size} of
\SI{21.333333}{mm} to get approximate 1:1 pixel input and output (depending on |beamer| settings
- and used hardware). Also see \refKey{/mermap/mapdef/tile size}.
+ and used hardware). Also see \refKey{mermap/mapdef/tile size}.
\end{docMrcKey}
\begin{docMrcKey}{flex tile size}{=\meta{length}}{no default, initially |32.512mm|}
Aspired width and height of a tile picture are set to \meta{length}.
- This value is used while applying \refKey{/mermap/flex zoom}.
+ This value is used while applying \refKey{mermap/flex zoom}.
\end{docMrcKey}
\begin{docMrcKey}{flex zoom}{=\meta{pseudo zoom}}{style, no default}
- This style sets \refKey{/mermap/supply/zoom} and \refKey{/mermap/tile size} in combination.
+ This style sets \refKey{mermap/supply/zoom} and \refKey{mermap/tile size} in combination.
\begin{itemize}
\item
If \meta{pseudo zoom} is a natural number,
- \refKey{/mermap/supply/zoom} is set to \meta{pseudo zoom} and
- \refKey{/mermap/tile size} is set to \refKey{/mermap/flex tile size}.
- \item Otherwise, \refKey{/mermap/supply/zoom} is set to the natural number
- closest to \meta{pseudo zoom} and \refKey{/mermap/tile size} is such
+ \refKey{mermap/supply/zoom} is set to \meta{pseudo zoom} and
+ \refKey{mermap/tile size} is set to \refKey{mermap/flex tile size}.
+ \item Otherwise, \refKey{mermap/supply/zoom} is set to the natural number
+ closest to \meta{pseudo zoom} and \refKey{mermap/tile size} is such
enlarged or reduced that the \meta{pseudo zoom} value is simulated,
i.e. the \emph{impression} of a rational zoom factor is given.
\end{itemize}
- Note that \refKey{/mermap/flex zoom} has to be used \emph{before}
+ Note that \refKey{mermap/flex zoom} has to be used \emph{before}
\refCom{mrcsupplymap} or \refCom{mrcmap}, because the zoom setup is
adapted.
\end{docMrcKey}
@@ -133,12 +133,12 @@ in their names, e.g.
\clearpage
\begin{docMrcKey}{flex scale}{=\meta{scale denominator}:\meta{latitude}}{style, no default}
For different latitude scopes, an identical zoom factor produces maps of
- different scale. With \refKey{/mermap/flex scale}, a \refKey{/mermap/flex zoom}
+ different scale. With \refKey{mermap/flex scale}, a \refKey{mermap/flex zoom}
is computed to achieve the given \meta{scale denominator} at a given \meta{latitude}.
Note that this only applies to the center of a map. If the produced
map is not centered at \meta{latitude}, the produced scale may
differ from the intended one.
- Also see \refKey{/mermap/supply/flex reference scale}.
+ Also see \refKey{mermap/supply/flex reference scale}.
\tikzsetnextfilename{drawing_flex_scale}%
\begin{dispExample}
@@ -162,7 +162,7 @@ in their names, e.g.
\begin{docMrcKey}{named flex scale}{=\meta{scale denominator}:\meta{name}}{style, no default}
- Identical to \refKey{/mermap/flex scale}, but used the \emph{named position}
+ Identical to \refKey{mermap/flex scale}, but used the \emph{named position}
\meta{name} to provide a \emph{latitude}, see \Fullref{sec:names_positions}.
\begin{dispListing}
\mrcNPdef{munich}{48.137222}{11.575556}
@@ -179,12 +179,12 @@ in their names, e.g.
\begin{docCommand}{mrcdrawnetwork}{\oarg{options}}
Draws a geodetic network with meridians and parallels.
- All \meta{options} share the common prefix |/mermap/|.
+ All \meta{options} share the common prefix |mermap/|.
The displayed lines are selected automatically according to some tuning
parameters.
- The map is sliced in \emph{about} maximal \refKey{/mermap/network pieces} in each
+ The map is sliced in \emph{about} maximal \refKey{mermap/network pieces} in each
direction. Meridians and parallels share a minimal distance of
- \emph{about} \refKey{/mermap/network distance}. The algorithm is
+ \emph{about} \refKey{mermap/network distance}. The algorithm is
allowed to violate these conditions \emph{somewhat}.
Note that oversized maps are not supported, i.e. maps which are wider
@@ -213,7 +213,7 @@ in their names, e.g.
\begin{docMrcKey}{network pieces}{=\meta{number}}{no default, initially |8|}
The map is sliced in \emph{about} maximal \meta{number} pieces in each
direction. \meta{number} may be exceeded \emph{somewhat}.
- It is underrun to comply with \refKey{/mermap/network distance}.
+ It is underrun to comply with \refKey{mermap/network distance}.
\end{docMrcKey}
@@ -221,7 +221,7 @@ in their names, e.g.
Meridians and parallels share a minimal distance of
\emph{about} \meta{mesh width}.
\meta{mesh width} may be underrun \emph{somewhat}.
- It is exceeded to comply with \refKey{/mermap/network pieces}.
+ It is exceeded to comply with \refKey{mermap/network pieces}.
For parallels on small scale maps, it refers to an averaged mesh width.
\end{docMrcKey}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex
index 7eb5b5f86e..11c3068f31 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex
@@ -14,13 +14,13 @@ Note to do all preparations documented in \Fullref{sec:python}.
%-------------------------------------------------------------------------------
\subsection{Reference Position}
-With \refKey{/mermap/supply/type}|=|\docValue{reference} a map with a
+With \refKey{mermap/supply/type}|=|\docValue{reference} a map with a
\emph{reference position} is constructed. Here, Munich is taken as
reference position and center of the map. Since the position is used
more than once, it is stored with \refCom{mrcNPdef} for further reference.
-With \refKey{/mermap/supply/flex reference scale} the scale
+With \refKey{mermap/supply/flex reference scale} the scale
is set to 1:6\,000\,000. For the background map tiles, a
-\refKey{/mermap/supply/source} is selected for download.
+\refKey{mermap/supply/source} is selected for download.
This setup is done by \refCom{mrcmap} while \refCom{mrcdrawmap} draws
the downloaded map tiles.
@@ -84,10 +84,10 @@ the downloaded map tiles.
%-------------------------------------------------------------------------------
\subsection{Fitting Area}
-With \refKey{/mermap/supply/type}|=|\docValue{areafit} a map is constructed
+With \refKey{mermap/supply/type}|=|\docValue{areafit} a map is constructed
where a given area is fitted in. The following example lists some
-US-American cities and constructs an \refKey{/mermap/supply/area} which
-contains all of them. With \refKey{/mermap/supply/flex area fit}|=15mm| a
+US-American cities and constructs an \refKey{mermap/supply/area} which
+contains all of them. With \refKey{mermap/supply/flex area fit}|=15mm| a
border region is added.
@@ -102,7 +102,7 @@ border region is added.
\mrcNPdef{denver}{39.7372435}{-104.997378}
\mrcmap[type=areafit,
area={honolulu,fairbanks,sandiego,miami,boston,denver},
- source=stamen terrain,
+ source=topplusopen web,
tex width=15cm, tex height=11cm,
flex area fit=15mm,
]{examples_fitting_area}
@@ -122,12 +122,12 @@ border region is added.
%-------------------------------------------------------------------------------
\subsection{Fixed Boundaries}
-With \refKey{/mermap/supply/type}|=|\docValue{boundaries} a map is constructed
+With \refKey{mermap/supply/type}|=|\docValue{boundaries} a map is constructed
with fixed boundaries. In contrast to the other map types, the document
map size cannot be given directly but derives from the map setup. This bears
the risk of too large maps. The following example is a map with exact
boundaries \mrcformlat{-45} to \mrcformlat{-10}
-and \mrcformlon{110} to \mrcformlon{155}. A decent \refKey{/mermap/supply/zoom}
+and \mrcformlon{110} to \mrcformlon{155}. A decent \refKey{mermap/supply/zoom}
is 5 (every zoom step doubles the map size in each direction).
\tikzsetnextfilename{examples_boundaries}%
@@ -160,7 +160,7 @@ is 5 (every zoom step doubles the map size in each direction).
\subsection{Map Without Map Tiles}
There is no coercion to use downloaded map tiles, if they are not needed or
-wanted. With \refKey{/mermap/supply/target}|=none| no map tiles are downloaded.
+wanted. With \refKey{mermap/supply/target}|=none| no map tiles are downloaded.
The following example draws a rough polygon shape of Germany using
\refEnv{mrcroute*}.
@@ -299,7 +299,7 @@ The following example draws a rough polygon shape of Germany using
%-------------------------------------------------------------------------------
\subsection{Alignment of the Reference Position}
-With \refKey{/mermap/supply/align} the reference position can be aligned
+With \refKey{mermap/supply/align} the reference position can be aligned
at different map positions.
\tikzsetnextfilename{examples_alignment}%
@@ -332,13 +332,13 @@ at different map positions.
\subsection{Flexible Zoom}
Map tiles are only provided at fixed zoom levels with natural numbers,
-but the package allows a \refKey{/mermap/flex zoom} with rational numbers.
+but the package allows a \refKey{mermap/flex zoom} with rational numbers.
The flexible zoom is realized by combining a suitable fixed zoom with
an adapted document tile scaling, see \Fullref{sec:flexible_tile_size}.
The following example shows a more or less smooth zoom increase.
The same technique is used by all options starting with |flex|, e.g.
-\refKey{/mermap/supply/flex reference scale}
-or \refKey{/mermap/supply/flex area fit}
+\refKey{mermap/supply/flex reference scale}
+or \refKey{mermap/supply/flex area fit}
as seen in the examples before.
\tikzexternaldisable
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex
index 294f5e278f..29514fb0f0 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex
@@ -18,9 +18,7 @@ and the algorithms of this packages, you are invited to read
\enquote{\fullcite{Sturm:2020}}.
With very few exceptions, the package is programmed with the
-|expl3| \cite{package:expl3} programming interface for \LaTeX3
-and loads the packages
-|xparse| \cite{package:xparse} and |siunitx| \cite{package:siunitx}.
+|expl3| programming interface for \LaTeX3 \cite{l3kernel:interfaces}.
\medskip
@@ -103,7 +101,7 @@ This should give a version number starting with 3. Otherwise, try
\begin{dispListing}
python3 --version
\end{dispListing}
-If this is successful, \refKey{/mermap/python} has to be adapted to |python3|
+If this is successful, \refKey{mermap/python} has to be adapted to |python3|
\subsubsection{Python Packages}
The Python packages |Pillow| (\url{https://pypi.org/project/Pillow/})
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex
index 0c44427ca5..70a08de273 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex
@@ -42,8 +42,8 @@
remember that the eastern hemisphere lies \emph{west} and
the western hemisphere lies \emph{east} for your map.
Consider the following example displaying Vladivostok and Anchorage.
- Here, \refKey{/mermap/supply/west} is set to \ang{130}\,E (|130|)
- and \refKey{/mermap/supply/east} is set to \ang{149}\,W (|211| instead of |-149|).
+ Here, \refKey{mermap/supply/west} is set to \ang{130}\,E (|130|)
+ and \refKey{mermap/supply/east} is set to \ang{149}\,W (|211| instead of |-149|).
There is some automatic correction for positions to fit inside the
defined map (see Anchorage in the example below), but
@@ -123,7 +123,7 @@
\tikzsetnextfilename{limit_zoom_scale_1}
\begin{dispExample}
- \mermapsetsupply{source=stamen terrain, type=reference, zoom=12,
+ \mermapsetsupply{source=topplusopen web, type=reference, zoom=12,
tex width=7cm, tex height=5cm}
\begin{tikzpicture}
\mrcmap[latitude=59.91,longitude=10.75]{oslo1} \mrcdrawmap
@@ -133,12 +133,12 @@
\begin{center}\fontsize{7pt}{7pt}\sffamily\mrcmapattribution\end{center}
\end{dispExample}
- Same example again, but with \refKey{/mermap/flex scale} which gives
+ Same example again, but with \refKey{mermap/flex scale} which gives
1:150000 for both cities and comparable maps.
\tikzsetnextfilename{limit_zoom_scale_2}
\begin{dispExample}
- \mermapsetsupply{source=stamen terrain, type=reference}
+ \mermapsetsupply{source=topplusopen web, type=reference}
\begin{tikzpicture}
\mrcmap[latitude=59.91,longitude=10.75, flex reference scale=150000,
tex width=7cm, tex height=5cm]{oslo2} \mrcdrawmap
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex
index 9786414753..aa306f5962 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex
@@ -73,7 +73,7 @@ accompanying Python script. The technical background is documented in
\cite[Section~5]{Sturm:2020}.
\begin{enumerate}
-\item \refKey{/mermap/supply/type}|=|\docValue{reference}:
+\item \refKey{mermap/supply/type}|=|\docValue{reference}:
\tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm]
{
\tikzexternaldisable
@@ -85,12 +85,12 @@ accompanying Python script. The technical background is documented in
}{
The default method determines the map dimensions from a reference
position and given document map dimensions.
- Also, a zoom level \refKey{/mermap/supply/zoom}
+ Also, a zoom level \refKey{mermap/supply/zoom}
is required which relates to the Web Mercator map tile covering of the Earth.
A higher zoom level gives a growing number of smaller map tiles.
Alternative to the zoom level, a \meta{scale denominator} can be provided
- by \refKey{/mermap/supply/flex area scale}, \refKey{/mermap/flex scale}
- or \refKey{/mermap/supply/flex reference scale} which determines
+ by \refKey{mermap/supply/flex area scale}, \refKey{mermap/flex scale}
+ or \refKey{mermap/supply/flex reference scale} which determines
the zoom level implicitly.
As default, the reference position is the center of the map, but can be
aligned at the map borders. This method is quite safe to use and could
@@ -100,7 +100,7 @@ accompanying Python script. The technical background is documented in
be more tricky.
}
-\item \refKey{/mermap/supply/type}|=|\docValue{areafit}:
+\item \refKey{mermap/supply/type}|=|\docValue{areafit}:
\tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm]
{
\tikzexternaldisable
@@ -114,7 +114,7 @@ accompanying Python script. The technical background is documented in
The map dimensions are determined by an area with
latitude and longitude boundaries which is fitted into given
document map dimensions. The zoom level is computed accordingly
- for a fixed document tile size or by \refKey{/mermap/supply/flex area fit}.
+ for a fixed document tile size or by \refKey{mermap/supply/flex area fit}.
In any case, the map contains the target area plus some protrusion.
This method is also quite safe to use and may be
the preferred one for many applications like showing a map which contains
@@ -123,7 +123,7 @@ accompanying Python script. The technical background is documented in
the third method can be regarded.
}
-\item \refKey{/mermap/supply/type}|=|\docValue{boundaries}:
+\item \refKey{mermap/supply/type}|=|\docValue{boundaries}:
\tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm]
{
\tikzexternaldisable
@@ -134,11 +134,11 @@ accompanying Python script. The technical background is documented in
}{
The most obvious method determines the map dimensions from
latitude and longitude boundaries. For this, a corresponding zoom level
- \refKey{/mermap/supply/zoom}
+ \refKey{mermap/supply/zoom}
is required which relates to the Web Mercator map tile covering of the Earth.
Alternative to the zoom level, a \meta{scale denominator} can be provided
- by \refKey{/mermap/supply/flex area scale}
- or \refKey{/mermap/supply/flex reference scale} which determines
+ by \refKey{mermap/supply/flex area scale}
+ or \refKey{mermap/supply/flex reference scale} which determines
the zoom level implicitly.
Note that a too high zoom level imposes the risk of downloading an unwanted
high quantity of map tiles resulting in a much too large document map.
@@ -156,9 +156,9 @@ accompanying Python script. The technical background is documented in
\begin{docCommand}{mrcsupplymap}{\oarg{options}\marg{definition}}
The \meta{options} provide parameters for the Python~3 script to supply all
materials for a map.
- All options share the common prefix |/mermap/supply/|.\par
+ All options share the common prefix |mermap/supply/|.\par
The map is identified by\\
- \meta{id}=\refKey{/mermap/definition prefix}+\meta{definition}\\
+ \meta{id}=\refKey{mermap/definition prefix}+\meta{definition}\\
for later drawing.
This identifier \meta{id} has to be unique for the document.
It corresponds to generated files \meta{id}|.def|, \meta{id}|.md5|, and
@@ -172,8 +172,8 @@ accompanying Python script. The technical background is documented in
\begin{docCommand}{mermapsetsupply}{\marg{options}}
Sets \meta{options} for all following maps inside the current \TeX\ group.
- All options share the common prefix |/mermap/supply/|, e.g. for setting
- \refKey{/mermap/supply/type} use
+ All options share the common prefix |mermap/supply/|, e.g. for setting
+ \refKey{mermap/supply/type} use
\begin{dispListing}
\mermapsetsupply{type=reference}
\end{dispListing}
@@ -184,7 +184,7 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}{definition prefix}{=\meta{definition prefix}}{no default, initially |maps/|}
Prefix for map identifiers and generated map files, see \refCom{mrcsupplymap}
and \refCom{mrcapplymap}.
- Note that \refKey{/mermap/definition prefix} is not to be used inside
+ Note that \refKey{mermap/definition prefix} is not to be used inside
the option list for \refCom{mrcsupplymap}.
\end{docMrcKey}
@@ -193,30 +193,30 @@ accompanying Python script. The technical background is documented in
\begin{itemize}
\item\docValue{reference}: \flqq map with reference position\frqq\\
The map is constructed from a given reference position
- \refKey{/mermap/supply/latitude},\\
- \refKey{/mermap/supply/longitude},\\
- a zoom level \refKey{/mermap/supply/zoom},\\
+ \refKey{mermap/supply/latitude},\\
+ \refKey{mermap/supply/longitude},\\
+ a zoom level \refKey{mermap/supply/zoom},\\
map dimensions\\
- \refKey{/mermap/supply/width},\\
- \refKey{/mermap/supply/height},\\
- and alignment \refKey{/mermap/supply/align}.
+ \refKey{mermap/supply/width},\\
+ \refKey{mermap/supply/height},\\
+ and alignment \refKey{mermap/supply/align}.
\item\docValue{areafit}: \flqq map fitting an area\frqq\\
The map is constructed from a given area boundaries\\
- \refKey{/mermap/supply/west},\\
- \refKey{/mermap/supply/east},\\
- \refKey{/mermap/supply/north},\\
- \refKey{/mermap/supply/south},\\
+ \refKey{mermap/supply/west},\\
+ \refKey{mermap/supply/east},\\
+ \refKey{mermap/supply/north},\\
+ \refKey{mermap/supply/south},\\
map dimensions\\
- \refKey{/mermap/supply/width},\\
- \refKey{/mermap/supply/height},\\
- and alignment \refKey{/mermap/supply/align}.
+ \refKey{mermap/supply/width},\\
+ \refKey{mermap/supply/height},\\
+ and alignment \refKey{mermap/supply/align}.
\item\docValue{boundaries}: \flqq map with boundaries\frqq\\
The map is constructed from given boundaries\\
- \refKey{/mermap/supply/west},\\
- \refKey{/mermap/supply/east},\\
- \refKey{/mermap/supply/north},\\
- \refKey{/mermap/supply/south},\\
- and zoom level \refKey{/mermap/supply/zoom}.
+ \refKey{mermap/supply/west},\\
+ \refKey{mermap/supply/east},\\
+ \refKey{mermap/supply/north},\\
+ \refKey{mermap/supply/south},\\
+ and zoom level \refKey{mermap/supply/zoom}.
\end{itemize}
\end{docMrcKey}
@@ -229,25 +229,25 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{north}{=\meta{setup north latitude}}{no default, initially |50|}
Northern latitude degree, possibly negative for the southern hemisphere,
- lower than $90$ but always larger than \refKey{/mermap/supply/south}.
+ lower than $90$ but always larger than \refKey{mermap/supply/south}.
Used for map types \docValue{boundaries} and \docValue{areafit}.
\end{docMrcKey}
\begin{docMrcKey}[supply]{south}{=\meta{setup south latitude}}{no default, initially |48|}
Southern latitude degree, possibly negative for the southern hemisphere,
- larger than $-90$ but always lower than \refKey{/mermap/supply/north}.
+ larger than $-90$ but always lower than \refKey{mermap/supply/north}.
Used for map types \docValue{boundaries} and \docValue{areafit}.
\end{docMrcKey}
\begin{docMrcKey}[supply]{west}{=\meta{setup west longitude}}{no default, initially |11|}
Western longitude degree, possibly negative for the western hemisphere,
- possibly shifted periodically, but always lower than \refKey{/mermap/supply/east}.
+ possibly shifted periodically, but always lower than \refKey{mermap/supply/east}.
Used for map types \docValue{boundaries} and \docValue{areafit}.
\end{docMrcKey}
\begin{docMrcKey}[supply]{east}{=\meta{setup east longitude}}{no default, initially |13|}
Eastern longitude degree, possibly negative for the western hemisphere,
- possibly shifted periodically, but always larger than \refKey{/mermap/supply/west}.
+ possibly shifted periodically, but always larger than \refKey{mermap/supply/west}.
Used for map types \docValue{boundaries} and \docValue{areafit}.
\end{docMrcKey}
@@ -262,19 +262,19 @@ accompanying Python script. The technical background is documented in
{ doc name = add area },
}
Sets
- \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south},
- \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east}
+ \refKey{mermap/supply/north}, \refKey{mermap/supply/south},
+ \refKey{mermap/supply/west}, \refKey{mermap/supply/east}
according to the given \meta{comma separated list of named positions}, i.e.
the described area contains all these positions.\\
- \refKey{/mermap/supply/area} resets the current area which requires
+ \refKey{mermap/supply/area} resets the current area which requires
at least two points inside the list.\\
- \refKey{/mermap/supply/add area} does not reset the current area,
+ \refKey{mermap/supply/add area} does not reset the current area,
i.e. the positions are added to the
current area which possibly grows to fit all positions.\\
Also note to take special care, if the international dateline is on your
resulting map, see \Fullref{sec:dateline}.
Used for map types \docValue{boundaries} and \docValue{areafit}
- or in combination with \refKey{/mermap/supply/area to reference} also
+ or in combination with \refKey{mermap/supply/area to reference} also
for for map type \docValue{reference}.
\end{docMrcKeys}
@@ -290,19 +290,19 @@ accompanying Python script. The technical background is documented in
{ doc name = add area from marker input },
}
Sets
- \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south},
- \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east}
+ \refKey{mermap/supply/north}, \refKey{mermap/supply/south},
+ \refKey{mermap/supply/west}, \refKey{mermap/supply/east}
according to the given \refCom{mrcmarker} positions contained in a
file with the given \meta{file name}.\\
- \refKey{/mermap/supply/area from marker input} resets the current area which requires
+ \refKey{mermap/supply/area from marker input} resets the current area which requires
at least two marker positions inside the file.\\
- \refKey{/mermap/supply/add area from marker input} does not reset the current area,
+ \refKey{mermap/supply/add area from marker input} does not reset the current area,
i.e. the positions are added to the
current area which possibly grows to fit all positions.\\
Also note to take special care, if the international dateline is on your
resulting map, see \Fullref{sec:dateline}.
Used for map types \docValue{boundaries} and \docValue{areafit}
- or in combination with \refKey{/mermap/supply/area to reference} also
+ or in combination with \refKey{mermap/supply/area to reference} also
for for map type \docValue{reference}.
\end{docMrcKeys}
@@ -310,10 +310,10 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{area to reference}{}{no value, initially unset}
The map settings
- \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south},
- \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east}
+ \refKey{mermap/supply/north}, \refKey{mermap/supply/south},
+ \refKey{mermap/supply/west}, \refKey{mermap/supply/east}
are taken to compute the map center. This center position is saved
- to \refKey{/mermap/supply/latitude} and \refKey{/mermap/supply/longitude}.
+ to \refKey{mermap/supply/latitude} and \refKey{mermap/supply/longitude}.
Used for map type \docValue{reference}.
\end{docMrcKey}
@@ -352,8 +352,8 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{tex width}{=\meta{width}}{style, no default}
Width of the map as \TeX\ dimension.
- This is a style to compute \refKey{/mermap/supply/width} according to
- the current \refKey{/mermap/tile size}.
+ This is a style to compute \refKey{mermap/supply/width} according to
+ the current \refKey{mermap/tile size}.
\end{docMrcKey}
\begin{docMrcKey}[supply]{height}{=\meta{setup height in tiles}}{no default, initially |4|}
@@ -363,8 +363,8 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{tex height}{=\meta{width}}{style, no default}
Height of the map as \TeX\ dimension.
- This is a style to compute \refKey{/mermap/supply/height} according to
- the current \refKey{/mermap/tile size}.
+ This is a style to compute \refKey{mermap/supply/height} according to
+ the current \refKey{mermap/tile size}.
\end{docMrcKey}
\begin{docMrcKey}[supply]{align}{=\meta{setup alignment}}{no default, initially |center|}
@@ -379,12 +379,12 @@ accompanying Python script. The technical background is documented in
\begin{itemize}
\item\docValue{none}: No tiles are downloaded and no merged map is generated, just map computation.
This is the fastest method and needs no tile supplier.
- \item\docValue{tiles}: Download map tiles from a tile map service (TMS) \refKey{/mermap/supply/url}.
+ \item\docValue{tiles}: Download map tiles from a tile map service (TMS) \refKey{mermap/supply/url}.
Compilation of a document with map tile takes longer than compilation
with a merged map and transparency should not be used with tiles,
but the resulting document is smaller than a document with merged maps.
\item\docValue{mergedmap}: Download map tiles from a tile map service (TMS)
- \refKey{/mermap/supply/url} and merge them into a single map picture.
+ \refKey{mermap/supply/url} and merge them into a single map picture.
This speeds compilation and allows transparency effects, but
the resulting document is possibly larger than a document with map tiles,
because map tiles often are optimized 8-bit image files while the merged
@@ -394,7 +394,7 @@ accompanying Python script. The technical background is documented in
may differ (shift/size) from the more accurate tile representation by
one pixel.
\item\docValue{wmsmap}: Download a single map from a web map service (WMS)
- \refKey{/mermap/supply/url}. Internally, the package treats a WMS like
+ \refKey{mermap/supply/url}. Internally, the package treats a WMS like
a tile map service including all tile calculations. Actually, a single
file is downloaded.
\end{itemize}
@@ -404,7 +404,7 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[][doc new=2020-08-06]{fail on missing resource}{\colOpt{=true\textbar false}}{default |true|, initially |true|}
If set to |true|, compilation stops with an error, if
- \refKey{/mermap/supply/target} and \refKey{/mermap/mapdef/resource} are different.
+ \refKey{mermap/supply/target} and \refKey{mermap/mapdef/resource} are different.
Typically, this means that something went wrong while trying to download
map tiles. Set this option temporarily to |false|,
if the map tile service or the internet
@@ -427,7 +427,7 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{url with api key}{=\marg{prefix}\marg{name}\marg{postfix}}{no default}
- This is an alternative version of \refKey{/mermap/supply/url}.
+ This is an alternative version of \refKey{mermap/supply/url}.
The URL is constructed from some fixed \meta{prefix} and \meta{postfix} with
an API key in between. The API key is retrieved by \meta{name} from a
repository filled by \refCom{mrcsetapikey}.
@@ -442,7 +442,7 @@ accompanying Python script. The technical background is documented in
Stores an API key \meta{value} for access with the given \meta{name}.
Typically, \meta{value} is a received ID from a map tile service provider
after personal registration. \meta{name} is a placeholder which is used
- inside \refKey{/mermap/supply/url with api key} to mark the insertion
+ inside \refKey{mermap/supply/url with api key} to mark the insertion
point for the API key.
\begin{dispListing}
\mrcsetapikey{myservice}{....K942XY....}
@@ -454,7 +454,7 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{attribution}{=\meta{attribution text}}{no default, initially empty}
Attribution text for the map source. Typically, it acknowledges the copyright
of the map data provider. It may contain hyperlinks.
- It is used to set up \refKey{/mermap/mapdef/attribution} afterwards
+ It is used to set up \refKey{mermap/mapdef/attribution} afterwards
and it is accessible as \docAuxCommand{mrcmapattribution} (use read-only).\par
For technical reasons, do not use \verb+"+. \docAuxCommand{mrcumlaut}
may be used for masking umlauts, e.g. use \verb+\mrcumlaut{u}+ instead of
@@ -463,9 +463,9 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{attribution print}{=\meta{attribution text}}{no default, initially empty}
Attribution text for the map source.
- In contrast to \refKey{/mermap/supply/attribution} it is intended for media
+ In contrast to \refKey{mermap/supply/attribution} it is intended for media
that does not support hyperlinks like printed posters, books, etc.
- It is used to set up \refKey{/mermap/mapdef/attribution print} afterwards
+ It is used to set up \refKey{mermap/mapdef/attribution print} afterwards
and it is accessible as \docAuxCommand{mrcmapattributionprint} (use read-only).
\end{docMrcKey}
@@ -477,10 +477,10 @@ accompanying Python script. The technical background is documented in
\clearpage
\begin{docMrcKey}[supply]{flex reference scale}{=\meta{scale denominator}}{no default}
- With the given \meta{scale denominator}, an appropriate \refKey{/mermap/supply/zoom}
- and \refKey{/mermap/tile size} is computed. Note that
+ With the given \meta{scale denominator}, an appropriate \refKey{mermap/supply/zoom}
+ and \refKey{mermap/tile size} is computed. Note that
the \meta{scale denominator}
- always applies to the current \refKey{/mermap/supply/latitude}
+ always applies to the current \refKey{mermap/supply/latitude}
and is used for map type \docValue{boundaries} and \docValue{reference}.
For example, if the reference point is on the north side of the map,
also the \meta{scale denominator}
@@ -489,16 +489,16 @@ accompanying Python script. The technical background is documented in
Note to take special care to the order of the options.
\begin{itemize}
\item The reference point has to be set \emph{before}
- \refKey{/mermap/supply/flex reference scale}, e.g. by
- \refKey{/mermap/supply/latitude}, \refKey{/mermap/supply/position},
- \refKey{/mermap/supply/named position}.
- \item \refKey{/mermap/supply/tex height}, \refKey{/mermap/supply/tex width}
+ \refKey{mermap/supply/flex reference scale}, e.g. by
+ \refKey{mermap/supply/latitude}, \refKey{mermap/supply/position},
+ \refKey{mermap/supply/named position}.
+ \item \refKey{mermap/supply/tex height}, \refKey{mermap/supply/tex width}
(only for map type \docValue{reference})
- have to be set \emph{after} \refKey{/mermap/supply/flex reference scale},
- because the \refKey{/mermap/tile size} is adapted.
+ have to be set \emph{after} \refKey{mermap/supply/flex reference scale},
+ because the \refKey{mermap/tile size} is adapted.
\end{itemize}
- Also see \refKey{/mermap/flex tile size}, \refKey{/mermap/flex zoom},
- and \refKey{/mermap/flex scale}.
+ Also see \refKey{mermap/flex tile size}, \refKey{mermap/flex zoom},
+ and \refKey{mermap/flex scale}.
\tikzsetnextfilename{maptiles_flex_reference_scale}%
\begin{dispExample}
\begin{tikzpicture}
@@ -519,17 +519,17 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{flex area scale}{=\meta{scale denominator}}{no default}
- This is a shortcut for setting \refKey{/mermap/supply/area to reference}
- and \refKey{/mermap/supply/flex reference scale}=\meta{scale denominator}.
+ This is a shortcut for setting \refKey{mermap/supply/area to reference}
+ and \refKey{mermap/supply/flex reference scale}=\meta{scale denominator}.
Used for map type \docValue{boundaries} and \docValue{reference}.
Note to take special care to the order of the options.
\begin{itemize}
\item The reference point has to be set \emph{before}
- \refKey{/mermap/supply/flex area scale}.
- \item \refKey{/mermap/supply/tex height}, \refKey{/mermap/supply/tex width}
+ \refKey{mermap/supply/flex area scale}.
+ \item \refKey{mermap/supply/tex height}, \refKey{mermap/supply/tex width}
(only for map type \docValue{reference})
- have to be set \emph{after} \refKey{/mermap/supply/flex reference scale}.
+ have to be set \emph{after} \refKey{mermap/supply/flex reference scale}.
\end{itemize}
\end{docMrcKey}
@@ -538,13 +538,13 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{flex area fit}{\colOpt{=\meta{size}}}{default |0pt|}
This key can be used for map type \docValue{areafit} as \emph{final}
option \emph{after} all other options.
- It applies a fine tuning to \refKey{/mermap/tile size},
- \refKey{/mermap/supply/width}, and \refKey{/mermap/supply/height} such
+ It applies a fine tuning to \refKey{mermap/tile size},
+ \refKey{mermap/supply/width}, and \refKey{mermap/supply/height} such
that the defined area fits exactly into the map region.
If a \meta{size} is specified, width and height are reduced for the
calculation by this \meta{size}, e.g. \meta{size}|=1cm| ensures a
border of |5mm| on each side.
- Also see \refKey{/mermap/flex tile size} and \refKey{/mermap/flex zoom}.
+ Also see \refKey{mermap/flex tile size} and \refKey{mermap/flex zoom}.
\tikzsetnextfilename{maptiles_flex_area_fit}%
\begin{dispExample}
@@ -580,24 +580,24 @@ accompanying Python script. The technical background is documented in
\begin{docMrcKey}[supply]{dpi}{=\meta{dpi value}}{style, no default}
- This style sets \refKey{/mermap/supply/pixel} such that the given \meta{dpi value}
+ This style sets \refKey{mermap/supply/pixel} such that the given \meta{dpi value}
is resulting (approximately).
\begin{itemize}
\item Note that this only applies for WMS Servers and not for
TMS (Tile Map Service) Servers,
- because there \refKey{/mermap/supply/pixel} is a fixed number depending on
+ because there \refKey{mermap/supply/pixel} is a fixed number depending on
Server settings and cannot be chosen arbitrarily.
\item A high \meta{dpi value} results in large downloaded map files.
If the server does not provide a high resolution map, you will get
unnecessary large files with blurred content.
\item The \meta{dpi value} for TMS data can be changed by adapting
- \refKey{/mermap/tile size} or \refKey{/mermap/flex tile size}.
+ \refKey{mermap/tile size} or \refKey{mermap/flex tile size}.
\end{itemize}
\tikzsetnextfilename{maptiles_dpi_value}
\begin{dispExample}
\begin{tikzpicture}
- \mrcmap[type=reference,latitude=48.14,longitude=11.57,
+ \mrcmap[type=reference,latitude=48.14,longitude=11.57,
flex reference scale=250000,
source=topplusopen p250, target=wmsmap, dpi=300,
tex width=\linewidth,tex height=5cm]{dpi_value}
@@ -654,7 +654,7 @@ map data is free for everyone to use.
\textbf{But, map tile servers based on OpenStreetMap are not necessarily free}.
A list of online raster tile servers based on OpenStreetMap data is found here:\\
-\url{https://wiki.openstreetmap.org/wiki/Tile_servers}
+\url{https://wiki.openstreetmap.org/wiki/Raster_tile_providers}
\begin{itemize}
\item\bfseries I do not run a map tile server.
@@ -681,8 +681,8 @@ want to add more to avoid any legal uncertainties.
\medskip
\begin{docMrcKey}[supply]{source}{=\meta{source}}{style, no default}
- This style sets \refKey{/mermap/supply/url}, \refKey{/mermap/supply/attribution},\\
- \refKey{/mermap/supply/attribution print} and \refKey{/mermap/supply/basename}.\\
+ This style sets \refKey{mermap/supply/url}, \refKey{mermap/supply/attribution},\\
+ \refKey{mermap/supply/attribution print} and \refKey{mermap/supply/basename}.\\
Feasible values for \meta{source} are:
%\mermapset{tile size=3.2512cm}
\newcommand{\mapexample}[3][]{%
@@ -690,10 +690,10 @@ want to add more to avoid any legal uncertainties.
\mermapset{supply/source=#2}%
\begin{itemize}
\item Required attribution (\docAuxCommand{mrcmapattribution}):
- \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left]
+ \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left,before skip=2pt]
\mrcmapattribution\end{tcolorbox}
\item Required attribution for media without hyperlinks (\docAuxCommand{mrcmapattributionprint}):
- \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left]
+ \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left,before skip=2pt]
\mrcmapattributionprint\end{tcolorbox}
%\par\smallskip\
\end{itemize}
@@ -713,71 +713,13 @@ want to add more to avoid any legal uncertainties.
Dummy tile server at loopback |127.0.0.1| for test purposes.
\item\docValue{opentopomap}:\\
- Tile server (TMS) of \href{http://opentopomap.org/}{OpenTopoMap}.
+ Tile server (TMS) of \href{https://opentopomap.org/}{OpenTopoMap}.
\begin{itemize}
\item Usage (German language): \url{https://opentopomap.org/about#verwendung}
\end{itemize}
\mapexample{opentopomap}{opentopomap}
\clearpage
- \item\docValue{stamen terrain}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#terrain}
- \mapexample{stamen terrain}{stamen_terrain}
-
- \item\docValue{stamen terrain-background}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#terrain-background}
- \mapexample{stamen terrain-background}{stamen_terrain-background}
-
- \item\docValue{stamen terrain-labels}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#terrain-labels}
- \mapexample{stamen terrain-labels}{stamen_terrain-labels}
-
-\clearpage
- \item\docValue{stamen terrain-lines}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#terrain-lines}
- \mapexample{stamen terrain-lines}{stamen_terrain-lines}
-
- \item\docValue{stamen toner}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner}
- \mapexample{stamen toner}{stamen_toner}
-
- \item\docValue{stamen toner-lite}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner-lite}
- \mapexample{stamen toner-lite}{stamen_toner-lite}
-
-\clearpage
- \item\docValue{stamen toner-hybrid}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner-hybrid}
- \mapexample{stamen toner-hybrid}{stamen_toner-hybrid}
-
- \item\docValue{stamen toner-background}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner-background}
- \mapexample{stamen toner-background}{stamen_toner-background}
-
- \item\docValue{stamen toner-labels}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner-labels}
- \mapexample{stamen toner-labels}{stamen_toner-labels}
-
-\clearpage
- \item\docValue{stamen toner-lines}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#toner-lines}
- \mapexample{stamen toner-lines}{stamen_toner-lines}
-
- \item\docValue{stamen watercolor}:\\
- Tile server of \href{http://stamen.com}{Stamen Design}.\\
- Usage: \url{http://maps.stamen.com/#watercolor}
- \mapexample{stamen watercolor}{stamen_watercolor}
-
\item\docValue{thunderforest opencyclemap}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -789,7 +731,6 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest opencyclemap}{thunderforest_opencyclemap}
-\clearpage
\item\docValue{thunderforest transport}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -812,6 +753,7 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest landscape}{thunderforest_landscape}
+\clearpage
\item\docValue{thunderforest outdoors}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -823,7 +765,17 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest outdoors}{thunderforest_outdoors}
-\clearpage
+ \item\docValue{thunderforest atlas}:\tcbdocmarginnote{\tcbdocnew{2024-07-29}}\\
+ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
+ A registered \meta{api-key} is needed (free plan available)
+ which is applied by\\
+ \refCom{mrcsetapikey}\brackets{\docValue{thunderforest}}\marg{api-key}.
+ \begin{itemize}
+ \item Usage: \url{https://www.thunderforest.com/terms}
+ \item API documentation: \url{https://www.thunderforest.com/maps/atlas}
+ \end{itemize}
+ \mapexample{thunderforest atlas}{thunderforest_atlas}
+
\item\docValue{thunderforest transport-dark}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -835,6 +787,7 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest transport-dark}{thunderforest_transport-dark}
+\clearpage
\item\docValue{thunderforest spinal-map}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -857,7 +810,6 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest pioneer}{thunderforest_pioneer}
-\clearpage
\item\docValue{thunderforest mobile-atlas}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -869,6 +821,7 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest mobile-atlas}{thunderforest_mobile-atlas}
+\clearpage
\item\docValue{thunderforest neighbourhood}:\\
Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\
A registered \meta{api-key} is needed (free plan available)
@@ -880,31 +833,49 @@ want to add more to avoid any legal uncertainties.
\end{itemize}
\mapexample{thunderforest neighbourhood}{thunderforest_neighbourhood}
-\clearpage
\item\docValue{topplusopen web}:\\
- Tile server (TMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
\begin{itemize}
\item Covers world / Europe / Germany depending on zoom level
- \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html}
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
\end{itemize}
\mapexample{topplusopen web}{topplusopen_web}
\item\docValue{topplusopen web grau}:\\
- Tile server (TMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
\begin{itemize}
\item Covers world / Europe / Germany depending on zoom level
- \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html}
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
\end{itemize}
\mapexample{topplusopen web grau}{topplusopen_web_grau}
+\clearpage
+ \item\docValue{topplusopen web light}:\tcbdocmarginnote{\tcbdocnew{2024-07-29}}\\
+ Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ \begin{itemize}
+ \item Covers world / Europe / Germany depending on zoom level
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
+ \end{itemize}
+ \mapexample{topplusopen web light}{topplusopen_web_light}
+
+ \item\docValue{topplusopen web light grau}\tcbdocmarginnote{\tcbdocnew{2024-07-29}}:\\
+ Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ \begin{itemize}
+ \item Covers world / Europe / Germany depending on zoom level
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
+ \end{itemize}
+ \mapexample{topplusopen web light grau}{topplusopen_web_light_grau}
+
\end{itemize}
-\clearpage
+
+\vfill
\begin{tcolorbox}[spartan,colback=white]
The following sources are Web map server (WMS). Therefore,
-\refKey{/mermap/supply/target} can only be set to \docValue{wmsmap}
+\refKey{mermap/supply/target} can only be set to \docValue{wmsmap}
or \docValue{none}.
\end{tcolorbox}
+\clearpage
\begingroup
\ExplSyntaxOn
@@ -928,19 +899,19 @@ or \docValue{none}.
{
\cleanstep
\item\docValue{topplusopen \name}:\\
- Web map server (WMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ Web map server (WMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
\begin{itemize}
\item 1:\scdenom, covers Europe / Germany depending on zoom level
- \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html}
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
\end{itemize}
\mapexample[target=wmsmap]{topplusopen \name}{topplusopen_\name}
\cleanstep
\item\docValue{topplusopen \name\ grau}:\\
- Web map server (WMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
+ Web map server (WMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}.
\begin{itemize}
\item 1:\scdenom, covers Europe / Germany depending on zoom level
- \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html}
+ \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html}
\end{itemize}
\def\grau{ grau}%
\mapexample[target=wmsmap]{topplusopen \name\grau}{topplusopen_\name_grau}
@@ -954,16 +925,16 @@ or \docValue{none}.
\begin{docCommand}{mrcnewsupplysource}{\marg{source}\marg{options}}
- Adds a new \meta{source} value to \refKey{/mermap/supply/source}.
+ Adds a new \meta{source} value to \refKey{mermap/supply/source}.
The \meta{options} should set the keys
- \refKey{/mermap/supply/url}, \refKey{/mermap/supply/attribution},\\
- \refKey{/mermap/supply/attribution print} and \refKey{/mermap/supply/basename}.
+ \refKey{mermap/supply/url}, \refKey{mermap/supply/attribution},\\
+ \refKey{mermap/supply/attribution print} and \refKey{mermap/supply/basename}.
It is recommend to use |x ...| for \meta{source} to avoid conflicts
- with future official additions to \refKey{/mermap/supply/source}.
+ with future official additions to \refKey{mermap/supply/source}.
\begin{dispListing}
\mrcnewsupplysource{x example}
{
- url = http://127.0.0.1/dummy/{z}/{x}/{y}.png,
+ url = https://127.0.0.1/dummy/{z}/{x}/{y}.png,
attribution = {Dummy tile server},
attribution print = {Dummy tile server},
basename = tiles/dummy,
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex
index dcd0e072b8..fb206c339e 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex
@@ -14,8 +14,8 @@ may be helpful which provides some predefined marker types.
\begin{docCommand}{mrcmarker}{\marg{options}}
Places a marker according to the given \meta{options} on the map.
- All \meta{options} share the common prefix |/mermap/marker/|.
- Different \refKey{/mermap/marker/type} settings are available which are
+ All \meta{options} share the common prefix |mermap/marker/|.
+ Different \refKey{mermap/marker/type} settings are available which are
more or less customizable.
\tikzsetnextfilename{marker_mrcmarker}%
@@ -48,8 +48,8 @@ may be helpful which provides some predefined marker types.
\begin{docCommand}{mermapsetmarker}{\marg{options}}
Sets \meta{options} for all following markers inside the current \TeX\ group.
- All options share the common prefix |/mermap/marker/|, e.g. for setting
- \refKey{/mermap/marker/type} use
+ All options share the common prefix |mermap/marker/|, e.g. for setting
+ \refKey{mermap/marker/type} use
\begin{dispListing}
\mermapsetmarker{type=pin}
\end{dispListing}
@@ -74,7 +74,7 @@ may be helpful which provides some predefined marker types.
\end{docMrcKey}
\begin{docMrcKey}[marker]{lat}{=\meta{latitude}}{no default, initially |12|}
- Alias for \refKey{/mermap/marker/latitude}.
+ Alias for \refKey{mermap/marker/latitude}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{longitude}{=\meta{longitude}}{no default, initially |49|}
@@ -83,7 +83,7 @@ may be helpful which provides some predefined marker types.
\end{docMrcKey}
\begin{docMrcKey}[marker]{lon}{=\meta{longitude}}{no default, initially |49|}
- Alias for \refKey{/mermap/marker/longitude}.
+ Alias for \refKey{mermap/marker/longitude}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{position}{=\meta{place latitude}:\meta{place longitude}}{no default, initially |12:49|}
@@ -100,7 +100,7 @@ may be helpful which provides some predefined marker types.
given \meta{area}. Feasible values for \meta{area} are:
\begin{itemize}
\item\docValue{map}: Use inside map.
- \item\docValue{vicinity}: Use inside map plus vicinity, see \refKey{/mermap/vicinity}.
+ \item\docValue{vicinity}: Use inside map plus vicinity, see \refKey{mermap/vicinity}.
\end{itemize}
\end{docMrcKey}
@@ -157,36 +157,36 @@ may be helpful which provides some predefined marker types.
\begin{docMrcKey}[marker]{hide}{\colOpt{=true\textbar false}}{default |true|, initially |false|}
If set to |true|, the marker is not used.
- \refKey{/mermap/marker/hide} is inverse to \refKey{/mermap/marker/show}.
+ \refKey{mermap/marker/hide} is inverse to \refKey{mermap/marker/show}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{show category}{=\meta{category}}{style, no default}
- Sets \refKey{/mermap/marker/show} to |true|, if \refKey{/mermap/marker/category} equals \meta{category}.
+ Sets \refKey{mermap/marker/show} to |true|, if \refKey{mermap/marker/category} equals \meta{category}.
Otherwise, nothing happens.
- \refKey{/mermap/marker/category} has to be set \emph{before}.
+ \refKey{mermap/marker/category} has to be set \emph{before}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{show all but category}{=\meta{category}}{style, no default}
- Sets \refKey{/mermap/marker/show} to |true|, if \refKey{/mermap/marker/category} does not equal \meta{category}.
+ Sets \refKey{mermap/marker/show} to |true|, if \refKey{mermap/marker/category} does not equal \meta{category}.
Otherwise, nothing happens.
- \refKey{/mermap/marker/category} has to be set \emph{before}.
+ \refKey{mermap/marker/category} has to be set \emph{before}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{hide category}{=\meta{category}}{style, no default}
- Sets \refKey{/mermap/marker/show} to |false|, if \refKey{/mermap/marker/category} equals \meta{category}.
+ Sets \refKey{mermap/marker/show} to |false|, if \refKey{mermap/marker/category} equals \meta{category}.
Otherwise, nothing happens.
- \refKey{/mermap/marker/category} has to be set \emph{before}.
+ \refKey{mermap/marker/category} has to be set \emph{before}.
\end{docMrcKey}
\begin{docMrcKey}[marker]{hide all but category}{=\meta{category}}{style, no default}
- Sets \refKey{/mermap/marker/show} to |false|, if \refKey{/mermap/marker/category} does not equal \meta{category}.
+ Sets \refKey{mermap/marker/show} to |false|, if \refKey{mermap/marker/category} does not equal \meta{category}.
Otherwise, nothing happens.
- \refKey{/mermap/marker/category} has to be set \emph{before}.
+ \refKey{mermap/marker/category} has to be set \emph{before}.
\tikzsetnextfilename{marker_hide}%
\begin{dispExample}
\begin{tikzpicture}
@@ -206,10 +206,10 @@ may be helpful which provides some predefined marker types.
\clearpage
The following options require the package |hyperref| to be loaded.
-If |hyperref| is not loaded, \refKey{/mermap/marker/url} and
-\refKey{/mermap/marker/link} are ignored.\\
-Note that if \refKey{/mermap/marker/url} and \refKey{/mermap/marker/link}
-are applied concurrently, then \refKey{/mermap/marker/link} will win.
+If |hyperref| is not loaded, \refKey{mermap/marker/url} and
+\refKey{mermap/marker/link} are ignored.\\
+Note that if \refKey{mermap/marker/url} and \refKey{mermap/marker/link}
+are applied concurrently, then \refKey{mermap/marker/link} will win.
\begin{docMrcKeys}[
@@ -279,9 +279,9 @@ are applied concurrently, then \refKey{/mermap/marker/link} will win.
doc description = {default |true|, initially |false|},
},
}
- If \refKey{/mermap/marker/use urls} is set to |false|, external links
- with \refKey{/mermap/marker/url} are ignored.\\
- \refKey{/mermap/marker/ignore urls} is inverse to \refKey{/mermap/marker/use urls}.
+ If \refKey{mermap/marker/use urls} is set to |false|, external links
+ with \refKey{mermap/marker/url} are ignored.\\
+ \refKey{mermap/marker/ignore urls} is inverse to \refKey{mermap/marker/use urls}.
\end{docMrcKeys}
@@ -299,9 +299,9 @@ are applied concurrently, then \refKey{/mermap/marker/link} will win.
doc description = {default |true|, initially |false|},
},
}
- If \refKey{/mermap/marker/use links} is set to |false|, internal links
- with \refKey{/mermap/marker/link} are ignored.\\
- \refKey{/mermap/marker/ignore links} is inverse to \refKey{/mermap/marker/use links}.
+ If \refKey{mermap/marker/use links} is set to |false|, internal links
+ with \refKey{mermap/marker/link} are ignored.\\
+ \refKey{mermap/marker/ignore links} is inverse to \refKey{mermap/marker/use links}.
\end{docMrcKeys}
@@ -596,7 +596,7 @@ The different marker types can be customized by some additional options:
\subsection{New Marker Types}
\begin{docCommand}{mrcnewmarkertype}{\marg{type name}\marg{\tikzname\ code}}
- Creates a new \refKey{/mermap/marker/type} value \meta{type name} using the
+ Creates a new \refKey{mermap/marker/type} value \meta{type name} using the
given \meta{\tikzname\ code} for drawing a place marker.
To avoid future name clashes, you should start a private \meta{type name}
with letter |x|. For \meta{\tikzname\ code} settings like
@@ -630,9 +630,9 @@ The different marker types can be customized by some additional options:
\subsection{New Marker Styles}
\begin{docCommand}{mrcnewmarkerstyle}{\marg{style name}\marg{options}}
- Creates a new \refKey{/mermap/marker/style} value \meta{style name} using the
+ Creates a new \refKey{mermap/marker/style} value \meta{style name} using the
given \meta{options} for drawing a place marker.
- All \meta{options} share the common prefix |/mermap/marker/|. Here, a \emph{style}
+ All \meta{options} share the common prefix |mermap/marker/|. Here, a \emph{style}
has the same concept as a \tikzname\ style.
\tikzsetnextfilename{marker_markerstyle}%
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex
index cddb277c86..ec69b5e73b 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex
@@ -26,7 +26,7 @@ The mathematical background and further information are found in \cite{Sturm:202
\begin{docTikzKey}{mermap samples}{=\meta{number}}{style, no default}
- \tikzname\ variant to set \refKey{/mermap/samples}.
+ \tikzname\ variant to set \refKey{mermap/samples}.
\end{docTikzKey}
\enlargethispage*{1cm}
@@ -56,7 +56,7 @@ The mathematical background and further information are found in \cite{Sturm:202
\mrcclipmap
\draw (mrcmap.south west) rectangle (mrcmap.north east);
\mrcdraworthodrome[red,very thick,mermap samples=100]
- {48.14}{11.58}{40.71}{-74.01}
+ {48.14}{11.58}{40.71}{-74.01}
\node[red,fill=white] at ([above=1.3cm]mrcmap) {
\mrcprettyorthodistance{48.14}{11.58}{40.71}{-74.01} };
\end{tikzpicture}
@@ -99,6 +99,112 @@ The mathematical background and further information are found in \cite{Sturm:202
\clearpage
%-------------------------------------------------------------------------------
+\subsection{Orthodrome Points}
+
+\begin{docCommands}[
+ doc new = 2024-08-01,
+ ]{
+ {
+ doc name = mrcNPfromOrthoFraction,
+ doc parameter = \marg{name}\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}\marg{fraction},
+ },
+ {
+ doc name = mrcNPfromOrthoFractionNamed,
+ doc parameter = \marg{name}\marg{name1}\marg{name2}\marg{fraction},
+ },
+ }
+ Defines a new named position \meta{name} which is located on a \meta{fraction}
+ from the starting point of the orthodromic curve
+ from a point with
+ latitude \meta{lat1} and longitude \meta{lon1} (or described by a named position \meta{name1})
+ to a point with
+ latitude \meta{lat2} and longitude \meta{lon2} (or described by a named position \meta{name2}).
+ The given starting and final point of the orthodrome need to have a distance of more than
+ \SI{1}{\meter}.
+
+\tikzsetnextfilename{ortho_orthodrome3}%
+\begin{dispExample}
+ \begin{tikzpicture}
+ \mrcNPdef{munich}{48.14}{11.58}
+ \mrcNPdef{newyork}{40.71}{-74.01}
+ \mrcmap[type=areafit, area={munich,newyork},
+ source=topplusopen web,
+ tex width=\linewidth,tex height=6cm,
+ ]{ortho_orthodrome3}
+ \mrcdrawmap
+ \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
+ {\mrcmapattribution};
+ \mrcclipmap
+ \draw (mrcmap.south west) rectangle (mrcmap.north east);
+ \mrcmarker{type=pin,named position=munich,contents={M\"unchen}}
+ \mrcmarker{type=pinflip,shift=5mm,named position=newyork,
+ contents={New York City}}
+ \mrcNPdraworthodrome[red,very thick] {munich}{newyork}
+ \foreach \fraction in { 0.1,0.3,0.5,0.7,1.0,1.1 }
+ {
+ \mrcNPfromOrthoFractionNamed{waypoint}{munich}{newyork}{\fraction}
+ \mrcmarker{type=pin,named position=waypoint,contents={\fraction}}
+ }
+ \end{tikzpicture}
+\end{dispExample}
+\end{docCommands}
+
+\clearpage
+
+\begin{docCommands}[
+ doc new = 2024-08-01,
+ ]{
+ {
+ doc name = mrcNPfromOrthoDistance,
+ doc parameter = \marg{name}\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}\marg{distance},
+ },
+ {
+ doc name = mrcNPfromOrthoDistanceNamed,
+ doc parameter = \marg{name}\marg{name1}\marg{name2}\marg{distance},
+ },
+ }
+ Defines a new named position \meta{name} which is located on a \meta{distance}
+ from the starting point of the orthodromic curve
+ from a point with
+ latitude \meta{lat1} and longitude \meta{lon1} (or described by a named position \meta{name1})
+ to a point with
+ latitude \meta{lat2} and longitude \meta{lon2} (or described by a named position \meta{name2}).
+ The given starting and final point of the orthodrome need to have a distance of more than
+ \SI{1}{\meter}. The unit for the \meta{distance} is kilometer.
+
+\tikzsetnextfilename{ortho_orthodrome4}%
+\begin{dispExample}
+ \begin{tikzpicture}
+ \mrcNPdef{munich}{48.14}{11.58}
+ \mrcNPdef{newyork}{40.71}{-74.01}
+ \mrcmap[type=areafit, area={munich,newyork},
+ source=topplusopen web,
+ tex width=\linewidth,tex height=6cm,
+ ]{ortho_orthodrome4}
+ \mrcdrawmap
+ \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
+ {\mrcmapattribution};
+ \mrcclipmap
+ \draw (mrcmap.south west) rectangle (mrcmap.north east);
+ \mrcmarker{type=pin,named position=munich,contents={M\"unchen}}
+ \mrcmarker{type=pinflip,shift=5mm,named position=newyork,
+ contents={New York City}}
+ \mrcNPdraworthodrome[red,very thick] {munich}{newyork}
+ \foreach \distance in { 1000,2000,3000,4000,5000,6000 }
+ {
+ \mrcNPfromOrthoDistanceNamed{waypoint}{munich}{newyork}{\distance}
+ \mrcmarker{type=pin,named position=waypoint,
+ contents={\SI{\distance}{\kilo\meter}}}
+ }
+ \end{tikzpicture}
+\end{dispExample}
+\end{docCommands}
+
+
+
+
+\clearpage
+%-------------------------------------------------------------------------------
\subsection{Orthodromic and Loxodromic Distances}
\begin{docCommand}{mrcprettyorthodistance}{\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex
index 6efc4fe0d0..9e210c2a24 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex
@@ -164,7 +164,7 @@ but not for critical navigation purposes etc.
\begin{docCommand}{mrcdrawscalebar}{\oarg{options}}
Draws a scale bar according to the given \meta{options}.
- All \meta{options} share the common prefix |/mermap/scalebar/|.
+ All \meta{options} share the common prefix |mermap/scalebar/|.
The most essential option is the \emph{width} of the scale bar.
\tikzsetnextfilename{scales_scalebar1}
@@ -216,7 +216,7 @@ but not for critical navigation purposes etc.
\end{docMrcKey}
\begin{docMrcKey}[scalebar]{width-in-kilometer}{=\meta{number}}{no default, initially |0|}
- Alias for \refKey{/mermap/scalebar/width-in-km}
+ Alias for \refKey{mermap/scalebar/width-in-km}
\end{docMrcKey}
\begin{docMrcKey}[scalebar]{width-in-meter}{=\meta{number}}{no default, initially |0|}
@@ -247,7 +247,7 @@ but not for critical navigation purposes etc.
\begin{docMrcKey}[scalebar]{at}{=\marg{\tikzname\ coordinate}}{no default,
initially \texttt{\brackets{(0,0)}}}
The scale bar is positioned at the given \meta{\tikzname\ coordinate}.
- The placement is done with the \refKey{/mermap/scalebar/placement} option.
+ The placement is done with the \refKey{mermap/scalebar/placement} option.
Both option correspond to the \tikzname\ options for positioning nodes.
The scale bar can be positioned outside the map (e.g. below), but
remember to use \refCom{mrcclipmap} \emph{after} the scale bar
@@ -285,7 +285,7 @@ but not for critical navigation purposes etc.
\begin{docMrcKey}[scalebar]{placement}{=\meta{\tikzname\ positioning}}{no default, initially empty}
\meta{\tikzname\ positioning} of a scale bar in combination with
- \refKey{/mermap/scalebar/at}. All \tikzname\ placement options for nodes
+ \refKey{mermap/scalebar/at}. All \tikzname\ placement options for nodes
can be used, e.g. \texttt{above left} or \texttt{anchor=mid west}, etc.
Actually, \emph{any} node option could be applied here, but the intended use
is for placement options only.
@@ -298,7 +298,7 @@ but not for critical navigation purposes etc.
absolute shift values in each direction, i.e. the algebraic sign is
automatically complemented.
If only \meta{x shift} is given, then \meta{y shift} is set
- to the same value. \refKey{/mermap/scalebar/at} and \refKey{/mermap/scalebar/placement}
+ to the same value. \refKey{mermap/scalebar/at} and \refKey{mermap/scalebar/placement}
are set by this option.
\end{docMrcKey}
@@ -349,8 +349,8 @@ but not for critical navigation purposes etc.
The \emph{minor} part of the scale bar is a single \tikzname\ path object
which can be customized by the given \meta{\tikzname\ options}.
The \emph{minor} part is seen as holes in the default case.
- \refKey{/mermap/scalebar/minor style} has only an effect, if
- the minor part is drawn \refKey{/mermap/scalebar/solid}.
+ \refKey{mermap/scalebar/minor style} has only an effect, if
+ the minor part is drawn \refKey{mermap/scalebar/solid}.
\tikzsetnextfilename{scales_scalebar5}
\begin{dispExample}
\begin{tikzpicture}
@@ -369,7 +369,7 @@ but not for critical navigation purposes etc.
\begin{docMrcKey}[scalebar]{single}{\colOpt{=true\textbar false}}{default |true|, initially |false|}
If set to |true|, the scale bar is drawn as a single ruler.
- \refKey{/mermap/scalebar/single} is inverse to \refKey{/mermap/scalebar/double}.
+ \refKey{mermap/scalebar/single} is inverse to \refKey{mermap/scalebar/double}.
\tikzsetnextfilename{scales_scalebar6}
\begin{dispExample}
\begin{tikzpicture}
@@ -387,8 +387,8 @@ but not for critical navigation purposes etc.
\begin{docMrcKey}[scalebar]{solid}{\colOpt{=true\textbar false}}{default |true|, initially |false|}
If set to |true|, the \emph{minor} part of the scale bar is drawn opaque.
- It is drawn white or according to \refKey{/mermap/scalebar/minor style}.
- \refKey{/mermap/scalebar/solid} is inverse to \refKey{/mermap/scalebar/transparent}.
+ It is drawn white or according to \refKey{mermap/scalebar/minor style}.
+ \refKey{mermap/scalebar/solid} is inverse to \refKey{mermap/scalebar/transparent}.
\end{docMrcKey}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.sty b/macros/latex/contrib/mercatormap/mercatormap.doc.sty
index 80b38241ce..1eab49098f 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.sty
+++ b/macros/latex/contrib/mercatormap/mercatormap.doc.sty
@@ -4,10 +4,9 @@
\renewcommand*\l@subsubsection{\@dottedtocline{3}{4.2em}{3.2em}}
\RequirePackage[T1]{fontenc}
-\RequirePackage[utf8]{inputenc}
\RequirePackage[english]{babel}
\RequirePackage{lmodern,parskip,array}
-\RequirePackage[svgnames,table,hyperref]{xcolor}
+\RequirePackage[svgnames,table]{xcolor}
\RequirePackage{tikz}
\RequirePackage{varioref}
\RequirePackage[makeindex]{imakeidx}
@@ -31,10 +30,10 @@
\RequirePackage{array,tabularx,booktabs}
\RequirePackage{lipsum}
\RequirePackage[extendedchars,encoding,filenameencoding=utf-8]{grffile}
-\RequirePackage{siunitx,xfp}
+\RequirePackage{xfp}
\RequirePackage{tcolorbox}
-\tcbuselibrary{skins,xparse,minted,breakable,documentation,raster}
+\tcbuselibrary{skins,minted,breakable,documentation,raster}
\providecommand\mrcpkgprefix{}
\RequirePackage{\mrcpkgprefix mercatormap}
@@ -96,8 +95,8 @@
borderline horizontal={0.3mm}{0pt}{red!50},
#1}{#2}
-\tcbmakedocSubKey{docMrcKey}{mermap}
-\tcbmakedocSubKeys{docMrcKeys}{mermap}
+\tcbmakedocSubKey[doc key prefix=]{docMrcKey}{mermap}
+\tcbmakedocSubKeys[doc key prefix=]{docMrcKeys}{mermap}
\tcbmakedocSubKey{docTikzKey}{tikz}
\def\tikzname{\textup{Ti\textit{k}Z}}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex
deleted file mode 100644
index bcdf2fd322..0000000000
--- a/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex
+++ /dev/null
@@ -1,50 +0,0 @@
-% !TeX root = mercatormap.tex
-% !TeX encoding=UTF-8
-% !TeX spellcheck=en_US
-% include file of mercatormap.tex (manual of the LaTeX package mercatormap)
-\clearpage
-\section{Version History}%
-
-\section*{v1.00 (2020/04/20)}
-\begin{itemize}
-\item Initial public release.
-\end{itemize}
-
-\section*{v1.01 (2020/05/05)}
-\begin{itemize}
-\item Sorting of index key entries fixed for the documentation.
-\item User messages for failed Python script calls are changed from warnings to
- errors to fail fast and to provide more information and hints about
- possible reasons.
-\item New general marker option
- \refKey{/mermap/marker/generic} with corresponding macros
- \docAuxCommand*{mrcmarkergeneric}
- and \docAuxCommand*{l_mermap_marker_generic_tl}. Also, the marker uuid is
- made |expl3| accessible as \docAuxCommand*{l_mermap_marker_uuid_tl}.
-\item New hyper marker options
- \refKey{/mermap/marker/url},
- \refKey{/mermap/marker/link},
- \refKey{/mermap/marker/use urls},
- \refKey{/mermap/marker/ignore urls},
- \refKey{/mermap/marker/use links},
- \refKey{/mermap/marker/ignore links}.
-\end{itemize}
-
-
-\section*{v1.02 (2020/08/06)}
-\begin{itemize}
-\item New options
- \refKey{/mermap/supply/area from marker input} and
- \refKey{/mermap/supply/add area from marker input}
- which allow to fit a map to a given external list of marker positions.
-\item New option \refKey{/mermap/fail on missing resource} to control
- compilation behavior for missing resource files.
-\item Openrouteservice has discontinued mapsurfer tiles since June 2020.\\
- Therefore, \refKey{/mermap/supply/source}=\docValue{openrouteservice mapsurfer}
- is deprecated now. It is not documented any more, but
- for some time it is still available for old documents with
- cached map tiles.
-\item\issuetracker{2}
- New marker option \refKey{/mermap/marker/distance} with corresponding
- macro \docAuxCommand{mrcmarkerdistance}.
-\end{itemize}
diff --git a/macros/latex/contrib/mercatormap/mercatormap.pdf b/macros/latex/contrib/mercatormap/mercatormap.pdf
index d90d749617..d39519309c 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.pdf
+++ b/macros/latex/contrib/mercatormap/mercatormap.pdf
Binary files differ
diff --git a/macros/latex/contrib/mercatormap/mercatormap.sty b/macros/latex/contrib/mercatormap/mercatormap.sty
index d2c8d61ae4..c9b8048659 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.sty
+++ b/macros/latex/contrib/mercatormap/mercatormap.sty
@@ -1,8 +1,8 @@
-%% The LaTeX package mercatormap - version 1.02 (2020/08/06)
+%% The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
%% mercatormap.sty: geographic coordinates (Mercator projection) and map tiles for TikZ pictures
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,24 +17,11 @@
%%
%% This work consists of all files listed in README
%%
-\RequirePackage{expl3}[2020/02/25]
-\RequirePackage{xparse}
-\ProvidesExplPackage{mercatormap}{2020/08/06}{1.02}
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
+\ProvidesExplPackage{mercatormap}{2024/08/01}{1.1.0}
{A Web Mercator projection package with map tile support}
-\@ifpackagelater { expl3 } { 2020/02/25 }
- { }
- {
- \PackageError { mercatormap } { Support~package~expl3~too~old }
- {
- You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
- 'l3packages'.\MessageBreak
- Loading~mercatormap~will~abort!
- }
- \tex_endinput:D
- }
-\RequirePackage{siunitx}
-\RequirePackage{graphicx,tikz,pdftexcmds}
+\RequirePackage{siunitx,graphicx,tikz}
\ExplSyntaxOff
% space character problem if within explSyntax
@@ -51,8 +38,23 @@
\NewDocumentCommand\mermapsetmarker{ m } { \keys_set:nn { mermap/marker } {#1} }
-%---- constants ----------------------------------------------------------------
+%---- scratch variables --------------------------------------------------------
+\box_new:N \l__mermap_tmpa_box
+
+\clist_new:N \l__mermap_tmpa_clist
+
+\dim_new:N \l__mermap_tmpa_dim
+\dim_new:N \l__mermap_tmpb_dim
+
+\fp_new:N \l__mermap_tmpa_fp
+\fp_new:N \l__mermap_tmpb_fp
+
+\tl_new:N \g__mermap_tmpa_tl
+\tl_new:N \l__mermap_tmpa_tl
+\tl_new:N \l__mermap_tmpb_tl
+
+%---- constants ----------------------------------------------------------------
\fp_const:Nn \c__mermap_scale_radius_fp { 6371*pi/180 }
\fp_const:Nn \c__mermap_mean_radius_fp { 637100000cm }
@@ -235,16 +237,16 @@
\cs_new_nopar:Npn \__mermap_longitude_to_x:n #1
{
- \fp_set:Nn \l_tmpa_fp { #1-\l__mermap_mapwest_fp }
- \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) }
- \fp_set:Nn \l_tmpa_fp
- { \l_tmpa_fp>\l__mermap_westeast_fp
- ?(\l_tmpa_fp-\l__mermap_westeast_fp>360-\l_tmpa_fp
- ?\l_tmpa_fp-360
- :\l_tmpa_fp)
- :\l_tmpa_fp
+ \fp_set:Nn \l__mermap_tmpa_fp { #1-\l__mermap_mapwest_fp }
+ \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) }
+ \fp_set:Nn \l__mermap_tmpa_fp
+ { \l__mermap_tmpa_fp>\l__mermap_westeast_fp
+ ?(\l__mermap_tmpa_fp-\l__mermap_westeast_fp>360-\l__mermap_tmpa_fp
+ ?\l__mermap_tmpa_fp-360
+ :\l__mermap_tmpa_fp)
+ :\l__mermap_tmpa_fp
}
- \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp }
+ \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp }
}
@@ -340,14 +342,14 @@
\prg_return_false:
}
{
- \fp_set:Nn \l_tmpa_fp { #2-\l__mermap_mapwest_fp }
- \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) }
- \fp_compare:nNnTF \l_tmpa_fp > \l__mermap_westeast_fp
+ \fp_set:Nn \l__mermap_tmpa_fp { #2-\l__mermap_mapwest_fp }
+ \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) }
+ \fp_compare:nNnTF \l__mermap_tmpa_fp > \l__mermap_westeast_fp
{
\prg_return_false:
}
{
- \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp }
+ \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp }
\__mermap_latitude_to_y:n {#1}
\pgfnoderename{mrclastpos}{mrcpos}
\pgfcoordinate{mrcpos}{
@@ -378,14 +380,14 @@
\prg_return_false:
}
{
- \fp_set:Nn \l_tmpa_fp { #2-\l__mermap_vic_west_fp }
- \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) }
- \fp_compare:nNnTF \l_tmpa_fp > \l__mermap_vic_westeast_fp
+ \fp_set:Nn \l__mermap_tmpa_fp { #2-\l__mermap_vic_west_fp }
+ \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) }
+ \fp_compare:nNnTF \l__mermap_tmpa_fp > \l__mermap_vic_westeast_fp
{
\prg_return_false:
}
{
- \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp - \l__mermap_vic_dim_fp }
+ \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp - \l__mermap_vic_dim_fp }
\__mermap_latitude_to_y:n {#1}
\pgfnoderename{mrclastpos}{mrcpos}
\pgfcoordinate{mrcpos}{
@@ -485,7 +487,7 @@
\char_set_catcode_other:n {`\"}
\tl_const:Nn \c__mermap_supply_call_boundaries_tl
- {%
+ {
\l__mermap_python_tl\c_space_tl boundaries
-u "\str_use:N\l__mermap_supply_url_str"
-at "\str_use:N\l__mermap_supply_attribution_str"
@@ -503,7 +505,7 @@
}
\tl_const:Nn \c__mermap_supply_call_reference_tl
- {%
+ {
\l__mermap_python_tl\c_space_tl reference
-u "\str_use:N\l__mermap_supply_url_str"
-at "\str_use:N\l__mermap_supply_attribution_str"
@@ -523,7 +525,7 @@
\tl_const:Nn \c__mermap_supply_call_areafit_tl
- {%
+ {
\l__mermap_python_tl\c_space_tl areafit
-u "\str_use:N\l__mermap_supply_url_str"
-at "\str_use:N\l__mermap_supply_attribution_str"
@@ -604,11 +606,11 @@
\cs_new:Npn \__mermap_supply_url_with_api_key:nnn #1#2#3
{
\str_set:Nn \l__mermap_supply_url_str {#1}
- \prop_get:NnNF \g__mermap_apikey_prop {#2} \l_tmpa_tl
+ \prop_get:NnNF \g__mermap_apikey_prop {#2} \l__mermap_tmpa_tl
{
\msg_error:nnx{ mercatormap }{ api-key-undefined }{ #2 }
}
- \str_put_right:NV \l__mermap_supply_url_str \l_tmpa_tl
+ \str_put_right:NV \l__mermap_supply_url_str \l__mermap_tmpa_tl
\str_put_right:Nn \l__mermap_supply_url_str {#3}
}
@@ -621,16 +623,16 @@
{
\msg_error:nnx{ mercatormap }{ np-undefined }{ ##1 }
}
- \fp_set:Nn \l_tmpa_fp { \mrcNPlat{##1} }
- \fp_compare:nNnT \l_tmpa_fp < \l__mermap_supply_south_fp
- { \fp_set_eq:NN \l__mermap_supply_south_fp \l_tmpa_fp }
- \fp_compare:nNnT \l_tmpa_fp > \l__mermap_supply_north_fp
- { \fp_set_eq:NN \l__mermap_supply_north_fp \l_tmpa_fp }
- \fp_set:Nn \l_tmpa_fp { \mrcNPlon{##1} }
- \fp_compare:nNnT \l_tmpa_fp < \l__mermap_supply_west_fp
- { \fp_set_eq:NN \l__mermap_supply_west_fp \l_tmpa_fp }
- \fp_compare:nNnT \l_tmpa_fp > \l__mermap_supply_east_fp
- { \fp_set_eq:NN \l__mermap_supply_east_fp \l_tmpa_fp }
+ \fp_set:Nn \l__mermap_tmpa_fp { \mrcNPlat{##1} }
+ \fp_compare:nNnT \l__mermap_tmpa_fp < \l__mermap_supply_south_fp
+ { \fp_set_eq:NN \l__mermap_supply_south_fp \l__mermap_tmpa_fp }
+ \fp_compare:nNnT \l__mermap_tmpa_fp > \l__mermap_supply_north_fp
+ { \fp_set_eq:NN \l__mermap_supply_north_fp \l__mermap_tmpa_fp }
+ \fp_set:Nn \l__mermap_tmpa_fp { \mrcNPlon{##1} }
+ \fp_compare:nNnT \l__mermap_tmpa_fp < \l__mermap_supply_west_fp
+ { \fp_set_eq:NN \l__mermap_supply_west_fp \l__mermap_tmpa_fp }
+ \fp_compare:nNnT \l__mermap_tmpa_fp > \l__mermap_supply_east_fp
+ { \fp_set_eq:NN \l__mermap_supply_east_fp \l__mermap_tmpa_fp }
}
}
@@ -662,14 +664,14 @@
{
\msg_error:nnn { mercatormap }{ input-area-marker }{ #1 }
}
- \tl_gset:Nx \g_tmpa_tl
+ \tl_gset:Nx \g__mermap_tmpa_tl
{
\exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_west_fp { \fp_to_decimal:N\l__mermap_supply_west_fp }
\exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_east_fp { \fp_to_decimal:N\l__mermap_supply_east_fp }
\exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_south_fp { \fp_to_decimal:N\l__mermap_supply_south_fp }
\exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_north_fp { \fp_to_decimal:N\l__mermap_supply_north_fp }
}
- \group_insert_after:N \g_tmpa_tl
+ \group_insert_after:N \g__mermap_tmpa_tl
\group_end:
}
@@ -715,18 +717,18 @@
_source .choice:,
area .code:n =
{
- \clist_set:Nn \l_tmpa_clist { #1 }
+ \clist_set:Nn \l__mermap_tmpa_clist { #1 }
\fp_set:Nn \l__mermap_supply_west_fp { inf }
\fp_set:Nn \l__mermap_supply_east_fp { -inf }
\fp_set:Nn \l__mermap_supply_south_fp { 89 }
\fp_set:Nn \l__mermap_supply_north_fp { -89 }
- \__mermap_supply_add_area_clist:N \l_tmpa_clist
+ \__mermap_supply_add_area_clist:N \l__mermap_tmpa_clist
},
area .value_required:n = true,
add~area .code:n =
{
- \clist_set:Nn \l_tmpa_clist { #1 }
- \__mermap_supply_add_area_clist:N \l_tmpa_clist
+ \clist_set:Nn \l__mermap_tmpa_clist { #1 }
+ \__mermap_supply_add_area_clist:N \l__mermap_tmpa_clist
},
area~from~marker~input .code:n =
{
@@ -756,20 +758,20 @@
flex~area~fit .code:n = {
\fp_compare:nNnF \l__mermap_tile_size_dim = \l__mermap_flex_tile_size_dim
{
- \fp_set:Nn \l_tmpa_fp { \l__mermap_tile_size_dim/\l__mermap_flex_tile_size_dim }
- \fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp*\l_tmpa_fp}
- \fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp*\l_tmpa_fp}
+ \fp_set:Nn \l__mermap_tmpa_fp { \l__mermap_tile_size_dim/\l__mermap_flex_tile_size_dim }
+ \fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp*\l__mermap_tmpa_fp}
+ \fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp*\l__mermap_tmpa_fp}
}
\fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp-(#1)/\l__mermap_flex_tile_size_dim}
\fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp-(#1)/\l__mermap_flex_tile_size_dim}
- \fp_set:Nn \l_tmpa_fp { min ( 180*\l__mermap_supply_width_fp / (\l__mermap_supply_east_fp-\l__mermap_supply_west_fp)
+ \fp_set:Nn \l__mermap_tmpa_fp { min ( 180*\l__mermap_supply_width_fp / (\l__mermap_supply_east_fp-\l__mermap_supply_west_fp)
, pi*\l__mermap_supply_height_fp / ln( tand(\l__mermap_supply_north_fp/2+45) / tand(\l__mermap_supply_south_fp/2+45) ) ) }
- \fp_set:Nn \l_tmpb_fp { ln(\l_tmpa_fp)/ln(2) }
- \fp_set:Nn \l_tmpb_fp { round(\l_tmpb_fp)/\l_tmpb_fp }
- \fp_set:Nn \l_tmpb_fp { \l_tmpa_fp^(\l_tmpb_fp-1+0.0000001) }
- \dim_set:Nn \l__mermap_tile_size_dim { \fp_to_dim:n { \l__mermap_flex_tile_size_dim / \l_tmpb_fp }}
- \fp_set:Nn \l__mermap_supply_width_fp { \l__mermap_supply_width_fp * \l_tmpb_fp + (#1)/\l__mermap_tile_size_dim }
- \fp_set:Nn \l__mermap_supply_height_fp { \l__mermap_supply_height_fp * \l_tmpb_fp + (#1)/\l__mermap_tile_size_dim }
+ \fp_set:Nn \l__mermap_tmpb_fp { ln(\l__mermap_tmpa_fp)/ln(2) }
+ \fp_set:Nn \l__mermap_tmpb_fp { round(\l__mermap_tmpb_fp)/\l__mermap_tmpb_fp }
+ \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_tmpa_fp^(\l__mermap_tmpb_fp-1+0.0000001) }
+ \dim_set:Nn \l__mermap_tile_size_dim { \fp_to_dim:n { \l__mermap_flex_tile_size_dim / \l__mermap_tmpb_fp }}
+ \fp_set:Nn \l__mermap_supply_width_fp { \l__mermap_supply_width_fp * \l__mermap_tmpb_fp + (#1)/\l__mermap_tile_size_dim }
+ \fp_set:Nn \l__mermap_supply_height_fp { \l__mermap_supply_height_fp * \l__mermap_tmpb_fp + (#1)/\l__mermap_tile_size_dim }
},
flex~area~fit .default:n = 0pt,
}
@@ -815,16 +817,13 @@
\msg_new:nnn { mercatormap }{ python-script }
- { Python~script~'maptiles.texpy'~is~created~(for~map~tile~download). }
+ { Python~script~'maptiles.texpy'~is~created~for~map~tile~download. }
\NewDocumentCommand \mrcactivatescript {}
{
\msg_info:nn { mercatormap }{ python-script }
- \group_begin:
- \def\@latex@warning@no@line##1{}% suppress filecontents warning
\file_input:n {\mrcpkgprefix mercatorpy.def}
- \group_end:
\bool_set_true:N \l__mermap_script_activated_bool
}
\@onlypreamble\mrcactivatescript
@@ -838,21 +837,21 @@
\cs_new:Npn \__mermap_create_definition_id:n #1
{
- \tl_set:Nx \l_tmpa_tl {#1}
- \tl_trim_spaces:N \l_tmpa_tl
- \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l_tmpa_tl}
+ \tl_set:Nx \l__mermap_tmpa_tl {#1}
+ \tl_trim_spaces:N \l__mermap_tmpa_tl
+ \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l__mermap_tmpa_tl}
\str_concat:NNN \l__mermap_definition_id_str
\l__mermap_definition_prefix_str \l__mermap_definition_postfix_str
}
\cs_new:Npn \__mermap_map:nn #1#2
{
- \tl_set:Nx \l_tmpa_tl {#2}
- \tl_trim_spaces:N \l_tmpa_tl
- \tl_if_empty:NT \l_tmpa_tl
+ \tl_set:Nx \l__mermap_tmpa_tl {#2}
+ \tl_trim_spaces:N \l__mermap_tmpa_tl
+ \tl_if_empty:NT \l__mermap_tmpa_tl
{
\int_gincr:N \g__mermap_automap_int
- \tl_set:Nx \l_tmpa_tl
+ \tl_set:Nx \l__mermap_tmpa_tl
{
automap-
\int_compare:nNnTF \g__mermap_automap_int<{10} {000}
@@ -865,7 +864,7 @@
\int_use:N \g__mermap_automap_int
}
}
- \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l_tmpa_tl}
+ \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l__mermap_tmpa_tl}
\str_concat:NNN \l__mermap_definition_id_str
\l__mermap_definition_prefix_str \l__mermap_definition_postfix_str
\__mermap_supplymap:n {#1}
@@ -886,12 +885,12 @@
{
\group_begin:
\keys_set:nn { mermap/supply } { #1 }
- \tl_set:Nx \l_tmpa_tl { \str_use:N\l__mermap_definition_id_str }
- \prop_if_in:NVT \g__mermap_definition_prop \l_tmpa_tl
+ \tl_set:Nx \l__mermap_tmpa_tl { \str_use:N\l__mermap_definition_id_str }
+ \prop_if_in:NVT \g__mermap_definition_prop \l__mermap_tmpa_tl
{
- \msg_warning:nnx { mercatormap }{ definition-id-used }{ \tl_use:N \l_tmpa_tl }
+ \msg_warning:nnx { mercatormap }{ definition-id-used }{ \tl_use:N \l__mermap_tmpa_tl }
}
- \prop_gput:NVn \g__mermap_definition_prop \l_tmpa_tl {}
+ \prop_gput:NVn \g__mermap_definition_prop \l__mermap_tmpa_tl {}
\bool_if:NT \l__mermap_script_activated_bool
{
\__mermap_supplymap_call:
@@ -927,10 +926,10 @@
\cs_new:Npn \__mermap_supplymap_call:
{
- \tl_set_eq:Nc \l_tmpa_tl {
+ \tl_set_eq:Nc \l__mermap_tmpa_tl {
c__mermap_supply_call_\l__mermap_supply_type_tl _tl }
- \tl_set:Nx \l__mermap_supply_call_tl \l_tmpa_tl
- \tl_set:Nx \l__mermap_mdfivesum_tl { \pdf@mdfivesum{\l__mermap_supply_call_tl} }
+ \tl_set:Nx \l__mermap_supply_call_tl \l__mermap_tmpa_tl
+ \tl_set:Nx \l__mermap_mdfivesum_tl { \str_mdfive_hash:e{\l__mermap_supply_call_tl} }
\file_if_exist:nTF {\l__mermap_definition_id_str.def}
{
\tl_clear:N \l__mermap_last_mdfivesum_tl
@@ -1031,8 +1030,8 @@
\cs_new_nopar:Npn \__mermap_set_flex_scale:nn #1#2
{
- \fp_set:Nn \l_tmpa_fp { 1+ln(\c__mermap_mean_radius_fp/#1*cosd(#2)*pi/\l__mermap_flex_tile_size_dim)/ln(2) }
- \keys_set:nn { mermap }{ flex~zoom=\l_tmpa_fp }
+ \fp_set:Nn \l__mermap_tmpa_fp { 1+ln(\c__mermap_mean_radius_fp/#1*cosd(#2)*pi/\l__mermap_flex_tile_size_dim)/ln(2) }
+ \keys_set:nn { mermap }{ flex~zoom=\l__mermap_tmpa_fp }
}
\use:x
@@ -1323,19 +1322,19 @@
\cs_new_nopar:Npn \__mermap_compute_network_step:nn #1#2
{
- \fp_set:Nn \l_tmpa_fp
+ \fp_set:Nn \l__mermap_tmpa_fp
{
min ( \l__mermap_network_pieces_int, round((#1)/\l__mermap_network_distance_dim) )
}
- \fp_set:Nn \l_tmpb_fp { (#2)/\l_tmpa_fp }
- \fp_set:Nn \l_tmpa_fp { floor(ln(\l_tmpb_fp)/ln(10)) }
- \fp_compare:nNnTF {\l_tmpa_fp} < {0}
+ \fp_set:Nn \l__mermap_tmpb_fp { (#2)/\l__mermap_tmpa_fp }
+ \fp_set:Nn \l__mermap_tmpa_fp { floor(ln(\l__mermap_tmpb_fp)/ln(10)) }
+ \fp_compare:nNnTF {\l__mermap_tmpa_fp} < {0}
{
- \fp_compare:nNnTF {\l_tmpa_fp} > {-5}
+ \fp_compare:nNnTF {\l__mermap_tmpa_fp} > {-5}
{
\use:x
{
- \exp_not:N\keys_set:nn { mermap }{ format~angle=decimal\fp_to_int:N\l_tmpa_fp}
+ \exp_not:N\keys_set:nn { mermap }{ format~angle=decimal\fp_to_int:N\l__mermap_tmpa_fp}
}
}
{
@@ -1345,25 +1344,25 @@
{
\keys_set:nn { mermap }{ format~angle=decimal-0 }
}
- \fp_set:Nn \l_tmpa_fp { 10^\l_tmpa_fp }
- \fp_set:Nn \l_tmpb_fp { \l_tmpb_fp/\l_tmpa_fp }
- \fp_compare:nNnTF {abs(\l_tmpb_fp-1)} < {abs(\l_tmpb_fp-2)}
+ \fp_set:Nn \l__mermap_tmpa_fp { 10^\l__mermap_tmpa_fp }
+ \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_tmpb_fp/\l__mermap_tmpa_fp }
+ \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-1)} < {abs(\l__mermap_tmpb_fp-2)}
{
- \fp_compare:nNnTF {abs(\l_tmpb_fp-1)} < {abs(\l_tmpb_fp-5)}
+ \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-1)} < {abs(\l__mermap_tmpb_fp-5)}
{
- \fp_set:Nn \l__mermap_result_fp {\l_tmpa_fp}
+ \fp_set:Nn \l__mermap_result_fp {\l__mermap_tmpa_fp}
}
{
- \fp_set:Nn \l__mermap_result_fp {5*\l_tmpa_fp}
+ \fp_set:Nn \l__mermap_result_fp {5*\l__mermap_tmpa_fp}
}
}
{
- \fp_compare:nNnTF {abs(\l_tmpb_fp-2)} < {abs(\l_tmpb_fp-5)}
+ \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-2)} < {abs(\l__mermap_tmpb_fp-5)}
{
- \fp_set:Nn \l__mermap_result_fp {2*\l_tmpa_fp}
+ \fp_set:Nn \l__mermap_result_fp {2*\l__mermap_tmpa_fp}
}
{
- \fp_set:Nn \l__mermap_result_fp {5*\l_tmpa_fp}
+ \fp_set:Nn \l__mermap_result_fp {5*\l__mermap_tmpa_fp}
}
}
}
@@ -1376,46 +1375,46 @@
\IfNoValueF {#1} { \keys_set:nn { mermap } {#1} }
\tl_use:N \l__mermap_tikz_map_clip_tl
\__mermap_compute_network_step:nn {\l__mermap_tex_height_fp}{\l__mermap_mapnorth_fp-\l__mermap_mapsouth_fp}
- \fp_set:Nn \l_tmpa_fp { ceil(\l__mermap_mapsouth_fp/\l__mermap_result_fp)*\l__mermap_result_fp}
- \fp_compare:nNnT {\l_tmpa_fp-\l__mermap_mapsouth_fp} < {1e-10}
+ \fp_set:Nn \l__mermap_tmpa_fp { ceil(\l__mermap_mapsouth_fp/\l__mermap_result_fp)*\l__mermap_result_fp}
+ \fp_compare:nNnT {\l__mermap_tmpa_fp-\l__mermap_mapsouth_fp} < {1e-10}
{
- \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp}
+ \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp}
}
- \fp_while_do:nNnn {\l_tmpa_fp} < {\l__mermap_mapnorth_fp}
+ \fp_while_do:nNnn {\l__mermap_tmpa_fp} < {\l__mermap_mapnorth_fp}
{
- \tl_set:Nn \l_tmpa_tl {\fp_use:N\l_tmpa_fp}
- \draw[gray,very~thin] (mrc~cs\c_colon_str lat=\l_tmpa_tl,lon=\mrcmapwest)
+ \tl_set:Nn \l__mermap_tmpa_tl {\fp_use:N\l__mermap_tmpa_fp}
+ \draw[gray,very~thin] (mrc~cs\c_colon_str lat=\l__mermap_tmpa_tl,lon=\mrcmapwest)
coordinate (mermap_temp)
node[right=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl,
fill=white,opacity=0.3,text~opacity=1,
- ]{\mrcformlat{\l_tmpa_tl}}
+ ]{\mrcformlat{\l__mermap_tmpa_tl}}
-- (mermap_temp -| mrcmap.east)
node[left=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl,
fill=white,opacity=0.3,text~opacity=1,
- ]{\mrcformlat{\l_tmpa_tl}}
+ ]{\mrcformlat{\l__mermap_tmpa_tl}}
;
- \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp}
+ \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp}
}
\__mermap_compute_network_step:nn {\l__mermap_tex_width_fp}{\l__mermap_mapeast_fp-\l__mermap_mapwest_fp}
- \fp_set:Nn \l_tmpa_fp { ceil(\l__mermap_mapwest_fp/\l__mermap_result_fp)*\l__mermap_result_fp}
- \fp_compare:nNnT {\l_tmpa_fp-\l__mermap_mapwest_fp} < {1e-10}
+ \fp_set:Nn \l__mermap_tmpa_fp { ceil(\l__mermap_mapwest_fp/\l__mermap_result_fp)*\l__mermap_result_fp}
+ \fp_compare:nNnT {\l__mermap_tmpa_fp-\l__mermap_mapwest_fp} < {1e-10}
{
- \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp}
+ \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp}
}
- \fp_while_do:nNnn {\l_tmpa_fp} < {\l__mermap_mapeast_fp}
+ \fp_while_do:nNnn {\l__mermap_tmpa_fp} < {\l__mermap_mapeast_fp}
{
- \tl_set:Nn \l_tmpa_tl {\fp_use:N\l_tmpa_fp}
- \draw[gray,very~thin] (mrc~cs\c_colon_str lon=\l_tmpa_tl,lat=\mrcmapsouth)
+ \tl_set:Nn \l__mermap_tmpa_tl {\fp_use:N\l__mermap_tmpa_fp}
+ \draw[gray,very~thin] (mrc~cs\c_colon_str lon=\l__mermap_tmpa_tl,lat=\mrcmapsouth)
coordinate (mermap_temp)
node[above=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl,
fill=white,opacity=0.3,text~opacity=1,
- ]{\mrcformlon{\l_tmpa_tl}}
+ ]{\mrcformlon{\l__mermap_tmpa_tl}}
-- (mermap_temp |- mrcmap.north)
node[below=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl,
fill=white,opacity=0.3,text~opacity=1,
- ]{\mrcformlon{\l_tmpa_tl}}
+ ]{\mrcformlon{\l__mermap_tmpa_tl}}
;
- \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp}
+ \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp}
}
\end{scope}
}
@@ -1488,26 +1487,26 @@
\cs_new_nopar:Npn \__mermap_pretty_distance:n #1
{
- \fp_set:Nn \l_tmpa_fp { #1 }
- \fp_compare:nNnTF \l_tmpa_fp < 5
+ \fp_set:Nn \l__mermap_tmpa_fp { #1 }
+ \fp_compare:nNnTF \l__mermap_tmpa_fp < 5
{
- \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l_tmpa_fp}}{\meter}
+ \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l__mermap_tmpa_fp}}{\meter}
}
{
- \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l_tmpa_fp}{\kilo\meter}
+ \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l__mermap_tmpa_fp}{\kilo\meter}
}
}
\cs_new_nopar:Npn \__mermap_pretty_length:n #1
{
- \fp_set:Nn \l_tmpa_fp { (#1)*\l__mermap_scale_fp }
- \fp_compare:nNnTF \l_tmpa_fp < 5
+ \fp_set:Nn \l__mermap_tmpa_fp { (#1)*\l__mermap_scale_fp }
+ \fp_compare:nNnTF \l__mermap_tmpa_fp < 5
{
- \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l_tmpa_fp}}{\meter}
+ \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l__mermap_tmpa_fp}}{\meter}
}
{
- \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l_tmpa_fp}{\kilo\meter}
+ \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l__mermap_tmpa_fp}{\kilo\meter}
}
}
@@ -1535,25 +1534,25 @@
\cs_new_nopar:Npn \__mermap_format_angle_minute:n #1
{
- \fp_set:Nn \l_tmpa_fp {floor(#1)}
- \fp_set:Nn \l_tmpb_fp {round((#1-\l_tmpa_fp)*60)}
+ \fp_set:Nn \l__mermap_tmpa_fp {floor(#1)}
+ \fp_set:Nn \l__mermap_tmpb_fp {round((#1-\l__mermap_tmpa_fp)*60)}
\ang[add-arc-degree-zero,add-arc-minute-zero]
{
- \fp_to_int:N \l_tmpa_fp ;
- \fp_to_int:N \l_tmpb_fp ;
+ \fp_to_int:N \l__mermap_tmpa_fp ;
+ \fp_to_int:N \l__mermap_tmpb_fp ;
}
}
\cs_new_nopar:Npn \__mermap_format_angle_second:n #1
{
- \fp_set:Nn \l_tmpa_fp {floor(#1)}
- \fp_set:Nn \l_tmpb_fp {floor((#1-\l_tmpa_fp)*60)}
+ \fp_set:Nn \l__mermap_tmpa_fp {floor(#1)}
+ \fp_set:Nn \l__mermap_tmpb_fp {floor((#1-\l__mermap_tmpa_fp)*60)}
\ang[add-arc-degree-zero,add-arc-minute-zero]
{
- \fp_to_int:N \l_tmpa_fp ;
- \fp_to_int:N \l_tmpb_fp ;
- \fp_to_int:n {round(((#1-\l_tmpa_fp)*60-\l_tmpb_fp)*60)}
+ \fp_to_int:N \l__mermap_tmpa_fp ;
+ \fp_to_int:N \l__mermap_tmpb_fp ;
+ \fp_to_int:n {round(((#1-\l__mermap_tmpa_fp)*60-\l__mermap_tmpb_fp)*60)}
}
}
@@ -1562,14 +1561,14 @@
\group_begin:
\IfNoValueF {#1}
{ \keys_set:nn { mermap } {#1} }
- \fp_set:Nn \l_tmpa_fp {#2}
- \fp_compare:nNnTF \l_tmpa_fp < 0
+ \fp_set:Nn \l__mermap_tmpa_fp {#2}
+ \fp_compare:nNnTF \l__mermap_tmpa_fp < 0
{
- \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l_tmpa_fp}}
+ \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l__mermap_tmpa_fp}}
\__mermap_format_south:n {\__mermap_format_angle:n{\l__mermap_temp_tl}}
}
{
- \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l_tmpa_fp}
+ \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l__mermap_tmpa_fp}
\__mermap_format_north:n {\__mermap_format_angle:n{\l__mermap_temp_tl}}
}
\group_end:
@@ -1580,14 +1579,14 @@
\group_begin:
\IfNoValueF {#1}
{ \keys_set:nn { mermap } {#1} }
- \fp_set:Nn \l_tmpa_fp {#2-360*floor((#2+180)/360)}
- \fp_compare:nNnTF \l_tmpa_fp < 0
+ \fp_set:Nn \l__mermap_tmpa_fp {#2-360*floor((#2+180)/360)}
+ \fp_compare:nNnTF \l__mermap_tmpa_fp < 0
{
- \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l_tmpa_fp}}
+ \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l__mermap_tmpa_fp}}
\__mermap_format_west:n{\__mermap_format_angle:n{\l__mermap_temp_tl}}
}
{
- \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l_tmpa_fp}
+ \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l__mermap_tmpa_fp}
\__mermap_format_east:n {\__mermap_format_angle:n{\l__mermap_temp_tl}}
}
\group_end:
@@ -1608,22 +1607,22 @@
{
\tl_if_empty:nTF {#5}
{
- \fp_set:Nn \l_tmpa_fp {0}
- \fp_set:Nn \l_tmpb_fp {0}
+ \fp_set:Nn \l__mermap_tmpa_fp {0}
+ \fp_set:Nn \l__mermap_tmpb_fp {0}
}
{
- \fp_set:Nn \l_tmpa_fp {#3*(#5)}
+ \fp_set:Nn \l__mermap_tmpa_fp {#3*(#5)}
\tl_if_empty:nTF {#6}
{
- \fp_set:Nn \l_tmpb_fp {#4*(#5)}
+ \fp_set:Nn \l__mermap_tmpb_fp {#4*(#5)}
}
{
- \fp_set:Nn \l_tmpb_fp {#4*(#6)}
+ \fp_set:Nn \l__mermap_tmpb_fp {#4*(#6)}
}
}
\tl_set:Nx \l__mermap_scalebar_at_tl
{
- {([xshift=\fp_to_dim:N\l_tmpa_fp,yshift=\fp_to_dim:N\l_tmpb_fp]mrcmap.#1)}
+ {([xshift=\fp_to_dim:N\l__mermap_tmpa_fp,yshift=\fp_to_dim:N\l__mermap_tmpb_fp]mrcmap.#1)}
}
\tl_set:Nn \l__mermap_scalebar_placement_tl {#2}
}
@@ -1691,60 +1690,56 @@
\begin{scope}[shift=(mrcscalebar.south~west)]
\__mermap_tikz_path_begin:n { fill=black, mrcscalebarmajor }
\pgfseteorule
- \fp_set:Nn \l_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} % Breite
+ \fp_set:Nn \l__mermap_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} % Breite
\pgfpathrectangle{\pgfpoint{0pt}{0pt}}
- {\pgfpoint{\fp_to_dim:N\l_tmpa_fp}{\l__mermap_scalebar_height_dim}}
+ {\pgfpoint{\fp_to_dim:N\l__mermap_tmpa_fp}{\l__mermap_scalebar_height_dim}}
\bool_if:NF \l__mermap_scalebar_transparent_bool
{
\__mermap_tikz_path_end:
\__mermap_tikz_path_begin:n { fill=white, mrcscalebarminor }
- \fp_set:Nn \l_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp}
+ \fp_set:Nn \l__mermap_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp}
}
- \fp_set:Nn \l_tmpb_fp {\l_tmpa_fp/\l__mermap_scalebar_partitions_int}
+ \fp_set:Nn \l__mermap_tmpb_fp {\l__mermap_tmpa_fp/\l__mermap_scalebar_partitions_int}
\bool_if:NTF \l__mermap_scalebar_double_bool
{
- \int_set:Nn \l_tmpa_int {1}
- \dim_set:Nn \l_tmpb_dim {\l__mermap_scalebar_height_dim/2}
- \dim_set:Nn \l_tmpa_dim {0.2pt-\l_tmpb_dim}
+ \dim_set:Nn \l__mermap_tmpb_dim {\l__mermap_scalebar_height_dim/2}
+ \dim_set:Nn \l__mermap_tmpa_dim {0.2pt-\l__mermap_tmpb_dim}
\int_compare:nNnTF \l__mermap_scalebar_partitions_int = 1
{
- \pgfpathrectangle{\pgfpoint{0.2pt}{\l_tmpb_dim}}
- {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.4pt}}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{0.2pt}{\l__mermap_tmpb_dim}}
+ {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.4pt}}{\l__mermap_tmpa_dim}}
}
{
- \pgfpathrectangle{\pgfpoint{0.2pt}{\l_tmpb_dim}}
- {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{0.2pt}{\l__mermap_tmpb_dim}}
+ {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}}
}
- \int_while_do:nNnn \l_tmpa_int < \l__mermap_scalebar_partitions_int
+ \int_step_inline:nn { \l__mermap_scalebar_partitions_int-1 }
{
- \dim_set:Nn \l_tmpa_dim {-\l_tmpa_dim}
- \int_compare:nNnTF {\l_tmpa_int+1} = \l__mermap_scalebar_partitions_int
+ \dim_set:Nn \l__mermap_tmpa_dim {-\l__mermap_tmpa_dim}
+ \int_compare:nNnTF {##1+1} = \l__mermap_scalebar_partitions_int
{
- \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{\l_tmpb_dim}}
- {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{\l__mermap_tmpb_dim}}
+ {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}}
}
{
- \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{\l_tmpb_dim}}
- {\pgfpoint{\fp_to_dim:N\l_tmpb_fp}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{\l__mermap_tmpb_dim}}
+ {\pgfpoint{\fp_to_dim:N\l__mermap_tmpb_fp}{\l__mermap_tmpa_dim}}
}
- \int_incr:N \l_tmpa_int
}
}
{
- \int_set:Nn \l_tmpa_int {1}
- \dim_set:Nn \l_tmpa_dim {\l__mermap_scalebar_height_dim-0.4pt}
- \int_while_do:nNnn \l_tmpa_int < \l__mermap_scalebar_partitions_int
+ \dim_set:Nn \l__mermap_tmpa_dim {\l__mermap_scalebar_height_dim-0.4pt}
+ \int_step_inline:nnnn { 1 }{ 2 }{ \l__mermap_scalebar_partitions_int-1 }
{
- \int_compare:nNnTF {\l_tmpa_int+1} = \l__mermap_scalebar_partitions_int
+ \int_compare:nNnTF {##1+1} = \l__mermap_scalebar_partitions_int
{
- \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{0.2pt}}
- {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{0.2pt}}
+ {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}}
}
{
- \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{0.2pt}}
- {\pgfpoint{\fp_to_dim:N\l_tmpb_fp}{\l_tmpa_dim}}
+ \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{0.2pt}}
+ {\pgfpoint{\fp_to_dim:N\l__mermap_tmpb_fp}{\l__mermap_tmpa_dim}}
}
- \int_add:Nn \l_tmpa_int {2}
}
}
\__mermap_tikz_path_end:
@@ -2032,53 +2027,53 @@
\__mermap_new_marker_type:nn {pin}
{
- \tl_set:Nx \l_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp}
+ \tl_set:Nx \l__mermap_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp}
\path[fill=mrcmarkerfill,draw=none,fill~opacity=0.7]
- (0,0) -- (0.1,\l_tmpa_tl) -- (-0.1,\l_tmpa_tl) -- cycle;
+ (0,0) -- (0.1,\l__mermap_tmpa_tl) -- (-0.1,\l__mermap_tmpa_tl) -- cycle;
\node[fill=white,draw=none,text=mrcmarkertext,
above,font=\mrcmarkerfont,inner~sep=0.5mm,align=center,
line~width=0mm,xshift=\mrcmarkershift,
fill~opacity=0.7,text~opacity=1,xshift=0mm,mrcnodestyle,mrchyperpath]
- (pin_node) at (0,\l_tmpa_tl) {\mrcmarkercontents};
+ (pin_node) at (0,\l__mermap_tmpa_tl) {\mrcmarkercontents};
\path[draw=mrcmarkerdraw,fill=none,line~join=round,mrcpathstyle]
- (0,0) -- (0.1,\l_tmpa_tl) -- (pin_node.south~east) -- (pin_node.north~east)
+ (0,0) -- (0.1,\l__mermap_tmpa_tl) -- (pin_node.south~east) -- (pin_node.north~east)
-- (pin_node.north~west) -- (pin_node.south~west)
- -- (-0.1,\l_tmpa_tl) [line~join=bevel] -- cycle;
+ -- (-0.1,\l__mermap_tmpa_tl) [line~join=bevel] -- cycle;
}
\__mermap_new_marker_type:nn {pinflip}
{
- \tl_set:Nx \l_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp}
+ \tl_set:Nx \l__mermap_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp}
\path[fill=mrcmarkerfill,draw=none,fill~opacity=0.7]
- (0,0) -- (-0.1,-\l_tmpa_tl) -- (0.1,-\l_tmpa_tl) -- cycle;
+ (0,0) -- (-0.1,-\l__mermap_tmpa_tl) -- (0.1,-\l__mermap_tmpa_tl) -- cycle;
\node[fill=white,draw=none,text=mrcmarkertext,
below,font=\mrcmarkerfont,inner~sep=0.5mm,align=center,
line~width=0mm,xshift=\mrcmarkershift,
fill~opacity=0.7,text~opacity=1,xshift=0mm,mrcnodestyle,mrchyperpath]
- (pin_node) at (0,-\l_tmpa_tl) {\mrcmarkercontents};
+ (pin_node) at (0,-\l__mermap_tmpa_tl) {\mrcmarkercontents};
\path[draw=mrcmarkerdraw,fill=none,line~join=round,mrcpathstyle]
- (0,0) -- (-0.1,-\l_tmpa_tl) -- (pin_node.north~west) -- (pin_node.south~west)
+ (0,0) -- (-0.1,-\l__mermap_tmpa_tl) -- (pin_node.north~west) -- (pin_node.south~west)
-- (pin_node.south~east) -- (pin_node.north~east)
- -- (0.1,-\l_tmpa_tl) [line~join=bevel] -- cycle;
+ -- (0.1,-\l__mermap_tmpa_tl) [line~join=bevel] -- cycle;
}
\cs_new_nopar:Npn \__mermap_tikz_drop_path:n #1
{
- \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
- \tl_set:Nn \l_tmpb_tl {\fp_to_dim:n{\l__mermap_marker_radius_fp*0.552}}
+ \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
+ \tl_set:Nn \l__mermap_tmpb_tl {\fp_to_dim:n{\l__mermap_marker_radius_fp*0.552}}
\__mermap_tikz_path_begin:n
{
line~join=bevel,draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath
}
\pgfpathmoveto{\pgfpoint{0pt}{\fp_to_dim:n{-2*\l__mermap_marker_radius_fp-\l__mermap_marker_shift_fp}}}
- \pgfpathcurveto{\pgfpoint{\l_tmpb_tl}{-\l_tmpa_tl}}{\pgfpoint{\l_tmpa_tl}{-\l_tmpb_tl}}
- {\pgfpoint{\l_tmpa_tl}{0pt}}
- \pgfpathcurveto{\pgfpoint{\l_tmpa_tl}{\l_tmpb_tl}}{\pgfpoint{\l_tmpb_tl}{\l_tmpa_tl}}
- {\pgfpoint{0pt}{\l_tmpa_tl}}
- \pgfpathcurveto{\pgfpoint{-\l_tmpb_tl}{\l_tmpa_tl}}{\pgfpoint{-\l_tmpa_tl}{\l_tmpb_tl}}
- {\pgfpoint{-\l_tmpa_tl}{0pt}}
- \pgfpathcurveto{\pgfpoint{-\l_tmpa_tl}{-\l_tmpb_tl}}{\pgfpoint{-\l_tmpb_tl}{-\l_tmpa_tl}}
+ \pgfpathcurveto{\pgfpoint{\l__mermap_tmpb_tl}{-\l__mermap_tmpa_tl}}{\pgfpoint{\l__mermap_tmpa_tl}{-\l__mermap_tmpb_tl}}
+ {\pgfpoint{\l__mermap_tmpa_tl}{0pt}}
+ \pgfpathcurveto{\pgfpoint{\l__mermap_tmpa_tl}{\l__mermap_tmpb_tl}}{\pgfpoint{\l__mermap_tmpb_tl}{\l__mermap_tmpa_tl}}
+ {\pgfpoint{0pt}{\l__mermap_tmpa_tl}}
+ \pgfpathcurveto{\pgfpoint{-\l__mermap_tmpb_tl}{\l__mermap_tmpa_tl}}{\pgfpoint{-\l__mermap_tmpa_tl}{\l__mermap_tmpb_tl}}
+ {\pgfpoint{-\l__mermap_tmpa_tl}{0pt}}
+ \pgfpathcurveto{\pgfpoint{-\l__mermap_tmpa_tl}{-\l__mermap_tmpb_tl}}{\pgfpoint{-\l__mermap_tmpb_tl}{-\l__mermap_tmpa_tl}}
{\pgfpoint{0pt}{\fp_to_dim:n{-2*\l__mermap_marker_radius_fp-\l__mermap_marker_shift_fp}}}
\pgfpathclose
#1
@@ -2089,14 +2084,14 @@
{
\node[circle,inner~sep=0pt,font=\mrcmarkerfont,text=mrcmarkertext,mrcnodestyle]
{
- \hbox_set:Nn \l_tmpa_box {\mrcmarkercontents}
- \fp_compare:nNnT {\box_wd:N \l_tmpa_box} > {1.5*\l__mermap_marker_radius_fp}
+ \hbox_set:Nn \l__mermap_tmpa_box {\mrcmarkercontents}
+ \fp_compare:nNnT {\box_wd:N \l__mermap_tmpa_box} > {1.5*\l__mermap_marker_radius_fp}
{
- \box_resize_to_wd_and_ht:Nnn \l_tmpa_box
+ \box_resize_to_wd_and_ht:Nnn \l__mermap_tmpa_box
{\fp_to_dim:n {1.5*\l__mermap_marker_radius_fp}}
- {\box_ht:N \l_tmpa_box}
+ {\box_ht:N \l__mermap_tmpa_box}
}
- \box_use_drop:N \l_tmpa_box
+ \box_use_drop:N \l__mermap_tmpa_box
};
}
@@ -2153,22 +2148,22 @@
\__mermap_new_marker_type:nn {ringx}
{
- \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
+ \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
\path[draw=mrcmarkerdraw,very~thin]
- (45 \c_colon_str \l_tmpa_tl)--(225\c_colon_str \l_tmpa_tl)
- (135\c_colon_str \l_tmpa_tl)--(315\c_colon_str \l_tmpa_tl);
+ (45 \c_colon_str \l__mermap_tmpa_tl)--(225\c_colon_str \l__mermap_tmpa_tl)
+ (135\c_colon_str \l__mermap_tmpa_tl)--(315\c_colon_str \l__mermap_tmpa_tl);
\path[draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath,even~odd~rule]
- circle (\l_tmpa_tl) circle (\fp_to_dim:N\l__mermap_marker_inner_radius_fp);
+ circle (\l__mermap_tmpa_tl) circle (\fp_to_dim:N\l__mermap_marker_inner_radius_fp);
}
\__mermap_new_marker_type:nn {markx}
{
- \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
+ \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp}
\path[line~join=bevel,draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath]
- (0,0) -- (35 \c_colon_str \l_tmpa_tl) -- (55 \c_colon_str \l_tmpa_tl) -- cycle
- (0,0) -- (125 \c_colon_str \l_tmpa_tl) -- (145 \c_colon_str \l_tmpa_tl) -- cycle
- (0,0) -- (215 \c_colon_str \l_tmpa_tl) -- (235 \c_colon_str \l_tmpa_tl) -- cycle
- (0,0) -- (305 \c_colon_str \l_tmpa_tl) -- (325 \c_colon_str \l_tmpa_tl) -- cycle;
+ (0,0) -- (35 \c_colon_str \l__mermap_tmpa_tl) -- (55 \c_colon_str \l__mermap_tmpa_tl) -- cycle
+ (0,0) -- (125 \c_colon_str \l__mermap_tmpa_tl) -- (145 \c_colon_str \l__mermap_tmpa_tl) -- cycle
+ (0,0) -- (215 \c_colon_str \l__mermap_tmpa_tl) -- (235 \c_colon_str \l__mermap_tmpa_tl) -- cycle
+ (0,0) -- (305 \c_colon_str \l__mermap_tmpa_tl) -- (325 \c_colon_str \l__mermap_tmpa_tl) -- cycle;
}
@@ -2272,9 +2267,14 @@
\fp_new:N \l__mermap_delta_lambda_fp
\fp_new:N \l__mermap_delta_phi_fp
\fp_new:N \l__mermap_psi_fp
+\fp_new:N \l__mermap_sin_psi_fp
+\fp_new:N \l__mermap_t_psi_fp
+\fp_new:N \l__mermap_t_fp
\fp_new:N \l__mermap_t_x_fp
\fp_new:N \l__mermap_t_y_fp
\fp_new:N \l__mermap_t_z_fp
+\fp_const:Nn \c__mermap_linearization_threshold_fp { 10e-9 }
+\bool_new:N \l__mermap_linearization_bool
\int_new:N \l__mermap_samples_int
@@ -2309,41 +2309,61 @@
}
-\cs_new:Npn \__mermap_draw_orthodrome:nnnnn #1#2#3#4#5
+\cs_new_protected:Npn \__mermap_draw_orthodrome:nnnnn #1#2#3#4#5
{
\__mermap_tikz_path_begin:n { draw,mermap_every_route,#1 }
- \fp_set:Nn \l__mermap_a_x_fp { cosd(#3)*cosd(#2) }
- \fp_set:Nn \l__mermap_a_y_fp { sind(#3)*cosd(#2) }
- \fp_set:Nn \l__mermap_a_z_fp { sind(#2) }
- \fp_set:Nn \l__mermap_b_x_fp { cosd(#5)*cosd(#4) }
- \fp_set:Nn \l__mermap_b_y_fp { sind(#5)*cosd(#4) }
- \fp_set:Nn \l__mermap_b_z_fp { sind(#4) }
-
- \fp_set:Nn \l_tmpa_fp { sind(#2)*sind(#4) + cosd(#2)*cosd(#4)*cosd(#5-(#3)) }
- \fp_set:Nn \l__mermap_psi_fp { acosd(\l_tmpa_fp) }
- \fp_set:Nn \l_tmpb_fp { sind(\l__mermap_psi_fp) }
-
- \fp_set:Nn \l__mermap_b_x_fp { (\l__mermap_b_x_fp - \l_tmpa_fp*\l__mermap_a_x_fp)/\l_tmpb_fp }
- \fp_set:Nn \l__mermap_b_y_fp { (\l__mermap_b_y_fp - \l_tmpa_fp*\l__mermap_a_y_fp)/\l_tmpb_fp }
- \fp_set:Nn \l__mermap_b_z_fp { (\l__mermap_b_z_fp - \l_tmpa_fp*\l__mermap_a_z_fp)/\l_tmpb_fp }
-
- \__mermap_pgf_moveto_point:nn {#2}{#3}
- \int_set:Nn \l_tmpa_int {1}
- \int_until_do:nNnn \l_tmpa_int > \l__mermap_samples_int
- {
- \fp_set:Nn \l_tmpa_fp { \l__mermap_psi_fp*\l_tmpa_int/\l__mermap_samples_int }
- \fp_set:Nn \l_tmpb_fp { sind(\l_tmpa_fp) }
- \fp_set:Nn \l_tmpa_fp { cosd(\l_tmpa_fp) }
- \fp_set:Nn \l__mermap_t_x_fp { \l_tmpa_fp*\l__mermap_a_x_fp + \l_tmpb_fp*\l__mermap_b_x_fp }
- \fp_set:Nn \l__mermap_t_y_fp { \l_tmpa_fp*\l__mermap_a_y_fp + \l_tmpb_fp*\l__mermap_b_y_fp }
- \fp_set:Nn \l__mermap_t_z_fp { \l_tmpa_fp*\l__mermap_a_z_fp + \l_tmpb_fp*\l__mermap_b_z_fp }
- \pgfpathlineto{\__mermap_unit_sphere_point:nnn {\l__mermap_t_x_fp}{\l__mermap_t_y_fp}{\l__mermap_t_z_fp}}
- \int_incr:N \l_tmpa_int
+ \__mermap_setup_orthodrome:nnnn { #2 }{ #3 }{ #4 }{ #5 }
+ \__mermap_pgf_moveto_point:nn { #2 }{ #3 }
+ \int_step_inline:nn { \l__mermap_samples_int }
+ {
+ \__mermap_point_on_orthodrome:n { ##1/\l__mermap_samples_int }
+ \__mermap_pgf_lineto_point:nn{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp }
}
\__mermap_tikz_path_end:
}
+\cs_new_protected:Npn \__mermap_setup_orthodrome:nnnn #1#2#3#4
+ {
+ \fp_set:Nn \l__mermap_a_x_fp { cosd(#2)*cosd(#1) }
+ \fp_set:Nn \l__mermap_a_y_fp { sind(#2)*cosd(#1) }
+ \fp_set:Nn \l__mermap_a_z_fp { sind(#1) }
+
+ \fp_set:Nn \l__mermap_b_x_fp { cosd(#4)*cosd(#3) }
+ \fp_set:Nn \l__mermap_b_y_fp { sind(#4)*cosd(#3) }
+ \fp_set:Nn \l__mermap_b_z_fp { sind(#3) }
+
+ \fp_set:Nn \l__mermap_psi_fp { acosd( sind(#1)*sind(#3) + cosd(#1)*cosd(#3)*cosd(#4-(#2)) ) }
+ \fp_set:Nn \l__mermap_sin_psi_fp { sind(\l__mermap_psi_fp) }
+
+ \bool_set:Nn \l__mermap_linearization_bool { \fp_compare_p:nNn \l__mermap_psi_fp < \c__mermap_linearization_threshold_fp }
+ }
+
+
+\cs_new_protected:Npn \__mermap_point_on_orthodrome:n #1
+ {
+ \fp_set:Nn \l__mermap_t_fp { #1 }
+
+ \bool_if:NTF \l__mermap_linearization_bool
+ {
+ \fp_set:Nn \l__mermap_tmpa_fp { 1 - \l__mermap_t_fp }
+ \fp_set_eq:NN \l__mermap_tmpb_fp \l__mermap_t_fp
+ }
+ {
+ \fp_set:Nn \l__mermap_t_psi_fp { \l__mermap_t_fp * \l__mermap_psi_fp }
+ \fp_set:Nn \l__mermap_tmpa_fp { sind( \l__mermap_psi_fp - \l__mermap_t_psi_fp ) / \l__mermap_sin_psi_fp }
+ \fp_set:Nn \l__mermap_tmpb_fp { sind( \l__mermap_t_psi_fp ) / \l__mermap_sin_psi_fp }
+ }
+
+ \fp_set:Nn \l__mermap_t_x_fp { \l__mermap_tmpa_fp*\l__mermap_a_x_fp + \l__mermap_tmpb_fp*\l__mermap_b_x_fp }
+ \fp_set:Nn \l__mermap_t_y_fp { \l__mermap_tmpa_fp*\l__mermap_a_y_fp + \l__mermap_tmpb_fp*\l__mermap_b_y_fp }
+ \fp_set:Nn \l__mermap_t_z_fp { \l__mermap_tmpa_fp*\l__mermap_a_z_fp + \l__mermap_tmpb_fp*\l__mermap_b_z_fp }
+
+ \fp_set:Nn \l__mermap_cs_lat_fp { asind(\l__mermap_t_z_fp) }
+ \fp_set:Nn \l__mermap_cs_lon_fp { sign(\l__mermap_t_y_fp)*acosd(\l__mermap_t_x_fp/sqrt(\l__mermap_t_x_fp^2+\l__mermap_t_y_fp^2)) }
+ }
+
+
\NewDocumentCommand \mrcdraworthodrome { O{} mmmm }
{
\__mermap_draw_orthodrome:nnnnn {#1}{#2}{#3}{#4}{#5}
@@ -2392,11 +2412,11 @@
\fp_set:Nn \l__mermap_delta_lambda_fp {(#4-(#2))/180*pi}
\fp_compare:nNnTF {abs(\l__mermap_delta_phi_fp)} < {1e-5}
{
- \fp_set:Nn \l_tmpa_fp { tand(#1) }
- \fp_set:Nn \l_tmpb_fp { \l__mermap_delta_lambda_fp*cosd(#1)
- /( 1 + (\l_tmpa_fp + (1+2*\l_tmpa_fp*\l_tmpa_fp)*\l__mermap_delta_phi_fp/3)*\l__mermap_delta_phi_fp/2 ) }
+ \fp_set:Nn \l__mermap_tmpa_fp { tand(#1) }
+ \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_delta_lambda_fp*cosd(#1)
+ /( 1 + (\l__mermap_tmpa_fp + (1+2*\l__mermap_tmpa_fp*\l__mermap_tmpa_fp)*\l__mermap_delta_phi_fp/3)*\l__mermap_delta_phi_fp/2 ) }
\fp_set:Nn \l__mermap_result_fp {
- sqrt( \l__mermap_delta_phi_fp*\l__mermap_delta_phi_fp + \l_tmpb_fp*\l_tmpb_fp ) }
+ sqrt( \l__mermap_delta_phi_fp*\l__mermap_delta_phi_fp + \l__mermap_tmpb_fp*\l__mermap_tmpb_fp ) }
}
{
\fp_set:Nn \l__mermap_result_fp { abs(\l__mermap_delta_phi_fp)
@@ -2427,6 +2447,290 @@
}
+\NewDocumentCommand \mrcNPfromOrthoFraction { mmmmmm }
+ {
+ \__mermap_setup_orthodrome:nnnn { #2 }{ #3 }{ #4 }{ #5 }
+ \__mermap_point_on_orthodrome:n { #6 }
+ \__mermap_set_named_position { #1 }{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp }
+ }
+
+\NewDocumentCommand \mrcNPfromOrthoFractionNamed { mmmm }
+ {
+ \__mermap_setup_orthodrome:nnnn { \mrcNPlat{#2} }{ \mrcNPlon{#2} }{ \mrcNPlat{#3} }{ \mrcNPlon{#3} }
+ \__mermap_point_on_orthodrome:n { #4 }
+ \__mermap_set_named_position { #1 }{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp }
+ }
+
+\NewDocumentCommand \mrcNPfromOrthoDistance { mmmmmm }
+ {
+ \__mermap_ortho_distance:nnnn { #2 }{ #3 }{ #4 }{ #5 }
+ \fp_compare:nNnTF \l__mermap_result_fp > { 0.001 }
+ {
+ \__mermap_setup_orthodrome:nnnn { #2 }{ #3 }{ #4 }{ #5 }
+ \__mermap_point_on_orthodrome:n { #6 / \l__mermap_result_fp }
+ \__mermap_set_named_position { #1 }{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp }
+ }
+ {
+ \__mermap_set_named_position { #1 }{ #2 }{ #3 }
+ }
+ }
+
+\NewDocumentCommand \mrcNPfromOrthoDistanceNamed { mmmm }
+ {
+ \__mermap_ortho_distance:nnnn { \mrcNPlat{#2} }{ \mrcNPlon{#2} }{ \mrcNPlat{#3} }{ \mrcNPlon{#3} }
+ \fp_compare:nNnTF \l__mermap_result_fp > { 0.001 }
+ {
+ \__mermap_setup_orthodrome:nnnn { \mrcNPlat{#2} }{ \mrcNPlon{#2} }{ \mrcNPlat{#3} }{ \mrcNPlon{#3} }
+ \__mermap_point_on_orthodrome:n { #4 / \l__mermap_result_fp }
+ \__mermap_set_named_position { #1 }{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp }
+ }
+ {
+ \__mermap_set_named_position { #1 }{ \mrcNPlat{#2} }{ \mrcNPlon{#2} }
+ }
+ }
+
+
+%---- animations ---------------------------------------------------------------
+
+\bool_new:N \l__mermap_anim_drop_first_frame_bool
+\bool_new:N \l__mermap_anim_drop_last_frame_bool
+
+\fp_new:N \l__mermap_anim_a_lat_fp
+\fp_new:N \l__mermap_anim_a_lon_fp
+\fp_new:N \l__mermap_anim_a_scaledenom_fp
+\fp_new:N \l__mermap_anim_a_time_fp
+\fp_new:N \l__mermap_anim_b_lat_fp
+\fp_new:N \l__mermap_anim_b_lon_fp
+\fp_new:N \l__mermap_anim_b_scaledenom_fp
+\fp_new:N \l__mermap_anim_b_time_fp
+\fp_new:N \l_mermap_anim_lat_fp
+\fp_new:N \l_mermap_anim_lon_fp
+\fp_new:N \l_mermap_anim_scaledenom_fp
+\fp_new:N \l_mermap_anim_time_fp
+
+\int_new:N \l__mermap_anim_final_frame_int
+\int_new:N \l__mermap_anim_frames_int
+\int_new:N \l__mermap_anim_start_frame_int
+\int_new:N \l_mermap_anim_frame_int
+
+\seq_new:N \l__mermap_anim_scaledenom_seq
+
+\tl_new:N \l__mermap_anim_timescale_tl
+\tl_new:N \l__mermap_anim_timewarp_tl
+
+
+\NewExpandableDocumentCommand \mrcTimewarpIdentity { m }
+ {
+ #1
+ }
+
+\NewExpandableDocumentCommand \mrcTimewarpSlowStart { m m }
+ {
+ (#2)^(#1)
+ }
+
+\NewExpandableDocumentCommand \mrcTimewarpSlowFinal { m m }
+ {
+ 1 - (1-#2)^(#1)
+ }
+
+\NewExpandableDocumentCommand \mrcTimewarpSlowStartFinal { m m }
+ {
+ %1 - (1-#2)^(#1)
+ #2 <= 0.5
+ ? (2*(#2))^(#1) / 2
+ : 1 - (2-2*(#2))^(#1) / 2
+ }
+
+
+\NewDocumentEnvironment { mrcAnimation }{ m +b }
+ {
+ \keys_set:nn { mermap/anim }{ #1 }
+
+ \__mermap_anim_autocorrect_scaledenom_seq:
+ \int_compare:nNnT \l__mermap_anim_frames_int < 2
+ {
+ \int_set:Nn \l__mermap_anim_frames_int { 2 }
+ }
+ \bool_if:NTF \l__mermap_anim_drop_first_frame_bool
+ {
+ \int_set:Nn \l__mermap_anim_start_frame_int { 2 }
+ }
+ {
+ \int_set:Nn \l__mermap_anim_start_frame_int { 1 }
+ }
+ \bool_if:NTF \l__mermap_anim_drop_last_frame_bool
+ {
+ \int_set:Nn \l__mermap_anim_final_frame_int { \l__mermap_anim_frames_int-1 }
+ }
+ {
+ \int_set:Nn \l__mermap_anim_final_frame_int { \l__mermap_anim_frames_int }
+ }
+
+ \__mermap_setup_orthodrome:nnnn { \l__mermap_anim_a_lat_fp }{ \l__mermap_anim_a_lon_fp }
+ { \l__mermap_anim_b_lat_fp }{ \l__mermap_anim_b_lon_fp }
+
+ \__mermap_anim_pop_time_scale:NN \l__mermap_anim_a_time_fp \l__mermap_anim_a_scaledenom_fp
+ \__mermap_anim_pop_time_scale:NN \l__mermap_anim_b_time_fp \l__mermap_anim_b_scaledenom_fp
+
+ \int_step_variable:nnNn { \l__mermap_anim_start_frame_int }{ \l__mermap_anim_final_frame_int } \l_mermap_anim_frame_int
+ {
+ \fp_set:Nn \l_mermap_anim_time_fp { (\l_mermap_anim_frame_int-1)/(\l__mermap_anim_frames_int-1) }
+ \fp_set:Nn \l_mermap_anim_time_fp { \l__mermap_anim_timewarp_tl { \l_mermap_anim_time_fp } }
+
+ \__mermap_point_on_orthodrome:n { \l_mermap_anim_time_fp }
+
+ \fp_set_eq:NN \l_mermap_anim_lat_fp \l__mermap_cs_lat_fp
+ \fp_set_eq:NN \l_mermap_anim_lon_fp \l__mermap_cs_lon_fp
+ \__mermap_set_named_position{ AnimNP }{ \l_mermap_anim_lat_fp }{ \l_mermap_anim_lon_fp }
+
+ \fp_while_do:nNnn \l_mermap_anim_time_fp > \l__mermap_anim_b_time_fp
+ {
+ \fp_set_eq:NN \l__mermap_anim_a_time_fp \l__mermap_anim_b_time_fp
+ \fp_set_eq:NN \l__mermap_anim_a_scaledenom_fp \l__mermap_anim_b_scaledenom_fp
+ \__mermap_anim_pop_time_scale:NN \l__mermap_anim_b_time_fp \l__mermap_anim_b_scaledenom_fp
+ }
+ \fp_set:Nn \l_mermap_anim_scaledenom_fp
+ {
+ round ( exp (
+ ln(\l__mermap_anim_a_scaledenom_fp) +
+ ( ln(\l__mermap_anim_b_scaledenom_fp)-ln(\l__mermap_anim_a_scaledenom_fp) ) *
+ ( \l_mermap_anim_time_fp-\l__mermap_anim_a_time_fp ) / ( \l__mermap_anim_b_time_fp-\l__mermap_anim_a_time_fp )
+ ) )
+ }
+
+ #2
+ }
+ }{}
+
+
+\cs_new_protected:Npn \__mermap_anim_autocorrect_scaledenom_seq:
+ {
+ \seq_get_left:NN \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl
+ \bool_lazy_any:nTF
+ {
+ { \seq_if_empty_p:N \l__mermap_anim_scaledenom_seq }
+ { \tl_if_empty_p:N \l__mermap_anim_timescale_tl }
+ { \quark_if_no_value_p:N \l__mermap_anim_timescale_tl }
+ }
+ {
+ \seq_set_split:Nnn \l__mermap_anim_scaledenom_seq { - }{ 0/25000 - 1/25000 },
+ }
+ {
+ \fp_compare:nNnF { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl } = 0
+ {
+ \seq_put_left:Ne \l__mermap_anim_scaledenom_seq { 0 / \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl }
+ }
+ }
+ \seq_get_right:NNF \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl
+ {
+ \msg_error:nn{ mercatormap }{ anim-scaledenom-invalid }
+ }
+ \fp_compare:nNnF { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl } = 1
+ {
+ \seq_put_right:Ne \l__mermap_anim_scaledenom_seq { 1 / \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl }
+ }
+ \fp_set:Nn \l__mermap_anim_a_time_fp { -1 }
+ \seq_map_inline:Nn \l__mermap_anim_scaledenom_seq
+ {
+ \fp_set:Nn \l__mermap_anim_b_time_fp { \__mermap_anim_use_time:n { ##1 } }
+ \fp_compare:nNnTF \l__mermap_anim_a_time_fp < \l__mermap_anim_b_time_fp
+ {
+ \fp_set_eq:NN \l__mermap_anim_a_time_fp \l__mermap_anim_b_time_fp
+ }
+ {
+ \msg_error:nn{ mercatormap }{ anim-scaledenom-invalid }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__mermap_anim_pop_time_scale:NN #1#2
+ {
+ \seq_pop_left:NN \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl
+ \fp_set:Nn #1 { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl }
+ \fp_set:Nn #2 { \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl }
+ }
+
+\msg_new:nnnn{ mercatormap }{ anim-scaledenom-invalid }
+ { The~animation~scale~denominator~sequence~is~invalid. }
+ {
+ Check~\seq_use:Nn \l__mermap_anim_scaledenom_seq { ~-~ }~with~the~documentation.~
+ Time~values~are~not~strictly~monotonically~increasing.
+ }
+
+\cs_new_protected_nopar:Npn \__mermap_anim_set_position:w #1 #2 / #3 \q_stop
+ {
+ \fp_set:cn { l__mermap_anim_#1_lat_fp }{ #2 }
+ \fp_set:cn { l__mermap_anim_#1_lon_fp }{ #3 }
+ }
+
+\cs_new_nopar:Npn \__mermap_anim_use_time:w #1 / #2 \q_stop
+ {
+ #1
+ }
+\cs_new_nopar:Npn \__mermap_anim_use_time:n #1
+ {
+ \__mermap_anim_use_time:w #1 \q_stop
+ }
+\cs_generate_variant:Nn \__mermap_anim_use_time:n { o }
+
+\cs_new_nopar:Npn \__mermap_anim_use_scale:w #1 / #2 \q_stop
+ {
+ #2
+ }
+\cs_new_nopar:Npn \__mermap_anim_use_scale:n #1
+ {
+ \__mermap_anim_use_scale:w #1 \q_stop
+ }
+\cs_generate_variant:Nn \__mermap_anim_use_scale:n { o }
+
+\keys_define:nn { mermap/anim }
+ {
+ start-position .code:n = \__mermap_anim_set_position:w { a } #1 \q_stop,
+ final-position .code:n = \__mermap_anim_set_position:w { b } #1 \q_stop,
+ position .meta:n = { start-position = #1, final-position = #1 },
+ named-start-position .code:n =
+ {
+ \fp_set:Nn \l__mermap_anim_a_lat_fp { \mrcNPlat{ #1 } }
+ \fp_set:Nn \l__mermap_anim_a_lon_fp { \mrcNPlon{ #1 } }
+ },
+ named-final-position .code:n =
+ {
+ \fp_set:Nn \l__mermap_anim_b_lat_fp { \mrcNPlat{ #1 } }
+ \fp_set:Nn \l__mermap_anim_b_lon_fp { \mrcNPlon{ #1 } }
+ },
+ named-position .meta:n = { named-start-position = #1, named-final-position = #1 },
+ frames .int_set:N = \l__mermap_anim_frames_int,
+ drop-first-frame .bool_set:N = \l__mermap_anim_drop_first_frame_bool,
+ drop-last-frame .bool_set:N = \l__mermap_anim_drop_last_frame_bool,
+ drop-no-frame .meta:n = { drop-first-frame=false, drop-last-frame=false },
+ scale-denominators .code:n = \seq_set_split:Nnn \l__mermap_anim_scaledenom_seq { - }{ #1 },
+ common-scale-denominator .meta:n = { scale-denominators = 0/#1 - 1/#1 },
+ timewarp .tl_set:N = \l__mermap_anim_timewarp_tl,
+ timewarp-identity .meta:n = { timewarp = \mrcTimewarpIdentity },
+ timewarp-slow-start .meta:n = { timewarp = \mrcTimewarpSlowStart{#1} },
+ timewarp-slow-start .default:n = 2,
+ timewarp-slow-final .meta:n = { timewarp = \mrcTimewarpSlowFinal{#1} },
+ timewarp-slow-final .default:n = 2,
+ timewarp-slow-start-final .meta:n = { timewarp = \mrcTimewarpSlowStartFinal{#1} },
+ timewarp-slow-start-final .default:n = 2,
+ }
+
+\keys_set:nn { mermap/anim }
+ {
+ position = 51.4779 / 0,
+ frames = 20,
+ drop-no-frame,
+ common-scale-denominator = 25000,
+ timewarp-identity,
+ }
+
+\NewExpandableDocumentCommand\mrcAnimFrame{}{\int_to_arabic:n \l_mermap_anim_frame_int}
+\NewExpandableDocumentCommand\mrcAnimTime{}{\fp_to_decimal:N \l_mermap_anim_time_fp}
+\NewExpandableDocumentCommand\mrcAnimScaleDenom{}{\fp_to_decimal:N \l_mermap_anim_scaledenom_fp}
+\NewExpandableDocumentCommand\mrcAnimLatitude{}{\fp_to_decimal:N \l_mermap_anim_lat_fp}
+\NewExpandableDocumentCommand\mrcAnimLongitude{}{\fp_to_decimal:N \l_mermap_anim_lon_fp}
+
%---- supplier -----------------------------------------------------------------
diff --git a/macros/latex/contrib/mercatormap/mercatormap.tex b/macros/latex/contrib/mercatormap/mercatormap.tex
index 882587a3d2..eb73a10ccf 100644
--- a/macros/latex/contrib/mercatormap/mercatormap.tex
+++ b/macros/latex/contrib/mercatormap/mercatormap.tex
@@ -2,11 +2,11 @@
% !TeX encoding=UTF-8
% !TeX spellcheck=en_US
%%
-%% The LaTeX package mercatormap - version 1.02 (2020/08/06)
+%% The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
%% mercatormap.tex: Manual
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -32,8 +32,8 @@
% The following personal API-keys are needed for compilation
% \mrcsetapikey{thunderforest}{YOUR-API-KEY} % registered key
-\def\version{1.02}%
-\def\datum{2020/08/06}%
+\def\version{1.1.0}%
+\def\datum{2024/08/01}%
\mrcactivatescript% activates Python script
@@ -54,9 +54,14 @@
\tikzexternaldisable% for final version
\tcbset{shield externalize}
-\nocite{Sturm:2020,package:tikz,package:xparse,package:siunitx,package:expl3}
+\nocite{Sturm:2020,package:tikz,package:siunitx}
-\pdfsuppresswarningpagegroup=1
+\ExplSyntaxOn
+\cs_if_exist:NT \pdfsuppresswarningpagegroup
+ {
+ \pdfsuppresswarningpagegroup=1
+ }
+\ExplSyntaxOff
%\includeonly{mercatormap.doc.intro}
%\includeonly{mercatormap.doc.examples}
@@ -67,8 +72,8 @@
%\includeonly{mercatormap.doc.marker}
%\includeonly{mercatormap.doc.routes}
%\includeonly{mercatormap.doc.orthodromes}
+%\includeonly{mercatormap.doc.animations}
%\includeonly{mercatormap.doc.limitations}
-%\includeonly{mercatormap.doc.versionhistory}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
@@ -83,8 +88,8 @@
\include{mercatormap.doc.marker}
\include{mercatormap.doc.routes}
\include{mercatormap.doc.orthodromes}
+\include{mercatormap.doc.animations}
\include{mercatormap.doc.limitations}
-\include{mercatormap.doc.versionhistory}
\clearpage
\phantomsection
diff --git a/macros/latex/contrib/mercatormap/mercatorpy.def b/macros/latex/contrib/mercatormap/mercatorpy.def
index 670d8fca3b..047dd2267c 100644
--- a/macros/latex/contrib/mercatormap/mercatorpy.def
+++ b/macros/latex/contrib/mercatormap/mercatorpy.def
@@ -1,19 +1,19 @@
-\begin{filecontents*}[overwrite]{maptiles.texpy}
+\begin{filecontents}[force,noheader,nowarn]{maptiles.texpy}
"""
-The LaTeX package mercatormap - version 1.02 (2020/08/06)
+The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
maptiles.texpy: Python script for map tile download
-------------------------------------------------------------------------------------------
-Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
-------------------------------------------------------------------------------------------
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 in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008-05-04 or later.
This work has the LPPL maintenance status `author-maintained'.
@@ -28,7 +28,7 @@ from pathlib import Path
from PIL import Image
-packageversion = '1.02 (2020/08/06)'
+packageversion = '1.1.0 (2024/08/01)'
def gd(x):
@@ -531,5 +531,5 @@ if __name__ == '__main__':
print('No url for download given')
mapdef.save_map(args.definition, tiles_success, merge_success, wms_success)
-\end{filecontents*}
+\end{filecontents}
diff --git a/macros/latex/contrib/mercatormap/mercatorsupplier.def b/macros/latex/contrib/mercatormap/mercatorsupplier.def
index 1bf7866b7a..36252c83a2 100644
--- a/macros/latex/contrib/mercatormap/mercatorsupplier.def
+++ b/macros/latex/contrib/mercatormap/mercatorsupplier.def
@@ -1,15 +1,15 @@
-%% The LaTeX package mercatormap - version 1.02 (2020/08/06)
+%% The LaTeX package mercatormap - version 1.1.0 (2024/08/01)
%% mercatorsupplier.def: predefined map supplier list
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% 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 in
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
@@ -46,7 +46,7 @@
attribution = {
Kartendaten:~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap}
\ Mitwirkende,~SRTM\nobreakspace\textbar\nobreakspace
- Kartendarstellung:~\textcopyright\nobreakspace\href{http://opentopomap.org/}{OpenTopoMap}
+ Kartendarstellung:~\textcopyright\nobreakspace\href{https://opentopomap.org/}{OpenTopoMap}
\ (\href{https://creativecommons.org/licenses/by-sa/3.0/}{CC-BY-SA})
},
attribution~print = {
@@ -61,12 +61,12 @@
{
__attribution_topplusopen .meta:nn = {mermap/supply} {
attribution = {
- \textcopyright\nobreakspace\href{http://www.bkg.bund.de}{Bundesamt~f\mrcumlaut{u}r~Kartographie~und~Geod\mrcumlaut{a}sie}\nobreakspace\the\year,
- \ \href{http://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}{Datenquellen}
+ Kartendarstellung:\nobreakspace\textcopyright\nobreakspace\href{https://www.bkg.bund.de}{BKG\nobreakspace(\the\year)},
+ \ \href{https://sgx.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}{Datenquellen}
},
attribution~print = {
- \textcopyright\nobreakspace Bundesamt~f\mrcumlaut{u}r~Kartographie~und~Geod\mrcumlaut{a}sie\nobreakspace\the\year,
- \ Datenquellen:~\detokenize{http://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}
+ \textcopyright\nobreakspace BKG\nobreakspace(\the\year),
+ \ Datenquellen:~\detokenize{https://sgx.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}
}
}
}
@@ -85,29 +85,121 @@
basename = tiles/tpo_web_grau,
}
-\cs_new:Npn \__mermap_new_supply_source_topplusopen:n #1
+\__mermap_new_supply_source:nn { topplusopen~web~light }
+ {
+ url = {https://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/web_light/default/WEBMERCATOR/{z}/{y}/{x}.png},
+ __attribution_topplusopen,
+ basename = tiles/tpo_web_light,
+ }
+
+\__mermap_new_supply_source:nn { topplusopen~web~light~grau }
+ {
+ url = {https://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/web_light_grau/default/WEBMERCATOR/{z}/{y}/{x}.png},
+ __attribution_topplusopen,
+ basename = tiles/tpo_web_light_grau,
+ }
+
+
+\cs_new:Npn \__mermap_new_supply_source_topplusopen:nn #1#2
{
\keys_define:nn { mermap/supply/_source }
{
topplusopen~#1 .meta:nn = {mermap/supply}{
- url = {https://sgx.geodatenzentrum.de/wms_topplus_open?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png},
+ url = {https://sgx.geodatenzentrum.de/wms_topplus_open_#2?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png},
__attribution_topplusopen,
basename = tiles/tpo,
},
topplusopen~#1~grau .meta:nn = {mermap/supply}{
- url = {https://sgx.geodatenzentrum.de/wms_topplus_open?service=wms&version=1.3.0&request=GetMap&Layers=#1_grau&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png},
+ url = {https://sgx.geodatenzentrum.de/wms_topplus_open_#2?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=grau&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png},
__attribution_topplusopen,
basename = tiles/tpo,
},
}
}
-\__mermap_new_supply_source_topplusopen:n { p5 }
-\__mermap_new_supply_source_topplusopen:n { p10 }
-\__mermap_new_supply_source_topplusopen:n { p17.5 }
-\__mermap_new_supply_source_topplusopen:n { p25 }
-\__mermap_new_supply_source_topplusopen:n { p50 }
-\__mermap_new_supply_source_topplusopen:n { p100 }
-\__mermap_new_supply_source_topplusopen:n { p250 }
+\__mermap_new_supply_source_topplusopen:nn { p5 }{ p5 }
+\__mermap_new_supply_source_topplusopen:nn { p10 }{ p10 }
+\__mermap_new_supply_source_topplusopen:nn { p17.5 }{ p17 }
+\__mermap_new_supply_source_topplusopen:nn { p25 }{ p25 }
+\__mermap_new_supply_source_topplusopen:nn { p50 }{ p50 }
+\__mermap_new_supply_source_topplusopen:nn { p100 }{ p100 }
+\__mermap_new_supply_source_topplusopen:nn { p250 }{ p250 }
+
+
+\keys_define:nn { mermap/supply }
+ {
+ __attribution_thunderforest .meta:nn = {mermap/supply} {
+ attribution = {
+ Maps~\textcopyright\nobreakspace\href{https://www.thunderforest.com/}{Thunderforest},
+ \ Data~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap~contributors}
+ },
+ attribution~print = {
+ Maps~\textcopyright\nobreakspace www.thunderforest.com,
+ \ Data~\textcopyright\nobreakspace www.osm.org/copyright
+ }
+ }
+ }
+\__mermap_new_supply_source:nn { thunderforest~opencyclemap }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/opencyclemap,
+ }
+\__mermap_new_supply_source:nn { thunderforest~transport }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/transport,
+ }
+\__mermap_new_supply_source:nn { thunderforest~landscape }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/landscape,
+ }
+\__mermap_new_supply_source:nn { thunderforest~outdoors }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/outdoors,
+ }
+\__mermap_new_supply_source:nn { thunderforest~atlas }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/atlas,
+ }
+\__mermap_new_supply_source:nn { thunderforest~transport-dark }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/transport-dark,
+ }
+\__mermap_new_supply_source:nn { thunderforest~spinal-map }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/spinal-map,
+ }
+\__mermap_new_supply_source:nn { thunderforest~pioneer }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/pioneer,
+ }
+\__mermap_new_supply_source:nn { thunderforest~mobile-atlas }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/mobile-atlas,
+ }
+\__mermap_new_supply_source:nn { thunderforest~neighbourhood }
+ {
+ url~with~api~key = {https://tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
+ __attribution_thunderforest,
+ basename = tiles/neighbourhood,
+ }
+
+
%% openrouteservice mapsurfer is DISCONTINUED after June 2020
%% Therefore, the following source is DEPRECATED and will be removed in future
@@ -127,7 +219,7 @@
basename = tiles/mapsurfer,
}
-\keys_define:nn { mermap/supply }
+\keys_define:nn { mermap/supply }% DISCONTINUED after July 2023 and DEPRECATED
{
__attribution_stamen .meta:nn = {mermap/supply} {
attribution = {
@@ -144,67 +236,67 @@
}
}
}
-\__mermap_new_supply_source:nn { stamen~terrain }
+\__mermap_new_supply_source:nn { stamen~terrain }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/terrain,
}
-\__mermap_new_supply_source:nn { stamen~terrain-background }
+\__mermap_new_supply_source:nn { stamen~terrain-background }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-background/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/terrain-background,
}
-\__mermap_new_supply_source:nn { stamen~terrain-labels }
+\__mermap_new_supply_source:nn { stamen~terrain-labels }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-labels/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/terrain-labels,
}
-\__mermap_new_supply_source:nn { stamen~terrain-lines }
+\__mermap_new_supply_source:nn { stamen~terrain-lines }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-lines/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/terrain-lines,
}
-\__mermap_new_supply_source:nn { stamen~toner }
+\__mermap_new_supply_source:nn { stamen~toner }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner,
}
-\__mermap_new_supply_source:nn { stamen~toner-lite }
+\__mermap_new_supply_source:nn { stamen~toner-lite }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner-lite,
}
-\__mermap_new_supply_source:nn { stamen~toner-hybrid }
+\__mermap_new_supply_source:nn { stamen~toner-hybrid }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-hybrid/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner-hybrid,
}
-\__mermap_new_supply_source:nn { stamen~toner-background }
+\__mermap_new_supply_source:nn { stamen~toner-background }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-background/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner-background,
}
-\__mermap_new_supply_source:nn { stamen~toner-labels }
+\__mermap_new_supply_source:nn { stamen~toner-labels }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner-labels,
}
-\__mermap_new_supply_source:nn { stamen~toner-lines }
+\__mermap_new_supply_source:nn { stamen~toner-lines }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-lines/{z}/{x}/{y}.png},
__attribution_stamen,
basename = tiles/toner-lines,
}
-\__mermap_new_supply_source:nn { stamen~watercolor }
+\__mermap_new_supply_source:nn { stamen~watercolor }% DISCONTINUED after July 2023 and DEPRECATED
{
url = {https://stamen-tiles-a.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png},
attribution = {
@@ -221,72 +313,3 @@
},
basename = tiles/watercolor,
}
-
-\keys_define:nn { mermap/supply }
- {
- __attribution_thunderforest .meta:nn = {mermap/supply} {
- attribution = {
- Maps~\textcopyright\nobreakspace\href{https://www.thunderforest.com/}{Thunderforest},
- \ Data~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap~contributors}
- },
- attribution~print = {
- Maps~\textcopyright\nobreakspace www.thunderforest.com,
- \ Data~\textcopyright\nobreakspace www.osm.org/copyright
- }
- }
- }
-\__mermap_new_supply_source:nn { thunderforest~opencyclemap }
- {
- url~with~api~key = {https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/opencyclemap,
- }
-\__mermap_new_supply_source:nn { thunderforest~transport }
- {
- url~with~api~key = {https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/transport,
- }
-\__mermap_new_supply_source:nn { thunderforest~landscape }
- {
- url~with~api~key = {https://tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/landscape,
- }
-\__mermap_new_supply_source:nn { thunderforest~outdoors }
- {
- url~with~api~key = {https://tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/outdoors,
- }
-\__mermap_new_supply_source:nn { thunderforest~transport-dark }
- {
- url~with~api~key = {https://tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/transport-dark,
- }
-\__mermap_new_supply_source:nn { thunderforest~spinal-map }
- {
- url~with~api~key = {https://tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/spinal-map,
- }
-\__mermap_new_supply_source:nn { thunderforest~pioneer }
- {
- url~with~api~key = {https://tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/pioneer,
- }
-\__mermap_new_supply_source:nn { thunderforest~mobile-atlas }
- {
- url~with~api~key = {https://tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/mobile-atlas,
- }
-\__mermap_new_supply_source:nn { thunderforest~neighbourhood }
- {
- url~with~api~key = {https://tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey=}{thunderforest}{},
- __attribution_thunderforest,
- basename = tiles/neighbourhood,
- }
-
diff --git a/macros/latex/contrib/mitthesis/MIT-Thesis.pdf b/macros/latex/contrib/mitthesis/MIT-Thesis.pdf
index fffb7fbf43..e7f9b4a01a 100644
--- a/macros/latex/contrib/mitthesis/MIT-Thesis.pdf
+++ b/macros/latex/contrib/mitthesis/MIT-Thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex
index 4311237b48..fc7e8a88f1 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex
@@ -3,7 +3,7 @@
% This file is MIT-Thesis.tex, a LaTeX template for formatting an MIT thesis with the mitthesis class.
%
-% Version: 1.13, 2024/07/03
+% Version: 1.14, 2024/07/19
%
% Author: John H. Lienhard, copyright 2024. Reuse under the MIT license: https://ctan.org/license/mit
@@ -182,13 +182,13 @@
% If there is more than one supervisor, use the \Supervisor command for each.
\Supervisor{Edward C. Pickering}{Professor of Physics}
-%\Supervisor{Edward C. Pickering}{Professor of Physics, and \\ \> Professor of Something Else}
+% \Supervisor{Edward C. Pickering}{Professor of Physics, and \\ \> Professor of Something Else}
% \Supervisor{Secunda Castor}{Professor of Research}
% \Supervisor{Quintus Castor}{Professor of Log Dams}
% Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...)
% If more than one department, use more than once
- \Acceptor{Primus Castor}{Professor of Wetlands Engineering}{Undergraduate Officer, Department of Physics}
+ \Acceptor{Primus Castor}{Professor of Wetlands Engineering}{}%{Undergraduate Officer, Department of Physics}
% \Acceptor{Tertius Castor}{Professor of Log Dams}{Graduate Officer, Department of Research}
% \Acceptor{Quarta Castor}{Professor of Lodge Building}{Graduate Officer, Department of Mechanical Engineering}
%% If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank, {}.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex
index 481e96a4c4..1f2acd20a6 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex
@@ -1,5 +1,5 @@
% From mitthesis package
-% Version: 1.05, 2023/11/03
+% Version: 1.06, 2024/07/09
% Documentation: https://ctan.org/pkg/mitthesis
@@ -7,7 +7,7 @@
\lipsum[1-2] Postremo aliquos futuros suspicor, qui me ad alias litteras vocent, genus hoc scribendi, etsi sit elegans, personae tamen et dignitatis esse negent~\cite{DKE1969,ww1920,kirk2288a,churchill1948,gibbs1863}.
-\section[A section discussing the first issue: \(J/\psi\)]{A section discussing the first issue: \ifpdftex\(\bm{J}/\bm{\psi}\)\else{\(\symbfup{J/\psi}\)}\fi}
+\section[A section discussing the first issue: \(J/\psi\)]{A section discussing the first issue: \ifpdftex\(\bm{J}/\bm{\psi}\)\else{\(\symbfit{J/\psi}\)}\fi}
We begin with some ideas from the literature \cite{Fong2015,sharpe1}.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex
index bc7ba62c91..8795eb547e 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex
@@ -1,16 +1,16 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-defaultfonts.tex}[2024/06/28 v1.04 Load Computer/Latin Modern text and math fonts]
+\ProvidesFile{mitthesis-defaultfonts.tex}[2023/09/12 v1.03 Load Computer/Latin Modern text and math fonts]
%% Default fonts
%
\ifpdftex
- \ClassNoteNoLine{\ClassName}{Loading Computer Modern text and math fonts (default for pdftex)}
+ \typeout{^^JLoading Computer Modern text and math fonts (default for pdftex).^^J}
\RequirePackage[T1]{fontenc}
\RequirePackage{bm}
\else
- \ClassNoteNoLine{\ClassName}{Loading Latin Modern text and math fonts (default for unicode engines)}
+ \typeout{^^JLoading Latin Modern text and math fonts (default for unicode engines).^^J}
%
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex
index ebba9ab190..01fa981d78 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex
@@ -1,19 +1,19 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-fira-newtxsf.tex}[2024/06/28 v1.05 Load Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font]
+\ProvidesFile{mitthesis-fira-newtxsf.tex}[2023/09/12 v1.04 Load Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font]
%% Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font
%
\ifpdftex
- \ClassNoteNoLine{\ClassName}{Loading Fira sans text font with newtx sans serif math font and Inconsolata typewriter}
+ \typeout{^^JLoading Fira sans text font with newtx sans serif math font and Inconsolata typewriter^^J}
\RequirePackage[sfdefault,scaled=0.90]{FiraSans} % sans serif text package %,scaled=.85
\RequirePackage[T1]{fontenc}
\RequirePackage[varqu,varl,scaled=1.05]{zi4} % inconsolata font for typewriter
\RequirePackage[scaled=1.05]{newtxsf} % sans serif math
\RequirePackage{bm}
\else
- \ClassWarning{\ClassName}{The fira-newtxsf font set requires pdflatex. Defaulting to LMR fonts}
+ \ClassWarning{mitnewthesis}{The fira-newtxsf font set requires pdflatex. Defaulting to LMR fonts}
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math.
% Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex
index 1535771f11..26ee2ab07b 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-heros-stix2.tex}[2024/06/28 v1.03 Load TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font]
+\ProvidesFile{mitthesis-heros-stix2.tex}[2023/09/12 v1.02 Load TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font]
%% TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font
%
@@ -12,11 +12,11 @@
% Install these as system fonts on your computer
%
\ifpdftex
- \ClassWarning{\ClassName}{The heros-stix2 fontset requires a unicode engine. Defaulting to CMR fonts}
+ \ClassWarning{mitnewthesis}{The heros-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.}
\RequirePackage[T1]{fontenc}
\RequirePackage{bm}
\else
- \ClassNoteNoLine{\ClassName}{TeX Gyre Heros (sans serif) text font with STIX2 math font and Inconsolata monospaced font}
+ \typeout{^^JTeX Gyre Heros (sans serif) text font with STIX2 math font and Inconsolata monospaced font.^^J}
%
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex
index 41b2f561df..57cf26f915 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-libertine.tex}[2024/06/28 v1.03 Load Libertine and related fonts]
+\ProvidesFile{mitthesis-libertine.tex}[2023/09/12 v1.02 Load Libertine and related fonts]
%% Linux Libertine (serif) text font with newtxmath[libertine] (pdftex) or Libertinus (unicode) math font
%
@@ -10,7 +10,7 @@
% install these as system fonts on your computer
%
\ifpdftex
- \ClassNoteNoLine{\ClassName}{Loading newtx-libertine text and math fonts with Insolata typewriter font}
+ \typeout{^^JLoading newtx-libertine text and math fonts with Insolata typewriter font^^J}
\RequirePackage[lining,semibold]{libertine}
\RequirePackage[T1]{fontenc}
\RequirePackage[varqu,varl]{inconsolata}% typewriter
@@ -18,7 +18,7 @@
\RequirePackage[libertine,vvarbb]{newtxmath}
\RequirePackage{bm}% load after all math to give access to bold math
\else
- \ClassNoteNoLine{\ClassName}{Loading Linux Libertine (serif) text font with Libertinus math font}
+ \typeout{^^JLoading Linux Libertine (serif) text font with Libertinus math font^^J}
%
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex
index e18c72fd92..6466c36929 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex
@@ -1,11 +1,11 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-lucida.tex}[2024/06/28 v1.03 Load Lucida fonts]
+\ProvidesFile{mitthesis-lucida.tex}[2023/09/12 v1.02 Load Lucida fonts]
%% Lucida Bright and Lucida Bright Math fonts (available from the TeX Users Group)
-\ClassNoteNoLine{\ClassName}{Lucida Bright and Lucida Bright Math fonts}
+\typeout{^^JLucida Bright and Lucida Bright Math fonts^^J}
\ifpdftex
\RequirePackage[LY1]{fontenc}
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex
index b76428f383..03d62286e2 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex
@@ -1,12 +1,11 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-newtx-sans-text.tex}[2024/06/68 v1.04 Load newtx sans-serif text and regular math fonts]
+\ProvidesFile{mitthesis-newtx-sans-text.tex}[2023/10/03 v1.03 Load newtx sans-serif text and regular math fonts]
%% newtx package with sans-serif text (Helvetica-like text with Times-like math)
%
\ifpdftex
- \ClassNoteNoLine{\ClassName}{Loading newtx sans-serif text and newtx serif math fonts}
\RequirePackage[T1]{fontenc}
\RequirePackage[subscriptcorrection,varvw,helvratio=0.91,defaultsups]{newtx}% upint for upright integrals
\AtEndPreamble{% added to accommodate v1.731 of newtx, 2023/11/03
@@ -18,7 +17,7 @@
% \DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-} %
\RequirePackage{bm}% bold math
\else
- \ClassWarning{\ClassName}{The newtx font set requires pdflatex. Defaulting to LMR fonts}
+ \ClassWarning{mitnewthesis}{The newtx font set requires pdflatex. Defaulting to LMR fonts}
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math.
% Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex
index b1541bbd05..cc43427055 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex
@@ -1,17 +1,17 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-newtx.tex}[2024/06/28 v1.04 Load newtx text and math fonts]
+\ProvidesFile{mitthesis-newtx.tex}[2023/09/12 v1.03 Load newtx text and math fonts]
\ifpdftex
- \ClassNoteNoLine{\ClassName}{Loading newtx fonts with inconsolata typewriter}
+ \typeout{^^JLoading newtx fonts with inconsolata typewriter^^J}
\RequirePackage[T1]{fontenc}
\RequirePackage[subscriptcorrection,varvw,helvratio=0.91]{newtx}% stix2, upint
\RequirePackage[varl,varqu,hyphenate,mono]{inconsolata}% sans typewriter font; mono = fixed word spacing, hyphenate = allow hyphenation
\RequirePackage{bm}
\let\textsuperscript\textsu% newtx changes the default superiors font; this is needed to get commas aligned in sequential footnotes
\else
- \ClassWarning{\ClassName}{The newtx font set requires pdflatex. Defaulting to LMR fonts}
+ \ClassWarning{mitnewthesis}{The newtx font set requires pdflatex. Defaulting to LMR fonts}
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math.
% Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case.
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex
index c178ff233f..de3983fe4e 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-stix2.tex}[2024/06/28 v1.04 Load STIX Two text and math fonts]
+\ProvidesFile{mitthesis-stix2.tex}[2023/09/12 v1.03 Load STIX Two text and math fonts]
%% STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font
%
@@ -12,11 +12,11 @@
% Install these as system fonts on your computer
%
\ifpdftex
- \ClassWarning{\ClassName}{The stix2 fontset requires a unicode engine. Defaulting to CMR fonts.}
+ \ClassWarning{mitnewthesis}{The stix2 fontset requires a unicode engine. Defaulting to CMR fonts.}
\RequirePackage[T1]{fontenc}
\RequirePackage{bm}
\else
- \ClassNoteNoLine{\ClassName}{Loading STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font}
+ \typeout{^^JLoading STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font.^^J}
%
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex
index ed2abc1655..1e65724cc0 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-termes-stix2.tex}[2024/10/28 v1.04 Load TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font]
+\ProvidesFile{mitthesis-termes-stix2.tex}[2023/09/12 v1.03 Load TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font]
%% TeX Gyre Termes text font and Heros sans serif font with STIX2 math font and Inconsolata monospaced font
%
@@ -12,11 +12,11 @@
% Install these as system fonts on your computer
%
\ifpdftex
- \ClassWarning{\ClassName}{The termes-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.}
+ \ClassWarning{mitnewthesis}{The termes-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.}
\RequirePackage[T1]{fontenc}
\RequirePackage{bm}
\else
- \ClassNoteNoLine{\ClassName}{Loading TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font}
+ \typeout{^^JLoading TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font.^^J}
%
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex
index fd1e15bab8..64fffb9264 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mitthesis-termes.tex}[2024/06/28 v1.04 Load TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font]
+\ProvidesFile{mitthesis-termes.tex}[2023/09/12 v1.03 Load TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font]
%% TeX Gyre Termes (Times-like) text font with Termes math font and Heros sans serif font and Cursor monospaced font
%
@@ -9,11 +9,11 @@
% install these as system fonts on your computer
%
\ifpdftex
- \ClassWarning{\ClassName}{The termes fontset requires a unicode engine. Defaulting to CMR fonts.}
+ \ClassWarning{mitnewthesis}{The termes fontset requires a unicode engine. Defaulting to CMR fonts.}
\RequirePackage[T1]{fontenc}
\RequirePackage{bm}
\else
- \ClassNoteNoLine{\ClassName}{Loading TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font}
+ \typeout{^^JLoading TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font^^J}
\RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
% suppress tiresome warnings about lack of integration between mathtools and unicode-math
% unicode-math loads the fontspec package
diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex
index ef71521074..1d9184e973 100644
--- a/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex
+++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex
@@ -1,7 +1,7 @@
% From mitthesis package
% Documentation: https://ctan.org/pkg/mitthesis
-\ProvidesFile{mydesign.tex}[20234/06/28 v1.04 Typographic design options for thesis]
+\ProvidesFile{mydesign.tex}[2024/06/28 v1.04 Typographic design options for thesis]
%%%%%%%%%% Color support %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/mitthesis/README.md b/macros/latex/contrib/mitthesis/README.md
index c703518304..9d2918ca36 100644
--- a/macros/latex/contrib/mitthesis/README.md
+++ b/macros/latex/contrib/mitthesis/README.md
@@ -1,11 +1,11 @@
#mitthesis --- A LaTeX template for an MIT thesis#
- v1.13 dated 2024/07/03
+ v1.14 dated 2024/07/19
####Overview####
This class provides a LaTeX template to format an MIT thesis according to
- the requirements of the Massachusetts Institute of Technology Libraries (as posted in 2023):
+ the requirements of the Massachusetts Institute of Technology Libraries (as posted in 2024):
[https://libraries.mit.edu/distinctive-collections/thesis-specs/](https://libraries.mit.edu/distinctive-collections/thesis-specs/)
@@ -53,6 +53,12 @@
---
####Change log####
+ v1.14 (19 July 2024)
+ - add backward compatibility code for \\text_titlecase_all:n
+ - adjust supervisor and acceptor titles used on sample cover pages
+ - format J/psi as \\symbfit in sample chapter 1 and regenerate font samples
+ - edit documentation
+
v1.13 (03 July 2024)
- same as v1.12, except now includes the correct documentation
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf
index 304d89113b..159f037a4d 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf
index 737603f89c..8b4d3e0942 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree_two_departments.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree_two_departments.pdf
index c10db9e046..e7e2f13e88 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree_two_departments.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree_two_departments.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf
index 7ab9882820..1adb097a70 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf
index 8950c7ed3c..0617a275f8 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf
index 61a2b63115..7e4300d5b6 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf
index c9ccbd8a9a..299acda338 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree_two_departments.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_one_degree_two_departments.tex
index cf4fce672e..6c1f5c3982 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree_two_departments.tex
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_one_degree_two_departments.tex
@@ -3,7 +3,7 @@
% !BIB program = biber
% Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit
-% Version 1.01, 2024/06/25
+% Version 1.02, 2024/07/08
% Documentation: https://ctan.org/pkg/mitthesis
@@ -75,7 +75,7 @@
% note on names: most of the following names are made up; Silas Holman was a professor at MIT in the 19th century.
-\Author{Silas W. Holman}{Department of Physics}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022]
+\Author{Silas W. Holman}{Department of Nuclear Science and Engineering}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022]
%\Author{Luisa Hernández}{Department of Research}%[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022]
% For one degree issued by two departments, leave the degree argument blank for the second degree {}.
@@ -83,23 +83,17 @@
\Degree{}{Center for Computational Science and Engineering}
% If there is more than one supervisor, use the \Supervisor command for each.
-\Supervisor{Edward C. Pickering}{Professor of Physics}
-\Supervisor{Secunda Castor}{Professor of Research}
+\Supervisor{Edward C. Pickering}{Professor of Nuclear Science and Engineering}
+%\Supervisor{Secunda Castor}{Professor of Research}
%\Supervisor{Quintus Castor}{Professor of Log Dams}
% Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...)
% If more than one department, use more than once
% If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}.
-\Acceptor{Primus Castor}{Professor and Graduate Officer, Department of Physics}{}
-\Acceptor{Tertius Castor}{Professor and Graduate Officer, Department of Mechanical Engineering}{}
+\Acceptor{Primus Castor}{Professor and Graduate Officer}{Department of Nuclear Science and Engineering}
+\Acceptor{Tertius Castor}{Professor and Graduate Officer}{Center for Computational Science and Engineering}
%\Acceptor{Quarta Castor}{Professor of Lodge Building}{Undergraduate Officer, Department of Mechanical Engineering}
-% In this example, several steps have been taken to make the content fit on the title page! The \Acceptors have been confined to two
-% lines in the above commands, the signature block font size is reduced, the skips are tightened, the author names use normal font size,
-% and Luisa's previous degrees are not shown.
-\SignatureBlockSize{\small} %\SignatureBlockSize{\footnotesize}
-\Tighten
-\AuthorNameSize{\normalsize}
% Usage: \DegreeDate{Month}{year}
% Valid degree months are September, February, or June.
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex
index 6334a228ae..f8ebb1b965 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex
@@ -85,8 +85,7 @@
% If there is more than one supervisor, use the \Supervisor command for each.
\Supervisor{Edward C. Pickering}{Professor of Physics}
-\Supervisor{Secunda Castor}{Professor of Research}
-%\Supervisor{Quintus Castor}{Professor of Log Dams}
+\Supervisor{Secunda Castor}{Professor of Mechanical Engineering}
% Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...)
% If more than one department, use more than once
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex
index e5e2618b69..a757806b01 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex
@@ -2,7 +2,7 @@
% !BIB TS-program = biber
% !BIB program = biber
-% Author: John H. Lienhard (c) 2023. Reuse under the MIT license: https://ctan.org/license/mit
+% Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit
% Documentation: https://ctan.org/pkg/mitthesis
@@ -75,7 +75,7 @@
% note on names: most of the following names are made up; Silas Holman was a professor at MIT in the 19th century.
\Author{Silas W. Holman}{Department of Physics}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022]
-\Author{Luisa Hernández}{Department of Research}[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022]
+\Author{Luisa Hernández}{Department of Physics}[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022]
% Use once for each degree fulfilled by thesis
% For two degrees from one department, leave the department argument blank for the second degree {}.
@@ -85,20 +85,11 @@
% If there is more than one supervisor, use the \Supervisor command for each.
\Supervisor{Edward C. Pickering}{Professor of Physics}
-%\Supervisor{Secunda Castor}{Professor of Research}
-%\Supervisor{Quintus Castor}{Professor of Log Dams}
% Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...)
% If more than one department, use more than once
% If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}.
-%\Acceptor{Primus Castor}{Professor of Wetlands Engineering}{Graduate Officer, Department of Physics}
\Acceptor{Quintus Castor}{Professor of Wetlands Engineering}{Undergraduate Officer, Department of Physics}
-%\Acceptor{Tertius Castor}{Professor of Log Dams}{Graduate Officer, Department of Research}
-%\Acceptor{Quarta Castor}{Professor of Lodge Building}{Graduate Officer, Department of Mechanical Engineering}
-
-% If your title page is overflowing (from too many names, degrees, etc.), you can scale
-% down the Signature block at the bottom with this command, or use another creative solution...
-%\SignatureBlockSize{\small} %\SignatureBlockSize{\footnotesize}
% Usage: \DegreeDate{Month}{year}
% Valid degree months are September, February, or June.
diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex
index fd9fc21485..57a957b6ba 100644
--- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex
+++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex
@@ -2,8 +2,8 @@
% !BIB TS-program = biber
% !BIB program = biber
-% Author: John H. Lienhard (c) 2023. Reuse under the MIT license: https://ctan.org/license/mit
-% Version 1.01, 2023/10/27
+% Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit
+% Version 1.02, 2024/07/08
% Documentation: https://ctan.org/pkg/mitthesis
@@ -82,19 +82,16 @@
% For two degrees from one department, leave the department argument blank for the second degree {}.
\Degree{Master of Science in Physics}{Department of Physics}
\Degree{Master of Science in Mechanical Engineering}{Department of Mechanical Engineering}
-%\Degree{Master of Science in Physics}{}
% If there is more than one supervisor, use the \Supervisor command for each.
\Supervisor{Edward C. Pickering}{Professor of Physics}
-\Supervisor{Secunda Castor}{Professor of Research}
-%\Supervisor{Quintus Castor}{Professor of Log Dams}
+\Supervisor{Secunda Castor}{Professor of of Mechanical Engineering}
% Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...)
% If more than one department, use more than once
% If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}.
\Acceptor{Primus Castor}{Professor and Graduate Officer, Department of Physics}{}
\Acceptor{Tertius Castor}{Professor and Graduate Officer, Department of Mechanical Engineering}{}
-%\Acceptor{Quarta Castor}{Professor of Lodge Building}{Undergraduate Officer, Department of Mechanical Engineering}
% In this example, several steps have been taken to make the content fit on the title page! The \Acceptors have been confined to two
% lines in the above commands, the signature block font size is reduced, the skips are tightened, the author names use normal font size,
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf
index c32bcc359c..97243bde84 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf
index f78b32a6d9..cc3e40ce75 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf
index 0262aabdef..c09afd43ee 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf
index 44d54df946..418bf7e8d3 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf
index d667a4bed4..43081a36f0 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf
index 9f22058aa0..d21ca4d057 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf
index fabf8cd29a..45952c0c52 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf
index 7c38f1d828..0792ee30f9 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf
index c7993b99aa..80b8e07d10 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf
index 4affab8613..90dfd3ab31 100644
--- a/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf
+++ b/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf
index 94724d1eec..ab61cf59e5 100644
--- a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf
+++ b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex
index 6f8954813b..4e5e739585 100644
--- a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex
+++ b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% !TEX encoding = UTF-8 Unicode
-% Version date: 1 July 2024
+% Version date: 19 July 2024
\DocumentMetadata
{
@@ -24,6 +24,8 @@
\usepackage[x11names,svgnames,dvipsnames,table]{xcolor}
\usepackage{luacolor} % load AFTER xcolor
+\usepackage{mathtools}
+
\usepackage[en-US]{datetime2} %% change default date format
\makeatletter
\newcommand{\daymonthyeardate}{%
@@ -191,7 +193,7 @@
\phantomsection\pdfbookmark[1]{\abstractname}{summary}
\begin{abstract}
-This \LaTeX\ class formats theses according to the requirements of the MIT Libraries. The template is suitable for MIT theses of all types and at all levels. The title and abstract pages are automatically laid out from information provided by the user. The template includes options to use a variety of typefaces, and it is compatible with either pdfTeX or unicode engines such as luaLaTeX. When using LaTeX formats dated November 2022 or later, the resulting pdf file meets the PDF/A-2b archivability standard. A standard \href{https://www.tug.org/texlive/}{\TeX\ Live} installation includes all other packages required by the template. This document provides instructions for installation and use of the template.
+This \LaTeX\ class formats theses according to the requirements of the MIT Libraries. The template is suitable for MIT theses of all types and at all levels. The title and abstract pages are automatically laid out from information provided by the user. The template includes options to use a variety of typefaces, and it is compatible with either pdfTeX or unicode engines such as LuaLaTeX. When using LaTeX formats dated November 2022 or later, the resulting pdf file meets the PDF/A-2b archivability standard. A standard \href{https://www.tug.org/texlive/}{\TeX\ Live} installation includes all other packages required by the template. This document provides instructions for installation and use of the template.
\end{abstract}
\tableofcontents
@@ -220,7 +222,7 @@ If the most current version of \texttt{mitthesis.cls} is installed in your syste
The new MIT thesis template consists of: \texttt{mitthesis.cls}; a root file \texttt{MIT-Thesis.tex}; a file to load the abstract, \texttt{abstract.tex}; a file for design options, \texttt{mydesign.tex}; and an optional file to change the fonts (see the subdirectory, \texttt{fontset}). You should change the name of the root file to something more descriptive of your own work (e.g., \texttt{JohnsThesis.tex}, \texttt{MagnumOpusScientiae.tex},\ldots). In addition, files must be loaded for acknowledgments, an optional biosketch, chapters, optional appendices, and bibliography.
\subsection{\LaTeX\ engine}
-The template works with either \pdfTeX\ or unicode engines such as \LuaLaTeX. With the latter, fonts that you install in your operating system can be configured for use in your thesis. \LuaLaTeX\ also enables the direct use of lua code in your \texttt{.tex} file. With lua code, you can automate plotting, table generation, and other numerical computations.
+The template works with either \pdfTeX\ or unicode engines such as \LuaLaTeX. With the latter, fonts that you install in your operating system can be configured for use in your thesis. \LuaLaTeX\ also enables the direct use of Lua code in your \texttt{.tex} file. With Lua code, you can automate plotting, table generation, and other numerical computations.
\subsection{PDF/A compliance}
PDF/A-2b compliance will be automatic if the \verb|\DocumentMetadata{pdfstandard = a-2b}| command is issued before the \verb|\documentclass{..}| command and \textit{provided that your graphics are also compliant}. This command was added to \LaTeX\ in June 2022. For older versions of \LaTeX,
@@ -242,7 +244,7 @@ Note that third, fourth, fifth, and sixth arguments are optional [..] and may be
\item \verb|\Degree{name of degree}{department giving degree}|. Use once for each degree fulfilled by the thesis.
-If two departments jointly issue a single degree, leave the degree argument blank for the \textit{second} degree:
+If two departments jointly issue a single degree, leave the degree name blank for the \textit{second} degree:
\verb|\Degree{}{2nd department name}|.
If the thesis satisfies two degrees from one department, leave the department argument blank for
the \textit{second} degree: \verb|\Degree{2nd degree name}{}|.
@@ -312,7 +314,7 @@ twoside & gives facing-page behavior for two-sided printing; omitting it will e
\subsection{Font loading}
By default, \texttt{mitthesis.cls} will load the traditional \LaTeX\ typeface, Computer Modern (for \pdfTeX) or Latin Modern (for unicode engines). By using the key value \texttt{fontset=$\cdots$} in the \verb|\documentclass| command, you can select a different set of fonts.
-Ten font sets are predefined, including the default set (see Table~\ref{tab:2}). Three work only with \pdfTeX, four work only with unicode engines, and three work with either. These options include a mixture of serif or sans serif text and math fonts, as shown in the table. To access the predefined font sets, you \textit{must} have the directory \texttt{fontsets} as a subdirectory of your working directory, including its files as named.
+Ten font sets are predefined, including the default set (see Table~\ref{tab:2}). Three work only with \pdfTeX, four work only with unicode engines, and three work with either. These options include a mixture of serif or sans serif text and math fonts, as shown in the table. To access the predefined font sets, you \textit{must} have the directory \texttt{fontsets} as a subdirectory of your working directory, including its files as named. For unicode engines, you must have the relevant fonts installed as system fonts on your computer.
Among the predefined font sets, Termes and NewTX are serifed typefaces similar to the digital typeface Times New Roman. STIX Two is more similar to the original metal-type Times typeface. Linux Libertine is a serif typeface inspired by 19\textsuperscript{th} century book type. Lucida is a serifed typeface designed for high legibility at small size or on low resolution devices. Lucida is excellent for mathematics and includes a complete bold-face math font, but it is not free. Heros and NewTX-sans are sans-serif text typefaces similar to Helvetica. NewTXsf is a sans-serif math font which draws upon glyphs from the STIX fonts. Fira is a humanist sans-serif text typeface designed in association with the Firefox browser. Finally, Computer Modern (and its extension Latin Modern)---the traditional \LaTeX\ typeface---is a Didone typeface, with high contrast between thick and thin elements.
% STIX Two, Termes, and LMR do not include a separate bold math font.
@@ -351,7 +353,7 @@ termes-stix2 & no & yes & serif & serif & \url{http://www.gust.org.pl/projects/
\subsection{Design options}
The thesis will follow the default styles of the \LaTeX\ report class for sections headings, captions, and lists. If you prefer different styles you can use the class option [mydesign] which loads the file \texttt{mydesign.tex}.
-With \texttt{mydesign.tex}, you can set options for packages that manage color, e.g.\ \texttt{\hrefurl{https://ctan.org/pkg/xcolor}{xcolor}}, that change the margins, or that change the design of titles, captions, and lists: \texttt{\hrefurl{https://ctan.org/pkg/titlesec}{titlesec}}, \texttt{\hrefurl{https://ctan.org/pkg/caption}{caption}}, or \texttt{\hrefurl{https://ctan.org/pkg/enumitem}{enumitem}}. You can also load other packages. The \texttt{mitthesis} class will insert these commands at the appropriate point (prior to loading \texttt{\hrefurl{https://ctan.org/pkg/babel}{babel}}, fonts, or \texttt{\hrefurl{https://ctan.org/pkg/hyperref}{hyperref}}). You should not need to edit the class file.
+With \texttt{mydesign.tex}, you can set options for packages that manage color, e.g.\ \texttt{\hrefurl{https://ctan.org/pkg/xcolor}{xcolor}}, or that change the design of titles, captions, and lists: \texttt{\hrefurl{https://ctan.org/pkg/titlesec}{titlesec}}, \texttt{\hrefurl{https://ctan.org/pkg/caption}{caption}}, or \texttt{\hrefurl{https://ctan.org/pkg/enumitem}{enumitem}}. You can change the margins with \verb|\newgeometry{..}| from the \texttt{\hrefurl{https://ctan.org/pkg/geometry}{geometry}} package. You can also load other packages. The \texttt{mitthesis} class will insert these commands at the appropriate point (prior to loading \texttt{\hrefurl{https://ctan.org/pkg/babel}{babel}}, fonts, or \texttt{\hrefurl{https://ctan.org/pkg/hyperref}{hyperref}}). You should not need to edit the class file.
Hyperlink colors and pdf bookmark or viewing options from the \texttt{hyperref} package can be changed by using \verb|\hypersetup{ .. }| in the preamble or using \verb|\AtBeginDocument{ \hypersetup{ .. } }| in the \texttt{mydesign.tex} file.
@@ -367,15 +369,15 @@ have one nomenclature list for whole thesis or one for each chapter (the default
For example, the following code
\begin{center}
-\begin{minipage}{0.8\textwidth}
+\begin{minipage}{0.85\textwidth}
\begin{verbatim}
\begin{nomenclature}[2em][Nomenclature for Chapter 1][section]
\EntryHeading{Roman letters}
\entry{$\mathcal{C}$}{material curve}
-\entry{$\mathbf{u}$}{velocity [m s$^{-1}$]}
+\entry{$\mathbf{u}$}{velocity [m s$\cramped{^{-1}}$]}
\EntryHeading{Greek letters}
-\entry{$\Gamma$}{circulation [m$^2$ s$^{-1}$]}
-\entry{$\rho$}{mass density [kg m$^{-3}$]}
+\entry{$\Gamma$}{circulation [m$\cramped{^2}$ s$\cramped{^{-1}}$]}
+\entry{$\rho$}{mass density [kg m$\cramped{^{-3}}$]}
\end{nomenclature}
\end{verbatim}
\end{minipage}
@@ -386,13 +388,14 @@ produces the nomenclature list below
\begin{nomenclature}[2em][Nomenclature for Chapter 1][section]
\EntryHeading{Roman letters}
\entry{$\mathcal{C}$}{material curve}
-\entry{$\mathbf{u}$}{velocity [m s$^{-1}$]}
+\entry{$\mathbf{u}$}{velocity [m s$\cramped{^{-1}}$]}
\EntryHeading{Greek letters}
-\entry{$\Gamma$}{circulation [m$^2$ s$^{-1}$]}
-\entry{$\rho$}{mass density [kg m$^{-3}$]}
+\entry{$\Gamma$}{circulation [m$\cramped{^2}$ s$\cramped{^{-1}}$]}
+\entry{$\rho$}{mass density [kg m$\cramped{^{-3}}$]}
\end{nomenclature}
\end{minipage}
\end{center}
+%% \cramped is from the mathtools package, and moves the superscript a bit lower
\section{PACKAGES FOR MATH, CHEMISTRY, CODE, TABLES, AND MORE}
The \texttt{mitthesis} class loads the \texttt{amsmath} package and its extension \texttt{mathttools}. These packages provide many useful macros for typesetting equations and symbols, such as: environments for aligning and splitting equations or groups of equations; tools for matrices; a wide variety of operators and symbols; tools to define new math operators and paired delimiters; and much, much more. If you are including equations, look at the documentation for these packages: \url{https://ctan.org/pkg/amsmath} and \url{https://ctan.org/pkg/mathtools}.\looseness=1
@@ -458,13 +461,13 @@ unicode-math & --- & load in a fontset file if using a unicode engine\\
Listing committee members (with or without signatures) is not required under MIT's thesis specifications. Only the thesis supervisor should appear on the title page, not a list of committee members. However, some departments may require a separate committee or signature page. That page can be inserted by the author between the title and abstract pages. Check with your department about this page and any associated formatting requirements.
\subsection{Dealing with multiple titles in the signature block}\label{sec:6.3}
-When a thesis supervisor has multiple titles (and both will not fit on one line), you can obtain a line break with proper horizontal spacing by doing
+When a thesis supervisor has multiple titles (which will not fit on one line), you can obtain a line break with proper horizontal spacing by doing
\vskip 5pt
\quad\verb|\Supervisor{name}{first title and \\ \> second title}|
\vskip 5pt
\noindent\textbf{\TeX hackers note:} The signature block is typeset as a \LaTeX\ \texttt{tabbing} environment.
-\subsection{Overflowing title page: managing space} If your title page overflows the vertical space (from too many authors, degrees, previous degrees, etc.), you can using some or all of the following techniques. The commands must be given before \verb|\maketitle|.
+\subsection{Overflowing title page: managing space} If your title page overflows the vertical space (from too many authors, degrees, previous degrees, etc.), you can use some or all of the following techniques. The commands must be given before \verb|\maketitle|.
\begin{enumerate}
\item Reduce the 12 pt and 18 pt skips between the various blocks of text to 6 pt with this command:
\vskip 5pt
diff --git a/macros/latex/contrib/mitthesis/mitthesis.cls b/macros/latex/contrib/mitthesis/mitthesis.cls
index 9990a07a88..0a3a44310c 100644
--- a/macros/latex/contrib/mitthesis/mitthesis.cls
+++ b/macros/latex/contrib/mitthesis/mitthesis.cls
@@ -7,8 +7,8 @@
%% MIT Libraries' requirements as of 2024.
%%
%% This file's version and date:
- \def\versionno{1.13}
- \def\versiondate{2024/07/03\space}
+ \def\versionno{1.14}
+ \def\versiondate{2024/07/19\space}
%%
%% Author: John H. Lienhard, V
%% Department of Mechanical Engineering
@@ -361,18 +361,16 @@
\tl_gremove_all:No \g__dd_month_tl { \space }
\tl_gremove_all:No \g__dd_year_tl { \space }
\str_case_e:nnF
-% { \str_casefold:e { \tl_to_str:N \g__dd_month_tl } } % command not def'd until 2022/10/16
+% { \str_casefold:e { \tl_to_str:N \g__dd_month_tl } } % not def'd until 2022/10/16
{ \str_lowercase:f { \tl_to_str:N \g__dd_month_tl } }
{ {february}{} {may}{} {june}{} {september}{}}
{ \msg_error:nnn { \ClassName } { wrong_month } {#1} }
}
\msg_new:nnnn { \ClassName } { wrong_month } {The\ degree\ month\ must\ be\ one\ of\ February,\ May,\ June,\ or\ September.} {You\ cannot\ use\ #1\ as\ the\ degree\ month.}
-\cs_generate_variant:Nn \text_titlecase_first:n {V}
-\cs_generate_variant:Nn \text_titlecase_all:n {V}
\NewDocumentCommand\DegreeDate{mm}{% {month}{year}
\__dd_setdates:nn {#1}{#2}
- \cs_new:Npn \DegreeMonth { \text_titlecase_first:V { \str_lowercase:f \g__dd_month_tl } }
+ \cs_new:Npn \DegreeMonth { \text_titlecase_first:n { \text_lowercase:n \g__dd_month_tl } }
\cs_new:Npn \DegreeYear { \text_expand:n { \g__dd_year_tl } }% edited 2024/06/24
}
\msg_new:nnnn { \ClassName } { no_degree_date } {Missing\ degree\ date!}{
@@ -568,12 +566,16 @@
% If for some reason you need to change "Thesis Supervisor" to a different string (say, "Doctoral Advisor")
% This construction removes leading and trailing spaces and lowercases the string.
-% Commands in output modules handle titlecasing.
\NewDocumentCommand\SupervisorDesignation{ m } {
- \tl_gset:Nn \g_titlepage_supervisor_designation_tl { \str_lowercase:f { \tl_trim_spaces:n {#1} } }
- \tl_gset:Nn \g_abstract_supervisor_designation_tl { \str_lowercase:f { \tl_trim_spaces:n {#1} } }
+ \tl_gset:Nn \g_titlepage_supervisor_designation_tl
+ { \cs_if_exist:NTF \text_titlecase_all:n % not def'd until 2023/07/08
+ { \text_titlecase_all:n { \text_lowercase:n { \tl_trim_spaces:n {#1} } } }
+ { \tl_trim_spaces:n {#1} }
+ }
+ \tl_gset:Nn \g_abstract_supervisor_designation_tl
+ { \text_titlecase_first:n { \text_lowercase:n { \tl_trim_spaces:n {#1} } } }
}
-
+
\cs_new:Nn \__supervisor_abstractblock: {
\int_zero_new:N \l__supervisor_supervisorno_int
\int_incr:N \l__supervisor_supervisorno_int
@@ -583,12 +585,12 @@
\msg_error:nn { \ClassName } { no_supervisor }
}
{\int_until_do:nNnn { \l__supervisor_supervisorno_int } = { \g_supervisor_supervisorcnt_int } {
- \text_titlecase_first:V { \g_abstract_supervisor_designation_tl } :\space
+ \g_abstract_supervisor_designation_tl :\space
\seq_item:cn { g_supervisor_name_seq } { \l__supervisor_supervisorno_int }\par
Title:\space \seq_item:cn { g_supervisor_title_seq } { \l__supervisor_supervisorno_int }\par\medskip
\int_incr:N \l__supervisor_supervisorno_int
}
- \text_titlecase_first:V { \g_abstract_supervisor_designation_tl } :\space
+ \g_abstract_supervisor_designation_tl :\space
\seq_item:cn { g_supervisor_name_seq } { \l__supervisor_supervisorno_int }\par
Title:\space \seq_item:cn { g_supervisor_title_seq } { \l__supervisor_supervisorno_int }\ignorespaces
}
@@ -629,8 +631,8 @@
{ Missing\ acceptor\ department,\ check\ for\ blank\ in\ \Acceptor{name}{department}{title}\ command. }{
You\ MUST\ provide\ the\ acceptor's\ department\ using\ the\ \Acceptor{name}{department}{title}\ command.}
\msg_new:nnn { \ClassName } { blank_acceptor_title }
- { Missing\ acceptor\ title\ (blank\ in\ \Acceptor{name}{department}{title}\ command).\ Perhaps\ you\ are\ trying\ to\ save\ vertical\ space?\
- You\ can\ put\ the\ acceptor\ title\ into\ department\ field\ instead.\ For\ consistency,\ I\ will\ omit\ titles\ of\ ALL\ acceptors.}
+ { Missing\ acceptor\ title\ (blank\ in\ \Acceptor{name}{department}{title}\ command).\space Perhaps\ you\ are\ trying\ to\ save\ vertical\ space?\space
+ You\ can\ put\ the\ acceptor\ title\ into\ department\ field\ instead.\space For\ consistency,\ I\ will\ omit\ titles\ of\ ALL\ acceptors.}
\cs_new_protected:Nn \__acceptor_data_add:nnn
{
@@ -802,8 +804,7 @@
\int_gincr:N \g__signature_supno_int
Certified\ by: \> \seq_item:cn { g_supervisor_name_seq } { \g__signature_supno_int } \\
\> \seq_item:cn { g_supervisor_title_seq } { \g__signature_supno_int },\
- \text_titlecase_all:V { \g_titlepage_supervisor_designation_tl }\\[1em]
- %\ Thesis\ Supervisor\\[1em]
+ \g_titlepage_supervisor_designation_tl \\[1em]
}
\int_compare:nNnF { \g_acceptor_acceptorcnt_int } = {0} {
\int_do_while:nNnn { \g__signature_accno_int } < { \g_acceptor_acceptorcnt_int } {
@@ -937,12 +938,12 @@
\tl_gset:Nn \g_copyright_copyrightlicencse_tl
{This\ work\ is\ licensed\ under\ a\ \mbox{\g_copyright_cclicensetext_tl}\ license.\par\g_copyright_mitpermission_tl}
\tl_gset:Nn \g_copyright_pdfrightstext_tl
- {This\ work\ is\ licensed\ under\ a\ \g_copyright_ccname_tl\ license.\ \g_copyright_mitpermission_tl}
+ {This\ work\ is\ licensed\ under\ a\ \g_copyright_ccname_tl\ license.\space \g_copyright_mitpermission_tl}
}{
\tl_gset:Nn \g_copyright_copyrightlicencse_tl
{All\ rights\ reserved. \par\g_copyright_mitpermission_tl}
\tl_gset:Nn \g_copyright_pdfrightstext_tl
- {All\ rights\ reserved.\ \g_copyright_mitpermission_tl}
+ {All\ rights\ reserved.\space \g_copyright_mitpermission_tl}
}
\int_compare:nNnTF {\g_author_authorcnt_int} > {1}
{
@@ -981,7 +982,7 @@
}
}
\hypersetup{
- pdfcopyright={Copyright\ \DegreeYear\ by\ \CopyrightAuthor.\ \g_copyright_pdfrightstext_tl},
+ pdfcopyright={Copyright\ \DegreeYear\ by\ \CopyrightAuthor.\space \g_copyright_pdfrightstext_tl},
pdfauthor={\g__author_pdfca_tl},
pdfcaptionwriter = {\g__author_pdfca_tl},
}
diff --git a/macros/latex/contrib/moderncv/CHANGELOG b/macros/latex/contrib/moderncv/CHANGELOG
index 245eda72b7..bcfdad1373 100644
--- a/macros/latex/contrib/moderncv/CHANGELOG
+++ b/macros/latex/contrib/moderncv/CHANGELOG
@@ -1,371 +1,396 @@
-version 2.3.1 (2022-02-21)
-- Fix duplicate GitLab icon (#105)
-- Revert using detokenize in social links (#97)
-- Fix broken compilation in classic style (#96)
-
-version 2.3.0 (2021-12-16)
-- Remove font loading from class (#87)
-- Add Matrix and Signal icon (#84)
-- Improved symbol loading (#84)
-
-version: 2.2.0 (2021-07-28)
-- Remove dot in cventry when using moderncvbodyi.
+version 2.4.1 (18 Jul 2024)
+- Fix commons/colors.tex not found in package (#194)
+
+version 2.4.0 (08 Jul 2024)
+- Rewrote user guide, thanks to David Seus (#58, #106, #169).
+- Fixed "Underfull \hbox (badness 10000)" warning in \makecvtitle (#162).
+- Fixed unnecessary academicons warning when academicons aren't used (#161).
+- Fixed page counts unnecessarily linking to the last page of the PDF (#159).
+- Added support for an optional signature in the cover letter (#157).
+- Added support for non-ASCII characters in links (#155).
+- Added option to force a homepage link to use HTTP rather than HTTPS (#154).
+- Passed unicode option directly to hyperref to avoid conflicts with the
+ inclusion of hyperref by other packages (#148).
+- Fixed the sender block on the cover letter in banking style (#146).
+- Added option to classic style to align header elements at the top (#144).
+- Added Twitch, YouTube, TikTok, Instagram, SoundCloud, Steam, Xbox, PlayStation
+ and Battle.net social icons (#131).
+- Removed extra dash in PDF metadata when CV title is empty (#116).
+- Added support for an optional subject line in the cover letter (#114).
+- Added Discord social icon (#112).
+- Replace instances of ~~~ in codebase with \hspace to be more compatible with
+ babel for Spanish (#109).
+- Added Codeberg and Mastodon social icons (#107).
+- New \social options: arXiv, INSPIRE (#185)
+- Systematize colors and make them user adjustable. See documentation for details.
+ This requires the \moderncvcolor to be issued BEFORE \moderncvstyle (#151).
+- all styles: make the head options 'details' and 'nodetails' available to the user. (previously they were hidden). Oldstyle does not respond too well to nodetails (#150).
+- casual style: make the head options 'alternate', 'details' and 'nodetails' available to the user. (previously they were hidden) (#150).
+- Setting \listitemsymbolspace allows custom spacing between list symbol and text item (for \cvlistitem and \cvlistdoubleitem) (#74).
+- Introducing \cvtripleitem command for items in three columns. Closing feature request #174.
+- Fixed wrong cvlistitem vspace caused by multiline section titles in fancy style (#69).
+
+version 2.3.1 (21 Feb 2022)
+- Fix duplicate GitLab icon (#105).
+- Revert using detokenize in social links (#97).
+- Fix broken compilation in classic style (#96).
+
+version 2.3.0 (16 Dec 2021)
+- Remove font loading from class (#87).
+- Add Matrix and Signal icon (#84).
+- Improved symbol loading (#84).
+
+version: 2.2.0 (28 Jul 2021)
+- Remove dot in \cventry when using moderncvbodyi.
+
- Remove http baseurl in hyperref.
-- Change font encoding to use fontspec with Latin Modern for luatex and xetex,
+- Change font encoding to use fontspec with Latin Modern for LuaTeX and XeTeX,
else inputenc / fontenc / lmodern (https://tex.stackexchange.com/a/496643).
- Add birthdate field command.
- Add Social entries for WhatsApp, Signal and Matrix.
- Fix Researcher ID not showing (#29).
-- Make options 'symbols' and 'nosymbols' available to all styles to toggle whether
- symbols should be used or not. Include symbols in oldstyle by default.
-- Migrate older newcommand syntax in moderncvcollection.sty to the xparse syntax.
+- Make options "symbols" and "nosymbols" available to all styles to toggle
+ whether symbols should be used or not. Include symbols in oldstyle by default.
+- Migrate older newcommand syntax in moderncvcollection.sty to xparse syntax.
- Fix resumé typo in template. Is now résumé.
- Various other minor fixes.
version 2.1.0 (21 Jan 2021)
-- maintainer change: now team maintained (https://github.com/moderncv), since
- original repository is basically dead since 2016.
-- new \social options: Xing, Skype, GitLab, Bitbucket, stack overflow, ORCID,
- ResearcherID, ResearchGate, Telegram and Google Scholar
-- hyperlinks in phone numbers
-- switch from l3regex to expl3
-- new skill matrix feature
-- move to fonawesome5 package
-- default to https
+- Maintainer change: now team maintained (https://github.com/moderncv), since
+ original repository has been basically dead since 2016.
+- New \social options: Xing, Skype, GitLab, Bitbucket, stack overflow, ORCID,
+ ResearcherID, ResearchGate, Telegram and Google Scholar.
+- Hyperlinks in phone numbers.
+- Switch from l3regex to expl3.
+- New skill matrix feature.
+- Move to fontawesome5 package.
+- Default to https.
version 2.0.0 (28 Jul 2015)
- - refactored the code into heads, body, foot and icon substyles. All styles
- (classic, casual, banking and oldstyle) are just a combination of these and
- some font selection. Mixing substyles (e.g., the banking header with the
- classic body) is now trivial by using the \moderncvhead, \moderncvbody,
- \moderncvfoot and \moderncvicons commands. Each of these take a substyle number
- as argument. \moderncvcolor takes a color name as argument.
- - added a new style, "fancy".
- - added an optional argument to \moderncvstyle to specify style options, i.e.
- \moderncvstyle[options]{style}. Below is a list of the available options per
- style:
- * classic
- > to specify of one's name should appear left or right at the top: "left"
- (default) or "right;
- * casual
- > to specify of one's name should appear left or right at the top: "left"
- (default) or "right;
- * banking
- > to specify how the section- and subsectionrules should be set:
- "fullrules", "shortrules", "mixedrules" (default; full rules for sections,
- short rules for subsections), "centered" (fullrules with centered title)
- and "norules" (norules, small caps font);
- > to specify how the body should be aligned: left" (default), "center" or
- "right";
- * oldstyle & fancy
- n/a
- - added a new color variant: "burgundy".
- - corrected the color of \addressstyle to match the one effectively used
- (color2).
- - adjusted the bibliography spacing to handle entries with or without labels.
- - added a check on the emptyness of \title when setting the hyperref document
- properties.
+- Refactored the code into heads, body, foot and icon substyles. All styles
+ (classic, casual, banking and oldstyle) are just a combination of these and
+ some font selection. Mixing substyles (e.g., the banking header with the
+ classic body) is now trivial by using the \moderncvhead, \moderncvbody,
+ \moderncvfoot and \moderncvicons commands. Each of these take a substyle
+ number as argument. \moderncvcolor takes a color name as argument.
+- Added a new style: fancy.
+- Added an optional argument to \moderncvstyle to specify style options, i.e.
+ \moderncvstyle[options]{style}. Below is a list of the available options per
+ style:
+ * classic
+ > to specify where at the top one's name should appear: "left" (default) or
+ "right;
+ * casual
+ > to specify where at the top one's name should appear: "left" (default) or
+ "right;
+ * banking
+ > to specify how the section and subsection rules should be set:
+ "fullrules", "shortrules", "mixedrules" (default; full rules for sections,
+ short rules for subsections), "centered" (fullrules with centered title)
+ and "norules" (norules, small caps font);
+ > to specify how the body should be aligned: left" (default), "center" or
+ "right";
+ * oldstyle & fancy
+ > n/a
+- Added a new color variant: "burgundy".
+- Corrected \addressstyle color to match the one effectively used (color2).
+- Adjusted the bibliography spacing to handle entries with or without labels.
+- Added a check on the emptiness of \title when setting the hyperref document
+ properties.
version 1.5.1 (29 Apr 2013)
- - made sure that XeLaTeX or LuaLaTeX is in use before loading the awesome icon
- set and if not, revert to the marvosym icon set.
+- Made sure that XeTeX or LuaTeX is in use before loading the awesome icon set
+ and if not, revert to the marvosym icon set.
version 1.5.0 (23 Apr 2013)
- - added a command to showcase social accounts in one's personal information:
- \social. The command currently handles automatically LinkedIn, Twitter and
- Github accounts, and other links can be provided explicitly.
- - added a new icon set: "awesome" (using the icons from the Font Awesome font).
- - set the "awesome" icon set as the default for the "casual" and "banking"
- style variants (can be changed back with \moderncvicons{marvosym}).
- - forced all the icons of the "letters" icon set to be of the same width, for
- alignment purpose.
- - added a letter icon ("W") for the homepage of the "letters" icon set.
- - forced some white space between the main text and the footer of the "casual"
- style variant.
- - removed the rule below the headings of the cvcolumns environment.
+- Added a command to showcase social accounts in one's personal information:
+ \social. The command currently handles LinkedIn, Twitter and Github accounts
+ automatically, and other links can be provided explicitly.
+- Added a new icon set: "awesome" (using the icons from the Font Awesome font).
+- Set the "awesome" icon set as the default for the casual and banking styles
+ (can be changed back with \moderncvicons{marvosym}).
+- Forced all the icons of the "letters" icon set to be of the same width, for
+ alignment purposes.
+- Added a letter icon ("W") for the homepage of the "letters" icon set.
+- Forced some whitespace between the main text and the footer of the casual
+ style.
+- Removed the rule below the headings of the cvcolumns environment.
version 1.4.0 (28 Mar 2013)
- - deprecated \phone, \mobile and \fax in favour of \phone[<type>], where <type>
- can be "fixed" (default), "mobile" or "fax". As part of the change, one can now
- use each of these multiple times, to e.g. display multiple mobile phone numbers.
- - deprecated \firstname and \familyname in favour of \name{<first>}{<last>}.
- - added a new mechanism to select amongs different possible icon sets:
- \moderncvicons{<iconsetname>}, where <iconsetname> can be "marvosym" (used by
- default in the "banking", "casual" and "classic" style variants) or "letters"
- (used by default in the "oldstyle" style variant). \moderncvicons should
- always be called after \moderncvstyle in order to override the style variants
- defaults.
- - added a command to control the font of the page numbering: \pagenumberfont,
- as requested by fr1a1nky (launchpad question #224496).
- - removed the use of the suffix package.
+- Deprecated \phone, \mobile and \fax in favour of \phone[<type>], where <type>
+ can be "fixed" (default), "mobile" or "fax". As part of the change, one can
+ now use each of these multiple times, e.g. to display multiple mobile phone
+ numbers.
+- Deprecated \firstname and \familyname in favour of \name{<first>}{<last>}.
+- Added a new mechanism to select amongs different possible icon sets:
+ \moderncvicons{<iconsetname>}, where <iconsetname> can be "marvosym" (used by
+ default in the banking, casual and classic styles) or "letters" (used by
+ default in the oldstyle style). \moderncvicons should always be called after
+ \moderncvstyle in order to override the styles' defaults.
+- Added a command to control the font of the page numbering: \pagenumberfont, as
+ requested by fr1a1nky (launchpad question #224496).
+- Removed the use of the suffix package.
version 1.3.0 (09 Feb 2013)
- - added a new environment to create multiple columns: cvcolumns. Each column
- is then created by \cvcolumn[width]{header}{content}, where the optional width
- is given as a fraction of the total width (between 0 and 1). The header and
- content are robust and can contain any paragraph command (e.g., a nest itemize
- environment).
- - added a macro (\pdfpagemode) to control what is visible upon opening compiled
- pdfs (assuming pdf reader support), as suggested by U. Stöhr.
- Possible values include: "UseNone" (only the document), "UseThumbs" (show
- thumbnails), "UseOutlines" (show bookmarks) and "FullScreen" (open in
- fullscreen mode).
- - added a 3rd, fully optional (can be omitted or left blank) argument to
- \address to specify a country, as requested on launchpad (launchpad bug
- #1063995).
- - compacted list environments further.
- - replaced the use of the xargs package by the xparse one.
+- Added a new environment to create multiple columns: cvcolumns. Each column is
+ then created by \cvcolumn[width]{header}{content}, where the optional width is
+ given as a fraction of the total width (between 0 and 1). The header and
+ content are robust and can contain any paragraph command (e.g., a nested
+ itemize environment).
+- Added a macro (\pdfpagemode) to control what is visible upon opening compiled
+ PDFs (assuming PDF reader support), as suggested by U. Stöhr.
+ Possible values include: "UseNone" (only the document), "UseThumbs" (show
+ thumbnails), "UseOutlines" (show bookmarks) and "FullScreen" (open in
+ fullscreen mode).
+- Added a 3rd, fully optional (can be omitted or left blank) argument to
+ \address to specify a country, as requested on launchpad (launchpad bug
+ #1063995).
+- Compacted list environments further.
+- Replaced the use of the xargs package by the xparse one.
version 1.2.1 (04 Dec 2012)
- - fixed a regression bug introduced in version 1.2.0 in the header of the
- "banking" style when no title is used, as reported on tex.stackexchange
- (question #85427).
+- Fixed a regression bug introduced in v1.2.0 in the header of the banking style
+ when no title is used, as reported on tex.stackexchange (question #85427).
version 1.2.0 (31 Oct 2012)
- - updated the "banking" style header to include the option to show a title.
- - set the values of \arrayrulewidth and \doublerulesep to their standard values
- (0.4pt and 2pt resp.) to enable the drawing of rules in tabulars and arrays by
- default.
- - modified the code of \makecvtitle and \makelettertitle of the "casual" style
- to avoid it to cause horizontal alignment issues after and before itself.
- - corrected a bug in \makelettertitle of most styles that displayed the current
- date (\today) instead of the date given through the \date command, as reported
- by B. Schlimmchen and S. Fnord.
- - removed the need to set pdfpagelabels=false when loading hyperref, by putting
- \pagenumbering{arabic} (to define \thepage) before loading hyperref, as figured
- out by J. Wolf.
- - corrected the line wrapping of \cvlistitem of the "banking" style.
- - corrected a bug in \makecvtitle and \makelettertitle of the "banking" style.
- - removed an unwanted space in the footer of the "casual" style.
- - moved the font style definitions to moderncv.cls for better readability
- (moderncv.cls is meant to be a sort of header file, implementing only some
- macros shared by all styles and defining the macros that the style files need
- to implement).
+- Updated the banking style header to include the option to show a title.
+- Set the values of \arrayrulewidth and \doublerulesep to their standard values
+ (0.4pt and 2pt, respectively) to enable the drawing of rules in tabulars and
+ arrays by default.
+- Modified the code of \makecvtitle and \makelettertitle of the casual style to
+ avoid it causing horizontal alignment issues before and after itself.
+- Corrected a bug in \makelettertitle of most styles that displayed the current
+ date (\today) instead of the date given through the \date command, as reported
+ by B. Schlimmchen and S. Fnord.
+- Removed the need to set pdfpagelabels=false when loading hyperref by putting
+ \pagenumbering{arabic} (to define \thepage) before loading hyperref, as
+ figured out by J. Wolf.
+- Corrected the line wrapping of \cvlistitem of the banking style.
+- Corrected a bug in \makecvtitle and \makelettertitle of the banking style.
+- Removed an unwanted space in the footer of the casual style.
+- Moved the font style definitions to moderncv.cls for better readability
+ (moderncv.cls is meant to be a sort of header file, implementing only some
+ macros shared by all styles and defining the macros that the style files need
+ to implement).
version 1.1.3 (10 Aug 2012)
- - corrected a longstanding issue causing hyperref to issue two warnings
- regarding its "pdfpagelabels" option, as pointed out and solved by P. Leifeld
- (launchpad bug #1035466).
+- Corrected a long-standing issue causing hyperref to issue two warnings about
+ its "pdfpagelabels" option, as pointed out and solved by P. Leifeld (launchpad
+ bug #1035466).
version 1.1.2 (09 Aug 2012)
- - fixed a regression bug introduced in version 1.0.0 in the footer of the
- "casual" style, as discovered on tex.stackexchange (question #66316).
+- Fixed a regression bug introduced in v1.0.0 in the footer of the casual style,
+ as discovered on tex.stackexchange (question #66316).
version 1.1.1 (30 Jul 2012)
- - fixed a compatibility issue introduced in version 1.0.0 when
- \maketitlenamewidth was renamed to \makecvtitlenamewidth, as reported by Peppe
- on launchpad (launchpad bug #1030802). The template now correctly uses
- \makecvtitlenamewidth, and \maketitlenamewidth was created as an alias for
- backward compatibility.
+- Fixed a compatibility issue introduced in v1.0.0 when \maketitlenamewidth was
+ renamed to \makecvtitlenamewidth, as reported by Peppe on launchpad (launchpad
+ bug #1030802). The template now correctly uses \makecvtitlenamewidth, and
+ \maketitlenamewidth was created as an alias forbackward compatibility.
version 1.1.0 (29 Jul 2012)
- - fixed the switching from letter to resume, correcting spacing errors when a
- letter is typeset before the resume, as noticed by U. Gabor.
- - fixed the vertical alignment of the footers, as reported by T. Homa.
- Footers are now aligned to the bottom and the letter and cv footers are
- perfectly aligned in the "casual" style.
- - prepared moderncv for fontspec font loading (still commented in code).
- - changed the handling of the "sans" and "roman" class options, to be reflected
- at the beginning of the document and override style font choices.
- - turned unicode support in hyperref on by default.
- - tweaked the use of \textbullet to avoid the fall-back to Computer Modern
- fonts and prepared the use of symbols from the MarVoSym font for fontspec
- (LauLaTeX or XeLaTeX).
- - tweaked the \subsectionfill of the "banking" style to distribute extra space
- evenly between leaders.
- - added two options to change the "Enclosure" string used for the letter
- enclosure: either specify another string as optional argument to \enclosure,
- or redefine \enclname, as suggested by D. Wille.
+- Fixed the switching from letter to resume, correcting spacing errors when a
+ letter is typeset before the resume, as noticed by U. Gabor.
+- Fixed the vertical alignment of the footers, as reported by T. Homa. Footers
+ are now aligned to the bottom and the letter and CV footers are perfectly
+ aligned in the casual style.
+- Prepared moderncv for fontspec font loading (still commented out in code).
+- Changed the handling of the "sans" and "roman" class options, to be reflected
+ at the beginning of the document and override style font choices.
+- Turned unicode support in hyperref on by default.
+- Tweaked the use of \textbullet to avoid a fallback to Computer Modern fonts
+ and prepared the use of symbols from the MarVoSym font for fontspec (LuaTeX or
+ XeTeX).
+- Tweaked the \subsectionfill of the banking style to distribute extra space
+ evenly between leaders.
+- Added two options to change the "Enclosure" string used for the letter
+ enclosure: either specify another string as an optional argument to \enclosure
+ or redefine \enclname, as suggested by D. Wille.
version 1.0.0 (26 Mar 2012)
- - added commands to generate letters for every resume style: \recipient, \date,
- \opening, \closing, \enclosure, \makelettertitle and \makeletterclosing. The
- old \maketitle and \makefooter commands are now deprecated and replaced by
- \makecvtitle and \makecvfooter.
- - changed the alignment algorithm for the personal data display in the oldstyle
- style, as to align on the baseline of the first line with the surrounding text.
+- Added commands to generate letters for every resume style: \recipient, \date,
+ \opening, \closing, \enclosure, \makelettertitle and \makeletterclosing. The
+ old \maketitle and \makefooter commands are now deprecated and replaced by
+ \makecvtitle and \makecvfooter.
+- Changed the alignment algorithm for the personal data display in the oldstyle
+ style, to align on the baseline of the first line with the surrounding text.
version 0.19.0 (06 Feb 2012)
- - reintroduced the ability to force the width reserved to display the name
- in the resume header for the classic style (\maketitlenamewidth).
- - improved the pdf metadata, as reported by S. Wunsch (launchpad bug #922476).
- - fixed a footersymbol bug in the casual style when no mobile number was given,
- as reported by S. Wunsch (launchpad bug #922470).
- - fixed a display bug when an address was given without postcode/city, as
- reported by O. Shaneh (launchpad bug #670263).
+- Reintroduced the ability to force the width reserved to display the name in
+ the resume header for the classic style (\maketitlenamewidth).
+- Improved the PDF metadata, as reported by S. Wunsch (launchpad bug #922476).
+- Fixed a \footersymbol bug in the casual style when no mobile number was given,
+ as reported by S. Wunsch (launchpad bug #922470).
+- Fixed a display bug when an address was given without postcode/city, as
+ reported by O. Shaneh (launchpad bug #670263).
version 0.18.0 (05 Feb 2012)
- - corrected the handling of pdf bookmarks, as suggested on stackexchange by
- U. Fischer.
- - improved the spacing between sections and subsections by using \addvspace
- instead of \vspace.
- - corrected the spacing between entries with nested itemize environments
- (temporary solution working only for single line items).
- - added a check in the oldstyle style for an empty 4th argument in the
- \cvdoubleitem definition, to avoid printing a colon without preceding label.
- - added a new style on top of classic, casual and oldstyle: banking.
+- Corrected the handling of PDF bookmarks, as suggested on stackexchange by
+ U. Fischer.
+- Improved the spacing between sections and subsections by using \addvspace
+ instead of \vspace.
+- Corrected the spacing between entries with nested itemize environments
+ (temporary solution working only for single line items).
+- Added a check in the oldstyle style for an empty 4th argument in the
+ \cvdoubleitem definition to avoid printing a colon without a preceding label.
+- Added a new style on top of classic, casual and oldstyle: banking.
version 0.17.0 (25 Jan 2012)
- - changed the footer algorithm of style casual to avoid starting lines with
- the footer symbol.
- - aligned the space before and after the title across styles.
- - added an optional title to the casual style.
- - changed the definition of the font styles to avoid undesired extra spacing.
- - added a Spanish template, kindly provided by I. Buitrón.
- - corrected the vertical misalignment between the page number and the center
- footer in the casual style.
+- Changed the footer algorithm of the casual style to avoid starting lines with
+ the footer symbol.
+- Aligned the space before and after the title across styles.
+- Added an optional title to the casual style.
+- Changed the definition of the font styles to avoid undesired extra spacing.
+- Added a Spanish template, kindly provided by I. Buitrón.
+- Corrected the vertical misalignment between the page number and the center
+ footer in the casual style.
version 0.16.0 (15 Jan 2012)
- - added starred versions of \section and \subsection (that are identical to
- their non-starred version, to e.g. enable biblatex support as requested by
- S. Verberkt (launchpad bug #913102).
- - corrected a misalignment of the colored rule in front of the section titles
- in the classic and casual styles, as reported by P. Neidhardt (launchpad bug
- #915910).
+- Added starred versions of \section and \subsection that are identical to their
+ non-starred versions (e.g. to enable BibLaTeX support) as requested by
+ S. Verberkt (launchpad bug #913102).
+- Corrected a misalignment of the colored rule in front of the section titles in
+ the classic and casual styles, as reported by P. Neidhardt (launchpad bug
+ #915910).
version 0.15.1 (23 December 2011)
- - corrected a bug in the classic style causing the address font and color not
- being carried over newlines, as reported by J. Smith.
+- Corrected a bug in the classic style causing the address font and color to not
+ be carried over newlines, as reported by J. Smith.
version 0.15.0 (19 December 2011)
- - corrected list spacing.
- - corrected inconsistent use of sans serif fonts in roman layout option.
- - the lmodern fonts are now automatically loaded only if installed on the
- system. The "nolmodern" option is now therefore obsolete.
- - complete code refactoring separating themes in separate styles and colors.
- - renamed \cvline to \cvitem, \cvlanguage to \cvitemwithcomment and \cvcomputer
- to \cvdoubleitem (the old command name still work and redirect to the new ones,
- but are deprecated).
- - removed the arbitrary minipage widths of skill proficiency vs comment in
- \cvitemwithcomments. The skill proficiency is now typeset exactly as given
- (i.e. one one line if no linebreaks are implicitly given) and the comment uses
- the remaining horizontal space.
- - changed the optional argument of \cvlistitem and \cvlistdoubleitem to specify
- the vertical skip after the item (as for \cvitem, cvitemwithcomments, etc).
- The way to change the list symbol is to redefine \listitemsymbol.
- - added a new style on top of classic and casual: oldstyle.
- - loaded the microtype package to improve typography.
+- Corrected list spacing.
+- Corrected inconsistent use of sans serif fonts in roman layout option.
+- The lmodern fonts are now automatically loaded only if they're installed on
+ the system. The "nolmodern" option is now therefore obsolete.
+- Completed code refactoring separating themes in separate styles and colors.
+- Renamed \cvline to \cvitem, \cvlanguage to \cvitemwithcomment and \cvcomputer
+ to \cvdoubleitem (the old command names still work and redirect to the new
+ ones, but are deprecated).
+- Removed the arbitrary minipage widths of skill proficiency vs comment in
+ \cvitemwithcomments. The skill proficiency is now typeset exactly as given
+ (i.e. one one line if no linebreaks are implicitly given) and the comment uses
+ the remaining horizontal space.
+- Changed the optional argument of \cvlistitem and \cvlistdoubleitem to specify
+ the vertical skip after the item (as for \cvitem, \cvitemwithcomments, etc).
+ The way to change the list symbol is to redefine \listitemsymbol.
+- Added a new style on top of classic and casual: oldstyle.
+- Loaded the microtype package to improve typography.
version 0.14.0 (04 December 2011)
- - added support for CJK, thanks to the help of P. D'Apice.
- - the use of \recomputelengths after modifying any length in the preamble is
- now unnecessary; \recomputelength is automatically called at the start of the
- document.
+- Added support for CJK, thanks to the help of P. D'Apice.
+- The use of \recomputelengths after modifying any length in the preamble is now
+ unnecessary; \recomputelength is automatically called at the start of the
+ document.
version 0.13.1 (11 November 2011)
- - corrected a bug introduced by v0.13 in the classic style when no \photo is
- used, as reported by S. Gislais (launchpad bug #888702).
+- Corrected a bug introduced by v0.13 in the classic style when no \photo is
+ used, as reported by S. Gislais (launchpad bug #888702).
version 0.13.0 (06 November 2011)
- - added a "black" color option to render the resume in black & white, as
- suggested by F. Bicarri.
- - removed the pdflatex option when loading hyperref to enable other engines
- (e.g., dvips, xetex), leftover from the v 0.11 cleanup, as reported by
- K. Amaterasu and P. Mavrogiorgos (launchpad bugs #754693 and #859834).
- - added a "purple" color option, as proposed by B. Ravel.
- - added a 3rd optional argument to the \photo command to control the thickness
- of the framebox. Setting it to 0pt will disable the frame around the photo, as
- requested by T. Krennwallner (launchpad bug #664568).
+- Added a "black" color option to render the resume in black & white, as
+ suggested by F. Bicarri.
+- Removed the pdflatex option when loading hyperref to enable other engines
+ (e.g., dvips, XeTeX), leftover from the v0.11 cleanup, as reported by
+ K. Amaterasu and P. Mavrogiorgos (launchpad bugs #754693 and #859834).
+- Added a "purple" color option, as proposed by B. Ravel.
+- Added a 3rd optional argument to the \photo command to control the thickness
+ of the framebox. Setting it to 0pt will disable the frame around the photo, as
+ requested by T. Krennwallner (launchpad bug #664568).
version 0.12.0 (03 August 2010)
- - prevented pagebreaks after sections and subsections (launchpad bug #409902),
- as originally reported by C. Gaspoz and fixed by launchpad user tentotwo).
+- Prevented pagebreaks after sections and subsections (launchpad bug #409902),
+ as originally reported by C. Gaspoz and fixed by launchpad user tentotwo.
version 0.11.0 (20 July 2010)
- - removed the \ifpdf check when loading the graphicx package, as graphicx does
- does check internally and this was preventing proper functionning with xelatex
- and luatex, as reported by A. Trautmann. The same check was also removed
- everywhere else in the document (i.e. when loading the color and hyperref
- packages).
+- Removed the \ifpdf check when loading the graphicx package, as graphicx
+ already does this check internally. This was preventing proper functioning
+ with XeTeX and LuaTeX, as reported by A. Trautmann. The same check was also
+ removed everywhere else in the document (i.e. when loading the color and
+ hyperref packages).
version 0.10.0 (13 June 2010)
- - fixed a compatibility issue with the natbib package (natbib uses \section*
- to format the bibliography title, while only \section was defined by
- moderncv), as reported on launchpad (launchpad bug #393920).
- - fixed a compatibility issues with (any package relying on) the etoolbox
- package, due to the double definition of \AtEndPreamble, as reported by
- D. Becker.
+- Fixed a compatibility issue with the natbib package (natbib uses \section* to
+ format the bibliography title, while only \section was defined by moderncv),
+ as reported on launchpad (launchpad bug #393920).
+- Fixed compatibility issues with (any package relying on) the etoolbox package,
+ due to the double definition of \AtEndPreamble, as reported by D. Becker.
version 0.9.0 (31 May 2010)
- - added support for the itemize, enumerate and description environments.
+- Added support for the itemize, enumerate and description environments.
version 0.8.0 (24 May 2010)
- - added support for multibib. Also modified the template to illustrate how to
+- Added support for multibib. Also modified the template to illustrate how to
show labels in the bibliography, as requested by Tom D. R. and Stefan K.
- - added a command to indicate your personal homepage (\homepage{url}), as
+- Added a command to indicate your personal homepage (\homepage{url}), as
requested by J. de Jong and A. Pairet.
- - corrected an alignment bug for text following a \quote with no immediate
+- Corrected an alignment bug for text following a \quote with no immediate
\section, as kindly reported by J. Vermeulen and L. Saliou.
- - corrected a spacing bug when no blank line (or \par) is left after
- \maketitle. Thanks to A. Menzel for reporting the strange behaviour.
- - corrected the alignment of the extrainfo title part when no picture was
- used, as reported by M. Bana.
- - corrected the missplacement of pdf bookmarks as noticed by L. Fortunato.
- - corrected several bugs linked to the code for checking for empty arguments
- in \cventry, as reported by B. Ekran (launchpad bug #268768), L. Păncescu and
+- Corrected a spacing bug when no blank line (or \par) is left after \maketitle.
+ Thanks to A. Menzel for reporting the strange behaviour.
+- Corrected the alignment of the \extrainfo title part when no picture was used,
+ as reported by M. Bana.
+- Corrected the misplacement of PDF bookmarks as noticed by L. Fortunato.
+- Corrected several bugs linked to the code for checking for empty arguments in
+ \cventry, as reported by B. Ekran (launchpad bug #268768), L. Păncescu and
E. Gregorio.
version 0.7.0 (17 June 2008)
- - corrected an outstanding spacing bug (space between cvlines longer
- than 1 line).
- - removed the need to use \closesection and \emptysection as internal
- tabulars are now always closed. This allows she use of bibliography packages
- such as bibunits. Thanks to S. Busch for pointing out the incompatibility and
- helping testing out the bug correction.
- - changed the definition of \photo: the first (optional) argument should
- give the desired width of the picture, instead of its height
- - corrected an alignment bug for \cvlistitems longer than 1 line, as
- reported by S. Nikolopoulos.
- - deprecated the commands \sethintscolumnlength and \sethintscolumntowidth.
+- Corrected an outstanding spacing bug where the space between cvlines was
+ longer than 1 line.
+- Removed the need to use \closesection and \emptysection as internal tabulars
+ are now always closed. This allows the use of bibliography packages such as
+ bibunits. Thanks to S. Busch for pointing out the incompatibility and helping
+ test out the bug correction.
+- Changed the definition of \photo: the first (optional) argument should give
+ the desired width of the picture, instead of its height
+- Corrected an alignment bug for \cvlistitems longer than 1 line, as reported by
+ S. Nikolopoulos.
+- Deprecated the commands \sethintscolumnlength and \sethintscolumntowidth.
Instead, just set \hintscolumnwidth to the desired length by using the regular
\setlength or \settowidth commands, and call \recomputelengths.
- - added the ability to control the width of the name placeholder in the
- classic theme, by setting the length \maketitlenamewidth. Again, don't forget
- to call \recomputelengths afterward.
+- Added the ability to control the width of the name placeholder in the classic
+ theme, by setting the length \maketitlenamewidth. Again, don't forget to call
+ \recomputelengths afterward.
version 0.6.0 (28 May 2007)
- - corrected some spacing bugs and cleaned up the code.
- - corrected a bug in the bibliography file of the examples spotted by
- U. Stöhr.
- - added color variants to the classic and casual style, as suggested by
+- Corrected some spacing bugs and cleaned up the code.
+- Corrected a bug in the bibliography file of the examples spotted by U. Stöhr.
+- Added color variants to the classic and casual styles, as suggested by
U. Stöhr.
- - added a page counter for resumes running longer than 1 page, as requested by
+- Added a page counter for resumes running longer than 1 page, as requested by
A. Martin. It can be disabled by the command \nopagenumbers{}.
- - added commands to include a mobile phone and fax number.
- - made the symbols used for the phone number, the email, ... customizable.
- To modify those symbols, just redefine \phonesymbol, emailsymbol, ...
- - corrected the pdf information given to hyperref as pointed out by
- C. Knuepfer.
- - rewrote the examples.
+- Added commands to include a mobile phone and fax number.
+- Made the symbols used for the phone number, the email etc. customizable. To
+ modify those symbols, just redefine \phonesymbol, \emailsymbol etc.
+- Corrected the PDF information given to hyperref as pointed out by C. Knuepfer.
+- Rewrote the examples.
version 0.5.0 (9 September 2006)
- - added a \photo command to display a picture. That command takes the name of
- the file with the picture as argument, and the desired height as optional
- argument.
- - implemented the needed commands to make moderncv compatible with BibTeX, as
+- Added a \photo command to display a picture. This command takes the name of
+ the file with the picture as a required argument and the desired height as an
+ optional argument.
+- Implemented the needed commands to make moderncv compatible with BibTeX, as
suggested by J. Lie. This makes it possible to display one's publications,
- stored in the BibTeX file 'publications.bib'
- by using:
+ stored in the BibTeX file "publications.bib" by using:
\nocite{*}
\bibliographystyle{plain}
\bibliography{publications}
- As usual, the name of the section title can be changed by redefining the
- command \refname.
- - added the \today command, useful for example if one need to add the date the
- resumé was produced with
+ As usual, the name of the section title can be changed by redefining \refname.
+- Added the \today command, useful for example if one needs to add the date the
+ resume was produced with:
\closesection{}
\vfill{\hfill{\scriptsize Produced \today.}}
at the end of your CV, as suggested by F. Hammann.
version 0.4.0 (2 May 2006)
- - removed the dependency on the geometry package, so that users can now invoke
- it themselve, and easily change the geometry of the page.
+- Removed the dependency on the geometry package so that users can now invoke it
+ themselves and easily change the geometry of the page.
version 0.3.0 (10 April 2006)
- - moderncv now uses the 'longtable' class, allowing cv sections to split
- across multiple pages.
- - the different lengths used by moderncv are now customizable! In particular,
- the first column (the one containing the date in the examples), can now be set
+- Moderncv now uses the longtable class, allowing CV sections to split across
+ multiple pages.
+- The different lengths used by moderncv are now customizable! In particular,
+ the first column (the one containing the date in the examples) can now be set
to any width, for people needing a smaller or larger one. To do that, either
use
\sethintscolumnlength{<length>},
@@ -374,33 +399,32 @@ version 0.3.0 (10 April 2006)
where <string> is a string of the desired length (usually, the longest string
that has to appear in the column). Thanks to A. Pöge for pointing out the need
of such a feature.
- - added the command \emptysection{}, which makes it possible to start a
- section without name. In combination with \closesection{}, this makes it
- possible to drop out of the layout of moderncv, and come back to it later.
- This should make the inclusion of arbitrary elements not covered by moderncv
- code possible.
- - corrected a spacing problem in the cventry command, as pointed out and
- solved by B. Eßmann.
+- Added the command \emptysection{}, which makes it possible to start an unnamed
+ section. In combination with \closesection{}, this makes it possible to drop
+ out of the layout of moderncv, and come back to it later. This should make the
+ inclusion of arbitrary elements not covered by moderncv code possible.
+- Corrected a spacing problem in the \cventry command, as pointed out and solved
+ by B. Eßmann.
version 0.2.0 (6 March 2006)
- - rewrite of the code to have the styles (fonts, colours, headers and footers)
+- Rewrite of the code to have the styles (fonts, colours, headers and footers)
be defined in different files than the class. The styles are now defined in a
separate file per style, named moderncvstyle<style_name>. It should now be
easy to write your own style, starting from moderncvstyleempty.sty. If you
feel you have created a nice style, just email it to me and I'll include it in
the next version.
- - due to the previous point, styles are now loaded by the command
+- Due to the previous point, styles are now loaded by the command
\moderncvstyle{style_name}. I couldn't figure out a way to preserve the old
"casual" and "classic" class options, so these are now broken! Use
\moderncvstyle{casual} or \moderncvstyle{classic} at the beginning of your
- document. This should be the only incompatibility with version 0.1.
- - added class option "nolmodern" for people without the latin modern fonts.
- - corrected some English mistakes in the examples. Thanks to M. H. Prager for
+ document. This should be the only incompatibility with v0.1.
+- Added class option "nolmodern" for people without the Latin Modern fonts.
+- Corrected some English mistakes in the examples. Thanks to M. H. Prager for
pointing them out.
- - added a \cvlistitem to produce items with a bullet (or whatever is defined
- in \listitemsymbol), and renamed \cvresume to \cvlistdoubleitem for
- consistency purpose. For compatibility reasons, the command \cvresume still
- works, but should be avoided.
+- Added a \cvlistitem to produce items with a bullet (or whatever is defined in
+ \listitemsymbol), and renamed \cvresume to \cvlistdoubleitem for consistency
+ purposes. For compatibility reasons, the command \cvresume still works, but
+ should be avoided.
version 0.1.0 (1 March 2006)
- - first release.
+- First release.
diff --git a/macros/latex/contrib/moderncv/KNOWN_BUGS b/macros/latex/contrib/moderncv/KNOWN_BUGS
index 15b86eccbc..25ef872007 100644
--- a/macros/latex/contrib/moderncv/KNOWN_BUGS
+++ b/macros/latex/contrib/moderncv/KNOWN_BUGS
@@ -1,15 +1,12 @@
-- When using the "fancy" style, undesired space is added between the bibliography
- head and the first entry, as well as after the last entry
-- Moderncv is incompatible with biblatex.
-- Footnotes generates errors (though the output seem correct when running with
- "-interaction=nonstopmode")
-- When using CJK, the last \clearpage required for fancyhdr to work properly kills
- the "lastpage" counter, hence also the page numbering.
-- Moderncv produces an error ("lonely \item--perhaps a missing list environment")
- when used with bibentry, through the output is actually correct. Amongst other,
- this causes compilation by LyX to stop.
-- The space after a cventry gets eaten up when the last argument contains a nested
- itemize environment. An ugly hack and incomplete solution was implemented by
- including a \strut in every item label, but this doesn't solve the problem for
- multi-line items. Ideally, the strut should end the item, but there seems to be
- no way to do this.
+- moderncv is incompatible with biber.
+- moderncv is incompatible with BibLaTeX.
+- moderncv is incompatible with babel in Spanish.
+
+- Skill matrices don't break automatically in fancy style.
+- Long names break the oldstyle style and possibly other styles (needs testing).
+- Long URLs in classic style can make the name break line. Fixed width for the address part must be implemented.
+- When using the fancy style, undesired space is added between the bibliography head and the first entry, as well as after the last entry.
+- Footnotes generate errors, but the output seems correct when running with "-interaction=nonstopmode"
+- When using CJK, the last \clearpage required for the fancyhdr package to work properly kills the "lastpage" counter, and therefore also the page numbering.
+- moderncv produces an error "lonely \item--perhaps a missing list environment" when used with the bibentry package, though the output is actually correct. Among other things, this causes compilation by LyX to stop.
+- The space after a \cventry gets eaten up when the last argument contains a nested itemize environment. An ugly hack and incomplete solution was implemented by including a \strut in every item label, but this doesn't solve the problem for multi-line items. Ideally, the \strut should end the item, but there seems to be no way to do this.
diff --git a/macros/latex/contrib/moderncv/README.md b/macros/latex/contrib/moderncv/README.md
index 1eb439d16b..19ff062dae 100644
--- a/macros/latex/contrib/moderncv/README.md
+++ b/macros/latex/contrib/moderncv/README.md
@@ -1,27 +1,44 @@
# moderncv
+[![Build template](https://github.com/moderncv/moderncv/actions/workflows/build-pdf.yml/badge.svg)](https://github.com/moderncv/moderncv/actions/workflows/build-pdf.yml)
+[![CTAN](https://img.shields.io/ctan/v/moderncv.svg)](https://www.ctan.org/pkg/moderncv)
+[![Matrix](https://img.shields.io/matrix/moderncv:matrix.org)](https://matrix.to/#/#moderncv:matrix.org)
+
## A modern curriculum vitae class for LaTeX
-**moderncv** provides a documentclass for typesetting curricula vitae in various styles. Moderncv aims to be both straightforward to use and customizable, providing five ready-made styles (classic, casual, banking, oldstyle and fancy) and allowing one to define his own by modifying colors, fonts, icons, etc.
+The `moderncv` package provides a document class for typesetting applications (curricula vitae and cover letters) in various styles. `moderncv` aims to be both straightforward to use and customizable, providing five ready-made styles (classic, casual, banking, oldstyle and fancy) and allowing you to define your own by modifying colors, fonts, icons, etc.
-Most commands are defined in such a way that arguments are optional.
+## Getting started
-Until a decent manual is written, one can always look in the `template.tex` file for an example. It can be compiled to pdf via `latexmk -pdf ./template.tex`.
+### Installation
+`moderncv` should already be included in your installed LaTeX distribution.
+If not, you can get the tarball of the package from [CTAN](https://www.ctan.org/pkg/moderncv).
+Alternatively, you can also build the package from source by cloning the its [GitHub repository](https://github.com/moderncv/moderncv) and compiling the included LaTeX files:
+```
+latexmk -pdf ./template.tex manual/moderncv_userguide.tex
+```
-If using [`academicons`](https://ctan.org/tex-archive/fonts/academicons) in the template, you need to use a Xe(La)TeX or Lua(La)TeX engine for them to render. Otherwise an alternative will be used automatically.
+### Usage
+To get started on your own CV, use and modify the template file `template.tex`.
+The user guide can be found in the folder `manual` and contains additional information on what the document class offers.
+Take a look at it to see if this package suits your needs.
-## Development
+If you are using the [`academicons`](https://ctan.org/tex-archive/fonts/academicons) package in the template, you will need to use a Xe(La)TeX or Lua(La)TeX engine to render the icons. Otherwise, an alternative icon package will be used automatically.
-[![Build template](https://github.com/moderncv/moderncv/actions/workflows/build-pdf.yml/badge.svg)](https://github.com/moderncv/moderncv/actions/workflows/build-pdf.yml)
-[![CTAN](https://img.shields.io/ctan/v/moderncv.svg)](https://www.ctan.org/pkg/moderncv)
-[![Matrix](https://img.shields.io/matrix/moderncv:matrix.org)](https://matrix.to/#/#moderncv:matrix.org)
+## Development
-As the main goal is to keep this package alive, it is maintained in a loosely structured team. You can contact us in our matrix room [moderncv:matrix.org](https://matrix.to/#/#moderncv:matrix.org), feel free to join if you have questions or want to contribute. Development takes places at [github.com/moderncv/moderncv](https://github.com/moderncv/moderncv).
+As the main goal is to keep this package alive, it is maintained in a loosely structured team.
+You can contact us in our matrix room [moderncv:matrix.org](https://matrix.to/#/#moderncv:matrix.org), feel free to join if you have questions or want to contribute.
+Development takes place at [github.com/moderncv/moderncv](https://github.com/moderncv/moderncv).
## Licence
-moderncv is licensed under the [LPPL-1.3c](https://spdx.org/licenses/LPPL-1.3c.html).
+
+`moderncv` is licensed under the [LPPL-1.3c](https://spdx.org/licenses/LPPL-1.3c.html).
## Origin
-Original author: Xavier Danaux <xdanaux@gmail.com><br/>
-Original repository: https://github.com/xdanaux/moderncv<br/>
-This repository is a fork aiming to maintain moderncv inside CTAN, since upstream is dead since 2016.
+
+Original author: Xavier Danaux <xdanaux@gmail.com>
+<br/>
+Original repository: https://github.com/xdanaux/moderncv
+
+This repository is a fork aiming to maintain `moderncv` inside CTAN, since upstream has been dead since 2016.
diff --git a/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf b/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf
index cadbefe386..0468a22e0f 100644
--- a/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf
+++ b/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex b/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex
index 26d2016178..feb6f31f6f 100644
--- a/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex
+++ b/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex
@@ -1,462 +1,1071 @@
-%% moderncv_userguide.tex (compiled with pdfLaTeX)
-%% Copyright 2007 Cristina Sambo
+%% moderncv_userguide.tex as shipped with 2024-07-18 v2.4.1 modern curriculum vitae and letter document class (moderncv)
+%% 2021 David Seus, cryptointerest@posteo.de
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.
-\documentclass[a4paper,11pt]{article}
+\documentclass[a4paper, 11pt]{article}
-\title{\bfseries Moderncv -- v. 0.6}
-\author{Package by Xavier Danaux \\ \begin{small}Documentation by Cristina Sambo \end{small}}
-\date{}
+\title{%
+ \texttt{moderncv} User Guide\\
+ {\small Package v2.4.1}%
+}
+% Cristina Sambo,
+\author{%
+ Package by Xavier Danaux\\
+ and\\
+ moderncv community\\
+ {\small Documentation by David Seus}%
+}
+\date{\today}
-%language and encoding options
+% Language and encoding options
\usepackage[english]{babel}
+\usepackage{ifxetex, ifluatex}
+\newif\ifxetexorluatex
+\ifxetex
+ \xetexorluatextrue
+\else
+ \ifluatex
+ \xetexorluatextrue
+ \else
+ \xetexorluatexfalse
+ \fi
+\fi
+
+% PDFLaTeX or LUALaTeX/XeLaTeX
+\ifxetexorluatex
+ % \usepackage{luatextra}
+ % \usepackage{lualatex-math}
+ \usepackage{shellesc} % Fix a bug for lualatex shellescape
+ % \usepackage{unicode-math}
+ % \setmathfont{xits-math.otf}
+\else
+ \usepackage[utf8]{inputenx} % Uncomment if using pdflatex, comment if using lualatex
+\fi
+\PassOptionsToPackage{T1}{fontenc} % T2A for Cyrillic
\usepackage[T1]{fontenc}
-\usepackage[latin1]{inputenc}
-%font options
+% Font options
\usepackage{txfonts}
\usepackage{marvosym}
\usepackage{pifont}
-%margins, spacing and page layout
-\usepackage[pdftex,colorlinks=true]{hyperref} %(hyperref must be loaded before geometry)
-\usepackage[pdftex]{geometry}
+% Margins, spacing and page layout
+\usepackage[pdftex, colorlinks=true]{hyperref} % hyperref must be loaded before geometry
+\usepackage[pdftex, marginparwidth=50pt]{geometry}
\geometry{top=2.5cm, bottom=3cm}
-\setlength{\parindent}{0pt} %(to soppress indentation when starting a new paragraph)
-\frenchspacing %(to soppress additional space after a full stop)
-
-%packages
-\usepackage[pdftex]{graphicx}
-\usepackage[pdftex]{xcolor}
-\usepackage[labelfont=sl,font=small,width=0.9\textwidth]{caption}
+\usepackage{parskip} % Replace paragraph indentation with vertical spacing
+\frenchspacing % Suppress additional space after a full stop
+\renewcommand{\arraystretch}{1.1}
+
+% Packages
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage[labelfont=sl, font=small, width=0.9\textwidth]{caption}
\usepackage{marvosym}
\usepackage{latexsym}
-
-%pdfLaTeX options
-\pdfpagewidth=\paperwidth
-\pdfpageheight=\paperheight
-\pdfimageresolution=150
-\pdfinfo{
- /Title (Moderncv -- v. 0.6)
- /Author (Cristina Sambo)
- /Subject (Moderncv package user's guide)
- /Keywords (curriculum vitae, LaTeX)
+\usepackage{url}
+\usepackage{scrhack} % Fix warnings when using KOMA with listings package
+\usepackage{xspace} % Fix spacing after macros
+\usepackage{mparhack} % Fix marginpar
+\usepackage{microtype}
+\usepackage{multicol} % Multicolumn text for long lists
+
+% Code listings
+\usepackage{listings}
+% \lstset{emph={trueIndex, root}, emphstyle=\color{BlueViolet}}% \underbar} % Special keywords
+\lstset{%
+ language=[LaTeX]Tex, % C++,
+ morekeywords={PassOptionsToPackage, selectlanguage},
+ keywordstyle=\color{cvblue}, % \bfseries,
+ basicstyle=\small\ttfamily,
+ % identifierstyle=\color{NavyBlue},
+ commentstyle=\color{gray}\ttfamily,
+ stringstyle=\rmfamily,
+ numbers=none, % left,
+ numberstyle=\scriptsize, % \tiny
+ stepnumber=5,
+ numbersep=8pt,
+ showstringspaces=false,
+ breaklines=true,
+ % frameround=ftff,
+ % frame=single,
+ belowcaptionskip=0.75\baselineskip,
+ % frame=L,
+ emph={
+ cvitem, cventry, cvdoubleentry, cvdoubleitem, cvtripleitem, cvlistitem, cvlistdoubleitem, cvcolumns, moderncvstyle, moderncvcolor,
+ cvskill, cvskilllegend, cvskillplainlegend, cvskillhead, cvskillentry, nopagenumbers,
+ name, born, address, email, link, social, phone, homepage, extrainfo, photo, quote, section, subsection, setlength, NewDocumentCommand, definecolor, colorlet, cvitemwithcomment,
+ recipient, subject, opening, closing, signature, enclosure
+ },
+ emphstyle={\color{cvblue}},
+ emph={[2]
+ familydefault, sfdefault, rmdefault, inputenc, moderncv, document, bibliographyitemlabel,
+ addresssymbol, mobilephonesymbol, fixedphonesymbol, faxphonesymbol, emailsymbol, homepagesymbol, linkedinsocialsymbol,
+ xingsocialsymbol, twittersocialsymbol, githubsocialsymbol, gitlabsocialsymbol,
+ stackoverflowsocialsymbol, bitbucketsocialsymbol, skypesocialsymbol, orcidsocialsymbol, researchgatesocialsymbol, arxivsocialsymbol, inspiresocialsymbol,
+ researcheridsocialsymbol, telegramsocialsymbol, whatsappsocialsymbol, signalsocialsymbol, matrixsocialsymbol, googlescholarsocialsymbol, cvstretchability, bornsymbol
+ },
+ emphstyle={[2]\color{cvblue!60!cvgrey}\bfseries},
+ literate={{é}{{\'e}}1},
}
-%my commands
-\definecolor{bluecv}{rgb}{0.25,0.5,0.75}
-\definecolor{greencv}{rgb}{0.55,0.85,0.35}
-\definecolor{redcv}{rgb}{1.00,0.30,0.30}
-\definecolor{orangecv}{rgb}{1,0.65,0.20}
-\definecolor{greycv}{rgb}{0.75,0.75,0.75}
+% Hyperlinks
+\usepackage{hyperref}
+\hypersetup{
+ unicode=true,
+ % draft, % Draft mode for printing (see below)
+ colorlinks=true, linktocpage=true, pdfstartpage=3, pdfstartview=FitV,
+ % colorlinks=false, linktocpage=false, pdfstartpage=3, pdfstartview=FitV, pdfborder={0 0 0}, % Black links (e.g., for printing)
+ breaklinks=true, pageanchor=true,
+ pdfpagemode=UseNone,
+ % pdfpagemode=UseOutlines,
+ plainpages=false, bookmarksnumbered, bookmarksopen=true, bookmarksopenlevel=1,
+ hypertexnames=true, pdfhighlight=/O, % nesting=true, frenchlinks,
+ urlcolor=cvblue, linkcolor=cvblue, citecolor=cvblue, % pagecolor=RoyalBlue,
+ % urlcolor=Black, linkcolor=Black, citecolor=Black, % pagecolor=Black,
+ % pdfborder={0 0 1}, % Width of PDF link border 0 0 1, 0 0 0 = colorlinks
+ % linkbordercolor=gray!15,
+ % citebordercolor=green!15,
+}
-%==================
+% Colors
+\definecolor{cvblue}{rgb}{0.22, 0.45, 0.70}
+\definecolor{cvgreen}{rgb}{0.35, 0.70, 0.30}
+\definecolor{cvred}{rgb}{0.95, 0.20, 0.20}
+\definecolor{cvorange}{rgb}{0.95, 0.55, 0.15}
+\definecolor{cvgrey}{rgb}{0.75, 0.75, 0.75}
+\definecolor{cvburgundy}{rgb}{0.596078, 0, 0} % burgundy: 139/255 (0.545098) or 152/255 (0.596078)
+\definecolor{cvgrey}{rgb}{0.55, 0.55, 0.55}
+\definecolor{cvpurple}{rgb}{0.50, 0.33, 0.80}
+
+% Macros
+\newcommand{\todo}[1]{\marginpar{\raggedright \textcolor{red}{[\textbf{TODO:} #1]}}}
+\newcommand{\todox}[1]{\textcolor{red}{[\textbf{TODO:} #1]}}
+\newcommand{\note}{\paragraph{Note.}}
+\newcommand{\code}[1]{\lstinline!#1!}
+\newcommand{\moderncv}{\code{moderncv}}
+\newcommand{\Moderncv}{\moderncv~}
+\newcommand{\github}{GitHub}
+\newcommand{\Github}{\github~}
+\newcommand{\ctan}{CTAN}
+\newcommand{\Ctan}{\ctan~}
+\newcommand{\cvtemplate}{\code{template.tex}}
+\newcommand{\Cvtemplate}{\cvtemplate~}
+\newcommand{\Latex}{\LaTeX~}
+\newcommand{\biblatex}{BibLaTeX}
+\newcommand{\Biblatex}{\biblatex~}
+\newcommand{\cvdoccolorbox}[1]{{\color{#1}\rule{4ex}{2ex}}}
+\newcommand{\moderncvGithub}{\url{https://github.com/moderncv/moderncv}}
+\newcommand{\moderncvCtan}{\url{https://ctan.org/pkg/moderncv}}
+
+
+
+
+
+% ==================
% DOCUMENT BEGINNING
-%==================
+% ==================
\begin{document}
\maketitle
-
\begin{abstract}
-\noindent \texttt{Moderncv}, as its author says in the readme file, provides a documentclass for typesetting modern curriculum vitaes in various styles. It is fairly customizable, allowing you to define your own style by changing the colors, the fonts, \dots\ and provides two default styles: classic and casual.
+ \noindent
+ The \Moderncv package provides a document class for typesetting modern curriculum vit\ae{} and cover letters in various styles.
+ Five predefined styles are available, each of which can be adjusted through various options for headings, footers and colors.
+ It is fairly customizable, allowing the user to adjust the look and feel of each style to their liking.
+ Several macros allow the user to add content to the CV and format it in a consistent way.
+ A letter of motivation consistent with the style is part of the template as well.
\end{abstract}
+\tableofcontents
+
-\section{Introduction}
-When I saw for the first time this class I was amazing: ``Here it is what I need'', I thought. Using the very clear examples, was easy to make my first curriculum.
-Indeed the class is very simple to use, in this documentation I will only put together all the things to help users to have all on hand.
-
-\smallskip
-\texttt{Moderncv} requires the following packages: \texttt{ifthen}, \texttt{ifpdf}, \texttt{color}, \texttt{lmodern}, \texttt{marvosym}, \texttt{url}, \texttt{hyperref}, \texttt{longtable}, \texttt{graphicx}, \texttt{fancyhdr}, usually all just included in the \LaTeX\ distributions.
-
-\section{In the preamble}
-
-At the very beginning of your preamble (that is the part before \verb|\begin{document}|) insert:
-
-\begin{verbatim}
-\documentclass[<options>]{moderncv}
-\end{verbatim}
-
-where the options are:
-
-\begin{description}
- \item[paper size options:] \texttt{a4paper}, \texttt{a5paper}, \texttt{b5paper}, \texttt{letterpaper}, \texttt{legalpaper}, \texttt{ex\-ec\-u\-tive\-pa\-per}, \texttt{landscape}
- \item[font size options:] \texttt{10pt}, \texttt{11pt}, \texttt{12pt}
- \item[font option:] \texttt{nolmodern}, for people without the latin modern fonts
- \item[color option:] \texttt{nocolor}, to have all in black and white
- \item[draft/final options:] \texttt{draft}, \texttt{final}
-\end{description}
-
-The default options are: \texttt{a4paper}, \texttt{11pt}, \texttt{color}, \texttt{final}.
-
-After the documentclass specification, choose the theme for your curriculum vit\ae:
-
-\begin{verbatim}
-\moderncvtheme[<options>]{casual}
-\end{verbatim}
-
-which is the default theme, or
-
-\begin{verbatim}
-\moderncvtheme[<options>]{classic}
-\end{verbatim}
-
-where the theme options are:
-
-\begin{description}
- \item[color options:] you can choose between five color:
- \begin{itemize}
- \item[\texttt{blue}] {\color{bluecv}\rule{1cm}{2ex}} (default color)
- \item[\texttt{green}] {\color{greencv}\rule{1cm}{2ex}}
- \item[\texttt{red}] {\color{redcv}\rule{1cm}{2ex}}
- \item[\texttt{orange}] {\color{orangecv}\rule{1cm}{2ex}}
- \item[\texttt{grey}] {\color{greycv}\rule{1cm}{2ex}}
- \end{itemize}
- \item[roman option:] \texttt{roman}, for {\fontsize{11}{12} \usefont{T1}{lmr}{m}{n}\selectfont roman} fonts, instead of \fontsize{11}{12} \usefont{T1}{lmss}{m}{n}\selectfont sans serif fonts.
-\end{description}
-
-Then you have to specify the character encoding (utf8, latin1, and so on):
-
-\begin{verbatim}
-\usepackage[<your encoding>]{inputenc}
-\end{verbatim}
-
-and you can adjust the page geometry:
-
-\begin{verbatim}
-\usepackage[<options>]{geometry}
-\recomputelengths
-\end{verbatim}
-
-where \verb|\recomputelengths| is required when changes are made to page layout lengths.
-
-Now we can get into the part most related to our curriculum vit\ae: our personal data. They will be inserted in the header of the first page, in the classic theme, or in the footer of every page, in the case of casual theme.
-
+
+\section{Getting started}
+\subsection{How to read this manual}
+This manual is organized as follows.
+The current section explains on how to get started with the \Moderncv package, i.e. how to install required packages.
+% \emph{Note that it is assumed that you know how to install \Latex packages in case some are missing.}
+Section \ref{section:moderncvTemplate} explains how to work with the \Moderncv template file step by step.
+Section \ref{section:customization} details the customizations that the user can make: the different styles, their options, colors and tips and tricks.
+Section \ref{section:implementationDetails} details the packages that \Moderncv uses, known problems and possible solutions to those problems.
+
+\subsection{Installation instructions}
+If the \Moderncv package does not ship with your \Latex distribution or if the installed version is too old, grab the \Moderncv code from \Ctan or \github:
+
+\begin{tabular}{l}
+ \moderncvCtan \\% [.5ex]
+ \moderncvGithub
+\end{tabular}
+
+\note Depending on your \Latex distribution, you may have to install some additional packages.
+Section \ref{section:implementationDetails:requiredPackages} lists all the packages that \Moderncv requires to be installed on your system.
+
+
+
+\section{The \texttt{moderncv} template step by step}
+This section is a quick reference to the \Moderncv package and should contain enough information to typeset a first working CV.
+\label{section:moderncvTemplate}
+The easiest way to get started with \Moderncv is to use the template that comes with the package.
+If \Moderncv is part of your \Latex distribution, search for the folder \Moderncv on your system, which should contain all the files for the package.
+In this folder, there should be a file called \cvtemplate.
+If you downloaded the package from \Github or \ctan, look for \Cvtemplate in the folder of the newly downloaded (and possibly extracted) package.
+
+\note If you downloaded \Moderncv from \Github or \Ctan and moved \Cvtemplate to another folder, make sure to adjust the \code{TEXINPUTS} variable to find the newly downloaded package.
+Otherwise, either the package version provided by your \Latex distribution gets used or \Latex throws an error if there is no other version installed.
+
+Test your setup by compiling \Cvtemplate and looking at the result.
+
+\note The \Moderncv package should compile with \code{pdflatex}, \code{lualatex} and \code{xelatex}.
+However, not all icons are available when using \code{pdflatex}, so using either \code{lualatex} or \code{xelatex} \emph{is highly recommended.}
+
+\subsection{Basic setup}
+A document using the \Moderncv document class is set up like any other document class.
+We will go through the template step by step.
+
+\subsubsection*{Configuring document class options}
+The \Moderncv document class is loaded as per usual, by
+\begin{lstlisting}
+ \documentclass[<options>]{moderncv}
+\end{lstlisting}
+where at most one value for each option can be passed to the document class:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.55\textwidth}}
+ \textbf{\code{paper}:} & \code{a4paper} (default), \code{a5paper}, \code{b5paper}, \code{letterpaper},
+ \code{legalpaper}, \code{executivepaper}, \code{landscape} \\
+ \textbf{\code{font family}:} & \code{sans}, \code{roman} \\
+ \textbf{\code{font size}:} & \code{10pt}, \code{11pt} (default), \code{12pt} \\
+ \textbf{\code{draft/final}:} & \code{draft}, \code{final} (default)
+\end{tabular}
+
+\subsubsection*{Choosing a \texttt{moderncv} style and color}
+Choose a \Moderncv style and color by adjusting the commands
+\begin{lstlisting}
+ \moderncvstyle{<style>}
+ \moderncvcolor{<color>}
+\end{lstlisting}
+As explained in \cvtemplate, the possible values are
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.65\textwidth}}
+ \textbf{\code{style}:} & \code{casual} (default), \code{classic}, \code{banking}, \code{oldstyle},
+ \code{fancy} \\
+ \textbf{\code{color}:} & \code{black} \cvdoccolorbox{black}, \code{blue} \cvdoccolorbox{cvblue} (default), \code{burgundy} \cvdoccolorbox{cvburgundy}, \code{green} \cvdoccolorbox{cvgreen}, \code{grey} \cvdoccolorbox{cvgrey}, \code{orange} \cvdoccolorbox{cvorange}, \code{purple} \cvdoccolorbox{cvpurple}, \code{red} \cvdoccolorbox{cvred}
+\end{tabular}
+
+\note Some of the styles take additional options to fine-tune their appearance.
+To keep this overview short, these options will be described in section \ref{section:customization:stylesAndOptions}.
+
+\subsubsection*{Font family and page numbering}
+The default font family is set by the line \code{\\renewcommand\{\\familydefault\}\{\\sfdefault\}} in \cvtemplate.
+Use \code{\\sfdefault} for the default sans-serif font, \code{\\rmdefault} for the default roman font, and likewise for any \TeX{} font name.
+The general syntax is
+\begin{lstlisting}
+ \renewcommand{\familydefault}{<fontfamily>}
+ % \nopagenumbers{}
+\end{lstlisting}
+Uncommenting \code{\%\\nopagenumbers\{\}} suppresses automatic page numbering for CVs longer than one page.
+
+\subsubsection*{Adjusting input encoding}
+If you are not using \code{xelatex} or \code{lualatex}, which both use \code{utf8} encoding by default, uncomment the \code{\\usepackage[utf8]\{inputenc\}} import and change the encoding as needed.
+
+\subsubsection{Language-specific setup}
+The \code{babel} package can be loaded in the preamble of your CV.
+
+\note \Moderncv doesn't work with \code{babel} in Spanish (see this \href{https://github.com/moderncv/moderncv/issues/103}{GitHub issue}).
+
+For CJK users, uncomment the \code{\\usepackage\{CJKutf8\}} import.
+
+\subsection{Personal data}
+Edit the personal data section to reflect your personal information.
+This data will appear in the header of the first page of the CV and/or in the footer of every page, as well as on the cover letter.
+Most of the commands are optional, so try out what you like and see what you need.
+
+\paragraph{\code{\\name}}
+A command for your name. Takes the given name and surname as arguments.
+\begin{lstlisting}
+ \name{<given name>}{<surname>}
+\end{lstlisting}
+
+\paragraph{\code{\\title}}
+A command for a document title. Could be used for a generic CV title, job title, etc.
+\begin{lstlisting}
+ \title{<title>}
+\end{lstlisting}
+
+\paragraph{\code{\\born}}
+A command for a birth date.
+\begin{lstlisting}
+ \born{<birth date>}
+\end{lstlisting}
+
+\paragraph{\code{\\address}}
+A command for a three-lined street address.
+\begin{lstlisting}
+ \address{<street address>}{<city and postcode>}{<country>}
+\end{lstlisting}
+
+\paragraph{\code{\\phone}}
+A command for a phone number. Takes the phone type as an optional argument.
+\begin{lstlisting}
+ \phone[<type>]{<phone number>}
+\end{lstlisting}
+The allowed values for \code{<type>} are \code{fax}, \code{fixed} and \code{mobile}.
+
+\paragraph{\code{\\email}}
+A command for an email address.
+\begin{lstlisting}
+ \email{<email address>}
+\end{lstlisting}
+
+\paragraph{\code{\\homepage}}
+A command for a personal website.
+\begin{lstlisting}
+ \homepage{<web address>}
+\end{lstlisting}
+
+\paragraph{\code{\\social}}
+A command for a social media account.
+Takes the platform as an optional argument.
+\begin{lstlisting}
+ \social[<platform>]{<username or handle>}
+\end{lstlisting}
+The following values are supported for \code{<platform>}:
\begin{itemize}
-\item \verb|\firstname{John}|
-\item \verb|\familyname{Doe}|
-\item \verb|\title{Resum\'e title}|: optional
-\item \verb|\address{street and number}{postcode city}|: optional
-\item \verb|\mobile{mobile}|: optional
-\item \verb|\phone{phone}|: optional
-\item \verb|\fax{fax}|: optional
-\item \verb|\email{email}|: optional
-\item \verb|\extrainfo{additional information}|: optional; here you can put, for example, the address of your website
-\item \verb|\photo[64pt]{picture}|: optional; \texttt{64pt} is the height the picture, you can set here the size you prefer; \texttt{picture} is the name of the picture file
-\item \verb|\quote{Some quote}|: optional
-\end{itemize}
-
-Finally you can suppress automatic page numbering for CVs longer than one page:
-
-\begin{verbatim}
-\nopagenumbers{}
-\end{verbatim}
-
-\subsection{Examples}
-
-In practice, you will type:
-
-\begin{verbatim}
-\documentclass[11pt,a4paper]{moderncv}
-
-% moderncv themes
-\moderncvtheme[green]{casual}
-
-% character encoding
-\usepackage[utf8]{inputenc}
-
-% adjust the page margins
-\usepackage[scale=0.8]{geometry}
-\recomputelengths
-
-% personal data
-\firstname{John}
-\familyname{Doe}
-\title{Design enthusiast}
-\address{12 somestreet}{3456 somecity}
-\mobile{+123 456 7890}
-\phone{+12 (3)456 78 90}
-\fax{+12 (3)456 78 90}
-\email{jdoe@design.org}
-\extrainfo{\weblink{www.ctan.org}}
-\photo[64pt]{jdoe_picture}
-\quote{Any intelligent fool can make things bigger, more complex,
-and more violent. It takes a touch of genius -- and a lot of courage -- to
-move in the opposite direction.}
-
-\begin{document}
-\maketitle
-
-... <what you'll see in the next section>
-
-\end{document}
-\end{verbatim}
-
-to obtain a casual moderncv in green, as shown in figure \ref{fig:casual}, and you will substitute the line describing the theme with:
-
-\begin{verbatim}
-% moderncv themes
-\moderncvtheme[blue]{classic}
-\end{verbatim}
-
-to obtain a classic moderncv in blue, as shown in figure \ref{fig:classic}.
-
-
-\begin{figure}[p]
- \centering
- \fbox{\includegraphics[angle=90,width=\textwidth]{cv_casual.pdf}}
- \caption{An example of casual moderncv in green.}
- \label{fig:casual}
-\end{figure}
-
-\begin{figure}[p]
- \centering
- \fbox{\includegraphics[angle=90,width=\textwidth]{cv_classic.pdf}}
- \caption{An example of classic moderncv in blue.}
- \label{fig:classic}
-\end{figure}
-
-\section{Customize sections}
-
-Now we are ready to edit the part between \verb|\begin{document}| and \verb|\end{document}|.
-
-As you can seen in figure \ref{fig:casual} e \ref{fig:classic}, you can divide your CV into sections, each of them describing what you are, what you know and what you have done in your life. Every section is divide into items chosen from different flavours. More in details:
-
-\subsection{Section}
-
-The command to open a new section is:
-
-\begin{verbatim}
-\section{<title>}
-\end{verbatim}
-
-and every section can be divided into subsections:
-
-\begin{verbatim}
-\subsection{<title>}
-\end{verbatim}
-
-If necessary, there is a command to close the section:
-
-\begin{verbatim}
-\closesection{}
-\end{verbatim}
-
-and even one to create an empty section:
-
-\begin{verbatim}
-\emptysection{}
-\end{verbatim}
-
-An example of their usage can be the next one:
-
-\begin{verbatim}
-\section{Section with your own content}\closesection
-Your content here, inside the normal \LaTeX{} environment.
-You can use any regular \LaTeX{} command, display mathematics
-\[e =m\,c^2,\]
-put some table or figure, \dots
-
-\emptysection{}
-\cvitem{Now}{Back to moderncv layout, without making a new section :-)}
-\end{verbatim}
-
-whose results is shown in figure \ref{fig:ex_sec}.
-
-\begin{figure}[!ht]
- \centering
- \fbox{\includegraphics[width=0.9\textwidth]{ex_sec}}
- \caption{Example of usage of section commands.}
- \label{fig:ex_sec}
-\end{figure}
-
-\subsection{Items}
-
-Inside sections, you can choose between different kind of items depending on the purpose:
+ \begin{multicols}{4}
+ \item \code{arxiv}
+ \item \code{battlenet}
+ \item \code{bitbucket}
+ \item \code{codeberg}
+ \item \code{discord}
+ \item \code{github}
+ \item \code{gitlab}
+ \item \code{googlescholar}
+ \item \code{inspire}
+ \item \code{instagram}
+ \item \code{linkedin}
+ \item \code{mastodon}
+ \item \code{matrix}
+ \item \code{orcid}
+ \item \code{playstation}
+ \item \code{researcherid}
+ \item \code{researchgate}
+ \item \code{signal}
+ \item \code{skype}
+ \item \code{soundcloud}
+ \item \code{stackoverflow}
+ \item \code{steam}
+ \item \code{telegram}
+ \item \code{tiktok}
+ \item \code{twitch}
+ \item \code{twitter}
+ \item \code{whatsapp}
+ \item \code{xbox}
+ \item \code{xing}
+ \item \code{youtube}
+ \end{multicols}
+\end{itemize}
+\paragraph{\code{\\extrainfo}}
+A command for any extra information.
+\begin{lstlisting}
+ \extrainfo{<extra information>}
+\end{lstlisting}
+
+\paragraph{\code{\\photo}}
+A command for a photo.
+Takes the image file name as a required argument.
+Takes the height of the photo and the thickness of the photo frame as optional arguments.
+\begin{lstlisting}
+ \photo[<photo height>][<frame thickness>]{<photo file name>}
+\end{lstlisting}
+
+\paragraph{\code{\\quote}}
+A command for a quote.
+\begin{lstlisting}
+ \quote{<quote>}
+\end{lstlisting}
+
+\note{Long names and URLs can break some CVs and cover letters depending on the used style. Manually inserting line breaks for names with \code{\\\\} can help for \texttt{oldstyle} or \texttt{fancy}. Adjusting lengths as described in section \ref{subsection:adjusting:lengths} could help to mitigate issues with long URLs.}
+
+\paragraph{Pictures.}
+For some occasions you may need to include pictures besides the portrait photo. For this task it is helpful to know basic lengths used in \moderncv. For a more detailed description of lengths see section \ref{subsection:adjusting:lengths}.
+For instance, pictures can be included with \code{\\includegraphics}:
+\begin{lstlisting}
+ \hspace{\hintscolumnwidth + \separatorcolumnwidth}\includegraphics[<scale>]{<file name picture>}
+\end{lstlisting}
+Adding \code{\\hspace} in units of basic \code{moderncv} lengths will fit them more naturally into the CV or resume.
+
+\paragraph{Bibliography.}
+In case BibTeX is used, the bibliography settings are adjusted in the lines
+\begin{lstlisting}
+ % to show numerical labels in the bibliography (default is to show no labels)
+ % \renewcommand*{\bibliographyitemlabel}{[\arabic{enumiv}]}
+ % \renewcommand{\refname}{Articles}
+
+ % bibliography with mutiple entries
+ % \usepackage{multibib}
+ % \newcites{book, misc}{{Books}, {Others}}
+\end{lstlisting}
+By default, no labels are shown for bibliography entries.
+Uncommenting the line \code{\%\\renewcommand*\{\\bibliographyitemlabel\}\{[\\arabic\{enumiv\}]\}}
+allows one to fine-tune the labels.
+Uncommenting the line \code{\%\\renewcommand\{\\refname\}\{Articles\}} allows one to redefine the bibliography heading string ``Publications'' that is shown by default.
+Finally, adjustments using the \code{multibib} package can be done in the last two lines shown here.
+
+\note \Biblatex is currently not supported.
+
+\subsection{Modifying CV content}
+\subsubsection{Structuring the CV}
+As with any other document style, the CV can be structured into sections and subsections using \code{\\section} and \code{\\subsection}.
+
+The \Moderncv package provides some macros to add content to your CV.
+The easiest way to understand their intended use is to look at how they're used in the template.
+Nonetheless, we list the macros here along with a short description of their intended use.
+
+\subsubsection{General macros}
+
+\paragraph{\code{\\cvitem}}
+A flexible command for a single CV entry.
+Takes the descriptor and body text as required arguments.
+Can be used to list job experiences and similar.
+\begin{lstlisting}
+ \cvitem{<descriptor>}{<body>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvdoubleitem}}
+A two-column variation of \code{\\cvitem}.
+Takes four required arguments: the descriptor and body text of the first column and the descriptor and body text of the second column.
+Can be used to enter skills, such as computer skills or language skills, in a two-column fashion.
+\begin{lstlisting}
+ \cvdoubleitem{<descriptor 1>}{<body 1>}{<descriptor 2>}{<body 2>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvtripleitem}}
+A three-column variation of \code{\\cvitem}.
+Takes six required arguments: the descriptor and body text of the first column, second and third column.
+Can be used to enter skills, such as computer skills or language skills, in a three-column fashion.
+\begin{lstlisting}
+ \cvtripleitem{<descriptor 1>}{<body 1>}{<descriptor 2>}{<body 2>}{<descriptor 3>}{<body 3>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvitemwithcomment}}
+A variation of \code{\\cvitem} with an additional argument for a comment.
+Can be used to enter skills such as computer skills or language skills.
+\begin{lstlisting}
+ \cvitemwithcomment{<descriptor>}{<skill level>}{<comment>}
+\end{lstlisting}
+
+\paragraph{\code{\\cventry}}
+A command for entering an education or job experience.
+Takes six required arguments: date(s), degree/job title, educational institution/employer, city, academic grade and description.
+While arguments 3 to 6 aren't optional, they can be left empty.
+If line breaks in argument 6 aren't done properly, a minipage can be used.
+Alternatively, \code{\\newline\{\}} can be used to break lines in argument 6.
+\begin{lstlisting}
+ \cventry{<year--year>}{<degree/job title>}{<institution/employer>}
+ {<city>}{<grade>}{<description>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvlistitem}}
+A command for a single bullet-list item.
+Very long lines get broken.
+\begin{lstlisting}
+ \cvlistitem{<item>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvlistdoubleitem}}
+A two-column variation of \code{\\cvlistitem}.
+\begin{lstlisting}
+ \cvlistdoubleitem{<item 1>}{item 2>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvcolumns}}
+An environment typesetting multicolumn \code{\\cvitem}s.
+This can be combined with the \code{itemize} environment.
+\begin{lstlisting}
+ \begin{cvcolumns}
+ \cvcolumn{<category 1>}{<content>}
+ \cvcolumn{<category 2>}{<content>}
+ \cvcolumn[<width>]{<content>}
+ \end{cvcolumns}
+\end{lstlisting}
+\code{<width>} is a number between 0 and 1 controling the width of the column.
+
+\subsubsection{Skill matrix macros}
+The skill matrix is a table for displaying skills such as computer skills or project management skills graphically.
+The skill matrix table consists of several elements:
\begin{itemize}
- \item in the sections describing your education or your job experiences, you can use:
- \begin{verbatim}
-\cventry{years}{degree/job title}{institution/employer}
-{localization}{optional: grade/...}
-{optional: comment/job description}
- \end{verbatim}
-\vspace{-20pt}
-where the last three arguments are optional
- \item inside `language' cvsection environment, you can type every entry with:
- \begin{verbatim}
-\cvlanguage{name}{level}{comment}
- \end{verbatim}
- \item inside `computer skills' cvsection environment, you can type every entry with:
- \begin{verbatim}
-\cvcomputer{category}{programs}{category}{programs}
- \end{verbatim}
- \item to typeset lines with a hint on the left:
- \begin{verbatim}
-\cvline{leftmark}{text}
- \end{verbatim}
- \item to typeset entry with a description on the left, but in two columns inside a cvsection:
- \begin{verbatim}
-\cvdoubleitem{subtitle}{text}{subtitle}{text}
- \end{verbatim}
- \item to typeset lists on one column inside a cvsection:
- \begin{verbatim}
-\cvlistitem{point1}
- \end{verbatim}
- \item to typeset lists on two columns inside a cvsection:
- \begin{verbatim}
-\cvlistdoubleitem{point1}{point2}
- \end{verbatim}
- \item to add a section listing all your publications stored in a BibTeX file:
- \begin{verbatim}
-\nocite{*}
-\bibliographystyle{plain}
-\bibliography{BibTeX_file}
- \end{verbatim}
-\vspace{-20pt}
- where the name of the section title can be changed by redefining the \texttt{refname} with \verb|\renewcommand{\refname}{<new_name>}|
+ \item the graphical representation of the skill on a scale from 0 to 5,
+ \item the legend to explain the meaning of the scale,
+ \item a header line to explain the meaning of the table columns and
+ \item the actual skill entries.
\end{itemize}
-\subsubsection*{Example}
-
-Let's put all together and see in figure \ref{fig:sections} what is the result:
-
-\begin{verbatim}
-... preamble ...
-\begin{document}
-\section{Education}
-\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
-\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
-%
-\section{Master thesis}
-\cvline{title}{\emph{Title}}
-\cvline{supervisors}{Supervisors}
-\cvline{description}{\small Short thesis abstract}
-%
-\section{Experience}
-\subsection{Vocational}
-\cventry{year--year}{Job title}{Employer}{City}{}{Description}
-\cventry{year--year}{Job title}{Employer}{City}{}{Description}
-\subsection{Miscellaneous}
-\cventry{year--year}{Job title}{Employer}{City}{}%
- {Description line 1\newline{}Description line 2}
-%
-\section{Languages}
-\cvlanguage{language 1}{Skill level}{Comment}
-\cvlanguage{language 2}{Skill level}{Comment}
-%
-\section{Computer skills}
-\cvcomputer{category 1}{XXX, YYY, ZZZ}{category 3}{XXX, YYY, ZZZ}
-\cvcomputer{category 2}{XXX, YYY, ZZZ}{category 4}{XXX, YYY, ZZZ}
-%
-\section{Interests}
-\cvline{hobby 1}{\small Description}
-\cvline{hobby 2}{\small Description}
-\cvline{hobby 3}{\small Description}
-%
-\closesection{}
-\pagebreak
-%
-\section{Extra}
-\cvlistitem{Item 1}
-\cvlistitem{Item 2}
-\cvlistitem{Item 3}
-%
-\section{Extra 2}
-\cvlistdoubleitem{Item 1}{Item 4}
-\cvlistdoubleitem{Item 2}{Item 5}
-\cvlistdoubleitem{Item 3}{}
-%
-% Publications from a BibTeX file
-\nocite{*}
-\bibliographystyle{plain}
-\bibliography{publications} % 'publications' is the name of a BibTeX file
-%
-\end{document}
-\end{verbatim}
-
-\begin{figure}[!ht]
- \centering
- \fbox{\includegraphics[angle=90,width=\textwidth]{test_cvsection2.pdf}}\\
- \fbox{\includegraphics[angle=90,width=\textwidth]{test_cvsection1.pdf}}
-\caption{Example of usage of items inside cvsections.}
- \label{fig:sections}
-\end{figure}
-
-\section{More customizations}
-
-You have some useful commands to personalize your CV further.
-
-\subsection*{Modifying the symbols}
-You can modify the symbols used for the personal data (phone number, the email, \ldots) redefining \texttt{phonesymbol}, \texttt{emailsymbol}, \texttt{addresssymbol}, \texttt{mobilesymbol}, \texttt{faxsymbol}.
-
-For example: if you want to use the dingbat fonts, load the \texttt{pifont} package in the preamble, then substitute the default symbol \Telefon\ with the dingbat symbol \ding{38}\ by:
-\begin{verbatim}
-\renewcommand{\phonesymbol}{\ding{38}}
-\end{verbatim}
-
-You can change the symbol for lists in two way:
+\paragraph{\code{\\cvskill}}
+A command for the graphical representation of a single skill.
+The required argument must be a number from 0 to 5.
+\begin{lstlisting}
+ \cvskill{<0-5>}
+\end{lstlisting}
+This command can be used outside of the skill matrix, too.
+
+\paragraph{\code{\\cvskilllegend}}
+A command for a legend for the skill matrix.
+Takes six optional arguments: post-padding width and the descriptions for the five skill levels.
+\begin{lstlisting}
+ \cvskilllegend
+ \cvskilllegend*[<post-padding>][<level 1>][<level 2>][<level 3>]
+ [<level 4>][<level 5>]{<descriptor>}
+\end{lstlisting}
+The command with no arguments inserts the legend in its standard form: without a descriptor or any lines.
+An optional asterisk toggles the inclusion of a dashed line.
+\code{<post-padding>} must be a valid length like \code{1em} or \code{1ex}.
+
+The most general form of this command can be used to translate the legend descriptions into other languages or to add a name descriptor:
+\begin{lstlisting}
+ % Example: German translation
+ \cvskilllegend[0.2em][Grundkenntnisse]
+ [Grundkenntnisse und eigene Erfahrung in Projekten]
+ [Umfangreiche Erfahrung in Projekten]
+ [Vertiefte Expertenkenntnisse][Experte/Guru]{Legende}
+\end{lstlisting}
+
+\paragraph{\code{\\cvskillplainlegend}}
+A variation of \code{\\cvskilllegend} with the first three skill levels in the first column.
+\begin{lstlisting}
+ \cvskillplainlegend
+ \cvskillplainlegend*[<post-padding>][<level 1>][<level 2>]
+ [<level 3>][<level 4>][<level 5>]{<descriptor>}
+\end{lstlisting}
+
+\paragraph{\code{\\cvskillhead}}
+A command for a header line for the skill matrix.
+Takes five optional arguments: post-padding width, level, skill label, years of experience and a comment.
+\begin{lstlisting}
+ \cvskillhead[<post-padding>][<level>][<skill>][<years of experience>][<comment>]
+\end{lstlisting}
+\code{<post-padding>} must be a valid length like \code{1em} or \code{1ex}.
+
+\paragraph{\code{\\cvskillentry}}
+A command for an entry in the skill matrix.
+Takes five required arguments: skill category, skill level (0 to 5), skill name, years of experience and a comment.
+Takes a single optional argument for the post-padding width.
+\begin{lstlisting}
+ \cvskillentry*[<post-padding>]{<skill category>}{<0-5>}
+ {<skill name>}{<years of experience>}{<comment>}
+\end{lstlisting}
+An optional asterisk toggles the inclusion of a dashed line.
+\code{<post-padding>} must be a valid length like \code{1em} or \code{1ex}.
+
+How to make length adjustments to the skill matrix will be explained in section \ref{section:length:skillmatrix}.
+
+\subsection{Letter of motivation}
+
+In order to provide additional information for a job application, {\moderncv} provides a motivation letter. Define the following recipient data fields to customize your letter:
+\paragraph{\code{\\recipient}}
+A command for the letter's recipient. This allows line breaks to properly format the recipient's address.
+\begin{lstlisting}
+ \recipient{<Team or contact person>}{<company>\\<street>\\<city>}
+\end{lstlisting}
+
+\paragraph{\code{\\date}}
+A command to set the letter's date.
+\begin{lstlisting}
+ \date{<your custom date>}
+\end{lstlisting}
+
+\paragraph{\code{\\subject}}
+A command to define the job application subject.
+\begin{lstlisting}
+ \subject{<subject>}
+\end{lstlisting}
+
+\paragraph{\code{\\opening}}
+A command to set your opening (e.g. ``Dear X,'' or ``To whom it may concern,'').
+\begin{lstlisting}
+ \opening{<greeting>}
+\end{lstlisting}
+
+\paragraph{\code{\\closing}}
+A command to set your closing (e.g. ``Sincerely,'' or ``Yours truly,'').
+\begin{lstlisting}
+ \closing{<closing>}
+\end{lstlisting}
+
+\paragraph{\code{\\signature}}
+An optional command to include your signature after the closing. This feature is defined using the \code{\\includegraphics}. The first argument is the scale and the second argument is the filename of your scanned signature.
+\begin{lstlisting}
+ \signature{<scale>}{<signature filename>}
+\end{lstlisting}
+
+\paragraph{\code{\\enclosure}}
+A command to list the attached documents. The first optional parameter allows a redefinition of the default ``Enclosure'' label.
+\begin{lstlisting}
+ \enclosure[<optional alternative label>]{<list of documents>}
+\end{lstlisting}
+
+\note If typesetting the resume in Chinese using CJK an additional \code{\\clearpage} is required after the \code{\\makeletterclosing} command. This helps \code{fancyhdr} to work correctly with CJK. Otherwise it will remove the page numbering by making \code{lastpage} undefined.
+
+\section{Customization}
+\label{section:customization}
+\subsection{Styles and their options}
+\label{section:customization:stylesAndOptions}
+Each style allows fine-tuning via options passed into the \code{\\moderncvstyle} command:
+\begin{lstlisting}
+ \moderncvstyle[<option 1>, <option 2>, ...]{<style>}
+\end{lstlisting}
+Each style defines its own options, and not all options are available for each style.
+Below is a list of all the options available for each style:
+
+\paragraph{\code{casual}}
+This style allows the following options which \emph{only} affect header and footer styles:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.72\textwidth}}
+ \textbf{\code{head alignment}} & values: \code{left}, \code{right} (default).
+ Aligns the title and the picture if one is included. \\
+ \textbf{\code{name}} & values: \code{alternate}.
+ Displays the name in all lowercase.
+ Differentiation of the name is done by color (disabled by default).
+ This feature is discouraged for longer names. \\
+ \textbf{\code{data in head}} & values: \code{details}, \code{nodetails} (default).
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{symbols}} & values: \code{symbols} (default), \code{nosymbols}.
+ Toggles between inclusion of icons or text-based abbreviations for personal data.
+\end{tabular}
+
+\paragraph{\code{classic}}
+This style allows the following options which \emph{only} affect header and footer styles:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.75\textwidth}}
+ \textbf{\code{alignment}} & values: \code{left} (default), \code{right}.
+ Aligns the address block and the picture. \\
+ \textbf{\code{data in head}} & values: \code{details}, \code{nodetails} (default).
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{symbols}} & values: \code{symbols} (default), \code{nosymbols}.
+ Toggles between inclusion of icons or text-based abbreviations for personal data.
+\end{tabular}
+
+\paragraph{\code{banking}}
+This style allows the following options:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.68\textwidth}}
+ \textbf{\code{alignment (body)}} & values: \code{left} (default), \code{center}, \code{right}.
+ Aligns the entries in the style. \\
+ \textbf{\code{rule style}} & values: \code{fullrules}, \code{shortrules}, \code{mixedrules} (default), \code{norules}.
+ Adjusts the rules used in the style. \\
+ \textbf{\code{data in head}} & values: \code{details}, \code{nodetails} (default).
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{symbols}} & values: \code{symbols} (default), \code{nosymbols}.
+ Toggles between inclusion of icons or text-based abbreviations for personal data.
+\end{tabular}
+
+\paragraph{\code{oldstyle}}
+This style allows the following options:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.73\textwidth}}
+ \textbf{\code{data in head}} & values: \code{details}, \code{nodetails} (default).
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{symbols}} & values: \code{symbols} (default), \code{nosymbols}.
+ Toggles between inclusion of icons or text-based abbreviations for personal data.
+\end{tabular}
+
+\paragraph{\code{fancy}}
+This style allows the following options:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.73\textwidth}}
+ \textbf{\code{data in head}} & values: \code{details}, \code{nodetails} (default).
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{symbols}} & values: \code{symbols} (default), \code{nosymbols}.
+ Toggles between inclusion of icons or text-based abbreviations for personal data.
+\end{tabular}
+
+\note Only one option from each option category can be passed in at a time, e.g.
+\begin{lstlisting}
+ \moderncvstyle[left, nosymbols]{casual}
+\end{lstlisting}
+
+\paragraph{\code{contemporary}}
+This style allows the following options which \emph{only} affect header and footer styles:
+
+\begin{tabular}{r@{\hspace{2ex}}p{0.75\textwidth}}
+ \textbf{\code{alignment}} & values: \code{left} (default), \code{right}.
+ Aligns the address block and the picture. \\
+ \textbf{\code{data in head}} & values: \code{details} (default), \code{nodetails}.
+ Toggles between the header and footer as the location of personal data on the page. \\
+ \textbf{\code{qr}} & values: \code{qr} (default), \code{noqr}.
+ Enables or disables the inclusion of a QR code of your personal website.
+\end{tabular}
+\note For the \code{contemporary} style it is recommended to use the \code{\\moderncvcolor\{cerulean\}} color scheme. The \code{contemporary} style is even more appealing with reduced margins. Use this in your preamble:
+\begin{lstlisting}
+ \usepackage[hmargin=0.5in,vmargin=10pt]{geometry}
+\end{lstlisting}
+
+\subsection{Adjusting colors}
+The colors of each style can be adjusted.
+
+\note The color theme must be loaded \emph{before} \code{\\moderncvstyle}, i.e.
+\begin{lstlisting}
+ \moderncvcolor{blue}
+ \moderncvstyle{casual}
+\end{lstlisting}
+
+\paragraph{Base colors.}
+Each style defines three main colors: \code{color0}, \code{color1} and \code{color2}.
+\code{color0} is black and the main text color.
+\code{color1} is the main theme color, like blue, green, etc.
+\code{color2} is a some form of grey used for the user data, etc.
+These colors can be redefined by using either \code{\\definecolor} or \code{\\colorlet}:
+\begin{lstlisting}
+ \definecolor{color1}{rgb}{0.55, 0.55, 0.55} % dark grey
+ \colorlet{color1}{black}
+\end{lstlisting}
+Any mechanism for naming and defining colors used by the \code{xcolor} package can be used to redefine the colors of a \Moderncv style.
+
+\paragraph{Fine tuning.}
+If an even finer control over the color scheme of the style is desired, the following color settings are used internally for the \code{casual} style and can be redefined:
+\begin{lstlisting}
+ % Head and footer
+ \colorlet{lastnamecolor}{color1}
+ \colorlet{namecolor}{lastnamecolor}
+ \colorlet{headrulecolor}{color1}
+ \colorlet{firstnamecolor}{lastnamecolor!50}
+ \colorlet{titlecolor}{color2}
+ \colorlet{addresscolor}{color2}
+ \colorlet{quotecolor}{color1}
+ \colorlet{pictureframecolor}{color1}
+ % Body
+ \colorlet{bodyrulecolor}{color1}
+ \colorlet{sectioncolor}{color1}
+ \colorlet{subsectioncolor}{color1}
+ \colorlet{hintstylecolor}{color0}
+ % Letter
+ \colorlet{letterclosingcolor}{color2}
+ % Skill matrix
+ \colorlet{skillmatrixfullcolor}{color1}
+ \colorlet{skillmatrixemptycolor}{color2!30}
+\end{lstlisting}
+
+
+\subsection{Modifying symbols and icons}
+\subsubsection{Icons}
+As stated in section \ref{section:customization:stylesAndOptions}, the use of icons is toggled by the \code{symbols} option that can be passed to \code{\\moderncvstyle}.
+
+The icons used in the display of the personal data (phone numbers, email, fax, social media accounts, etc.) can be customized by redefining the internal commands for the symbols:
+\begin{lstlisting}
+ \renewcommand*{<\symbolcommand>}{{\small<\symbol>}~}
+\end{lstlisting}
+Using \code{\\small} is optional, but the default behavior is to render all icons using \code{\\small}.
+Use \code{\\small} if one merely wishes to replace an icon/symbol while keeping the size consistent with the default icons/symbols.
+The tilde ensures proper spacing after the symbols and is recommended as well.
+
+Currently \Moderncv supports the following commands as \code{<\\symbolcommand>}:
\begin{itemize}
- \item redefining the command \texttt{listitemsymbol}: \verb|\renewcommand{\listitemsymbol}{-}|
- \item adding a specification for the label in \texttt{cvlistitem} and \texttt{cvlistdoubleitem}
+ \begin{multicols}{2}
+ \item \code{\\addresssymbol}
+ \item \code{\\mobilephonesymbol}
+ \item \code{\\fixedphonesymbol}
+ \item \code{\\faxphonesymbol}
+ \item \code{\\emailsymbol}
+ \item \code{\\homepagesymbol}
+ \item \code{\\linkedinsocialsymbol}
+ \item \code{\\xingsocialsymbol}
+ \item \code{\\twittersocialsymbol}
+ \item \code{\\githubsocialsymbol}
+ \item \code{\\gitlabsocialsymbol}
+ \item \code{\\stackoverflowsocialsymbol}
+ \item \code{\\googlescholarsocialsymbol}
+ \item \code{\\telegramsocialsymbol}
+ \item \code{\\whatsappsocialsymbol}
+ \item \code{\\signalsocialsymbol}
+ \item \code{\\matrixsocialsymbol}
+ \item \code{\\orcidsocialsymbol}
+ \item \code{\\researchgatesocialsymbol}
+ \item \code{\\researcheridsocialsymbol}
+ \item \code{\\bitbucketsocialsymbol}
+ \item \code{\\skypesocialsymbol}
+ \item \code{\\bornsymbol}
+ \item \code{\\arxivsocialsymbol}
+ \item \code{\\inspiresocialsymbol}
+ \end{multicols}
\end{itemize}
+The possible options for \code{<\\symbol>} depend on the package that is used.
+By default, the \code{marvosym} package is loaded if \code{pdflatex} is used, and the \code{academicons} and \code{fontawesome5} packages are loaded if either \code{lualatex} or \code{xelatex} is used.
+Full lists of all available symbols and icons can be found in the documentation of each respective package:
+
+\begin{tabular}{l}
+ \url{https://ctan.org/pkg/marvosym} \\[1ex]
+ \url{https://ctan.org/pkg/fontawesome5} \\[1ex]
+ \url{https://ctan.org/pkg/academicons}
+\end{tabular}
+
+\paragraph{Example.}
+If one wanted to use the dingbat fonts to replace the default phone symbol, one should load the \code{pifont} package in the preamble and then substitute the default symbol with the dingbat symbol \ding{38}\ with
+\begin{lstlisting}
+ \renewcommand*{\fixedphonesymbol}{\ding{38}~}
+\end{lstlisting}
+
+\paragraph{Alternative to icons}
+In case you do not want \texttt{symbols} (default) for the icons, there is also the option to replace icons with \texttt{letters} instead. This is set by the macro \code{\\moderncvicons}, which must be called after setting the style in the preamble.
+\begin{lstlisting}
+ \moderncvicons{<symbols|letters>}
+\end{lstlisting}
+This mechanism is also used to determine the icon set. In principle the \code{\\moderncvicons} can be used to determine the icon set with the possible values \texttt{marvosym}, \texttt{awesome} or \texttt{academic}, but it is recommended to let {\moderncv} decide the correct icon set due to differing \Latex compiler support.
+
+\subsubsection{Listing labels}
+The labels used in \code{itemize} environments, \code{cvlistitem} and \code{cvlistdoubleitem} can be changed in two different ways:
-For example: the following code produces the result shown in figure \ref{fig:ex_items}.
-
-\begin{verbatim}
-\closesection{} % needed to renewcommands
-\renewcommand{\listitemsymbol}{-} % change the symbol for lists
-
-\section{Extra 1}
-\cvlistitem{Item 1}
-\cvlistitem{Item 2}
-\cvlistitem[+]{Item 3} % optional other symbol
-
-\section{Extra 2}
-\cvlistdoubleitem[\Neutral]{Item 1}{Item 4}
-\cvlistdoubleitem[\Neutral]{Item 2}{Item 5}
-\cvlistdoubleitem[\Neutral]{Item 3}{}
-\end{verbatim}
-
-\begin{figure}[!hbt]
- \centering
- \fbox{\includegraphics[width=.8\textwidth]{ex_items.png}}
- \caption{Example of customization of the list labels.}
- \label{fig:ex_items}
-\end{figure}
-
-\subsection*{Adjusting lenghts}
-The different lengths used by moderncv are customizable by
-\begin{verbatim}
-\setlength{<length>}{<new_dimensions>}
-\end{verbatim}
-where \texttt{<length>} are \texttt{quote\-width}, \texttt{sep\-a\-ra\-tor\-col\-umn\-width}, \texttt{main\-col\-umn\-width}, \texttt{doub\-le\-i\-tem\-main\-col\-umn\-width}, \texttt{list\-i\-tem\-sym\-bol\-width}, \texttt{list\-doub\-le\-i\-tem\-main\-col\-umn\-width},
-
-In particular, the first column, can be set to any width. You can do that in two way:
\begin{itemize}
- \item using \verb|\sethintscolumnlength{<length>}|, where \texttt{<length>} is the desired length in a unit LaTeX understands
- \item using \verb|\sethintscolumntowidth{<string>}|, where \texttt{<string>} is a string of the desired length (usually, the longest string that has to appear in the column)
+ \item Redefining \code{\\labelitemi}, \code{\\labelitemii}, \code{\\labelitemiii} and \code{\\labelitemiv} changes the labels for \code{itemize} environments as well as for \code{cvlistitem} and \code{cvlistdoubleitem}, e.g.
+ \begin{lstlisting}
+ \renewcommand{\labelitemi}{-}
+ \end{lstlisting}
+ \item Redefining \code{\\listitemsymbol} changes the labels for \code{cvlistitem} and \code{cvlistdoubleitem} but \emph{not} for \code{itemize} environments, e.g.
+ \begin{lstlisting}
+ \renewcommand{\listitemsymbol}{-}
+\end{lstlisting}
\end{itemize}
-\subsection*{Additional commands}
-There are commands to manage hypertextual links:
+\subsection{Adjusting lengths}\label{subsection:adjusting:lengths}
+Some lengths in \Moderncv can be adjusted.
+
+The hints column can be adjusted by setting \code{\\hintscolumnwidth}:
+\begin{lstlisting}
+ \setlength{\hintscolumnwidth}{3cm}
+\end{lstlisting}
+
+For the \code{classic} style, the amount of horizontal space for the name can be adjusted by setting \code{\\makecvheadnamewidth} to avoid breaks:
+\begin{lstlisting}
+ \setlength{\makecvheadnamewidth}{10cm}
+\end{lstlisting}
+One should be careful though, as the length is normally calculated to avoid any overlap with the personal information.
+This should be used at one's own typographical risk.
+
+The spacing between the hints column and the CV entries can be adjusted by setting\\
+\code{\\separatorcolumnwidth}. The default value is \code{0.025\\textwidth}.
+\begin{lstlisting}
+ \setlength{\separatorcolumnwidth}{0.05\textwidth}
+\end{lstlisting}
+
+The spacing between the list symbol and the text item of \code{\\cvlistitem} and \code{\\cvlistdoubleitem} can be adjusted by setting \code{\\listitemsymbolspace} in the preamble. The default value is set to \code{0pt}.
+\begin{lstlisting}
+ \setlength{\listitemsymbolspace}{5pt}
+\end{lstlisting}
+
+The width of the footer can be adjusted by setting \code{\\footwidth}. Due to internal calculations \code{\\renewcommand} is needed. The default value is \code{0.8\\textwidth}.
+\begin{lstlisting}
+ \renewcommand*{\recomputefootlengths}{%
+ \setlength{\footwidth}{0.9\textwidth}}
+\end{lstlisting}
+
+The width of the quote can be adjusted by setting \code{\\quotewidth}. Due to internal calculations \code{\\renewcommand} is needed. The default value is \code{0.65\\textwidth}.
+\begin{lstlisting}
+ \renewcommand*{\recomputecvheadlengths}{%
+ \setlength{\quotewidth}{0.5\textwidth}}
+\end{lstlisting}
+
+
+% The different lengths used by moderncv are customizable by
+% \begin{lstlisting}
+% \setlength{<length>}{<new_dimensions>}
+% \end{lstlisting}
+% where \code{<length>} are \code{maincolumnwidth}, \code{doubleitemmaincolumnwidth}, \code{listitemsymbolwidth}, \code{listdoubleitemmaincolumnwidth},
+
+
+\subsubsection{Lengths in the skill matrix}
+\label{section:length:skillmatrix}
+Both the width of the skill matrix legend and the width of the skill matrix columns can be adjusted.
+
+The width of the skill matrix legend can be adjusted as follows:
+\begin{lstlisting}
+ \setcvskilllegendcolumns[<width>][<factor>]
+ % Examples:
+ \setcvskilllegendcolumns[][0.45]
+ \setcvskilllegendcolumns[\widthof{``Legend''}][0.45]
+ \setcvskilllegendcolumns[0ex][0.46] % useful for the banking style
+\end{lstlisting}
+\code{<width>} should be a length smaller than \code{\\textwidth}, and \code{<factor>} must be between 0 and 1.
+
+The width of the skill matrix columns can be adjusted as follows:
+\begin{lstlisting}
+ \setcvskillcolumns[<width>][<factor>][<exp_width>]
+ % Examples:
+ \setcvskillcolumns[5em][][] % adjust first column, same as \setcvskillcolumns[5em]
+ \setcvskillcolumns[][0.45][] % adjust third (skill) column, same as \setcvskillcolumns[][0.45]
+ \setcvskillcolumns[][][\widthof{``Year''}] % adjust fourth (years of experience) column
+ \setcvskillcolumns[][0.45][\widthof{``Year''}]
+ \setcvskillcolumns[\widthof{``Language''}][0.48][]
+ \setcvskillcolumns[\widthof{``Language''}]
+\end{lstlisting}
+\code{<width>} and \code{<exp_width>} should be lengths smaller than \code{\\textwidth}, and \code{<factor>} must be between 0 and 1.
+
+\subsection{Additional link commands}%% adapted from Cristina Sambo's documentation
+To create links to a website or a email address, use the following commands:
+
+A general weblink with optional text.
+\begin{lstlisting}
+ \link[<text>]{<link>}
+ %% example
+ \link[name of the link]{ftp://ftp.somesite.org}
+\end{lstlisting}
+
+An HTTP link. The HTTP prefix is generated automatically and is not needed in the link argument.
+\begin{lstlisting}
+ \link[<text>]{<link>}
+ %% example
+ \link[goto HTTP site]{www.somehttpsite.org}
+\end{lstlisting}
+
+A HTTPS link. The HTTPS prefix is generated automatically and is not needed in the link argument.
+\begin{lstlisting}
+ \link[<text>]{<link>}
+ %% example
+ \httpslink[goto HTTPS site]{www.somesecuresite.org}
+\end{lstlisting}
+
+An email link. The mailto prefix is generated automatically and is not needed in the link argument.
+\begin{lstlisting}
+ \link[<text>]{<link>}
+ %% example
+ \emaillink[my email]{jdoe@website.org}
+\end{lstlisting}
+
+\subsection{Page breaks and orphaned section headers}
+If \Latex breaks pages just after \code{\\section} or \code{\\subsection} commands, try adjusting the stretchability of the page with \code{\\cvsectionstretchability} or \code{\\cvsubsectionstretchability}:
+\begin{lstlisting}
+ \setlength{\cvsectionstretchability}{\baselineskip}
+ \setlength{\cvsubsectionstretchability}{100pt}
+\end{lstlisting}
+These two lengths tell \Latex how much extra length it needs after \code{\\section} and \code{\\subsection} commands.
+By default, \Moderncv sets both lengths to \code{0.9\\baselineskip}.
+
+This should solve orphaned \code{\\section} and \code{\\subsection} commands that are used alone for most users.
+However, \Latex does not check for content.
+For example, writing
+\begin{lstlisting}
+ \section{blub}
+ \subsection{blubblub}
+\end{lstlisting}
+one after the other may cause \Latex to place the section and subsection headers on separate pages.
+Since \Latex considers the subsection header to not be orphaned, it may place the section header at the bottom of a page if there is enough space to do so while placing the subsection header on the next page.
+One solution is to increase \code{\\cvsectionstretchability} to force the break of the section header.
+However, this changes the behaviour for all \code{\\section} commands in your CV and might cause unnecessary page breaks.
+It is therefore recommended to force the page break manually with a \code{\\newpage} in this case.
+
+\paragraph{Experts only:}
+Internally, \Moderncv uses a custom \code{\\needspace} command:
+\begin{lstlisting}
+ \NewDocumentCommand\@cvneedspace{m}{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@
+ \penalty \withinstretchpenalty\vskip\z@\@plus -\dimen@
+ \vskip\dimen@
+ \penalty \poststretchpenalty%
+ \vskip -\dimen@
+ \vskip\z@skip % hide the previous |\vskip| from |\addvspace|
+ \endgroup
+ }
+\end{lstlisting}
+Thus, instead of setting \code{\\cvsectionstretchability} and/or \code{\\cvsubsectionstretchability}, page break behavior can be adjusted by redefining the following internal penalties:
+\begin{lstlisting}
+ \renewcommand{\withinstretchpenalty}{<-100...9999>}
+ \renewcommand{\poststretchpenalty}{<-100...9999>}.
+\end{lstlisting}
+By default, \Moderncv sets \code{\\withinstretchpenalty} to 0 and \code{\\poststretchpenalty} to 9999.
+The higher the penalties are, the less likely a page break will occur.
+A good explanation of \code{\\needspace} can be found at \url{https://tex.stackexchange.com/questions/348994/understanding-needspace}.
+
+
+\subsection{Tips and Tricks}
+\subsubsection{Legal disclaimer at the end of the CV}
+Some countries (e.g. Italy) require you to add a legal disclaimer authorizing the use of the personal data in your CV.
+To add such a disclaimer, add the following to the bottom of your CV:%
+\footnote{Example provided by Cristina Sambo}%
+\begin{lstlisting}
+ \vfill
+ \begin{center}
+ \textit{\small Ai sensi del D. Lgs. 196/2003 ...}
+ \end{center}
+\end{lstlisting}
+
+
+
+\section{Implementation details}
+\label{section:implementationDetails}
+
+\subsection{Creating your own styles}
+Currently {\moderncv} ships with six different styles: \texttt{casual} (default), \texttt{classic}, \texttt{banking}, \texttt{oldstyle}, \texttt{fancy} and \texttt{contemporary}. Internally, these styles are numbered 1, 2, 3, 4, 5 and 6, respectively. All styles except \texttt{oldstyle} and \texttt{fancy} possess additional option parameters which were described in section \ref{section:customization:stylesAndOptions}.
+
+Different styles' head, body and foot can be combined to create custom styles. This is done by setting \code{\\moderncvhead}, \code{\\moderncvbody} and \code{\\moderncvfoot} in the preamble. Here is an example of a custom style with a \texttt{banking} head, an \texttt{oldstyle} body and a \texttt{casual} foot:
+\begin{lstlisting}
+ \moderncvhead{3}
+ \moderncvbody{4}
+ \moderncvfoot{1}
+\end{lstlisting}
+Furthermore, options for each part of {\moderncv} parts can be set as well in such combinations. To get a CV with a \texttt{classic} head and a \texttt{banking} body with full rules, define the following in the preamble:
+\begin{lstlisting}
+ \moderncvhead{2}
+ \moderncvbody[fullrules]{3}
+ \moderncvfoot{1}
+\end{lstlisting}
+
+
+\subsection{Required packages}
+\label{section:implementationDetails:requiredPackages}
+In addition to the packages that \Moderncv provides, the following packages are loaded internally:
\begin{itemize}
- \item[-] \verb|\weblink[optional text]{link}|
- \item[-] \verb|\httplink[optional text]{link}|
- \item[-] \verb|\emaillink[optional text]{link}|
+ \begin{multicols}{3}
+ \item \code{etoolbox}
+ \item \code{ifthen}
+ \item \code{xcolor}
+ \item \code{ifxetex} or \code{ifluatex}
+ \item \code{fontenc}
+ \item \code{url}
+ \item \code{hyperref}
+ \item \code{graphicx}
+ \item \code{fancyhdr}
+ \item \code{tweaklist}%
+ \footnote{The \code{tweaklist} package has been altered for the development of \Moderncv and ships with \moderncv.}
+ \item \code{calc}
+ \item \code{xparse}
+ \item \code{microtype}
+ \item \code{expl3}
+ \item \code{tikz}
+ \item \code{changepage}
+ \item \code{fontawesome5}
+ \item \code{academicons}
+ \item \code{tgpagella}
+ \item \code{ebgaramond}
+ \item \code{kurier}
+ \item \code{multirow}
+ \item \code{arydshln}
+ \end{multicols}
\end{itemize}
-There is a \verb|\today| command, useful for example if you need to add the date the CV was produced.
-
-\subsection*{Putting things at the end of CV}
-Sometimes there is the need to add some lines at the end of the CV. For example, in Italy is necessary to add the permission to treat the personal data contained in the r\'esum\'e. You can do that dropping out of the layout of \texttt{moderncv} and pushing the lines at the end by the command \verb|\vfill|:
-\begin{verbatim}
-\emptysection{}\closesection
-\vfill
-\begin{center}
-\textit{\small Ai sensi del D. Lgs. 196/2003 ...}
-\end{center}
-\end{verbatim}
+Most of these packages should be included in your \Latex distribution of choice.
+
+\subsection{Known conflicts with other packages}
+\begin{enumerate}
+ \item \Moderncv is incompatible with \code{biber}.
+ \item \Moderncv is incompatible with \biblatex.
+ \item \Moderncv is incompatible with \code{babel} in Spanish
+\end{enumerate}
+
+\subsection{Known bugs}
+\begin{enumerate}
+ \item Skill matrices don't break automatically in \texttt{fancy} style.
+ \item Long names break the \texttt{oldstyle} style and possibly other styles (needs testing).
+ \item Long URLs in \texttt{classic} style can make the name break line.
+ Fixed width for the address part must be implemented.
+ \item When using the \texttt{fancy} style, undesired space is added between the bibliography head and the first entry, as well as after the last entry.
+ \item Footnotes generate errors, but the output seems correct when running with \code{-interaction=nonstopmode}.
+ \item When using CJK, the last \code{\\clearpage} required for the \code{fancyhdr} package to work properly kills the ``lastpage'' counter, and therefore also the page numbering.
+ \item \Moderncv produces the error ``\code{lonely \\item--perhaps a missing list environment}'' when used with the \code{bibentry} package, though the output is actually correct.
+ Among other things, this causes compilation by LyX to stop.
+ \item The space after a \code{\\cventry} gets eaten up when the last argument contains a nested \code{itemize} environment.
+ An ugly hack and incomplete solution was implemented by including a \code{\\strut} in every item label, but this doesn't solve the problem for multi-line items.
+ Ideally, the \code{\\strut} should end the item, but there seems to be no way to do this.
+\end{enumerate}
\end{document}
diff --git a/macros/latex/contrib/moderncv/moderncv.cls b/macros/latex/contrib/moderncv/moderncv.cls
index 44b9e35914..20cedc8b61 100644
--- a/macros/latex/contrib/moderncv/moderncv.cls
+++ b/macros/latex/contrib/moderncv/moderncv.cls
@@ -1,5 +1,5 @@
%% start of file `moderncv.cls'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{moderncv}[2022-02-21 v2.3.1 modern curriculum vitae and letter document class]
+\ProvidesClass{moderncv}[2024-07-18 v2.4.1 modern curriculum vitae and letter document class]
%-------------------------------------------------------------------------------
@@ -103,7 +103,8 @@
\urlstyle{tt}
\AtEndPreamble{
\pagenumbering{arabic}% has to be issued before loading hyperref, as to set \thepage and hence to avoid hyperref issuing a warning and setting pdfpagelabels=false
- \RequirePackage[unicode]{hyperref}% unicode is required for unicode pdf metadata
+ \PassOptionsToPackage{unicode}{hyperref}
+ \RequirePackage{hyperref}
\hypersetup{
breaklinks,
pdfborder = 0 0 0,
@@ -114,10 +115,16 @@
bookmarksopen = true,
bookmarksdepth= 2,% to show sections and subsections
pdfauthor = {\@firstname{}~\@lastname{}},
- pdftitle = {\@firstname{}~\@lastname{}\notblank{\@title}{ -- \@title}{}},
+ pdftitle =
+ {\@firstname{}~\@lastname{}\expandafter\notblank\expandafter{\@title}{ -- \@title}{}}, %\notblank does not expand argument automatically
pdfsubject = {R\'{e}sum\'{e} of \@firstname{}~\@lastname{}},
pdfkeywords = {\@firstname{}~\@lastname{}, curriculum vit\ae{}, r\'{e}sum\'{e}}}}
+% pdftex not using pdfmanagement-testphase requires T1 font encoding in order to handle links containing special characters somewhat properly
+\ifpdftex
+ \IfPDFManagementActiveTF{}{\RequirePackage[T1]{fontenc}}
+\fi
+
% graphics
\RequirePackage{graphicx}
@@ -138,9 +145,9 @@
\@ifundefined{r@lastpage}{}{%
\ifthenelse{\pageref{lastpage}>1}{%
\newlength{\pagenumberwidth}%
- \settowidth{\pagenumberwidth}{\color{color2}\addressfont\itshape\strut\thepage/\pageref{lastpage}}%
+ \settowidth{\pagenumberwidth}{\color{color2}\pagenumberfont\strut\thepage/\pageref{lastpage}}%
\fancypagestyle{plain}{%
- \fancyfoot[r]{\parbox[b]{\pagenumberwidth}{\color{color2}\pagenumberfont\strut\thepage/\pageref{lastpage}}}}% the parbox is required to ensure alignment with a possible center footer (e.g., as in the casual style)
+ \fancyfoot[r]{\parbox[b]{\pagenumberwidth}{\color{color2}\pagenumberfont\strut\thepage/\protect\NoHyper\pageref{lastpage}\protect\endNoHyper}}}% the parbox is required to ensure alignment with a possible center footer (e.g., as in the casual style)
\pagestyle{plain}}{}}\fi}%
\AtEndDocument{\label{lastpage}}}
\pagestyle{plain}
@@ -231,8 +238,9 @@
\newcommand*{\email}[1]{\def\@email{#1}}
% defines one's home page (optional)
-% usage: \homepage{<url>}
-\newcommand*{\homepage}[1]{\def\@homepage{#1}}
+% usage: \homepage[<optional protocol>]{<url>}
+% where <optional protocol> should be either "https" (default) or "http"
+\NewDocumentCommand{\homepage}{O{https}m}{\def\@homepageprotocol{#1}\def\@homepage{#2}}
% adds a fixed/mobile/fax number to one's personal information (optional)
% usage: \phone[<optional type>]{<number>}
@@ -247,11 +255,41 @@
% http://latex.org/forum/viewtopic.php?t=12239
\def\SplitMyMacro#1/#2{#2}
-
-
+
+
% adds a social link to one's personal information (optional)
% usage: \social[<optional type>][<optional url>]{<account name>}
-% where <optional type> should be either "linkedin", "xing", "twitter", "github", "gitlab", "bitbucket" or "skype"
+% where <optional type> should be either:
+% - "linkedin"
+% - "xing"
+% - "twitter"
+% - "mastodon"
+% - "github"
+% - "gitlab"
+% - "stackoverflow"
+% - "bitbucket"
+% - "skype"
+% - "orcid"
+% - "researchgate"
+% - "researcherid"
+% - "telegram"
+% - "whatsapp"
+% - "signal"
+% - "matrix"
+% - "googlescholar"
+% - "codeberg"
+% - "discord"
+% - "twitch"
+% - "youtube"
+% - "tiktok"
+% - "instagram"
+% - "soundcloud"
+% - "steam
+% - "xbox"
+% - "playstation"
+% - "battlenet"
+% - "arxiv"
+% - "inspire"
\collectionnew{socials}
\NewDocumentCommand{\social}{O{}O{}m}{%
\ifthenelse{\equal{#2}{}}%
@@ -259,6 +297,7 @@
\ifthenelse{\equal{#1}{linkedin}} {\collectionadd[linkedin]{socials} {\protect\httpslink[#3]{www.linkedin.com/in/#3}}} {}%
\ifthenelse{\equal{#1}{xing}} {\collectionadd[xing]{socials} {\protect\httpslink[#3]{www.xing.com/profile/#3}}} {}%
\ifthenelse{\equal{#1}{twitter}} {\collectionadd[twitter]{socials} {\protect\httpslink[#3]{twitter.com/#3}}} {}%
+ \ifthenelse{\equal{#1}{mastodon}} {\collectionadd[mastodon]{socials} {\protect\httpslink[#3]{#3}}} {}%
\ifthenelse{\equal{#1}{github}} {\collectionadd[github]{socials} {\protect\httpslink[#3]{github.com/#3}}} {}%
\ifthenelse{\equal{#1}{gitlab}} {\collectionadd[gitlab]{socials} {\protect\httpslink[#3]{gitlab.com/#3}}} {}%
\ifthenelse{\equal{#1}{stackoverflow}}{\collectionadd[stackoverflow]{socials}{\protect\httpslink[#3]{stackoverflow.com/users/#3}}} {}%
@@ -271,7 +310,20 @@
\ifthenelse{\equal{#1}{whatsapp}} {\collectionadd[whatsapp]{socials} {\protect\httpslink[#3]{wa.me/#3}}} {}%
\ifthenelse{\equal{#1}{signal}} {\collectionadd[signal]{socials} {#3}} {}%
\ifthenelse{\equal{#1}{matrix}} {\collectionadd[matrix]{socials} {\httpslink[#3]{matrix.to/\#/#3}}} {}%
- \ifthenelse{\equal{#1}{googlescholar}}{\collectionadd[googlescholar]{socials}{\protect\httpslink[#3]{scholar.google.com/citations?user=#3}}} {}% {}%
+ \ifthenelse{\equal{#1}{googlescholar}}{\collectionadd[googlescholar]{socials}{\protect\httpslink[#3]{scholar.google.com/citations?user=#3}}} {}%
+ \ifthenelse{\equal{#1}{codeberg}} {\collectionadd[codeberg]{socials} {\protect\httpslink[#3]{codeberg.org/#3}}} {}%
+ \ifthenelse{\equal{#1}{discord}} {\collectionadd[discord]{socials} {#3}} {}%
+ \ifthenelse{\equal{#1}{twitch}} {\collectionadd[twitch]{socials} {\protect\httpslink[#3]{twitch.tv/#3}}} {}%
+ \ifthenelse{\equal{#1}{youtube}} {\collectionadd[youtube]{socials} {\protect\httpslink[#3]{youtube.com/#3}}} {}%
+ \ifthenelse{\equal{#1}{tiktok}} {\collectionadd[tiktok]{socials} {\protect\httpslink[#3]{tiktok.com/@#3}}} {}%
+ \ifthenelse{\equal{#1}{instagram}} {\collectionadd[instagram]{socials} {\protect\httpslink[#3]{instagram.com/#3}}} {}%
+ \ifthenelse{\equal{#1}{soundcloud}} {\collectionadd[soundcloud]{socials} {\protect\httpslink[#3]{soundcloud.com/#3}}} {}%
+ \ifthenelse{\equal{#1}{steam}} {\collectionadd[steam]{socials} {\protect\httpslink[#3]{steamcommunity.com/id/#3}}} {}%
+ \ifthenelse{\equal{#1}{xbox}} {\collectionadd[xbox]{socials} {\protect\httpslink[#3]{account.xbox.com/profile?gamertag=#3}}} {}%
+ \ifthenelse{\equal{#1}{playstation}} {\collectionadd[playstation]{socials} {#3}} {}%
+ \ifthenelse{\equal{#1}{battlenet}} {\collectionadd[battlenet]{socials} {#3}} {}%
+ \ifthenelse{\equal{#1}{arxiv}} {\collectionadd[arxiv]{socials} {\protect\httpslink[#3]{arxiv.org/a/#3}}} {}%
+ \ifthenelse{\equal{#1}{inspire}} {\collectionadd[inspire]{socials} {\protect\httpslink[#3]{inspirehep.net/authoris/#3}}} {}%
}
{\collectionadd[#1]{socials}{\protect\httpslink[#3]{#2}}}}%
@@ -312,6 +364,7 @@
\newcommand*{\linkedinsocialsymbol} {}
\newcommand*{\xingsocialsymbol} {}
\newcommand*{\twittersocialsymbol} {}
+\newcommand*{\mastodonsocialsymbol} {}
\newcommand*{\githubsocialsymbol} {}
\newcommand*{\gitlabsocialsymbol} {}
\newcommand*{\stackoverflowsocialsymbol}{}
@@ -325,6 +378,19 @@
\newcommand*{\whatsappsocialsymbol} {}
\newcommand*{\matrixsocialsymbol} {}
\newcommand*{\signalsocialsymbol} {}
+\newcommand*{\codebergsocialsymbol} {}
+\newcommand*{\discordsocialsymbol} {}
+\newcommand*{\twitchsocialsymbol} {}
+\newcommand*{\youtubesocialsymbol} {}
+\newcommand*{\tiktoksocialsymbol} {}
+\newcommand*{\instagramsocialsymbol} {}
+\newcommand*{\soundcloudsocialsymbol} {}
+\newcommand*{\steamsocialsymbol} {}
+\newcommand*{\xboxsocialsymbol} {}
+\newcommand*{\playstationsocialsymbol} {}
+\newcommand*{\battlenetsocialsymbol} {}
+\newcommand*{\arxivsocialsymbol} {}
+\newcommand*{\inspiresocialsymbol} {}
% other
%------
@@ -441,6 +507,8 @@
% styles
\newcommand*{\namestyle}[1]{{\namefont#1}}
+\NewDocumentCommand{\firstnamestyle}{+m}{{\namefont#1}}
+\NewDocumentCommand{\lastnamestyle}{+m}{{\namefont#1}}
\newcommand*{\titlestyle}[1]{{\titlefont#1}}
\newcommand*{\addressstyle}[1]{{\addressfont#1}}
\newcommand*{\quotestyle}[1]{{\quotefont#1}}
@@ -492,12 +560,16 @@
% usage: \cvdoubleitem[spacing]{header1}{text1}{header2}{text2}
\newcommand*{\cvdoubleitem}[5][.25em]{}
+% makes a resume line 3 headers and their corresponding text
+% usage: \cvtripleitem[spacing]{header1}{text1}{header2}{text2}{header3}{text3}
+\newcommand*{\cvtripleitem}[7][.1em]{}
+
% makes a resume line with a list item
-% usage: \cvlistitem[label]{item}
+% usage: \cvlistitem[spacing]{item}
\newcommand*{\cvlistitem}[2][\listitemsymbol]{}
% makes a resume line with 2 list items
-% usage: \cvlistdoubleitem[label]{item1}{item2}
+% usage: \cvlistdoubleitem[spacing]{item1}{item2}
\newcommand*{\cvlistdoubleitem}[3][\listitemsymbol]{}
% makes a typical resume job / education entry
@@ -510,25 +582,39 @@
% makes a generic hyperlink
% usage: \link[optional text]{link}
-\newcommand*{\link}[2][]{%
- \ifthenelse{\equal{#1}{}}%
- {\href{#2}{#2}}%
- {\href{#2}{#1}}}
+% uses pdfmanagement-testphase when available, which provides url encoding of special characters
+\NewDocumentCommand{\link}{O{}m}{%
+ \IfPDFManagementActiveTF{%
+ \ifthenelse{\equal{#1}{}}%
+ {\hrefurl[urlencode]{#2}{#2}}%
+ {\hrefurl[urlencode]{#2}{#1}}}{%
+ \ifthenelse{\equal{#1}{}}%
+ {\href{#2}{#2}}%
+ {\href{#2}{#1}}}}
% makes a http hyperlink
% usage: \httplink[optional text]{link}
-\newcommand*{\httplink}[2][]{%
- \ifthenelse{\equal{#1}{}}%
- {\href{http://#2}{#2}}%
- {\href{http://#2}{#1}}}
-
+% uses pdfmanagement-testphase when available, which provides url encoding of special characters
+\NewDocumentCommand{\httplink}{O{}m}{%
+ \IfPDFManagementActiveTF{%
+ \ifthenelse{\equal{#1}{}}%
+ {\hrefurl[urlencode]{http://#2}{#2}}%
+ {\hrefurl[urlencode]{http://#2}{#1}}}{%
+ \ifthenelse{\equal{#1}{}}%
+ {\href{http://#2}{#2}}%
+ {\href{http://#2}{#1}}}}
% makes an https hyperlink
% usage: \httpslink[optional text]{link}
-\newcommand*{\httpslink}[2][]{%
- \ifthenelse{\equal{#1}{}}%
- {\href{https://#2}{#2}}%
- {\href{https://#2}{#1}}}
+% uses pdfmanagement-testphase when available, which provides url encoding of special characters
+\NewDocumentCommand{\httpslink}{O{}m}{%
+ \IfPDFManagementActiveTF{%
+ \ifthenelse{\equal{#1}{}}%
+ {\hrefurl[urlencode]{https://#2}{#2}}%
+ {\hrefurl[urlencode]{https://#2}{#1}}}{%
+ \ifthenelse{\equal{#1}{}}%
+ {\href{https://#2}{#2}}%
+ {\href{https://#2}{#1}}}}
% makes an email hyperlink
% usage: \emaillink[optional text]{link}
@@ -712,8 +798,10 @@
% elements
\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}}
\renewcommand*{\date}[1]{\def\@date{#1}}\date{\today}
+\newcommand*{\subject}[1]{\def\@subject{#1}}
\newcommand*{\opening}[1]{\def\@opening{#1}}
\newcommand*{\closing}[1]{\def\@closing{#1}}
+\newcommand*{\signature}[2]{\def\@signature{\includegraphics[scale=#1]{#2}}}
\newcommand*{\enclosure}[2][]{%
% if an optional argument is provided, use it to redefine \enclname
\ifthenelse{\equal{#1}{}}{}{\renewcommand*{\enclname}{#1}}%
diff --git a/macros/latex/contrib/moderncv/moderncvbodyi.sty b/macros/latex/contrib/moderncv/moderncvbodyi.sty
index 02ac2e3aa5..d3db954fef 100644
--- a/macros/latex/contrib/moderncv/moderncvbodyi.sty
+++ b/macros/latex/contrib/moderncv/moderncvbodyi.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvbodyi.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,13 +10,13 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvbodyi}[2022-02-21 v2.3.1 modern curriculum vitae and letter body variant: 1]
+\ProvidesPackage{moderncvbodyi}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 1]
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
-% provides the commands for the skillmatrix as well as the command
+% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyi]{moderncvskillmatrix}
@@ -29,9 +29,9 @@
\renewcommand*{\hintfont}{}
% styles
-\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
+\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{sectioncolor}{#1}}}
+\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{subsectioncolor}{#1}}}
+\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -44,11 +44,14 @@
\@initializelength{\maincolumnwidth}
% used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth}
+% used by \cvtripleitem
+\@initializelength{\tripleitemcolumnwidth}
% used by \cvlistitem
\@initializelength{\listitemsymbolwidth} \settowidth{\listitemsymbolwidth}{\listitemsymbol}
\@initializelength{\listitemcolumnwidth}
% used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
+\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
% default moderncv \photo (change the definition such that by default the photo and its box align with the section bars
\RenewDocumentCommand{\photo}{O{\hintscolumnwidth-0.8pt-2\fboxsep}O{0.4pt}m}{\def\@photowidth{#1}\def\@photoframewidth{#2}\def\@photo{#3}}%
@@ -59,6 +62,8 @@
\setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
\setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\hintscolumnwidth-\separatorcolumnwidth-\separatorcolumnwidth}%
\setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\hintscolumnwidth-3\separatorcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
\setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
\setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
\recompute@cvskillmatrix@lengths
@@ -73,7 +78,7 @@
\par\addvspace{2.5ex}%
\phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{section}{#2}%
- \cvitem[0ex]{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{\hintscolumnwidth}{0.95ex}}}{\strut\sectionstyle{#2}}%
+ \cvitem[0ex]{\strut\raggedleft\raisebox{\baseletterheight}{\color{bodyrulecolor}\rule{\hintscolumnwidth}{0.95ex}}}{\strut\sectionstyle{#2}}%
\par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading
\RenewDocumentCommand{\subsection}{sm}{%
@@ -97,15 +102,28 @@
\hspace*{\separatorcolumnwidth}%
\begin{minipage}[t]{\doubleitemcolumnwidth}#5\end{minipage}}}
+\renewcommand*{\cvtripleitem}[7][.1em]{%
+ \cvitem[#1]{#2}{%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#4}\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#5\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#6}\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#7\end{minipage}}}
+
+
\renewcommand*{\cvlistitem}[2][.25em]{%
- \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listitemcolumnwidth}#2\end{minipage}}}
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}}}
\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
- \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#2\end{minipage}%
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\ifthenelse{\equal{#3}{}}%
{}%
- {\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#3\end{minipage}}}}
+ {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
\renewcommand*{\cventry}[7][.25em]{%
\cvitem[#1]{#2}{%
@@ -162,13 +180,14 @@
\recomputecvlengths%
\setlength{\parskip}{6\p@}}
-\renewcommand*{\makeletterclosing}{
- \@closing\\[3em]%
+\renewcommand*{\makeletterclosing}{%
+ \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
+ \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
{\bfseries\@firstname~\@lastname}%
\ifthenelse{\isundefined{\@enclosure}}{}{%
\\%
\vfil%
- {\color{color2}\itshape\enclname: \@enclosure}}%
+ {\color{letterclosingcolor}\itshape\enclname: \@enclosure}}%
\vfil}
diff --git a/macros/latex/contrib/moderncv/moderncvbodyiii.sty b/macros/latex/contrib/moderncv/moderncvbodyiii.sty
index 003f9f3e1b..37d8d13200 100644
--- a/macros/latex/contrib/moderncv/moderncvbodyiii.sty
+++ b/macros/latex/contrib/moderncv/moderncvbodyiii.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvbodyiii.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvbodyiii}[2022-02-21 v2.3.1 modern curriculum vitae and letter body variant: 3]
+\ProvidesPackage{moderncvbodyiii}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 3]
% rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules"
\@initializeif{\if@fullrules}\@fullrulesfalse
@@ -37,7 +37,7 @@
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
-% provides the commands for the skillmatrix as well as the command
+% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyiii]{moderncvskillmatrix}
@@ -61,16 +61,16 @@
\renewcommand*{\sectionstyle}[1]{{%
\if@center\centering\else%
\if@right\raggedleft\fi\fi%
- \sectionfont\textcolor{color1}{#1}%
+ \sectionfont\textcolor{sectioncolor}{#1}%
\if@shortrules\else%
\par\fi}}
\renewcommand*{\subsectionstyle}[1]{{%
\if@center\centering\else%
\if@right\raggedleft\fi\fi%
- \subsectionfont\textcolor{color1}{#1}%
+ \subsectionfont\textcolor{subsectioncolor}{#1}%
\if@shortrules\else\if@mixedrules\else%
\par\fi\fi}}
-\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
+\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -83,11 +83,14 @@
\@initializelength{\maincolumnwidth}
% used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth}
+% used by \cvtripleitem
+\@initializelength{\tripleitemcolumnwidth}
% used by \cvlistitem
\@initializelength{\listitemsymbolwidth} \settowidth{\listitemsymbolwidth}{\listitemsymbol}
\@initializelength{\listitemcolumnwidth}
% used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
+\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
% commands
\renewcommand*{\recomputecvbodylengths}{%
@@ -96,6 +99,8 @@
\setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
\setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\separatorcolumnwidth}%
\setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\separatorcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
\setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
\setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
\recompute@cvskillmatrix@lengths
@@ -133,14 +138,14 @@
\newcommand*{\sectionrule}{}
\newcommand*{\subsectionrule}{}
\if@fullrules%
- \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{color1}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
- \renewcommand*{\subsectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{color1}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}
+ \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
+ \renewcommand*{\subsectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}
\if@shortrules%
- \renewcommand*{\sectionrule}{\leavevmode{\color{color1}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
- \renewcommand*{\subsectionrule}{\leavevmode{\color{color1}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
+ \renewcommand*{\sectionrule}{\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
+ \renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@mixedrules%
- \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{color1}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
- \renewcommand*{\subsectionrule}{\leavevmode{\color{color1}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
+ \renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
+ \renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@norules%
\renewcommand*{\sectionrule}{}
\renewcommand*{\subsectionrule}{}\fi
@@ -155,16 +160,24 @@
\begin{minipage}[t]{\doubleitemcolumnwidth}\ifstrempty{#4}{}{\hintstyle{#4}: }#5\end{minipage}%
\par\addvspace{#1}}
+\renewcommand*{\cvtripleitem}[7][.1em]{%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#4}: #5\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\ifstrempty{#6}{}{\hintstyle{#6}: }#7\end{minipage}%
+ \par\addvspace{#1}}
+
\renewcommand*{\cvlistitem}[2][.25em]{%
- \listitemsymbol\begin{minipage}[t]{\listitemcolumnwidth}#2\end{minipage}%
+ \listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\par\addvspace{#1}}
\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
- \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#2\end{minipage}%
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\ifstrempty{#3}%
{}%
- {\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#3\end{minipage}}}}
+ {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
\renewcommand*{\cventry}[7][.25em]{
\begin{tabular*}{\maincolumnwidth}{l@{\extracolsep{\fill}}r}%
@@ -231,13 +244,14 @@
\recomputecvbodylengths%
\setlength{\parskip}{6\p@}}
-\renewcommand*{\makeletterclosing}{
- \@closing\\[3em]%
+\renewcommand*{\makeletterclosing}{%
+ \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
+ \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
{\bfseries\@firstname~\@lastname}%
\ifthenelse{\isundefined{\@enclosure}}{}{%
\\%
\vfil%
- {\color{color2}\itshape\enclname: \@enclosure}}%
+ {\color{letterclosingcolor}\itshape\enclname: \@enclosure}}%
\vfil}
diff --git a/macros/latex/contrib/moderncv/moderncvbodyiv.sty b/macros/latex/contrib/moderncv/moderncvbodyiv.sty
index 9127af18e8..0d9fe6fb87 100644
--- a/macros/latex/contrib/moderncv/moderncvbodyiv.sty
+++ b/macros/latex/contrib/moderncv/moderncvbodyiv.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvbodyiv.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,13 +10,13 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvbodyiv}[2022-02-21 v2.3.1 modern curriculum vitae and letter body variant: 4]
+\ProvidesPackage{moderncvbodyiv}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 4]
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
-% provides the commands for the skillmatrix as well as the command
+% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyiv]{moderncvskillmatrix}
@@ -29,9 +29,9 @@
\renewcommand*{\hintfont}{\bfseries}
% styles
-\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
+\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{sectioncolor}{#1}}}
+\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{subsectioncolor}{#1}}}
+\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -49,6 +49,10 @@
\@initializelength{\listitemcolumnwidth}
% used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
+% used by \cvtripleitem
+\@initializelength{\tripleitemcolumnwidth}
+\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
+
% commands
\renewcommand*{\recomputecvbodylengths}{%
@@ -57,6 +61,8 @@
\setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
\setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\separatorcolumnwidth}%
\setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\separatorcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
\setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
\setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
\recompute@cvskillmatrix@lengths
@@ -87,15 +93,23 @@
\begin{minipage}[t]{\doubleitemcolumnwidth}\ifthenelse{\equal{#4}{}}{}{\hintstyle{#4}: }#5\end{minipage}%
\par\addvspace{#1}}
+\renewcommand*{\cvtripleitem}[7][.1em]{%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#4}: #5\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\ifthenelse{\equal{#6}{}}{}{\hintstyle{#6}: }#7\end{minipage}%
+ \par\addvspace{#1}}
+
\renewcommand*{\cvlistitem}[2][.25em]{%
- \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listitemcolumnwidth}#2\end{minipage}}}
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}}}
\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
- \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#2\end{minipage}%
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\ifthenelse{\equal{#3}{}}%
{}%
- {\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#3\end{minipage}}}}
+ {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
\@initializebox{\cventryyearbox}
\@initializelength{\cventrytitleboxwidth}
@@ -170,13 +184,14 @@
\recomputecvbodylengths%
\setlength{\parskip}{6\p@}}
-\renewcommand*{\makeletterclosing}{
- \@closing\\[3em]%
+\renewcommand*{\makeletterclosing}{%
+ \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
+ \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
{\bfseries\@firstname~\@lastname}%
\ifthenelse{\isundefined{\@enclosure}}{}{%
\\%
\vfil%
- {\color{color2}\itshape\enclname: \@enclosure}}%
+ {\color{letterclosingcolor}\itshape\enclname: \@enclosure}}%
\vfil}
diff --git a/macros/latex/contrib/moderncv/moderncvbodyv.sty b/macros/latex/contrib/moderncv/moderncvbodyv.sty
index 1f49692984..f29e57786b 100644
--- a/macros/latex/contrib/moderncv/moderncvbodyv.sty
+++ b/macros/latex/contrib/moderncv/moderncvbodyv.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvbodyv.sty'.
-%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,13 +10,13 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvbodyv}[2022-02-21 v2.3.1 modern curriculum vitae and letter body variant: 5]
+\ProvidesPackage{moderncvbodyv}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 5]
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
-% provides the commands for the skillmatrix as well as the command
+% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyv]{moderncvskillmatrix}
@@ -34,9 +34,9 @@
\renewcommand*{\hintfont}{\bfseries}
% styles
-\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}}
-\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
+\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{sectioncolor}{#1}}}
+\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{subsectioncolor}{#1}}}
+\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}
% lengths
% used by \cvitem (and all children command)
@@ -46,6 +46,8 @@
\@initializelength{\maincolumnwidth}
% used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth}
+% used by \cvtripleitem
+\@initializelength{\tripleitemcolumnwidth}
% used by \cvlistitem
\@initializelength{\listitemsymbolwidth} \settowidth{\listitemsymbolwidth}{\listitemsymbol}
\@initializelength{\listitemcolumnwidth}
@@ -53,6 +55,7 @@
% used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
%\@initializelength{\listdoubleitemmaincolumnwidth}
+\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
% commands
\@initializecommand{\recomputecvbodylengths}{%
@@ -61,6 +64,8 @@
\setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
\setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\separatorcolumnwidth}%
\setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\separatorcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
\setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
\setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
\recompute@cvskillmatrix@lengths
@@ -72,7 +77,8 @@
\addvspace{2.5ex}%
\phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{section}{#2}%
- \noindent\rlap{\@cvitem{\raggedleft\sectionstyle{#2}}{}}%
+ % minipage for correct spacing with multiline sections #69
+ \noindent\rlap{\@cvitem{\begin{minipage}[t][1ex]{\hintscolumnwidth}\raggedleft\sectionstyle{#2}\end{minipage}}{}}%
\nobreak\@afterheading\@aftersectiontrue\ignorespaces}
%\@initializeif{\if@aftersubsection}\@aftersubsectionfalse%
@@ -83,7 +89,8 @@
\par\ignorespaces\fi%
\phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{subsection}{#2}%
- \noindent\rlap{\@cvitem{\if@aftersection\else\@moderncvstrut{4pt}{24pt}\fi\raggedleft\subsectionstyle{#2}}{}}%
+ % minipage for correct spacing with multiline subsections #69
+ \noindent\rlap{\@cvitem{\begin{minipage}[t][1ex]{\hintscolumnwidth}\if@aftersection\else\@moderncvstrut{4pt}{24pt}\fi\raggedleft\subsectionstyle{#2}\end{minipage}}{}}%
\nobreak\@afterheading\@aftersectiontrue\ignorespaces}
\renewcommand*{\cvitem}[3][.5ex]{%
@@ -99,7 +106,7 @@
% underlying command to implement \cvitem, \subsection and \section
\newcommand*{\@cvitem}[3][.5ex]{%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\if@aftersection\else%
\vspace*{-\separatorrulewidth}\fi% HACK; I don't understand where the space is coming from, nor what it's exact value is :(
@@ -117,15 +124,23 @@
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\doubleitemcolumnwidth}\ifthenelse{\equal{#4}{}}{}{\hintstyle{#4}: }#5\end{minipage}}}
+\renewcommand*{\cvtripleitem}[7][.1ex]{%
+ \@cvitem[#1]{}{%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#4}: #5\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\tripleitemcolumnwidth}\ifthenelse{\equal{#6}{}}{}{\hintstyle{#6}: }#7\end{minipage}}}
+
\renewcommand*{\cvlistitem}[2][.5ex]{%
- \@cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listitemcolumnwidth}#2\end{minipage}}}
+ \@cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}}}
\renewcommand*{\cvlistdoubleitem}[3][.5ex]{%
- \@cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#2\end{minipage}%
+ \@cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\ifthenelse{\equal{#3}{}}%
{}%
- {\listitemsymbol\begin{minipage}[t]{\listdoubleitemcolumnwidth}#3\end{minipage}}}}
+ {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
\@initializebox{\cventryyearbox}
\@initializelength{\cventrytitleboxwidth}
@@ -165,7 +180,7 @@
{%
\bibliographyhead{\refname}%
% \small%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\noindent%
\begin{tabular}[t]{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}|@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}%
@@ -206,13 +221,14 @@
\recomputecvbodylengths%
\setlength{\parskip}{6\p@}}
-\renewcommand*{\makeletterclosing}{
- \@closing\\[3em]%
+\renewcommand*{\makeletterclosing}{%
+ \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
+ \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
{\bfseries \@firstname~\@lastname}%
\ifthenelse{\isundefined{\@enclosure}}{}{%
\\%
\vfill%
- {\color{color2}\itshape\enclname: \@enclosure}}}
+ {\color{letterclosingcolor}\itshape\enclname: \@enclosure}}}
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvbodyvi.sty b/macros/latex/contrib/moderncv/moderncvbodyvi.sty
new file mode 100644
index 0000000000..76e1a15c3a
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvbodyvi.sty
@@ -0,0 +1,203 @@
+%% start of file `moderncvbodyvi.sty'.
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com).
+%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+
+
+%-------------------------------------------------------------------------------
+% identification
+%-------------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{moderncvbodyvi}[2023/11/21 v2.0.0 modern curriculum vitae and letter body variant: 6]
+
+
+%-------------------------------------------------------------------------------
+% required packages
+%-------------------------------------------------------------------------------
+\RequirePackage{moderncvverticaltimeline}
+% No customization currently exists for `modercvbodyvi`; just reuse
+% `moderncvbodyi`. We might consider supporting a short table format (only skill
+% name and rating) in the future.
+\RequirePackage[moderncvbodyi,circle]{moderncvskillmatrix}
+
+
+%-------------------------------------------------------------------------------
+% overall body definition
+%-------------------------------------------------------------------------------
+% fonts
+\renewcommand*{\sectionfont}{\Large\upshape\bfseries}
+\renewcommand*{\subsectionfont}{\large\mdseries\upshape}
+\renewcommand*{\hintfont}{}
+
+% styles
+\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}}
+\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}}
+\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
+
+
+%-------------------------------------------------------------------------------
+% resume body definition
+%-------------------------------------------------------------------------------
+% lengths
+% used by \cvitem (and all children command)
+\@initializelength{\hintscolumnwidth} \setlength{\hintscolumnwidth}{0.175\textwidth}
+\@initializelength{\separatorcolumnwidth} \setlength{\separatorcolumnwidth}{0.025\textwidth}
+\@initializelength{\maincolumnwidth}
+% used by \cvdoubleitem
+\@initializelength{\doubleitemcolumnwidth}
+% used by \cvtripleitem
+\@initializelength{\tripleitemcolumnwidth}
+% used by \cvlistitem
+\@initializelength{\listitemsymbolwidth} \settowidth{\listitemsymbolwidth}{\listitemsymbol}
+\@initializelength{\listitemcolumnwidth}
+% used by \cvlistdoubleitem
+\@initializelength{\listdoubleitemcolumnwidth}
+\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
+% default moderncv \photo (change the definition such that by default the photo and its box align with the section bars
+\RenewDocumentCommand{\photo}{O{\hintscolumnwidth-0.8pt-2\fboxsep}O{0.4pt}m}{\def\@photowidth{#1}\def\@photoframewidth{#2}\def\@photo{#3}}%
+
+% commands
+\renewcommand*{\recomputecvbodylengths}{%
+ % body lengths
+ \setlength{\maincolumnwidth}{\textwidth-\leftskip-\rightskip-\separatorcolumnwidth-\hintscolumnwidth}%
+ \setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
+ \setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\hintscolumnwidth-\separatorcolumnwidth-\separatorcolumnwidth}%
+ \setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\hintscolumnwidth-3\separatorcolumnwidth}%
+ \setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
+ \setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
+ \setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
+ \recompute@cvskillmatrix@lengths
+ % regular lengths
+ \setlength{\parskip}{0\p@}}
+
+\@initializelength{\baseletterheight}
+\settoheight{\baseletterheight}{\sectionstyle{o}}
+\setlength{\baseletterheight}{\baseletterheight-0.95ex}
+% The optional argument can be used to place a small icon near the section name.
+% E.g. `\section[\faBookmark]{Education}`
+\RenewDocumentCommand{\section}{sO{}m}{%
+ \tl@resetchain%
+ \par\addvspace{2.5ex}%
+ \phantomsection{}% reset the anchor for hyperrefs
+ \addcontentsline{toc}{section}{#3}%
+ \strut\sectionstyle{\textcolor{color1!55!white}{{#2}\rule{.75ex}{0pt}\rule{1pt}{\heightof{#3}}}%
+ \rule{.75ex}{0pt}#3}%
+ \par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading
+
+\RenewDocumentCommand{\subsection}{sm}{%
+ \par\addvspace{1ex}%
+ \phantomsection{}% reset the anchor for hyperrefs
+ \addcontentsline{toc}{subsection}{#2}%
+ \cvitem[0ex]{}{\strut\subsectionstyle{#2}}%
+ \par\nobreak\addvspace{.5ex}\@afterheading}% to avoid a pagebreak after the heading
+
+\renewcommand*{\cvitem}[3][.25em]{%
+ \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}%
+ \raggedleft\hintstyle{#2} &{#3}%
+ \end{tabular}%
+ \par\addvspace{#1}}
+
+\renewcommand*{\cvdoubleitem}[5][.25em]{%
+ \cvitem[#1]{#2}{%
+ \begin{minipage}[t]{\doubleitemcolumnwidth}#3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#4}\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\doubleitemcolumnwidth}#5\end{minipage}}}
+
+\renewcommand*{\cvtripleitem}[7][.1em]{%
+ \cvitem[#1]{#2}{%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#3\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#4}\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#5\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#6}\end{minipage}%
+ \hspace*{\separatorcolumnwidth}%
+ \begin{minipage}[t]{\tripleitemcolumnwidth}#7\end{minipage}}}
+
+\renewcommand*{\cvlistitem}[2][.25em]{%
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}}}
+
+\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
+ \cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \ifthenelse{\equal{#3}{}}%
+ {}%
+ {\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
+
+\renewcommand*{\cventry}[7][.25em]{%
+ \cvitem[#1]{\tl@milestone{#2}}{%
+ {\bfseries#3}%
+ \ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}%
+ \ifthenelse{\equal{#5}{}}{}{, #5}%
+ \ifthenelse{\equal{#6}{}}{}{, #6}%
+ \strut%
+ \ifx&#7&%
+ \else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}}
+
+\@initializebox{\cvitemwithcommentbox}
+\@initializelength{\cvitemwithcommentskilllength}
+\@initializelength{\cvitemwithcommentcommentlength}
+\renewcommand*{\cvitemwithcomment}[4][.25em]{%
+ \savebox{\cvitemwithcommentbox}{{#3}}%
+ \setlength{\cvitemwithcommentskilllength}{\widthof{\usebox{\cvitemwithcommentbox}}}%
+ \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentskilllength}%
+ \cvitem[#1]{#2}{%
+ \begin{minipage}[t]{\cvitemwithcommentskilllength}\usebox{\cvitemwithcommentbox}\end{minipage}%
+ \hfill% fill of \separatorcolumnwidth
+ \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}}}
+
+\renewenvironment{thebibliography}[1]%
+ {%
+ \bibliographyhead{\refname}%
+% \small%
+ \begin{list}{\bibliographyitemlabel}%
+ {%
+ \setlength{\topsep}{0pt}%
+ \setlength{\labelwidth}{\hintscolumnwidth}%
+ \setlength{\labelsep}{\separatorcolumnwidth}%
+ \leftmargin\labelwidth%
+ \advance\leftmargin\labelsep%
+ \@openbib@code%
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty%
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy%
+ \clubpenalty4000%\@clubpenalty \clubpenalty%
+ \widowpenalty4000%
+ \sfcode`\.\@m%
+ \sfcode `\=1000\relax}%
+ {%
+ \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}%
+ \end{list}}
+
+
+%-------------------------------------------------------------------------------
+% letter style definition
+%-------------------------------------------------------------------------------
+% commands
+\renewcommand*{\recomputeletterbodylengths}{%
+ \recomputecvlengths%
+ \setlength{\parskip}{6\p@}}
+
+\renewcommand*{\makeletterclosing}{
+ \@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
+ \ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
+ {\bfseries\@firstname~\@lastname}%
+ \ifthenelse{\isundefined{\@enclosure}}{}{%
+ \\%
+ \vfil%
+ {\color{color2}\itshape\enclname: \@enclosure}}%
+ \vfil}
+
+
+\endinput
+
+
+%% end of file `moderncvbodyvi.sty'.
diff --git a/macros/latex/contrib/moderncv/moderncvcollection.sty b/macros/latex/contrib/moderncv/moderncvcollection.sty
index 5d3432e661..bddc9a5177 100644
--- a/macros/latex/contrib/moderncv/moderncvcollection.sty
+++ b/macros/latex/contrib/moderncv/moderncvcollection.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcollection.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcollection}[2022-02-21 v2.3.1 moderncv collections]
+\ProvidesPackage{moderncvcollection}[2024-07-18 v2.4.1 moderncv collections]
%-------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/moderncv/moderncvcolorblack.sty b/macros/latex/contrib/moderncv/moderncvcolorblack.sty
index ea3653eace..29ba5bd410 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorblack.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorblack.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorblack.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorblack}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: black]
+\ProvidesPackage{moderncvcolorblack}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: black]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0,0,0}% black
-\definecolor{color2}{rgb}{0,0,0}% black
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{black}% black
+\colorlet{color2}{black}% black
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorblue.sty b/macros/latex/contrib/moderncv/moderncvcolorblue.sty
index b02992e1b3..779b3be956 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorblue.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorblue.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorblue.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorblue}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: blue]
+\ProvidesPackage{moderncvcolorblue}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: blue]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.22,0.45,0.70}% light blue
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{lightblue}% light blue
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty b/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty
index 775f033f23..aeeccf5ef6 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorburgundy.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorburgundy}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: burgundy]
+\ProvidesPackage{moderncvcolorburgundy}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: burgundy]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.596078,0,0}% burgundy: 139/255 (0.545098) or 152/255 (0.596078)
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{burgundy}% burgundy
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorcerulean.sty b/macros/latex/contrib/moderncv/moderncvcolorcerulean.sty
new file mode 100644
index 0000000000..1f7cce83c7
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvcolorcerulean.sty
@@ -0,0 +1,32 @@
+%% start of file `moderncvcolorcerulean.sty'.
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com).
+%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+
+
+%-------------------------------------------------------------------------------
+% identification
+%-------------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{moderncvcolorcerulean}[2023/11/21 v2.0.0 modern curriculum vitae and letter color scheme: cerulean]
+
+
+%-------------------------------------------------------------------------------
+% color scheme definition
+%-------------------------------------------------------------------------------
+\definecolor{color0}{rgb}{0,0,0}% black
+\definecolor{color1}{HTML}{0081a7}% cerulean
+\definecolor{color2}{HTML}{4d908e}% dark cyan
+\definecolor{headTL}{HTML}{00afb9}% verdigris
+\colorlet{headBR}{color1}
+\definecolor{headtext}{HTML}{ffffff}% white
+\colorlet{headhr}{color2}
+
+
+\endinput
+
+
+%% end of file `moderncvcolorcerulean.sty'.
diff --git a/macros/latex/contrib/moderncv/moderncvcolorgreen.sty b/macros/latex/contrib/moderncv/moderncvcolorgreen.sty
index 891c3290b5..03c026ea07 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorgreen.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorgreen.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorgreen.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorgreen}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: green]
+\ProvidesPackage{moderncvcolorgreen}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: green]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.35,0.70,0.30}% green
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{green}% green
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorgrey.sty b/macros/latex/contrib/moderncv/moderncvcolorgrey.sty
index 37d2b57749..6bd9184c0e 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorgrey.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorgrey.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorgrey.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorgrey}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: grey]
+\ProvidesPackage{moderncvcolorgrey}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: grey]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.55,0.55,0.55}% dark grey
-\definecolor{color2}{rgb}{0.55,0.55,0.55}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{darkgrey}% dark grey
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolororange.sty b/macros/latex/contrib/moderncv/moderncvcolororange.sty
index f249fd7de9..c4f612ab6d 100644
--- a/macros/latex/contrib/moderncv/moderncvcolororange.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolororange.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolororange.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolororange}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: orange]
+\ProvidesPackage{moderncvcolororange}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: orange]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.95,0.55,0.15}% orange
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{orange}% orange
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorpurple.sty b/macros/latex/contrib/moderncv/moderncvcolorpurple.sty
index 22053d7849..d0110526f1 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorpurple.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorpurple.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorpurple.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorpurple}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: purple]
+\ProvidesPackage{moderncvcolorpurple}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: purple]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.50,0.33,0.80}% purple
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{purple}% purple
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolorred.sty b/macros/latex/contrib/moderncv/moderncvcolorred.sty
index 68b1335c84..bc51d4adf5 100644
--- a/macros/latex/contrib/moderncv/moderncvcolorred.sty
+++ b/macros/latex/contrib/moderncv/moderncvcolorred.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcolorred.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,15 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcolorred}[2022-02-21 v2.3.1 modern curriculum vitae and letter color scheme: red]
+\ProvidesPackage{moderncvcolorred}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: red]
%-------------------------------------------------------------------------------
% color scheme definition
%-------------------------------------------------------------------------------
-\definecolor{color0}{rgb}{0,0,0}% black
-\definecolor{color1}{rgb}{0.95,0.20,0.20}% red
-\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey
+\input{moderncvcolors.tex}
+
+\colorlet{color0}{black}% black
+\colorlet{color1}{red}% red
+\colorlet{color2}{darkgrey}% dark grey
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvcolors.tex b/macros/latex/contrib/moderncv/moderncvcolors.tex
new file mode 100644
index 0000000000..7f840ff059
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvcolors.tex
@@ -0,0 +1,35 @@
+%-------------------------------------------------------------------------------
+% built-in colors
+%-------------------------------------------------------------------------------
+
+\definecolor{black}{RGB}{0, 0, 0}
+\definecolor{red}{rgb}{0.95, 0.20, 0.20}
+\definecolor{darkgrey}{rgb}{0.45, 0.45, 0.45}
+\definecolor{orange}{rgb}{0.95, 0.55, 0.15}
+\definecolor{burgundy}{rgb}{0.596078, 0, 0}% 139/255 (0.545098) or 152/255 (0.596078)
+\definecolor{purple}{rgb}{0.50, 0.33, 0.80}
+\definecolor{lightblue}{rgb}{0.22, 0.45, 0.70}
+\definecolor{green}{rgb}{0.35, 0.70, 0.30}
+
+%-------------------------------------------------------------------------------
+% default colors
+%-------------------------------------------------------------------------------
+
+\@ifundefined{\string\color@default-socialicon-color}{\colorlet{default-socialicon-color}{darkgrey}}{}
+
+%-------------------------------------------------------------------------------
+% colors for social icons
+%-------------------------------------------------------------------------------
+
+% \definecolor{weixin}{rgb}{.184, .533, .098}
+% \definecolor{linkedin}{HTML}{0a66c2}
+% \definecolor{orcid}{HTML}{a6ce39}
+% \definecolor{twitter}{RGB}{29, 155, 240}
+% \definecolor{facebook}{HTML}{1b74e4}
+% TODO: add more colors
+
+%-------------------------------------------------------------------------------
+% custom colors
+%-------------------------------------------------------------------------------
+
+% \definecolor{tsinghua}{HTML}{791CB5}
diff --git a/macros/latex/contrib/moderncv/moderncvcompatibility.sty b/macros/latex/contrib/moderncv/moderncvcompatibility.sty
index fb9a8c4363..e8e0af713f 100644
--- a/macros/latex/contrib/moderncv/moderncvcompatibility.sty
+++ b/macros/latex/contrib/moderncv/moderncvcompatibility.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvcompatibility.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvcompatibility}[2022-02-21 v2.3.1 modern curriculum vitae and letter compatibility patches]
+\ProvidesPackage{moderncvcompatibility}[2024-07-18 v2.4.1 modern curriculum vitae and letter compatibility patches]
%-------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/moderncv/moderncvdebugtools.sty b/macros/latex/contrib/moderncv/moderncvdebugtools.sty
index b28e409b54..c19651ab05 100644
--- a/macros/latex/contrib/moderncv/moderncvdebugtools.sty
+++ b/macros/latex/contrib/moderncv/moderncvdebugtools.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvdebugtools.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvdebugtools}[2022-02-21 v2.3.1 modern curriculum vitae and letter debug tools]
+\ProvidesPackage{moderncvdebugtools}[2024-07-18 v2.4.1 modern curriculum vitae and letter debug tools]
%-------------------------------------------------------------------------------
@@ -32,7 +32,7 @@
\begin{tikzpicture}[remember picture,overlay]
\begin{pgfonlayer}{background}
\coordinate (a\thedebugrule);
- \draw[red,thin,#1]
+ \draw[red,thin,#1]
([xshift=#2]a\thedebugrule|-current page.north) -- ([xshift=#2]a\thedebugrule|-current page.south);
\end{pgfonlayer}
\end{tikzpicture}}
@@ -42,7 +42,7 @@
\begin{tikzpicture}[remember picture,overlay]
\begin{pgfonlayer}{background}
\coordinate (b\thedebugrule);
- \draw[red,thin,#1]
+ \draw[red,thin,#1]
([yshift=#2]b\thedebugrule-|current page.west) -- ([yshift=#2]b\thedebugrule-|current page.east);
\end{pgfonlayer}
\end{tikzpicture}}
diff --git a/macros/latex/contrib/moderncv/moderncvfooti.sty b/macros/latex/contrib/moderncv/moderncvfooti.sty
index 370365848f..f1de51a44e 100644
--- a/macros/latex/contrib/moderncv/moderncvfooti.sty
+++ b/macros/latex/contrib/moderncv/moderncvfooti.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvfooti.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvfooti}[2022-02-21 v2.3.1 modern curriculum vitae and letter footer variant: 1]
+\ProvidesPackage{moderncvfooti}[2024-07-18 v2.4.1 modern curriculum vitae and letter footer variant: 1]
%-------------------------------------------------------------------------------
@@ -79,7 +79,7 @@
\fancyfoot[c]{%
\parbox[b]{\footwidth}{%
\centering%
- \color{color2}\addressfont%
+ \color{addresscolor}\addressfont%
\vspace{\baselineskip}% forces a white line to ensure space between main text and footer (as footer height can't be known in advance)
\ifthenelse{\isundefined{\@addressstreet}}{}{\addtofoot[]{\addresssymbol\@addressstreet}%
\ifthenelse{\equal{\@addresscity}{}}{}{\addtofoot[~--~]{\@addresscity}}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
@@ -89,7 +89,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtofoot{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtofoot{\emailsymbol\emaillink{\@email}}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\addtofoot{\homepagesymbol\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\addtofoot{\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\addtofoot{\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\addtofoot{\@extrainfo}}%
@@ -109,7 +110,7 @@
\fancyfoot[c]{%
\parbox[b]{\footwidth}{%
\centering%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\vspace{\baselineskip}% forces a white line to ensure space between main text and footer (as footer height can't be known in advance)
\vspace{-\baselineskip}% to cancel out the extra vertical space taken by the name (below) and ensure perfect alignment of letter and cv footers
\strut{\bfseries\upshape\@firstname~\@lastname}\\% the \strut is required to ensure the line is exactly \baselineskip tall
@@ -121,7 +122,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtofoot{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtofoot{\emailsymbol\emaillink{\@email}}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\addtofoot{\homepagesymbol\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\addtofoot{\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\addtofoot{\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\addtofoot{\@extrainfo}}%
diff --git a/macros/latex/contrib/moderncv/moderncvheadi.sty b/macros/latex/contrib/moderncv/moderncvheadi.sty
index 087cf776e2..9dfb35a06c 100644
--- a/macros/latex/contrib/moderncv/moderncvheadi.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadi.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadi.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadi}[2022-02-21 v2.3.1 modern curriculum vitae and letter header variant: 1]
+\ProvidesPackage{moderncvheadi}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 1]
% details options: "details" (default) or "nodetails"
\@initializeif{\if@details}\@detailsfalse
@@ -23,6 +23,11 @@
\@initializeif{\if@right}\@rightfalse
\DeclareOption{right} {\@leftfalse\@righttrue}
+% top options: align header elements by their top instead of their bottom
+% default: bottom
+\@initializeif{\if@top}\@topfalse
+\DeclareOption{top}{\@toptrue}
+
\DeclareOption*{}% avoid choking on unknown options
\ExecuteOptions{details,left}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
@@ -43,10 +48,12 @@
\renewcommand*{\quotefont}{\large\slshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{namecolor}{#1}}}
+\renewcommand*{\firstnamestyle}[1]{{\namefont\textcolor{firstnamecolor}{#1}}}
+\renewcommand*{\lastnamestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -72,7 +79,7 @@
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\protected@edef\socialsdetails{\socialsdetails\protect\makenewline\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\savebox{\makecvheaddetailsbox}{%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\if@left\begin{tabular}[b]{@{}r@{}}\fi%
\if@right\begin{tabular}[b]{@{}l@{}}\fi%
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
@@ -81,7 +88,8 @@
\ifthenelse{\isundefined{\@born}}{}{\makenewline\bornsymbol\@born}%
\phonesdetails% needs to be pre-rendered as loops and tabulars seem to conflict
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\socialsdetails% needs to be pre-rendered as loops and tabulars seem to conflict
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}%
\end{tabular}
@@ -94,7 +102,7 @@
{%
\if@left%
\hspace*{\separatorcolumnwidth}\fi%
- \color{color1}%
+ \color{pictureframecolor}%
\setlength{\fboxrule}{\@photoframewidth}%
\ifdim\@photoframewidth=0pt%
\setlength{\fboxsep}{0pt}\fi%
@@ -112,9 +120,14 @@
\begin{minipage}[b]{\makecvheadnamewidth}%
\if@left\raggedright\fi%
\if@right\raggedleft\fi%
- \namestyle{\@firstname\ \@lastname}%
+ \firstnamestyle{\@firstname}~\lastnamestyle{\@lastname}%
\ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}%
\end{minipage}}%
+ % raise boxes if top option is set
+ \if@top%
+ \savebox{\makecvheadnamebox}{\raisebox{-\height+\baselineskip}{\usebox{\makecvheadnamebox}}}%
+ \savebox{\makecvheaddetailsbox}{\raisebox{-\height+\baselineskip}{\usebox{\makecvheaddetailsbox}}}%
+ \savebox{\makecvheadpicturebox}{\raisebox{-\height+\baselineskip}{\usebox{\makecvheadpicturebox}}}\fi%
% rendering
\if@left%
\usebox{\makecvheadnamebox}%
@@ -126,11 +139,17 @@
\rlap{\usebox{\makecvheaddetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvheadnamewidth is forced
\hfill%
\usebox{\makecvheadnamebox}\fi%
- \\[2.5em]%
% optional quote
\ifthenelse{\isundefined{\@quote}}%
- {}%
- {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[2.5em]}}%
+ {\vspace{2.5em}}%
+ {%
+ \\[2.5em]%
+ {%
+ \centering%
+ \begin{minipage}{\quotewidth}%
+ \centering%
+ \quotestyle{\@quote}%
+ \end{minipage}\\[2.5em]}}%
\par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvhead
@@ -150,7 +169,7 @@
% optional detailed information
\if@details%
\raggedleft%
- \addressfont\textcolor{color2}{%
+ \addressfont\textcolor{addresscolor}{%
{\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse%
% optional detailed information
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
@@ -159,9 +178,10 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}\fi%
- \end{minipage}\\[1em]
+ \end{minipage}\\[2em]
% recipient block
\begin{minipage}[t]{.5\textwidth}
\raggedright%
@@ -173,6 +193,8 @@
\hfill% US style
% \\[1em]% UK style
\@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[2em]}}
% opening
\raggedright%
\@opening\\[1.5em]%
diff --git a/macros/latex/contrib/moderncv/moderncvheadii.sty b/macros/latex/contrib/moderncv/moderncvheadii.sty
index b699242ed4..a36c8e1af4 100644
--- a/macros/latex/contrib/moderncv/moderncvheadii.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadii.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadii.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadii}[2022-02-21 v2.3.1 modern curriculum vitae and letter header variant: 2]
+\ProvidesPackage{moderncvheadii}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 2]
% details options: "details" or "nodetails" (default)
\@initializeif{\if@details}\@detailsfalse
@@ -47,10 +47,10 @@
\renewcommand*{\quotefont}{\large\slshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
% commands
\@initializecommand{\makeheaddetailssymbol}{%
@@ -110,7 +110,7 @@
\setlength\fboxrule{\@photoframewidth}%
\ifdim\@photoframewidth=0pt%
\setlength{\fboxsep}{0pt}\fi%
- {\color{color1}\framebox{\includegraphics[width=\@photowidth]{\@photo}}}}}%
+ {\color{pictureframecolor}\framebox{\includegraphics[width=\@photowidth]{\@photo}}}}}%
% name (pre-rendering)
\@initializelength{\makecvheadpicturewidth}%
\settowidth{\makecvheadpicturewidth}{\usebox{\makecvheadpicturebox}}%
@@ -121,9 +121,9 @@
\if@right\raggedleft\fi%
\namefont%
\if@alternate% alternate design: first- and lastname in lowercase with no space in between (distinction is made by color difference)
- {\color{color2!50}\MakeLowercase\@firstname}{\color{color2}\MakeLowercase\@lastname}%
+ {\color{firstnamecolor}\MakeLowercase\@firstname}{\color{lastnamecolor}\MakeLowercase\@lastname}%
\else% default design: first- and lastname as given with a space in between
- {\color{color2!50}\@firstname} {\color{color2}\@lastname}\fi}}%
+ {\color{firstnamecolor}\@firstname} {\color{lastnamecolor}\@lastname}\fi}}%
% rendering
\if@left%
\usebox{\makecvheadnamebox}%
@@ -131,11 +131,11 @@
\if@right%
\usebox{\makecvheadpicturebox}%
\usebox{\makecvheadnamebox}\fi\\[-.35em]%
- {\color{color2!50}\rule{\textwidth}{.25ex}}%
+ {\color{headrulecolor}\rule{\textwidth}{.25ex}}%
% optional detailed information
\if@details{%
\\\null%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\@addressstreet}}{}{\addtomakeheaddetails{\addresssymbol\@addressstreet}%
\ifthenelse{\equal{\@addresscity}{}}{}{\addtomakeheaddetails[~--~]{\@addresscity}}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
@@ -144,7 +144,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\addtomakeheaddetails{\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\addtomakeheaddetails{\@extrainfo}}%
@@ -157,15 +158,18 @@
\titlestyle{\MakeLowercase\@title}%
\else%
\titlestyle{\@title}\fi%
- }\\[2.5em]%
+ }
% optional quote
\ifthenelse{\isundefined{\@quote}}%
- {}%
- {{\null\hfill%
+ {\vspace{2.5em}}%
+ {%
+ \\[2.5em]%
+ {%
+ \centering%
\begin{minipage}{\quotewidth}%
\centering%
\quotestyle{\@quote}%
- \end{minipage}\hfill\null\\[2.5em]}}%
+ \end{minipage}\\[2.5em]}}%
\par}% to avoid weird spacing bug at the first section if no blank line is left after \maketitle
@@ -189,7 +193,9 @@
% date
\hfill% US style
% \\[1em]% UK style
- \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ \@date\\[3em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[3em]}}
% opening
\raggedright%
\@opening\\[1.5em]%
diff --git a/macros/latex/contrib/moderncv/moderncvheadiii.sty b/macros/latex/contrib/moderncv/moderncvheadiii.sty
index e4dbafd5ae..51a3aa2444 100644
--- a/macros/latex/contrib/moderncv/moderncvheadiii.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadiii.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadiii.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadiii}[2022-02-21 v2.3.1 modern curriculum vitae and letter header variant: 3]
+\ProvidesPackage{moderncvheadiii}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 3]
% details options: "details" (default) or "nodetails"
\@initializeif{\if@details}\@detailsfalse
@@ -36,10 +36,12 @@
\renewcommand*{\quotefont}{\large\slshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color1}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2!85}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{namecolor}{#1}}}
+\renewcommand*{\firstnamestyle}[1]{{\namefont\textcolor{firstnamecolor}{#1}}}
+\renewcommand*{\lastnamestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
% commands
\@initializecommand{\makeheaddetailssymbol}{%
@@ -81,12 +83,12 @@
\parbox{\makeheaddetailswidth}{%
\centering%
% name and title
- \namestyle{\@firstname~\@lastname}%
+ \firstnamestyle{\@firstname}~\lastnamestyle{\@lastname}%
\ifthenelse{\equal{\@title}{}}{}{\titlestyle{~|~\@title}}% \isundefined doesn't work on \@title, as LaTeX itself defines \@title (before it possibly gets redefined by \title)
% optional detailed information
\if@details{%
\\%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\@addressstreet}}{}{\addtomakeheaddetails{\addresssymbol\@addressstreet}%
\ifthenelse{\equal{\@addresscity}{}}{}{\addtomakeheaddetails[~--~]{\@addresscity}}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
@@ -95,11 +97,12 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\addtomakeheaddetails{\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\addtomakeheaddetails{\@extrainfo}}%
- \flushmakeheaddetails}\fi}\\[2.5em]}% need to force a \par after this to avoid weird spacing bug at the first section if no blank line is left after \makehead
+ \flushmakeheaddetails}\fi}}% need to force a \par after this to avoid weird spacing bug at the first section if no blank line is left after \makehead
%-------------------------------------------------------------------------------
@@ -117,8 +120,15 @@
\makehead%
% optional quote
\ifthenelse{\isundefined{\@quote}}%
- {}%
- {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[2.5em]}}%
+ {\vspace{2.5em}}%
+ {%
+ \\[2.5em]%
+ {%
+ \centering%
+ \begin{minipage}{\quotewidth}%
+ \centering%
+ \quotestyle{\@quote}%
+ \end{minipage}\\[2.5em]}}%
\par}% to avoid weird spacing bug at the first section if no blank line is left after \maketitle}
@@ -132,9 +142,25 @@
\renewcommand*{\makeletterhead}{%
% recompute lengths (in case we are switching from letter to resume, or vice versa)
\recomputeletterlengths%
- % sender block
- \makehead%
- \par%
+ % sender contact info
+ \hfill%
+ \begin{minipage}{.5\textwidth}%
+ % optional detailed information
+ \if@details%
+ \raggedleft%
+ \addressfont\textcolor{color2}{%
+ {\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse%
+ % optional detailed information
+ \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
+ \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty
+ \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
+ \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
+ \makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}%
+ \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}\fi%
+ \end{minipage}\\[2em]
% recipient block
\begin{minipage}[t]{.5\textwidth}
\raggedright%
@@ -145,7 +171,9 @@
% date
\hfill% US style
% \\[1em]% UK style
- \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ \@date\\[3em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[3em]}}
% opening
\raggedright%
\@opening\\[1.5em]%
diff --git a/macros/latex/contrib/moderncv/moderncvheadiv.sty b/macros/latex/contrib/moderncv/moderncvheadiv.sty
index 9b59dacb9b..5a088fdb73 100644
--- a/macros/latex/contrib/moderncv/moderncvheadiv.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadiv.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadiv.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadiv}[2022-02-21 v2.3.1 modern curriculum vitae and letter header variant: 4]
+\ProvidesPackage{moderncvheadiv}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 4]
% details options: "details" (default) or "nodetails"
\@initializeif{\if@details}\@detailsfalse
@@ -38,10 +38,12 @@
\renewcommand*{\quotefont}{\large\itshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{namecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
+\renewcommand*{\firstnamestyle}[1]{{\namefont\textcolor{firstnamecolor}{#1}}}
+\renewcommand*{\lastnamestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -80,7 +82,7 @@
\ifthenelse{\isundefined{\@photo}}%
{}%
{%
- \color{color1}%
+ \color{pictureframecolor}%
\setlength\fboxrule{\@photoframewidth}%
\ifdim\@photoframewidth=0pt%
\setlength{\fboxsep}{0pt}\fi%
@@ -91,7 +93,7 @@
{\setlength{\makecvheadnamewidth}{\textwidth-\makecvheadpicturewidth}}%
{}%
\begin{minipage}[b]{\makecvheadnamewidth}%
- \namestyle{\@firstname\ \@lastname}%
+ \firstnamestyle{\@firstname}~\lastnamestyle{\@lastname}%
\ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}%
\end{minipage}%
% optional photo
@@ -103,7 +105,7 @@
% optional details
\if@details%
\makecvheadinfo{%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
@@ -111,7 +113,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\hbox to 1.0em{\csname\collectionloopkey phonesymbol\endcsname}~\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\hbox to 1.0em{\emailsymbol}~\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\hbox to 1.0em{\homepagesymbol}~\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\hbox to 1.0em{\homepagesymbol}~%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\makenewline\hbox to 1.0em{\csname\collectionloopkey socialsymbol\endcsname}~\collectionloopitem}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}\fi}
@@ -143,13 +146,15 @@
\@recipientaddress}\\[1em]%
% date
\@date\\[2em]%
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[2em]}}
% opening
\@opening\\[1.5em]%
% sender contact info
\if@details%
\hspace{0pt}%
\marginpar{%
- \addressfont\textcolor{color2}{%
+ \addressfont\textcolor{addresscolor}{%
{\bfseries\@firstname~\@lastname}\@firstdetailselementfalse%
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
@@ -157,7 +162,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\hbox to 1.0em{\csname\collectionloopkey phonesymbol\endcsname}~\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\hbox to 1.0em{\emailsymbol}~\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\hbox to 1.0em{\homepagesymbol}~\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\hbox to 1.0em{\homepagesymbol}~%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\makenewline\hbox to 1.0em{\csname\collectionloopkey socialsymbol\endcsname}~\collectionloopitem}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}}%
diff --git a/macros/latex/contrib/moderncv/moderncvheadv.sty b/macros/latex/contrib/moderncv/moderncvheadv.sty
index c4d4084324..e92233ef34 100644
--- a/macros/latex/contrib/moderncv/moderncvheadv.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadv.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadv.sty'.
-%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadv}[2022-02-21 v2.3.1 modern curriculum vitae and letter header variant: 5]
+\ProvidesPackage{moderncvheadv}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 5]
% details options: "details" (default) or "nodetails"
\@initializeif{\if@details}\@detailsfalse
@@ -37,10 +37,12 @@
\renewcommand*{\quotefont}{\large\slshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{namecolor}{#1}}}
+\renewcommand*{\firstnamestyle}[1]{{\namefont\textcolor{firstnamecolor}{#1}}}
+\renewcommand*{\lastnamestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
%-------------------------------------------------------------------------------
@@ -61,7 +63,7 @@
\ifthenelse{\isundefined{\@photo}}%
{}%
{%
- \color{color1}%
+ \color{pictureframecolor}%
\setlength{\fboxrule}{\@photoframewidth}%
\ifdim\@photoframewidth=0pt%
\setlength{\fboxsep}{0pt}\fi%
@@ -75,7 +77,7 @@
% optional details
\if@details%
\ifthenelse{\isundefined{\@photo}}{}{\\[0.5em]}%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
@@ -83,7 +85,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\csname\collectionloopkey phonesymbol\endcsname~\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol~\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol~\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol~%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\makenewline\csname\collectionloopkey socialsymbol\endcsname~\collectionloopitem}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}\fi}%
@@ -91,23 +94,32 @@
% name and optional title
\newlength{\makecvheadpictureboxskip}%
\setlength{\makecvheadpictureboxskip}{\totalheightof{\usebox{\makecvheadpicturebox}}}%
- \namestyle{\@firstname\ \@lastname}%
+ \firstnamestyle{\@firstname}~\lastnamestyle{\@lastname}%
\ifthenelse{\equal{\@title}{}}{
\ifthenelse{\isundefined{\@quote}}%
- {}%
- {\\[1.25em]\begin{minipage}{\quotewidth}\quotestyle{\@quote}\end{minipage}\\[2.5em]}
- }{
- \\[1.25em]\titlestyle{\@title}\\[2.5em]%
+ {}%
+ {%
+ \\[1.25em]%
+ \begin{minipage}{\quotewidth}%
+ \quotestyle{\@quote}%
+ \end{minipage}}%
+ }{%
+ \\[1.25em]%
+ \titlestyle{\@title}
% optional quote
\ifthenelse{\isundefined{\@quote}}%
- {}%
- {\begin{minipage}{\quotewidth}\quotestyle{\@quote}\end{minipage}\\[2.5em]}}}%
+ {\vspace{2.5em}}%
+ {%
+ \\[2.5em]%
+ \begin{minipage}{\quotewidth}%
+ \quotestyle{\@quote}
+ \end{minipage}}}}%
\par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvhead
% underlying command to implement \makecvtitle, identical to \@cvitem from moderncvbodyv
\let\standarddoublebackslash\\%
\newcommand*{\@makecvtitle}[3][.5ex]{%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{headrulecolor}%
\setlength\arrayrulewidth{1.2\p@}%
\if@aftersection\else%
\vspace*{-\arrayrulewidth}\fi% HACK; I don't understand where the space is coming from, nor what it's exact value is :(
@@ -137,7 +149,7 @@
% optional detailed information
\if@details%
\raggedleft%
- \addressfont\textcolor{color2}{%
+ \addressfont\textcolor{addresscolor}{%
{\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse%
% optional detailed information
\ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
@@ -146,9 +158,10 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httpslink{\@homepage}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}\fi%
- \end{minipage}\\[1em]
+ \end{minipage}\\[2em]
% recipient block
\begin{minipage}[t]{.5\textwidth}
\raggedright%
@@ -159,7 +172,9 @@
% date
\hfill% US style
% \\[1em]% UK style
- \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ \@date\\[3em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[2em]}}
% opening
\raggedright%
\@opening\\[1.5em]%
diff --git a/macros/latex/contrib/moderncv/moderncvheadvi.sty b/macros/latex/contrib/moderncv/moderncvheadvi.sty
index 8595901901..ecd6dbb041 100644
--- a/macros/latex/contrib/moderncv/moderncvheadvi.sty
+++ b/macros/latex/contrib/moderncv/moderncvheadvi.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvheadvi.sty'.
-%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvheadvi}[2022-02-21 v2.3.1 modern curriculum vitae and letter header: 6]
+\ProvidesPackage{moderncvheadvi}[2024-07-18 v2.4.1 modern curriculum vitae and letter header: 6]
% details options: "details" (default) or "nodetails"
\@initializeif{\if@details}\@detailsfalse
@@ -24,7 +24,7 @@
\DeclareOption{right} {\@leftfalse\@righttrue}
\DeclareOption*{}% avoid choking on unknown options
-\ExecuteOptions{details, left}
+\ExecuteOptions{details,left}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
@@ -43,20 +43,22 @@
\renewcommand*{\quotefont}{\large\slshape}
% styles
-\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color1}{#1}}}
-\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2!85}{#1}}}
-\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color2}{#1}}}
-\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}}
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{namecolor}{#1}}}
+\renewcommand*{\firstnamestyle}[1]{{\namefont\textcolor{firstnamecolor}{#1}}}
+\renewcommand*{\lastnamestyle}[1]{{\namefont\textcolor{lastnamecolor}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{titlecolor}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{addresscolor}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{quotecolor}{#1}}}
% commands
\@initializecommand{\makehead}{%
\setlength{\makeheaddetailswidth}{\textwidth}%
% name and title
\if@left\hfill\fi%
- \namestyle{\@firstname~\@lastname}%
+ \firstnamestyle{\@firstname}~\lastnamestyle{\@lastname}%
\ifthenelse{\equal{\@title}{}}{}{\titlestyle{~|~\@title}}\\[-.35em]% \isundefined doesn't work on \@title, as LaTeX itself defines \@title (before it possibly gets redefined by \title)
% rule
- {\color{color1}\rule{\textwidth}{.25ex}}}
+ {\color{bodyrulecolor}\rule{\textwidth}{.25ex}}}
%-------------------------------------------------------------------------------
% resume head definition
@@ -107,7 +109,7 @@
% optional detailed information
\if@details{%
\\\null%
- \addressfont\color{color2}%
+ \addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\@addressstreet}}{}{\addtomakeheaddetails{\addresssymbol\@addressstreet}%
\ifthenelse{\equal{\@addresscity}{}}{}{\addtomakeheaddetails[~--~]{\@addresscity}}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
@@ -116,7 +118,8 @@
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%
- \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol\httpslink{\@homepage}}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\addtomakeheaddetails{\homepagesymbol%
+ \ifthenelse{\equal{\@homepageprotocol}{http}}{\httplink{\@homepage}}{\httpslink{\@homepage}}}}%
\collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
\addtomakeheaddetails{\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@extrainfo}}{}{\addtomakeheaddetails{\@extrainfo}}%
@@ -154,7 +157,9 @@
% date
\hfill% US style
% \\[1em]% UK style
- \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ \@date\\[3em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[3em]}}
% opening
\raggedright%
\@opening\\[1.5em]%
diff --git a/macros/latex/contrib/moderncv/moderncvheadvii.sty b/macros/latex/contrib/moderncv/moderncvheadvii.sty
new file mode 100644
index 0000000000..f0c259ec05
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvheadvii.sty
@@ -0,0 +1,226 @@
+%% start of file `moderncvheadvii.sty'.
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com).
+%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+
+
+%-------------------------------------------------------------------------------
+% identification
+%-------------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{moderncvheadvii}[2023/11/21 v2.0.0 modern curriculum vitae and letter header variant: 7]
+
+% details options: "details" (default) or "nodetails"
+\@initializeif{\if@details}\@detailsfalse
+\DeclareOption{details} {\@detailstrue}
+\DeclareOption{nodetails} {\@detailsfalse}
+% QR options: "qr" (default) or "noqr". If "qr" is specified, a QR code is generated to point to the
+% homepage and placed near the details section
+\@initializeif{\if@headqr}\@headqrfalse
+\DeclareOption{qr} {\@headqrtrue}
+\DeclareOption{noqr} {\@headqrfalse}
+
+% left/right options: "left" (default) or "right"
+\@initializeif{\if@left} \@leftfalse
+\DeclareOption{left} {\@lefttrue\@rightfalse}
+\@initializeif{\if@right}\@rightfalse
+\DeclareOption{right} {\@leftfalse\@righttrue}
+
+\DeclareOption*{}% avoid choking on unknown options
+\ExecuteOptions{details,qr,left}
+\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
+
+
+%-------------------------------------------------------------------------------
+% required packages
+%-------------------------------------------------------------------------------
+\RequirePackage{qrcode}
+\RequirePackage{tikz}
+\usetikzlibrary{tikzmark,fit}
+
+
+%-------------------------------------------------------------------------------
+% overall head definition
+%-------------------------------------------------------------------------------
+\@ifundefined{\string\color@headTL}{\colorlet{headTL}{color1}}{}
+\@ifundefined{\string\color@headBR}{\colorlet{headBR}{color1}}{}
+\@ifundefined{\string\color@headtext}{\colorlet{headtext}{color2}}{}
+\@ifundefined{\string\color@headhr}{\colorlet{headhr}{color2}}{}
+
+% fonts
+\renewcommand*{\namefont}{\fontsize{30}{32}\rmfamily\mdseries\upshape}
+\renewcommand*{\titlefont}{\LARGE\mdseries\slshape}
+\renewcommand*{\addressfont}{\small\mdseries\slshape}
+\renewcommand*{\quotefont}{\large\slshape}
+
+% styles
+\renewcommand*{\namestyle}[1]{{\namefont\textcolor{headtext}{#1}}}
+\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{headtext}{#1}}}
+\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{headtext}{#1}}}
+\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color0}{#1}}}
+
+
+%-------------------------------------------------------------------------------
+% resume head definition
+%-------------------------------------------------------------------------------
+% lengths
+\@initializelength{\quotewidth}
+\@initializelength{\makecvheadnamewidth}% optional makecvheadname width to force a certain width (if set/remains to 0pt, the width is calculated automatically)
+\renewcommand*{\recomputecvheadlengths}{%
+ \setlength{\quotewidth}{0.65\textwidth}}
+
+% commands
+\renewcommand*{\makecvhead}{%
+ % recompute lengths (in case we are switching from letter to resume, or vice versa)
+ \recomputecvlengths%
+ % optional detailed information (pre-rendering)
+ \@initializebox{\makecvheaddetailsbox}%
+ \if@details%
+ \def\phonesdetails{}%
+ \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
+ \protected@edef\phonesdetails{\phonesdetails\protect\makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
+ \def\socialsdetails{}%
+ \collectionloop{socials}{% the key holds the social type (=symbol command prefix), the item holds the link
+ \protected@edef\socialsdetails{\socialsdetails\protect\makenewline\csname\collectionloopkey socialsymbol\endcsname\collectionloopitem}}%
+ \savebox{\makecvheaddetailsbox}{%
+ \addressfont\color{headtext}%
+ \if@left\begin{tabular}[b]{@{}r@{}}\fi%
+ \if@right\begin{tabular}[b]{@{}l@{}}\fi%
+ \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
+ \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty
+ \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
+ \phonesdetails% needs to be pre-rendered as loops and tabulars seem to conflict
+ \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}%
+ \socialsdetails% needs to be pre-rendered as loops and tabulars seem to conflict
+ \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}%
+ \end{tabular}
+ }\fi%
+ % optional photo (pre-rendering)
+ \@initializebox{\makecvheadpicturebox}%
+ \savebox{\makecvheadpicturebox}{%
+ \ifthenelse{\isundefined{\@photo}}%
+ {}%
+ {%
+ \if@right%
+ \hspace*{\separatorcolumnwidth}\fi%
+ \begin{tikzpicture}
+ \path[top color=headBR,bottom color=headTL,shading angle=45] (0,0) circle (\dimexpr\@photowidth/2+\@photoframewidth*2);
+ \path[fill=white] (0,0) circle (\dimexpr\@photowidth/2+\@photoframewidth);
+ \begin{scope}
+ \clip (0,0) circle (\dimexpr\@photowidth/2);
+ \node[inner sep=0pt] at (0,0) {\includegraphics[width=\@photowidth]{\@photo}};
+ \end{scope}
+ \end{tikzpicture}%
+ }%
+ \if@left%
+ \hspace*{\separatorcolumnwidth}\fi}%
+ % optional QR for homepage (pre-rendering)
+ \@initializebox{\makecvheadqrbox}%
+ \if@headqr%
+ \savebox{\makecvheadqrbox}{%
+ \ifthenelse{\isundefined{\@homepage}}{}{\tikz\node[inner sep=1ex,fill=white]{\qrcode[height=1.5cm]{\@homepage}};}%
+ }\fi%
+ % name and title (pre-rendering)
+ \@initializelength{\makecvheaddetailswidth}\settowidth{\makecvheaddetailswidth}{\usebox{\makecvheaddetailsbox}}%
+ \@initializelength{\makecvheadpicturewidth}\settowidth{\makecvheadpicturewidth}{\usebox{\makecvheadpicturebox}}%
+ \ifthenelse{\lengthtest{\makecvheadnamewidth=0pt}}% check for dummy value (equivalent to \ifdim\makecvheadnamewidth=0pt)
+ {\setlength{\makecvheadnamewidth}{\textwidth-\makecvheaddetailswidth-\makecvheadpicturewidth}}%
+ {}%
+ \@initializebox{\makecvheadnamebox}%
+ \savebox{\makecvheadnamebox}{%
+ \begin{minipage}[b]{\makecvheadnamewidth}%
+ \if@left\raggedright\fi%
+ \if@right\raggedleft\fi%
+ \namestyle{\@firstname\ {\scshape\@lastname}}%
+ \ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}%
+ \end{minipage}}%
+ % rendering
+ \begin{tikzpicture}[remember picture,overlay]
+ \node(head-bg) [top color=headTL,bottom color=headBR,shading angle=45,inner sep=0pt,
+ fit={(current page.north west)(current page.north east)(pic cs:head-end)}] {};
+ % Users may define `\@moderncvheadBackground` for additional background decoration
+ \ifthenelse{\isundefined{\@moderncvheadBackground}}{}{\@moderncvheadBackground}
+
+ \path[draw,line width=\@photoframewidth]
+ (head-bg.south west) edge[color=headhr!85!black] ([xshift=8em]head-bg.south west)
+ ([xshift=8em]head-bg.south west) edge[color=headhr] ([xshift=-8em]head-bg.south east)
+ ([xshift=-8em]head-bg.south east) edge[color=headhr!85!black] (head-bg.south east);
+ \end{tikzpicture}%
+ \if@left%
+ \usebox{\makecvheadpicturebox}%
+ \usebox{\makecvheadnamebox}%
+ \hfill%
+ \llap{\usebox{\makecvheaddetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvheadnamewidth is forced
+ \usebox{\makecvheadqrbox}\fi%
+ \if@right%
+ \usebox{\makecvheadqrbox}%
+ \rlap{\usebox{\makecvheaddetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvheadnamewidth is forced
+ \hfill%
+ \usebox{\makecvheadnamebox}%
+ \usebox{\makecvheadpicturebox}\fi%
+ \\[.15em]%
+ \tikzmark{head-end}\\[.15em]%
+ % optional quote
+ \ifthenelse{\isundefined{\@quote}}%
+ {}%
+ {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[.15em]}}%
+ \par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvhead
+
+
+%-------------------------------------------------------------------------------
+% letter head definition
+%-------------------------------------------------------------------------------
+% lengths
+%\renewcommand*{\recomputeletterheadlengths}{}
+
+% commands
+\renewcommand*{\makeletterhead}{%
+ % recompute lengths (in case we are switching from letter to resume, or vice versa)
+ \recomputeletterlengths%
+ % sender contact info
+ \hfill%
+ \begin{minipage}{.5\textwidth}%
+ % optional detailed information
+ \if@details%
+ \raggedleft%
+ \addressfont\textcolor{color2}{%
+ {\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse%
+ % optional detailed information
+ \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet%
+ \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty
+ \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
+ \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
+ \makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}%
+ \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
+ \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}%
+ \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}\fi%
+ \end{minipage}\\[1em]
+ % recipient block
+ \begin{minipage}[t]{.5\textwidth}
+ \raggedright%
+ \addressfont%
+ {\bfseries\upshape\@recipientname}\\%
+ \@recipientaddress%
+ \end{minipage}
+ % date
+ \hfill% US style
+% \\[1em]% UK style
+ \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900"
+ % optional subject
+ \ifthenelse{\isundefined{\@subject}}{}{{\bfseries\@subject\\[3em]}}
+ % opening
+ \raggedright%
+ \@opening\\[1.5em]%
+ % ensure no extra spacing after \makelettertitle due to a possible blank line
+% \ignorespacesafterend% not working
+ \hspace{0pt}\par\vspace{-\baselineskip}\vspace{-\parskip}}
+
+
+\endinput
+
+
+%% end of file `moderncvheadvii.sty'.
diff --git a/macros/latex/contrib/moderncv/moderncviconsacademic.sty b/macros/latex/contrib/moderncv/moderncviconsacademic.sty
index e1eae589aa..cf7bbbb536 100644
--- a/macros/latex/contrib/moderncv/moderncviconsacademic.sty
+++ b/macros/latex/contrib/moderncv/moderncviconsacademic.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconsacademic.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncviconsacademic}[2022-02-21 v2.3.1 modern curriculum vitae icons: academicons]
+\ProvidesPackage{moderncviconsacademic}[2024-07-18 v2.4.1 modern curriculum vitae icons: academicons]
%-------------------------------------------------------------------------------
@@ -18,7 +18,19 @@
%-------------------------------------------------------------------------------
% Package for academic icons
\RequirePackage{academicons}
+\RequirePackage{xcolor}
+%-------------------------------------------------------------------------------
+% set colors
+%-------------------------------------------------------------------------------
+\input{moderncvcolors.tex}
+
+\providecolor{orcid}{named}{default-socialicon-color}
+\providecolor{researchgate}{named}{default-socialicon-color}
+\providecolor{researcherid}{named}{default-socialicon-color}
+\providecolor{googlescholar}{named}{default-socialicon-color}
+\providecolor{arxiv}{named}{default-socialicon-color}
+\providecolor{inspire}{named}{default-socialicon-color}
%-------------------------------------------------------------------------------
% all symbols described in moderncv.cls
@@ -39,14 +51,16 @@
%\newcommand*{\stackoverflowsocialsymbol}{}
%\newcommand*{\bitbucketsocialsymbol} {}
%\newcommand*{\skypesocialsymbol} {}
-\renewcommand*{\orcidsocialsymbol} {{\small\aiOrcid}~}
-\renewcommand*{\researchgatesocialsymbol} {{\small\aiResearchGateSquare}~} % alternative: \aiResearchGate
-\renewcommand*{\researcheridsocialsymbol} {{\small\aiResearcherIDSquare}~} % alternative: \aiResearcherID
-\renewcommand*{\googlescholarsocialsymbol}{{\small\aiGoogleScholar}~}
+\renewcommand*{\orcidsocialsymbol} {{\color{orcid}\small\aiOrcid}~}
+\renewcommand*{\researchgatesocialsymbol} {{\color{researchgate}\small\aiResearchGateSquare}~} % alternative: \aiResearchGate
+\renewcommand*{\researcheridsocialsymbol} {{\color{researcherid}\small\aiResearcherIDSquare}~} % alternative: \aiResearcherID
+\renewcommand*{\googlescholarsocialsymbol}{{\color{googlescholar}\raisebox{-1pt}{\large\aiGoogleScholar}}~}
%\newcommand*{\telegramsocialsymbol} {}
%\newcommand*{\whatsappsocialsymbol} {}
%\newcommand*{\matrixsocialsymbol} {}
%\newcommand*{\signalsocialsymbol} {}
+\renewcommand*{\arxivsocialsymbol}{{\color{arxiv}{\small\aiarXiv}}~}
+\renewcommand*{\inspiresocialsymbol}{{\color{inspire}{\small\aiInspire}}~}
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncviconsawesome.sty b/macros/latex/contrib/moderncv/moderncviconsawesome.sty
index 2a0ea3a23c..a51729faa6 100644
--- a/macros/latex/contrib/moderncv/moderncviconsawesome.sty
+++ b/macros/latex/contrib/moderncv/moderncviconsawesome.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconsawesome.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,13 +10,51 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncviconsawesome}[2022-02-21 v2.3.1 modern curriculum vitae icons: awesome]
+\ProvidesPackage{moderncviconsawesome}[2024-07-18 v2.4.1 modern curriculum vitae icons: awesome]
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
% Font Awesome font
\RequirePackage{fontawesome5}
+\RequirePackage{xcolor}
+
+%-------------------------------------------------------------------------------
+% set colors
+%-------------------------------------------------------------------------------
+\input{moderncvcolors.tex}
+
+\providecolor{address}{named}{default-socialicon-color}
+\providecolor{mobilephone}{named}{default-socialicon-color}
+\providecolor{fixedphone}{named}{default-socialicon-color}
+\providecolor{faxphone}{named}{default-socialicon-color}
+\providecolor{email}{named}{default-socialicon-color}
+\providecolor{homepage}{named}{default-socialicon-color}
+\providecolor{googlescholar}{named}{default-socialicon-color}
+\providecolor{linkedin}{named}{default-socialicon-color}
+\providecolor{xing}{named}{default-socialicon-color}
+\providecolor{twitter}{named}{default-socialicon-color}
+\providecolor{mastodon}{named}{default-socialicon-color}
+\providecolor{github}{named}{default-socialicon-color}
+\providecolor{gitlab}{named}{default-socialicon-color}
+\providecolor{stackoverflow}{named}{default-socialicon-color}
+\providecolor{bitbucket}{named}{default-socialicon-color}
+\providecolor{skype}{named}{default-socialicon-color}
+\providecolor{orcid}{named}{default-socialicon-color}
+\providecolor{researchgate}{named}{default-socialicon-color}
+\providecolor{telegram}{named}{default-socialicon-color}
+\providecolor{whatsapp}{named}{default-socialicon-color}
+\providecolor{discord}{named}{default-socialicon-color}
+\providecolor{twitch}{named}{default-socialicon-color}
+\providecolor{youtube}{named}{default-socialicon-color}
+\providecolor{tiktok}{named}{default-socialicon-color}
+\providecolor{instagram}{named}{default-socialicon-color}
+\providecolor{soundcloud}{named}{default-socialicon-color}
+\providecolor{steam}{named}{default-socialicon-color}
+\providecolor{xbox}{named}{default-socialicon-color}
+\providecolor{playstation}{named}{default-socialicon-color}
+\providecolor{battlenet}{named}{default-socialicon-color}
+\providecolor{born}{named}{default-socialicon-color}
%-------------------------------------------------------------------------------
% all symbols described in moderncv.cls
@@ -28,28 +66,41 @@
%\renewcommand*{\addresssymbol} {}
-\renewcommand*{\mobilephonesymbol} {{\small\faMobile*}~} % alternative: \faMobile (solid style)
-\renewcommand*{\fixedphonesymbol} {{\small\faPhone*}~} % alternative: \faPhone (reversed)
-\renewcommand*{\faxphonesymbol} {{\small\faFax}~} % alternative: \faPrint
-\renewcommand*{\emailsymbol} {{\small\faEnvelope[regular]}~} % alternative: \faInbox, \faEnvelope (solid style)
-\renewcommand*{\homepagesymbol} {{\small\faGlobeAmericas}~} % alternative: \faHome, \faGlobe, \faGlobeEurope, \faGlobeAfrica, \faGlobeAsia
-\renewcommand*{\linkedinsocialsymbol} {{\small\faLinkedinIn}~} % alternative: \faLinkedin
-\renewcommand*{\xingsocialsymbol} {{\small\faXing}~} % alternative: \faXingSquare
-\renewcommand*{\twittersocialsymbol} {{\small\faTwitter}~} % alternative: \faTwitterSquare
-\renewcommand*{\githubsocialsymbol} {{\small\faGithub}~} % alternative: \faGithubSquare, \faGithub*
-\renewcommand*{\gitlabsocialsymbol} {{\small\faGitlab}~}
-\renewcommand*{\stackoverflowsocialsymbol}{{\small\faStackOverflow}~}
-\renewcommand*{\bitbucketsocialsymbol} {{\small\faBitbucket}~}
-\renewcommand*{\skypesocialsymbol} {{\small\faSkype}~}
-\renewcommand*{\orcidsocialsymbol} {{\small\faOrcid}~}
-\renewcommand*{\researchgatesocialsymbol} {{\small\faResearchgate}~}
+\renewcommand*{\mobilephonesymbol} {{\color{mobilephone}\small\faMobile*}~} % alternative: \faMobile (solid style)
+\renewcommand*{\fixedphonesymbol} {{\color{fixedphone}\small\faPhone*}~} % alternative: \faPhone (reversed)
+\renewcommand*{\faxphonesymbol} {{\color{faxphone}\small\faFax}~} % alternative: \faPrint
+\renewcommand*{\emailsymbol} {{\color{email}\small\faEnvelope[regular]}~} % alternative: \faInbox, \faEnvelope (solid style)
+\renewcommand*{\homepagesymbol} {{\color{homepage}\small\faGlobeAmericas}~} % alternative: \faHome, \faGlobe, \faGlobeEurope, \faGlobeAfrica, \faGlobeAsia
+\renewcommand*{\linkedinsocialsymbol} {{\color{linkedin}\small\faLinkedinIn}~} % alternative: \faLinkedin
+\renewcommand*{\xingsocialsymbol} {{\color{xing}\small\faXing}~} % alternative: \faXingSquare
+\renewcommand*{\twittersocialsymbol} {{\color{twitter}\small\faTwitter}~} % alternative: \faTwitterSquare
+\renewcommand*{\mastodonsocialsymbol} {{\color{mastodon}\small\faMastodon}~}
+\renewcommand*{\githubsocialsymbol} {{\color{github}\small\faGithub}~} % alternative: \faGithubSquare, \faGithub*
+\renewcommand*{\gitlabsocialsymbol} {{\color{gitlab}\small\faGitlab}~}
+\renewcommand*{\stackoverflowsocialsymbol}{{\color{stackoverflow}\small\faStackOverflow}~}
+\renewcommand*{\bitbucketsocialsymbol} {{\color{bitbucket}\small\faBitbucket}~}
+\renewcommand*{\skypesocialsymbol} {{\color{skype}\small\faSkype}~}
+\renewcommand*{\orcidsocialsymbol} {{\color{orcid}\small\faOrcid}~}
+\renewcommand*{\researchgatesocialsymbol} {{\color{researchgate}\small\faResearchgate}~}
%\renewcommand*{\researcheridsocialsymbol} {}
%\renewcommand*{\googlescholarsocialsymbol}{}
-\renewcommand*{\telegramsocialsymbol} {{\small\faTelegram}~}
-\renewcommand*{\whatsappsocialsymbol} {{\small\faWhatsapp}~}
+\renewcommand*{\telegramsocialsymbol} {{\color{telegram}\small\faTelegram}~}
+\renewcommand*{\whatsappsocialsymbol} {{\color{whatsapp}\small\faWhatsapp}~}
+\renewcommand*{\discordsocialsymbol} {{\color{discord}\small\faDiscord}~}
+\renewcommand*{\twitchsocialsymbol} {{\color{twitch}\small\faTwitch}~}
+\renewcommand*{\youtubesocialsymbol} {{\color{youtube}\small\faYoutube}~}
+\renewcommand*{\tiktoksocialsymbol} {{\color{tiktok}\small\faTiktok}~}
+\renewcommand*{\instagramsocialsymbol} {{\color{instagram}\small\faInstagram}~}
+\renewcommand*{\soundcloudsocialsymbol} {{\color{soundcloud}\small\faSoundcloud}~}
+\renewcommand*{\steamsocialsymbol} {{\color{steam}\small\faSteam}~}
+\renewcommand*{\xboxsocialsymbol} {{\color{xbox}\small\faXbox}~}
+\renewcommand*{\playstationsocialsymbol} {{\color{playstation}\small\faPlaystation}~}
+\renewcommand*{\battlenetsocialsymbol} {{\color{battlenet}\small\faBattleNet}~}
%\renewcommand*{\signalsocialsymbol} {}
%\renewcommand*{\matrixsocialsymbol} {}
-\renewcommand*{\bornsymbol} {{\small\faAsterisk}~} % alternative: \faBabyCarriage
+% \renewcommand*{\arxivsocialsymbol} {{\color{arxiv}{\small\faarXiv}}~}
+% \renewcommand*{\inspiresocialsymbol} {{\color{inspire}{\small\faInspire}}~}
+\renewcommand*{\bornsymbol} {{\color{born}\small\faAsterisk}~} % alternative: \faBabyCarriage
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncviconsletters.sty b/macros/latex/contrib/moderncv/moderncviconsletters.sty
index 832e21035a..2dc6386d51 100644
--- a/macros/latex/contrib/moderncv/moderncviconsletters.sty
+++ b/macros/latex/contrib/moderncv/moderncviconsletters.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconsletters.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncviconsletters}[2022-02-21 v2.3.1 modern curriculum vitae icons: letter]
+\ProvidesPackage{moderncviconsletters}[2024-07-18 v2.4.1 modern curriculum vitae icons: letter]
%-------------------------------------------------------------------------------
% symbols definition
@@ -31,6 +31,7 @@
\renewcommand*{\linkedinsocialsymbol} {\textbf{in}~}
\renewcommand*{\xingsocialsymbol} {\textbf{xi}~}
\renewcommand*{\twittersocialsymbol} {\textbf{tw}~}
+\renewcommand*{\mastodonsocialsymbol} {\textbf{ms}~}
\renewcommand*{\githubsocialsymbol} {\textbf{gh}~}
\renewcommand*{\gitlabsocialsymbol} {\textbf{gl}~}
\renewcommand*{\stackoverflowsocialsymbol}{\textbf{so}~}
@@ -45,6 +46,18 @@
\renewcommand*{\matrixsocialsymbol} {\textbf{ma}~}
\renewcommand*{\googlescholarsocialsymbol}{\textbf{gs}~}
\renewcommand*{\bornsymbol} {\textbf{B}~}
+\renewcommand*{\codebergsocialsymbol} {\textbf{cb}~}
+\renewcommand*{\twitchsocialsymbol} {\textbf{ttv}~}
+\renewcommand*{\youtubesocialsymbol} {\textbf{yt}~}
+\renewcommand*{\tiktoksocialsymbol} {\textbf{tok}~}
+\renewcommand*{\instagramsocialsymbol} {\textbf{insta}~}
+\renewcommand*{\soundcloudsocialsymbol} {\textbf{sc}~}
+\renewcommand*{\steamsocialsymbol} {\textbf{st}~}
+\renewcommand*{\xboxsocialsymbol} {\textbf{xb}~}
+\renewcommand*{\playstationsocialsymbol} {\textbf{psn}~}
+\renewcommand*{\battlenetsocialsymbol} {\textbf{bn}~}
+\renewcommand*{\arxivsocialsymbol} {\textbf{arx}~}
+\renewcommand*{\inspiresocialsymbol} {\textbf{ins}~}
\renewcommand*{\listitemsymbol} {\labelitemi~}
diff --git a/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty b/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty
index 0a1d8f107d..2dbc71011e 100644
--- a/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty
+++ b/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconsmarvosym.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncviconsmarvosym}[2022-02-21 v2.3.1 modern curriculum vitae icons: marvosym]
+\ProvidesPackage{moderncviconsmarvosym}[2024-07-18 v2.4.1 modern curriculum vitae icons: marvosym]
%-------------------------------------------------------------------------------
% all symbols described in moderncv.cls
diff --git a/macros/latex/contrib/moderncv/moderncviconssymbols.sty b/macros/latex/contrib/moderncv/moderncviconssymbols.sty
index 256304380e..b6c1fb7b1d 100644
--- a/macros/latex/contrib/moderncv/moderncviconssymbols.sty
+++ b/macros/latex/contrib/moderncv/moderncviconssymbols.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconssymbols.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -17,7 +17,7 @@
\RequirePackage{moderncviconsawesome}
\RequirePackage{moderncviconsacademic}
\else
- \ClassWarningNoLine{moderncv}{"academicons requires xetex/luatex to work. Using alternatives."}
+ \typeout{^^Jmoderncv: academicons requires XeTeX/LuaTeX to work. Using alternatives.^^J}
\ifpdftex
\RequirePackage{moderncviconsawesome}
\else
diff --git a/macros/latex/contrib/moderncv/moderncviconstikz.sty b/macros/latex/contrib/moderncv/moderncviconstikz.sty
index c3e9f40b0d..e1a0248924 100644
--- a/macros/latex/contrib/moderncv/moderncviconstikz.sty
+++ b/macros/latex/contrib/moderncv/moderncviconstikz.sty
@@ -1,5 +1,5 @@
%% start of file `moderncviconstikz.sty'.
-%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2013-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncviconstikz}[2022-02-21 v2.3.1 modern curriculum vitae and letter icons: tickz]
+\ProvidesPackage{moderncviconstikz}[2024-07-18 v2.4.1 modern curriculum vitae and letter icons: tickz]
%-------------------------------------------------------------------------------
@@ -218,7 +218,7 @@
\protect\begin{tikzpicture}[x=0.11em, y=0.11em, xscale=0.015, yscale=-0.015, inner sep=0pt, outer sep=0pt]
\protect\begin{scope}[shift={(507,387)}]
\protect\path[fill=color2,line width=0.057pt]
- (105.2000,24.9000) .. controls (102.1000,16.0000) and (89.5000,16.0000) ..
+ (105.2000,24.9000) .. controls (102.1000,16.0000) and (89.5000,16.0000) ..
(86.3000,24.9000) -- (29.8000,199.7000) -- (161.7000,199.7000) .. controls
(161.7000,199.7000) and (105.2000,24.9000) .. (105.2000,24.9000) -- cycle
(0.9000,287.7000) .. controls (-1.7000,295.7000) and (1.2000,304.6000) ..
@@ -327,7 +327,7 @@
\protect\raisebox{-0.12em}{
\protect\begin{tikzpicture}[y=1.8pt, x=1.8pt, yscale=-0.15, xscale=0.15, inner sep=0pt, outer sep=0pt]
\protect\begin{scope}[shift={(507,387)}]
- \protect\path[fill=color2]
+ \protect\path[fill=color2]
(0.9360,0.7320) .. controls (0.9360,10.9053) and (0.9360,21.0787) ..
(0.9360,31.2520) .. controls (1.6673,31.2520) and (2.3987,31.2520) ..
(3.1300,31.2520) .. controls (3.3452,32.0075) and (2.8778,32.0803) ..
@@ -374,7 +374,7 @@
\protect\raisebox{-0.12em}{
\protect\begin{tikzpicture}[y=0.1pt, x=0.1pt, yscale=-0.13, xscale=0.13, inner sep=0pt, outer sep=0pt]
\protect\begin{scope}[shift={(507,387)}]
- \protect\path[fill=color2]
+ \protect\path[fill=color2]
(430.1000,180.9000) -- (437.8000,211.9000) .. controls (407.6000,219.3000)
and (378.7000,231.3000) .. (352.1000,247.3000) -- (335.7000,220.0000) ..
controls (365.0000,202.3000) and (396.9000,189.1000) .. (430.1000,180.9000) --
@@ -439,6 +439,25 @@
~}
}{}\par
+\ifdefempty{\codebergsocialsymbol} {
+ \renewcommand*{\codebergsocialsymbol} {
+ \protect\raisebox{-0.12em}{
+ \protect\begin{tikzpicture}[y=0.8pt, x=0.8pt, yscale=-1.0, xscale=1.0, inner sep=0pt, outer sep=0pt]
+ \protect\begin{scope}[shift={(507, 387)}]
+ \protect\path[scale=0.265, opacity=0.500, line cap=butt, line join=miter, line width=0.779pt, miter limit=2.00]
+ (11249.8942,-1872.9296)arc(269.285:169.240:0.201313 and 0.150) --
+ (11258.5852,-1839.4433)arc(66.699:32.084:23.067) --
+ (11250.0698,-1872.8557)arc(329.460:269.346:0.201313 and 0.150) -- cycle;
+
+ \protect\path[scale=0.265, fill=color2, line width=0.426pt]
+ (11249.3743,-1883.6959)arc(269.785:180.000:23.067)arc(180.001:147.920:23.067)
+ -- (11249.1480,-1873.2412)arc(209.929:330.071:0.360097 and 0.269) --
+ (11269.0053,-1848.3766)arc(32.082:-0.002:23.067)arc(360.000:270.000:23.067)arc(270.108:269.892:23.067)
+ -- cycle;
+ \protect\end{scope}
+ \protect\end{tikzpicture}}
+ ~}
+}{}\par
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvskillmatrix.sty b/macros/latex/contrib/moderncv/moderncvskillmatrix.sty
index 68b8db9a0a..9f03be117a 100644
--- a/macros/latex/contrib/moderncv/moderncvskillmatrix.sty
+++ b/macros/latex/contrib/moderncv/moderncvskillmatrix.sty
@@ -2,30 +2,30 @@
%% Copyright 2021 David Seus (cryptointerest@posteo.de).
%
% This package provides a skill matrix template for the moderncv package.
-% Some recruiting firms require applicants to rate their skills, computer
-% skills, management tools, or similar in a table involving a graphical
-% illustration of their skill level. This package implements this idea
-% and provides the following commands to use within the moderncv
+% Some recruiting firms require applicants to rate their skills, computer
+% skills, management tools, or similar in a table involving a graphical
+% illustration of their skill level. This package implements this idea
+% and provides the following commands to use within the moderncv
% package:
-%
-%
+%
+%
% PUBLIC COMMANDS
% \cvskill{<1-5>}
% Illustrate skill level with little colored boxes.
-% By default five skill levels are predefined.
-%
-% Input:
+% By default five skill levels are predefined.
+%
+% Input:
% input_1: integer between 0 and 5
-%
-% Example usages:
+%
+% Example usages:
% \cvskill{3}
-%
-%
+%
+%
% \cvskilllegend[*][<post_padding>][<first_level>][<second_level>][<third_level>][<fourth_level>][<fifth_level>]{<name>}
% Print legend table explaining the meaning of \cvskill{1}...\cvskill{5}.
-%
+%
% Input:
-% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
+% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string describing meaning of \cvskill{1}, default: <basic knowledge>
@@ -34,25 +34,25 @@
% input_5 (optional): string describing meaning of \cvskill{4}, default: <deepened expert knowledge>
% input_6 (optional): string describing meaning of \cvskill{5}, default: <expert/guru>
% input_7: string giving a name to the legend, default: <>
-%
+%
% Example usages:
% \cvskilllegend{} print default legend
% \cvskilllegend[0.5em]{Legend} print default legend, but adjust post padding and display the word ``Legend''.
% \cvskilllegend*[0.2em][Grundkenntnisse][Grundkenntnisse und eigene Erfahrung in Projekten][Umfangreiche Erfahrung in Projekten][Vertiefte Expertenkenntnisse][Experte/Guru]{Legende} Fully adjust legend to German example and including dashed lines
-%
+%
% Note:
% -The width of the columns can be adjusted by the \setcvskilllegendcolumns, see \setcvskilllegendcolumns
-% -The design of the table is such that the <second_level> entry stands in the first column but
+% -The design of the table is such that the <second_level> entry stands in the first column but
% occupies rows two and three. This has been done to accomodate english and german defaults.
% An alternative is provided by \cvskillplainlegend
-%
-%
+%
+%
% \cvskillplainlegend[*][<post_padding>][<first_level>][<second_level>][<third_level>][<fourth_level>][<fifth_level>]{<name>}
% Print alternative legend table explaining the meaning of \cvskill{1}...\cvskill{5}.
% In this legend, the first three skill levels are in one column
-%
+%
% Input:
-% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
+% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string describing meaning of \cvskill{1}, default: <basic knowledge>
@@ -61,40 +61,40 @@
% input_5 (optional): string describing meaning of \cvskill{4}, default: <deepened expert knowledge>
% input_6 (optional): string describing meaning of \cvskill{5}, default: <expert/guru>
% input_7: string giving a name to the legend, default: <>
-%
+%
% Example usages:
% \cvskillplainlegend{} print default legend
% \cvskillplainlegend[0.5em]{Legend} print default legend, but adjust post padding and display the word ``Legend''.
% \cvskillplainlegend*[0.2em][Grundkenntnisse][Grundkenntnisse und eigene Erfahrung in Projekten][Umfangreiche Erfahrung in Projekten][Vertiefte Expertenkenntnisse][Experte/Guru]{Legende} Fully adjust legend to German example and including dashed lines
-%
+%
% Note:
% -The width of the columns can be adjusted by the \setcvskilllegendcolumns, see \setcvskilllegendcolumns
-%
-%
+%
+%
% \cvskillhead[<post_padding>][<Level>][<Skill>][<Years>][<Comment>]%
% add skill matrix line acting as header explaining the meaning of columns.
-%
+%
% Input:
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string naming the level column (2nd column), default: <Level>
% input_3 (optional): string naming the skill column (3nd column), default: <Skill>
% input_4 (optional): string naming the experience-in-years column (4th column), default: <Years>
% input_5 (optional): string naming the comment column (5th column), default: <Comment>
-%
+%
% Example usages:
% \cvskillhead print default head.
% \cvskillhead[0.5em] print default head, but adjust post padding.
% \cvskillhead[0.25em][Level][F\"ahigkeit][Jahre][Bemerkung] Fully adjust head to German example
-%
-% Note:
+%
+% Note:
% - The width of the columns can be adjusted by the \setcvskillcolumns command, see \setcvskillcolumns.
-%
-%
+%
+%
% \cvskillentry[*][<post_padding>]{<skill_cathegory>}{<0-5>}{<skill_name>}{<years_of_experience>}{<comment>}%
% add cvskill matrix row.
-%
+%
% Input:
-% asterix (optional): include horizontal (dashed) line above the entered line. This behaviour depends on the body style.
+% asterix (optional): include horizontal (dashed) line above the entered line. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2: string, naming skill cathegory, default: <>
@@ -102,98 +102,98 @@
% input_4: string, naming the skill, default: <>
% input_5: positive real number, stating the number of years of experience with this skill , default: <>
% input_6: string, explaining details w.r.t. that particual skill default: <>
-%
+%
% Example usages:
% \cvskillentry*{Language:}{3}{Python}{2}{I have done a million projects with Python}
% \cvskillentry{}{2}{Lilypond}{14}{So much sheet music! Man I'm the best!}
% \cvskillentry{}{3}{\LaTeX}{14}{Clearly I rock at \LaTeX}
% \cvskillentry*[1.5em]{OS:}{3}{Linux}{2}{I only use Archlinux}
-%
-% Note:
+%
+% Note:
% - The width of the columns can be adjusted by the \setcvskillcolumns command, see \setcvskillcolumns.
-%
-%
+%
+%
% \setcvskillcolumns[<width>][<factor>][<exp_width>]
% adjust column width of skill table
-%
-% The \cvskillentry command comes with default FIXED width definitions of the kill matrix for the columns
-% based on the author's own skill matrix. This is necessary to ensure that the entries are nicely aligned
+%
+% The \cvskillentry command comes with default FIXED width definitions of the kill matrix for the columns
+% based on the author's own skill matrix. This is necessary to ensure that the entries are nicely aligned
% and actually yield a decent looking table. The defaults depend on the style used and are chosen reasonably.
-% However, depending on the user input and the style that is used some of the columns might need adjustments.
-% The \setcvskillcolumns command provides means to influence the width of the first, the third and the fourth
+% However, depending on the user input and the style that is used some of the columns might need adjustments.
+% The \setcvskillcolumns command provides means to influence the width of the first, the third and the fourth
% skill matrix column. The second column containg the output of \cvskill remains fixed width. The last column,
% the comment column gets recalculated according to the setting of the other columns.
-%
+%
% Input
% Input_1 (optional): width smaller than \textwidth, default <\skillmatrix@hintscolumnwidth>
-% Input_2 (optional): float between 0 and 1 adjusting how much percent of the table width without
+% Input_2 (optional): float between 0 and 1 adjusting how much percent of the table width without
% the first column is used columns two, three and four. Through this parameter
% the width of the 3rd column (skill name) can be adjusted, default <\skillmatrix@columnwidth>
-% Input_3 (optional): width smaller than \textwidth, setting the width of the 4th column
+% Input_3 (optional): width smaller than \textwidth, setting the width of the 4th column
% (Years of experience), default <\cvskill@experiencewidth>
-%
+%
% Example usage
% \setcvskillcolumns[5em][][]% adjust first column. Same as \setcvskillcolumns[5em]
% \setcvskillcolumns[][0.45][]% adjust third (skill) column. Same as \setcvskillcolumns[][0.45]
% \setcvskillcolumns[][][\widthof{``Year''}]% adjust fourth (years) column.
-% \setcvskillcolumns[\widthof{``Language''}][0.48][]% adjust 1st and 3rd columns. Same as \setcvskillcolumns[\widthof{``Language''}][0.45]
+% \setcvskillcolumns[\widthof{``Language''}][0.48][]% adjust 1st and 3rd columns. Same as \setcvskillcolumns[\widthof{``Language''}][0.45]
% \setcvskillcolumns[\widthof{``Management Tools''}][0.6][3em]% ajust all at once.
-%
+%
% Note
% - For the styles 'classic' and 'casual' the first column is set to hintscolumnwidth such that
-% it aligns with the rest of the entries. A readjustment of the first column should therefor
-% be avoided. It is recomended to only use \setcvskillcolumns in the form of
+% it aligns with the rest of the entries. A readjustment of the first column should therefor
+% be avoided. It is recomended to only use \setcvskillcolumns in the form of
% \setcvskillcolumns[][<factor>][<width>], thereby leaving the defaults in place for the first column.
-%
-%
+%
+%
% \setcvskilllegendcolumns[<width>][<factor>]
% adjust column width of legend
-%
-% The \cvskilllegend command comes with default FIXED width definitions for the columns of the legend matrix
-% such that the default english and german examples look good.
-% However, depending on the user input (translation) and the style that is used some adjustment might be needed.
-% The \setcvskilllegendcolumns command provides means to influence all columns except the ones containing
+%
+% The \cvskilllegend command comes with default FIXED width definitions for the columns of the legend matrix
+% such that the default english and german examples look good.
+% However, depending on the user input (translation) and the style that is used some adjustment might be needed.
+% The \setcvskilllegendcolumns command provides means to influence all columns except the ones containing
% \cvskill commands. The second column containg the output of \cvskill remains fixed width. The last column,
% the comment column gets recalculated according to the setting of the other columns.
-%
+%
% Input
-% Input_1 (optional): length smaller than \textwidth influencing the width of the first column
-% where depending on the style the legend_string gets printed. In case the
-% string is left empty adjusting this width allows moving the legend horizontally.
+% Input_1 (optional): length smaller than \textwidth influencing the width of the first column
+% where depending on the style the legend_string gets printed. In case the
+% string is left empty adjusting this width allows moving the legend horizontally.
% Default <\skilllegend@hintscolumnwidth>
-% Input_2 (optional): float between 0 and 1 influencing the width of the left legend descritor column,
-% aka \cvskilllegend@leftdescriptorwidth. The desriptor column on the right,
+% Input_2 (optional): float between 0 and 1 influencing the width of the left legend descritor column,
+% aka \cvskilllegend@leftdescriptorwidth. The desriptor column on the right,
% \cvskilllegend@rightdescriptorwidth is influenced by the factor 1-<factor>.
% Default <\skilllegend@leftdesriptorfactor>
-%
+%
% Example usage
% \setcvskilllegendcolumns[][0.45]%% adjust left desriptor column.
% \setcvskilllegendcolumns[\widthof{``Legend''}][0.45]% adjust both left descriptor column and string column
-%
+%
% Note
-% - Due to implementation of \cvskilllegend for style 'fancy' (moderncvbodyv)
+% - Due to implementation of \cvskilllegend for style 'fancy' (moderncvbodyv)
% the first optional variable has no effect in this case.
% - For the styles 'classic' and 'casual' the first column is set to hintscolumnwidth such that
-% it aligns with the rest of the entries. A readjustment of the first column should therefor
-% be avoided. It is recomended to only use \cvskilllegend in the form of
+% it aligns with the rest of the entries. A readjustment of the first column should therefor
+% be avoided. It is recomended to only use \cvskilllegend in the form of
% \cvskilllegend[][<factor>], thereby leaving the defaults in place for the first column.
% - For style 'banking' the first column is set to align with the rest of the \cvskillentry entries
-% Therefor adjusting the first column can be used to widen the table while moving it around. If no
+% Therefor adjusting the first column can be used to widen the table while moving it around. If no
% legend string is used, setting \cvskilllegend[0em] maximises the real enstate for the legend.
-%
-%
+%
+%
% PRIVATE COMMANDS
-%
+%
% \recompute@cvskillmatrix@lengths
-% compute all lengths necessary for the skill matrix depending on
+% compute all lengths necessary for the skill matrix depending on
% the moderncv style (moderncvbody)
-%
+%
% Input: none
-%
+%
% Example usage (only internally in moderncvbody<i-v>.sty)
-% \recompute@cvskillmatrix@lengths
-%
-%
+% \recompute@cvskillmatrix@lengths
+%
+%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.
@@ -203,10 +203,10 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvskillmatrix}[2022-02-21 v2.3.1 modern curriculum vitae and letter skill matrix]
+\ProvidesPackage{moderncvskillmatrix}[2024-07-18 v2.4.1 modern curriculum vitae and letter skill matrix]
-% The definitions need to be adjusted depending on which moderncvbody<i-v>.sty style is usde.
-% body type options: "moderncvbodyi" (default), "moderncvbodyii", "moderncvbodyiii", "moderncvbodyiv" or "moderncvbodyv"
+% The definitions need to be adjusted depending on which moderncvbody<i-v>.sty style is usde.
+% body type options: "moderncvbodyi" (default), "moderncvbodyii", "moderncvbodyiii", "moderncvbodyiv" or "moderncvbodyv"
\@initializeif{\if@moderncvbodyi}\@moderncvbodyifalse
\DeclareOption{moderncvbodyi}{\@moderncvbodyitrue\@moderncvbodyiifalse\@moderncvbodyiiifalse\@moderncvbodyivfalse\@moderncvbodyvfalse}
\@initializeif{\if@moderncvbodyii}\@moderncvbodyiifalse % this option is added in case moderncvbodyii gets implemented standalone
@@ -218,6 +218,10 @@
\@initializeif{\if@moderncvbodyv}\@moderncvbodyvfalse
\DeclareOption{moderncvbodyv}{\@moderncvbodyifalse\@moderncvbodyiifalse\@moderncvbodyiiifalse\@moderncvbodyivfalse\@moderncvbodyvtrue}
+% If option `circle` is specified, use circles instead of small rectangles for rating skills
+\@initializeif{\if@cvskillcircle}\@cvskillcirclefalse
+\DeclareOption{circle}{\@cvskillcircletrue}
+
\DeclareOption*{}% avoid choking on unknown options
\ExecuteOptions{moderncvbodyi}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
@@ -239,23 +243,29 @@
% %-------------------------------------------------------------------------------
% The code for the Skilllevel illustration with the little boxes.
% This is idea stolen from the limecv package, see https://github.com/opieters/limecv.git
-\@initializelength{\cvSkill@RectangleSize}
-\setlength{\cvSkill@RectangleSize}{1.2ex}
+\@initializelength{\cvSkill@ShapeSize}
+\if@cvskillcircle%
+ \setlength{\cvSkill@ShapeSize}{.7ex}%
+ \def\cvSkill@Shape#1{\tikz\filldraw[#1] (0, 0) circle (\cvSkill@ShapeSize);}
+\else
+ \setlength{\cvSkill@ShapeSize}{1.2ex}
+ \def\cvSkill@Shape#1{\tikz\filldraw[#1] (0, 0) rectangle (\cvSkill@ShapeSize, \cvSkill@ShapeSize);}
+\fi
\newcount\my@repeat@count
\DeclareDocumentCommand{\cvskill}{m}{%
% Illustrate skill level with little colored boxes.
-% By default five skill levels are predefined.
-%
-% Input:
+% By default five skill levels are predefined.
+%
+% Input:
% integer between 0 and 5
-% Example usage:
+% Example usage:
% \cvskill{3}
\begingroup
\my@repeat@count=\z@
- \@whilenum\my@repeat@count<#1\do{\tikz\filldraw[color1] (0, 0) rectangle (\cvSkill@RectangleSize, \cvSkill@RectangleSize);\advance%
+ \@whilenum\my@repeat@count<#1\do{\cvSkill@Shape{skillmatrixfullcolor}\advance%
\my@repeat@count\@ne\,}%
\my@repeat@count=\numexpr5-\z@\relax
- \@whilenum\my@repeat@count>#1\do{\tikz\filldraw[color2!30] (0, 0) rectangle (\cvSkill@RectangleSize, \cvSkill@RectangleSize);\advance%
+ \@whilenum\my@repeat@count>#1\do{\cvSkill@Shape{skillmatrixemptycolor}\advance%
\my@repeat@count\m@ne\,}%
\endgroup
}% end \cvskill
@@ -279,10 +289,10 @@
\@initializelength{\skilllegend@padding}
\@initializelength{\skilllegend@bodylength}
-% \separatorrulewidth is defined in moderncvbodyv.sty and we need to
+% \separatorrulewidth is defined in moderncvbodyv.sty and we need to
% define it to not throw an error in the other cases
\if@moderncvbodyv%
-%
+%
\else%
\@initializelength{\separatorrulewidth}
\setlength{\separatorrulewidth}{1ex}
@@ -292,13 +302,13 @@
%% DEFINITION \recompute@cvskillmatrix@lengths
% declare the command \recompute@cvskillmatrix@lengths empty
\DeclareDocumentCommand{\recompute@cvskillmatrix@lengths}{}{}%
-% compute all lengths necessary for the skill matrix depending on
+% compute all lengths necessary for the skill matrix depending on
% the moderncv style (moderncvbody)
-%
+%
% Input: none
-%
+%
% Example usage (only internally in moderncvbody<i-v>.sty)
-% \recompute@cvskillmatrix@lengths
+% \recompute@cvskillmatrix@lengths
% Definition of \recompute@cvskillmatrix@lengths for moderncvbodyi
\if@moderncvbodyi%
@@ -332,7 +342,7 @@
\setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}%
\setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-3\skillmatrix@padding}%
% lengths and definitions needed for the legends
- % note that \skillmatrix@padding also affects the appearance of legends
+ % note that \skillmatrix@padding also affects the appearance of legends
\setlength{\skilllegend@padding}{0.25ex}%
\setlength{\skilllegend@hintscolumnwidth}{\skillmatrix@hintscolumnwidth}%
\setlength{\skilllegend@bodylength}{\skillmatrix@bodylength}%
@@ -352,7 +362,7 @@
\setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}
\setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-3\skillmatrix@padding}%
% lengths and definitions needed for the legends
- % note that \skillmatrix@padding also affects the appearance of legends
+ % note that \skillmatrix@padding also affects the appearance of legends
\setlength{\skilllegend@padding}{0.25ex}
\setlength{\skilllegend@hintscolumnwidth}{0ex}%\skillmatrix@hintscolumnwidth
\setlength{\skilllegend@bodylength}{\maincolumnwidth}
@@ -371,7 +381,7 @@
\setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}%
\setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-3\skillmatrix@padding}%
% lengths and definitions needed for the legends
- % note that \skillmatrix@padding also affects the appearance of legends
+ % note that \skillmatrix@padding also affects the appearance of legends
\setlength{\skilllegend@padding}{0.25ex}%
\setlength{\skilllegend@hintscolumnwidth}{\skillmatrix@hintscolumnwidth}%
\setlength{\skilllegend@bodylength}{\maincolumnwidth}%
@@ -385,43 +395,43 @@
% \setcvskillcolumns[<width>][<factor>][<exp_width>]
\DeclareDocumentCommand{\setcvskillcolumns}{+O{\skillmatrix@hintscolumnwidth} +O{\skillmatrix@columnwidth} +O{\cvskill@experiencewidth}}{%
% adjust column width of skill table
-%
-% The \cvskillentry command comes with default FIXED width definitions of the kill matrix for the columns
-% based on the author's own skill matrix. This is necessary to ensure that the entries are nicely aligned
+%
+% The \cvskillentry command comes with default FIXED width definitions of the kill matrix for the columns
+% based on the author's own skill matrix. This is necessary to ensure that the entries are nicely aligned
% and actually yield a decent looking table. The defaults depend on the style used and are chosen reasonably.
-% However, depending on the user input and the style that is used some of the columns might need adjustments.
-% The \setcvskillcolumns command provides means to influence the width of the first, the third and the fourth
+% However, depending on the user input and the style that is used some of the columns might need adjustments.
+% The \setcvskillcolumns command provides means to influence the width of the first, the third and the fourth
% skill matrix column. The second column containg the output of \cvskill remains fixed width. The last column,
% the comment column gets recalculated according to the setting of the other columns.
-%
+%
% Input
% Input_1 (optional): width smaller than \textwidth, default <\skillmatrix@hintscolumnwidth>
-% Input_2 (optional): float between 0 and 1 adjusting how much percent of the table width without
+% Input_2 (optional): float between 0 and 1 adjusting how much percent of the table width without
% the first column is used columns two, three and four. Through this parameter
% the width of the 3rd column (skill name) can be adjusted, default <\skillmatrix@columnwidth>
-% Input_3 (optional): width smaller than \textwidth, setting the width of the 4th column
+% Input_3 (optional): width smaller than \textwidth, setting the width of the 4th column
% (Years of experience), default <\cvskill@experiencewidth>
-%
+%
% Example usage
% \setcvskillcolumns[5em][][]% adjust first column. Same as \setcvskillcolumns[5em]
% \setcvskillcolumns[][0.45][]% adjust third (skill) column. Same as \setcvskillcolumns[][0.45]
% \setcvskillcolumns[][][\widthof{``Year''}]% adjust fourth (years) column.
-% \setcvskillcolumns[\widthof{``Language''}][0.48][]% adjust 1st and 3rd columns. Same as \setcvskillcolumns[\widthof{``Language''}][0.45]
+% \setcvskillcolumns[\widthof{``Language''}][0.48][]% adjust 1st and 3rd columns. Same as \setcvskillcolumns[\widthof{``Language''}][0.45]
% \setcvskillcolumns[\widthof{``Management Tools''}][0.6][3em]% ajust all at once.
-%
+%
% Note
% - For the styles 'classic' and 'casual' the first column is set to hintscolumnwidth such that
-% it aligns with the rest of the entries. A readjustment of the first column should therefor
-% be avoided. It is recomended to only use \setcvskillcolumns in the form of
+% it aligns with the rest of the entries. A readjustment of the first column should therefor
+% be avoided. It is recomended to only use \setcvskillcolumns in the form of
% \setcvskillcolumns[][<factor>][<width>], thereby leaving the defaults in place for the first column.
-%
+%
\def\arg@new@hintscolumnwidth{#1}% <-- all these terminal % signs are necessary for the fancy style to not show weird spaces!!!
- \def\arg@new@bodyLengthFactor{#2}%
- \def\arg@new@experienceWidth{#3}%
- % Check for empty arguments. Defaults are given. Thus a call of \setcvskillcolumns
+ \def\arg@new@bodyLengthFactor{#2}%
+ \def\arg@new@experienceWidth{#3}%
+ % Check for empty arguments. Defaults are given. Thus a call of \setcvskillcolumns
% without any arguments leads to nonempty arguments \arg@new@hintscolumnwidth and
- % \def\arg@new@bodyLengthFactor{#2}. However, we need to take care of calls like
- % \setcvskillcolumns[], \setcvskillcolumns[][], \setcvskillcolumns[][][] or even
+ % \def\arg@new@bodyLengthFactor{#2}. However, we need to take care of calls like
+ % \setcvskillcolumns[], \setcvskillcolumns[][], \setcvskillcolumns[][][] or even
% \setcvskillcolumns[<somelength>][], \setcvskillcolumns[][<somefactor>] \setcvskillcolumns[][][<length>]
\ifdefempty{\arg@new@hintscolumnwidth}{%
% Case \setcvskillcolumns[], \setcvskillcolumns[][] or \setcvskillcolumns[][<somefactor>]
@@ -445,13 +455,13 @@
% \cvskill@descriptorwidth accordingly
\setlength{\cvskill@experiencewidth}{\arg@new@experienceWidth}%
\setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}%
- }%
+ }%
\setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}%
\setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-3\skillmatrix@padding}%
}%
% Case \setcvskillcolumns[] nothing needs to be done here recalculate lengths affected by the change
- }{%
- % Case \setcvskillcolumns, \setcvskillcolumns[<width>], \setcvskillcolumns[<width>][]
+ }{%
+ % Case \setcvskillcolumns, \setcvskillcolumns[<width>], \setcvskillcolumns[<width>][]
% or \setcvskillcolumns[<width>][<somefactor>]
\setlength{\skillmatrix@hintscolumnwidth}{\arg@new@hintscolumnwidth}%
\setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\separatorcolumnwidth}%
@@ -483,41 +493,41 @@
\setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-3\skillmatrix@padding}%
}%
}%
-%
+%
% \setcvskilllegendcolumns[<width>][<factor>]
\DeclareDocumentCommand{\setcvskilllegendcolumns}{+O{\skilllegend@hintscolumnwidth} +O{\skilllegend@leftdesriptorfactor}}{%
% adjust column width of legend
-%
-% The \cvskilllegend command comes with default FIXED width definitions for the columns of the legend matrix
-% such that the default english and german examples look good.
-% However, depending on the user input (translation) and the style that is used some adjustment might be needed.
-% The \setcvskilllegendcolumns command provides means to influence all columns except the ones containing
+%
+% The \cvskilllegend command comes with default FIXED width definitions for the columns of the legend matrix
+% such that the default english and german examples look good.
+% However, depending on the user input (translation) and the style that is used some adjustment might be needed.
+% The \setcvskilllegendcolumns command provides means to influence all columns except the ones containing
% \cvskill commands. The second column containg the output of \cvskill remains fixed width. The last column,
% the comment column gets recalculated according to the setting of the other columns.
-%
+%
% Input
-% Input_1 (optional): length smaller than \textwidth influencing the width of the first column
-% where depending on the style the legend_string gets printed. In case the
-% string is left empty adjusting this width allows moving the legend horizontally.
+% Input_1 (optional): length smaller than \textwidth influencing the width of the first column
+% where depending on the style the legend_string gets printed. In case the
+% string is left empty adjusting this width allows moving the legend horizontally.
% Default <\skilllegend@hintscolumnwidth>
-% Input_2 (optional): float between 0 and 1 influencing the width of the left legend descritor column,
-% aka \cvskilllegend@leftdescriptorwidth. The desriptor column on the right,
+% Input_2 (optional): float between 0 and 1 influencing the width of the left legend descritor column,
+% aka \cvskilllegend@leftdescriptorwidth. The desriptor column on the right,
% \cvskilllegend@rightdescriptorwidth is influenced by the factor 1-<factor>.
% Default <\skilllegend@leftdesriptorfactor>
-%
+%
% Example usage
% \setcvskilllegendcolumns[][0.45]%% adjust left desriptor column.
% \setcvskilllegendcolumns[\widthof{``Legend''}][0.45]% adjust both left descriptor column and string column
-%
+%
% Note
-% - Due to implementation of \cvskilllegend for style 'fancy' (moderncvbodyv)
+% - Due to implementation of \cvskilllegend for style 'fancy' (moderncvbodyv)
% the first optional variable has no effect in this case.
% - For the styles 'classic' and 'casual' the first column is set to hintscolumnwidth such that
-% it aligns with the rest of the entries. A readjustment of the first column should therefor
-% be avoided. It is recomended to only use \cvskilllegend in the form of
+% it aligns with the rest of the entries. A readjustment of the first column should therefor
+% be avoided. It is recomended to only use \cvskilllegend in the form of
% \cvskilllegend[][<factor>], thereby leaving the defaults in place for the first column.
% - For style 'banking' the first column is set to align with the rest of the \cvskillentry entries
-% Therefor adjusting the first column can be used to widen the table while moving it around. If no
+% Therefor adjusting the first column can be used to widen the table while moving it around. If no
% legend string is used, setting \cvskilllegend[0em] maximises the real enstate for the legend.
%
\def\arg@new@legend@hintscolumnwidth{#1}%
@@ -532,8 +542,8 @@
\RenewDocumentCommand{\skilllegend@leftdesriptorfactor}{}{\arg@new@legend@leftDescriptorFactor}%
}%
% % Case \setcvskilllegendcolumns[] nothing needs to be done here i.e. leave default values unaltered
- }{%
- % Case \setcvskilllegendcolumns, \setcvskilllegendcolumns[<width>], \setcvskilllegendcolumns[<width>][]
+ }{%
+ % Case \setcvskilllegendcolumns, \setcvskilllegendcolumns[<width>], \setcvskilllegendcolumns[<width>][]
% or \setcvskilllegendcolumns[<width>][<somefactor>]
\setlength{\skilllegend@hintscolumnwidth}{\arg@new@legend@hintscolumnwidth}%
\if@moderncvbodyi%
@@ -554,18 +564,18 @@
}%
}%
}%
-%
+%
% %-------------------------------------------------------------------------------
-% % \cvskilllegend
+% % \cvskilllegend
% %-------------------------------------------------------------------------------
% default legend style
% \cvskilllegend[*][<post_padding>][<first_level>][<second_level>][<third_level>][<fourth_level>][<fifth_level>]{<name>}
\NewDocumentCommand\skillLegend@FontSize{}{\scriptsize}
\DeclareDocumentCommand\cvskilllegend{s +O{} +O{} +O{} +O{} +O{} +O{} +m}{}%
% Print legend table explaining the meaning of \cvskill{1}...\cvskill{5}.
-%
+%
% Input:
-% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
+% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string describing meaning of \cvskill{1}, default: <basic knowledge>
@@ -574,15 +584,15 @@
% input_5 (optional): string describing meaning of \cvskill{4}, default: <deepened expert knowledge>
% input_6 (optional): string describing meaning of \cvskill{5}, default: <expert/guru>
% input_7: string giving a name to the legend, default: <>
-%
+%
% Example usages:
% \cvskilllegend{} print default legend
% \cvskilllegend[0.5em]{Legend} print default legend, but adjust post padding and display the word ``Legend''.
% \cvskilllegend*[0.2em][Grundkenntnisse][Grundkenntnisse und eigene Erfahrung in Projekten][Umfangreiche Erfahrung in Projekten][Vertiefte Expertenkenntnisse][Experte/Guru]{Legende} Fully adjust legend to German example and including dashed lines
-%
+%
% Note:
% -The width of the columns can be adjusted by the \setcvskilllegendcolumns, see \setcvskilllegendcolumns
-% -The design of the table is such that the <second_level> entry stands in the first column but
+% -The design of the table is such that the <second_level> entry stands in the first column but
% occupies rows two and three. This has been done to accomodate english and german defaults.
% An alternative is provided by \cvskillplainlegend
@@ -596,7 +606,7 @@
\RenewDocumentCommand\cvskilllegend{s +O{.25em} +O{\skillLegend@defaultLevelOne} +O{\skillLegend@defaultLevelTwo} +O{\skillLegend@defaultLevelThree} +O{\skillLegend@defaultLevelFour} +O{\skillLegend@defaultLevelFive} +m}{%
\IfBooleanTF#1{% if a star is given, add dashed line
\begingroup%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
% calculate descriptor widths
\setlength{\cvskilllegend@leftdescriptorwidth}{\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-3\skilllegend@padding}%
\setlength{\cvskilllegend@rightdescriptorwidth}{\skilllegend@bodylength-\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-3\skilllegend@padding}%
@@ -610,7 +620,7 @@
\raggedleft\hintstyle{#8} & \cvskill{1}& & {\skillLegend@FontSize #3} & \cvskill{3}& &{\skillLegend@FontSize #5 } \\%
%
& \cvskill{2} & & \multirow{2}{\cvskilllegend@leftdescriptorwidth}{{\skillLegend@FontSize #4}} & \cvskill{4}& & {\skillLegend@FontSize #6 } \\%
- %
+ %
& & & & \cvskill{5}& & {\skillLegend@FontSize #7 }%
\end{tabular}%
\endgroup
@@ -629,7 +639,7 @@
\raggedleft\hintstyle{#8} & \cvskill{1}\, & \,{\skillLegend@FontSize #3} & \cvskill{3}\, &\,{\skillLegend@FontSize #5 } \\%
%
& \cvskill{2}\, & \,\multirow{2}{\cvskilllegend@leftdescriptorwidth}{{\skillLegend@FontSize #4}} & \cvskill{4}\, &\,{\skillLegend@FontSize #6 } \\%
- %
+ %
& & & \cvskill{5}\, &\,{\skillLegend@FontSize #7 }%
\end{tabular}%
\endgroup%
@@ -646,11 +656,11 @@
}%
\IfBooleanTF#1{% if a star is given, add dashed line
\begingroup%
- % recalculate desrciptor widths on the fly. Allows for different padding
+ % recalculate desrciptor widths on the fly. Allows for different padding
% in the stared and nonstared case
\setlength{\cvskilllegend@leftdescriptorwidth}{\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-4\skilllegend@padding}%
\setlength{\cvskilllegend@rightdescriptorwidth}{\skilllegend@bodylength-\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-4\skilllegend@padding}%
- \arrayrulecolor{color1}
+ \arrayrulecolor{bodyrulecolor}
\begin{tabular}{@{}p{\skilllegend@hintscolumnwidth}
@{\hspace{\separatorcolumnwidth}}p{\cvskill@width}@{\hspace{\skilllegend@padding}};{.6pt/1pt}%
p{2\skilllegend@padding}%
@@ -660,13 +670,13 @@
\raggedleft\hintstyle{} & \cvskill{1} & & {\skillLegend@FontSize #3} & \cvskill{3} & & {\skillLegend@FontSize #5 } \\
%
& \cvskill{2} & & \multirow{2}{\cvskilllegend@leftdescriptorwidth}{{\skillLegend@FontSize #4}} & \cvskill{4} & &{\skillLegend@FontSize #6 } \\
- %
- & & & & \cvskill{5}& & {\skillLegend@FontSize #7 }
+ %
+ & & & & \cvskill{5}& & {\skillLegend@FontSize #7 }
\end{tabular}%
\endgroup%
\par\addvspace{#2}}{
\begingroup%
- % oddly enough, we should only need to subtract 2 paddings in the descritorwidths.
+ % oddly enough, we should only need to subtract 2 paddings in the descritorwidths.
% but while testing I got overflow of text into the margin
\setlength{\cvskilllegend@leftdescriptorwidth}{\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-4\skilllegend@padding}%
\setlength{\cvskilllegend@rightdescriptorwidth}{\skilllegend@bodylength-\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-5\skilllegend@padding}%
@@ -678,8 +688,8 @@
\raggedleft\hintstyle{} & \cvskill{1} & {\skillLegend@FontSize #3} & \cvskill{3} & {\skillLegend@FontSize #5 } \\
%
& \cvskill{2} & \multirow{2}{\cvskilllegend@leftdescriptorwidth}{{\skillLegend@FontSize #4}} & \cvskill{4} &{\skillLegend@FontSize #6 } \\
- %
- & & & \cvskill{5} & {\skillLegend@FontSize #7 }
+ %
+ & & & \cvskill{5} & {\skillLegend@FontSize #7 }
\end{tabular}%
\endgroup%
\par\addvspace{#2}
@@ -697,7 +707,7 @@
}{%
\cvitem[-0.5em]{#8}{}%
}%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\RenewDocumentCommand{\@starIndependentTabular}{}{%
\begingroup%
@@ -713,32 +723,32 @@
\@moderncvstrut{4pt}{16pt} & \cvskill{1}& {\skillLegend@FontSize #3} & \cvskill{3}& {\skillLegend@FontSize #5 }\\%
%
& \cvskill{2}& \multirow{2}{\cvskilllegend@leftdescriptorwidth}{{\skillLegend@FontSize #4}} & \cvskill{4}& {\skillLegend@FontSize #6 }\\%
- %
+ %
& & & \cvskill{5} & {\skillLegend@FontSize #7 }\\[#2]% the spacing needs to be inside the cell for the vertical rule to extend correctly
\end{tabular}%
\endgroup%
- \par\@aftersectionfalse\ignorespaces%
+ \par\@aftersectionfalse\ignorespaces%
}%
- % because of this weird style and the position of the parameter [#2], the dashed lines of the other version look bad. So no lines.
+ % because of this weird style and the position of the parameter [#2], the dashed lines of the other version look bad. So no lines.
\IfBooleanTF#1{%
\@starIndependentTabular%
- }{%
+ }{%
\@starIndependentTabular%
}%
}%
\fi
% %-------------------------------------------------------------------------------
-% % \cvskillplainlegend
+% % \cvskillplainlegend
% %-------------------------------------------------------------------------------
% alternative legend style
% \cvskillplainlegend[*][<post_padding>][<first_level>][<second_level>][<third_level>][<fourth_level>][<fifth_level>]{<name>}
\DeclareDocumentCommand\cvskillplainlegend{s +O{} +O{} +O{} +O{} +O{} +O{} +m}{}%
% Print alternative legend table explaining the meaning of \cvskill{1}...\cvskill{5}.
% In this legend, the first three skill levels are in one column
-%
+%
% Input:
-% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
+% asterix (optional): include vertical (dashed) lines. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string describing meaning of \cvskill{1}, default: <basic knowledge>
@@ -747,12 +757,12 @@
% input_5 (optional): string describing meaning of \cvskill{4}, default: <deepened expert knowledge>
% input_6 (optional): string describing meaning of \cvskill{5}, default: <expert/guru>
% input_7: string giving a name to the legend, default: <>
-%
+%
% Example usages:
% \cvskillplainlegend{} print default legend
% \cvskillplainlegend[0.5em]{Legend} print default legend, but adjust post padding and display the word ``Legend''.
% \cvskillplainlegend*[0.2em][Grundkenntnisse][Grundkenntnisse und eigene Erfahrung in Projekten][Umfangreiche Erfahrung in Projekten][Vertiefte Expertenkenntnisse][Experte/Guru]{Legende} Fully adjust legend to German example and including dashed lines
-%
+%
% Note:
% -The width of the columns can be adjusted by the \setcvskilllegendcolumns, see \setcvskilllegendcolumns
@@ -766,7 +776,7 @@
\RenewDocumentCommand\cvskillplainlegend{s +O{.25em} +O{\skillPlainLegend@defaultLevelOne} +O{\skillPlainLegend@defaultLevelTwo} +O{\skillPlainLegend@defaultLevelThree} +O{\skillPlainLegend@defaultLevelFour} +O{\skillPlainLegend@defaultLevelFive} +m}{%
\IfBooleanTF#1{% if a star is given, add dashed line
\begingroup%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
% calculate descriptor widths
\setlength{\cvskilllegend@leftdescriptorwidth}{\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-3\skilllegend@padding}%
\setlength{\cvskilllegend@rightdescriptorwidth}{\skilllegend@bodylength-\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-3\skilllegend@padding}%
@@ -780,7 +790,7 @@
\raggedleft\hintstyle{#8} & \cvskill{1}& & {\skillLegend@FontSize #3} & \cvskill{4}& &{\skillLegend@FontSize #6} \\%
%
& \cvskill{2} & & {\skillLegend@FontSize #4} & \cvskill{5}& & {\skillLegend@FontSize #7} \\%
- %
+ %
& \cvskill{3} & & {\skillLegend@FontSize #5} & & & %
\end{tabular}%
\endgroup%
@@ -799,7 +809,7 @@
\raggedleft\hintstyle{#8} & \cvskill{1} & {\skillLegend@FontSize #3} & \cvskill{4} &{\skillLegend@FontSize #6} \\%
%
& \cvskill{2} & {\skillLegend@FontSize #4} & \cvskill{5} &{\skillLegend@FontSize #7} \\%
- %
+ %
& \cvskill{3} & {\skillLegend@FontSize #5 } & & %
\end{tabular}%
\endgroup%
@@ -816,7 +826,7 @@
}%
\IfBooleanTF#1{% if a star is given, add dashed line
\begingroup%
- \arrayrulecolor{color1}
+ \arrayrulecolor{bodyrulecolor}
\setlength{\cvskilllegend@leftdescriptorwidth}{\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-6\skilllegend@padding}%
\setlength{\cvskilllegend@rightdescriptorwidth}{\skilllegend@bodylength-\skilllegend@leftdesriptorfactor\skilllegend@bodylength-\cvskill@width-\skillmatrix@padding-6\skilllegend@padding}%
\begin{tabular}{@{}p{\skilllegend@hintscolumnwidth}
@@ -828,8 +838,8 @@
\raggedleft\hintstyle{} & \cvskill{1} & & {\skillLegend@FontSize#3} & \cvskill{4} & & {\skillLegend@FontSize#6}\\%
%
& \cvskill{2} & &{\skillLegend@FontSize#4} & \cvskill{5} & &{\skillLegend@FontSize#7}\\%
- %
- & \cvskill{3} & &{\skillLegend@FontSize#5} & & &%
+ %
+ & \cvskill{3} & &{\skillLegend@FontSize#5} & & &%
\end{tabular}%
\endgroup%
\par\addvspace{#2}}{
@@ -845,7 +855,7 @@
\raggedleft\hintstyle{} & \cvskill{1} & {\skillLegend@FontSize #3} & \cvskill{4} & {\skillLegend@FontSize #6} \\
%
& \cvskill{2} & {\skillLegend@FontSize #4} & \cvskill{5} & {\skillLegend@FontSize #7} \\
- %
+ %
& \cvskill{3} & {\skillLegend@FontSize #5} & & %
\end{tabular}%
\endgroup
@@ -863,7 +873,7 @@
}{%
\cvitem[-0.5em]{#8}{}%
}%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\RenewDocumentCommand{\@starIndependentTabular}{}{%
\begingroup%
@@ -879,16 +889,16 @@
\@moderncvstrut{4pt}{16pt} & \cvskill{1} & {\skillLegend@FontSize #3} & \cvskill{4} & {\skillLegend@FontSize #6}\\%
%
& \cvskill{2} & {\skillLegend@FontSize #4} & \cvskill{5} & {\skillLegend@FontSize #7}\\%
- %
+ %
& \cvskill{3} & {\skillLegend@FontSize #5} & & \\[#2]% the spacing needs to be inside the cell for the vertical rule to extend correctly
\end{tabular}%
\endgroup%
- \par\@aftersectionfalse\ignorespaces%
+ \par\@aftersectionfalse\ignorespaces%
}%
- % because of this weird style and the position of the parameter [#2], the dashed lines of the other version look bad. So no lines.
+ % because of this weird style and the position of the parameter [#2], the dashed lines of the other version look bad. So no lines.
\IfBooleanTF#1{%
\@starIndependentTabular%
- }{%
+ }{%
\@starIndependentTabular%
}%
}%
@@ -900,20 +910,20 @@
\NewDocumentCommand\cvSkillMatrix@HeadFont{}{\normalfont}
\DeclareDocumentCommand\cvskillhead{+O{} +O{} +O{} +O{} +O{}}{}%
% add skill matrix line acting as header explaining the meaning of columns.
-%
+%
% Input:
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2 (optional): string naming the level column (2nd column), default: <Level>
% input_3 (optional): string naming the skill column (3nd column), default: <Skill>
% input_4 (optional): string naming the experience-in-years column (4th column), default: <Years>
% input_5 (optional): string naming the comment column (5th column), default: <Comment>
-%
+%
% Example usages:
% \cvskillhead print default head.
% \cvskillhead[0.5em] print default head, but adjust post padding.
% \cvskillhead[0.25em][Level][F\"ahigkeit][Jahre][Bemerkung] Fully adjust head to German example
-%
-% Note:
+%
+% Note:
% - The width of the columns can be adjusted by the \setcvskillcolumns command, see \setcvskillcolumns.
\NewDocumentCommand\skillMatrix@HeaderDefaultOne{}{Level}
@@ -924,13 +934,13 @@
\RenewDocumentCommand\cvskillhead{O{.25em} +O{\skillMatrix@HeaderDefaultOne} +O{\skillMatrix@HeaderDefaultTwo} +O{\skillMatrix@HeaderDefaultThree} +O{\skillMatrix@HeaderDefaultFour}}{%
\begingroup
\renewcommand{\arraystretch}{1.25}
- \arrayrulecolor{color1}
+ \arrayrulecolor{bodyrulecolor}
\begin{tabular}{@{}p{\skillmatrix@hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}%
p{\cvskill@width}@{\hspace{\skillmatrix@padding}}%
p{\cvskill@descriptorwidth}@{\hspace{\skillmatrix@padding}}%
p{\cvskill@experiencewidth}@{\hspace{\skillmatrix@padding}}
p{\skillmatrix@commentwidth}@{}}%
- & \centering{\cvSkillMatrix@HeadFont #2} & \centering{\cvSkillMatrix@HeadFont #3} & \centering{\cvSkillMatrix@HeadFont #4} & {\cvSkillMatrix@HeadFont #5}
+ & \centering{\cvSkillMatrix@HeadFont #2} & \centering{\cvSkillMatrix@HeadFont #3} & \centering{\cvSkillMatrix@HeadFont #4} & {\cvSkillMatrix@HeadFont #5}
\end{tabular}%
\endgroup
\par\addvspace{#1}
@@ -938,7 +948,7 @@
% Definition of \cvskillhead valid moderncvbodyv
\if@moderncvbodyv%
\RenewDocumentCommand\cvskillhead{O{.25em} +O{\skillMatrix@HeaderDefaultOne} +O{\skillMatrix@HeaderDefaultTwo} +O{\skillMatrix@HeaderDefaultThree} +O{\skillMatrix@HeaderDefaultFour}}{%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\vspace*{-\separatorrulewidth}% HACK; I don't understand where the space is coming from, nor what it's exact value is :(
\begingroup%
@@ -954,19 +964,19 @@
& & \centering{\cvSkillMatrix@HeadFont#2} & \centering{\cvSkillMatrix@HeadFont#3} & \centering{\cvSkillMatrix@HeadFont#4} & {\cvSkillMatrix@HeadFont#5} \\[#1]% the spacing needs to be inside the cell for the vertical rule to extend correctly
\end{tabular}%
\endgroup%
- \par\@aftersectionfalse\ignorespaces%
+ \par\@aftersectionfalse\ignorespaces%
}%
\fi
% %-------------------------------------------------------------------------------
-% % \cvskillentry
+% % \cvskillentry
% %-------------------------------------------------------------------------------
% \cvskillentry[*][<post_padding>]{<skill_cathegory>}{<0-5>}{<skill_name>}{<years_of_experience>}{<comment>}%
\DeclareDocumentCommand\cvskillentry{s +O{} +m +m +m +m +m}{}%
% add cvskill matrix row.
-%
+%
% Input:
-% asterix (optional): include horizontal (dashed) line above the entered line. This behaviour depends on the body style.
+% asterix (optional): include horizontal (dashed) line above the entered line. This behaviour depends on the body style.
% For the fancy style, the asterix has no meaning.
% input_1 (optional): padding length appended to the legend, default: <0.25em>
% input_2: string, naming skill cathegory, default: <>
@@ -974,14 +984,14 @@
% input_4: string, naming the skill, default: <>
% input_5: positive real number, stating the number of years of experience with this skill , default: <>
% input_6: string, explaining details w.r.t. that particual skill default: <>
-%
+%
% Example usages:
% \cvskillentry*{Language:}{3}{Python}{2}{I have done a million projects with Python}
% \cvskillentry{}{2}{Lilypond}{14}{So much sheet music! Man I'm the best!}
% \cvskillentry{}{3}{\LaTeX}{14}{Clearly I rock at \LaTeX}
% \cvskillentry*[1.5em]{OS:}{3}{Linux}{2}{I only use Archlinux}
-%
-% Note:
+%
+% Note:
% - The width of the columns can be adjusted by the \setcvskillcolumns command, see \setcvskillcolumns.
% Definition of \cvskillentry valid for moderncvbodyi, moderncvbodyii, moderncvbodyiii, moderncvbodyiv
@@ -990,7 +1000,7 @@
\IfBooleanTF{#1}{% If a star is seen a dotted line is drawn above the entry
\begingroup
\renewcommand{\arraystretch}{1.25}
- \arrayrulecolor{color1}
+ \arrayrulecolor{bodyrulecolor}
\begin{tabular}{@{}p{\skillmatrix@hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}%
p{\cvskill@width}@{\hspace{\skillmatrix@padding}}%
p{\cvskill@descriptorwidth}@{\hspace{\skillmatrix@padding}}%
@@ -1018,7 +1028,7 @@
\if@moderncvbodyv%
\DeclareDocumentCommand\@starIndependentMatrixEntry{}{}%
\RenewDocumentCommand\cvskillentry{s O{.25em} +m +m +m +m +m}{%
- \arrayrulecolor{color1}%
+ \arrayrulecolor{bodyrulecolor}%
\setlength\arrayrulewidth{\separatorrulewidth}%
\vspace*{-\separatorrulewidth}% HACK; I don't understand where the space is coming from, nor what it's exact value is :(
%test for the star * in the command
@@ -1038,13 +1048,13 @@
}%
\IfBooleanTF{#1}{% the star does not do anything here
\@starIndependentMatrixEntry%
- }{%
+ }{%
\@starIndependentMatrixEntry%
}%
\par\@aftersectionfalse\ignorespaces%
}%
\fi
-%
+%
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvstylebanking.sty b/macros/latex/contrib/moderncv/moderncvstylebanking.sty
index afc20e5399..6398480ef9 100644
--- a/macros/latex/contrib/moderncv/moderncvstylebanking.sty
+++ b/macros/latex/contrib/moderncv/moderncvstylebanking.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstylebanking.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstylebanking}[2022-02-21 v2.3.1 modern curriculum vitae and letter style scheme: banking]
+\ProvidesPackage{moderncvstylebanking}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: banking]
% body rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules"
\@initializecommand{\moderncvstylebodyoptions}{}
@@ -24,6 +24,12 @@
\DeclareOption{center} {\edef\moderncvstylebodyoptions{\moderncvstylebodyoptions,center}}
\DeclareOption{right} {\edef\moderncvstylebodyoptions{\moderncvstylebodyoptions,right}}
+% head options
+\@initializecommand{\moderncvstyleheadoptions}{}
+\@initializeif{\if@datainhead}\@datainheadtrue
+\DeclareOption{details}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,details}}
+\DeclareOption{nodetails}{\@datainheadfalse\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,nodetails}}
+
% toggle use of symbol fonts.
\@initializeif{\if@symbols}\@symbolsfalse
\DeclareOption{symbols} {\@symbolstrue}
@@ -55,19 +61,45 @@
% symbols
\if@symbols
- \moderncvicons{symbols} % use symbols
+ \moderncvicons{symbols} % use symbols
\else
\moderncvicons{letters} % do not use symbols, use letters
\fi
-
+%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color1}
+\colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{lastnamecolor!50}
+\colorlet{firstnamecolor}{lastnamecolor!60}
+\colorlet{titlecolor}{color2!85}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
%-------------------------------------------------------------------------------
% header, body & footer
%-------------------------------------------------------------------------------
-\moderncvhead{3}
+\moderncvhead[\moderncvstyleheadoptions]{3}
\moderncvbody[\moderncvstylebodyoptions]{3}
+\if@datainhead
+% if data is shown in head, do not include the footer
+\else
+ \moderncvfoot{1}
+\fi
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvstylecasual.sty b/macros/latex/contrib/moderncv/moderncvstylecasual.sty
index eba5df696e..1192c8911c 100644
--- a/macros/latex/contrib/moderncv/moderncvstylecasual.sty
+++ b/macros/latex/contrib/moderncv/moderncvstylecasual.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstylecasual.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,12 +10,18 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstylecasual}[2022-02-21 v2.3.1 modern curriculum vitae and letter style scheme: casual]
+\ProvidesPackage{moderncvstylecasual}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: casual]
% head section alignment options: "left" (default) or "right"
\@initializecommand{\moderncvstyleheadoptions}{}
\DeclareOption{left} {\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,left}}
\DeclareOption{right}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,right}}
+% head options alternate, details and no details
+\DeclareOption{alternate}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,alternate}}
+\@initializeif{\if@datainhead}\@datainheadfalse
+\DeclareOption{details}{\@datainheadtrue\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,details}}
+\DeclareOption{nodetails}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,nodetails}}
+
% toggle use of symbol fonts.
\@initializeif{\if@symbols}\@symbolsfalse
@@ -23,7 +29,7 @@
\DeclareOption{nosymbols} {\@symbolsfalse}
\DeclareOption*{}% avoid choking on unknown options
-\ExecuteOptions{right,symbols}
+\ExecuteOptions{right,symbols,nodetails}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
%-------------------------------------------------------------------------------
@@ -42,18 +48,46 @@
% symbols
\if@symbols
- \moderncvicons{symbols} % use symbols
+ \moderncvicons{symbols} % use symbols
\else
\moderncvicons{letters} % do not use symbols, use letters
\fi
+%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color2}
+\colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{lastnamecolor!50}
+\colorlet{firstnamecolor}{lastnamecolor!50}
+\colorlet{titlecolor}{color2}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
%-------------------------------------------------------------------------------
% header, body & footer
%-------------------------------------------------------------------------------
\moderncvhead[\moderncvstyleheadoptions]{2}
\moderncvbody{1}
-\moderncvfoot{1}
+% include foot only if nodetails option is active since otherwise we have two times the information
+% on the page
+\if@datainhead
+% if data is shown in head, do not include the footer
+\else
+ \moderncvfoot{1}
+\fi
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvstyleclassic.sty b/macros/latex/contrib/moderncv/moderncvstyleclassic.sty
index 3018cc67a7..07950bcfa5 100644
--- a/macros/latex/contrib/moderncv/moderncvstyleclassic.sty
+++ b/macros/latex/contrib/moderncv/moderncvstyleclassic.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstyleclassic.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,12 +10,17 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstyleclassic}[2022-02-21 v2.3.1 modern curriculum vitae and letter style scheme: classic]
+\ProvidesPackage{moderncvstyleclassic}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: classic]
% head section alignment options: "left" (default) or "right"
\@initializecommand{\moderncvstyleheadoptions}{}
\DeclareOption{left} {\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,left}}
\DeclareOption{right}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,right}}
+\DeclareOption{top}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,top}}
+
+\@initializeif{\if@datainhead}\@datainheadtrue
+\DeclareOption{details}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,details}}
+\DeclareOption{nodetails}{\@datainheadfalse\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,nodetails}}
% toggle use of symbol fonts.
\@initializeif{\if@symbols}\@symbolsfalse
@@ -23,7 +28,7 @@
\DeclareOption{nosymbols} {\@symbolsfalse}
\DeclareOption*{}% avoid choking on unknown options
-\ExecuteOptions{left,symbols}
+\ExecuteOptions{left,symbols,details}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
%-------------------------------------------------------------------------------
@@ -42,17 +47,46 @@
% symbols
\if@symbols
- \moderncvicons{symbols} % use symbols
+ \moderncvicons{symbols} % use symbols
\else
\moderncvicons{letters} % do not use symbols, use letters
\fi
+%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color2}
+\colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{lastnamecolor!50}
+\colorlet{firstnamecolor}{lastnamecolor!50}
+\colorlet{titlecolor}{color2}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
%-------------------------------------------------------------------------------
% header, body & footer
%-------------------------------------------------------------------------------
\moderncvhead[\moderncvstyleheadoptions]{1}
\moderncvbody{1}
+% include foot only if nodetails option is active since otherwise we have two times the information
+% on the page
+\if@datainhead
+% if data is shown in head, do not include the footer
+\else
+ \moderncvfoot{1}
+\fi
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvstylecontemporary.sty b/macros/latex/contrib/moderncv/moderncvstylecontemporary.sty
new file mode 100644
index 0000000000..32f02ceb37
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvstylecontemporary.sty
@@ -0,0 +1,63 @@
+%% start of file `moderncvstylecontemporary.sty'.
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com).
+%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+
+
+%-------------------------------------------------------------------------------
+% identification
+%-------------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{moderncvstylecontemporary}[2023/11/24 v2.0.0 modern curriculum vitae and letter style scheme: contemporary]
+
+% head section alignment options: "left" (default) or "right"
+\@initializecommand{\moderncvstyleheadoptions}{}
+\DeclareOption{left} {\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,left}}
+\DeclareOption{right}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,right}}
+\DeclareOption{qr} {\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,qr}}
+\DeclareOption{noqr}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,noqr}}
+
+\DeclareOption*{}% avoid choking on unknown options
+\ExecuteOptions{left,qr}
+\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
+
+%-------------------------------------------------------------------------------
+% fonts & icons
+%-------------------------------------------------------------------------------
+% Latin Modern fonts
+%\ifxetexorluatex
+% \setmainfont{Latin Modern Roman}
+% \setsansfont{Latin Modern Sans}
+% \setmathfont{Latin Modern Math}
+%\else
+ \IfFileExists{lmodern.sty}%
+ {\RequirePackage{lmodern}}%
+ {}
+%\fi
+
+% symbols
+\providecolor{default-socialicon-color}{named}{headtext}
+\moderncvicons{symbols}
+
+%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% skillmatrix
+\colorlet{bodyrulecolor}{color1}
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
+
+%-------------------------------------------------------------------------------
+% header, body & footer
+%-------------------------------------------------------------------------------
+\moderncvhead[\moderncvstyleheadoptions]{7}
+\moderncvbody{6}
+
+
+\endinput
+
+
+%% end of file `moderncvstylecontemporary.sty'.
diff --git a/macros/latex/contrib/moderncv/moderncvstyleempty.sty b/macros/latex/contrib/moderncv/moderncvstyleempty.sty
index a86560524c..8dcce13aa5 100644
--- a/macros/latex/contrib/moderncv/moderncvstyleempty.sty
+++ b/macros/latex/contrib/moderncv/moderncvstyleempty.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstyleempty.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstyleempty}[2022-02-21 v2.3.1 modern curriculum vitae scheme: empty]
+\ProvidesPackage{moderncvstyleempty}[2024-07-18 v2.4.1 modern curriculum vitae scheme: empty]
%-------------------------------------------------------------------------------
% required packages
@@ -33,11 +33,34 @@
%-------------------------------------------------------------------------------
%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color2}
+% \colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{lastnamecolor!50}
+\colorlet{firstnamecolor}{lastnamecolor!50}
+\colorlet{titlecolor}{color2}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
+
+%-------------------------------------------------------------------------------
% fonts & icons
%-------------------------------------------------------------------------------
% symbols
\if@symbols
- \moderncvicons{symbols} % use symbols
+ \moderncvicons{symbols} % use symbols
\else
\moderncvicons{letters} % do not use symbols, use letters
\fi
diff --git a/macros/latex/contrib/moderncv/moderncvstylefancy.sty b/macros/latex/contrib/moderncv/moderncvstylefancy.sty
index 56de636100..1ad8d8732f 100644
--- a/macros/latex/contrib/moderncv/moderncvstylefancy.sty
+++ b/macros/latex/contrib/moderncv/moderncvstylefancy.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstylefancy.sty'.
-%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2015-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,13 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstylefancy}[2022-02-21 v2.3.1 modern curriculum vitae and letter style scheme: fancy]
+\ProvidesPackage{moderncvstylefancy}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: fancy]
+
+% headoptions
+\@initializecommand{\moderncvstyleheadoptions}{}
+\@initializeif{\if@datainhead}\@datainheadtrue
+\DeclareOption{details}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,details}}
+\DeclareOption{nodetails}{\@datainheadfalse\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,nodetails}}
% toggle use of symbol fonts.
\@initializeif{\if@symbols}\@symbolsfalse
@@ -18,10 +24,34 @@
\DeclareOption{nosymbols} {\@symbolsfalse}
\DeclareOption*{}% avoid choking on unknown options
-\ExecuteOptions{symbols}
+\ExecuteOptions{symbols,details}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color1}
+\colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{color1}
+\colorlet{firstnamecolor}{lastnamecolor!50}
+\colorlet{titlecolor}{color2}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
+
+
+%-------------------------------------------------------------------------------
% fonts & icons
%-------------------------------------------------------------------------------
% EB Garamond font
@@ -38,7 +68,7 @@
% symbols
\if@symbols
- \moderncvicons{symbols} % use symbols
+ \moderncvicons{symbols} % use symbols
\else
\moderncvicons{letters} % do not use symbols, use letters
\fi
@@ -47,9 +77,16 @@
%-------------------------------------------------------------------------------
% header, body & footer
%-------------------------------------------------------------------------------
-\moderncvhead{5}
+\moderncvhead[\moderncvstyleheadoptions]{5}
\moderncvbody{5}
+% include foot only if nodetails option is active since otherwise we have two times the information
+% on the page
+\if@datainhead
+% if data is shown in head, do not include the footer
+\else
+ \moderncvfoot{1}
+\fi
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty b/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty
index 78225e0a58..37de3c57b3 100644
--- a/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty
+++ b/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty
@@ -1,5 +1,5 @@
%% start of file `moderncvstyleoldstyle.sty'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,14 @@
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{moderncvstyleoldstyle}[2022-02-21 v2.3.1 modern curriculum vitae and letter style scheme: oldstyle]
+\ProvidesPackage{moderncvstyleoldstyle}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: oldstyle]
+
+% headoptions
+\@initializecommand{\moderncvstyleheadoptions}{}
+\@initializeif{\if@datainhead}\@datainheadtrue
+\DeclareOption{details}{\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,details}}
+\DeclareOption{nodetails}{\@datainheadfalse\edef\moderncvstyleheadoptions{\moderncvstyleheadoptions,nodetails}}
+
% toggle use of symbol fonts.
\@initializeif{\if@symbols}\@symbolsfalse
@@ -18,7 +25,7 @@
\DeclareOption{nosymbols} {\@symbolsfalse}
\DeclareOption*{}% avoid choking on unknown options
-\ExecuteOptions{symbols}
+\ExecuteOptions{symbols,details}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
%-------------------------------------------------------------------------------
@@ -51,11 +58,41 @@
%-------------------------------------------------------------------------------
+% Colors
+%-------------------------------------------------------------------------------
+% head and footer
+\colorlet{lastnamecolor}{color2}
+\colorlet{namecolor}{lastnamecolor}
+\colorlet{headrulecolor}{lastnamecolor!50}
+\colorlet{firstnamecolor}{lastnamecolor!50}
+\colorlet{titlecolor}{color2}
+\colorlet{addresscolor}{color2}
+\colorlet{quotecolor}{color1}
+\colorlet{pictureframecolor}{color1}
+% body
+\colorlet{bodyrulecolor}{color1}
+\colorlet{sectioncolor}{color1}
+\colorlet{subsectioncolor}{color1}
+\colorlet{hintstylecolor}{color0}
+% letter
+\colorlet{letterclosingcolor}{color2}
+% skillmatrix
+\colorlet{skillmatrixfullcolor}{color1}
+\colorlet{skillmatrixemptycolor}{color2!30}
+
+
+%-------------------------------------------------------------------------------
% header, body & footer
%-------------------------------------------------------------------------------
-\moderncvhead{4}
+\moderncvhead[\moderncvstyleheadoptions]{4}
\moderncvbody{4}
-
+% include foot only if nodetails option is active since otherwise we have two times the information
+% on the page
+\if@datainhead
+% if data is shown in head, do not include the footer
+\else
+ \moderncvfoot{1}
+\fi
\endinput
diff --git a/macros/latex/contrib/moderncv/moderncvverticaltimeline.sty b/macros/latex/contrib/moderncv/moderncvverticaltimeline.sty
new file mode 100644
index 0000000000..1ee94a5ef5
--- /dev/null
+++ b/macros/latex/contrib/moderncv/moderncvverticaltimeline.sty
@@ -0,0 +1,79 @@
+%% start of file `moderncvverticaltimeline.sty'.
+%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+
+
+%-------------------------------------------------------------------------------
+% identification
+%-------------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{moderncvverticaltimeline}[2023/11/29 v2.0.0 modern curriculum vitae vertical timeline]
+
+
+%-------------------------------------------------------------------------------
+% required packages
+%-------------------------------------------------------------------------------
+\RequirePackage{tikz}
+
+%-------------------------------------------------------------------------------
+% vertical timeline implementation
+%-------------------------------------------------------------------------------
+\tikzset{
+ tl_milestone/.style={circle,inner sep=1.5pt,draw=color0!20,label={west:#1}},
+ tl_link/.style={thick,densely dotted,color0!20},
+}
+
+\newcounter{tl@chainidx}\setcounter{tl@chainidx}{0}
+\newcounter{tl@nodeidx}\setcounter{tl@nodeidx}{0}
+
+% Mark the end of the current chain; any `\tl@milestone` issued afterward will be on a new timeline.
+\def\tl@resetchain{%
+ \stepcounter{tl@chainidx}%
+ \setcounter{tl@nodeidx}{0}%
+}
+
+% Create a node in the current timeline and link it to the previous node; if the previous milestone
+% is on the last shipped out page, draw a line that extends until the top margin. The argument is laid out as a label (default left).
+\def\tl@milestone#1{%
+ \edef\@tl@prev{tl-\thetl@chainidx-\thetl@nodeidx}%
+ \stepcounter{tl@nodeidx}%
+ \edef\@tl@this{tl-\thetl@chainidx-\thetl@nodeidx}%
+ \tikz[remember picture,overlay] {
+ \node[tl_milestone={#1}] (\@tl@this) {};
+ \ifnum\thetl@nodeidx>1
+ \pgfpointdiff{\pgfpointanchor{\@tl@prev}{center}}{\pgfpointanchor{\@tl@this}{center}}
+ \ifnum\pgf@y>0
+ \draw[tl_link] (\@tl@this) -- ([yshift=-1em] \@tl@this |- current page.north);
+ \else
+ \draw[tl_link] (\@tl@this) -- (\@tl@prev);
+ \fi
+ \fi
+ }
+}
+
+\AddToHook{shipout/background}{%
+ % If there are follow-up milestones in the current timeline, draw a line that extends until the bottom margin
+ \edef\@tl@prev{tl-\thetl@chainidx-\number\numexpr\thetl@nodeidx-1}%
+ \edef\@tl@this{tl-\thetl@chainidx-\thetl@nodeidx}%
+ \tikz[remember picture,overlay] {
+ \ifnum\thetl@nodeidx>1
+ \pgfpointdiff{\pgfpointanchor{\@tl@prev}{center}}{\pgfpointanchor{\@tl@this}{center}}
+ \ifnum\pgf@y>0
+ \draw[tl_link] (\@tl@prev) -- ([yshift=1em] \@tl@prev |- current page.south);
+ \fi
+ \fi
+ }
+}
+
+\AtEndDocument{\tl@resetchain}
+
+\let\@old@section=\section%
+\RenewDocumentCommand{\section}{sm}{\tl@resetchain\@old@section{#1}}
+
+\endinput
+
+
+%% end of file `moderncvverticaltimeline.sty'.
diff --git a/macros/latex/contrib/moderncv/signature.png b/macros/latex/contrib/moderncv/signature.png
new file mode 100644
index 0000000000..8daa868ed8
--- /dev/null
+++ b/macros/latex/contrib/moderncv/signature.png
Binary files differ
diff --git a/macros/latex/contrib/moderncv/template.tex b/macros/latex/contrib/moderncv/template.tex
index 38d313b383..7128f09e08 100644
--- a/macros/latex/contrib/moderncv/template.tex
+++ b/macros/latex/contrib/moderncv/template.tex
@@ -1,5 +1,5 @@
%% start of file `template.tex'.
-%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -8,17 +8,23 @@
\documentclass[11pt,a4paper,sans]{moderncv} % possible options include font size ('10pt', '11pt' and '12pt'), paper size ('a4paper', 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape') and font family ('sans' and 'roman')
+\moderncvcolor{cerulean} % color options 'black', 'blue' (default), 'burgundy', 'green', 'grey', 'orange', 'purple' and 'red'; for contemporary style use 'cerulean'
% moderncv themes
-\moderncvstyle{casual} % style options are 'casual' (default), 'classic', 'banking', 'oldstyle' and 'fancy'
-\moderncvcolor{blue} % color options 'black', 'blue' (default), 'burgundy', 'green', 'grey', 'orange', 'purple' and 'red'
+\moderncvstyle[]{contemporary} % style options are 'casual' (default), 'classic', 'banking', 'oldstyle', 'fancy' and 'contemporary'
+ % the 'contemporary' style optionally takes the `qr` (default) or `noqr` options
%\renewcommand{\familydefault}{\sfdefault} % to set the default font; use '\sfdefault' for the default sans serif font, '\rmdefault' for the default roman one, or any tex font name
%\nopagenumbers{} % uncomment to suppress automatic page numbering for CVs longer than one page
% adjust the page margins
-\usepackage[scale=0.75]{geometry}
-\setlength{\footskip}{136.00005pt} % depending on the amount of information in the footer, you need to change this value. comment this line out and set it to the size given in the warning
+\usepackage[hmargin=0.5in,vmargin=10pt]{geometry} % the 'contemporary' style looks better with reduced margins; uncomment the line below for increased margin
+%\usepackage[scale=0.75]{geometry}
%\setlength{\hintscolumnwidth}{3cm} % if you want to change the width of the column with the dates
%\setlength{\makecvheadnamewidth}{10cm} % for the 'classic' style, if you want to force the width allocated to your name and avoid line breaks. be careful though, the length is normally calculated to avoid any overlap with your personal info; use this at your own typographical risks...
+%\setlength{\listitemsymbolspace}{10pt} % set custom spacing between list symbol and text item (influences \cvlistitem and \cvlistdoubleitem)
+
+% the 'contemporary' style allows to append additional elements to the head background; uncomment and customize if needed
+%\def\@moderncvheadBackground{
+%}
% font loading
% for luatex and xetex, do not use inputenc and fontenc
@@ -30,7 +36,13 @@
\setmainfont{Latin Modern Roman}
\setsansfont{Latin Modern Sans}
\setmonofont{Latin Modern Mono}
- \setmathfont{Latin Modern Math}
+ \setmathfont{Latin Modern Math}
+
+ % you may also consider Fira Sans Light for a extra modern look
+ %\setsansfont[ItalicFont={Fira Sans Light Italic},%
+ % BoldFont={Fira Sans},%
+ % BoldItalicFont={Fira Sans Italic}]%
+ % {Fira Sans Light}%
\else
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
@@ -54,24 +66,49 @@
% Social icons
\social[linkedin]{john.doe} % optional, remove / comment the line if not wanted
\social[xing]{john\_doe} % optional, remove / comment the line if not wanted
-\social[twitter]{ji\_doe} % optional, remove / comment the line if not wanted
+
\social[github]{jdoe} % optional, remove / comment the line if not wanted
\social[gitlab]{jdoe} % optional, remove / comment the line if not wanted
-\social[stackoverflow]{0000000/johndoe} % optional, remove / comment the line if not wanted
+\social[codeberg]{jdoe} % optional, remove / comment the line if not wanted
\social[bitbucket]{jdoe} % optional, remove / comment the line if not wanted
+\social[stackoverflow]{0000000/johndoe} % optional, remove / comment the line if not wanted
+
\social[skype]{jdoe} % optional, remove / comment the line if not wanted
\social[orcid]{0000-0000-000-000} % optional, remove / comment the line if not wanted
\social[researchgate]{jdoe} % optional, remove / comment the line if not wanted
\social[researcherid]{jdoe} % optional, remove / comment the line if not wanted
+\social[googlescholar]{googlescholarid} % optional, remove / comment the line if not wanted
+
+\social[twitter]{ji\_doe} % optional, remove / comment the line if not wanted
+\social[mastodon]{mastodon.social/web/@user} % optional, remove / comment the line if not wanted
\social[telegram]{jdoe} % optional, remove / comment the line if not wanted
\social[whatsapp]{12345678901} % optional, remove / comment the line if not wanted
\social[signal]{12345678901} % optional, remove / comment the line if not wanted
\social[matrix]{@johndoe:matrix.org} % optional, remove / comment the line if not wanted
-\social[googlescholar]{googlescholarid} % optional, remove / comment the line if not wanted
+\social[discord]{jdoe\#0000} % optional, remove / comment the line if not wanted
+
+% YouTube links can take several forms, depending on how your account and channel are set up.
+% See https://support.google.com/youtube/answer/6180214 for more information.
+\social[youtube]{c/jdoeschannel} % optional, remove / comment the line if not wanted; Custom URL - can be shorted by removing 'c/'
+\social[youtube]{channel/XXXXXX} % optional, remove / comment the line if not wanted; Channel URL (ID-based) - can not be shortened
+\social[youtube]{user/jdoe} % optional, remove / comment the line if not wanted; Legacy username URL - if jdoe is not already claimed by a Custom URL, can be shortened by removing 'user/'
+
+\social[twitch]{jdoe} % optional, remove / comment the line if not wanted
+\social[tiktok]{jdoe} % optional, remove / comment the line if not wanted
+\social[instagram]{jdoe} % optional, remove / comment the line if not wanted
+
+\social[soundcloud]{jdoe} % optional, remove / comment the line if not wanted
+
+\social[steam]{jdoe} % optional, remove / comment the line if not wanted
+\social[xbox]{jdoe} % optional, remove / comment the line if not wanted
+\social[playstation]{jdoe} % optional, remove / comment the line if not wanted
+\social[battlenet]{jdoe\#0000} % optional, remove / comment the line if not wanted
+\social[arxiv]{doe\_j\_1} % optional, remove / comment the line if not wanted
+\social[inspire]{0000000} % optional, remove / comment the line if not wanted
\extrainfo{additional information} % optional, remove / comment the line if not wanted
-\photo[64pt][0.4pt]{picture} % optional, remove / comment the line if not wanted; '64pt' is the height the picture must be resized to, 0.4pt is the thickness of the frame around it (put it to 0pt for no frame) and 'picture' is the name of the picture file
+\photo[64pt][2pt]{picture} % optional, remove / comment the line if not wanted; '64pt' is the height the picture must be resized to, 2pt is the thickness of the frame around it (put it to 0pt for no frame) and 'picture' is the name of the picture file
\quote{Some quote} % optional, remove / comment the line if not wanted
% bibliography adjustments (only useful if you make citations in your resume, or print a list of publications using BibTeX)
@@ -92,7 +129,7 @@
%----- resume ---------------------------------------------------------
\makecvtitle
-\section{Education}
+\section{Education} % for 'contemporary' style use optional argument for displaying an icon, e.g. \section[\faGraduationCap]{Education}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description} % arguments 3 to 6 can be left empty
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
@@ -135,12 +172,13 @@ Detailed achievements:
\cvdoubleitem{category 1}{XXX, YYY, ZZZ}{category 4}{XXX, YYY, ZZZ}
\cvdoubleitem{category 2}{XXX, YYY, ZZZ}{category 5}{XXX, YYY, ZZZ}
\cvdoubleitem{category 3}{XXX, YYY, ZZZ}{category 6}{XXX, YYY, ZZZ}
+\cvtripleitem{category 4}{XYZ}{category 5}{XYZ}{category 6}{XYZ}
\section{Skill matrix}
\cvitem{Skill matrix}{Alternatively, provide a skill matrix to show off your skills}
-%% Skill matrix as an alternative to rate one's skills, computer or other.
+%% Skill matrix as an alternative to rate one's skills, computer or other.
-%% Adjusts width of skill matrix columns.
+%% Adjusts width of skill matrix columns.
%% Usage \setcvskillcolumns[<width>][<factor>][<exp_width>]
%% <width>, <exp_width> should be lengths smaller than \textwidth, <factor> needs to be between 0 and 1.
%% Examples:
@@ -179,12 +217,12 @@ Detailed achievements:
%% Adjust head of the skill matrix for other languages
% \cvskillhead[0.25em][Level][F\"ahigkeit][Jahre][Bemerkung]
-%% \cvskillentry[*][<post_padding>]{<skill_cathegory>}{<0-5>}{<skill_name>}{<years_of_experience>}{<comment>}%
+%% \cvskillentry[*][<post_padding>]{<skill_cathegory>}{<0-5>}{<skill_name>}{<years_of_experience>}{<comment>}%
%% Example usages:
\cvskillentry*{Language:}{3}{Python}{2}{I'm so experienced in Python and have realised a million projects. At least.}
\cvskillentry{}{2}{Lilypond}{14}{So much sheet music! Man, I'm the best!}
\cvskillentry{}{3}{\LaTeX}{14}{Clearly I rock at \LaTeX}
-\cvskillentry*{OS:}{3}{Linux}{2}{I only use Archlinux btw}% notice the use of the starred command and the optional
+\cvskillentry*{OS:}{3}{Linux}{2}{I only use Archlinux btw}% notice the use of the starred command and the optional
\cvskillentry*[1em]{Methods}{4}{SCRUM}{8}{SCRUM master for 5 years}
%% \cvskill{<0-5>} command
% \cvitem{\textbackslash{cvskill}:}{Skills can be visually expressed by the \textbackslash{cvskill} command, e.g. \cvskill{2}}
@@ -232,8 +270,10 @@ Detailed achievements:
% recipient data
\recipient{Company Recruitment team}{Company, Inc.\\123 somestreet\\some city}
\date{January 01, 1984}
+\subject{Job application}
\opening{Dear Sir or Madam,}
\closing{Yours faithfully,}
+\signature{0.9}{signature.png} % optional, remove / comment the line if not wanted: first argument goes to \includegraphics > scale
\enclosure[Attached]{curriculum vit\ae{}} % use an optional argument to use a string other than "Enclosure", or redefine \enclname
\makelettertitle
@@ -254,4 +294,3 @@ Albert Einstein discovered that $e=mc^2$ in 1905.
%% end of file `template.tex'.
-
diff --git a/macros/latex/contrib/moderncv/tweaklist.sty b/macros/latex/contrib/moderncv/tweaklist.sty
index 3739c95f92..c5f5870000 100644
--- a/macros/latex/contrib/moderncv/tweaklist.sty
+++ b/macros/latex/contrib/moderncv/tweaklist.sty
@@ -1,6 +1,6 @@
%% start of file `tweaklist.sty'.
%% Original by Jakob Schiotz, downloaded from http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/tweaklist.sty; not found on ctan.
-%% Modified by Xavier Danaux (xdanaux@gmail.com), 2020-2022 moderncv maintainers (github.com/moderncv).
+%% Modified by Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% The tweaklist.sty package redefines the itemize, enumerate and description packages, so that all parameters can be adjusted.
% This was done by copying the original definitions, and adding "hook commands" that are executed when entering the environment.
diff --git a/macros/latex/contrib/moremath/MANIFEST.md b/macros/latex/contrib/moremath/MANIFEST.md
new file mode 100644
index 0000000000..ef52db4ec2
--- /dev/null
+++ b/macros/latex/contrib/moremath/MANIFEST.md
@@ -0,0 +1,26 @@
+# Manifest of the `moremath`-package
+
+This file lists all files that are considered to be part of `moremath`.
+
+
+## Source Files
+- `moremath.dtx`: Documentation and package source.
+- `moremath.ins`: Batch file for generating `moremath.sty`
+
+## Text Files
+These plain text files are included as documentation or metadata.
+
+- `README.md`: README file.
+- `MANIFEST.md`: This file.
+
+## Derived Files
+
+These files are derived from other files mentioned above.
+
+### Documentation
+
+- `moremath-doc.pdf`: Package documentation generated from `moremath.dtx`
+
+### Unpacked Package Code
+
+- `moremath.sty`: File generated from `moremath.dtx` by `moremath.ins`.
diff --git a/macros/latex/contrib/moremath/README.md b/macros/latex/contrib/moremath/README.md
new file mode 100644
index 0000000000..4727b4b11d
--- /dev/null
+++ b/macros/latex/contrib/moremath/README.md
@@ -0,0 +1,48 @@
+# `moremath`: Convenience Math Macros
+
+The `moremath` package provides convenience shorthand math macros such as
+(auto-)delimited operators, (auto-)delimited vector calculus operators
+and some commands for quickly producing diagonal matrices,
+column, and row vectors.
+
+It depends on [mathtools](https://ctan.org/pkg/mathtools),
+[amssymb](https://ctan.org/pkg/amsfonts),
+and optionally on [bm](https://ctan.org/pkg/bm).
+
+_____
+**Note: This package is still in its initial development phase.**
+
+Its interface may be subject to change until version 1.0.0 has been reached.
+
+_____
+
+## Unpacking the Source Code
+
+To unpack the source code use
+
+``` shell
+TEX moremath.ins
+```
+
+## Generating the Documentation
+
+To produce the documentation run `moremath.dtx` through `*latex`.
+
+
+## License
+
+Copyright (C) 2024 Marcel Ilg
+
+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 in
+https://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Marcel Ilg.
+
+This work consists of the files listed in `MANIFEST.md`.
diff --git a/macros/latex/contrib/moremath/moremath-doc.pdf b/macros/latex/contrib/moremath/moremath-doc.pdf
new file mode 100644
index 0000000000..4a90adc8e7
--- /dev/null
+++ b/macros/latex/contrib/moremath/moremath-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/moremath/moremath.dtx b/macros/latex/contrib/moremath/moremath.dtx
new file mode 100644
index 0000000000..3b520f4ac2
--- /dev/null
+++ b/macros/latex/contrib/moremath/moremath.dtx
@@ -0,0 +1,5515 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 Marcel Ilg
+%
+% 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 in
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status ‘maintained’.
+%
+% The Current Maintainer of this work is Marcel Ilg.
+%
+% This work consists of the files listed in MANIFEST.md.
+% \fi
+%
+% \iffalse
+%
+%<*driver>
+% Generated by ctanbib
+\begin{filecontents*}[overwrite]{\jobname.bib}
+@preamble{ "\providecommand\ctanbibpkgname[1]{\textsl{#1}}" }
+@manual{amsfonts,
+ title = {The \ctanbibpkgname{amsfonts} package},
+ subtitle = {TeX fonts from the American Mathematical Society},
+ author = {{The American Mathematical Society}},
+ url = {https://ctan.org/pkg/amsfonts},
+ urldate = {2024-07-04},
+ date = {},
+ version = {3.04},
+}
+
+@preamble{ "\providecommand\ctanbibpkgname[1]{\textsl{#1}}" }
+@manual{amsmath,
+ title = {The \ctanbibpkgname{amsmath} package},
+ subtitle = {AMS mathematical facilities for LaTeX},
+ author = {{The LaTeX Project Team}},
+ url = {https://ctan.org/pkg/amsmath},
+ urldate = {2024-07-04},
+ date = {2023-05-13},
+ version = {2.17o},
+}
+
+@preamble{ "\providecommand\ctanbibpkgname[1]{\textsl{#1}}" }
+@manual{bm,
+ title = {The \ctanbibpkgname{bm} package},
+ subtitle = {Access bold symbols in maths mode},
+ author = {Carlisle, David and Mittelbach, Frank and {The LaTeX Project Team}},
+ url = {https://ctan.org/pkg/bm},
+ urldate = {2024-07-04},
+ date = {2023-12-19},
+ version = {1.2f},
+}
+
+@preamble{ "\providecommand\ctanbibpkgname[1]{\textsl{#1}}" }
+@manual{mathtools,
+ title = {The \ctanbibpkgname{mathtools} package},
+ subtitle = {Mathematical tools to use with amsmath},
+ author = {Høgholm, Morten and Madsen, Lars and Robertson, Will and Wright, Joseph and {The LaTeX Project Team}},
+ url = {https://ctan.org/pkg/mathtools},
+ urldate = {2024-07-04},
+ date = {2024-03-11},
+ version = {1.30},
+}
+\end{filecontents*}
+\begin{filecontents*}[overwrite]{\jobname-ams-op-table.tex}
+\begin{tabular}{rlrlrlrl}
+ \cs[module=amsmath,replace=false]{arccos} &\(\arccos\) &\cs[module=amsmath,replace=false]{deg} &\( \deg \) &\cs[module=amsmath,replace=false]{lg} &\( \lg \) &\cs[module=amsmath,replace=false]{projlim} &\( \projlim \)\\
+ \cs[module=amsmath,replace=false]{arcsin} &\(\arcsin\) &\cs[module=amsmath,replace=false]{det} &\( \det \) &\cs[module=amsmath,replace=false]{lim} &\( \lim \) &\cs[module=amsmath,replace=false]{sec} &\( \sec \)\\
+ \cs[module=amsmath,replace=false]{arctan} &\(\arctan\) &\cs[module=amsmath,replace=false]{dim} &\( \dim \) &\cs[module=amsmath,replace=false]{liminf} &\( \liminf \) &\cs[module=amsmath,replace=false]{sin} &\( \sin \)\\
+ \cs[module=amsmath,replace=false]{arg} &\(\arg\) &\cs[module=amsmath,replace=false]{exp} &\( \exp \) &\cs[module=amsmath,replace=false]{limsup} &\( \limsup \) &\cs[module=amsmath,replace=false]{sinh} &\( \sinh \)\\
+ \cs[module=amsmath,replace=false]{cos} &\(\cos\) &\cs[module=amsmath,replace=false]{gcd} &\( \gcd \) &\cs[module=amsmath,replace=false]{ln} &\( \ln \) &\cs[module=amsmath,replace=false]{sup} &\( \sup \)\\
+ \cs[module=amsmath,replace=false]{cosh} &\(\cosh\) &\cs[module=amsmath,replace=false]{hom} &\( \hom \) &\cs[module=amsmath,replace=false]{log} &\( \log \) &\cs[module=amsmath,replace=false]{tan} &\( \tan \)\\
+ \cs[module=amsmath,replace=false]{cot} &\(\cot\) &\cs[module=amsmath,replace=false]{inf} &\( \inf \) &\cs[module=amsmath,replace=false]{max} &\( \max \) &\cs[module=amsmath,replace=false]{tanh} &\( \tanh \)\\
+ \cs[module=amsmath,replace=false]{coth} &\(\coth\) &\cs[module=amsmath,replace=false]{injlim} &\(\injlim\) &\cs[module=amsmath,replace=false]{min} &\( \min \) & &\\
+ \cs[module=amsmath,replace=false]{csc} &\(\csc\) &\cs[module=amsmath,replace=false]{ker} &\(\ker\) &\cs[module=amsmath,replace=false]{Pr} &\( \Pr \) & &\\
+\end{tabular}
+\begin{center}
+ \begin{tabular}{rlrl}
+ \cs[module=amsmath,replace=false]{varinjlim} &\(\varinjlim\) &\cs[module=amsmath,replace=false]{varliminf} &\(\varliminf\)\\
+ \cs[module=amsmath,replace=false]{varprojlim} &\(\varprojlim\) &\cs[module=amsmath,replace=false]{varlimsup} &\(\varlimsup\)\\
+ \end{tabular}
+\end{center}
+\end{filecontents*}
+
+
+% custom commands for use inside the documentation
+\ExplSyntaxOn
+% Property list storing version date information
+\prop_new:N \l__moremathdoc_version_date_prop
+
+\cs_new_protected:Nn \moremathdoc_add_version:nn
+{
+ \prop_put_if_new:Nnn \l__moremathdoc_version_date_prop {#1} {#2}
+}
+
+\cs_new_protected:Nn \moremathdoc_get_version:n
+{
+ \group_begin:
+ \prop_get:NnNT \l__moremathdoc_version_date_prop {#1} \l_tmpa_tl
+ {
+ \tl_use:N \l_tmpa_tl
+ }
+ \group_end:
+}
+
+\NewDocumentCommand \AddVersion { m m }
+{
+ \moremathdoc_add_version:nn {#1} {#2}
+}
+
+\NewDocumentCommand \GetVersionDate { m }
+{
+ \moremathdoc_get_version:n {#1}
+}
+\ExplSyntaxOff
+
+\documentclass[%
+%show-notes,%
+]{l3doc}
+
+\SetupDoc{reportchangedates=true}
+\RecordChanges
+
+\usepackage[american]{babel}
+\AddBabelHook[american]{nofrench}{afterextras}{\frenchspacing}
+
+\usepackage[style=alphabetic]{biblatex}
+\addbibresource{\jobname.bib}
+
+\usepackage{csquotes}
+\SetCiteCommand{\autocite}
+
+\usepackage{amssymb}
+\usepackage[bm]{moremath}
+
+% renew the ctanbibpkgname command
+\NewDocumentCommand\ctanbibpkgname{m}{\pkg{#1}}
+
+% Example operators and commands
+\DeclareMathOperator{\glorb}{glorb}
+\DeclarePairedDelimiter{\inparen}{\lparen}{\rparen}
+\DeclareDelimitedOperator{\pglorb}{\glorb}{\inparen}
+
+\begin{document}
+ \DocInput{moremath.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% ^^X Get the package version name etc.
+% \GetFileInfo{moremath.sty}
+%
+% ^^X Register changes here
+% \AddVersion{v0.1.0}{2024-06-28}
+% \AddVersion{v0.2.0}{2024-07-04}
+% \AddVersion{v0.3.0}{2024-07-08}
+% \AddVersion{v0.4.0}{2024-07-15}
+%
+% ^^X Placeholder for unreleased versions
+% \AddVersion{vUNRELEASED}{UNRELEASED}
+%
+% \begin{documentation}
+%
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{Initial development release}
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Split the documentation into several parts.
+% }
+% \changes{v0.4.0}{\GetVersionDate{v0.4.0}}{
+% \textbf{Breaking Change:} Rename the package
+% and the \meta{prefix} used for function names from
+% "conmath" to "moremath".
+% }
+%
+% \title{The \pkg{moremath} package\thanks{This document coresponds to
+% \textsf{moremath}~\fileversion, dated \filedate.}}
+%
+% \author{Marcel Ilg\thanks{\texttt{mister01x (at) web (dot) de}}}
+%
+% \date{Released \filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \pkg{moremath} package provides several document level commands
+% to ease the typesetting
+% and \LaTeX{} code readability of certain mathematical constructs.
+% It provides complementary commands to all operators defined by \pkg{amsmath},
+% the commands typeset delimiters that may be automatically, manually or
+% not scaled at all.
+% The commands also accept optional sub- and superscripts to the operators.
+%
+% Furthermore it provides several commands to typeset gradient, divergence,
+% curl, and Laplace operators,
+% for which there are also versions with delimiters.
+% Those commands also accept an optional subscript
+% and their appearance can be modified using key-value options.
+%
+% Additionally commands are provided for producing row and column vectors,
+% as well as (anti-)diagonal matrices,
+% utilizing \pkg{mathtools} \env{matrix*} family of environments.
+%
+% Most of the document level commands defined by this package can also
+% be disabled using a package load-time option to avoid clashes with
+% commands defined by other packages.
+% \end{abstract}
+%
+% \section*{Note: This Package is Still in its Initial Development Phase}
+% Do not expect a stable interface until version 1.0.0 has been reached!
+% While I try to keep the interface stable and backwards compatible,
+% I am unable to promise this.
+%
+% \tableofcontents
+%
+% \part{Document Author Documentation}
+% \label{pt:doc-auth}
+%
+% \section{Introduction}
+% \label{sec:intro}
+%
+% When typesetting mathematics in \LaTeX{} it is very common to often encounter,
+% code patterns such as |\sin \left( \frac{x}{2} \right)|.
+% While this above code works as expected its not especially easy for human
+% readers of this code to immediately understand what that code is going to
+% do.
+%
+% This package tries to ease readability of such commonly used constructs
+% by providing commands that (hopefully) increase readability,
+% as well as speeding up writing math in \LaTeX{}.
+% Using \pkg{moremath} the above code can be simplified to |\psin*{\frac{x}{2}}|,
+% which is shorter and better \enquote{human readable}.
+% The package also provides the possibility for users to define such delimited operators,
+% on their own.
+%
+% There are also other things that can be improved when typesetting math.
+% One prominent example is the typsetting of row and column vectors,
+% which require the use of a \env{matrix} environment.
+% For this case \pkg{moremath} provides commands which accept a comma separated
+% list of vector entries,
+% obliterating the need for a \env{matrix} environment to typeset vectors.
+%
+% The same goes for (anti-)diagonal matrices,
+% only the elements of the diagonal are of importance here.
+% Therefore the production of those matrices may also be simplified into a single command,
+% which again improves readability of the code compared to a mostly empty \env{matrix} environment.
+%
+% Another feature of this package is the definition of several (delimited)
+% vector calculus operators such as gradient, divergence and curl operators,
+% this does not only improve the semantics of the math code
+% (|\mathop{\nabla} f| vs.\ |\grad f|),
+% but also tries to provide the correct spacing between the operator and its
+% arguments.
+%
+% The \pkg{moremath} package is written using \LaTeX{}3
+% and provides a small \LaTeX{}3 interface for class and package writers.
+%
+% The source code for \pkg{moremath} is hosted on GitHub at
+% \begin{center}
+% \url{https://github.com/Mister00X/moremath}
+% \end{center}
+% If you have any issues or found a bug, feel free to register an issue there.
+%
+% \section{Dependencies}
+% \label{sec:deps}
+%
+% The main dependency of this package is \pkg{mathtools}~\autocite{mathtools}.
+% Optionally the \pkg{bm}~\autocite{bm} may be loaded.
+%
+% If the option "no-vector" has \emph{not} been given as a package load time option,
+% this package also loads the \pkg{amssymb}~\autocite{amsfonts} package.
+%
+% \section{Package Options}
+% \label{sec:pack-opts}
+%
+% ^^X SUBSECTION: Package Load Time Options
+% \subsection{Package Load Time Options}
+% \label{sec:pkg-load-time-opts}
+% The options described in this section \emph{must} be given
+% at package load time i.e.\ as package options.
+% All options which are not described below will be passed to
+% \pkg{mathtools}~\autocite{mathtools},
+% see its documentation for more information.
+%
+% \DescribeOption{bm} The \verb|bm| option
+% loads the \pkg{bm}~\autocite{bm} package which provides a better version of
+% the \cs{boldsymbol} command.
+%
+%
+%
+%
+% The options
+% \DescribeOption{no-vector} "no-vector",
+% \DescribeOption{no-abs-shorthands} "no-abs-shorthands",
+% \DescribeOption{no-operators} "no-operators",
+% \DescribeOption{no-crvector} "no-crvector",
+% and \DescribeOption{no-matrix} "no-matrix"
+% disable the definition of the predefined commands described in sections~\ref{sec:vector-calculus},
+% \ref{sec:shorthands},
+% \ref{sec:delim-ops},
+% \ref{sec:rc-vectors},
+% and~\ref{sec:matrices}
+% respectively.
+%
+% \DescribeOption{nopredef}
+% The option |nopredef| achieves the same as the three
+% |no-|\meta{functionality} options above.
+% It accepts multiple values, valid option values are:
+% |vector|,
+% |abs|,
+% |operators|,
+% |crvector|,
+% |matrix|,
+% and |all|.
+% The values
+% |abs|,
+% |operators|,
+% and |vector|
+% disable the predefined
+% document level commands for
+% delimited operators,
+% vector calculus
+% and the shorthands for absolute value and norm respectively.
+% The values "crvector" and "matrix" disable the shorthand commands
+% for row and column vectors, and simple matrices respectively.
+% The special value |all| disables all of them.
+%
+% The option accepts multiple values which can be given as a comma separated
+% list, or as multiple key-value options, like in the examples below:
+% \begin{verbatim}
+% \usepackage[nopredef={vector,abs,operators}]{moremath}
+% \end{verbatim}
+% This is equivalent to
+% \begin{verbatim}
+% \usepackage[nopredef=all]{moremath}
+% \end{verbatim}
+% and to:
+% \begin{verbatim}
+% \usepackage[nopredef=vector,nopredef=abs,nopredef=operators]{moremath}
+% \end{verbatim}
+%
+% The command \cs{NewDelimitedOperator} is not affected by any of the above
+% settings.
+%
+% ^^X SUBSECTION: General Options
+% \subsection{General Options}
+% \label{sec:pkg-general-options}
+%
+% The options described in this section
+% \emph{must not} be given as package options,
+% instead they should be set using \cs{moremathsetup}
+% or given as optional argument to the commands described later.
+% \begin{function}[updated = 2024-07-15]{\moremathsetup}
+% \begin{syntax}
+% \cs{moremathsetup}\marg{kv~list}
+% \end{syntax}
+% Sets the options specified in the \meta{key-value list},
+% the assignment is local to the current group.
+% If a \meta{value} contains a comma it needs to be wrapped in braces.
+% This command may be used anywhere in the document after \pkg{moremath}
+% has been loaded.
+% \end{function}
+%
+% \subsubsection{Options Affecting Vector Calculus Operators}
+% \label{sec:options-vec-calc}
+%
+% \DescribeOption{nabla}
+% The option |nabla| sets the symbol to use by the document level commands
+% described in section~\ref{sec:vector-calculus} to use for the nabla.
+% It accepts a list of \meta{tokens}. Its default value is |\nabla|.
+%
+% \DescribeOption{arrownabla}
+% The option |arrownabla| puts a small arrow over the gradient operator symbol.
+% Its default value is |false|.
+%
+% \DescribeOption{boldnabla}
+% The option |boldnabla| makes the nabla symbol bold.
+% If the |bm| package option has been given the |\boldsymbol| command from
+% the \pkg{bm} package is used for the bold symbol,
+% otherwise the \pkg{amsmath}~\autocite{amsmath} version is used.
+%
+% \DescribeOption{grad-op}
+% The option |grad-op| may be used to overwrite,
+% the built in version of the gradient operator, it accepts a \meta{token list}.
+% Use at your own responsibility.
+%
+% \DescribeOption{laplacian-symb}
+% The option |laplacian-symb| sets the symbol to use by the document level
+% commands described in section~\ref{sec:vector-calculus} to use for the
+% Laplace operator. It accepts a list of \meta{tokens}.
+%
+% \DescribeOption{delta-laplace}
+% The option |delta-laplace| replaces the Laplace operator symbol
+% (by default \(\laplacian\)) with a uppercase delta
+% (\(\laplacian[delta-laplace=true]\)).
+% Its default value is |false|.
+%
+% \DescribeOption{arrowlaplace}
+% The option |arrowlaplace| if set to |true| makes the Laplace operator look
+% like this: \(\laplacian[arrowlaplace=true]\).
+%
+% \DescribeOption{laplacian}
+% Like the option |grad-op| above the option |laplacian| may be used to
+% overwrite the built-in version of the Laplace operator.
+% Use at your own responsibility.
+%
+% \DescribeOption{dalembert-symb}
+% Like the option "nabla" this sets the symbol to use by the document level
+% commands described in section~\ref{sec:dalembert-op-cmds} to use as symbol
+% for the \foreignlanguage{french}{d'Alembert} operator. It accepts a list of
+% \meta{tokens}. It's default value is \cs[module=amssymb,replace=false]{square}.
+%
+% \DescribeOption{vcenter}
+% The option "vcenter" controls if certain mathematical symbols
+% of the operators described in section~\ref{sec:vector-calculus} should be
+% vertically centered along the math-axis.
+% The default value of this option is "true".
+%
+%
+%
+% \subsubsection{Options Affecting Matrices and Vectors}
+% \label{sec:options-matrix}
+%
+% The options in this section only affect the commands described in sections~\ref{sec:rc-vectors}
+% and~\ref{sec:matrices}. To set them with \cs{moremathsetup} it is necessary
+% to add the prefix |matrix / | to these options,
+% so that the resulting command looks like \cs{moremathsetup}\texttt{\{matrix / \meta{option}\}}.
+% When using these options inside the optional argument of the commands described
+% in sections~\ref{sec:rc-vectors} and~\ref{sec:matrices}, the prefix "matrix /"
+% must be omitted.
+%
+% \DescribeOption{delimiter}
+% The option |delimiter| determines the delimiters used for the matrices,
+% valid values are "p" for parenthesis, "b" for brackets, "B" for braces,
+% "v" for single vertical lines (\enquote{\(\vert\)}),
+% "V" for double vertical lines (\enquote{\(\Vert\)}) or empty for no delimiters.
+% The default value is "{}" (empty).
+%
+% \DescribeOption{fill}
+% The fill option determines the values an (anti-)diagonal matrix is filled with,
+% outside the diagonal. The default is again empty.
+%
+% \DescribeOption{align}
+% This option determines the alignment of the numbers inside the matrix.
+% The value of this option gets passed to the optional argument of the \env{matrix*}
+% or \env{smallmatrix*} family of environments defined by \pkg{mathtools}~\autocite{mathtools}.
+% Valid values for both types of those environments are |l| for left alignment,
+% |r| for right alignment and |c| for centered alignment. The default is |c|.
+%
+% \begin{texnote}
+% The non-"small" versions of the commands described in the sections~\ref{sec:rc-vectors}
+% and~\ref{sec:matrices}, accept \textcquote{mathtools}{\textelp{}
+% any column type valid in the usual \env{array} environment.}
+% \end{texnote}
+%
+%
+% \section{Delimited Operators}
+% \label{sec:delim-ops}
+%
+% \subsection{Delimited Operators Predefined by \pkg{moremath}}
+% \label{sec:delim-op-predef}
+%
+% \DescribeOption{no-operators}
+% If the package load time option |no-operators| is not given this package defines several
+% delimited mathematical operators.
+%
+% \begin{table}
+% \caption{%
+% Operator commands defined by the \pkg{amsmath}~\autocite{amsmath}
+% package.}
+% \label{tab:amsmath-operators}
+% \vspace{.5\baselineskip}
+% \input{\jobname-ams-op-table.tex}
+% \end{table}
+%
+% \begin{function}{
+% \parccos, \barccos, \Barccos, \varccos, \Varccos,
+% }
+% \begin{syntax}
+% \cs{parccos} \oarg{size cmd} \marg{contents}
+
+% \cs{parccos} \oarg{size cmd} \textasciicircum\marg{superscript} \marg{contents}
+%
+% \cs{parccos} \oarg{size cmd} \_\marg{subscript} \marg{contents}
+%
+% \cs{parccos} \oarg{size cmd} \textasciicircum\marg{superscript} \_\marg{subscript} \marg{contents}
+%
+% \cs{parccos}* \marg{contents}
+%
+% \cs{parccos}* \textasciicircum\marg{superscript} \marg{contents}
+%
+% \cs{parccos}* \_\marg{subscript} \marg{contents}
+% \cs{parccos}* \textasciicircum\marg{superscript} \_\marg{subscript} \marg{contents}
+%
+%
+% \cs[no-index]{\meta{prefix}\meta{op name}} \oarg{size cmd} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}} \oarg{size cmd} \textasciicircum\marg{superscript} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}} \oarg{size cmd} \_\marg{subscript} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}} \oarg{size cmd} \textasciicircum\marg{superscript} \_\marg{subscript} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}}* \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}}* \textasciicircum\marg{superscript} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}}* \_\marg{subscript} \marg{contents}
+% \cs[no-index]{\meta{prefix}\meta{op name}}* \textasciicircum\marg{superscript} \_\marg{subscript} \marg{contents}
+% \end{syntax}
+% For all of the operators predefined by \pkg{amsmath}~\autocite{amsmath},
+% which are shown in table~\ref{tab:amsmath-operators},
+% \pkg{moremath} declares delimited versions.
+% The name of those commands follows the scheme \cs[no-index]{\meta{prefix}\meta{op}},
+% where \meta{prefix} is one of |p|, |b|, |B|, |v|, or |V|
+% and \meta{op} is the name of one of the operators shown in table~\ref{tab:amsmath-operators}.
+%
+% The \meta{prefix}es |p|, |b|, |B|, |v|, and |V| stand for
+% parenthesis, brackets, braces, single vertical lines (\enquote{\(\vert\)}), and double vertical lines
+% (\enquote{\(\Vert\)}) respectively.
+%
+% The commands accept a \meta{size cmd} optional argument, which is usually one of
+% \cs{big}, \cs{Big}, \cs{bigg} and \cs{Bigg}.
+% These \meta{size cmd}s are used to change the size of the delimiters.
+%
+% The commands also accept sub- and superscripts,
+% which have to be issued \emph{after} the optional argument (if present),
+% but before the mandatory argument \meta{contents}.
+%
+% The starred variant uses automatic scaling for the delimiters depending on the height of its contents.
+% \end{function}
+%
+% \paragraph{Examples}
+%
+% The following examples showcase the use of those predefined delimited operators:
+% \begin{enumerate}
+% \item Different delimited operators without any scaling:
+%
+% \begin{verbatim}
+% \[
+% \pcos{x} \times \bcos{y}
+% \times \Bcos{z} \times \vcos{a}
+% \times \Vcos{b}
+% \]
+% \end{verbatim}
+% \[
+% \pcos{x} \times \bcos{y}
+% \times \Bcos{z} \times \vcos{a}
+% \times \Vcos{b}
+% \]
+%
+% \item Delimited operator with automatic scaling:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcos*{\frac{x^{2}}{2}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pcos*{\frac{x^{2}}{2}}
+% \]
+% \end{minipage}
+%
+% \item Delimited operator with manual scaling:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcos[\Big]{\frac{x^{2}}{2}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pcos[\Big]{\frac{x^{2}}{2}}
+% \]
+% \end{minipage}
+%
+% \item Delimited operator with subscript:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \plog_{10}{1+x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% ^^X XXX: Using an underscore is broken here (because of l3doc???) therefore I
+% ^^X use "\sb" instead.
+% \[
+% \plog\sb{10}{1+x}
+% \]
+% \end{minipage}
+%
+% \item Delimited operator with superscript:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcos^{2}{x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pcos^{2}{x}
+% \]
+% \end{minipage}
+%
+% \item Delimited operator with both sub- and superscript and manual scaling:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcos[\Big]^{2}_{x}{\frac{x}{2}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% ^^X XXX: Again use "\sb" instead of "_" because of l3doc
+% \[
+% \pcos[\Big]^{2}\sb{x}{\frac{x}{2}}
+% \]
+% \end{minipage}
+% \end{enumerate}
+%
+%
+% \subsection{Declaring New Delimited Operators}
+% \label{sec:delim-op-new}
+%
+% \begin{function}{\DeclareDelimitedOperator}
+% \begin{syntax}
+% \cs{DeclareDelimitedOperator}\marg{new op}\marg{op}\marg{delim}
+% \end{syntax}
+% Creates a new delimited operator,
+% the name of the new command will be \meta{new op}.
+% The \meta{op} is the command of the operator to use,
+% which is usually a command declared with
+% \cs[module=amsmath,replace=false]{DeclareMathOperator}.
+% \meta{delim} is the command to use as paired delimiter,
+% it is expected to behave like a paired delimiter declared by
+% \pkg{mathtools}~\autocite{mathtools}
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter}.
+% \end{function}
+%
+% \paragraph{Example: Creating a New Delimited Operator}
+% The following code creates a new operator and a paired delimiter
+% and uses it afterwards to declare a paired operator.
+% \begin{verbatim}
+% \documentclass{scrartcl}
+%
+% \DeclareMathOperator{\glorb}{glorb}
+% \DeclarePairedDelimiter{\inparen}{\lparen}{\rparen}
+% \DeclarePairedOperator{\pglorb}{\glorb}{\inparen}
+%
+% \begin{document}
+% \[
+% \pglorb{a}
+% \]
+% \end{document}
+% \end{verbatim}
+% The result then looks like this:
+% \[
+% \pglorb{a}
+% \]
+%
+%
+% \section{Vector Calculus Operators}
+% \label{sec:vector-calculus}
+%
+% \DescribeOption{no-vector}
+% The commands in this section are only declared if the option |no-vector|
+% has not been given to the package as a load time option.
+%
+% \DescribeOption{vcenter}
+% The option "vcenter" controls if the symbols for the operators described below
+% should be vertically centered along the math axis. Its default value is "true".
+%
+% This option only shows its effects if other options like "arrownabla",
+% "arrowlaplace", or "boldnabla" are set to "true".
+% Like in the example below:
+% \begin{quote}
+% \begin{verbatim}
+% \begin{gather*}
+% \grad f(x) \quad \grad[arrownabla,vcenter=false] f(x)
+% \quad \grad[arrownabla,vcenter=true] f(x)\\
+% \laplacian f(x) \quad \laplacian[arrowlaplace,vcenter=false] f(x)
+% \quad \laplacian[arrowlaplace,vcenter=true] f(x)
+% \end{gather*}
+% \end{verbatim}
+% \begin{gather*}
+% \grad f(x) \quad \grad[arrownabla,vcenter=false] f(x)
+% \quad \grad[arrownabla,vcenter=true] f(x)\\
+% \laplacian f(x) \quad \laplacian[arrowlaplace,vcenter=false] f(x)
+% \quad \laplacian[arrowlaplace,vcenter=true] f(x)
+% \end{gather*}
+% \end{quote}
+%
+% All of the commands described in this section take key-value options
+% as optional argument, which are described in section~\ref{sec:options-vec-calc}
+%
+% \subsection{Gradient Operator Commands}
+% \label{sec:grad-op-cmds}
+%
+% \subsubsection{Standalone Operator Command}
+% \label{sec:grad-op-standalone}
+%
+% \begin{function}[updated=2024-07-08]{
+% \grad,
+% }
+% \begin{syntax}
+% \cs{grad} \oarg{kv opts}
+% \cs{grad} \oarg{kv opts} \_\marg{subscript}
+% \end{syntax}
+% The \cs{grad} command produces a gradient operator
+% looking like this \enquote{\(\grad\)} by default.
+% The optional argument \meta{kv opts} accepts the key-value options
+% described in section~\ref{sec:options-vec-calc},
+% whitespace between the command name
+% and \oarg{kv~opts} is \emph{not allowed}.
+% An optional subscript using "_" may be given after the optional argument.
+% \end{function}
+%
+% \paragraph{Examples of Use}
+% \begin{enumerate}
+% \item Standalone gradient operator (with and without subscript):
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \grad f(x), \quad \grad_{x} f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \grad f(x), \quad \grad\sb{x} f(x)
+% \]
+% \end{minipage}
+%
+% \item Bold version of the gradient operator:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \grad[boldnabla] f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \grad[boldnabla] f(x)
+% \]
+% \end{minipage}
+%
+% \item Gradient operator with an arrow:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \grad[arrownabla] f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}
+% \begin{minipage}{.49\linewidth}
+% \[
+% \grad[arrownabla] f(x)
+% \]
+% \end{minipage}
+% \end{enumerate}
+%
+% \subsubsection{Operators with Delimiters}
+% \label{sec:grad-op-delim}
+%
+% \begin{function}{
+% \pgrad,
+% \bgrad,
+% \Bgrad,
+% \vgrad,
+% \Vgrad
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}grad} \oarg{size cmd} \marg{content}
+% \cs[no-index]{\meta{delim}grad} \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}grad} \oarg{size cmd} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}grad} \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}grad}* \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}grad}* \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}grad} family of commands produces
+% gradient operator which is followed by \meta{contents} inside delimiters.
+% The delimiter is determined by the first letter of the command \meta{delim},
+% which may be "p" for parenthesis, "b" for brackets, "B" for braces,
+% "v" for a single vertical line (\enquote{\(\vert\)}), or "V" for a double
+% vertical line (\enquote{\(\Vert\)}).
+%
+% The commands accept either a \meta{size command} as optional argument,
+% which gets passed to \pkg{mathtools}~\autocite{mathtools} paired delimiter
+% or a list of \meta{key-value option}s,
+% the \meta{kv opts} \emph{must} be given using the complete syntax,
+% i.e.\ \meta{key}"="\meta{value},
+% shorthands for options with an implicit default value (|arrownabla|),
+% will not work here.
+% The \meta{size~command} is usually one of \cs{big}, \cs{Big}, \cs{bigg} and
+% \cs{Bigg}.
+% Valid \meta{kv opts} are all options described in section~\ref{sec:options-vec-calc}
+% and the key "scale" which accepts a \meta{size cmd}.
+%
+% \begin{quote}
+% \textbf{Note:}\\
+% Do not mix \meta{kv opts} and \meta{size cmd},
+% use either |\pgrad[\big]{f(x)}| or |\pgrad[arrownabla=true,scale=\big]{f(x)}|.
+% \end{quote}
+%
+% \medskip\noindent
+% An optional \meta{subscript} may be given between the optional argument,
+% and \meta{contents}. One use case for this subscript is to write formulae
+% using the so called Feynman-notation, where the gradient operator acts
+% only on one variable.
+%
+% The starred version of the commands automatically scale the delimiters
+% with its contents.
+% \end{function}
+%
+% \paragraph{Examples:}
+% \begin{enumerate}
+% \item Gradient operator with non-scaled delimiters:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pgrad{1+\vec{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pgrad{1+\vec{x}}
+% \]
+% \end{minipage}
+%
+% \item Bold version:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pgrad[boldnabla=true]{1+\vec{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pgrad[boldnabla=true]{1+\vec{x}}
+% \]
+% \end{minipage}
+%
+% \item Gradient operator with automatically scaled delimiters:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pgrad*{\frac{1}{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pgrad*{\frac{1}{x}}
+% \]
+% \end{minipage}
+%
+% \item Manually scaled version:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \begin{gather*}
+% \pgrad[\Big]{\frac{1}{x}}\\[.5ex]
+% \pgrad[scale=\Big]{\frac{1}{x}}
+% \end{gather*}
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \begin{gather*}
+% \pgrad[\Big]{\frac{1}{x}}\\[.5ex]
+% \pgrad[scale=\Big]{\frac{1}{x}}
+% \end{gather*}
+% \end{minipage}
+%
+% \item Feynman-Notation:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pgrad_{x}{x+y+z}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pgrad\sb{x}{x+y+z}
+% \]
+% \end{minipage}
+% \end{enumerate}
+%
+% \subsection{Divergence Operator Commands}
+% \label{sec:div-op-cmds}
+%
+% \subsubsection{Standalone Operator Command}
+% \label{sec:div-op-standalone}
+%
+% \begin{function}[updated=2024-07-08]{\divergence}
+% \begin{syntax}
+% \cs{divergence} \oarg{kv opts}
+% \cs{divergence} \oarg{kv opts} \_\marg{subscript}
+% \end{syntax}
+% The \cs{divergence} command produces the divergence operator
+% \enquote{\(\divergence\)},
+% its usage is analogous to the use of the \cs{grad} command,
+% which is described in section~\ref{sec:grad-op-standalone}.
+% \end{function}
+%
+% \paragraph{Examples}
+% \begin{enumerate}
+% \item Standalone divergence operator
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \divergence f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\divergence f\]
+% \end{minipage}
+%
+% \item Standalone divergence operator
+% with an arrow over the gradient operator
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \divergence[arrownabla] f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\divergence[arrownabla] f(x)\]
+% \end{minipage}
+%
+% \item Standalone divergence operator with subscript
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \divergence_{x} f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% ^^X We need to use \sb because of the subscript package
+% \begin{minipage}{.49\linewidth}
+% \[\divergence\sb{x} f(x)\]
+% \end{minipage}
+% \end{enumerate}
+% \subsubsection{Operators with Delimiters}
+% \label{sec:div-op-delim}
+%
+% \begin{function}{
+% \pdiv,
+% \bdiv,
+% \Bdiv,
+% \vdiv,
+% \Vdiv
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}div} \oarg{size cmd} \marg{content}
+% \cs[no-index]{\meta{delim}div} \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}div} \oarg{size cmd} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}div} \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}div}* \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}div}* \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}div} family of commands produces the divergence
+% operator with its arguments placed inside delimiters.
+% The usage of these commands is analogous to the \cs[no-index]{\meta{delim}grad}
+% family of commands described in section~\ref{sec:grad-op-delim}.
+% \end{function}
+%
+% \paragraph{Examples}
+%
+% \begin{enumerate}
+% \item Divergence operator with parenthesis and no scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pdiv{1+x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\pdiv{1+x}\]
+% \end{minipage}
+% \item Bold version with manual scaling and subscript
+%
+% \begin{verbatim}
+% \[
+% \pdiv[boldnabla=true,scale=\Big]_{x}{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \[\pdiv[boldnabla=true,scale=\Big]\sb{x}{1+\frac{1}{x}}\]
+%
+% \item Automatic scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pdiv*{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\pdiv*{1 + \frac{1}{x}}\]
+% \end{minipage}
+% \end{enumerate}
+%
+% \subsection{Curl Operator Commands}
+% \label{sec:curl-op-cmds}
+%
+% \subsubsection{Standalone Operator Command}
+% \label{sec:curl-op-standalone}
+%
+% \begin{function}[updated=2024-07-08]{\curl}
+% \begin{syntax}
+% \cs{curl} \oarg{kv opts}
+% \cs{curl} \oarg{kv opts} \_\marg{subscript}
+% \end{syntax}
+% The \cs{curl} command produces the curl operator \enquote{\(\curl\)},
+% its usage is analogous to the use of the \cs{grad} command
+% described in section~\ref{sec:grad-op-standalone}.
+% \end{function}
+%
+% \paragraph{Examples}
+% \begin{enumerate}
+% \item Standalone curl operator
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \curl f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\curl f(x)\]
+% \end{minipage}
+%
+% \item Standalone curl operator with an arrow over the gradient operator
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \curl[arrownabla] f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\curl[arrownabla] f(x)\]
+% \end{minipage}
+%
+% \item Standalone curl operator with subscript
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \curl_{x} f(x,y)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\curl\sb{x} f(x,y)\]
+% \end{minipage}
+% \end{enumerate}
+%
+% \subsubsection{Operators with Delimiters}
+% \label{sec:curl-op-delim}
+%
+% \begin{function}{
+% \pcurl,
+% \bcurl,
+% \Bcurl,
+% \vcurl,
+% \Vcurl
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}curl} \oarg{size cmd} \marg{content}
+% \cs[no-index]{\meta{delim}curl} \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}curl} \oarg{size cmd} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}curl} \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}curl}* \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}curl}* \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}curl} family of commands produce the curl operator
+% with its arguments placed inside delimiters.
+% The usage of these commands is analogous to the \cs[no-index]{\meta{delim}grad}
+% family of commmands described in section~\ref{sec:grad-op-delim}.
+% \end{function}
+%
+% \paragraph{Examples}
+% \begin{enumerate}
+% \item Curl operator with parenthesis without scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcurl{1+x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\pcurl{1+x}\]
+% \end{minipage}
+%
+% \item Bold version with manual scaling and subscript
+%
+% \begin{verbatim}
+% \[
+% \pcurl[boldnabla=true,scale=\Big]_{x}{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \[
+% \pcurl[boldnabla=true,scale=\Big]\sb{x}{1 + \frac{1}{x}}
+% \]
+%
+% \item Automatic scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcurl*{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\pcurl*{1 + \frac{1}{x}}\]
+% \end{minipage}
+% \end{enumerate}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Fixed example to match description.
+% }
+%
+%
+% \subsection{Laplace Operator Commands}
+% \label{sec:laplace-op-cmds}
+%
+% This section describes commands which can be used to typeset a Laplace
+% operator.
+%
+%
+% Like the commands described in sections~\ref{sec:grad-op-cmds},
+% \ref{sec:div-op-cmds}, and~\ref{sec:curl-op-cmds}
+% the commands in this section accept key-value options via an optional
+% argument.
+% There is some deviation from the options compared to the above commands:
+% The "arrownabla" option is ignored,
+% instead the "arrowlaplace" option produces an arrow over the operator.
+% The "boldnabla" option on the other hand is not ignored.
+% Finally the "delta-laplace" option replaces the symbol used
+% for the operator from \(\laplacian\) to \(\laplacian[delta-laplace]\)
+%
+% \subsubsection{Standalone Operator Command}
+% \label{sec:laplace-op-standalone}
+%
+%
+% \begin{function}[updated=2024-07-08]{\laplacian}
+% \begin{syntax}
+% \cs{laplacian} \oarg{kv opts}
+% \cs{laplacian} \oarg{kv opts} \_\marg{subscript}
+% \end{syntax}
+% The \cs{laplacian} command produces a Laplace operator,
+% which looks by default like this: \(\laplacian\).
+%
+% Its interface is analogous to the \cs{grad}, \cs{divergence},
+% and \cs{curl} commands described above,
+% with the difference in key-value options described at the start of this
+% subsection.
+% \end{function}
+%
+%
+% \subsubsection{Operators with Delimiters}
+% \label{sec:laplace-op-delim}
+%
+% \begin{function}{
+% \plaplacian,
+% \blaplacian,
+% \Blaplacian,
+% \vlaplacian,
+% \Vlaplacian
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}laplacian} \oarg{size cmd} \marg{content}
+% \cs[no-index]{\meta{delim}laplacian} \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}laplacian} \oarg{size cmd} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}laplacian} \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \cs[no-index]{\meta{delim}laplacian}* \oarg{kv opts} \marg{content}
+% \cs[no-index]{\meta{delim}laplacian}* \oarg{kv opts} \_\marg{subscript} \marg{content}
+% \end{syntax}
+% \end{function}
+%
+% \paragraph{Examples}
+% \begin{enumerate}
+% \item Laplace operator delimited by parenthesis without scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \plaplacian{1+x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\plaplacian{1+x}\]
+% \end{minipage}
+%
+% \item Version with arrow, manual scaling and subscript
+%
+% \begin{verbatim}
+% \[
+% \plaplacian[arrowlaplace=true,scale=\Big]_{x}{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \[
+% \plaplacian[arrowlaplace=true,scale=\Big]\sb{x}{1 + \frac{1}{x}}
+% \]
+%
+% \item Version with automatic scaling
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \plaplacian*{1 + \frac{1}{x}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\plaplacian*{1 + \frac{1}{x}}\]
+% \end{minipage}
+%
+% \item Using a delta as symbol for the Laplacian
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \plaplacian[delta-laplace=true]{1+x}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\plaplacian[delta-laplace=true]{1+x}\]
+% \end{minipage}
+% \end{enumerate}
+%
+%
+% \subsection{^^X
+% Commands Producing a \foreignlanguage{french}{d'Alembert} operator
+% }
+% \label{sec:dalembert-op-cmds}
+%
+% \subsubsection{Standalone Operator Command}
+% \label{sec:dalembert-op-standalone}
+%
+% \begin{function}[
+% added = 2024-07-04,
+% updated=2024-07-08,
+% ]{\quabla}
+% \begin{syntax}
+% \cs{quabla} \oarg{kv~opts}
+% \cs{quabla} \oarg{kv~opts} \_\marg{subscript}
+% \end{syntax}
+% The \cs{quabla} command produces
+% the \foreignlanguage{french}{d'Alembert} operator \enquote{\(\quabla\)}.
+% This command accepts an optional subscript.
+% \end{function}
+%
+% The command is called \cs{quabla} because thats shorter and easier to type than
+% \cs[no-index]{dalembertian}.
+% If you want to have a command called \cs[no-index]{dalembertian},
+% put the following in your documents preamble.
+% \begin{verbatim}
+% \NewCommandCopy\quabla\dalembertian
+% \end{verbatim}
+%
+% \paragraph{Example of Use:}
+% \begin{quote}
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \quabla f(x)
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\quabla f(x)\]
+% \end{minipage}
+% \end{quote}
+%
+%
+% \subsubsection{Operators with Delimiters}
+% \label{sec:dalembert-op-delim}
+%
+% \begin{function}[added = 2024-07-04]{
+% \pquabla,
+% \bquabla,
+% \Bquabla,
+% \vquabla,
+% \Vquabla,
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}quabla} \oarg{size~cmd} \marg{contents}
+% \cs[no-index]{\meta{delim}quabla} \oarg{kv~opts} \marg{contents}
+% \cs[no-index]{\meta{delim}quabla} \oarg{size~cmd} \_\marg{subscript} \marg{contents}
+% \cs[no-index]{\meta{delim}quabla} \oarg{kv~opts} \_\marg{subscript} \marg{contents}
+% \cs[no-index]{\meta{delim}quabla}* \oarg{kv~opts} \marg{contents}
+% \cs[no-index]{\meta{delim}quabla}* \oarg{kv~opts} \_\marg{subscript} \marg{contents}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}quabla} family of commands produce a
+% \foreignlanguage{french}{d'Alembert} operator with <contents> placed inside
+% delimiters.
+% Their usage is analogous to the \cs[no-index]{\meta{delim}grad} family of
+% commands described in section~\ref{sec:grad-op-delim}.
+% \end{function}
+%
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Fixed syntax description of standalone operators not matching reality.
+% }
+%
+%
+% \section{Row- and Column Vectors}
+% \label{sec:rc-vectors}
+%
+% \DescribeOption{no-crvector}
+% The command in this section are only declared if the option |no-crvector|
+% has not been given as a package option.
+%
+% ^^X \DescribeOption{delimiter}
+% ^^X \DescribeOption{fill}
+% ^^X \DescribeOption{align}
+% ^^X The commands in this section all accept key-value options as optional argument.
+% Valid keys are "delimiter", "fill", and "align",
+% their usage is described in section~\ref{sec:options-matrix}.
+%
+% \begin{function}{
+% \cvector,
+% \rvector
+% }
+% \begin{syntax}
+% \cs{cvector} \oarg{kv opts} \marg{clist}
+% \cs{rvector} \oarg{kv opts} \marg{clist}
+% \end{syntax}
+% The commands \cs{cvector} and \cs{rvector} produce row and column vectors
+% respectively. Both of them accept key-value options as optional argument
+% \meta{kv opts}. Valid keys and values are described in section~\ref{sec:options-matrix}.
+%
+% The mandatory argument \meta{clist} is a comma-separated-list,
+% whose elements are the entries of the column/row vector.
+% If a comma has to appear inside an entry the entire entry has to be wrapped
+% in braces.
+%
+% The delimiter of the row or column vectors depends on the current value of
+% the option |delimiter|, by default empty. The option |fill| has no effect
+% on the commands and is simply ignored.
+%
+% \begin{texnote}
+% If you were to define your own \env{matrix*}-like environment
+% called \env{mymatrix*},
+% which has an interface compatible to \pkg{mathtools}'s \env{matrix*}
+% family of environments,
+% you could make use of it by setting the value of |delimiter| to |my|.
+% \end{texnote}
+% \end{function}
+%
+% \medbreak\noindent
+% \textbf{Examples:}
+% \begin{enumerate}
+% \item Column \enquote{vector} without delimiters:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \cvector{a_{1},a_{2},a_{3}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \cvector{a_{1},a_{2},a_{3}}
+% \]
+% \end{minipage}
+%
+% \item A column vectors delimited with parenthesis and different alignment:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \cvector[delimiter=p,align=c]{-1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \cvector[delimiter=p,align=c]{-1,2,3}
+% \]
+% \end{minipage}\\[1ex]
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \cvector[delimiter=p,align=r]{-1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \cvector[delimiter=p,align=r]{-1,2,3}
+% \]
+% \end{minipage}\\[1ex]
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \cvector[delimiter=p,align=l]{-1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \cvector[delimiter=p,align=l]{-1,2,3}
+% \]
+% \end{minipage}
+% \end{enumerate}
+%
+% \paragraph{Row- and Column Vectors with Predefined Delimiters}
+%
+% As vectors are commonly delimited by parenthesis, brackets, braces, etc.\
+% several shorthands producing delimited vectors are also available.
+% \begin{function}{
+% \pcvector,
+% \bcvector,
+% \Bcvector,
+% \vcvector,
+% \Vcvector,
+% \prvector,
+% \brvector,
+% \Brvector,
+% \vrvector,
+% \Vrvector,
+% \prvector,
+% \brvector,
+% \Brvector,
+% \vrvector,
+% \Vrvector
+% }
+% \begin{syntax}
+% \cs[no-index]{\meta{delim}cvector} \oarg{kv opts} \marg{clist}
+% \cs[no-index]{\meta{delim}rvector} \oarg{kv opts} \marg{clist}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}\meta{c or r}vector} family of commands,
+% accepts a list of key-value options as optional argument \meta{kv opts}.
+% Valid keys are described in section~\ref{sec:options-matrix}.
+%
+% The mandatory argument \meta{clist} is a comma-separated-list of
+% the entries of the vector.
+% If a comma needs to appear inside an entry of the vector,
+% that entry has to be wrapped in braces.
+%
+% \meta{delim} may have the value "p" for parenthesis,
+% "b" for brackets, "B" for braces, "v" for a single vertical line,
+% or "V" for a double vertical line.
+% \end{function}
+%
+% \subparagraph{Example}
+% \begin{quote}
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pcvector{a_{1},a_{2},a_{3}}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pcvector{a_{1},a_{2},a_{3}}
+% \]
+% \end{minipage}
+% \end{quote}
+%
+% \subsection{Small Versions for Inline Math}
+% \label{sec:rc-vectors-small}
+%
+% As the \env{matrix} and \env{matrix*} family of environments is unsuitable,
+% for inline math,
+% \pkg{mathtools}~\autocite{mathtools} provides the \env{smallmatrix}
+% and \env{smallmatrix*} family of environments.
+% This package provides analogous commands for row and column vectors
+% to be typeset in inline math mode.
+%
+% \begin{function}{
+% \smallcvector,
+% \smallrvector
+% }
+% \begin{syntax}
+% \cs{smallcvector} \oarg{kv opts} \marg{clist}
+% \cs{smallrvector} \oarg{kv opts} \marg{clist}
+% \end{syntax}
+% \cs{smallcvector} and \cs{smallrvector} produce column and row vectors
+% suitable for inline math.
+% Both commands accept the same optional key-value arguments as
+% \cs{cvector} and \cs{rvector}.
+% \end{function}
+%
+%
+% \medbreak\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{verbatim}
+% An inline version of \verb|\cvector| looks like this
+% \(\smallcvector{1,0}\).
+% \end{verbatim}
+% An inline version of \verb|\cvector| looks like this
+% \(\smallcvector{1,0}\).
+% \end{quote}
+%
+% \begin{function}{
+% \psmallcvector,
+% \bsmallcvector,
+% \Bsmallcvector,
+% \vsmallcvector,
+% \Vsmallcvector,
+% \psmallrvector,
+% \bsmallrvector,
+% \Bsmallrvector,
+% \vsmallrvector,
+% \Vsmallrvector,
+% }
+% \begin{syntax}
+% \cs{psmallcvector} \oarg{kv opts} \marg{clist}
+% \cs[no-index]{psmallrvector} \oarg{kv opts} \marg{clist}
+% \cs[no-index]{\meta{delim}small\meta{c or r}vector} \oarg{kv opts} \marg{clist}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}small\meta{c or r}vector} family of commands
+% like \cs{psmallcvector} produce small inline math version of row and column
+% vectors. Their interface is identical to the commands described above.
+% \end{function}
+%
+% \medbreak\noindent
+% \textbf{Example:}\nobreak
+% \begin{quote}
+% \begin{verbatim}
+% An inline version of \verb|\pcvector| looks like this
+% \(\psmallcvector{1,0}\).
+% \end{verbatim}
+% An inline version of \verb|\pcvector| looks like this
+% \(\psmallcvector{1,0}\).
+% \end{quote}
+%
+%
+% \section{Shorthands for Simple Matrices}
+% \label{sec:matrices}
+%
+% \DescribeOption{no-matrix}
+% The commands in this section are only defined if the option "no-matrix"
+% \emph{has not been given} to the package at load-time.
+%
+%
+% \subsection{(Anti-)diagonal Matrices}
+% \label{sec:diagonal-matrices}
+%
+% \begin{function}{
+% \diagmat,
+% \antidiagmat,
+% }
+% \begin{syntax}
+% \cs{diagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{antidiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% \cs{diagmat} and \cs{antidiagmat} produce a diagonal or anti-diagonal matrix
+% respectively.
+% The optional argument \meta{kv~opts} accepts the key value options
+% described in section~\ref{sec:options-matrix}.
+%
+% The key "fill" determines the contents of the matrix entries
+% which are not part of the (anti-)diagonal,
+% its default value is |{}| i.e.\ empty.
+% The key "align" determines the alignment of the entries inside the
+% matrix, valid values are usually "l", "c", and "r",
+% the default is "c".
+% The key "delimiter" determines the delimiter around the matrix,
+% its default value is |{}| (none).
+% Valid values for the delimiters are "p" for parenthesis,
+% "b" for brackets, "B" for braces, "v" for a single vertical line
+% (\enquote{\(\vert\)}), and "V" for a double vertical line (\enquote{\(\Vert\)}).
+% See the \pkg{mathtools} manual~\autocite{mathtools} for more information.
+%
+% \begin{texnote}
+% The value of "delimiter" gets inserted inside the |\begin{#1matrix*}|
+% and |\end{#1matrix*}| commands.
+% Therefore it would be possible to define your own \env{matrix*}
+% like environment,
+% called for example \env{mymatrix*} and set "delimiter=my"
+% to make use of it.
+% \end{texnote}
+%
+% The mandatory argument \meta{diagonal} has to be a comma separated list
+% of the entries of the (anti-)diagonal.
+% If an entry of the diagonal needs to contain a comma "," the entire entry
+% has to be wrapped in braces.
+% \end{function}
+%
+% \medskip\noindent
+% \textbf{Examples:}
+% \begin{enumerate}
+% \item A diagonal and an anti-diagonal matrix without delimiters:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \begin{gather*}
+% \diagmat{1,2,3}\\[.5ex]
+% \antidiagmat{1,2,3}
+% \end{gather*}
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \begin{gather*}
+% \diagmat{1,2,3}\\[.5ex]
+% \antidiagmat{1,2,3}
+% \end{gather*}
+% \end{minipage}
+% \item A diagonal matrix delimited by parenthesis filled with zeros:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \diagmat[delimiter=p,fill=0]{1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \diagmat[delimiter=p,fill=0]{1,2,3}
+% \]
+% \end{minipage}
+%
+% \item A diagonal matrix filled with a symbol:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \diagmat[fill=\square]{1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\diagmat[fill=\square]{1,2,3}\]
+% \end{minipage}
+%
+% \item Diagonal matrices with different alignment:
+%
+% \begin{verbatim}
+% \[
+% \diagmat[delimiter=p,align=c,fill=0]{-1,-2,-3} \qquad
+% \diagmat[delimiter=p,align=l,fill=0]{-1,-2,-3} \qquad
+% \diagmat[delimiter=p,align=r,fill=0]{-1,-2,-3}
+% \]
+% \end{verbatim}
+% \[
+% \diagmat[delimiter=p,align=c,fill=0]{-1,-2,-3} \qquad
+% \diagmat[delimiter=p,align=l,fill=0]{-1,-2,-3} \qquad
+% \diagmat[delimiter=p,align=r,fill=0]{-1,-2,-3}
+% \]
+% \end{enumerate}
+%
+%
+% \paragraph{Shorthands for (Anti-)diagonal Matrices with Delimiters}
+%
+% As matrices are more often than not written inside of delimiters,
+% \pkg{moremath} provides several shorthands for producing those matrices
+% without having to set the "delimiter" key explicitly.
+% \begin{function}{
+% \pdiagmat,
+% \bdiagmat,
+% \Bdiagmat,
+% \vdiagmat,
+% \Vdiagmat
+% }
+% \begin{syntax}
+% \cs{pdiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{bdiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Bdiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{vdiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Vdiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}diagmat} family of commands provides
+% shorthands for producing a delimited (anti-)diagonal matrix
+% without having to set the "delimiter" key explicitly every time.
+% The pre-set "delimiter" may be overwritten by explicitly passing "delimiter"
+% as a key-value option.
+%
+% The optional argument \meta{kv~opts} accepts the same key-value arguments
+% as \cs{diagmat}.
+% \end{function}
+%
+% \medskip\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pdiagmat{1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pdiagmat{1,2,3}
+% \]
+% \end{minipage}
+% \end{quote}
+%
+% \begin{function}{
+% \pantidiagmat,
+% \bantidiagmat,
+% \Bantidiagmat,
+% \vantidiagmat,
+% \Vantidiagmat
+% }
+% \begin{syntax}
+% \cs{pantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{bantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Bantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{vantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Vantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% The \cs[no-index]{\meta{delim}antidiagmat} family of commands behaves
+% like the \cs[no-index]{\meta{delim}diagmat} commands described above,
+% except they produce anti-diagonal matrices.
+% \end{function}
+%
+% \medskip\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pantidiagmat{1,2,3}
+% \]
+% \end{verbatim}
+% \end{minipage}
+% \begin{minipage}{.49\linewidth}
+% \[
+% \pantidiagmat{1,2,3}
+% \]
+% \end{minipage}
+% \end{quote}
+%
+%
+% \subsubsection{Small Versions for Inline Math}
+% \label{sec:matrices-small}
+%
+% \pkg{mathtools} defines special matrix environments for use in
+% inline math mode,
+% the \env{smallmatrix} and \env{smallmatrix*} family of environments.
+% \pkg{moremath} provides for the case of typesetting an (anti-)diagonal
+% matrix several commands which utilize these inline math versions.
+%
+% \begin{function}{
+% \smalldiagmat,
+% \smallantidiagmat,
+% }
+% \begin{syntax}
+% \cs{smalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{smallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% The \cs{smalldiagmat} and \cs{smallantidiagmat} commands behave like
+% their non-"small" counterpart described above,
+% see their description for more information.
+% \end{function}
+%
+% \medskip\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{verbatim}
+% An inline version of a diagonal matrix looks like this
+% \(\smalldiagmat{1,1}\).
+% \end{verbatim}
+% An inline version of a diagonal matrix looks like this
+% \(\smalldiagmat{1,1}\).
+% \end{quote}
+%
+% \begin{function}{
+% \psmalldiagmat,
+% \bsmalldiagmat,
+% \Bsmalldiagmat,
+% \vsmalldiagmat,
+% \Vsmalldiagmat,
+% }
+% \begin{syntax}
+% \cs{psmalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{bsmalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Bsmalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{vsmalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Vsmalldiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% Like the \cs[no-index]{\meta{delim}diagmat} commands described above
+% there are also shorthand commands for producing an inline math version
+% of a diagonal matrix with pre-set delimiters.
+% \end{function}
+%
+% \medbreak\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{verbatim}
+% An inline math delimited diagonal matrix looks like this
+% \(\psmalldiagmat{1,1}\).
+% \end{verbatim}
+% An inline math delimited diagonal matrix looks like this
+% \(\psmalldiagmat{1,1}\).
+% \end{quote}
+%
+% \begin{function}{
+% \psmallantidiagmat,
+% \bsmallantidiagmat,
+% \Bsmallantidiagmat,
+% \vsmallantidiagmat,
+% \Vsmallantidiagmat,
+% }
+% \begin{syntax}
+% \cs{psmallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{bsmallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Bsmallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{vsmallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \cs{Vsmallantidiagmat} \oarg{kv opts} \marg{diagonal}
+% \end{syntax}
+% Like the \cs[no-index]{\meta{delim}antidiagmat} commands described above
+% there are also shorthand commands for producing inline math versions
+% of anti-diagonal matrices inside of delimiters.
+% \end{function}
+%
+% \medbreak\noindent
+% \textbf{Example:}
+% \begin{quote}
+% \begin{verbatim}
+% A delimited version of an inline math anti-diagonal matrix
+% looks like this \(\psmallantidiagmat{1,1}\).
+% \end{verbatim}
+% A delimited version of an inline math anti-diagonal matrix
+% looks like this \(\psmallantidiagmat{1,1}\).
+% \end{quote}
+%
+% \subsection{Identity Matrices}
+% \label{sec:id-matrices}
+%
+% As identity matrices are always quadratic,
+% one can further simplify the typesetting of identity matrices to a command,
+% which constructs the identity matrix from the number of dimensions.
+% The commands in this subsection perform this.
+%
+% \begin{function}[added = 2024-07-04]{
+% \idmat,
+% \smallidmat,
+% }
+% \begin{syntax}
+% \cs{idmat} \oarg{kv~opts} \marg{dimension}
+% \cs{smallidmat} \oarg{kv~opts} \marg{dimension}
+% \end{syntax}
+% The \cs{idmat} command produces an identity matrix.
+% The optional argument <kv~opts> accepts any valid \emph{matrix} key-value
+% arguments,
+% which are described in section~\ref{sec:options-matrix}.
+% The mandatory argument <dimension> expects a \emph{positive} integer,
+% which specifies the dimensions of the identity matrix.
+%
+% The \cs{smallidmat} command behaves like the \cs{idmat} command,
+% except it produces a matrix suitable for inline math mode.
+%
+% \begin{texnote}
+% The maximum number of columns is determined by the \TeX{} counter
+% "MaxMatrixCols",
+% which has a default value of 10.
+% See \textcite{amsmath} for more information.
+% \end{texnote}
+% \end{function}
+%
+%
+% \begin{function}[added = 2024-07-04]{
+% \pidmat,
+% \bidmat,
+% \Bidmat,
+% \vidmat,
+% \Vidmat
+% }
+% \begin{syntax}
+% \cs{pidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{bidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{Bidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{vidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{Vidmat} \oarg{kv~opts} \marg{dimension}
+% \end{syntax}
+% Like the \cs[no-index]{\meta{delim}diagmat} commands,
+% the \cs[no-index]{\meta{delim}idmat} commands produce an identity matrix
+% with a pre-set delimiter around the matrix,
+% i.e.\ they behave like \cs{idmat}|[delimiter = |<delim>|]|\marg{dimension}.
+% <delim> can be "p" for parenthesis,
+% "b" for brackets,
+% "B" for braces,
+% "v" for a single vertical line (\enquote{\(\vert\)}),
+% or "V" for a double vertical line (\enquote{\(\Vert\)}).
+%
+% Furthermore these commands accept the same <kv~opts> as the \cs{idmat} command.
+% \end{function}
+%
+% \begin{function}[added = 2024-07-04]{
+% \psmallidmat,
+% \bsmallidmat,
+% \Bsmallidmat,
+% \vsmallidmat,
+% \Vsmallidmat
+% }
+% \begin{syntax}
+% \cs{psmallidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{bsmallidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{Bsmallidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{vsmallidmat} \oarg{kv~opts} \marg{dimension}
+% \cs{Vsmallidmat} \oarg{kv~opts} \marg{dimension}
+% \end{syntax}
+% These commands are provide inline math suitable versions of the
+% \cs[no-index]{\meta{delim}idmat} commands described above.
+% See their description for more information.
+%
+% The commands accept any of the key-value options described in section~\ref{sec:options-matrix}
+% as optional argument <kv~opts>.
+% \end{function}
+%
+% \paragraph{Examples of Use}
+% \begin{enumerate}
+% \item Identity matrix without delimiters:
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \idmat{3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\idmat{3}\]
+% \end{minipage}
+%
+% \item Identity matrices with different delimiters:
+%
+% \begin{verbatim}
+% \[
+% \pidmat{3}\text{,}\quad \bidmat{3}\text{,}\quad
+% \Bidmat{3}\text{,}\quad \vidmat{3}\text{,}\quad
+% \Vidmat{3}
+% \]
+% \end{verbatim}
+% \[
+% \pidmat{3}\text{,}\quad
+% \bidmat{3}\text{,}\quad
+% \Bidmat{3}\text{,}\quad
+% \vidmat{3}\text{,}\quad
+% \Vidmat{3}
+% \]
+%
+% \item Inline math versions of identity matrices with delimiters:
+%
+% \begin{verbatim}
+% Inline math mode matrices look like this:
+% \(\psmallidmat{2}\), \(\bsmallidmat{2}\), \(\Bsmallidmat{2}\),
+% \(\vsmallidmat{2}\), \(\Vsmallidmat{2}\).
+% \end{verbatim}
+% Inline math mode matrices look like this:
+% \(\psmallidmat{2}\), \(\bsmallidmat{2}\), \(\Bsmallidmat{2}\),
+% \(\vsmallidmat{2}\), \(\Vsmallidmat{2}\).
+%
+% \item Identity matrix using the "fill" option for the non-diagonal elements
+%
+% \begin{minipage}{.49\linewidth}
+% \begin{verbatim}
+% \[
+% \pidmat[fill=\star]{3}
+% \]
+% \end{verbatim}
+% \end{minipage}\hfill
+% \begin{minipage}{.49\linewidth}
+% \[\pidmat[fill=\star]{3}\]
+% \end{minipage}
+% \end{enumerate}
+%
+%
+% \section{Shorthands for Absolute Value and Norm}
+% \label{sec:shorthands}
+%
+% \DescribeOption{no-abs-shorthands}
+% The commands in this section are only declared if the option "no-abs-shorthands"
+% has not been given to the package as a load time option.
+%
+% \begin{function}{
+% \abs,
+% \norm
+% }
+% \begin{syntax}
+% \cs{abs} \oarg{size cmd} \marg{content}
+% \cs{abs}* \marg{content}
+% \cs{norm} \oarg{size cmd} \marg{content}
+% \cs{norm}* \marg{content}
+% \end{syntax}
+% The commands \cs{abs} and \cs{norm}, produce \(\abs{\cdot}\) and
+% \(\norm{\cdot}\) respectively.
+% These commands are simply paired delimiters defined using \pkg{mathtools}'
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter} command,
+% instruction on their usage can therefore be found in~\textcite{mathtools}.
+% \end{function}
+%
+%
+% \section{Vertically Centering Math Along the Math Axis}
+% \label{sec:vcenter}
+%
+% Sometimes it is useful to explicitly center a math symbol along the math axis.
+% A prominent example is the case of |\mathop{\boldsymbol\nabla}\nolimits|
+% vs.\ |\mathop{\nabla}\nolimits|,
+% as displayed below.
+% \[
+% \mathop{\boldsymbol\nabla}\nolimits f(x)
+% \quad \mathop{\nabla}\nolimits f(x)
+% \]
+% Here the bold nabla is slightly higher up than the non-bold version.
+%
+% \begin{function}[added=2024-07-08]{\VCenterMath}
+% \begin{syntax}
+% \cs{VCenterMath} \marg{contents}
+% \end{syntax}
+% \begin{danger}
+% The command \cs{VCenterMath} centers <contents> along the current math axis,
+% while adhering to the current math style.
+% This command is not in a \TeX{}-sense
+% \tn[no-index]{long}, i.e.\ it does not take \tn[no-index]{par} tokens.
+%
+% This command is somewhat dangerous as it utilizes the \tn{vcenter} primitive,
+% which leaves math mode and requires to reenter it.
+% \emph{Use at your own responsibility.}
+% \end{danger}
+% \begin{texnote}
+% This command is a wrapper around \tn{vcenter}, \cs{hbox:n}
+% and \tn{mathpalette}, it reenters math mode inside the hbox.
+% \end{texnote}
+% \end{function}
+%
+% With \cs{VCenterMath} it is possible to fix the above example to:
+% \begin{quote}
+% \begin{verbatim}
+% \[
+% \mathop{\VCenterMath{\boldsymbol\nabla}}\nolimits f(x)
+% \quad \mathop{\nabla}\nolimits f(x)
+% \]
+% \end{verbatim}
+% \[
+% \mathop{\VCenterMath{\boldsymbol\nabla}}\nolimits f(x)
+% \quad \mathop{\nabla}\nolimits f(x)
+% \]
+% \end{quote}
+%
+%
+% \part{Documentation for Class and Package Authors}
+% \label{sec:package-auth-doc}
+%
+% \section{Setting of Options}
+% \label{sec:authors-options}
+%
+% \begin{function}[updated = 2024-07-15]{
+% \moremath_setup:n
+% }
+% \begin{syntax}
+% \cs{moremath_setup:n} \marg{kv opts}
+% \end{syntax}
+% This functions sets the key-value options \meta{kv~opts} in the "moremath" namespace.
+% \end{function}
+%
+% \section{Delimited Operators}
+% \label{sec:authors-delim-op}
+%
+% \begin{function}[updated = 2024-07-15]{
+% \moremath_delim_op_noscale:NNnnn,
+% \moremath_delim_op_autoscale:NNnnn
+% }
+% \begin{syntax}
+% \cs{moremath_delim_op_noscale:NNnnn} \meta{math~op} \meta{delim}
+% \hspace*{2ex} \marg{sup~tl} \marg{sub~tl} \marg{tl}
+% \cs{moremath_delim_op_autoscale:NNnnn} \meta{math op} \meta{delim}
+% \hspace*{2ex} \marg{sup~tl} \marg{sub~tl} \marg{tl}
+% \end{syntax}
+% The two functions \cs{moremath_delim_op_noscale:NNnnn} and \cs{moremath_delim_op_autoscale:NNnnn}
+% provide a version of a delimited operator with no scaling or automatic scaling respectively.
+% The token list arguments \meta{sup~tl} and \meta{sub~tl} take the super- and subscript
+% of the operator respectively. Both of those token lists may be empty.
+%
+% The first argument to the function is a control sequence \meta{math~op},
+% which should be an operator declared with
+% \cs[module=amsmath,replace=false]{DeclareMathOperator}.
+% The second argument \meta{delim} has to be a control sequence of a paired delimiter,
+% as defined by \pkg{mathtools}'s
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter}.
+%
+% The final argument \meta{tl} is a list of arbitrary token to put inside the delimiters.
+% \end{function}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_delim_op_manuscale:NNnnnn,
+% \moremath_delim_op_manuscale:NNVnnn
+% }
+% \begin{syntax}
+% \cs{moremath_delim_op_manuscale:NNnnnn} \meta{math op} \meta{delim} \marg{scale cmd}
+% \hspace*{2ex} \marg{sup} \marg{sub} \marg{tl}
+% \end{syntax}
+% The function \cs{moremath_delim_op_manuscale:NNnnnn} typesets a math operator with
+% manual scaling of its delimiters.
+% Its arguments are identical to \cs{moremath_delim_op_noscale:NNnnn}
+% except for the argument \meta{scale~cmd} which has to be a token list containing
+% a \meta{size~cmd} that can be understood by \pkg{mathtools},
+% usually \cs{big}, \cs{Big}, \cs{bigg} and \cs{Bigg}.
+% \end{function}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_new_delim_op_command:NNN,
+% \moremath_new_delim_op_command:cNN,
+% }
+% \begin{syntax}
+% \cs{moremath_new_delim_op_command:NNN} \meta{new~csname} \meta{operator} \meta{delim}
+% \end{syntax}
+% The function \cs{moremath_new_delim_op_command:NNN} defines a new document level command
+% called \meta{new~csname}, utilizing the operator \meta{operator} and the delimiter \meta{delim}.
+%
+% \meta{operator} has to be a control sequence referring to an operator,
+% as declared by \cs{DeclareMathOperator}.
+%
+% \meta{delim} has to be a paired delimiter as defined by \pkg{mathtools}'
+% \cs{DeclarePairedDelimiter}.
+% \end{function}
+%
+% \section{Vector Calculus Typesetting}
+% \label{sec:authors-vec-calc}
+%
+% \subsection{Functions Producing Standalone Operators with Subscripts}
+% \label{sec:authors-vec-calc-operators}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_gradient_operator:n,
+% \moremath_divergence_operator:n,
+% \moremath_curl_operator:n,
+% \moremath_laplace_operator:n,
+% \moremath_dalembert_operator:n
+% }
+% \begin{syntax}
+% \cs{moremath_gradient_operator:n} \marg{subscript}
+% \cs{moremath_divergence_operator:n} \marg{subscript}
+% \cs{moremath_curl_operator:n} \marg{subscript}
+% \cs{moremath_laplace_operator:n} \marg{subscript}
+% \cs{moremath_dalembert_operator:n} \marg{subscript}
+% \end{syntax}
+% Each of these functions return a vector calculus operator,
+% with an (optional) subscript.
+% The argument \meta{subscript}, a token list, may be empty,
+% in which case no subscript is produced.
+%
+% The actual operator produced depends on the current settings
+% of the key-value options described in section~\ref{sec:pack-opts}
+% inside the current group.
+% \end{function}
+%
+% \subsection{Functions Producing Operators with Delimiters}
+% \label{sec:authors-vec-calc-delim-ops}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_delim_nabla_op_noscale:NNnn,
+% \moremath_delim_nabla_op_autoscale:NNnn,
+% }
+% \begin{syntax}
+% \cs{moremath_delim_nabla_op_noscale:NNnn} \meta{operator} \meta{delim}
+% \hspace*{2ex} \marg{sub} \marg{contents}
+%
+% \cs{moremath_delim_nabla_op_autoscale:NNnn} \meta{operator} \meta{delim}
+% \hspace*{2ex} \marg{sub} \marg{contents}
+% \end{syntax}
+% The usage of these functions is similar to the functions
+% \cs{moremath_delim_op_noscale:NNnnn} and \cs{moremath_delim_op_autoscale:NNnnn}
+% except for the missing superscript.
+%
+% The first argument \meta{operator} has to be a function which accepts one argument
+% (the subscript).
+% This is usually one of the \cs[no-index]{moremath_\meta{op}_operator:n} commands.
+%
+% The argument \meta{sub}, which may be empty,
+% is a token list to pass as the subscript to
+% \cs[no-index]{moremath_\meta{op}_operator:n}.
+%
+% The last argument \meta{contents} is a token list to put inside the delimiters.
+%
+% \end{function}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_delim_nabla_op_manuscale:NNnnn,
+% \moremath_delim_nabla_op_manuscale:NNVnn,
+% }
+% \begin{syntax}
+% \cs{moremath_delim_nabla_op_manuscale:NNnnn} \meta{operator} \meta{delim}
+% \hspace*{2ex} \marg{scale~cmd} \marg{sub} \marg{contents}
+% \end{syntax}
+% The usage of function is similar to the above functions
+% except for the additional argument \meta{scale~cmd} which is a token list
+% with a \meta{size~cmd} that should be understood by \pkg{mathtools}
+% (e.g.\ \cs{big}, \cs{Big}, etc.).
+% \end{function}
+%
+% \section{Formatting Matrices and Vectors}
+% \label{sec:authors-matrix}
+%
+% \begin{function}[updated=2024-07-15]{
+% \moremath_column_vector:nn,
+% \moremath_row_vector:nn,
+% \moremath_column_smallvector:nn,
+% \moremath_row_smallvector:nn
+% }
+% \begin{syntax}
+% \cs{moremath_column_vector:nn} \marg{delim spec tl} \marg{clist}
+% \cs{moremath_row_vector:nn} \marg{delim spec tl} \marg{clist}
+% \cs{moremath_column_smallvector:nn} \marg{delim spec tl} \marg{clist}
+% \cs{moremath_row_smallvector:nn} \marg{delim spec tl} \marg{clist}
+% \end{syntax}
+% These functions produce a column or row vector.
+% The "small"\meta{c~or~r}"vector" versions are intended for inline math mode.
+%
+% The first argument \meta{delim spec tl} should be the specification of
+% a delimiter, as used in the naming of the \env{matrix*} environments
+% by \pkg{mathtools}.
+%
+% The second argument \meta{clist}, is a comma-separated list of entries
+% of the vector.
+%
+% Of this commands the "c" versions produce column vectors, the "r" versions
+% produce row vectors.
+%
+% The alignment of the entries inside the vector depends on the current
+% value of the key "align".
+% \end{function}
+%
+% \begin{function}[
+% updated = 2024-07-04,
+% updated=2024-07-15,
+% ]{
+% \moremath_diagonal_matrix:nn,
+% \moremath_diagonal_matrix:nV,
+% \moremath_diagonal_matrix:Vn,
+% \moremath_diagonal_matrix:VV,
+% \moremath_antidiagonal_matrix:nn,
+% \moremath_antidiagonal_matrix:nV,
+% \moremath_antidiagonal_matrix:Vn,
+% \moremath_antidiagonal_matrix:VV,
+% \moremath_diagonal_smallmatrix:nn,
+% \moremath_diagonal_smallmatrix:nV,
+% \moremath_diagonal_smallmatrix:Vn,
+% \moremath_diagonal_smallmatrix:VV,
+% \moremath_antidiagonal_smallmatrix:nn,
+% \moremath_antidiagonal_smallmatrix:nV,
+% \moremath_antidiagonal_smallmatrix:Vn,
+% \moremath_antidiagonal_smallmatrix:VV,
+% }
+% \begin{syntax}
+% \cs{moremath_diagonal_matrix:nn} \marg{delim tl} \marg{clist}
+% \cs{moremath_antidiagonal_matrix:nn} \marg{delim tl} \marg{clist}
+% \cs{moremath_diagonal_smallmatrix:nn} \marg{delim tl} \marg{clist}
+% \cs{moremath_antidiagonal_smallmatrix:nn} \marg{delim tl} \marg{clist}
+% \end{syntax}
+% These functions produce (anti-)diagonal matrices.
+% The argument \meta{delim~tl} is a token list,
+% intended to specify the delimiter of the matrix or no delimiter if the
+% <tl> is empty no delimiters are produced.
+%
+% The argument <clist> is a list of comma separated values which specify the
+% entries of the diagonal.
+% Other properties of the matrix to produce like alignment ("align")
+% and the tokens to insert for non-diagonal entries ("fill")
+% depend on the current setting of the keys described in section~\ref{sec:options-matrix}.
+%
+% The "smallmatrix" versions are intended for use in inline math mode.
+% \end{function}
+%
+% \begin{function}[
+% added = 2024-07-04,
+% updated=2024-07-15,
+% ]{
+% \moremath_id_matrix:n,
+% \moremath_id_matrix:V,
+% \moremath_id_smallmatrix:n,
+% \moremath_id_smallmatrix:V,
+% }
+% \begin{syntax}
+% \cs{moremath_id_matrix:n} \marg{dimensions}
+% \cs{moremath_id_smallmatrix:n} \marg{dimensions}
+% \end{syntax}
+% These functions produce a identity matrix with <dimensions> rows and columns.
+% <dimensions> is expected to be a \emph{positive} integer.
+% The "smallmatrix" version utilizes \pkg{mathtools}' \env{smallmatrix*} environment,
+% which makes it suitable for inline math mode.
+%
+% The delimiter around the matrix is determined by the current value of the key
+% "matrix / delimiter" inside the current group.
+%
+% As these functions utilize \cs{moremath_diagonal_matrix:VV} or
+% \cs{moremath_diagonal_smallmatrix:VV} and make use of temporary variables
+% it is advised to put them into their own group,
+% i.e.\ surround them by \cs{group_begin:} and \cs{group_end:}.
+% \end{function}
+%
+% \section{Vertically Centering Math Along the Math Axis}
+% \label{sec:autors-vcenter}
+%
+% As already said in section~\ref{sec:vcenter} sometimes it is needed to
+% explicitly center some math code.
+%
+% \begin{function}[
+% added=2024-07-08,
+% updated=2024-07-15,
+% ]{
+% \moremath_vcenter:n,
+% }
+% \begin{syntax}
+% \cs{moremath_vcenter:n} \marg{contents}
+% \end{syntax}
+% The function \cs{moremath_vcenter:n} places <contents> inside a "hbox",
+% which is centered along the math axis by \tn{vcenter}.
+% The contents inside the "hbox" are set in math mode.
+% The function also applies the \enquote{outer} math style
+% to the contents of the "hbox".
+%
+% This function is not \tn[no-index]{long},
+% as it sets its contents inside a "hbox".
+%
+% \begin{texnote}
+% This function is a wrapper around \tn{vcenter}, \cs{hbox:n},
+% and \tn{mathpalette}.
+% Inside the "hbox" math mode is reentered.
+% \end{texnote}
+% \end{function}
+%
+% \end{documentation}
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \begin{implementation}
+% \part{Implementation}
+% \label{pt:implementation}
+% Start the \pkg{DocStrip} guards.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Set the internal prefix for this package so that \pkg{DocStrip} knows what to
+% do.
+% \begin{macrocode}
+%<@@=moremath>
+% \end{macrocode}
+%
+% \section{Initial Setup}
+%
+% First set the required version of \LaTeX{},
+% we need at least
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[2022-11-01]
+% \end{macrocode}
+% for key-value option handling, \pkg{xparse}-like document commands
+% (especially for using the "=" option specification)
+% and hooks.
+%
+% Then identify this package as \pkg{moremath}.
+% \begin{macrocode}
+\ProvidesExplPackage{moremath}
+ {2024-07-15}{v0.4.0}{More Math Macros}
+% \end{macrocode}
+%
+% ^^X Debugging switch
+% \iffalse
+% \debug_on:n {all}
+% \fi
+% \section{Key-value interfaces}
+% \label{sec:key-val}
+% To make use of key-value interfaces we need to define a few keys.
+%
+% \subsection{Package load time options}
+% \label{sec:load-time-options}
+%
+% To allow for the conditional definition of macros at load time
+% we define a few keys.
+%
+% But before doing so we define a few messages to write the package options to
+% the log file.
+% One message to issue if the \texttt{bm} option has been given:
+% \begin{macrocode}
+\msg_new:nnn { moremath } {load / bm}
+{
+ Option~'bm'~given.\\
+ Loading~the~bm~package~\msg_line_context:.
+}
+% \end{macrocode}
+% And a more generic message to issue for the other options,
+% which all disable certain parts of the library.
+% \begin{macrocode}
+\msg_new:nnn {moremath} { load / disabling }
+{
+ Option~'#1'~given.\\
+ Disabling~#2~\msg_line_context:.
+}
+% \end{macrocode}
+%
+% \begin{variable}{
+% \l_@@_predef_vector_op_bool,
+% \l_@@_predef_operators_bool,
+% \l_@@_predef_crvector_bool,
+% \l_@@_predef_matrix_bool,
+% \l_@@_predef_abs_bool,
+% }
+% To store the values of several switch type key-value options
+% we declare several boolean variables.
+% \begin{macrocode}
+\bool_new:N \l_@@_predef_vector_op_bool
+\bool_new:N \l_@@_predef_operators_bool
+\bool_new:N \l_@@_predef_crvector_bool
+\bool_new:N \l_@@_predef_matrix_bool
+\bool_new:N \l_@@_predef_abs_bool
+% \end{macrocode}
+%
+% The variables \cs{l_@@_predef_vector_op_bool}, \cs{l_@@_predef_operators_bool}
+% \cs{l_@@_predef_abs_bool}, \cs{l_@@_predef_matrix_bool}
+% and \cs{l_@@_predef_crvector_bool}
+% control if the predefined macros
+% for vector calculus, delimited operators, the matrix shorthands,
+% the row and column vectors,
+% and the shorthands for absolute value
+% and norm shall be defined.
+%
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{
+% Explicitly declared boolean variables used to store key-value options.
+% }
+% \end{variable}
+%
+% \begin{optionenv}{
+% bm,
+% no-vector,
+% no-operators,
+% no-abs-shorthands,
+% no-matrix,
+% no-crvector,
+% nopredef,
+% }
+% Now we define package load time keys:
+% \begin{macrocode}
+\keys_define:nn { moremath / load }
+{
+% \end{macrocode}
+% We provide an option to conditionally load the \pkg{bm}-package~\autocite{bm}
+% to provide better looking bold symbols.
+% \begin{macrocode}
+ bm .code:n = {
+ \msg_info:nn {moremath} {load / bm}
+ \RequirePackage{bm}
+ },
+ bm .value_forbidden:n = true,
+ bm. usage:n = load,
+% \end{macrocode}
+% Then we define options for en-/disabling predefined macros of this package
+% to avoid name clashes.
+% \begin{macrocode}
+ no-vector .bool_set_inverse:N = \l_@@_predef_vector_op_bool,
+ no-vector .default:n = true,
+ no-vector .initial:n = false,
+ no-vector .usage:n = load,
+ no-operators .bool_set_inverse:N = \l_@@_predef_operators_bool,
+ no-operators .default:n = true,
+ no-operators .initial:n = false,
+ no-operators .usage:n = load,
+ no-abs-shorthands .bool_set_inverse:N = \l_@@_predef_abs_bool,
+ no-abs-shorthands .default:n = true,
+ no-abs-shorthands .initial:n = false,
+ no-abs-shorthands .usage:n = load,
+ no-matrix .bool_set_inverse:N = \l_@@_predef_matrix_bool,
+ no-matrix .initial:n = false,
+ no-matrix .default:n = true,
+ no-matrix .usage:n =load,
+ no-crvector .bool_set_inverse:N = \l_@@_predef_crvector_bool,
+ no-crvector .default:n = true,
+ no-crvector .initial:n = false,
+ no-crvector .usage:n = load,
+ nopredef .multichoice:,
+ nopredef / operators .meta:nn = { moremath / load }
+ {
+ no-operators = true
+ },
+ nopredef / vector .meta:nn = { moremath / load }
+ {
+ no-vector = true
+ },
+ nopredef / abs .meta:nn = { moremath / load }
+ {
+ no-abs-shorthands = true,
+ },
+ noperdef / matrix .meta:nn = { moremath / load }
+ {
+ no-matrix = true,
+ },
+ nopredef / crvector .meta:nn = {moremath / load}
+ {
+ no-crvector = true,
+ },
+ nopredef / all .meta:nn = { moremath / load }
+ {
+ no-operators = true,
+ no-vector = true,
+ no-abs-shorthands = true
+ },
+ nopredef .usage:n = load,
+% \end{macrocode}
+% Unknown package options get passed to \pkg{mathtools}.
+% \begin{macrocode}
+ unknown .code:n = {\PassOptionsToPackage{\CurrentOption}{mathtools}},
+ unknown .usage:n = load,
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added package load-time options.
+% }
+% \end{optionenv}
+%
+%
+% \subsection{Keys controlling appearance}
+% \label{sec:keys-appearance}
+%
+% \begin{variable}{
+% \l_@@_nabla_tl,
+% \l_@@_nabla_arrow_bool,
+% \l_@@_nabla_arrow_bold_bool,
+% \l_@@_grad_op_tl,
+% \l_@@_laplacian_symb_tl,
+% \l_@@_laplacian_delta_bool,
+% \l_@@_laplacian_arrow_bool,
+% \l_@@_laplacian_tl,
+% \l_@@_dalembert_symb_tl,
+% }
+% We declare several variables to store the values of the keys affecting
+% appearance.
+% \begin{macrocode}
+\tl_new:N \l_@@_nabla_tl
+\bool_new:N \l_@@_nabla_arrow_bool
+\bool_new:N \l_@@_nabla_arrow_bold_bool
+\tl_new:N \l_@@_grad_op_tl
+% \end{macrocode}
+%
+% The symbol to use as \enquote{nabla} is stored in \cs{l_@@_nabla_tl}.
+% The variables \cs{l_@@_nabla_arrow_bool} and \cs{l_@@_nabla_bold_bool}
+% determine if the nabla-symbol shall have an arrow over itself and/or be bold
+% respectively.
+%
+% The variable \cs{l_@@_grad_op_tl} contains a user provided token list to
+% overwrite the built-in gradient operator of the package.
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_laplacian_symb_tl
+\bool_new:N \l_@@_laplacian_delta_bool
+\bool_new:N \l_@@_laplacian_arrow_bool
+\tl_new:N \l_@@_laplacian_tl
+% \end{macrocode}
+% The token list variable \cs{l_@@_laplacian_symb_tl} stores the tokens to be
+% used for the Laplace operator.
+% The boolean variable \cs{l_@@_laplacian_delta_bool}
+% determines if a delta should be used instead
+% of \(\laplacian\) for the laplacian symbol.
+% If the boolean variable \cs{l_@@_laplacian_arrow_bool} a small arrow will be
+% placed over the Laplace operator symbol.
+% If the user wants to overwrite the symbol used for the Laplacian,
+% the user provided list of tokens is stored in the variable
+% \cs{l_@@_laplacian_tl}.
+%
+% Finally we define a variable to hold the symbol to use for the
+% \foreignlanguage{french}{d'Alembert} operator.
+% \begin{macrocode}
+\tl_new:N \l_@@_dalembert_symb_tl
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Explicitly declared variables before using them to set keys.
+% }
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added: New variable \cs{l_@@_dalembert_symb_tl}
+% }
+% \end{variable}
+%
+% \begin{variable}{
+% \l_@@_vcenter_bool,
+% }
+% Additionally we declare a variable to decide if certain math symbols
+% shall be centered explicitly along the math axis.
+% \begin{macrocode}
+\bool_new:N \l_@@_vcenter_bool
+% \end{macrocode}
+% If \cs{l_@@_vcenter_bool} is true, the symbols of certain math operators,
+% should be centered explicitly.
+% \end{variable}
+%
+% \begin{optionenv}{
+% nabla,
+% arrownabla,
+% boldnabla,
+% grad-op,
+% laplacian-symb,
+% delta-laplace,
+% arrowlaplace,
+% laplacian,
+% dalembert-symb,
+% }
+% First define keys for the vector calculus macros.
+% \begin{macrocode}
+\keys_define:nn { moremath }
+{
+% \end{macrocode}
+% First we define keys for use with the gradient and gradient based operators.
+% \begin{macrocode}
+ % Symbol to use for the nabla
+ nabla .tl_set:N = \l_@@_nabla_tl,
+ nabla .initial:n = {\nabla},
+ nabla .value_required:n = true,
+ % shall the nabla have an arrow over it
+ arrownabla .bool_set:N = \l_@@_nabla_arrow_bool,
+ arrownabla .default:n = {true},
+ arrownabla .initial:n = {false},
+ % shall the nabla be bold
+ boldnabla .bool_set:N = \l_@@_nabla_bold_bool,
+ boldnabla .default:n = {true},
+ boldnabla .initial:n = {false},
+% \end{macrocode}
+% We also provide an override for the gradient operator
+% \begin{macrocode}
+ % Symbol to use for the gradient operator
+ grad-op .tl_set:N = \l_@@_grad_op_tl,
+ grad-op .value_required:n = true,
+% \end{macrocode}
+%
+% Then we define keys for the laplacian.
+% \begin{macrocode}
+ % Symbol to use for the laplacian
+ laplacian-symb .tl_set:N = \l_@@_laplacian_symb_tl,
+ laplacian-symb .initial:n = {\l_@@_nabla_tl},
+ % shall the Laplace operator be a delta
+ delta-laplace .bool_set:N = \l_@@_laplacian_delta_bool,
+ delta-laplace .initial:n = {false},
+ % shall the laplace operator have an arrow over itself
+ arrowlaplace .bool_set:N = \l_@@_laplacian_arrow_bool,
+ arrowlaplace .default:n = {true},
+ arrowlaplace .initial:n = {false},
+ % overwrite the laplace operator
+ laplacian .tl_set:N = \l_@@_laplacian_tl,
+ laplacian .value_required:n = true,
+% \end{macrocode}
+% And keys for the \foreignlanguage{french}{d'Alembert} operator.
+% \begin{macrocode}
+ dalembert-symb .tl_set:N = \l_@@_dalembert_symb_tl,
+ dalembert-symb .initial:n = {\square},
+% \end{macrocode}
+% \begin{optionenv}{
+% vcenter,
+% }
+% The "vcenter" option will control the manual centering of certain math
+% operators.
+% \begin{macrocode}
+ vcenter .bool_set:N = \l_@@_vcenter_bool,
+ vcenter .initial:n = true,
+ vcenter .value_required:n = true,
+}% \keys_define:nn
+% \end{macrocode}
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Added new option.
+% }
+% \end{optionenv} ^^X vcenter
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added options controlling appearance.
+% }
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added: New option "dalembert-symb".
+% }
+% \end{optionenv}
+%
+% \begin{optionenv}{
+% delimiter,
+% fill,
+% align
+% }
+% Then we define some keys for the matrix based environments:
+% \begin{macrocode}
+\keys_define:nn { moremath / matrix }
+{
+% \end{macrocode}
+% \begin{variable}{
+% \l_@@_matrix_delim_tl,
+% \l_@@_matrix_fill_tl,
+% \l_@@_matrix_align_tl,
+% }
+% Every one of the following keys stores its value inside a token list variable.
+% \begin{macrocode}
+ delimiter .tl_set:N = \l_@@_matrix_delim_tl,
+ delimiter .initial:n = {},
+ fill .tl_set:N = \l_@@_matrix_fill_tl,
+ fill .initial:n = {},
+ align .tl_set:N = \l_@@_matrix_align_tl,
+ align .initial:n = {c},
+ align .value_required:n = true,
+}
+% \end{macrocode}
+% The keys \verb|delimiter| and \verb|fill| set the variables
+% \cs{l_@@_matrix_delim_tl} and \cs{l_@@_matrix_fill_tl} respectively.
+% \cs{l_@@_matrix_delim_tl} determines the delimiter in use to surround
+% matrices and \cs{l_@@_matrix_fill_tl} determines the fill values of the
+% \cs{diag}, \cs{smalldiag}, \cs[no-index]{Xdiag} and \cs[no-index]{Xsmalldiag}
+% commands, which are used for non-diagonal matrix entries.
+% The variable \cs{l_@@_matrix_align_tl} contains the alignment specifier
+% for use with the \env{matrix*} environment.
+%
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added internal variables.
+% }
+% \end{variable}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added options for the matrix-based environments of \pkg{mathtools}.
+% }
+% \end{optionenv}
+%
+% \subsection{Functions for Setting Options}
+% \label{sec:option-setters}
+%
+%
+% Now we define a function for setting the options within the document
+% \begin{macro}{\moremath_setup:n}
+% \begin{macrocode}
+\cs_new_protected:Nn \moremath_setup:n
+{
+ \keys_set:nn {moremath} {#1}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added function for setting options.
+% }
+% \end{macro}
+%
+% Additionally we provide the user with a version of this command.
+% \begin{macro}{\moremathsetup}
+% \begin{macrocode}
+\NewDocumentCommand \moremathsetup {m}
+{
+ \moremath_setup:n {#1}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added document command for setting package options.
+% }
+% \end{macro}
+% We also need a function for setting the package load time options.
+% This function should set all given values for all key families
+% and pass unknown options to mathtools.
+% \begin{macro}{\@@_load_time_setup:}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_load_time_setup:
+{
+ \ProcessKeyOptions[ moremath / load ]
+}
+% \end{macrocode}
+% \end{macro}
+%
+% ^^X SUBSECTION: Package Initialization
+% \section{Package Initialization}
+% \label{sec:init}
+%
+% We now \enquote{initialize} the package by processing the package options,
+% all unknown options are passed to \pkg{mathtools}~\autocite{mathtools},
+% which is loaded afterwards.
+% Because certain \pkg{mathtools}-features are needed by this package,
+% we need to require a version of at least 2004/06/05.
+% As explained in section~\ref{sec:load-time-options} this may also load \pkg{bm}
+% if the \verb|bm| package option has been given.
+% \begin{macrocode}
+\@@_load_time_setup:
+% \end{macrocode}
+% If the "no-vector" option has not been given during load time,
+% we also need the \pkg{amssymb} package~\autocite{amsfonts} for the
+% \cs[module=amssymb,replace=false]{square} command.
+% We first define a message to inform the user about this.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { load / loading-amssymb }
+{
+ Vector~calculus~commands~enabled.\\
+ Loading~amssymb~package~\msg_line_context:.
+}
+% \end{macrocode}
+% Then we conditionally load the package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_predef_vector_op_bool
+{
+ \msg_info:nn { moremath } { load / loading-amssymb }
+ \RequirePackage{amssymb}
+}
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{
+% New: Load \pkg{amssymb} if the "no-vector" option has \emph{not} been given.
+% }
+%
+% Finally we load our most important dependency \pkg{mathtools}.
+% \begin{macrocode}
+\RequirePackage{mathtools}[2004/06/05]
+% \end{macrocode}
+%
+%
+% \section{Centering Math Symbols Along the Math-Axis}
+% \label{sec:impl-vcenter}
+%
+% Certain math constructs such cause \TeX{}
+% to not center the operator along the math axis,
+% like case of |\mathop{\nabla}\nolimits| vs.\
+% |\mathop{\boldsymbol\nabla}\nolimits|,
+% as can be seen below.
+% \[
+% \mathop{\nabla}\nolimits f(x)
+% \quad \text{vs.} \quad
+% \mathop{\boldsymbol\nabla}\nolimits f(x)
+% \]
+% As can be seen the bold nabla symbol is slightly higher up than the non-bold
+% version.
+% Because of this it is sometimes useful to manually center some math symbols,
+% along the math axis.\footnote{%
+% The code in this section is inspired by
+% \url{http://www.tug.org/TUGboat/Articles/tb22-4/tb72perlS.pdf}
+% }
+%
+% \begin{macro}[added = 2024-07-08]{
+% \moremath_vcenter:n
+% }
+% The function \cs{moremath_vcenter:n} is a wrapper around the \tn{vcenter}
+% \TeX{} primitive.
+% It takes a single argument.
+% \begin{arguments}
+% \item A \meta{tl} containing math mode material to center along the math axis.
+%
+% This argument is typeset in math mode.
+% \end{arguments}
+% The function uses the \tn{mathpalette} primitive to switch to the right
+% math style.
+% The function is not in a \TeX{}-sense long,
+% i.e.\ it does not take \tn{par} tokens.
+%
+% As this function might be useful not only for internal use by \pkg{moremath},
+% we declare it as a public function here.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_vcenter:n
+{
+ \mathpalette \@@_vcenter:Nn {#1}
+}
+% \end{macrocode}
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Added new function.
+% }
+% \end{macro}
+%
+% \begin{macro}[added=2024-07-08]{
+% \@@_vcenter:Nn,
+% }
+% As \tn{mathpalette} needs as its first argument a macro which takes two
+% arguments
+% (the first is a math style switch and the second the contents).\footnote{%
+% See \TeX{}SE answer \url{https://tex.stackexchange.com/a/34412}
+% }
+% We define an internal helper function for \cs{moremath_vcenter:n} for
+% \cs{mathpalette} to call.
+%
+% The function \cs{@@_vcenter:Nn} takes two arguments:
+% \begin{arguments}
+% \item The math style macro, which is passed to this function by
+% \tn{mathpalette}.
+%
+% \item The \meta{tl} to typeset inside the \tn{vcenter}.
+% \end{arguments}
+%
+% Because of the properties of \tn{vcenter}, it switches to vertical mode,
+% we need to put the contents to typeset inside a horizontal box.
+% Because of this we also need to reenter math mode, and because of this
+% we need to remove the spacing inserted by entering math mode
+% by setting \tn{mathsurround} to zero.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_vcenter:Nn
+{
+ \vcenter
+ {
+ \hbox:n
+ {
+ $
+ \mathsurround=0pt
+ #1 {#2}
+ $
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection*{Document Level Command}
+%
+% Although unlikely there might arise the need for a document author to center
+% some math along the math axis.
+% For this purpose we are going to define a new document level command.
+%
+% But first we are going to declare some messages to use by the command.
+% The first message informs the user that the command is not available,
+% because its \meta{csname} is already taken.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { csname-already-defined }
+{
+ Control~sequence~' #1 '~is~already~ defined.\\
+ Skipping~definition~\msg_line_context:
+}
+% \end{macrocode}
+% The second message should be issued if a command that only works in math mode
+% was given outside of it.
+% \begin{macrocode}
+\msg_new:nnnn { moremath } { vcenter / only-in-math-mode }
+{
+ Command~#1~used~outside~math~mode~\msg_line_context:.
+}
+{
+ The~command~#1~may~only~be~used~inside~math~mode.
+}
+% \end{macrocode}
+% \begin{macro}{
+% \VCenterMath,
+% }
+% Now to the document level command for centering math along the math axis.
+% \begin{macrocode}
+\cs_if_free:NTF \VCenterMath
+{
+ \NewDocumentCommand \VCenterMath { m }
+ {
+ \mode_if_math:TF
+ {
+ \moremath_vcenter:n {#1}
+ }{% \mode_if_math:TF FALSE BRANCH
+ \msg_error:nnn { moremath } { vcenter / only-in-math-mode } {\VCenterMath}
+ }
+ }
+}{% \cs_if_free:NTF \VCenterMath FALSE BRANCH
+ \msg_warning:nnn { moremath } { csname-already-defined } {\VCenterMath}
+}
+% \end{macrocode}
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Added new document level command.
+% }
+% \end{macro}
+%
+%
+% ^^X SECTION: Paired Delimiters
+% \section{Declaring Paired Delimiters for Internal Use}
+% \label{sec:impl-paired-delim}
+%
+% \begin{macro}{
+% \@@_inparent:w,
+% \@@_inbrack:w,
+% \@@_inbrace:w,
+% \@@_in_vert:w,
+% \@@_in_Vert:w
+% }
+% As we are going to use \pkg{mathtools}' \emph{paired delimiters}
+% at several places throughout this package,
+% we define \emph{paired delimiters} for internal use, as functions with weird
+% syntax.
+% \begin{macrocode}
+\DeclarePairedDelimiter{\@@_inparent:w}{\lparen}{\rparen}
+\DeclarePairedDelimiter{\@@_inbrack:w}{\lbrack}{\rbrack}
+\DeclarePairedDelimiter{\@@_inbrace:w}{\lbrace}{\rbrace}
+\DeclarePairedDelimiter{\@@_in_vert:w}{\lvert}{\rvert}
+\DeclarePairedDelimiter{\@@_in_Vert:w}{\lVert}{\rVert}
+% \end{macrocode}
+% \end{macro}
+%
+% ^^X SECTION: Delimited Operators
+% \section{Delimited Operators}
+% \label{sec:impl-delim-op}
+%
+% We need three different functions for providing the delimited operators.
+% But as we share a lot of code between those, we define an additional
+% helper function beforehand.
+% \begin{macro}{
+% \@@_operator:Nnn
+% }
+% The function \cs{@@_operator:Nnn} takes care of the operator part
+% of the new delimiter.
+% It allows the operator to have super- and subscripts.
+% It takes three arugments.
+% \begin{arguments}
+% \item The \meta{csname} of the operator to use.
+% \item A \meta{token list}, which is used as the superscript operator.
+%
+% This argument may be empty
+% \item A \meta{tl}, which is used as the subscript operator.
+%
+% The \meta{tl} may be empty.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_operator:Nnn
+{
+ #1
+ % add superscript if present
+ \tl_if_empty:nF {#2} {^{#2}}
+ % add subscript if present
+ \tl_if_empty:nF {#3} { \c_math_subscript_token {#3} }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We now define three version of the delimited operators.
+% \begin{macro}{
+% \moremath_delim_op_noscale:NNnnn,
+% \moremath_delim_op_autoscale:NNnnn,
+% }
+% \cs{moremath_delim_op_noscale:NNnnn} is provides a delimited operator without
+% any scaling of the delimiters
+% and \cs{moremath_delim_op_autoscale:NNnnn} provides a version with
+% automatic scaling of the delimiters.
+% Both of them take five arguments:
+% \begin{arguments}
+% \item The \meta{csname} of the operator to use.
+%
+% Any operator declared with \pkg{amsmath}'s \cs{operatorname}
+% and/or\linebreak[3]
+% \cs[module=amsmath,replace=false]{DeclareMathOperator}
+% is valid for this.
+%
+% \item The \meta{csname} of a paired delimiter declared by
+% \pkg{mathtools}'~\autocite{mathtools}
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter}.
+%
+% \item A \meta{tl} to use as the superscript of the operator.
+%
+% \item A \meta{tl} to use as the subscript of the operator.
+%
+% \item A \meta{tl} to insert inside the delimiters.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_delim_op_noscale:NNnnn
+{
+ \@@_operator:Nnn #1 {#3} {#4}
+ % #2 is the paired delimiter
+ #2 {#5}
+}
+
+\cs_new_protected_nopar:Nn \moremath_delim_op_autoscale:NNnnn
+{
+ \@@_operator:Nnn #1 {#3} {#4}
+ % #2 is the paired delimiter
+ #2 * {#5}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added "noscale" and "autoscale" versions.
+% }
+% \end{macro}
+% \begin{macro}{
+% \moremath_delim_op_manuscale:NNnnnn,
+% \moremath_delim_op_manuscale:NNVnnn
+% }
+% \cs{moremath_delim_op_manuscale:NNnnnn} provides a delimited operator with
+% manual scaling.
+% This version takes six arguments:
+% \begin{arguments}
+% \item The \meta{csname} of the operator to use.
+%
+% \item The \meta{csname} of the paired delimiter
+% declared by \pkg{mathtools}'~\autocite{mathtools}\linebreak[3]
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter}.
+%
+% \item A \meta{tl} containing the scaling macro i.e.\ \cs{big}, \cs{Big},
+% \cs{Bigg},\dots
+%
+% \item A \meta{tl} containing the superscript of the operator.
+%
+% The \meta{tl} may be empty
+%
+% \item A \meta{tl} containing the subscript of the operator
+%
+% The \meta{tl} may be empty.
+%
+% \item A \meta{tl} to insert inside the delimiters
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_delim_op_manuscale:NNnnnn
+{
+ \@@_operator:Nnn #1 {#4} {#5}
+ % #2 is the paired delimiter
+ #2 [ #3 ] {#6}
+}
+% \end{macrocode}
+% We also provide a variant for the scaling macro.
+% \begin{macrocode}
+\cs_generate_variant:Nn \moremath_delim_op_manuscale:NNnnnn {NNVnnn}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Function added.
+% }
+% \end{macro}
+%
+% For the creation of document level commands we also create a function,
+% so that the user is also able to declare new delimited operators.
+% But before we do so we create a message to inform the user if a
+% \meta{csname} was already taken.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { delimop / already-defined-skip }
+{
+ Control~sequence~'#1'~is~already~defined.\\
+ Skipping~definition~of~delimited~operator~'#1'~\msg_line_context:.
+}
+% \end{macrocode}
+%
+% We also create a message to inform the user about conflicting options
+% given to the command.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { delimop / auto-manu-scale-conflict }
+{
+ Both~star~and~scale~cmd~given~to~'#1'.\\
+ Automatic~scaling~will~be~preferred,~the~size~command~will~be~
+ ignored~\msg_line_context:.
+}
+% \end{macrocode}
+% \begin{macro}{
+% \moremath_new_delim_op_command:NNN,
+% \moremath_new_delim_op_command:cNN,
+%}
+% \cs{moremath_new_delim_op_command:NNN} takes three arguments:
+% \begin{arguments}
+% \item The \meta{csname} to be defined.
+%
+% \item The \meta{csname} of the operator to use,
+% which should be an operator declared with
+% \cs[module=amsmath,replace=false]{DeclareMathOperator}.
+%
+% \item The \meta{csname} of the delimiter to use,
+% which should have been declared with
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter}.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \moremath_new_delim_op_command:NNN
+{
+ \cs_if_free:NTF #1
+ {
+ \exp_args:NNe \NewDocumentCommand #1
+ { s o E{ ^ \char_generate:nn {`_} {8} }{{}{}} m }
+ {
+ \tl_if_novalue:nTF {##2}
+ {
+ % second argument empty
+ \bool_if:nTF {##1}
+ {
+ % star given
+ \moremath_delim_op_autoscale:NNnnn #2 #3 {##3} {##4} {##5}
+ }{
+ % star not given
+ \moremath_delim_op_noscale:NNnnn #2 #3 {##3} {##4} {##5}
+ }
+ }{
+ % second argument present
+ % star given?
+ \bool_if:nTF {##1}
+ {
+ % Warn if both star and scaling factor are present
+ \msg_warning:nnn { moremath } { delimop / auto-manu-scale-conflict }
+ {#1}
+ \moremath_delim_op_autoscale:NNnnn #2 #3 {##3} {##4} {##5}
+ }{ % FALSE BRANCH
+ \moremath_delim_op_manuscale:NNnnnn #2 #3 {##2} {##3} {##4} {##5}
+ }
+ }
+ }
+ }{ % \cs_if_free:nTF #1 FALSE BRANCH
+ \msg_warning:nnn { moremath } { delimop / already-defined-skip }
+ {#1}
+ }
+}
+
+\cs_generate_variant:Nn \moremath_new_delim_op_command:NNN {cNN}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added function and variant.
+% }
+% \end{macro}
+%
+% \subsection{Document Level Commands}
+% \label{sec:impl-delim-op-doc-cmds}
+%
+% \begin{macro}{\DeclareDelimitedOperator}
+% Finally provide the user with a command to declare an additional
+% delimited operator.
+% \begin{macrocode}
+\NewDocumentCommand\DeclareDelimitedOperator { m m m }
+{
+ \msg_redirect_name:nnn { moremath } { delimop / already-defined-skip } { error }
+ \moremath_new_delim_op_command:NNN #1 #2 #3
+ \msg_redirect_name:nnn { moremath } { delimop / already-defined-skip } {}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{Added document level command.}
+% \end{macro}
+%
+% As \pkg{amsmath}~\autocite{amsmath} pre-defines the following operators
+% it is only sensible to also define delimited versions of them:\\
+% \input{\jobname-ams-op-table.tex}
+%
+% \begin{macro}{\@@_new_delim_op_cmds:nN}
+% \cs{@@_new_delim_op_cmds:nN} creates document level macros of the form
+% \cs[no-index]{\meta{prefix}\meta{op name}}.
+% It declares fife versions \cs[no-index]{p\meta{op name}},
+% \cs[no-index]{b\meta{op name}}, \cs[no-index]{B\meta{op name}},
+% \cs[no-index]{v\meta{op name}} and \cs[no-index]{V\meta{op name}}.
+%
+% The function takes two arguments:
+% \begin{arguments}
+% \item A token list which contains \meta{op name}
+%
+% \item The \meta{csname} of the operator to use.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_delim_op_cmds:nN
+{
+ \moremath_new_delim_op_command:cNN {p #1} #2 \@@_inparent:w
+ \moremath_new_delim_op_command:cNN {b #1} #2 \@@_inbrack:w
+ \moremath_new_delim_op_command:cNN {B #1} #2 \@@_inbrace:w
+ \moremath_new_delim_op_command:cNN {v #1} #2 \@@_in_vert:w
+ \moremath_new_delim_op_command:cNN {V #1} #2 \@@_in_Vert:w
+}
+% \end{macrocode}
+% \end{macro}
+%
+% The decision if the following macros are defined depends on a package load
+% time option.
+% \begin{macrocode}
+\bool_if:NTF \l_@@_predef_operators_bool
+{
+% \end{macrocode}
+% We define the commands for the operators already declared by amsmath.
+% \begin{macro}[documented-as=\parccos]{
+% \parccos, \barccos, \Barccos, \varccos, \Varccos,
+% }
+% For \cs[module=amsmath,replace=false]{arccos},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {arccos} \arccos
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added delimited document commands for all \pkg{amsmath}-defined operators.
+% }
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \parcsin, \barcsin, \Barcsin, \varcsin, \Varcsin,
+% }
+% \cs[module=amsmath,replace=false]{arcsin},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {arcsin} \arcsin
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \parctan, \barctan, \Barctan, \varctan, \Varctan,
+% }
+% \cs[module=amsmath,replace=false]{arctan},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {arctan} \arctan
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \Parg, \barg, \Barg, \varg, \Varg,
+% }
+% \cs[module=amsmath,replace=false]{arg}
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {arg} \arg
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pcos, \bcos, \Bcos, \vcos, \Vcos,
+% }
+% \cs[module=amsmath,replace=false]{cos}
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {cos} \cos
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pcosh, \bcosh, \Bcosh, \vcosh, \Vcosh,
+% }
+% \cs[module=amsmath,replace=false]{cosh},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {cosh} \cosh
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pcot, \bcot, \Bcot, \vcot, \Vcot,
+% }
+% \cs[module=amsmath,replace=false]{cot},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {cot} \cot
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pcoth, \bcoth, \Bcoth, \vcoth, \Vcoth,
+% }
+% \cs[module=amsmath,replace=false]{coth},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {coth} \coth
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pcsc, \bcsc, \Bcsc, \vcsc, \Vcsc,
+% }
+% \cs[module=amsmath,replace=false]{csc},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {csc} \csc
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pdeg, \bdeg, \Bdeg, \vdeg, \Vdeg,
+% }
+% \cs[module=amsmath,replace=false]{deg},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {deg} \deg
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pdet, \bdet, \Bdet, \vdet, \Vdet,
+% }
+% \cs[module=amsmath,replace=false]{det},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {det} \det
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pdim, \bdim, \Bdim, \vdim, \Vdim,
+% }
+% \cs[module=amsmath,replace=false]{dim},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {dim} \dim
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pexp, \bexp, \Bexp, \vexp, \Vexp,
+% }
+% \cs[module=amsmath,replace=false]{exp},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {exp} \exp
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pgcd, \bgcd, \Bgcd, \vgcd, \Vgcd,
+% }
+% \cs[module=amsmath,replace=false]{gcd},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {gcd} \gcd
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \phom, \bhom, \Bhom, \vhom, \Vhom,
+% }
+% \cs[module=amsmath,replace=false]{hom},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {hom} \hom
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pinf, \binf, \Binf, \vinf, \Vinf,
+% }
+% \cs[module=amsmath,replace=false]{inf},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {inf} \inf
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pinjlim, \binjlim, \Binjlim, \vinjlim, \Vinjlim,
+% }
+% \cs[module=amsmath,replace=false]{injlim},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {injlim} \injlim
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pker, \bker, \Bker, \vker, \Vker,
+% }
+% \cs[module=amsmath,replace=false]{ker},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {ker} \ker
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \plg, \blg, \Blg, \vlg, \Vlg,
+% }
+% \cs[module=amsmath,replace=false]{lg},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {lg} \lg
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \plim, \blim, \Blim, \vlim, \Vlim,
+% }
+% \cs[module=amsmath,replace=false]{lim},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {lim} \lim
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pliminf, \bliminf, \Bliminf, \vliminf, \Vliminf,
+% }
+% \cs[module=amsmath,replace=false]{liminf},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {liminf} \liminf
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \plimsup, \blimsup, \Blimsup, \vlimsup, \Vlimsup,
+% }
+% \cs[module=amsmath,replace=false]{limsup},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {limsup} \limsup
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pln, \bln, \Bln, \vln, \Vln,
+% }
+% \cs[module=amsmath,replace=false]{ln}
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {ln} \ln
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \plog, \blog, \Blog, \vlog, \Vlog,
+% }
+% \cs[module=amsmath,replace=false]{log},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {log} \log
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pmax, \bmax, \Bmax, \vmax, \Vmax,
+% }
+% \cs[module=amsmath,replace=false]{max},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {max} \max
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pmin, \bmin, \Bmin, \vmin, \Vmin,
+% }
+% \cs[module=amsmath,replace=false]{min},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {min} \min
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pPr, \bPr, \BPr, \vPr, \VPr,
+% }
+% \cs[module=amsmath,replace=false]{Pr},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {Pr} \Pr
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pprojlim, \bprojlim, \Bprojlim, \vprojlim, \Vprojlim,
+% }
+% \cs[module=amsmath,replace=false]{projlim},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {projlim} \projlim
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \psec, \bsec, \Bsec, \vsec, \Vsec,
+% }
+% \cs[module=amsmath,replace=false]{sec},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {sec} \sec
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \psin, \bsin, \Bsin, \vsin, \Vsin,
+% }
+% \cs[module=amsmath,replace=false]{sin},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {sin} \sin
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \psinh, \bsinh, \Bsinh, \vsinh, \Vsinh,
+% }
+% \cs[module=amsmath,replace=false]{sinh},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {sinh} \sinh
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \psup, \bsup, \Bsup, \vsup, \Vsup,
+% }
+% \cs[module=amsmath,replace=false]{sup},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {sup} \sup
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \ptan, \btan, \Btan, \vtan, \Vtan,
+% }
+% \cs[module=amsmath,replace=false]{tan},
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {tan} \tan
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \ptanh, \btanh, \Btanh, \vtanh, \Vtanh
+% }
+% and \cs[module=amsmath,replace=false]{tanh}.
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {tanh} \tanh
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[documented-as=\parccos]{
+% \pvarinjlim, \bvarinjlim, \Bvarinjlim, \vvarinjlim, \Vvarinjlim,
+% \pvarprojlim, \bvarprojlim, \Bvarprojlim, \vvarprojlim, \Vvarprojlim,
+% \pvarliminf, \bvarliminf, \Bvarliminf, \vvarliminf, \Vvarliminf,
+% \pvarlimsup, \bvarlimsup, \Bvarlimsup, \vvarlimsup, \Vvarlimsup,
+% }
+% We also provide delimited versions of \cs[module=amsmath,replace=false]{varinjlim},
+% \cs[module=amsmath,replace=false]{varprojlim},
+% \cs[module=amsmath,replace=false]{varliminf},
+% and \cs[module=amsmath,replace=false]{varlimsup}.
+% \begin{macrocode}
+\@@_new_delim_op_cmds:nN {varinjlim} \varinjlim
+\@@_new_delim_op_cmds:nN {varprojlim} \varprojlim
+\@@_new_delim_op_cmds:nN {varliminf} \varliminf
+\@@_new_delim_op_cmds:nN {varlimsup} \varlimsup
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+}{
+ \msg_info:nnnn {moremath} {load /disabling} {no-operators}
+ {
+ predefined~delimited~operator~macros
+ }
+} % End of the conditional
+% \end{macrocode}
+%
+% ^^X SECTION: Vector Calculus Macros
+% \section{Vector Calculus Macros}
+% \label{sec:vector-calc}
+%
+% For providing macros which help with vector differentials,
+% we first need some setup functions.
+%
+% \subsection{Macros Providing Symbols of Operators}
+% \label{sec:op-symbols}
+%
+% \begin{macro}{
+% \@@_maybe_vcenter:n,
+% }
+% Sometimes a symbol should be centered explicitly,
+% as this will depend on the current setting of "vcenter",
+% i.e.\ the current value of \cs{l_@@_vcenter_bool},
+% we provide a helper function which puts its argument
+% \begin{arguments}
+% \item A list of \meta{tokens}
+% \end{arguments}
+% inside a \tn{vcenter} by means of \cs{moremath_vcenter:n}
+% or not depending on the current value of \cs{l_@@_vcenter_bool}.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_maybe_vcenter:n
+{
+ \bool_if:NTF \l_@@_vcenter_bool
+ {
+ \moremath_vcenter:n {#1}
+ }{
+ #1
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_gradient_operator_get:}
+% This function returns the gradient operator depending on the current setting
+% of the keys.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_gradient_operator_get:
+{
+ \tl_if_empty:NTF \l_@@_grad_op_tl
+ {
+ \mathop
+ {
+% \end{macrocode}
+% Otherwise we first need to check if the operator shall have an arrow over it.
+% Afterwards if the nabla shall be bold.
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_nabla_arrow_bool
+ {
+ \vec
+ {
+% \end{macrocode}
+% In case \cs{l_@@_nabla_arrow_bool} is true we should \emph{maybe}
+% center the symbol.
+% \begin{macrocode}
+ \@@_maybe_vcenter:n
+ {
+ \bool_if:NT \l_@@_nabla_bold_bool
+ {
+ \boldsymbol
+ }
+ \l_@@_nabla_tl
+ }
+ }
+ }{
+% \end{macrocode}
+% Like in the case above we should \emph{maybe} center the symbol
+% if \cs{l_@@_nabla_bold_bool} is true.
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_nabla_bold_bool
+ {
+ \@@_maybe_vcenter:n
+ {
+ \boldsymbol
+ \l_@@_nabla_tl
+ }
+ }{
+ \l_@@_nabla_tl
+ }
+ }
+ }% \mathop
+ \nolimits
+ }{
+% \end{macrocode}
+% If the user provided its own implementation of the operator,
+% we simply return it.
+% \begin{macrocode}
+ \l_@@_grad_op_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_laplace_operator_get:}
+% Then we define a function for returning the laplace operator symbol,
+% depending on the currently set keys.
+% The function wraps the symbol for the operator inside
+% \tn{mathop} to provide the right spacing.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_laplace_operator_get:
+{
+ \tl_if_empty:NTF \l_@@_laplacian_tl
+ {
+ \mathop
+ {
+ \bool_if:NTF \l_@@_laplacian_delta_bool
+ {
+ \Delta
+ }{
+ \bool_if:NTF \l_@@_laplacian_arrow_bool
+ {
+ \vec{
+ \@@_maybe_vcenter:n
+ {
+ \bool_if:NT \l_@@_nabla_bold_bool {\boldsymbol}
+ \l_@@_laplacian_symb_tl
+ }
+ }
+ }{
+ \bool_if:NTF \l_@@_nabla_bold_bool
+ {
+ \@@_maybe_vcenter:n
+ {
+ \boldsymbol
+ \l_@@_laplacian_symb_tl
+ }
+ }{
+ \l_@@_laplacian_symb_tl
+ }
+ }
+ }
+ }\nolimits
+ \bool_if:NF \l_@@_laplacian_delta_bool
+ {
+ \c_math_superscript_token
+ {
+ 2
+ }
+ }
+ }{
+ \l_@@_laplacian_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \@@_dalembert_operator_get:
+% }
+% This function returns the \foreignlanguage{french}{d'Alembert} operator
+% depending on the currently set keys. The symbol for the
+% \foreignlanguage{french}{d'Alembert} operator is wrapped inside \tn{mathop}
+% to provide proper spacing.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_dalembert_operator_get:
+{
+ \mathop
+ {
+ \l_@@_dalembert_symb_tl
+ }% \mathop
+ \nolimits
+}
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added function: \cs{@@_dalembert_operator_get:}
+% }
+% \end{macro}
+%
+% \subsection{Macros Producing an Operator}
+% \label{sec:op-macros}
+%
+% After we have defined the symbols it is now time to provide a function which
+% produces the entire gradient operator
+% \begin{macro}{
+% \moremath_gradient_operator:n,
+% \moremath_laplace_operator:n
+% }
+% This function takes one arguments, the subscript to use with the operator.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_gradient_operator:n
+{
+ \@@_gradient_operator_get:
+ \tl_if_empty:nF {#1} {\c_math_subscript_token {#1}}
+}
+% \end{macrocode}
+%
+% Like for the gradient operator we do the same for the laplacian
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_laplace_operator:n
+{
+ \@@_laplace_operator_get:
+ \tl_if_empty:nF {#1} {\c_math_subscript_token {#1}}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added functions.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \moremath_divergence_operator:n,
+% \moremath_curl_operator:n
+% }
+% Using the already defined gradient operator it is possible to define a
+% function which acts as an operator suitable for representing the divergence
+% operator and the curl operator.
+% Like the gradient operator this functions take one argument
+% \begin{arguments}
+% \item the subscript of the gradient operator.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_divergence_operator:n
+{
+% \end{macrocode}
+% The braces around \cs{moremath_gradient_operator:n} are necessary to avoid
+% issues with the spacing between \tn{cdot} and the following \tn{mathopen}
+% from any braces.\footnote{%
+% See: \url{https://tex.stackexchange.com/a/223914}
+% }
+% Example:
+% \[
+% \text{With braces:}\quad \pdiv{f(x)} \text{,}
+% \qquad\text{without braces: }\quad \mathop{\nabla}\nolimits\cdot(f(x))
+% \]
+% \begin{macrocode}
+ {
+ \moremath_gradient_operator:n {#1}
+ }
+ \cdot
+}
+
+\cs_new_protected_nopar:Nn \moremath_curl_operator:n
+{
+ {
+ \moremath_gradient_operator:n {#1}
+ }
+ \times
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added functions.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \moremath_dalembert_operator:n
+% }
+% This function produces the \foreignlanguage{french}{d'Alembert} operator,
+% including an optional subscript.
+% The function takes one argument:
+% \begin{arguments}
+% \item A \meta{tl} with the contents of the subscript of the operator.
+%
+% This variable may be empty,
+% in this case no subscript (not even an empty one) is produced.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \moremath_dalembert_operator:n
+{
+ \@@_dalembert_operator_get:
+ \tl_if_empty:nF {#1}
+ {
+ \c_math_subscript_token {#1}
+ }
+}
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added new function \cs{moremath_dalembert_operator:n}.
+% }
+% \end{macro}
+%
+%
+% \subsection{Producing Delimited Vector Calculus Operators}
+% \label{sec:delim-vec-ops}
+%
+% \begin{macro}{
+% \moremath_delim_nabla_op_noscale:NNnn,
+% \moremath_delim_nabla_op_autoscale:NNnn
+% }
+% These functions produce a vector calculus operator with \meta{contents}
+% inside delimiters.
+% The "autoscale" variant scales the delimiters with the size of \meta{contents},
+% the "noscale" variant does no scaling at all.
+% \begin{arguments}
+% \item The \meta{csname} of the operator to use.
+%
+% This should have the same form as \cs{moremath_gradient_operator:n},
+% i.e.\ the function passed as \meta{csname} should accept one argument
+% to typeset as subscript.
+%
+% \item The \meta{csname} of the \emph{paired delimiter} to use.
+%
+% The paired delimiter has to be one declared using \pkg{mathtools}'
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter} command.
+%
+% \item A \meta{tl} with the subscript of the operator.
+%
+% \item A \meta{tl} with the contents to typeset inside the delimiters
+% \end{arguments}
+% We begin with the "noscale" version.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_delim_nabla_op_noscale:NNnn
+{
+ #1 {#3} #2{#4}
+}
+% \end{macrocode}
+% Then we create the version with automatic scaling.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_delim_nabla_op_autoscale:NNnn
+{
+ #1 {#3} #2 * {#4}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added "noscale" and "autoscale" functions.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \moremath_delim_nabla_op_manuscale:NNnnn
+% }
+% This function produces a vector calculus operator like
+% \cs{moremath_delim_nabla_op_noscale:NNnn}
+% and \cs{moremath_delim_nabla_op_autoscale:NNnn},
+% but with manual scaling.
+% It takes five arguments:
+% \begin{arguments}
+% \item The \meta{csname} of the operator to use.
+%
+% \item The \meta{csname} of the paired delimiter.
+%
+% \item A \meta{token~list} containing the \meta{scale~cmd} like
+% \cs{big}, \cs{Big}, \cs{bigg}, etc.
+%
+% \item A \meta{tl} with the subscript of the operator.
+%
+% \item A \meta{tl} with the contents to typeset inside the delimiters.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_delim_nabla_op_manuscale:NNnnn
+{
+ #1 {#4} #2 [#3] {#5}
+}
+% \end{macrocode}
+% \begin{macro}{
+% \moremath_delim_nabla_op_manuscale:NNVnn
+% }
+% We also declare a variant for passing a variable with the \meta{scale~cmd}
+% instead of a \meta{token~list}.
+% \begin{macrocode}
+\cs_generate_variant:Nn \moremath_delim_nabla_op_manuscale:NNnnn {NNVnn}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Add variant.
+% }
+% \end{macro}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Add function.
+% }
+% \end{macro}
+%
+% To ease the definition of those macros we define a function for defining
+% the delimited versions.
+%
+% Of course we also need a way to declare a user interface for this functions.
+% For this purpose we first need some helpers for setting
+% necessary parameters.
+% \begin{macro}{\@@_parse_kv_args:nN}
+% This helper macro takes two arguments,
+% \begin{arguments}
+% \item A token list of the key-value arguments.
+% \item The \meta{csname} of a token list to put the scale value in.
+% \end{arguments}
+% The function sets the given keys but before it does so it searches for a
+% key named \verb|scale| and puts it into the second argument.
+% For this to work it is necessary that all values have \verb|=| in them.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_parse_kv_args:nN
+{
+% \end{macrocode}
+% We first put the key-value arguments inside a property list.
+% Afterwards we check if the key \verb|scale| has been given.
+% If yes we pop it and assign it to the second argument.
+% Otherwise we do nothing.
+% \begin{macrocode}
+ \prop_set_from_keyval:Nn \l_tmpa_prop {#1}
+
+ \prop_pop:NnNT \l_tmpa_prop {scale} #2 {}
+
+ \keys_set:ne {moremath} {\prop_to_keyval:N \l_tmpa_prop}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We also need a warning message for conflicting arguments,
+% to inform the user that one of his options is going to be ignored.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { vector-calc / scale-star-conflict }
+{
+ Both~star~and~scaling~factor~given~to~'#1'.\\
+ Automatic~scaling~will~be~preferred,~the~size~command~'#2'~will~be~
+ ignored~\msg_line_context:.
+}
+% \end{macrocode}
+%
+% \begin{macro}{
+% \@@_new_delim_nabla_doc_cmd:NNN,
+% \@@_new_delim_nabla_doc_cmd:cNN,
+% }
+% This function takes three arguments:
+% \begin{arguments}
+% \item The \meta{csname} of the to be defined command
+% \item The \meta{csname} of the operator to use.
+%
+% This should be a function like \cs{moremath_gradient_operator:n}.
+% \item The \meta{csname} of the delimiter function to use.
+%
+% This should be a macro/command created with \pkg{mathtools}
+% \cs[module=mathtools,replace=false]{DeclarePairedDelimiter} command.
+% \end{arguments}
+% Its purpose is to create a new document level command,
+% for the delimited vector calculus operators.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_delim_nabla_doc_cmd:NNN
+{
+ \cs_if_free:NTF #1
+ {
+ \exp_args:NNe \NewDocumentCommand #1
+ {
+ s ={scale} o E{ \char_generate:nn {`_}{8} }{ {} } m
+ }
+ { % command code
+ \group_begin:
+ % optional arguments given?
+ \tl_if_novalue:nF {##2}
+ {
+ \@@_parse_kv_args:nN {##2} \l_tmpa_tl
+ }
+ % star given?
+ \bool_if:nTF {##1}
+ {
+ % scale factor given?
+ \tl_if_empty:NF \l_tmpa_tl
+ {
+ \msg_warning:nnnV { moremath } { vector-calc / scale-star-conflict }
+ {#1} \l_tmpa_tl
+ }
+ \moremath_delim_nabla_op_autoscale:NNnn #2 #3 {##3} {##4}
+ }{ % \bool_if:nTF {##1} FALSE BRANCH
+ % scale factor given?
+ \tl_if_empty:NTF \l_tmpa_tl
+ {
+ \moremath_delim_nabla_op_noscale:NNnn #2 #3 {##3} {##4}
+ }{ % FALSE BRANCH
+ \moremath_delim_nabla_op_manuscale:NNVnn #2 #3 \l_tmpa_tl {##3} {##4}
+ }
+ } % \bool_if:nTF {##1}
+ \group_end:
+ }
+ }{ % \cs_if_free:NTF #1 FALSE BRANCH
+ \msg_warning:nnn { moremath } { vector-calc / already-defined-skip } {#1}
+ } % \cs_if_free:NTF #1
+}
+%
+\cs_generate_variant:Nn \@@_new_delim_nabla_doc_cmd:NNN {cNN}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_new_nabla_doc_cmds:nN}
+% This internal function creates five different document level commands at once,
+% using \cs{@@_new_delim_nabla_doc_cmd:cNN}.
+% It takes two arguments:
+% \begin{arguments}
+% \item The a \meta{suffix~tl} for constructing the command names.
+%
+% The resulting commands will have the form \cs[no-index]{p\meta{suffix}},
+% \cs[no-index]{b\meta{suffix}}, \cs[no-index]{B\meta{suffix}},
+% \cs[no-index]{v\meta{suffix}} and \cs[no-index]{V\meta{suffix}}.
+%
+% \item The \meta{csname} of the operator to use
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_nabla_doc_cmds:nN
+{
+ \@@_new_delim_nabla_doc_cmd:cNN { p #1 } #2 \@@_inparent:w
+ \@@_new_delim_nabla_doc_cmd:cNN { b #1 } #2 \@@_inbrack:w
+ \@@_new_delim_nabla_doc_cmd:cNN { B #1 } #2 \@@_inbrace:w
+ \@@_new_delim_nabla_doc_cmd:cNN { v #1 } #2 \@@_in_vert:w
+ \@@_new_delim_nabla_doc_cmd:cNN { V #1 } #2 \@@_in_Vert:w
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Document Level Commands}
+% \label{sec:vec-doc-lvl-commands}
+%
+% The predefined macros for vector calculus are also guarded by a package
+% option to be conditionally disabled by the user.
+% \begin{macrocode}
+\bool_if:NTF \l_@@_predef_vector_op_bool
+{
+% \end{macrocode}
+% \subsubsection{Standalone Operators}
+% \label{par:impl-vector-calc-standalone}
+% The user might want to use also a non-delimited version
+% of the vector calculus operators,
+% we provide them with a standalone version of those.
+%
+% As the definition of a new document command can fail if the \meta{csname}
+% clashes with some already defined macro,
+% we define an error message to use when defining document level commands.
+% \begin{macrocode}
+\msg_new:nnn { moremath } { vector-calc / already-defined-skip }
+{
+ Control~sequence~'#1'~is~already~defined.\\
+ Skipping~definition~\msg_line_context:.
+}
+% \end{macrocode}
+%
+% \begin{macro}{
+% \grad,
+% \divergence,
+% \curl,
+% \laplacian
+% }
+% Now we provide the user with document level commands for
+% \cs[no-index]{moremath_\meta{op}_operator:n}.
+% \begin{macrocode}
+\cs_if_free:NTF \grad
+{
+ \exp_args:NNe \NewDocumentCommand \grad { !o E{ \char_generate:nn {`_}{8} }{{}} }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn {moremath} {#1}
+ }
+ \moremath_gradient_operator:n {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn {moremath} { vector-calc / already-defined-skip } {\grad}
+}
+
+\cs_if_free:NTF \divergence
+{
+ \exp_args:NNe \NewDocumentCommand \divergence
+ { !o E{ \char_generate:nn {`_} {8} }{{}} }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn {moremath} {#1}
+ }
+ \moremath_divergence_operator:n {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn {moremath} { vector-calc / already-defined-skip } {\divergence}
+}
+
+\cs_if_free:NTF \curl
+{
+ \exp_args:NNe \NewDocumentCommand \curl
+ { !o E{ \char_generate:nn {`_}{8} }{{}} }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn {moremath} {#1}
+ }
+ \moremath_curl_operator:n {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn {moremath} {vector-calc / already-defined-skip} {\curl}
+}
+
+\cs_if_free:NTF \laplacian
+{
+ \exp_args:NNe \NewDocumentCommand \laplacian
+ { !o E{ \char_generate:nn {`_}{8} }{{}} }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn {moremath} {#1}
+ }
+ \moremath_laplace_operator:n {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn {moremath} { vector-calc / already-defined-skip }
+ {\laplacian}
+}
+% \end{macrocode}
+% \begin{macro}{\quabla}
+% We now also define a command to use as a standalone
+% \foreignlanguage{french}{d'Alembert} operator.
+% As the name \cs[no-index]{dalembertian} is a bit cumbersome to type out,
+% I've decided to use one of its alternate names \cs{quabla}
+% \begin{macrocode}
+\cs_if_free:NTF \quabla
+{
+ \exp_args:NNe \NewDocumentCommand \quabla
+ { !o E{ \char_generate:nn {`_} { 8 } }{{}} }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath } {#1}
+ }
+ \moremath_dalembert_operator:n {#2}
+ \group_end:
+ }
+}{ % \cs_if_free:NTF \quabla FALSE BRANCH
+ \msg_warning:nnn { moremath } { vector-calc / already-defined-skip }
+ {\quabla}
+}
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{
+% Added \cs{quabla} command.
+% }
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Changed: Spaces between the \meta{csname}
+% and the optional argument are now disallowed.
+% }
+% \end{macro}^^X \quabla
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added \cs{grad}, \cs{divergence}, \cs{curl} and \cs{laplacian}
+% commands.
+% }
+% \changes{v0.3.0}{\GetVersionDate{v0.3.0}}{
+% Changed: Spaces between the \meta{csname}
+% and the optional argument are now disallowed
+% for \cs{grad}, \cs{divergence}, \cs{curl} and \cs{laplacian}.
+% }
+% \end{macro}
+%
+% \subsubsection{Operators with Delimiters}
+% \label{par:impl-vec-calc-op-delim}
+%
+% \begin{macro}{
+% \pgrad,
+% \bgrad,
+% \Bgrad,
+% \vgrad,
+% \Vgrad,
+% }
+% Now lets declare the delimited gradient operators.
+% We provide five versions using parenthesis, brackets, braces, single \tn{vert},
+% and double \tn{Vert}.
+% \begin{macrocode}
+\@@_new_nabla_doc_cmds:nN {grad} \moremath_gradient_operator:n
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands for delimited gradient operators.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \pdiv,
+% \bdiv,
+% \Bdiv,
+% \vdiv,
+% \Vdiv
+% }
+% Now we do the same for the divergence operator.
+% \begin{macrocode}
+\@@_new_nabla_doc_cmds:nN {div} \moremath_divergence_operator:n
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands for delimited divergence operators.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \pcurl,
+% \bcurl,
+% \Bcurl,
+% \vcurl,
+% \Vcurl
+% }
+% Now to the curl macros.
+% \begin{macrocode}
+\@@_new_nabla_doc_cmds:nN {curl} \moremath_curl_operator:n
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands for delimited curl operators.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \plaplacian,
+% \blaplacian,
+% \Blaplacian,
+% \vlaplacian,
+% \Vlaplacian
+% }
+% Next we take care of the laplacian
+% \begin{macrocode}
+\@@_new_nabla_doc_cmds:nN {laplacian} \moremath_laplace_operator:n
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands for delimited Laplace operators.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \pquabla,
+% \bquabla,
+% \Bquabla,
+% \vquabla,
+% \Vquabla
+% }
+% Finally we define delimited commands for the
+% \foreignlanguage{french}{d'Alembert} operator.
+% \begin{macrocode}
+\@@_new_nabla_doc_cmds:nN {quabla} \moremath_dalembert_operator:n
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{
+% Added commands for a delimited \foreignlanguage{french}{d'Alembert}
+% operator.
+% }
+% \end{macro}
+%
+% If the user issued \texttt{no-vector} as a package loading option,
+% write this to the log file.
+% \begin{macrocode}
+}{ % IF NOT \l_@@_predef_vector_op_bool
+ \msg_info:nnnn {moremath} { load /disabling } {no-vector}
+ {
+ predefined~vector~calculus~macros
+ }
+} % END \l_@@_predef_vector_op_bool
+% \end{macrocode}
+%
+% \section{Macros Producing Matrices and Vectors}
+% \label{sec:impl-matr-vec}
+%
+% \subsection{Producing Row and Column Vectors}
+%
+% The functions in this section are used to generate row and column vectors
+% utilizing \pkg{mathtools}~\autocite{mathtools} \env{matrix*} and
+% \env{smallmatrix*} environments.
+%
+% \begin{variable}{\l_@@_vector_entries_seq}
+% For generating row or column vectors it is necessary to store the entries
+% inside a variable. \cs{l_@@_vector_entries_seq} is used for this purpose.
+% \begin{macrocode}
+\seq_new:N \l_@@_vector_entries_seq
+% \end{macrocode}
+% \end{variable}
+%
+% Then we need a function for formatting the actual entries of the vector.
+% We need two version one for the row vector and one for the column vector
+% version.
+% \begin{macro}{
+% \@@_seq_to_column_vector:N,
+% \@@_seq_to_row_vector:N
+% }
+% These functions take one argument
+% \begin{arguments}
+% \item A sequence which should be converted to the contents of the single
+% column/row matrix.
+% \end{arguments}
+% They format the input suitable to be put inside a \env{matrix*} environment.
+% We begin with the column vector version.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_seq_to_column_vector:N
+{
+ \seq_use:Nn #1 {\\}
+}
+% \end{macrocode}
+% Then we get to the row vector.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_seq_to_row_vector:N
+{
+ \seq_use:Nn #1 {&}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% In the next step we construct the single row/column matrix from the user
+% provided input.
+% \begin{macro}{
+% \moremath_column_vector:nn,
+% \moremath_row_vector:nn,
+% }
+% The two commands \cs{moremath_column_vector:n} and \cs{moremath_row_vector:n}
+% construct the matrix, they both take two arguments.
+% \begin{arguments}
+% \item The delimiter specifier.
+%
+% This should be one of the prefixes of the \env{\meta{prefix}matrix*},
+% environments.
+%
+% Another possibility is to issue |small| as this parameter to get
+% an inline matrix.
+%
+% \item The comma separated contents of the matrix.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_column_vector:nn
+{
+ \seq_clear:N \l_@@_vector_entries_seq
+ \seq_set_from_clist:Nn \l_@@_vector_entries_seq {#2}
+
+ \exp_args:NnNV \begin{#1 matrix*} [ \l_@@_matrix_align_tl ]
+ \@@_seq_to_column_vector:N \l_@@_vector_entries_seq
+ \end{#1 matrix*}
+}
+
+\cs_new_protected_nopar:Nn \moremath_row_vector:nn
+{
+ \seq_clear:N \l_@@_vector_entries_seq
+ \seq_set_from_clist:Nn \l_@@_vector_entries_seq {#2}
+
+ \exp_args:NnNV \begin{#1matrix*} [ \l_@@_matrix_align_tl ]
+ \@@_seq_to_row_vector:N \l_@@_vector_entries_seq
+ \end{#1matrix*}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added functions producing row- and column vectors.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \moremath_column_smallvector:nn,
+% \moremath_row_smallvector:nn
+% }
+% To make the code more readable, we define functions specifically for
+% creating row and column vectors using the \env{smallmatrix*} family of
+% environments. These functions take the same arguments as the non-small
+% versions above.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_column_smallvector:nn
+{
+ \moremath_column_vector:nn {#1 small} {#2}
+}
+
+\cs_new_protected_nopar:Nn \moremath_row_smallvector:nn
+{
+ \moremath_row_vector:nn {#1 small} {#2}
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added functions producing inline math row- and column vectors.
+% }
+% \end{macro}
+%
+% ^^X SUBSECTION: Shorthands for simple matrices
+% \subsection{Shorthands for Simple Matrices}
+% \label{sec:impl-matr-shorth}
+%
+% The construction of several simple matrices like diagonal matrices,
+% can be simplified as there is no need to use the \env{matrix} environment.\footnote{%
+% The code in this section is heavily inspired by the following answer on
+% \TeX{}SE: \url{https://tex.stackexchange.com/a/539741}
+% }
+%
+% \begin{variable}{
+% \l_@@_mat_diag_entries_seq,
+% \l_@@_mat_row_entries_seq,
+% }
+% We construct the matrices row by row, therefore we need to store the
+% currently constructed row inside a variable.
+% The same is true for the diagonal entries which also need to be stored
+% somewhere.
+% We therefore declare two sequence variables \cs{l_@@_mat_diag_entries_seq}
+% and \cs{l_@@_mat_row_seq} for this purpose
+% \begin{macrocode}
+\seq_clear_new:N \l_@@_mat_diag_entries_seq
+\seq_clear_new:N \l_@@_mat_row_entries_seq
+% \end{macrocode}
+% \end{variable}
+%
+% \subsubsection{(Anti-)diagonal matrices}
+% We split the construction of the matrix into multiple parts,
+% utilizing internal helper functions.
+% \begin{macro}{
+% \@@_constr_diagmat_row:n,
+% \@@_constr_antidiagmat_row:n
+% }
+% \cs{@@_constr_diagmat_row:n} and \cs{@@_constr_antidiagmat_row:n}
+% take one integer argument:
+% \begin{arguments}
+% \item The number of the current row.
+% \end{arguments}
+% They both construct a matrix row and place it inside the input stream.
+% They take the content of the (anti-)diagonal from the variable
+% \cs{l_@@_mat_diag_entries_seq}
+% and use the variable \cs{l_@@_mat_row_entries_seq}
+% to store the current row.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_constr_diagmat_row:n
+{
+ \seq_clear:N \l_@@_mat_row_entries_seq
+% \end{macrocode}
+% As all diagonal matrices \(M \in A^{m \times n}\), where \(A\) is a field,
+% are quadratic i.e.\ \(A^{m \times n} \equiv A^{n \times n}\) the length of the
+% diagonal sequence equals the number of rows and columns of the matrix.
+% We exploit this fact here.
+% \begin{macrocode}
+ \int_step_inline:nn {\seq_count:N \l_@@_mat_diag_entries_seq}
+ {
+ \int_compare:nTF { #1 == ##1 }
+ {
+ \seq_put_right:Nx \l_@@_mat_row_entries_seq
+ {
+ \seq_item:Nn \l_@@_mat_diag_entries_seq { #1 }
+ }
+ }{ % false branch
+ \seq_put_right:NV \l_@@_mat_row_entries_seq \l_@@_matrix_fill_tl
+ } % \int_compare:nTF { #1 == ##1 }
+ }
+ \seq_use:Nn \l_@@_mat_row_entries_seq { & } \\
+}
+
+% Anti-diagonal version
+\cs_new_protected:Nn \@@_constr_antidiagmat_row:n
+{
+ \seq_clear:N \l_@@_mat_row_entries_seq
+ \int_step_inline:nn {\seq_count:N \l_@@_mat_diag_entries_seq}
+ {
+ \int_compare:nTF { #1 == ##1 }
+ {
+ % as this is a anti diagonal matrix we put in the elements from the
+ % left so that the first entry is the right most entry
+ \seq_put_left:Nx \l_@@_mat_row_entries_seq
+ {
+ \seq_item:Nn \l_@@_mat_diag_entries_seq { #1 }
+ }
+ }{ % false branch
+ \seq_put_left:NV \l_@@_mat_row_entries_seq \l_@@_matrix_fill_tl
+ } % \int_compare:nTF { #1 == ##1 }
+ }
+ \seq_use:Nn \l_@@_mat_row_entries_seq { & } \\
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \moremath_diagonal_matrix:nn,
+% \moremath_antidiagonal_matrix:nn,
+% \moremath_diagonal_smallmatrix:nn,
+% \moremath_antidiagonal_smallmatrix:nn,
+% }
+% The \cs[no-index]{moremath_\meta{a or d}_matrix:nn} and
+% \cs[no-index]{moremath_\meta{a or d}_smallmatrix:nn} family of functions
+% produce a matrix based on \pkg{mathtools}~\autocite{mathtools}
+% \env{matrix*} environment.
+% The functions take two arguments.
+% \begin{arguments}
+% \item The delimiter specifier.
+%
+% This should be one of the prefixes of the \env{\meta{prefix}matrix*}
+% environments.
+%
+% \item The comma separated contents of the (anti-)diagonal.
+% \end{arguments}
+% These functions also use the values of the variables
+% \cs{l_@@_matrix_fill_tl} and \cs{l_@@_matrix_align_tl}.
+% And modifies the variable \cs{l_@@_mat_diag_entries_seq}.
+% \begin{macrocode}
+\cs_new_protected:Nn \moremath_diagonal_matrix:nn
+{
+ \seq_set_from_clist:Nn \l_@@_mat_diag_entries_seq { #2 }
+ \exp_args:NnNV \begin{#1 matrix*} [ \l_@@_matrix_align_tl ]
+ \int_step_function:nN { \seq_count:N \l_@@_mat_diag_entries_seq }
+ \@@_constr_diagmat_row:n
+ \end{#1 matrix*}
+}
+
+% Anti-diagonal matrix
+\cs_new_protected:Nn \moremath_antidiagonal_matrix:nn
+{
+ \seq_set_from_clist:Nn \l_@@_mat_diag_entries_seq { #2 }
+ \exp_args:NnNV \begin{ #1 matrix* } [ \l_@@_matrix_align_tl ]
+ \int_step_function:nN { \seq_count:N \l_@@_mat_diag_entries_seq }
+ \@@_constr_antidiagmat_row:n
+ \end{ #1 matrix* }
+}
+
+% Small versions
+\cs_new_protected:Nn \moremath_diagonal_smallmatrix:nn
+{
+ \moremath_diagonal_matrix:nn {#1 small} {#2}
+}
+
+\cs_new_protected:Nn \moremath_antidiagonal_smallmatrix:nn
+{
+ \moremath_antidiagonal_matrix:nn {#1 small} {#2}
+}
+% \end{macrocode}
+% \begin{macro}{
+% \moremath_diagonal_matrix:nV,
+% \moremath_diagonal_matrix:Vn,
+% \moremath_diagonal_matrix:VV,
+% \moremath_antidiagonal_matrix:nV,
+% \moremath_antidiagonal_matrix:Vn,
+% \moremath_antidiagonal_matrix:VV,
+% \moremath_diagonal_smallmatrix:nV,
+% \moremath_diagonal_smallmatrix:Vn,
+% \moremath_diagonal_smallmatrix:VV,
+% \moremath_antidiagonal_smallmatrix:nV,
+% \moremath_antidiagonal_smallmatrix:Vn,
+% \moremath_antidiagonal_smallmatrix:VV,
+% }
+% For convenience we also define some variants of the above functions.
+% \begin{macrocode}
+\cs_generate_variant:Nn \moremath_diagonal_matrix:nn { n V }
+\cs_generate_variant:Nn \moremath_diagonal_matrix:nn { V n }
+\cs_generate_variant:Nn \moremath_diagonal_matrix:nn { V V }
+\cs_generate_variant:Nn \moremath_antidiagonal_matrix:nn { n V }
+\cs_generate_variant:Nn \moremath_antidiagonal_matrix:nn { V n }
+\cs_generate_variant:Nn \moremath_antidiagonal_matrix:nn { V V }
+\cs_generate_variant:Nn \moremath_diagonal_smallmatrix:nn { n V }
+\cs_generate_variant:Nn \moremath_diagonal_smallmatrix:nn { V n }
+\cs_generate_variant:Nn \moremath_diagonal_smallmatrix:nn { V V }
+\cs_generate_variant:Nn \moremath_antidiagonal_smallmatrix:nn { n V }
+\cs_generate_variant:Nn \moremath_antidiagonal_smallmatrix:nn { V n }
+\cs_generate_variant:Nn \moremath_antidiagonal_smallmatrix:nn { V V }
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{Added variants.}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{Added "nV" and "VV" variants.}
+% \end{macro}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added functions producing (anti-)diagonal matrices.
+% Also added versions for inline math.
+% }
+% \end{macro}
+%
+%
+% \subsubsection{Identity Matrices}
+% As we already have functions available for producing diagonal matrices,
+% it makes only sense to also provide a shorthand for producing an identity matrix,
+% i.e.\ a diagonal matrix with \enquote{1} along the diagonal.
+%
+%
+% \begin{macro}{
+% \@@_generate_one_filled_clist:Nn
+% }
+% The function \cs{@@_generate_one_filled_clist:Nn} produces a \meta{clist},
+% consisting only of \enquote{1} as entries.
+% This function takes two arguments:
+% \begin{arguments}
+% \item The \emph{csname} of a \meta{clist~var} to store the \meta{clist}
+% into.
+%
+% \item An \meta{int} to represent the number of entries to produce.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_generate_one_filled_clist:Nn
+{
+ \seq_clear:N \l_tmpa_seq
+ \int_step_inline:nn {#2}
+ {
+ \seq_put_right:NV \l_tmpa_seq \c_one_int
+ }
+ \clist_set_from_seq:NN #1 \l_tmpa_seq
+}
+% \end{macrocode}
+% \begin{macro}{
+% \@@_generate_one_filled_clist:NV
+% }
+% We also define a variant accepting an integer variable.
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_generate_one_filled_clist:Nn { N V }
+% \end{macrocode}
+% \end{macro}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added function.
+% }
+% \end{macro}
+%
+% \begin{variable}{
+% \l_@@_id_entries_clist
+% }
+% As we want to utilize the \cs{moremath_diagonal_matrix:VV} and
+% \cs{moremath_diagonal_smallmatrix:VV} functions for creating the identity
+% matrix we declare an internal \meta{clist~var} called
+% \cs{l_@@_id_entries_clist} for passing the \meta{clist} around.
+% \begin{macrocode}
+\clist_new:N \l_@@_id_entries_clist
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{Added variable.}
+% \end{variable}
+%
+% \begin{macro}{
+% \moremath_id_matrix:n,
+% \moremath_id_smallmatrix:n
+% }
+% These functions are intended to produce an identity matrix from an integer
+% expression.
+% They take one argument.
+% \begin{arguments}
+% \item The number of diagonal entries.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_id_matrix:n
+{
+ \clist_clear:N \l_@@_id_entries_clist
+ \@@_generate_one_filled_clist:Nn \l_@@_id_entries_clist {#1}
+ \moremath_diagonal_matrix:VV \l_@@_matrix_delim_tl \l_@@_id_entries_clist
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \moremath_id_smallmatrix:n
+{
+ \clist_clear:N \l_@@_id_entries_clist
+ \@@_generate_one_filled_clist:Nn \l_@@_id_entries_clist {#1}
+ \moremath_diagonal_smallmatrix:VV \l_@@_matrix_delim_tl \l_@@_id_entries_clist
+}
+% \end{macrocode}
+%
+% \begin{macro}{
+% \moremath_id_matrix:V,
+% \moremath_id_smallmatrix:V
+% }
+% We also provide variants, which accepts a "V"-type argument:
+% \begin{macrocode}
+\cs_generate_variant:Nn \moremath_id_matrix:n { V }
+\cs_generate_variant:Nn \moremath_id_smallmatrix:n { V }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added functions \cs{moremath_id_matrix:n} and \cs{moremath_id_smallmatrix:n}
+% and variants.
+% }
+% \end{macro}
+%
+% \subsection{Document Level Commands}
+% \label{sec:mat-doc-lvl-cmds}
+%
+% Now we define document level commands for the previously defined
+% functions.
+%
+% But before we do so we define a message to be issued in case the targeted
+% \meta{csname} is already defined elsewhere.
+% \begin{macrocode}
+\msg_new:nnnn { moremath } { matrix / already-defined-doc-cmd-skip }
+{
+ Control~sequence~'#1'~is~already~defined.\\
+ Skipping~definition~\msg_line_context:.
+}
+{
+ The~control~sequence~'#1'~has~already\\
+ been~defined~by~some~other~package.\\
+ And~I~am~refusing~to~overwrite~the~existing~definition,\\
+ therefore~I~am~skipping~the~definition~of~this~command.
+}
+% \end{macrocode}
+%
+% \subsubsection{Row and Column Vectors}
+% We begin with the row and column vector functions.
+% As with the other document level commands, we guard the definitions
+% with a key value option, so that the user can disable them.
+% \begin{macrocode}
+\bool_if:nTF \l_@@_predef_crvector_bool
+{
+% \end{macrocode}
+% \begin{macro}{
+% \cvector,
+% \rvector,
+% \smallcvector,
+% \smallrvector
+% }
+% First we define the document level command for the bare column vector
+% \begin{macrocode}
+\cs_if_free:NTF \cvector
+{
+ \NewDocumentCommand \cvector { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_column_vector:nn {\l_@@_matrix_delim_tl} {#2}
+ \group_end:
+ }
+}{
+ % issue a warning message if the csname is already taken.
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \cvector
+ }
+} % \cs_if_free:NTF \cvector
+% \end{macrocode}
+% and the row vector.
+% \begin{macrocode}
+\cs_if_free:NTF \rvector
+{
+ \NewDocumentCommand \rvector { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_row_vector:nn {\l_@@_matrix_delim_tl} {#2}
+ \group_end:
+ }
+}{
+ % warn if csname is already taken
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip}
+ {
+ \rvector
+ }
+} % \cs_if_free:NTF \rvector
+% \end{macrocode}
+% Then we define the smaller inline versions of those commands.
+% \begin{macrocode}
+\cs_if_free:NTF \smallcvector
+{
+ \NewDocumentCommand \smallcvector { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn {moremath / matrix} {#1}
+ }
+ \moremath_column_smallvector:nn {\l_@@_matrix_delim_tl} {#2}
+ \group_end:
+ }
+}{
+ % Issue a warning message if the csname is already taken
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \smallcvector
+ }
+} % \cs_if_free:NTF \smallcvector
+
+\cs_if_free:NTF \smallrvector
+{
+ \NewDocumentCommand \smallrvector { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_row_smallvector:nn {\l_@@_matrix_delim_tl} {#2}
+ \group_end:
+ }
+}{
+ % warn if csname is taken
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \smallrvector
+ }
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands producing row and column vectors,
+% including inline math versions.
+% }
+% \end{macro}
+%
+% \paragraph{Commands with Pre-defined Delimiters}
+% Next we define several shorthands to for the commonly used delimiters,
+% to avoid code duplication, we first create some helper functions which
+% define those functions.
+% \begin{macro}{
+% \@@_new_vector_shorth_doc_cmd:NNn
+% }
+% The function \cs{@@_new_vector_shorth_doc_cmd} creates a new vector shorthand,
+% command. It takes three arguments:
+% \begin{arguments}
+% \item The \meta{csname} to be defined.
+% \item The \meta{function} to use for this shorthand.
+%
+% This should be one of the
+% \cs[no-index]{moremath_\meta{type}_\meta{size}vector:nn}
+% like commands.
+%
+% \item The \meta{delimiter} to use.
+%
+% Usually one of |p|, |b|, |B|, |v|, |V|.
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_vector_shorth_doc_cmd:NNn
+{
+ \cs_if_free:NTF #1
+ {
+ \NewDocumentCommand #1 { o m }
+ {
+ \group_begin:
+ % set the delimiter key pre-set for this function
+ \keys_set:nn {moremath / matrix } {delimiter = #3}
+ \tl_if_novalue:nF {##1}
+ {
+ \keys_set:nn {moremath / matrix } {##1}
+ }
+ #2 {\l_@@_matrix_delim_tl} {##2}
+ \group_end:
+ }
+ }{
+ % warn if csname is taken
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ #1
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \pcvector,
+% \bcvector,
+% \Bcvector,
+% \vcvector,
+% \Vcvector,
+% \prvector,
+% \brvector,
+% \Brvector,
+% \vrvector,
+% \Vrvector,
+% }
+% Now we define shorthands for all of the matrix types so that the user
+% does not have to specify |delimiter=|\meta{delim} every time.
+% We begin with the column vector.
+% \begin{macrocode}
+% parenthesis
+\@@_new_vector_shorth_doc_cmd:NNn \pcvector \moremath_column_vector:nn {p}
+% brackets
+\@@_new_vector_shorth_doc_cmd:NNn \bcvector \moremath_column_vector:nn {b}
+% braces
+\@@_new_vector_shorth_doc_cmd:NNn \Bcvector \moremath_column_vector:nn {B}
+% single vert
+\@@_new_vector_shorth_doc_cmd:NNn \vcvector \moremath_column_vector:nn {v}
+% double vert
+\@@_new_vector_shorth_doc_cmd:NNn \Vcvector \moremath_column_vector:nn {V}
+% \end{macrocode}
+% Now to the row vectors.
+% \begin{macrocode}
+% parenthesis
+\@@_new_vector_shorth_doc_cmd:NNn \prvector \moremath_row_vector:nn {p}
+% brackets
+\@@_new_vector_shorth_doc_cmd:NNn \brvector \moremath_row_vector:nn {b}
+% braces
+\@@_new_vector_shorth_doc_cmd:NNn \Brvector \moremath_row_vector:nn {B}
+% single vert
+\@@_new_vector_shorth_doc_cmd:NNn \vrvector \moremath_row_vector:nn {v}
+% double vert
+\@@_new_vector_shorth_doc_cmd:NNn \Vrvector \moremath_row_vector:nn {V}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for row and column vectors with predefined delimiters.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \psmallcvector,
+% \bsmallcvector,
+% \Bsmallcvector,
+% \vsmallcvector,
+% \Vsmallcvector,
+% \psmallrvector,
+% \bsmallrvector,
+% \Bsmallrvector,
+% \vsmallrvector,
+% \Vsmallrvector
+% }
+% We also define shorthands for the \cs{shortcvector} and \cs{shortrvector}
+% versions.
+% \begin{macrocode}
+% column vectors
+% parenthesis
+\@@_new_vector_shorth_doc_cmd:NNn \psmallcvector \moremath_column_smallvector:nn
+ {p}
+% brackets
+\@@_new_vector_shorth_doc_cmd:NNn \bsmallcvector \moremath_column_smallvector:nn
+ {b}
+% braces
+\@@_new_vector_shorth_doc_cmd:NNn \Bsmallcvector \moremath_column_smallvector:nn
+ {B}
+% single vert
+\@@_new_vector_shorth_doc_cmd:NNn \vsmallcvector \moremath_column_smallvector:nn
+ {v}
+% double vert
+\@@_new_vector_shorth_doc_cmd:NNn \Vsmallcvector \moremath_column_smallvector:nn
+ {V}
+%
+% row vectors
+% parenthesis
+\@@_new_vector_shorth_doc_cmd:NNn \psmallrvector \moremath_row_smallvector:nn {p}
+% brackets
+\@@_new_vector_shorth_doc_cmd:NNn \bsmallrvector \moremath_row_smallvector:nn {b}
+% braces
+\@@_new_vector_shorth_doc_cmd:NNn \Bsmallrvector \moremath_row_smallvector:nn {B}
+% single vert
+\@@_new_vector_shorth_doc_cmd:NNn \vsmallrvector \moremath_row_smallvector:nn {v}
+% double vert
+\@@_new_vector_shorth_doc_cmd:NNn \Vsmallrvector \moremath_row_smallvector:nn {V}
+
+
+}{ % \bool_if:nTF \l_@@_predef_crvector_bool FALSE PATH
+ \msg_info:nnnn {moremath} {load / disabling} {no-crvector}
+ {
+ commands~producing~row~and~column~vectors
+ }
+} % \bool_if:nTF \l_@@_predef_crvector_bool
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for inline math row and column vectors
+% with predefined delimiters.
+% }
+% \end{macro}
+%
+%
+% \subsubsection{(Anti-)diagonal Matrices}
+% Now to the (anti-)diagonal matrix shorthands,
+% these are also guarded by a key value option.
+% \begin{macrocode}
+\bool_if:nTF \l_@@_predef_matrix_bool
+{
+% \end{macrocode}
+% \begin{macro}{
+% \diagmat,
+% \antidiagmat,
+% \smalldiagmat,
+% \smallantidiagmat,
+% }
+% \begin{NOTE}{MI}
+% Say something like we begin with some commands producing a matrix that
+% is not necessarily delimited.
+% \end{NOTE}
+% \begin{macrocode}
+\cs_if_free:NTF \diagmat
+{
+ \NewDocumentCommand \diagmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_diagonal_matrix:Vn \l_@@_matrix_delim_tl {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn {moremath} {matrix / already-defined-doc-cmd-skip}
+ {
+ \diagmat
+ }
+} % \cs_if_free:nTF \diagmat
+
+\cs_if_free:NTF \antidiagmat
+{
+ \NewDocumentCommand \antidiagmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_antidiagonal_matrix:Vn \l_@@_matrix_delim_tl {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \antidiagmat
+ }
+} % \cs_if_free:nTF \antidiagmat
+
+\cs_if_free:NTF \smalldiagmat
+{
+ \NewDocumentCommand \smalldiagmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_diagonal_smallmatrix:Vn \l_@@_matrix_delim_tl {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \smalldiagmat
+ }
+}
+
+\cs_if_free:NTF \smallantidiagmat
+{
+ \NewDocumentCommand \smallantidiagmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_antidiagonal_smallmatrix:Vn \l_@@_matrix_delim_tl {#2}
+ \group_end:
+ }
+}{
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ \smallantidiagmat
+ }
+}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added commands producing (anti-)diagonal matrices, including inline math
+% versions.
+% }
+% \end{macro}
+%
+% \paragraph{(Anti-)diagonal Matrices with Pre-defined Delimiters}
+% As it is sort of cumbersome to always specify the delimiter key,
+% we also provide commands with pre-defined delimiters.
+% \begin{macro}{
+% \@@_new_matrix_shorth_doc_cmd:NNn
+% }
+% To provide several shorthands for delimited matrices,
+% we use a helper function to avoid code duplication.
+% \cs{@@_new_matrix_shorth_doc_cmd:NNn} takes three arguments:
+% \begin{arguments}
+% \item The \meta{csname} to define
+% \item The \meta{csname} of the matrix function to use,
+% which should have the signature |Vn|.
+% \item The \enquote{predefined} delimiter of this version
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_matrix_shorth_doc_cmd:NNn
+{
+ \cs_if_free:NTF #1
+ {
+ \NewDocumentCommand #1 { o m }
+ {
+ \group_begin:
+ \tl_if_empty:nF {#3}
+ {
+ \keys_set:nn { moremath / matrix }
+ {
+ delimiter = #3
+ }
+ } % \tl_if_empty:nF {#3}
+ \tl_if_novalue:nF {##1}
+ {
+ \keys_set:nn { moremath / matrix } {##1}
+ }
+ #2 \l_@@_matrix_delim_tl {##2}
+ \group_end:
+ }
+ }{
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {
+ #1
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We now define the shorthand commands with predefined delimiters.
+% \begin{macro}{
+% \pdiagmat,
+% \bdiagmat,
+% \Bdiagmat,
+% \vdiagmat,
+% \Vdiagmat,
+% }
+% We begin with the regular diagonal matrix
+% \begin{macrocode}
+\@@_new_matrix_shorth_doc_cmd:NNn \pdiagmat \moremath_diagonal_matrix:Vn {p}
+\@@_new_matrix_shorth_doc_cmd:NNn \bdiagmat \moremath_diagonal_matrix:Vn {b}
+\@@_new_matrix_shorth_doc_cmd:NNn \Bdiagmat \moremath_diagonal_matrix:Vn {B}
+\@@_new_matrix_shorth_doc_cmd:NNn \vdiagmat \moremath_diagonal_matrix:Vn {v}
+\@@_new_matrix_shorth_doc_cmd:NNn \Vdiagmat \moremath_diagonal_matrix:Vn {V}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for delimited diagonal matrices.
+% }
+% \end{macro}
+% \begin{macro}{
+% \pantidiagmat,
+% \bantidiagmat,
+% \Bantidiagmat,
+% \vantidiagmat,
+% \Vantidiagmat,
+% }
+% Now for the anti-diagonal matrix commands.
+% \begin{macrocode}
+\@@_new_matrix_shorth_doc_cmd:NNn \pantidiagmat
+ \moremath_antidiagonal_matrix:Vn {p}
+\@@_new_matrix_shorth_doc_cmd:NNn \bantidiagmat
+ \moremath_antidiagonal_matrix:Vn {b}
+\@@_new_matrix_shorth_doc_cmd:NNn \Bantidiagmat
+ \moremath_antidiagonal_matrix:Vn {B}
+\@@_new_matrix_shorth_doc_cmd:NNn \vantidiagmat
+ \moremath_antidiagonal_matrix:Vn {v}
+\@@_new_matrix_shorth_doc_cmd:NNn \Vantidiagmat
+ \moremath_antidiagonal_matrix:Vn {V}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for delimited antidiagonal matrices.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \psmalldiagmat,
+% \bsmalldiagmat,
+% \Bsmalldiagmat,
+% \vsmalldiagmat,
+% \Vsmalldiagmat,
+% }
+% We continue with the inline math versions based on the \env{smallmatrix*}
+% environment.
+% \begin{macrocode}
+\@@_new_matrix_shorth_doc_cmd:NNn \psmalldiagmat
+ \moremath_diagonal_smallmatrix:Vn {p}
+\@@_new_matrix_shorth_doc_cmd:NNn \bsmalldiagmat
+ \moremath_diagonal_smallmatrix:Vn {b}
+\@@_new_matrix_shorth_doc_cmd:NNn \Bsmalldiagmat
+ \moremath_diagonal_smallmatrix:Vn {B}
+\@@_new_matrix_shorth_doc_cmd:NNn \vsmalldiagmat
+ \moremath_diagonal_smallmatrix:Vn {v}
+\@@_new_matrix_shorth_doc_cmd:NNn \Vsmalldiagmat
+ \moremath_diagonal_smallmatrix:Vn {V}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for delimited diagonal matrices suitable for inline math.
+% }
+% \end{macro}
+% \begin{macro}{
+% \psmallantidiagmat,
+% \bsmallantidiagmat,
+% \Bsmallantidiagmat,
+% \vsmallantidiagmat,
+% \Vsmallantidiagmat,
+% }
+% We provide also anti-diagonal versions of the small matrices.
+% \begin{macrocode}
+\@@_new_matrix_shorth_doc_cmd:NNn \psmallantidiagmat
+ \moremath_antidiagonal_smallmatrix:Vn {p}
+\@@_new_matrix_shorth_doc_cmd:NNn \bsmallantidiagmat
+ \moremath_antidiagonal_smallmatrix:Vn {b}
+\@@_new_matrix_shorth_doc_cmd:NNn \Bsmallantidiagmat
+ \moremath_antidiagonal_smallmatrix:Vn {B}
+\@@_new_matrix_shorth_doc_cmd:NNn \vsmallantidiagmat
+ \moremath_antidiagonal_smallmatrix:Vn {v}
+\@@_new_matrix_shorth_doc_cmd:NNn \Vsmallantidiagmat
+ \moremath_antidiagonal_smallmatrix:Vn {V}
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{
+% Added commands for delimited anti-diagonal matrices suitable for inline math.
+% }
+% \end{macro}
+%
+% \subsubsection{Identity Matrices}
+% We also provide document level commands for producing an identity matrix.
+% These commands are also guarded by the same variable as the other matrix commands
+% (\cs{l_@@_predef_matrix_bool}).
+%
+% \begin{macro}{
+% \idmat,
+% \smallidmat,
+% }
+% We provide two document level commands for producing the identiy matrix,
+% one for inline math mode and one for display math mode.
+%
+% We start with the display math mode version.
+% \begin{macrocode}
+\cs_if_free:NTF \idmat
+{
+ \NewDocumentCommand \idmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_id_matrix:n {#2}
+ \group_end:
+ }
+}{ % \cs_if_free:NTF \idmat FALSE BRANCH
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {\idmat}
+}
+% \end{macrocode}
+% Afterwards we continue with the inline math mode version.
+% \begin{macrocode}
+\cs_if_free:NTF \smallidmat
+{
+ \NewDocumentCommand \smallidmat { o m }
+ {
+ \group_begin:
+ \tl_if_novalue:nF {#1}
+ {
+ \keys_set:nn { moremath / matrix } {#1}
+ }
+ \moremath_id_smallmatrix:n {#2}
+ \group_end:
+ }
+}{ % \cs_if_free:NTF \smallidmat FALSE BRANCH
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {\smallidmat}
+}
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added \cs{idmat} and \cs{smallidmat} document level commands.
+% }
+% \end{macro}
+%
+% \paragraph{Identity Matrices with Pre-defined Delimiters}
+% We also define shorthands for the commonly used delimiters around matrices,
+% to avoid code duplication, we first declare a helper function for this.
+% \begin{macro}{
+% \@@_new_id_matrix_doc_cmd:NNn
+% }
+% This function creates a new document level command for an identity matrix like
+% command.
+% It allows pre-setting \meta{kv~opts}.
+% The function takes three arguments.
+% \begin{arguments}
+% \item The \meta{csname} of the document level command to define
+%
+% \item The \meta{csname} of the function to use
+%
+% This is indented to be one of \cs{moremath_id_matrix:n} or
+% \cs{moremath_id_smallmatrix:n}
+%
+% \item \meta{kv~opts} to preset in the "moremath / matrix" namespace
+% for this command
+%
+% This is meant to be used for pre-setting the key "delimiter".
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_new_id_matrix_doc_cmd:NNn
+{
+ \cs_if_free:NTF #1
+ {
+ \NewDocumentCommand #1 { o m }
+ {
+ \group_begin:
+ \tl_if_empty:nF {#3}
+ {
+ \keys_set:nn { moremath / matrix } {#3}
+ }
+ \tl_if_novalue:nF {##1}
+ {
+ \keys_set:nn { moremath / matrix } {##1}
+ }
+ #2 {##2}
+ \group_end:
+ }
+ }{ % \cs_if_free:NTF #1 FALSE BRANCH
+ \msg_warning:nnn { moremath } { matrix / already-defined-doc-cmd-skip }
+ {#1}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \pidmat,
+% \bidmat,
+% \Bidmat,
+% \vidmat,
+% \Vidmat
+% }
+% We begin with the display math versions,
+% starting with the version delimited by parenthesis,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \pidmat \moremath_id_matrix:n { delimiter = p }
+% \end{macrocode}
+% continue with the bracketed version,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \bidmat \moremath_id_matrix:n { delimiter = b }
+% \end{macrocode}
+% the version using braces,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \Bidmat \moremath_id_matrix:n { delimiter = B }
+% \end{macrocode}
+% single vertical lines,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \vidmat \moremath_id_matrix:n { delimiter = v }
+% \end{macrocode}
+% and finally double vertical lines.
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \Vidmat \moremath_id_matrix:n { delimiter = V }
+% \end{macrocode}
+%
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{
+% Added document level commands \cs{pidmat}, \cs{bidmat}, \cs{Bidmat},
+% \cs{vidmat}, and \cs{Vidmat}.
+% }
+% \end{macro}
+%
+% \begin{macro}{
+% \psmallidmat,
+% \bsmallidmat,
+% \Bsmallidmat,
+% \vsmallidmat,
+% \Vsmallidmat,
+% }
+% Now we also define shorthands for inline math mode.
+% We start again defining the version using parenthesis,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \psmallidmat \moremath_id_smallmatrix:n
+ { delimiter = p }
+% \end{macrocode}
+% then brackets,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \bsmallidmat \moremath_id_smallmatrix:n
+ { delimiter = b }
+% \end{macrocode}
+% then braces,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \Bsmallidmat \moremath_id_smallmatrix:n
+ { delimiter = B }
+% \end{macrocode}
+% followed by single vertical lines,
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \vsmallidmat \moremath_id_smallmatrix:n
+ { delimiter = v }
+% \end{macrocode}
+% and finally double vertical lines.
+% \begin{macrocode}
+\@@_new_id_matrix_doc_cmd:NNn \Vsmallidmat \moremath_id_smallmatrix:n
+ { delimiter = V }
+% \end{macrocode}
+% \changes{v0.2.0}{\GetVersionDate{v0.2.0}}{%
+% Added document level commands \cs{psmallidmat}, \cs{bsmallidmat},
+% \cs{Bsmallidmat}, \cs{vsmallidmat} and \cs{Vsmallidmat}.
+% }
+% \end{macro}
+%
+% \begin{macrocode}
+}{ % \bool_if:nTF \l_@@_predef_matrix_bool FALSE BRANCH
+ \msg_info:nnnn {moremath} { load / disabling } { no-matrix }
+ {
+ (anti-)diagonal~matrix~commands
+ }
+} % \bool_if:nTF \l_@@_predef_matrix_bool
+% \end{macrocode}
+%
+%
+% \section{Shorthand Macros for Absolute Value and Norm}
+% \label{sec:impl-abs-shorthands}
+%
+% We first declare another warning message to inform the user of the case that,
+% the \meta{csnames} are already taken.
+% \begin{macrocode}
+\msg_new:nnnn { moremath } { abs-shorth / csname-already-defined-skip }
+{
+ Control~sequence~'#1'~is~already~defined.\\
+ Skipping~declaration~of~paired~delimiter~\msg_line_context:.\\
+ Use~package~option~'no-abs-shorthands'~to~disable~the~paired\\
+ delimiter~shorthands.
+}{
+ The~control~sequence~'#1'~has~already~been\\
+ defined~by~something~else.\\
+ I~am~refusing~to~overwrite~its~existing~definition~and~instead~avoid\\
+ declaring~a~paired~delimiter.\\
+}
+% \end{macrocode}
+%
+%
+% As with the other parts these macros may be conditionally disabled.
+% \begin{macrocode}
+\bool_if:NTF \l_@@_predef_abs_bool
+{
+% \end{macrocode}
+% \begin{macro}{\abs,\norm}
+% These macros provide shorthands for \(\abs{\meta{content}}\)
+% and \(\norm{\meta{content}}\).
+% \begin{macrocode}
+\cs_if_free:NTF \abs
+{
+ \DeclarePairedDelimiter \abs {\lvert} {\rvert}
+}{
+ % warn if the csname is taken
+ \msg_warning:nnn { moremath } { abs-shorth / csname-already-defined-skip }
+ {\abs}
+} % \cs_if_free:NTF \abs
+
+\cs_if_free:NTF \norm
+{
+ \DeclarePairedDelimiter \norm {\lVert} {\rVert}
+}{
+ % warn if csname is already taken
+ \msg_warning:nnn { moremath } { abs-shorth / csname-already-defined-skip }
+ {\norm}
+} % \cs_if_free:NTF
+% \end{macrocode}
+% \changes{v0.1.0}{\GetVersionDate{v0.1.0}}{%
+% Added shorthands for absolute value and norm.
+% }
+% \end{macro}
+%
+% \begin{macrocode}
+}{
+ \msg_info:nnnn {moremath} {load / disabling} {no-abs-shorthands}
+ {
+ '\abs'~and~'\norm'~macros
+ }
+} % End of the conditional
+% \end{macrocode}
+%
+% \iffalse debug-switch
+%\debug_off:n {all}
+% \fi
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \end{implementation}
+%
+% \section*{Copyright and License}
+% \addcontentsline{toc}{section}{Copyright and License}
+% \label{sec:license}
+%
+% The following copyright notice applies to the \pkg{moremath} package:
+%
+% \begin{quote}
+% Copyright \textcopyright{} 2024 Marcel Ilg
+%
+% 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 in
+% \url{https://www.latex-project.org/lppl.txt}
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status \enquote{maintained}.
+%
+% The Current Maintainer of this work is Marcel Ilg.
+%
+% This work consists of the files listed in \file{MANIFEST.md}.
+% \end{quote}
+%
+% \noindent The file \file{MANIFEST.md} has to be distributed together with the
+% package.
+%
+%
+% \printbibliography[heading=bibintoc]
+% \PrintChanges
+% \PrintIndex
diff --git a/macros/latex/contrib/moremath/moremath.ins b/macros/latex/contrib/moremath/moremath.ins
new file mode 100644
index 0000000000..f04f2b04b2
--- /dev/null
+++ b/macros/latex/contrib/moremath/moremath.ins
@@ -0,0 +1,66 @@
+%%
+%% Copyright (C) 2024 Marcel Ilg
+%%
+%% 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 in
+%%
+%% https://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status ‘maintained’.
+%%
+%% The Current Maintainer of this work is Marcel Ilg.
+%%
+%% This work consists of the files listed in MANIFEST.md.
+
+\input docstrip
+
+\usedir{tex/latex/moremath}
+
+\keepsilent
+
+\preamble
+
+This is a generated file.
+
+
+Copyright (C) 2024 Marcel Ilg
+
+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 in
+
+ https://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status ‘maintained’.
+
+The Current Maintainer of this work is Marcel Ilg.
+
+This work consists of the files listed in MANIFEST.md.
+
+\endpreamble
+
+\generate{\file{moremath.sty}{\from{moremath.dtx}{package}}}
+
+\obeyspaces
+\Msg{***************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following file into a}
+\Msg{* directory searched by TeX:}
+\Msg{*}
+\Msg{* moremath.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file moremath.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{***************************************************************************}
+\endbatchfile
diff --git a/macros/latex/contrib/msu-thesis/README.md b/macros/latex/contrib/msu-thesis/README.md
index e46f1c7d41..d1942487f7 100644
--- a/macros/latex/contrib/msu-thesis/README.md
+++ b/macros/latex/contrib/msu-thesis/README.md
@@ -1,4 +1,4 @@
-# MSU Thesis Class Version 4.3 2024/06/07
+# MSU Thesis Class Version 4.3b 2024/07/08
Copyright 2011-2024 by Alan Munn <amunn@msu.edu>
diff --git a/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex b/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
index 4a65332621..ffd0904eb8 100644
--- a/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
+++ b/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
@@ -2,8 +2,8 @@
\documentclass[11pt]{article}
-\def\msuversion{4.3}
-\def\msudate{2024/06/07}
+\def\msuversion{4.3b}
+\def\msudate{2024/07/08}
\title{\textbf{Using the MSU Thesis Class}}
\author{\textbf{Alan Munn}\\Department of Linguistics, Languages, and Cultures\\Michigan State University\\\texttt{\href{mailto:amunn@msu.edu}{amunn@msu.edu}}}
\date{Version \msuversion\\\msudate}
@@ -467,7 +467,7 @@ Florent Chervet for early \pkg{hyperref} code (up until v.3.6), and Ulrike Fisch
current \pkg{hyperref} code. Thanks to David Carlisle for helping me understand a ridiculous spacing problem.
Thanks also to the following people who have reported
problems over the years: Irina Agafonova, Ali Al-jiboory, Abubakr Ayesh, Julian Blank,
-Nathan Brugnone, Dmitriy Bryndin, Greg Christian, Kyle Crayne, Ciaron Hamilton, Matt Husband, Changkuk
+Nathan Brugnone, Dmitriy Bryndin, Harrison Cassady, Greg Christian, Kyle Crayne, Ciaron Hamilton, Matt Husband, Changkuk
Jung, Minkyu Kim, Claire Kopenhafer, Adam Liter, Vanessa Maldonado, Andriana Manousidaki, Ben Miller, William Muir, Eureka
Pai, Alicia Parrish, Victoria Parrish, Neil ver Planck, Taha Posos, Nick Rekuski, Giacomo Romanini, William Sands, Adam
Soliman, Mookyong Son, Erik Stitt, Fanurs C.E. Teh, Eremey Valetov, Matthew Vincent, Michael Wojcik, Stephen Yowono, Atacan Yücesoy, Ali
diff --git a/macros/latex/contrib/msu-thesis/msu-thesis.cls b/macros/latex/contrib/msu-thesis/msu-thesis.cls
index 7f5955ab4a..538a98da06 100644
--- a/macros/latex/contrib/msu-thesis/msu-thesis.cls
+++ b/macros/latex/contrib/msu-thesis/msu-thesis.cls
@@ -194,10 +194,11 @@
% Version 4.2 2024/02/18 Changed spacing for sections to address complaints about adjacent sectioning commands
% Version 4.2b 2024/05/16 Added version check for l3kernel.
% Version 4.3 2024/06/07 Fixed bug with TOCs when calc package was loaded; added \msuappendixdelim
+% Version 4.3b 2024/07/08 Fixed spurious page break with biblatex per chapter bibliographies
% Report bugs/problems/questions to <amunn@msu.edu>
%
-\def\msu@version{4.3}
-\def\msu@date{2024/06/07}
+\def\msu@version{4.3b}
+\def\msu@date{2024/07/08}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{msu-thesis}[\msu@date\space Michigan State University Thesis Class version \msu@version]
\@ifundefined{ExplLoaderFileDate}
@@ -837,9 +838,10 @@ chapterapp.code = {
% This code probably needs to be revisited since it’s a unholy amalgam of old and new code
% Removed clearpage from the document level code in response to issue #26.
% Problem seems to only arise with biblatex so more testing is needed
+% Added test for natbib here 7/8/2024 because biblatex produces extra page
\newcommand\msu@addbibheadtotoc{%
\ifmsu@chapterbib
- \clearpage\phantomsection\addcontentsline{toc}{\msu@bibsection}{\bibtocname}
+ \@ifpackageloaded{natbib}{\clearpage}{}\phantomsection\addcontentsline{toc}{\msu@bibsection}{\bibtocname}
\else
\phantomsection\addcontentsline{toc}{chapter}{\bibtocname}
\fi
diff --git a/macros/latex/contrib/msu-thesis/msu-thesis.pdf b/macros/latex/contrib/msu-thesis/msu-thesis.pdf
index 89adadc332..11fe39050a 100644
--- a/macros/latex/contrib/msu-thesis/msu-thesis.pdf
+++ b/macros/latex/contrib/msu-thesis/msu-thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/msu-thesis/samples/MSU-thesis-chapterbib-testfile.pdf b/macros/latex/contrib/msu-thesis/samples/MSU-thesis-chapterbib-testfile.pdf
index 6e9c51144e..2de16c4965 100644
--- a/macros/latex/contrib/msu-thesis/samples/MSU-thesis-chapterbib-testfile.pdf
+++ b/macros/latex/contrib/msu-thesis/samples/MSU-thesis-chapterbib-testfile.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/README.md b/macros/latex/contrib/oberdiek/README.md
index 4a2250cf37..b455eff334 100644
--- a/macros/latex/contrib/oberdiek/README.md
+++ b/macros/latex/contrib/oberdiek/README.md
@@ -1,6 +1,6 @@
# Oberdiek bundle
-Version: 2023-12-04
+Version: 2024-07-26
This file describes the directory
CTAN:macros/latex/contrib/oberdiek/
@@ -11,7 +11,7 @@ It contains several packages:
## Copyright (C)
* 2007, 2009-2011 Heiko Oberdiek
-* 2016-2023 Oberdiek Package Support Group
+* 2016-2024 Oberdiek Package Support Group
## License
LATEX Project Public License, version 1.3c or later.
@@ -48,7 +48,6 @@ Other files in the CTAN directory:
* flags: setting and clearing flags in bit fields and converting the bit field into a decimal number;
* holtxdoc: extra documentation macros;
* hypbmsec: bookmarks in sectioning commands;
-* hypcap: anjusting anchors of captions;
* hypgotoe: experimental package for links to embedded files;
* hyphsubst: substitute hyphenation patterns;
* ifdraft: switch for option draft;
@@ -66,6 +65,5 @@ Other files in the CTAN directory:
* stampinclude: selects the files for \include by inspecting the timestamp of the .aux file(s);
* tabularht: tabulars with height specification;
* tabularkv: key value interface for tabular parameters;
-* telprint: print German telephone numbers;
* thepdfnumber: canonical numbers for use in PDF files and elsewhere;
* twoopt: commands with two optional arguments;
diff --git a/macros/latex/contrib/oberdiek/aliascnt.dtx b/macros/latex/contrib/oberdiek/aliascnt.dtx
index 47bfec1ee2..7010eb64e1 100644
--- a/macros/latex/contrib/oberdiek/aliascnt.dtx
+++ b/macros/latex/contrib/oberdiek/aliascnt.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex aliascnt.dtx
% makeindex -s gind.ist aliascnt.idx
% pdflatex aliascnt.dtx
@@ -308,7 +308,7 @@ and the derived files
% Therefore we must ensure that manipulations to the clear list
% are done with the clear list macro of a real counter.
% \begin{macro}{\AC@findrootcnt}
-% \cs{AC@findrootcnt} walks throught the aliasing relations
+% \cs{AC@findrootcnt} walks through the aliasing relations
% to find the base counter.
% \begin{macrocode}
\newcommand*{\AC@findrootcnt}[1]{%
diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf
index 5978332f27..cac6636ab9 100644
--- a/macros/latex/contrib/oberdiek/aliascnt.pdf
+++ b/macros/latex/contrib/oberdiek/aliascnt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bmpsize.dtx b/macros/latex/contrib/oberdiek/bmpsize.dtx
index 0eec647c99..bdcf6004d0 100644
--- a/macros/latex/contrib/oberdiek/bmpsize.dtx
+++ b/macros/latex/contrib/oberdiek/bmpsize.dtx
@@ -54,7 +54,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex bmpsize.dtx
% makeindex -s gind.ist bmpsize.idx
% pdflatex bmpsize.dtx
@@ -339,7 +339,7 @@ and the derived files
%
% A parser sets the switch \cs{ifbmpsize@ok} to true, if it
% could successfully parse the image file.
-% The width and height are returnd in \cs{bmpsize@width} and
+% The width and height are returned in \cs{bmpsize@width} and
% \cs{bmpsize@height}. If information about density is available,
% it is used to calculate width and height of the image, otherwise
% the values given by option \xoption{defaultresolution} is used.
diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf
index ecd47adb93..b376afc96a 100644
--- a/macros/latex/contrib/oberdiek/bmpsize.pdf
+++ b/macros/latex/contrib/oberdiek/bmpsize.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/centernot.dtx b/macros/latex/contrib/oberdiek/centernot.dtx
index dd990a3319..aa2cff5f0d 100644
--- a/macros/latex/contrib/oberdiek/centernot.dtx
+++ b/macros/latex/contrib/oberdiek/centernot.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex centernot.dtx
% makeindex -s gind.ist centernot.idx
% pdflatex centernot.dtx
diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf
index 344a245433..a0984732ea 100644
--- a/macros/latex/contrib/oberdiek/centernot.pdf
+++ b/macros/latex/contrib/oberdiek/centernot.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/chemarr.dtx b/macros/latex/contrib/oberdiek/chemarr.dtx
index 78e1a3cbeb..24989ed9db 100644
--- a/macros/latex/contrib/oberdiek/chemarr.dtx
+++ b/macros/latex/contrib/oberdiek/chemarr.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex chemarr.dtx
% makeindex -s gind.ist chemarr.idx
% pdflatex chemarr.dtx
diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf
index c745f15582..7a39e48a3e 100644
--- a/macros/latex/contrib/oberdiek/chemarr.pdf
+++ b/macros/latex/contrib/oberdiek/chemarr.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/classlist.dtx b/macros/latex/contrib/oberdiek/classlist.dtx
index 8b45464521..370fc269d0 100644
--- a/macros/latex/contrib/oberdiek/classlist.dtx
+++ b/macros/latex/contrib/oberdiek/classlist.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex classlist.dtx
% makeindex -s gind.ist classlist.idx
% pdflatex classlist.dtx
@@ -233,7 +233,7 @@ and the derived files
% configured by
% \item[\cs{PrintClassListTitle}] for the title and
% \item[\cs{PrintClassListEntry}] for formatting the entries.
-% See the implemenation how to use these.
+% See the implementation for how to use these.
% \end{description}
%
% \StopEventually{
diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf
index 40ef460d94..365627fee6 100644
--- a/macros/latex/contrib/oberdiek/classlist.pdf
+++ b/macros/latex/contrib/oberdiek/classlist.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/colonequals.dtx b/macros/latex/contrib/oberdiek/colonequals.dtx
index aeae542c39..007a42cbe5 100644
--- a/macros/latex/contrib/oberdiek/colonequals.dtx
+++ b/macros/latex/contrib/oberdiek/colonequals.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex colonequals.dtx
% makeindex -s gind.ist colonequals.idx
% pdflatex colonequals.dtx
diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf
index 1b4e949c6b..3446b59539 100644
--- a/macros/latex/contrib/oberdiek/colonequals.pdf
+++ b/macros/latex/contrib/oberdiek/colonequals.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/dvipscol.dtx b/macros/latex/contrib/oberdiek/dvipscol.dtx
index 0141ae2a94..335196bf91 100644
--- a/macros/latex/contrib/oberdiek/dvipscol.dtx
+++ b/macros/latex/contrib/oberdiek/dvipscol.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex dvipscol.dtx
% makeindex -s gind.ist dvipscol.idx
% pdflatex dvipscol.dtx
diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf
index 21243da3b1..3ff66c8e89 100644
--- a/macros/latex/contrib/oberdiek/dvipscol.pdf
+++ b/macros/latex/contrib/oberdiek/dvipscol.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/engord.dtx b/macros/latex/contrib/oberdiek/engord.dtx
index 6c75953200..a0ba888a1a 100644
--- a/macros/latex/contrib/oberdiek/engord.dtx
+++ b/macros/latex/contrib/oberdiek/engord.dtx
@@ -55,7 +55,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex engord.dtx
% makeindex -s gind.ist engord.idx
% pdflatex engord.dtx
diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf
index 0bd217efba..49c876e5b6 100644
--- a/macros/latex/contrib/oberdiek/engord.pdf
+++ b/macros/latex/contrib/oberdiek/engord.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/enparen.dtx b/macros/latex/contrib/oberdiek/enparen.dtx
index 773ebc861c..af503d79dc 100644
--- a/macros/latex/contrib/oberdiek/enparen.dtx
+++ b/macros/latex/contrib/oberdiek/enparen.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex enparen.dtx
% makeindex -s gind.ist enparen.idx
% pdflatex enparen.dtx
@@ -335,12 +335,12 @@ and the derived files
% \subsection{Notes}
%
% \begin{description}
-% \item[Implicite kerning:]
-% Unexpandable stuff might affect the implicite kerning.
+% \item[Implicit kerning:]
+% Unexpandable stuff might affect the implicit kerning.
% The package cannot avoid this, because it need to define
-% and redefine macros at the occurence of each symbol.
+% and redefine macros at the occurrence of each symbol.
% This is done before the opening and after the closing
-% symbol, thus that the implicite kerning inside
+% symbol, thus that the implicit kerning inside
% is not affected.
% \end{description}
%
diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf
index d4de5125ba..284b88c5c1 100644
--- a/macros/latex/contrib/oberdiek/enparen.pdf
+++ b/macros/latex/contrib/oberdiek/enparen.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/eolgrab.dtx b/macros/latex/contrib/oberdiek/eolgrab.dtx
index d27e99d34e..87f0aceaa4 100644
--- a/macros/latex/contrib/oberdiek/eolgrab.dtx
+++ b/macros/latex/contrib/oberdiek/eolgrab.dtx
@@ -58,7 +58,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex eolgrab.dtx
% makeindex -s gind.ist eolgrab.idx
% pdflatex eolgrab.dtx
diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf
index 23c097b571..24a22d462c 100644
--- a/macros/latex/contrib/oberdiek/eolgrab.pdf
+++ b/macros/latex/contrib/oberdiek/eolgrab.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/fibnum.dtx b/macros/latex/contrib/oberdiek/fibnum.dtx
index 9c3f8f7986..de66a37710 100644
--- a/macros/latex/contrib/oberdiek/fibnum.dtx
+++ b/macros/latex/contrib/oberdiek/fibnum.dtx
@@ -56,7 +56,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex fibnum.dtx
% bibtex fibnum.aux
% makeindex -s gind.ist fibnum.idx
diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf
index 2d2510854e..7a143ac3b6 100644
--- a/macros/latex/contrib/oberdiek/fibnum.pdf
+++ b/macros/latex/contrib/oberdiek/fibnum.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/flags.dtx b/macros/latex/contrib/oberdiek/flags.dtx
index 6a2d05c7b4..8834113617 100644
--- a/macros/latex/contrib/oberdiek/flags.dtx
+++ b/macros/latex/contrib/oberdiek/flags.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex flags.dtx
% makeindex -s gind.ist flags.idx
% pdflatex flags.dtx
diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf
index f0c8b76d54..17c5868612 100644
--- a/macros/latex/contrib/oberdiek/flags.pdf
+++ b/macros/latex/contrib/oberdiek/flags.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/holtxdoc.dtx b/macros/latex/contrib/oberdiek/holtxdoc.dtx
index 9ac40aa5ae..b9ba295cfa 100644
--- a/macros/latex/contrib/oberdiek/holtxdoc.dtx
+++ b/macros/latex/contrib/oberdiek/holtxdoc.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex holtxdoc.dtx
% makeindex -s gind.ist holtxdoc.idx
% pdflatex holtxdoc.dtx
diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf
index 67d630bd54..f2825ebf65 100644
--- a/macros/latex/contrib/oberdiek/holtxdoc.pdf
+++ b/macros/latex/contrib/oberdiek/holtxdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypbmsec.dtx b/macros/latex/contrib/oberdiek/hypbmsec.dtx
index dd26b08d2b..2b5781775c 100644
--- a/macros/latex/contrib/oberdiek/hypbmsec.dtx
+++ b/macros/latex/contrib/oberdiek/hypbmsec.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex hypbmsec.dtx
% makeindex -s gind.ist hypbmsec.idx
% pdflatex hypbmsec.dtx
@@ -260,7 +260,7 @@ and the derived files
% \begin{itemize}
% \item An additional second optional argument in square brackets.
% \item An additional optional argument in parentheses (in
-% assoziation with a pdf string that is internally surrounded
+% association with a pdf string that is internally surrounded
% by parentheses, too).
% \end{itemize}
% Because \Package{\filename} stores the original meaning of the
@@ -375,7 +375,7 @@ and the derived files
[2016/05/16 v2.5 Bookmarks in sectioning commands (HO)]
% \end{macrocode}
%
-% Because of redifining the sectioning commands, it is dangerous
+% Because of redefining the sectioning commands, it is dangerous
% to reload the package several times.
% \begin{macrocode}
\@ifundefined{hbs@do}{}{%
@@ -554,7 +554,7 @@ and the derived files
% \end{macrocode}
%
% Other packages are allowed to redefine the sectioning commands,
-% if they does not change the syntax. Therefore the redefinitons
+% if they does not change the syntax. Therefore the redefinitions
% of this package should be done after the other packages.
% \begin{macrocode}
\let\hbs@part \part
diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf
index 45e3ce42c2..9e75d5e8fe 100644
--- a/macros/latex/contrib/oberdiek/hypbmsec.pdf
+++ b/macros/latex/contrib/oberdiek/hypbmsec.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypgotoe.dtx b/macros/latex/contrib/oberdiek/hypgotoe.dtx
index 3f6af63a3e..7a4c55e451 100644
--- a/macros/latex/contrib/oberdiek/hypgotoe.dtx
+++ b/macros/latex/contrib/oberdiek/hypgotoe.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex hypgotoe.dtx
% makeindex -s gind.ist hypgotoe.idx
% pdflatex hypgotoe.dtx
@@ -195,7 +195,7 @@ and the derived files
% \item
% Currently only embedded files and named destinations are supported.
% \item
-% Missing are support for destination arrays and attachted files.
+% Missing are support for destination arrays and attached files.
% \item
% Special characters aren't supported either.
% \end{itemize}
diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf
index 98d7d1dd4b..a6203e57a1 100644
--- a/macros/latex/contrib/oberdiek/hypgotoe.pdf
+++ b/macros/latex/contrib/oberdiek/hypgotoe.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hyphsubst.dtx b/macros/latex/contrib/oberdiek/hyphsubst.dtx
index e0fd44bf12..996257b0d4 100644
--- a/macros/latex/contrib/oberdiek/hyphsubst.dtx
+++ b/macros/latex/contrib/oberdiek/hyphsubst.dtx
@@ -56,7 +56,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex hyphsubst.dtx
% makeindex -s gind.ist hyphsubst.idx
% pdflatex hyphsubst.dtx
diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf
index 4c390bfdd9..0d559684d1 100644
--- a/macros/latex/contrib/oberdiek/hyphsubst.pdf
+++ b/macros/latex/contrib/oberdiek/hyphsubst.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifdraft.dtx b/macros/latex/contrib/oberdiek/ifdraft.dtx
index 0b4918a6d0..7b69505449 100644
--- a/macros/latex/contrib/oberdiek/ifdraft.dtx
+++ b/macros/latex/contrib/oberdiek/ifdraft.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex ifdraft.dtx
% makeindex -s gind.ist ifdraft.idx
% pdflatex ifdraft.dtx
diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf
index 35e257d875..7e6a251092 100644
--- a/macros/latex/contrib/oberdiek/ifdraft.pdf
+++ b/macros/latex/contrib/oberdiek/ifdraft.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/iflang.dtx b/macros/latex/contrib/oberdiek/iflang.dtx
index fa784b7d45..9eebbd0a8c 100644
--- a/macros/latex/contrib/oberdiek/iflang.dtx
+++ b/macros/latex/contrib/oberdiek/iflang.dtx
@@ -57,7 +57,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex iflang.dtx
% makeindex -s gind.ist iflang.idx
% pdflatex iflang.dtx
@@ -200,7 +200,7 @@ and the derived files
% Package \xpackage{babel} defines \cs{iflanguagename}. As first
% argument it takes a language name and executes the second or
% third argument depending on the current language. This
-% language test is based on hypenation patterns. However, it
+% language test is based on hyphenation patterns. However, it
% is possible that different languages or dialects share the
% same patterns. In such cases \cs{iflanguagename} fails.
%
@@ -211,7 +211,7 @@ and the derived files
%
% \begin{declcs}{IfLanguageName} \M{lang} \M{then} \M{else}
% \end{declcs}
-% Makro \cs{IfLanguageName} compares language \meta{lang} with
+% Macro \cs{IfLanguageName} compares language \meta{lang} with
% the current setting of macro \cs{languagename}. If both
% contains the same name then the \meta{then} part is called,
% otherwise the \meta{else} part.
@@ -562,7 +562,7 @@ and the derived files
% at the conference Bacho\TeX~2005:
% \url{http://www.gust.org.pl/projects/pearls/2005p/david-kastrup/bachotex2005-david-kastrup-pearl1.pdf}
%
-% The orignal code allows macros inside the second string.
+% The original code allows macros inside the second string.
% Because also \cs{languagename} might consists of further
% macros, we need a variant that allows macros in the first
% string, too.
diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf
index 98cb0644a3..c1941fa6ee 100644
--- a/macros/latex/contrib/oberdiek/iflang.pdf
+++ b/macros/latex/contrib/oberdiek/iflang.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
index 44fce8aeca..364db304ef 100644
--- a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
+++ b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
@@ -96,13 +96,6 @@
version={2.5},
url={https://ctan.org/pkg/hypbmsec},
}
-@manual{oberdiek:hypcap,
- title={The hypcap package},
- author={Heiko Oberdiek},
- date={2016-05-16},
- version={1.12},
- url={https://ctan.org/pkg/hypcap},
-}
@manual{oberdiek:hypgotoe,
title={The hypgotoe package},
author={Heiko Oberdiek},
@@ -243,13 +236,6 @@
version={1.2},
url={https://ctan.org/pkg/tabularkv},
}
-@manual{oberdiek:telprint,
- title={The telprint package},
- author={Heiko Oberdiek},
- date={2016-05-16},
- version={1.11},
- url={https://ctan.org/pkg/telprint},
-}
@manual{oberdiek:thepdfnumber,
title={The thepdfnumber package},
author={Heiko Oberdiek},
diff --git a/macros/latex/contrib/oberdiek/oberdiek.ins b/macros/latex/contrib/oberdiek/oberdiek.ins
index dc59a6e024..099d1f538d 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.ins
+++ b/macros/latex/contrib/oberdiek/oberdiek.ins
@@ -3,7 +3,7 @@
%
% Copyright (C)
% 1999, 2001, 2006 Heiko Oberdiek
-% 2016-2020 Oberdiek Package Support Group
+% 2016-2024 Oberdiek Package Support Group
% https://github.com/ho-tex/oberdiek/issues
%
% This work may be distributed and/or modified under the
@@ -40,7 +40,6 @@
\batchinput{flags.dtx}
\batchinput{holtxdoc.dtx}
\batchinput{hypbmsec.dtx}
-\batchinput{hypcap.dtx}
\batchinput{hypgotoe.dtx}
\batchinput{hyphsubst.dtx}
\batchinput{ifdraft.dtx}
@@ -58,7 +57,6 @@
\batchinput{stampinclude.dtx}
\batchinput{tabularht.dtx}
\batchinput{tabularkv.dtx}
-\batchinput{telprint.dtx}
\batchinput{thepdfnumber.dtx}
\batchinput{twoopt.dtx}
diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf
index 16e08d826a..31c3efdda7 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.pdf
+++ b/macros/latex/contrib/oberdiek/oberdiek.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex
index 3849551d71..0759250c24 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.tex
+++ b/macros/latex/contrib/oberdiek/oberdiek.tex
@@ -11,11 +11,11 @@
\newcommand*{\Author}{Heiko Oberdiek}
\newcommand*{\Email}{ho-tex at tug.org}
-\newcommand*{\Date}{2023/01/10}
+\newcommand*{\Date}{2024/07/26}
% Copyright (C) 2006-2016 by
% Heiko Oberdiek
-% Copyright (C) 2016-2023 by
+% Copyright (C) 2016-2024 by
% Oberdiek Package Support Group
%
% This work may be distributed and/or modified under the
@@ -203,8 +203,6 @@
[\entrysep]
\entry{hypbmsec}{Bookmarks in sectioning commands}%
[\entrysep]
-\entry{hypcap}{Adjusting the anchors of captions}%
-[\entrysep]
\entry{hypgotoe}{Links to embedded files}%
[\entrysep]
\entry{hyphsubst}{Substitute hyphenation patterns}%
@@ -239,8 +237,6 @@
[\entrysep]
\entry{tabularkv}{Tabular with key value interface}%
[\entrysep]
-\entry{telprint}{Format German phone numbers}%
-[\entrysep]
\entry{thepdfnumber}{Print PDF numbers with minimal digits}%
[\entrysep]
\entry{twoopt}{Definitions with two optional arguments}%
@@ -391,20 +387,6 @@ a replacement for the bookmarks can be given.
\tocinclude{hypbmsec}
\newpage
-\subsection{\pkgsectformat{hypcap}}
-\label{hypcap}
-\begin{abstract}
-This package tries a solution of the problem with
-hyperref, that links to floats points below the
-caption and not at the beginning of the float.
-Therefore this package divides the task into two
-part, the link setting with \cs{capstart} or
-automatically at the beginning of a float and
-the rest in the \cs{caption} command.
-\end{abstract}
-\tocinclude{hypcap}
-
-\newpage
\subsection{\pkgsectformat{hypgotoe}}
\label{hypgotoe}
\begin{abstract}
@@ -520,7 +502,7 @@ is supported. Index preambles can be given either by means of package
\label{setouterhbox}
\begin{abstract}
If math stuff is set in an \cs{hbox}, then TeX
-performs some optimization and omits the implicite
+performs some optimization and omits the implicit
penalties \cs{binoppenalty} and \cs{relpenalty}.
This packages tries to put stuff into an \cs{hbox}
without getting lost of those penalties.
@@ -578,15 +560,6 @@ especially if package \xpackage{tabularht} is used.
\tocinclude{tabularkv}
\newpage
-\subsection{\pkgsectformat{telprint}}
-\label{telprint}
-\begin{abstract}
-Package \xpackage{telprint} provides \cs{telprint} for formatting
-German phone numbers.
-\end{abstract}
-\tocinclude{telprint}
-
-\newpage
\subsection{\pkgsectformat{thepdfnumber}}
\label{thepdfnumber}
\begin{abstract}
diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.dtx b/macros/latex/contrib/oberdiek/pdfcolparallel.dtx
index 17893f98a9..02df672d4e 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparallel.dtx
+++ b/macros/latex/contrib/oberdiek/pdfcolparallel.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex pdfcolparallel.dtx
% makeindex -s gind.ist pdfcolparallel.idx
% pdflatex pdfcolparallel.dtx
diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
index 90a3b348a0..d97c8441f4 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx b/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
index 77d8aab071..a382037b42 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
+++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex pdfcolparcolumns.dtx
% makeindex -s gind.ist pdfcolparcolumns.idx
% pdflatex pdfcolparcolumns.dtx
diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
index a49189ba4a..8afe31978a 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.dtx b/macros/latex/contrib/oberdiek/pdfcrypt.dtx
index e4681efa8c..3c5070829c 100644
--- a/macros/latex/contrib/oberdiek/pdfcrypt.dtx
+++ b/macros/latex/contrib/oberdiek/pdfcrypt.dtx
@@ -55,7 +55,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex pdfcrypt.dtx
% makeindex -s gind.ist pdfcrypt.idx
% pdflatex pdfcrypt.dtx
diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
index 1de22245d4..eabda461d7 100644
--- a/macros/latex/contrib/oberdiek/pdfcrypt.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/protecteddef.dtx b/macros/latex/contrib/oberdiek/protecteddef.dtx
index cff42cccf7..21aab0c9fc 100644
--- a/macros/latex/contrib/oberdiek/protecteddef.dtx
+++ b/macros/latex/contrib/oberdiek/protecteddef.dtx
@@ -56,7 +56,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex protecteddef.dtx
% makeindex -s gind.ist protecteddef.idx
% pdflatex protecteddef.dtx
@@ -246,7 +246,7 @@ and the derived files
% is not supported. Macro \meta{cmd} is to be defined as
% \cs{long} macro without star with \meta{num} arguments.
%
-% The number of arguments \meta{num} must be given as explicite digit
+% The number of arguments \meta{num} must be given as explicit digit
% |0| upto |9|. Otherwise the part between the argument \meta{cmd} and
% the \meta{definition text} is taken as parameter text in the syntax
% of vanilla \hologo{TeX}. Examples (with \cs{protected}):
diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf
index cabaa32c49..c5d984bf5e 100644
--- a/macros/latex/contrib/oberdiek/protecteddef.pdf
+++ b/macros/latex/contrib/oberdiek/protecteddef.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/resizegather.dtx b/macros/latex/contrib/oberdiek/resizegather.dtx
index 4a07864917..8ec4cc8a13 100644
--- a/macros/latex/contrib/oberdiek/resizegather.dtx
+++ b/macros/latex/contrib/oberdiek/resizegather.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex resizegather.dtx
% makeindex -s gind.ist resizegather.idx
% pdflatex resizegather.dtx
diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf
index 11d07da19c..5bf853391c 100644
--- a/macros/latex/contrib/oberdiek/resizegather.pdf
+++ b/macros/latex/contrib/oberdiek/resizegather.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/rotchiffre.dtx b/macros/latex/contrib/oberdiek/rotchiffre.dtx
index 3023347fe1..aa80754011 100644
--- a/macros/latex/contrib/oberdiek/rotchiffre.dtx
+++ b/macros/latex/contrib/oberdiek/rotchiffre.dtx
@@ -56,7 +56,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex rotchiffre.dtx
% makeindex -s gind.ist rotchiffre.idx
% pdflatex rotchiffre.dtx
@@ -214,7 +214,7 @@ and the derived files
% \begin{declcs}{EdefRot} \M{type} \M{cmd} \M{text}
% \end{declcs}
% The \meta{text} is expanded and sanitized. All tokens
-% are letters with catcode 12 (other) with the exeption of
+% are letters with catcode 12 (other) with the exception of
% the space token that has character code 32 (0x20) and
% catcode 10 (space). This follows \hologo{TeX}'s convention of
% \cs{string} and \cs{meaning}.
diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf
index 7deae8d756..5504f90b56 100644
--- a/macros/latex/contrib/oberdiek/rotchiffre.pdf
+++ b/macros/latex/contrib/oberdiek/rotchiffre.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/scrindex.dtx b/macros/latex/contrib/oberdiek/scrindex.dtx
index fea57fd1a9..63deeaab2f 100644
--- a/macros/latex/contrib/oberdiek/scrindex.dtx
+++ b/macros/latex/contrib/oberdiek/scrindex.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex scrindex.dtx
% makeindex -s gind.ist scrindex.idx
% pdflatex scrindex.dtx
@@ -195,7 +195,7 @@ and the derived files
% the standard classes |article|, |report|, and |book|. It
% redefines environment `theindex' for its needs.
% However, it does not know other classes such as KOMA-Script.
-% This package closes the compatibiliy gap between KOMA-Script's
+% This package closes the compatibility gap between KOMA-Script's
% classes and package \xpackage{index}.
%
% Environment |theindex| is redefined to support both package
diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf
index 0ca63d3e6d..a2e2cba825 100644
--- a/macros/latex/contrib/oberdiek/scrindex.pdf
+++ b/macros/latex/contrib/oberdiek/scrindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/setouterhbox.dtx b/macros/latex/contrib/oberdiek/setouterhbox.dtx
index 001cd278d3..cc937c16a4 100644
--- a/macros/latex/contrib/oberdiek/setouterhbox.dtx
+++ b/macros/latex/contrib/oberdiek/setouterhbox.dtx
@@ -57,7 +57,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex setouterhbox.dtx
% makeindex -s gind.ist setouterhbox.idx
% pdflatex setouterhbox.dtx
@@ -190,7 +190,7 @@ and the derived files
%
% \begin{abstract}
% If math stuff is set in an \cs{hbox}, then TeX
-% performs some optimization and omits the implicite
+% performs some optimization and omits the implicit
% penalties \cs{binoppenalty} and \cs{relpenalty}.
% This packages tries to put stuff into an \cs{hbox}
% without getting lost of those penalties.
@@ -234,7 +234,7 @@ and the derived files
% method we discuss here. Nowadays we have \eTeX\ that extends
% the tool set of a \TeX\ macro programmer. Especially useful
% \eTeX\ was in this package for detecting and dealing with
-% errorneous situations.
+% erroneous situations.
%
% However also nowadays a perfect solution for the problem
% is still missing at macro level. Probably someone has
diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf
index dbdb939c6e..03757dc214 100644
--- a/macros/latex/contrib/oberdiek/setouterhbox.pdf
+++ b/macros/latex/contrib/oberdiek/setouterhbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/settobox.dtx b/macros/latex/contrib/oberdiek/settobox.dtx
index c38d502a53..c1d7af6ae9 100644
--- a/macros/latex/contrib/oberdiek/settobox.dtx
+++ b/macros/latex/contrib/oberdiek/settobox.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex settobox.dtx
% makeindex -s gind.ist settobox.idx
% pdflatex settobox.dtx
@@ -282,7 +282,7 @@ and the derived files
% c) Print #1 commands.
% d) Print box with frame
%
-% The implemenation looks more weird:
+% The implementation looks more weird:
\makeatletter
\newcommand*{\test}[1]{%
\par
diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf
index a2f1c8d179..ef92916de2 100644
--- a/macros/latex/contrib/oberdiek/settobox.pdf
+++ b/macros/latex/contrib/oberdiek/settobox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stackrel.dtx b/macros/latex/contrib/oberdiek/stackrel.dtx
index 6b3444c33c..09110de947 100644
--- a/macros/latex/contrib/oberdiek/stackrel.dtx
+++ b/macros/latex/contrib/oberdiek/stackrel.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex stackrel.dtx
% makeindex -s gind.ist stackrel.idx
% pdflatex stackrel.dtx
diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf
index df11fd28dd..4edbb64c31 100644
--- a/macros/latex/contrib/oberdiek/stackrel.pdf
+++ b/macros/latex/contrib/oberdiek/stackrel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stampinclude.dtx b/macros/latex/contrib/oberdiek/stampinclude.dtx
index 9acd8a61f8..ba468e8591 100644
--- a/macros/latex/contrib/oberdiek/stampinclude.dtx
+++ b/macros/latex/contrib/oberdiek/stampinclude.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex stampinclude.dtx
% makeindex -s gind.ist stampinclude.idx
% pdflatex stampinclude.dtx
@@ -225,7 +225,7 @@ and the derived files
% This package \xpackage{stampinclude} goes another way.
% \LaTeX\ reads and writes a separate \xext{aux} file for each
% file that is included by \cs{include}. There \LaTeX\ remembers
-% counter valuses. Changed \xext{tex}
+% counter values. Changed \xext{tex}
% files can therefore be detected by comparing the file date stamp of
% the \xext{tex} file with the date stamp of its \xext{aux} file.
% Since version 1.30.0 \pdfTeX\ provides \cs{pdffilemoddate}
@@ -254,7 +254,7 @@ and the derived files
%
% \subsubsection{Other file dependencies}
%
-% A file that is included by \cs{include} may input ore reference
+% A file that is included by \cs{include} may input or reference
% other files:
% \begin{itemize}
% \item other \TeX\ files using \cs{input},
diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf
index 55b57219a3..b98bf15bb1 100644
--- a/macros/latex/contrib/oberdiek/stampinclude.pdf
+++ b/macros/latex/contrib/oberdiek/stampinclude.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularht.dtx b/macros/latex/contrib/oberdiek/tabularht.dtx
index 20688068b0..e6c26f1040 100644
--- a/macros/latex/contrib/oberdiek/tabularht.dtx
+++ b/macros/latex/contrib/oberdiek/tabularht.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex tabularht.dtx
% makeindex -s gind.ist tabularht.idx
% pdflatex tabularht.dtx
@@ -250,7 +250,7 @@ and the derived files
% and add the vertical lines. The lines in a tabular
% with \xpackage{tabularht} support (environments of this package)
% are numbered from left to right. The gap that is
-% controlled by \cs{interrowspace} or inbetween \cs{interrowstart}
+% controlled by \cs{interrowspace} or in between \cs{interrowstart}
% and \cs{interrowstop} is then filled with the detected
% vertical lines.
%
@@ -472,7 +472,7 @@ and the derived files
\def\tabH@spread{spread}
% \end{macrocode}
% First argument is the height of the table,
-% then the orignal arguments for tabular follow.
+% then the original arguments for tabular follow.
% \begin{macrocode}
\newenvironment{tabularht}[1]{%
\tabH@setheight{#1}%
diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf
index 893fe33acf..3a70cec6a2 100644
--- a/macros/latex/contrib/oberdiek/tabularht.pdf
+++ b/macros/latex/contrib/oberdiek/tabularht.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularkv.dtx b/macros/latex/contrib/oberdiek/tabularkv.dtx
index 57ef5e8745..b324e6e8ab 100644
--- a/macros/latex/contrib/oberdiek/tabularkv.dtx
+++ b/macros/latex/contrib/oberdiek/tabularkv.dtx
@@ -53,7 +53,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex tabularkv.dtx
% makeindex -s gind.ist tabularkv.idx
% pdflatex tabularkv.dtx
diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf
index e6ea130064..dedc3251c0 100644
--- a/macros/latex/contrib/oberdiek/tabularkv.pdf
+++ b/macros/latex/contrib/oberdiek/tabularkv.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.dtx b/macros/latex/contrib/oberdiek/thepdfnumber.dtx
index 61eb42684c..c1aa4bf9fa 100644
--- a/macros/latex/contrib/oberdiek/thepdfnumber.dtx
+++ b/macros/latex/contrib/oberdiek/thepdfnumber.dtx
@@ -57,7 +57,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex thepdfnumber.dtx
% makeindex -s gind.ist thepdfnumber.idx
% pdflatex thepdfnumber.dtx
@@ -256,7 +256,7 @@ and the derived files
% \item The decimal part is omitted, if the number is an integer (5, 7).
% \item Trailing zeros from the decimal part are stripped (5, 6, 7, 9).
% \end{itemize}
-% The resulting number representation can be catched with one of the
+% The resulting number representation can be caught with one of the
% following Perl regular expressions:
% \begin{itemize}
% \item |^0$| (zero)
@@ -295,11 +295,11 @@ and the derived files
% \subsection{Input number}
%
% The user macros expect a number as argument. The number can either
-% be given explicitely or as macro that expands in one step
-% to an explicite number, because the first token of the argument
+% be given explicitly or as macro that expands in one step
+% to an explicit number, because the first token of the argument
% is expanded once.
%
-% The explicite number consists of
+% The explicit number consists of
% \begin{itemize}
% \item optional signs `\texttt{+}' and `\texttt{-}',
% \item digits `\texttt{0}' upto `\texttt{9}' and
@@ -320,7 +320,7 @@ and the derived files
% The package is not intended for validating numbers or to
% decide if an argument is a number. Therefore it is an usage
% error to use the user macros with arguments that are not
-% explicite numbers as specified in the previous sections.
+% explicit numbers as specified in the previous sections.
% Nevertheless some error conditions are sometimes recognized.
% Errors are given in form of an undefined command sequence.
% It is the only way to notify \hologo{TeX} in expandable context.
diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
index 8d4b73d65f..61d98f6985 100644
--- a/macros/latex/contrib/oberdiek/thepdfnumber.pdf
+++ b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/twoopt.dtx b/macros/latex/contrib/oberdiek/twoopt.dtx
index 10334f0d3a..806799fd41 100644
--- a/macros/latex/contrib/oberdiek/twoopt.dtx
+++ b/macros/latex/contrib/oberdiek/twoopt.dtx
@@ -52,7 +52,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex twoopt.dtx
% makeindex -s gind.ist twoopt.idx
% pdflatex twoopt.dtx
diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf
index 6a144a8368..071dd4d2b2 100644
--- a/macros/latex/contrib/oberdiek/twoopt.pdf
+++ b/macros/latex/contrib/oberdiek/twoopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/overarrows/README.md b/macros/latex/contrib/overarrows/README.md
index f2139d6499..a70fd1601c 100644
--- a/macros/latex/contrib/overarrows/README.md
+++ b/macros/latex/contrib/overarrows/README.md
@@ -13,11 +13,11 @@ Julien Labbé <Julien.Labbe@univ-grenoble-alpes.fr> Université Grenoble-Alpes
## Repository
-https://gricad-gitlab.univ-grenoble-alpes.fr/labbeju/latex-packages/-/tree/main/overarrows
+https://github.com/julienlabbe/latex-packages/tree/main/overarrows
## Licence
-Copyright (C) 2023 by Julien Labbé
+Copyright (C) 2023-2024 by Julien Labbé
This file may be distributed and/or modified under the conditions of the LaTeX
Project Public License (LPPL), either version 1.3c of this license or (at your
diff --git a/macros/latex/contrib/overarrows/overarrows.dtx b/macros/latex/contrib/overarrows/overarrows.dtx
index 419593f577..ff63a958c3 100644
--- a/macros/latex/contrib/overarrows/overarrows.dtx
+++ b/macros/latex/contrib/overarrows/overarrows.dtx
@@ -16,14 +16,17 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{overarrows}
%<*package>
-[2023/02/15 v1.1 Custom extensible arrows over math expressions]
+[2024/07/11 v1.2 Custom extensible arrows over math expressions]
%</package>
%
%<*driver>
\documentclass[nohyperref]{ltxdoc}
+\usepackage{metalogo}
+\usepackage{enumitem}
+\usepackage{array}
\usepackage{overarrows-doc} %^^A defined at end of this file, with guard <docstyle>
-\usepackage[old-arrows, esvect, tikz, pstarrows, allcommands]{overarrows}
+\usepackage[old-arrows, esvect, tikz, pstricks, pstarrows, allcommands]{overarrows}
\EnableCrossrefs
\PageIndex
@@ -36,8 +39,8 @@
%% Arrows used in doc
\usepackage{amssymb}% for \twoheadrightarrow
-\NewOverArrowCommand{amsoverrightarrow}{amsmath=strict, end={\rightarrow}}
-\NewOverArrowCommand{overrightnewarrow}{%
+\NewOverArrowCommand{\amsoverrightarrow}{amsmath=strict, end={\rightarrow}}
+\NewOverArrowCommand{\overrightnewarrow}{%
amsmath, middle config=relbar, end=\rightarrow,
right arrow,
}
@@ -49,22 +52,22 @@
\DeclareMathSymbol{\fldrf}{\mathrel}{esvector}{'026}
\DeclareMathSymbol{\fldrg}{\mathrel}{esvector}{'027}
\DeclareMathSymbol{\fldrh}{\mathrel}{esvector}{'030}
-\NewOverArrowCommand{esveca}{esvect=strict, end={\fldra}}
-\NewOverArrowCommand{esvecb}{esvect=strict, end={\fldrb}}
-\NewOverArrowCommand{esvecc}{esvect=strict, end={\fldrc}}
-\NewOverArrowCommand{esvecd}{esvect=strict, end={\fldrd}}
-\NewOverArrowCommand{esvece}{esvect=strict, end={\fldre}}
-\NewOverArrowCommand{esvecg}{esvect=strict, end={\fldrg}}
-\NewOverArrowCommand{esvech}{esvect=strict, end={\fldrh}}
-\NewOverArrowCommand{vva}{esvect, middle config=auto, end=\fldra}
-\NewOverArrowCommand{esvecf}{esvect=strict, end={\fldrf}}
-\NewOverArrowCommand{vvb}{esvect, middle config=auto, end=\fldrb}
-\NewOverArrowCommand{vvc}{esvect, middle config=auto, end=\fldrc}
-\NewOverArrowCommand{vvd}{esvect, middle config=auto, end=\fldrd}
-\NewOverArrowCommand{vve}{esvect, middle config=auto, end=\fldre}
-\NewOverArrowCommand{vvf}{esvect, middle config=auto, end=\fldrf}
-\NewOverArrowCommand{vvg}{esvect, middle config=auto, end=\fldrg}
-\NewOverArrowCommand{vvh}{esvect, middle config=auto, end=\fldrh}
+\NewOverArrowCommand{\esveca}{esvect=strict, end={\fldra}}
+\NewOverArrowCommand{\esvecb}{esvect=strict, end={\fldrb}}
+\NewOverArrowCommand{\esvecc}{esvect=strict, end={\fldrc}}
+\NewOverArrowCommand{\esvecd}{esvect=strict, end={\fldrd}}
+\NewOverArrowCommand{\esvece}{esvect=strict, end={\fldre}}
+\NewOverArrowCommand{\esvecg}{esvect=strict, end={\fldrg}}
+\NewOverArrowCommand{\esvech}{esvect=strict, end={\fldrh}}
+\NewOverArrowCommand{\vva}{esvect, middle config=auto, end=\fldra}
+\NewOverArrowCommand{\esvecf}{esvect=strict, end={\fldrf}}
+\NewOverArrowCommand{\vvb}{esvect, middle config=auto, end=\fldrb}
+\NewOverArrowCommand{\vvc}{esvect, middle config=auto, end=\fldrc}
+\NewOverArrowCommand{\vvd}{esvect, middle config=auto, end=\fldrd}
+\NewOverArrowCommand{\vve}{esvect, middle config=auto, end=\fldre}
+\NewOverArrowCommand{\vvf}{esvect, middle config=auto, end=\fldrf}
+\NewOverArrowCommand{\vvg}{esvect, middle config=auto, end=\fldrg}
+\NewOverArrowCommand{\vvh}{esvect, middle config=auto, end=\fldrh}
\makeatletter
\newcommand{\unsetoldarrows}{
@@ -94,7 +97,7 @@
%
% \title{The \pkg{overarrows} package\thanks{This document
% corresponds to \pkg{overarrows}~\fileversion, dated \filedate.}}
-% \author{Julien Labb\'e \\ \texttt{Julien.Labbe@univ-grenoble-alpes.fr}}
+% \author{Julien Labb\'e \\ {\small \url{https://github.com/julienlabbe/latex-packages}}}
%
% \maketitle
%
@@ -111,7 +114,7 @@
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{overrightharpoon}{%
+\NewOverArrowCommand{\overrightharpoon}{%
end=\rightharpoonup
}
@@ -188,9 +191,9 @@
%
% The \pkg{overarrows} package was primitively written for vectors, but in
% a highly customisable way. It can be used to define a large variety of arrows,
-% using math symbols, or PGF/TikZ commands. It's also possible to create
-% commands that draw the arrows under. Some predefined commands are provided,
-% giving\footnotemark{}, for arrow over:
+% using math symbols, or drawing commands from PGF/TikZ or PSTricks. It's also
+% possible to create commands that draw the arrows under. Some predefined
+% commands are provided, giving\footnotemark{}, for arrow over:
% \footnotetext{Displayed here with the \refOpt{old-arrows} option.}
% \begin{align*}
% \overrightarrow{\alpha+\beta}
@@ -222,34 +225,42 @@
% above\footnotemark{}. For this second convention, \TeX/\LaTeX provides the
% command \cs{vec}, which accents its content (using the \cs{mathaccent}
% command) with the character~\symb{\mathchar "017E\relax}
-% (\cs{mathchar}|"017E| in Computer Modern font).
-% But \symb{\mathchar "017E\relax} isn't extensible, and gives: $\vec{v}$,
-% $\vec{AB}$ or $\vec{\text{grad}}$ (there's no command \cs{widevec} analogous
-% to \cs{widehat}).
+% (\cs{mathchar}|"017E| in Computer Modern font). But \symb{\mathchar
+% "017E\relax} isn't extensible\footnotemark{}, and gives: $\vec{v}$, $\vec{AB}$
+% or $\vec{\text{grad}}$ (there's no command \cs{widevec} analogous to
+% \cs{widehat}).
%
+% \addtocounter{footnote}{-2}%^^A two footnotemarks
+%
+% \stepcounter{footnote}
% \footnotetext{See, for example: International Organization for
% Standardization. (2019). \emph{Quantities and units -- Part 2: Mathematics}
% (ISO Standard No. 80000-2:2019).
% \url{https://www.iso.org/standard/64973.html}.}
%
+% \stepcounter{footnote}
+% \footnotetext{In fact, with the unicode engines \LuaTeX{} and \XeTeX{}, the
+% command \cs{Umathaccent} can now define extensible accents. This is used by
+% the \pkg{unicode-math} package, which also set the arrows displayed by \cs{vec}
+% and \cs{overrightarrow} in a coherent manner.}
+%
% An extensible alternative is given by the command \cs{overrightarrow},
% available in \TeX/\LaTeX, and which is redefined by the commonly used
% \pkg{amsmath} package. But its arrow, built with the \cs{rightarrow} symbol
-% \symb{\rightarrow}, is too large with the default \emph{Computer Modern} font:
-% $\amsoverrightarrow{AB}$. Another alternative is the \pkg{esvect} package,
-% which provides the \cs{vv} command and a set of custom arrows: $\esveca{AB}$,
-% $\esvecb{AB}$, $\esvecc{AB}$, $\esvecd{AB}$, $\esvece{AB}$, $\esvecf{AB}$,
-% $\esvecg{AB}$, $\esvech{AB}$.
+% \symb{\rightarrow}, is too large, using the default \emph{Computer Modern}
+% font: $\amsoverrightarrow{AB}$. Another alternative is the \pkg{esvect}
+% package, which provides the \cs{vv} command and a set of custom arrows:
+% $\esveca{AB}$, $\esvecb{AB}$, $\esvecc{AB}$, $\esvecd{AB}$, $\esvece{AB}$,
+% $\esvecf{AB}$, $\esvecg{AB}$, $\esvech{AB}$.
%
% \subsection{Stack and arrow macros}
%
% It's worth looking at the definition of \pkg{amsmath} \cs{overrightarrow}
-% command:
-% \iffalse
+% command: \iffalse
%<*example>
% \fi
\begin{dispListing}
- \long macro:->\mathpalette {\overarrow@ \rightarrowfill@ }
+\long macro:->\mathpalette {\overarrow@ \rightarrowfill@ }
\end{dispListing}
% \iffalse
%</example>
@@ -314,7 +325,7 @@
% The \pkg{overarrows} package also provides an alternative mechanism.
% When used, the length \cs{overarrowlength} is set, according to the arrow
% command content, and can be employed, for example, to draw arrows using
-% PGF/TikZ or the \LaTeX{} picture environment.
+% PGF/TikZ, PSTricks or the \LaTeX{} picture environment.
%
% \section{Quick start}
%
@@ -382,14 +393,13 @@
% \subsection{Commands creation}
%
% Commands are created with \refCom{NewOverArrowCommand}. This macro take two
-% mandatory arguments : the name of the command (without backslash), and the
-% arrow configuration as comma-separated list of key-values. By default, a right
-% arrow is set:
+% mandatory arguments : the name of the command and the arrow configuration as
+% comma-separated list of key-values. By default, a right arrow is set:
% \iffalse
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{myovercmd}{}
+\NewOverArrowCommand{\myovercmd}{}
$\myovercmd{test}$
\end{dispExample}
% \iffalse
@@ -417,7 +427,7 @@ $ v_{sub} \qquad \myovercmd{v}_{sub} \qquad \myovercmd*{v}_{sub} $
%<*example>
% \fi
\begin{dispListing}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+\NewOverArrowCommand{\overhooktwoheadrightarrow}{%
start=\lhook, end=\twoheadrightarrow,
}
\end{dispListing}
@@ -436,12 +446,12 @@ $ v_{sub} \qquad \myovercmd{v}_{sub} \qquad \myovercmd*{v}_{sub} $
% \iffalse
%</example>
% \fi
-% With the previous definition, the result of the command
+% But with the previous definition, the result of the command
% \cs{overhooktwoheadrightarrow} is faulty:
% \iffalse
%<*example>
% \fi
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+\NewOverArrowCommand{\overhooktwoheadrightarrow}{%
start=\lhook, end=\twoheadrightarrow,
}
\begin{dispExample}
@@ -459,7 +469,7 @@ $ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
% \fi
\csundef{overhooktwoheadrightarrow}
\begin{dispExample}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+\NewOverArrowCommand{\overhooktwoheadrightarrow}{%
start=\lhook, end=\twoheadrightarrow,
trim start=1.5, trim end=2,
}
@@ -474,16 +484,18 @@ $ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
% If the math font differs from the default \emph{Computer Modern}, the central
% part of the arrow may have inappropriate position or line width. This is
% because the default symbol used for the arrow line is \cs{relbareda}
-% \symb{\relbareda} from the \pkg{esvect} package. If needed, try to set the
-% \refKey{middle} key with the symbol \cs{relbar} \symb{\relbar}. The trimming
-% should also be adapted:
+% \symb{\relbareda} from the \pkg{esvect} package\footnote{Except if the
+% \pkg{unicode-math} package is used with a math font that provides the
+% \cs{harrowextender} symbol (see the \refKey*{middle config}|=auto| key).}.
+% If needed, try to set the \refKey{middle} key with the symbol \cs{relbar}
+% \symb{\relbar}. The trimming should also be adapted:
% \iffalse
%<*example>
% \fi
\csundef{overhooktwoheadrightarrow}
\begin{dispExample}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
- start=\lhook, end=\twoheadrightarrow, middle=\relbar, %
+\NewOverArrowCommand{\overhooktwoheadrightarrow}{%
+ start=\lhook, end=\twoheadrightarrow, middle=\relbar,
trim start=0, trim end=3, trim middle=5,
}
$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
@@ -500,7 +512,7 @@ $ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\TestOverArrow{overhooktwoheadrightarrow}
+\TestOverArrow{\overhooktwoheadrightarrow}
\end{dispExample}
% \iffalse
%</example>
@@ -514,7 +526,7 @@ $ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
+\NewOverArrowCommand{\OverRightarrow}{%
start=\Relbar,
middle=\Relbar,
end=\Rightarrow,
@@ -535,7 +547,7 @@ $ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
% \fi
\csundef{OverRightarrow}
\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
+\NewOverArrowCommand{\OverRightarrow}{%
start={\smallermathstyle\Relbar},
middle={\smallermathstyle\Relbar},
end=\Rightarrow,
@@ -557,7 +569,7 @@ $ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
% \fi
\csundef{OverRightarrow}
\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
+\NewOverArrowCommand{\OverRightarrow}{%
start={\smallermathstyle\Relbar},
middle={\smallermathstyle\Relbar},
end=\Rightarrow,
@@ -579,7 +591,7 @@ $ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{OverLeftarrow}{%
+\NewOverArrowCommand{\OverLeftarrow}{%
start={\smallermathstyle\Leftarrow},
middle={\smallermathstyle\Relbar},
end=\Relbar,
@@ -601,7 +613,7 @@ $ \OverLeftarrow{v} \qquad \OverLeftarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{OverLeftRightarrow}{%
+\NewOverArrowCommand{\UnderLeftRightarrow}{%
start={\smallermathstyle\Leftarrow},
middle={\smallermathstyle\Relbar},
end=\Rightarrow,
@@ -610,7 +622,7 @@ $ \OverLeftarrow{v} \qquad \OverLeftarrow{AB} $
space before arrow=0.5ex,
shift left=0, shift right=0,
}
-$ \OverLeftRightarrow{v} \qquad \OverLeftRightarrow{AB} $
+$ \UnderLeftRightarrow{v} \qquad \UnderLeftRightarrow{AB} $
\end{dispExample}
% \iffalse
%</example>
@@ -650,7 +662,7 @@ $ \tttail $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{overtttailrightarrow}{%
+\NewOverArrowCommand{\overtttailrightarrow}{%
start={\tttail},
end={\rightarrow},
trim start=12,
@@ -683,7 +695,7 @@ $ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
% \fi
\csundef{overtttailrightarrow}
\begin{dispExample}
-\NewOverArrowCommand{overtttailrightarrow}{%
+\NewOverArrowCommand{\overtttailrightarrow}{%
start={\vcenter{\hbox{$\smallermathstyle\tttail$}}},
end={\rightarrow},
trim start=12,
@@ -710,7 +722,7 @@ $ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
\begin{dispExample}
\newcommand*{\leftarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{40}}
\newcommand*{\righttarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{41}}
-\NewOverArrowCommand{overrightleftarrow}{%
+\NewOverArrowCommand{\overrightleftarrow}{%
start=\text{\righttarrowhead},
end=\text{\leftarrowhead},
trim start=0.7, trim end=0.7,
@@ -751,7 +763,7 @@ $ \overrightleftarrow{AB} \qquad \scriptstyle\overrightleftarrow{AB} $
% \medskip
%
% To use PGF/TikZ language, the optional argument |tikz| must be passed to
-% \refCom{NewOverArrowCommand} . TikZ picture are not extensible. That's why the
+% \refCom{NewOverArrowCommand}. TikZ pictures are not extensible. That's why the
% \pkg{overarrows} package provides three lengths that can be used in TikZ
% commands:
% \begin{itemize}
@@ -767,7 +779,7 @@ $ \overrightleftarrow{AB} \qquad \scriptstyle\overrightleftarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand[tikz]{overtikzarrow}{}
+\NewOverArrowCommand[tikz]{\overtikzarrow}{}
$ \overtikzarrow{v} \qquad \overtikzarrow{AB} $
\end{dispExample}
% \iffalse
@@ -791,7 +803,7 @@ $ \overtikzarrow{v} \qquad \overtikzarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand[tikz]{overarchedleftrightarrow}{%
+\NewOverArrowCommand[tikz]{\overarchedleftrightarrow}{%
add tikz options={y=\overarrowlength},
add tikz options={line width={\overarrowsmallerthickness}},
path options={arrows={<[scale=0.5]->[scale=0.5]}},
@@ -807,20 +819,72 @@ $ \overarchedleftrightarrow{v} \qquad \overarchedleftrightarrow{ABCD} $
%</example>
% \fi
%
+% \subsection{Drawing the arrow with PSTricks}
+%
+% In addition to PGF/TikZ, the arrow can be drawn with PSTricks macros.
+% For this, the optional argument |pstricks| must be passed to
+% \refCom{NewOverArrowCommand}. Like with
+% |tikz|, the three lengths \refCom{overarrowlength}, \refCom{overarrowthickness}
+% and \refCom{overarrowsmallerthickness} can be used in PSTricks commands.
+% By default, a right arrow is drawn:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[pstricks]{\overpstarrow}{}
+$ \overpstarrow{v} \qquad \overpstarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent The \pkg{pstricks} package has to be loaded (for example, using the
+% \refOpt{pstricks} option of the \pkg{overarrows} package)
+%
+% Keys to use PSTricks commands are described in section~\ref{sec:pstricks-keys},
+% page~\pageref{sec:pstricks-keys}. The main keys are \refKey{pstricks command},
+% \refKey{psset}, \refDoc{key:pstricks}{arrow}, \refDoc{key:pstricks}{geometry}
+% an \refDoc{key:pstricks}{line thickness}. Examples:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[pstricks]{\overreddisks}{%
+ psset={linecolor=red}, arrow=*-*, center arrow,
+}
+$ \overreddisks{v} \qquad \overreddisks{AB} $
+\end{dispExample}
+\begin{dispExample}
+\NewOverArrowCommand[pstricks]{\ellipticarrow}{%
+ pstricks command={%
+ \psellipticarcn{->}%^^A avoid space before coordinates
+ (0.5\overarrowlength,0.2\overarrowlength)%^^A avoid space before coordinates
+ (0.5\overarrowlength,0.2\overarrowlength)
+ {170}{10}
+ },
+ geometry={(0,0.2\overarrowlength)(\overarrowlength,0.4\overarrowlength)},
+ line thickness={\overarrowsmallerthickness},
+ center arrow,
+}
+$ \ellipticarrow{v} \qquad \ellipticarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
% \subsection{Drawing the arrow with \LaTeX{} picture environment}
%
-% As well as TikZ, the \LaTeX{} |picture| environment can be used to draw the
-% arrow. For this, the optional argument |picture| must be passed to
-% \refCom{NewOverArrowCommand}. Like for TikZ, the three lengths
-% \refCom{overarrowlength}, \refCom{overarrowthickness} and
-% \refCom{overarrowsmallerthickness} can be used in |picture| commands.
-% By default, a right vector is drawn:
+% Without any other package, arrows can also be drawn with the \LaTeX{}
+% |picture| environment. In this case, the optional argument |picture| must be
+% passed to \refCom{NewOverArrowCommand}. As with |tikz| or |pstricks|, the
+% three lengths \refCom{overarrowlength}, \refCom{overarrowthickness} and
+% \refCom{overarrowsmallerthickness} are available and can be used in
+% |picture| drawing commands. By default, a right vector is drawn:
% \iffalse
%<*example>
% \fi
\ltxarrows%^^A classic arrows
\begin{dispExample}
-\NewOverArrowCommand[picture]{overpictarrow}{}
+\NewOverArrowCommand[picture]{\overpictarrow}{}
$ \overpictarrow{v} \qquad \overpictarrow{AB} $
\end{dispExample}
% \iffalse
@@ -835,7 +899,7 @@ $ \overpictarrow{v} \qquad \overpictarrow{AB} $
\pstarrows%^^A pst arrows
\csundef{overpictarrow}
\begin{dispExample}
-\NewOverArrowCommand[picture]{overpictarrow}{}
+\NewOverArrowCommand[picture]{\overpictarrow}{}
$ \overpictarrow{v} \qquad \overpictarrow{AB} $
\end{dispExample}
% \iffalse
@@ -844,13 +908,13 @@ $ \overpictarrow{v} \qquad \overpictarrow{AB} $
%
% Keys to use \LaTeX{} |picture| environment are described in
% section~\ref{sec:picture-keys}, page~\pageref{sec:picture-keys}. The main keys
-% are \refKey{picture command}, \refKey{geometry} an \refDoc{key:picture}{line
-% thickness}. Here is an example:
+% are \refKey{picture command}, \refDoc{key:picture}{geometry} an
+% \refDoc{key:picture}{line thickness}. Here is an example:
% \iffalse
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand[picture]{overbandedarrow}{
+\NewOverArrowCommand[picture]{\overbandedarrow}{
picture command={%
\qbezier
(0.0\overarrowlength,0)
@@ -875,7 +939,6 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% \subsection{Package options}
% \label{sec:package-options}
%
-%
% The \pkg{overarrows} package accepts many options, given as a comma-separated
% list \meta{options} at package loading:
% \cs{usepackage}|[|\meta{options}|]{overarrows}|.
@@ -889,7 +952,8 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% \begin{docOption}{esvect}
% Loads the \pkg{esvect} package and redefines its vector commands \refCom{vv}
% through the \pkg{overarrows} mechanism. Original \pkg{esvect} \cs{vv} macro
-% is still available with \refCom{esvectvv}.
+% is still available with \refCom{esvectvv}. The \pkg{esvect} font description
+% is fixed to allow any font sizes.
%
% The \pkg{esvect} package provides the symbol \cs{relbareda} \symb{\relbareda}
% which is smaller and often more flexible than the classic one \cs{relbar}
@@ -1098,6 +1162,16 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% library are loaded independently.
% \end{docOption}
%
+% \begin{docOption}{pstricks}
+% Loads the package \pkg{pstricks-add}.
+%
+% Note that, as it, this will compile with \LaTeX{}, \LuaLaTeX{} and
+% \XeLaTeX{}, but not with \makebox{pdf\LaTeX} (see the PSTricks
+% documentation). PSTricks arrows, drawn with the |pstricks| method, are
+% always available, even if this option is not set, provided the
+% \pkg{pstricks} package is loaded independently.
+% \end{docOption}
+%
% \begin{docOption}{pstarrows}
% Loads the \pkg{pict2e} package, with its option |pstarrows|. Vectors using
% \LaTeX{} |picture| environment gives then \pstarrows$\overpictarrow{AB}$
@@ -1117,6 +1191,7 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% \end{docOption}
%
% \begin{docOption}{subother}
+% \tcbdocmarginnote{\tcbdocnew{v1.1 2023/02/15}}
% Sets to 12 (\emph{other} catcode category) the catcode of the ``|_|" symbol
% used for subscript detection, when this is enabled by the key \refKey{detect
% subscripts} (see the section~\ref{sec:non-standard-subscripts},
@@ -1124,6 +1199,7 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% \end{docOption}
%
% \begin{docOption}{subactive}
+% \tcbdocmarginnote{\tcbdocnew{v1.1 2023/02/15}}
% Sets to 13 (\emph{active} catcode category) the catcode of the ``|_|" symbol
% used for subscript detection, when this is enabled by the key \refKey{detect
% subscripts} (see the section~\ref{sec:non-standard-subscripts},
@@ -1142,45 +1218,51 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
% \begin{docCommands}{%
% {
% doc name=NewOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% doc parameter=\oarg{method}\marg{command}\marg{keys},
% },
% {
% doc name=RenewOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% doc parameter=\oarg{method}\marg{command}\marg{keys},
% },
% {
% doc name=ProvideOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% doc parameter=\oarg{method}\marg{command}\marg{keys},
% },
% {
% doc name=DeclareOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% doc parameter=\oarg{method}\marg{command}\marg{keys},
% },
% }
-% Creates the command \cs{\meta{name}} and its starred variant
-% \cs{\meta{name}*}. The starred variant \cs{\meta{name}*} removes the extra
+% Creates the command \meta{command} and its starred variant
+% \meta{command}|*|. The starred variant \meta{command}|*| removes the extra
% end space generated by the arrow, which is suitable, as example, when
% a subscript follows.
%
+% \tcbdocmarginnote{\tcbdocupdated{v1.2 2024/07/11}}
+% \meta{command} can be given with or without backslash (prior to the version
+% 1.2, only the name, without backslash, was accepted).
+%
% \begin{description}
-% \item[\cs{NewOverArrowCommand}] raises an error if \cs{\meta{name}} is
-% already defined.
+% \item[\cs{NewOverArrowCommand}] raises an error if \meta{command} is
+% already defined.
%
-% \item[\cs{RenewOverArrowCommand}] raises an error if \cs{\meta{name}} is undefined.
+% \item[\cs{RenewOverArrowCommand}] raises an error if \meta{command}
+% is undefined.
%
-% \item[\cs{ProvideOverArrowCommand}] sets \cs{\meta{name}} if the command is
-% undefined and does nothing if it is already defined, without raising
-% any error.
+% \item[\cs{ProvideOverArrowCommand}] sets \meta{command} if the command is
+% undefined and does nothing if it is already defined, without raising
+% any error.
%
-% \item[\cs{DeclareOverArrowCommand}] sets \cs{\meta{name}}, whether the
-% command is already defined
-% or not, without raising any error.
+% \item[\cs{DeclareOverArrowCommand}] sets \meta{command}, whether the command
+% is already defined or not, without raising any error.
% \end{description}
%
% The \meta{method} used to draw the arrow must be:
% \begin{description}
% \item[|symb|] to draw the arrow by symbols assemblage (default);
% \item[|tikz|] to draw the arrow with PGF/TikZ;
+% \item[|pstricks|] to draw the arrow with PSTricks;
+% \tcbdocmarginnote{\tcbdocnew{v1.2 2024/07/11}}
% \item[|picture|] to draw the arrow with the \LaTeX{}
% |picture| environment.
% \end{description}
@@ -1196,7 +1278,7 @@ $ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand[tikz]{myoverarrow}{arrows={Bar-Bar}, center arrow}
+\NewOverArrowCommand[tikz]{\myoverarrow}{arrows={Bar-Bar}, center arrow}
$ \myoverarrow{v} \qquad \myoverarrow{ABCD} $
\end{dispExample}
% \iffalse
@@ -1207,19 +1289,23 @@ $ \myoverarrow{v} \qquad \myoverarrow{ABCD} $
% \begin{docCommands}{%
% {
% doc name=TestOverArrow,
-% doc parameter=\oarg{pattern}\marg{name},
+% doc parameter=\oarg{pattern}\marg{command},
% },
% {
% doc name=TestOverArrow*,
-% doc parameter=\oarg{pattern}\marg{name},
+% doc parameter=\oarg{pattern}\marg{command},
% },
% }
-% Displays the result of the command \meta{name} for patterns of various
+% Displays the result of the command \meta{command} for patterns of various
% lengths and for the four math styles. A custom \meta{pattern} can be added
% to the predefined ones.
%
% The starred variant \cs{TestOverArrow*} displays a full report, including
-% kerning tests of the commands \cs{\meta{name}} and \cs{\meta{name}*} .
+% kerning tests of the commands \meta{command} and \meta{command}|*|.
+%
+% \tcbdocmarginnote{\tcbdocupdated{v1.2 2024/07/11}}
+% \meta{command} can be given with or without backslash (prior to the version
+% 1.2, only the name, without backslash, was accepted).
%
% \iffalse
%<*example>
@@ -1261,9 +1347,9 @@ $ \myoverarrow{v} \qquad \myoverarrow{ABCD} $
% \begin{docCommand}{smallermathstyle}{}
% Applies the next math style, smaller than the current. That is:
% \begin{itemize}
-% \item sets \cs{scriptstyle} if the current math style is \cs{displaystyle}
+% \item uses \cs{scriptstyle} if the current math style is \cs{displaystyle}
% or \cs{textstyle};
-% \item sets \cs{scriptscriptstyle} if the current math style is
+% \item uses \cs{scriptscriptstyle} if the current math style is
% \cs{scriptstyle};
% \item does nothing if the current math style is \cs{scriptscriptstyle}.
% \end{itemize}
@@ -1283,19 +1369,20 @@ $ \displaystyle AB \quad \smallermathstyle AB
%
% \end{docCommand}
%
-% \subsubsection{Useful lengths for TikZ or \texttt{picture} environment}
+% \subsubsection{Useful lengths for TikZ, PSTricks or \texttt{picture} environment}
%
-% Arrows drawn with graphic languages, like PGF/TikZ or the \LaTeX{} |picture|
-% environment, are not extensible. The three lengths \refLen*{overarrowlength},
-% \refLen*{overarrowthickness} and \refLen*{overarrowsmallerthickness} are
-% computed at each utilisation of a command set with the |tikz| or |picture|
-% method, so they can be used in drawing commands.
+% Arrows drawn with graphic languages, like PGF/TikZ, PSTricks or the \LaTeX{}
+% |picture| environment, are not extensible. The three lengths
+% \refLen*{overarrowlength}, \refLen*{overarrowthickness} and
+% \refLen*{overarrowsmallerthickness} are computed at each utilisation of
+% a command set with the |tikz|, |pstricks| or |picture| method, so they can be
+% used in drawing commands.
%
% \iffalse
%<*example>
% \fi
\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand[tikz]{overparabola}{%
+\NewOverArrowCommand[tikz]{\overparabola}{%
path options={x=\overarrowlength, line width=\overarrowsmallerthickness},
path={(0,0) parabola[parabola height=0.2\overarrowlength] (1,0)},
arrows={-}, center arrow, min length=30,
@@ -1320,8 +1407,13 @@ $\scriptstyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
% \item |\fontdimen 8 \scriptscriptfont 3| in
% \cs{scriptscriptstyle}.
% \end{itemize}
+%
+% \tcbdocmarginnote{\tcbdocupdated{v1.2 2024/07/11}}
+% Theses settings are adapted when the package \pkg{unicode-math} is loaded
+% (using \cs{Umathoverbarrule} with \LuaLaTeX{} or |\fontdimen 54|, family~2
+% with \XeLaTeX{} --- see the manual of \pkg{unicode-math}).
% \end{docLength}
-%
+%
% \begin{docLength}{overarrowsmallerthickness}
% Is set to the default rule thickness of the next smaller math style.
% That is:
@@ -1330,6 +1422,11 @@ $\scriptstyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
% \item |\fontdimen 8 \scriptscriptfont 3| in \cs{scriptstyle} or
% \cs{scriptscriptstyle}.
% \end{itemize}
+%
+% \tcbdocmarginnote{\tcbdocupdated{v1.2 2024/07/11}}
+% Theses settings are adapted when the package \pkg{unicode-math} is loaded
+% (using \cs{Umathoverbarrule} with \LuaLaTeX{} or |\fontdimen 54|, family~2
+% with \XeLaTeX{} --- see the manual of \pkg{unicode-math}).
% \end{docLength}
%
% \subsubsection{Vectors macros}
@@ -1507,8 +1604,9 @@ $ \esvectvv*{\imath}{0} \quad \esvectvv*{e}{r} \quad \esvectvv*{L}{\Delta} $
% page~\pageref{sec:macro-for-commands-creation} for the documentation of
% commands creation):
% \begin{itemize}
-% \item \meta{number}| = 0 | for the |symb| method (default);
+% \item \meta{number}| = 0 | for the |symb| method (method by default);
% \item \meta{number}| = 12| for the |tikz| method;
+% \item \meta{number}| = 12| for the |pstricks| method;
% \item \meta{number}| = 18| for the |picture| method.
% \end{itemize}
%
@@ -1516,7 +1614,7 @@ $ \esvectvv*{\imath}{0} \quad \esvectvv*{e}{r} \quad \esvectvv*{L}{\Delta} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{overlongarrow}{min length=50}
+\NewOverArrowCommand{\overlongarrow}{min length=50}
$ \overlongarrow{v} \qquad \overlongarrow{ABCDEF} $
\end{dispExample}
% \iffalse
@@ -1550,7 +1648,7 @@ $ \overlongarrow{v} \qquad \overlongarrow{ABCDEF} $
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{underhooks}{%
+\NewOverArrowCommand{\underhooks}{%
start={\lhook}, end={\rhook}, trim=1,
arrow under, shift leftright=-4,
}
@@ -1580,8 +1678,8 @@ $ \underhooks{v} \qquad \underhooks{AB} $
% page~\pageref{sec:macro-for-commands-creation} for the documentation of
% commands creation):
% \begin{itemize}
-% \item \meta{number}| = 0 | for the |symb| method (default);
-% \item \meta{number}| = -2| for the |tikz| and |picture| methods.
+% \item \meta{number}| = 0 | for the |symb| method (method by default);
+% \item \meta{number}| = -2| for the |tikz|, |pstricks| and |picture| methods.
% \end{itemize}
%
%\end{docKey}
@@ -1590,7 +1688,7 @@ $ \underhooks{v} \qquad \underhooks{AB} $
%<*example>
% \fi
\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand{lookback}{%
+\NewOverArrowCommand{\lookback}{%
start={\leftarrow}, end={\rightharpoondown},
shift left=-50, shift right=-10,
}
@@ -1658,7 +1756,7 @@ $ \lookback{\text{look back}} $
%<*example>
% \fi
\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand{overharpoonsdown}{%
+\NewOverArrowCommand{\overharpoonsdown}{%
start=\leftharpoondown, end=\rightharpoondown, center arrow,
space before arrow=-0.2ex, space after arrow=0.3ex,
}
@@ -1693,7 +1791,7 @@ $ \dot{\overharpoonsdown{v}} \qquad \ddot{\overharpoonsdown{AB}}$
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{autosub}{detect subscripts}
+\NewOverArrowCommand{\autosub}{detect subscripts}
$ \imath_0 \qquad \autosub{\imath}_0 \qquad
{\autosub{\imath}}_0 \qquad {\autosub*{\imath}}_0 $
\end{dispExample}
@@ -1745,7 +1843,7 @@ $ \imath_0 \qquad \autosub{\imath}_0 \qquad
%<*example>
% \fi
\begin{dispExample}
-\NewOverArrowCommand{smalleroverrightarrow}{%
+\NewOverArrowCommand{\smalleroverrightarrow}{%
start={\smallermathstyle\relbar},
middle={\smallermathstyle\relbareda},
end={\rightarrow},
@@ -1784,16 +1882,26 @@ $ \smalleroverrightarrow{v} \qquad \smalleroverrightarrow{AB} $
% Clears \refKey{trim start}, \refKey{trim middle} and \refKey{trim end}.
% \end{docKey}
%
-%\begin{docKey}{middle config}{=auto\textbar relbar\textbar relbareda}{no default}
-% Sets a suitable configuration for the keys \refKey{middle} and \refKey{trim middle}:
+%\begin{docKey}{middle config}{=auto\textbar relbar\textbar relbareda\textbar harrowextender}{no default}
+% Sets a suitable configuration for the keys \refKey{middle} and \refKey{trim
+% middle}:
% \begin{description}
-% \item[For \refKey*{middle config}| = relbar|,] \refKey{middle} is set to
-% \cs{relbar} \symb{\relbar} and \refKey{trim middle} to |2.5|.
-% \item[For \refKey*{middle config}| = relbareda|,] \refKey{middle} is set to
-% \cs{relbareda} \symb{\relbareda} and \refKey{trim middle} to |1|.
-% \item[For \refKey*{middle config}| = auto|,] \refKey{middle} is set with
-% \refKey*{middle config}| = relabareda| if the option \refOpt{esvect} is set
-% (which is the default) and \refKey*{middle config}| = relabar| if not.
+% \item[For \refKey*{middle config}| = relbar|,] \refKey{middle} is set to
+% \cs{relbar} \symb{\relbar} and \refKey{trim middle} to |2.5|.
+% \item[For \refKey*{middle config}| = relbareda|,] \refKey{middle} is set to
+% \cs{relbareda} \symb{\relbareda} and \refKey{trim middle} to |1|.
+% \item[For \refKey*{middle config}| = harrowextender|,]
+% \tcbdocmarginnote{\tcbdocnew{v1.2 2024/07/11}}
+% \refKey{middle} is set to \cs{harrowextender} and \refKey{trim middle} to
+% |0|.
+% \item[For \refKey*{middle config}| = auto|,]
+% \tcbdocmarginnote{\tcbdocupdated{v1.2 2024/07/11}}
+% if \cs{harrowextender} is provided by the math font\footnote{See the
+% documentation of the package \pkg{unicode-math}.}, \refKey{middle} is set
+% with \refKey*{middle config}| = harrowextender|. If \cs{harrowextender}
+% isn't availlable, \refKey{middle} is set with \refKey*{middle config}%
+% | = relbareda| if the option \refOpt{esvect} is set (which is the
+% default) and \refKey*{middle config}| = relabar| if not.
% \end{description}
%\end{docKey}
%
@@ -1880,14 +1988,14 @@ $ \smalleroverrightarrow{v} \qquad \smalleroverrightarrow{AB} $
% commands creation), the |tikz| method is chosen, then the arrow is drawn by
% the command:
% \begin{center}
-% \cs{tikz}|[|\refKey*{tikz options}|]{|\refKey*{tikz command}|}|
+% \cs{tikz}|[<|\refKey*{tikz options}|>]{<|\refKey*{tikz command}|>}|
% \end{center}
% \noindent where \refKey{tikz options} and \refKey{tikz command} are two keys
% described below. When \refKey*{tikz command} is let unset, the drawing command
% turns into:
% \begin{center}
-% \cs{tikz}|[|\refKey*{tikz options}|]{|\cs{draw}|[|\refKey*{path options}|]|
-% \refKey*{path}|;}|
+% \cs{tikz}|[<|\refKey*{tikz options}|>]{|\cs{draw}|[<|\refKey*{path options}|>]|
+% |<|\refKey*{path}|>;}|
% \end{center}
%
% The best way to customise |tikz| arrows is then to set the keys \refKey{tikz
@@ -1899,7 +2007,7 @@ $ \smalleroverrightarrow{v} \qquad \smalleroverrightarrow{AB} $
%<*example>
% \fi
\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand[tikz]{overdotteddoublearrow}{%
+\NewOverArrowCommand[tikz]{\overdotteddoublearrow}{%
add tikz options={blue}, add path options={densely dotted},
arrows={->[scale=0.5]>[scale=0.5]}, thinner,
min length=20, space after arrow={0.3ex},
@@ -1910,16 +2018,18 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%</example>
% \fi
%
+% \bigskip
+%
% The following keys are available when the |tikz| method is chosen.
%
-% \begin{docKey}[][before lower=\medskip\par]
+% \begin{docKey}[][before lower=\bigskip\par]
% {tikz options}{=\marg{TikZ options}}
% {no default, initially |x=|\cs{overarrowlength}|, line
% width=|\cs{overarrowthickness}}
% Sets TikZ options to \meta{TikZ options}.
%\end{docKey}
%
-% \begin{docKey}[][before lower=\medskip\par]
+% \begin{docKey}[][before lower=\bigskip\par]
% {path options}{=\marg{path options}}
% {no default, initially |arrows={-Classical TikZ Rightarrow}, cap=round|}
% Sets TikZ path options to \meta{path options}.
@@ -1957,21 +2067,102 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% value \cs{draw}|[|\refKey*{path options}|] |\refKey*{path}|;| is used.
%\end{docKey}
%
+% \subsubsection{PSTricks settings}
+% \label{sec:pstricks-keys}
+%
+% \tcbdocmarginnote{\tcbdocnew{v1.2 2024/07/11}}
+% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation), the |pstricks| method is chosen, then the arrow is drawn
+% by:
+% \begin{flushleft}\leftskip=3cm
+% \cs{begin}|{pspicture}<|\refDoc{key:pstricks}*{geometry}|>%|\\
+% \quad\cs{psset}|{linewidth=<|\refDoc{key:pstricks}*{line thickness}|>}%|\\
+% \quad\cs{psset}|{<|\refKey*{psset}|>}%|\\
+% \quad|<|\refKey*{pstricks command}|>%|\par
+% \cs{end}|{pspicture}%|
+% \end{flushleft}
+% \noindent where \refDoc{key:pstricks}{geometry}, \refDoc{key:pstricks}{line
+% thickness} \refKey*{psset} and \refKey*{pstricks command} are four keys
+% described below.
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+\NewOverArrowCommand[pstricks]{\overloopandarrow}{
+ pstricks command={%
+ \pscurve{->}(0,0)
+ (0.6\overarrowlength,0.05\overarrowlength)
+ (0.5\overarrowlength,0.1\overarrowlength)
+ (0.4\overarrowlength,0.05\overarrowlength)
+ (\overarrowlength,0)
+ },
+ geometry={(0,0)(\overarrowlength,0.2\overarrowlength)},
+ space after arrow=2pt, min length=20,
+ geometry={(0,0)(\overarrowlength,0.2\overarrowlength)},
+}
+$ \overloopandarrow{v} \qquad \overloopandarrow{AB} $
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+%
+% \bigskip
+%
+% The following keys are available when the |pstricks| method is chosen.
+%
+% \begin{docKey}[][before lower=\bigskip\par]
+% {pstricks command}{=\marg{pstricks command}}
+% {no default, initially \cs{psline}|\{->\}(0,0)(|\refCom*{overarrowlength}|,0)|}
+% Sets the |pspicture| command to \meta{pstricks command}.
+% \end{docKey}
+%
+% \begin{docKey}[][doc label={pstricks:arrow}]%^^A same name as for TikZ
+% {arrow}{=\marg{arrow}}
+% {no default, initially |->|}
+% Sets \refKey{pstricks command} with
+% |\psline{|\meta{arrow}|}(0,0)(|\refCom*{overarrowlength}|,0)|.
+% \end{docKey}
+%
+% \begin{docKey}[][]
+% {psset}{=\marg{pstricks setting}}
+% {no default, initially empty}
+% Sets \meta{pstricks setting} with \cs{psset}.
+% \end{docKey}
+%
+% \begin{docKey}[][before lower=\bigskip\par, doc label={pstricks:geometry}]%^^A same name as for picture
+% {geometry}{=\marg{pstricks geometry specification}}
+% {no default, initially |(0,-0.5ex)(|\refCom*{overarrowlength}|,1ex)|}
+% Sets the |pspicture| geometry to \meta{pstricks geometry specification}.
+% \end{docKey}
+%
+% \begin{docKey}[][doc label={pstricks:line thickness}]%^^A same name as for TikZ
+% {line thickness}{=\marg{length}}{no default}
+% Sets the line thickness to \meta{length}.
+% \end{docKey}
+%
+% \begin{docKey}[][doc label={pstricks:thinner}]%^^A same name as for TikZ
+% {thinner}{}{}
+% Sets the keys \refDoc{key:pstricks}{line thickness} with
+% \cs{overarrowsmallerthickness}.
+% \end{docKey}
+%
% \subsubsection{Picture environment settings}
% \label{sec:picture-keys}
%
% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
% page~\pageref{sec:macro-for-commands-creation} for the documentation of
% commands creation), the |picture| method is chosen, then the arrow is drawn
-% with by:
+% by:
% \begin{flushleft}\leftskip=3cm
-% \cs{begin}|{picture}|\refKey*{geometry}|%|\\
-% \quad\cs{linethickness}|{|\refDoc{key:picture}*{line thickness}|}%|\\
-% \quad\refKey*{picture command}|%|\par
+% \cs{begin}|{picture}<|\refDoc{key:picture}*{geometry}|>%|\\
+% \quad\cs{linethickness}|{<|\refDoc{key:picture}*{line thickness}|>}%|\\
+% \quad|<|\refKey*{picture command}|>%|\par
% \cs{end}|{picture}%|
% \end{flushleft}
-% \noindent where \refKey{geometry}, \refDoc{key:picture}{line thickness} and
-% \refKey*{picture command} are three keys described below.
+% \noindent where \refDoc{key:picture}{geometry}, \refDoc{key:picture}{line
+% thickness} and \refKey*{picture command} are three keys described below.
%
%\iffalse
%<*example>
@@ -1979,7 +2170,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\begin{dispExample*}{grow to left by=-2em}
% ^^A \arc and \roundcap commands are from the pict2e package
% ^^A this example needs \usepackage{pict2e} in the preamble
- \NewOverArrowCommand[picture]{overarc}{%
+ \NewOverArrowCommand[picture]{\overarc}{%
picture command={%
\roundcap
\put(0.5\overarrowlength,0){\arc[180,0]{0.6\overarrowlength}}
@@ -1994,15 +2185,18 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% \iffalse
%</example>
% \fi
-% The following keys are available when the |picture| method is chosen.
%
-% \begin{docKey}[][before lower=\medskip\par]
+% \bigskip
+%
+%The following keys are available when the |picture| method is chosen.
+%
+% \begin{docKey}[][before lower=\bigskip\par]
% {picture command}{=\marg{picture command}}
% {no default, initially \cs{put}|(0,0)\{|\cs{vector}|(1,0)\{|\refCom*{overarrowlength}|\}\}|}
% Sets picture command to \meta{picture command}.
% \end{docKey}
%
-% \begin{docKey}[][before lower=\medskip\par]
+% \begin{docKey}[][before lower=\bigskip\par, doc label={picture:geometry}]%^^A same name as for pstricks
% {geometry}{=\marg{picture geometry specification}}
% {no default, initially |(|\refCom*{overarrowlength}|,1ex)(0,-0.5ex)|}
% Sets picture geometry to \meta{picture geometry specification}.
@@ -2029,6 +2223,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% \subsubsection{Advanced commands}
%
% \begin{docCommand}{SetOverArrowsSubscriptCommand}{\marg{command}}
+% \tcbdocmarginnote{\tcbdocnew{v1.1 2023/02/15}}
% Sets to \meta{command} the command used for subscript detection, when this
% is enabled by the key \refKey{detect subscripts} (see the
% section~\ref{sec:non-standard-subscripts},
@@ -2131,6 +2326,12 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% \symb{\relbareda} from the \pkg{esvect} package. This can be fixed with the
% \refOpt{noesvect} option.
%
+% Depending of the math font, predefined commands may be faulty. For example, at
+% the time of writing, hooks vertical position is incorrect with \emph{Asana
+% Math} or \cs{harrowextender} is badly positioned with \emph{Stix two Math}
+% (for the smallest math styles), \emph{Libertinus Math} and
+% \emph{GFSNeohellenicMath}.
+%
% \subsubsection{Detection of non standard subscripts}
% \label{sec:non-standard-subscripts}
%
@@ -2225,11 +2426,25 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \subsection{Changelog}
%
-% \begin{description}
-% \item[v1.1] Support for non-standard subscripts
-% \item[v1.0.1] Bug fix for under* options.
-% \item[v1.0] Initial version.
-% \end{description}
+% \begingroup
+% \renewcommand{\arraystretch}{2}
+% \begin{tabular*}{\linewidth}
+% {@{} l @{\extracolsep{\fill}} p{0.9\linewidth} @{}}
+% v1.2 & \noindent\par\vspace{-\baselineskip}
+% \begin{itemize}[left=0pt, topsep=0pt, partopsep=0pt]
+% \item Fix compatibility issues with \pkg{unicode-math}.
+% \item Allow to draw the arrow with PSTricks.
+% \item Make \pkg{esvect} handle all font sizes.
+% \item Rewrite starred variant for better performances.
+% \end{itemize}
+% \\
+% v1.1 & Support for non-standard subscripts.
+% \\
+% v1.0.1 & Bug fix for under* options.
+% \\
+% v1.0 & Initial version.
+% \end{tabular*}
+% \endgroup
%
% \StopEventually{}
%
@@ -2250,6 +2465,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\newif\ifovar@option@oldarrows@
\newif\ifovar@option@esvect@ \ovar@option@esvect@true \PassOptionsToPackage{f}{esvect}
\newif\ifovar@option@tikz@
+\newif\ifovar@option@pstricks@
\newif\ifovar@option@pstarrows@
\newif\ifovar@detectsubscripts@
\newif\ifovar@option@subother@
@@ -2280,6 +2496,8 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \subsubsection*{Declaration of options}
%
+% \changes{v1.2}{2024/07/11}{Add option pstricks}
+%
% \begin{macrocode}
\DeclareOption{esvect}{\ovar@option@esvect@true}
\DeclareOption{noesvect}{\ovar@option@esvect@false}
@@ -2293,6 +2511,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\DeclareOption{esvecth}{\ovar@option@esvect@true\PassOptionsToPackage{h}{esvect}}
\DeclareOption{old-arrows}{\ovar@option@oldarrows@true}
\DeclareOption{tikz}{\ovar@option@tikz@true}
+\DeclareOption{pstricks}{\ovar@option@pstricks@true}
\DeclareOption{pstarrows}{\ovar@option@pstarrows@true}
\DeclareOption{subscripts}{\ovar@detectsubscripts@true}
\DeclareOption{subother}{\ovar@option@subother@true}
@@ -2381,23 +2600,42 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\RequirePackage{amsmath}
\RequirePackage{etoolbox}
% \end{macrocode}
+%
% Option \refOpt{old-arrows}. Configuration of arrows used for
% predefined commands.
+% \changes{v1.2}{2024/07/11}{Use \cs{def} instead of \cs{let} for
+% \cs{ovar@rightarrow} and \cs{ovar@leftarrow}}
% \begin{macrocode}
-\let\ovar@rightarrow\rightarrow
-\let\ovar@leftarrow\leftarrow
+\def\ovar@rightarrow{\rightarrow}
+\def\ovar@leftarrow{\leftarrow}
\ifovar@option@oldarrows@
\RequirePackage[old]{old-arrows}
- \let\ovar@rightarrow\varrightarrow
- \let\ovar@leftarrow\varleftarrow
+ \def\ovar@rightarrow{\varrightarrow}
+ \def\ovar@leftarrow{\varleftarrow}
\fi
% \end{macrocode}
+%
% Option \refOpt{esvect}.
% \begin{macrocode}
\ifovar@option@esvect@
\RequirePackage{esvect}
+% \end{macrocode}
+% \changes{v1.2}{2024/07/11}{Fix esvect font sizes}
+% Fix font description in |uesvect.fd| to allow any sizes (taken from Enrico
+% Gregorio, \url{https://tex.stackexchange.com/a/689863/})
+% \begin{macrocode}
+ \DeclareFontFamily{U}{esvect}{}
+ \DeclareFontShape{U}{esvect}{m}{n}{
+ <-5.5> vect5
+ <5.5-6.5> vect6
+ <6.5-7.5> vect7
+ <7.5-8.5> vect8
+ <8.5-9.5> vect9
+ <9.5-> vect10
+ }{}
\fi
% \end{macrocode}
+%
% Option \refOpt{tikz}.
% \begin{macrocode}
\ifovar@option@tikz@
@@ -2405,6 +2643,14 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\usetikzlibrary{arrows.meta}
\fi
% \end{macrocode}
+%
+% Option \refOpt{pstricks}.
+% \begin{macrocode}
+\ifovar@option@pstricks@
+ \RequirePackage{pstricks-add}
+\fi
+% \end{macrocode}
+%
% Option \refOpt{pstarrows}.
% \begin{macrocode}
\ifovar@option@pstarrows@
@@ -2412,6 +2658,43 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\fi
% \end{macrocode}
%
+% Add hook rules to apply settings after \pkg{unicode-math}.
+% \begin{macrocode}
+\DeclareHookRule{begindocument}{overarrows}{after}{unicode-math-luatex}
+\DeclareHookRule{begindocument}{overarrows}{after}{unicode-math-xetex}
+% \end{macrocode}
+%
+% \changes{v1.2}{2024/07/11}{Use \cs{harrowextender}, if availlable.}
+% Set \cs{ovar@auto@middle} and \cs{ovar@auto@trim@middle}, used by
+% configurations made with \refKey*{middle config}|=auto|.
+% \begin{macrocode}
+\AddToHook{begindocument}[overarrows]
+ {%
+ \ifdef{\relbareda}
+ {%
+ \gdef\ovar@auto@middle{\relbareda}
+ \gdef\ovar@auto@trim@middle{1}
+ }
+ {%
+ \gdef\ovar@auto@middle{\relbar}
+ \gdef\ovar@auto@trim@middle{2.5}
+ }%
+ \@ifpackageloaded{unicode-math}
+ {%
+% \end{macrocode}
+% Test of \cs{harrowextender} availability taken from Enrico Gregorio,
+% (\url{https://tex.stackexchange.com/a/218407/}).
+% \begin{macrocode}
+ \check@mathfonts
+ \iffontchar\textfont\tw@\string"23AF
+ \gdef\ovar@auto@middle{\mathrel\harrowextender}
+ \gdef\ovar@auto@trim@middle{0}
+ \fi
+ }
+ {}%
+ }
+% \end{macrocode}
+%
% \subsection*{Configuration of subscripts detection}
%
% \changes{v1.1}{2023/02/15}{Support for non-standard subscripts}
@@ -2424,6 +2707,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% \end{macro}
%
% Initial configuration.
+% \changes{v1.2}{2024/07/11}{Remove useless \cs{AtBeginDocument}}
% \begin{macrocode}
\SetOverArrowsSubscriptCommand{_}
% \end{macrocode}
@@ -2432,7 +2716,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\ifovar@option@subother@
\begingroup
\catcode `_=12
- \AddToHook{begindocument/end}{\SetOverArrowsSubscriptCommand{_}}
+ \SetOverArrowsSubscriptCommand{_}%
\endgroup
\fi
% \end{macrocode}
@@ -2441,7 +2725,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\ifovar@option@subactive@
\begingroup
\catcode `_=13
- \AddToHook{begindocument/end}{\SetOverArrowsSubscriptCommand{_}}
+ \SetOverArrowsSubscriptCommand{_}%
\endgroup
\fi
% \end{macrocode}
@@ -2662,12 +2946,25 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
}
}
},
+% \end{macrocode}
+% \changes{v1.2}{2024/07/11}{Add config \refKey*{middle config}|=harrowextender|}
+% \begin{macrocode}
+ middle config/harrowextender/.code={%
+ \pgfkeysalso{%
+ middle={\harrowextender},
+ trim middle={0},
+ }
+ },
+% \end{macrocode}
+% Set \refKey*{middle config} with (hopefully) a good configuration. It would be
+% better to reuse the previous \refKey*{middle config} settings, but we have to
+% wait for the |begindocument| hook to know which one to use.
+% \begin{macrocode}
middle config/auto/.code={%
- \ifovar@option@esvect@
- \pgfkeysalso{middle config=relbareda}
- \else
- \pgfkeysalso{middle config=relbar}
- \fi
+ \pgfkeysalso{%
+ middle={\ovar@auto@middle},
+ trim middle={\ovar@auto@trim@middle},
+ }
},
% \end{macrocode}
% \refKey{amsmath}.
@@ -2775,6 +3072,59 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
}
% \end{macrocode}
%
+% \subsubsection*{Keys for the \texttt{pstricks} method}
+%
+% \changes{v1.2}{2024/07/11}{Add the method pstricks}
+%
+% \begin{macrocode}
+\SetOverArrowsMethod[lens]{pstricks}{%
+% \end{macrocode}
+% Arrow macro.
+% \begin{macrocode}
+ no arrow macro hook/.code={%
+ \ovar@set{%
+ arrow macro/.expanded={%
+ $\noexpand\mkern \expandonce{\ovar@shift@left} mu\noexpand\relax$%
+ \noexpand\begin{pspicture}\expandonce{\ovar@pstricks@geometry}%
+ \noexpand\psset{linewidth=\expandonce{\ovar@pstricks@linethickness}}%
+ \noexpand\psset{\expandonce{\ovar@pstricks@psset}}%
+ \expandonce{\ovar@pstricks@command}%
+ \noexpand\end{pspicture}%
+ $\noexpand\mkern \expandonce{\ovar@shift@right} mu\noexpand\relax$%
+ }
+ }
+ },
+% \end{macrocode}
+% Pstricks parts: \refKey{pstricks command}, \refKey{psset},
+% \refDoc{key:pstricks}{geometry}, \refDoc{key:pstricks}{line thickness}.
+% \begin{macrocode}
+ pstricks command/.store in=\ovar@pstricks@command,
+ psset/.store in=\ovar@pstricks@psset,
+ geometry/.store in=\ovar@pstricks@geometry,
+ line thickness/.store in=\ovar@pstricks@linethickness,
+ pstricks command/.value required,
+ psset/.value required,
+ geometry/.value required,
+ line thickness/.value required,
+% \end{macrocode}
+% Pstricks handy key: \refDoc{key:pstricks}{arrow}, \refDoc{key:pstricks}{thinner}.
+% \begin{macrocode}
+ arrow/.style={pstricks command={\psline{##1}(0,0)(\overarrowlength,0)}},%
+ arrow/.value required,%
+ thinner/.style={line thickness={\overarrowsmallerthickness}},%
+ thinner/.value forbidden,%
+% \end{macrocode}
+% Initial configuration.
+% \begin{macrocode}
+ shift right=-2,
+ min length=12,
+ geometry={(0,-0.5ex)(\overarrowlength,0.5ex)},%
+ line thickness={\overarrowthickness},%
+ arrow={->},%
+ psset={},%
+}
+% \end{macrocode}
+%
% \subsubsection*{Keys for the \texttt{picture} method}
%
% \begin{macrocode}
@@ -2795,7 +3145,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
}
},
% \end{macrocode}
-% Picture parts: \refKey{picture command}, \refKey{geometry},
+% Picture parts: \refKey{picture command}, \refDoc{key:picture}{geometry},
% \refDoc{key:picture}{line thickness}.
% \begin{macrocode}
picture command/.store in=\ovar@picture@command,
@@ -2831,9 +3181,9 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
Previous definition will be overridden}
}{}
% \end{macrocode}
-% Use a default value of |3.5 mu|, as recommended by egreg (see
+% Use a default value of |3.5 mu|, as recommended by Enrico Gregorio (see
% \url{https://tex.stackexchange.com/a/471736}). \cs{joinrel}
-% uses a value of 3 mu.
+% uses a value of 3 mu.
% \begin{macrocode}
\DeclareRobustCommand{\xjoinrel}[1][3.5]{\mathrel{\mkern-#1mu}}
% \end{macrocode}
@@ -2872,7 +3222,6 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\newlength{\overarrowlength}
\newlength{\overarrowthickness}
\newlength{\overarrowsmallerthickness}
-\newlength{\ovar@extralength}
\newlength{\ovar@tempdim}
% \end{macrocode}
%
@@ -2891,26 +3240,75 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
% \end{macro}
%
% \begin{macro}{\ovar@set@arrowthickness}
+% \begin{macro}{\ovar@set@arrowthickness@UM@lua}
% Sets \refLen{overarrowthickness} and \refLen{overarrowsmallerthickness}.\\
-% |#1|: arrow length\\
-% |#2|: math style
+% |#1|: math style
+%
+% Set to the default rule thickness of the current math style, normaly given by
+% \cs{fontdimen} 8 family 3. With \pkg{unicode-math}, use instead:
+% \begin{itemize}
+% \item \cs{fontdimen} 54 family 2 with XeTeX,
+% \item \cs{Umathoverbarrule} with LuaTex.
+% \end{itemize}
+% \changes{v1.2}{2024/07/11}{Get the correct rule thickness with unicode-math}
% \begin{macrocode}
-\def\ovar@set@arrowthickness#1{% use rule thickness=\fontdimen 8 font family 3
+\def\ovar@rulethickness@fontdimen{8}
+\def\ovar@rulethickness@family{3}
+\def\ovar@set@arrowthickness#1{%
\ifx#1\displaystyle%
- \overarrowthickness = \fontdimen 8 \textfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
+ \overarrowthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \textfont \ovar@rulethickness@family%
+ \overarrowsmallerthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \scriptfont \ovar@rulethickness@family%
\else\ifx#1\textstyle%
- \overarrowthickness = \fontdimen 8 \textfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
+ \overarrowthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \textfont \ovar@rulethickness@family%
+ \overarrowsmallerthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \scriptfont \ovar@rulethickness@family%
\else\ifx#1\scriptstyle%
- \overarrowthickness = \fontdimen 8 \scriptfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptscriptfont 3%
+ \overarrowthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \scriptfont \ovar@rulethickness@family%
+ \overarrowsmallerthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \scriptscriptfont \ovar@rulethickness@family%
\else%
- \overarrowthickness = \fontdimen 8 \scriptscriptfont 3%
+ \overarrowthickness =
+ \fontdimen \ovar@rulethickness@fontdimen \scriptscriptfont \ovar@rulethickness@family%
\overarrowsmallerthickness = \overarrowthickness%
\fi\fi\fi%
}
% \end{macrocode}
+% \pkg{unicode-math} with LuaTeX version.
+% \begin{macrocode}
+\def\ovar@set@arrowthickness@UM@lua#1{%
+ \overarrowthickness = \Umathoverbarrule #1
+ \ifx#1\displaystyle%
+ \overarrowsmallerthickness = \Umathoverbarrule \textstyle%
+ \else\ifx#1\textstyle%
+ \overarrowsmallerthickness = \Umathoverbarrule \scriptstyle%
+ \else%
+ \overarrowsmallerthickness = \Umathoverbarrule \scriptscriptstyle%
+ \fi\fi%
+}
+% \end{macrocode}
+% Test which version to use.
+% \begin{macrocode}
+\AddToHook{begindocument}[overarrows]
+ {%
+ \@ifpackageloaded{unicode-math-luatex}
+ {%
+ \global\let\ovar@set@arrowthickness\ovar@set@arrowthickness@UM@lua
+ }
+ {%
+ \@ifpackageloaded{unicode-math-xetex}
+ {%
+ \gdef\ovar@rulethickness@fontdimen{54}
+ \gdef\ovar@rulethickness@family{2}
+ }
+ {}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
% \end{macro}
%
% \subsubsection*{Stack macros}
@@ -3017,18 +3415,39 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \subsubsection*{Macro for commands creation}
%
+% \changes{v1.2}{2024/07/11}{Allow backslash in command name}
+% In the initial version, the commands names must be given as csname (without
+% backslash). To harmonize the syntax with standard \cs{NewDocumentCommand},
+% define an argument processor so that both
+% \cs{NewOverArrowCommand}|{\myarrow}| and
+% \cs{NewOverArrowCommand}|{myarrow}| are accepted.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_new_protected:Npn \__overarrows_processor_strip_escape_char:n #1
+ {
+ \regex_match:nnTF { ^\cC. } { #1 }
+ { \tl_set:Nx \ProcessedArgument { \cs_to_str:N #1 } }
+ { \tl_set:Nx \ProcessedArgument { #1 } }
+ }
+\cs_new_eq:NN \ovar@cmdname@processor \__overarrows_processor_strip_escape_char:n
+\ExplSyntaxOff
+% \end{macrocode}
+%
% \begin{macro}{\DeclareOverArrowCommand}
% \begin{macrocode}
-\NewDocumentCommand{\DeclareOverArrowCommand}{ O{symb} m m }{%
+\NewDocumentCommand{\DeclareOverArrowCommand}{
+ O{symb} >{\ovar@cmdname@processor} m m
+}{%
\begingroup
\ovar@set@common
\ifcsdef{ovar@set@#1}{%
\csuse{ovar@set@#1}
}{%
\PackageError{overarrows}{Unknown method #1}
- {Try with 'symb', 'tikz' or 'picture'}
+ {Try with 'symb', 'tikz', 'pstriks' or 'picture'}
}
- \ovar@set{#3 }
+ \ovar@set{#3}
\ifdef{\ovar@macro@arrow}{}{%
\ovar@set{no arrow macro hook}
}
@@ -3050,7 +3469,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\ifovar@detectsubscripts@%
\csgdef{ovar@#2@auto}##1{%
% \end{macrocode}
-% \vspace{-2\smallskipamount}%^^A remove space between code blocs
+% \vspace{-2\smallskipamount}%^^A remove space between code blocks
% \changes{v1.1}{2023/02/15}{Support for non-standard subscripts}
% \begin{macrocode}
\@ifnextchar \ovar@subcmd {%
@@ -3080,7 +3499,9 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \begin{macro}{\ProvideOverArrowCommand}
% \begin{macrocode}
-\NewDocumentCommand{\ProvideOverArrowCommand}{ O{symb} m m }{%
+\NewDocumentCommand{\ProvideOverArrowCommand}{
+ O{symb} >{\ovar@cmdname@processor} m m
+}{%
\ifcsdef{#2}{}{
\DeclareOverArrowCommand[#1]{#2}{#3}
}
@@ -3090,7 +3511,9 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \begin{macro}{\NewOverArrowCommand}
% \begin{macrocode}
-\NewDocumentCommand{\NewOverArrowCommand}{ O{symb} m m }{%
+\NewDocumentCommand{\NewOverArrowCommand}{
+ O{symb} >{\ovar@cmdname@processor} m m
+}{%
\ifcsdef{#2}{%
\PackageError{overarrows}{Command \csname #2\endcsname already defined}%
{You have used \protect\NewOverArrowCommand\space with a command that
@@ -3105,7 +3528,9 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \begin{macro}{\RenewOverArrowCommand}
% \begin{macrocode}
-\NewDocumentCommand{\RenewOverArrowCommand}{ O{symb} m m }{%
+\NewDocumentCommand{\RenewOverArrowCommand}{
+ O{symb} >{\ovar@cmdname@processor} m m
+}{%
\ifcsundef{#2}{%
\PackageError{overarrows}{Command \csname #2\endcsname undefined}%
{You have used \protect\RenewOverArrowCommand\space with a command that was
@@ -3120,17 +3545,21 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \subsubsection*{Starred variant}
%
+% \changes{v1.2}{2024/07/11}{Use boxes in starred variant for better performances}
% \begin{macro}{\ovar@starversion}
% |#1|: definition (stack macro + arrow macro)\\
% |#2|: math style\\
% |#3|: content
% \begin{macrocode}
+\newsavebox\ovar@tempbox
\def\ovar@starversion#1#2#3{%
- #1#2{#3}%
- \settowidth{\ovar@extralength}{$\m@th#1#2{#3}$}
- \settowidth{\ovar@tempdim}{$\m@th#2{#3}$}
- \deflength{\ovar@extralength}{0.5\ovar@extralength-0.5\ovar@tempdim}%
- \kern-\ovar@extralength%
+ \sbox{\ovar@tempbox}{$\m@th #1#2{#3}$}%
+ \usebox{\ovar@tempbox}%
+% \end{macrocode}
+% Remove the extra space added by the arrow.
+% \begin{macrocode}
+ \settowidth{\ovar@tempdim}{$\m@th #2{#3}$}%
+ \kern\dimeval{0.5\ovar@tempdim - 0.5\wd\ovar@tempbox}%
}
% \end{macrocode}
% \end{macro}
@@ -3144,7 +3573,11 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\ifovar@option@esvect@
\let\esvectvv\vv
\undef\vv
- \NewOverArrowCommand{vv}{esvect, middle config=auto}
+% \end{macrocode}
+% \changes{v1.2}{2024/07/11}{Use \refKey{middle config}|=relbareda| instead of
+% \refKey{middle config}|=auto|}
+% \begin{macrocode}
+ \NewOverArrowCommand{\vv}{esvect, middle config = relbareda}
\fi
% \end{macrocode}
% \end{macro}
@@ -3152,216 +3585,231 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \subsubsection*{Predefined commands}
%
+% \changes{v1.2}{2024/07/11}{Declare predefined commands after \pkg{unicode-math} settings}
+% Declare predefined commands after \pkg{unicode-math} settings.
+%
+% \begin{macrocode}
+\AddToHook{begindocument}[overarrows]
+ {
+% \end{macrocode}
+%
% \begin{macro}{\overrightarrow}
% \begin{macrocode}
-\ifovar@option@overrightarrow@
- \DeclareOverArrowCommand{overrightarrow}{%
- amsmath, middle config=relbar,
- end=\ovar@rightarrow,
- right arrow,
- }
-\fi
+ \ifovar@option@overrightarrow@
+ \DeclareOverArrowCommand{\overrightarrow}{%
+ amsmath, middle config=relbar,
+ end=\ovar@rightarrow,
+ right arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underrightarrow}
% \begin{macrocode}
-\ifovar@option@underrightarrow@
- \DeclareOverArrowCommand{underrightarrow}{%
- amsmath, middle config=relbar,
- end=\ovar@rightarrow,
- right arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underrightarrow@
+ \DeclareOverArrowCommand{\underrightarrow}{%
+ amsmath, middle config=relbar,
+ end=\ovar@rightarrow,
+ right arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overleftarrow}
% \begin{macrocode}
-\ifovar@option@overleftarrow@
- \DeclareOverArrowCommand{overleftarrow}{%
- amsmath, middle config=relbar,
- start=\ovar@leftarrow,
- end=\relbar,
- left arrow,
- }
-\fi
+ \ifovar@option@overleftarrow@
+ \DeclareOverArrowCommand{\overleftarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar@leftarrow,
+ end=\relbar,
+ left arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underleftarrow}
% \begin{macrocode}
-\ifovar@option@underleftarrow@
- \DeclareOverArrowCommand{underleftarrow}{%
- amsmath, middle config=relbar,
- start=\ovar@leftarrow,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underleftarrow@
+ \DeclareOverArrowCommand{\underleftarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar@leftarrow,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overleftrightarrow}
% \begin{macrocode}
-\ifovar@option@overleftrightarrow@
- \DeclareOverArrowCommand{overleftrightarrow}{%
- amsmath, middle config=relbar,
- start=\ovar@leftarrow,
- end=\ovar@rightarrow,
- center arrow,
- }
-\fi
+ \ifovar@option@overleftrightarrow@
+ \DeclareOverArrowCommand{\overleftrightarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar@leftarrow,
+ end=\ovar@rightarrow,
+ center arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underleftrightarrow}
% \begin{macrocode}
-\ifovar@option@underleftrightarrow@
- \DeclareOverArrowCommand{underleftrightarrow}{%
- amsmath, middle config=relbar,
- start=\ovar@leftarrow,
- end=\ovar@rightarrow,
- center arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underleftrightarrow@
+ \DeclareOverArrowCommand{\underleftrightarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar@leftarrow,
+ end=\ovar@rightarrow,
+ center arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overrightharpoonup}
% \begin{macrocode}
-\ifovar@option@overrightharpoonup@
- \DeclareOverArrowCommand{overrightharpoonup}{%
- amsmath, middle config=relbar,
- end=\rightharpoonup,
- right arrow,
- }
-\fi
+ \ifovar@option@overrightharpoonup@
+ \DeclareOverArrowCommand{\overrightharpoonup}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoonup,
+ right arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underrightharpoonup}
% \begin{macrocode}
-\ifovar@option@underrightharpoonup@
- \DeclareOverArrowCommand{underrightharpoonup}{%
- amsmath, middle config=relbar,
- end=\rightharpoonup,
- right arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underrightharpoonup@
+ \DeclareOverArrowCommand{\underrightharpoonup}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoonup,
+ right arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overrightharpoondown}
% \begin{macrocode}
-\ifovar@option@overrightharpoondown@
- \DeclareOverArrowCommand{overrightharpoondown}{%
- amsmath, middle config=relbar,
- end=\rightharpoondown,
- right arrow,
- }
-\fi
+ \ifovar@option@overrightharpoondown@
+ \DeclareOverArrowCommand{\overrightharpoondown}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoondown,
+ right arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underrightharpoondown}
% \begin{macrocode}
-\ifovar@option@underrightharpoondown@
- \DeclareOverArrowCommand{underrightharpoondown}{%
- amsmath, middle config=relbar,
- end=\rightharpoondown,
- right arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underrightharpoondown@
+ \DeclareOverArrowCommand{\underrightharpoondown}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoondown,
+ right arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overleftharpoonup}
% \begin{macrocode}
-\ifovar@option@overleftharpoonup@
- \DeclareOverArrowCommand{overleftharpoonup}{%
- amsmath, middle config=relbar,
- start=\leftharpoonup,
- end=\relbar,
- left arrow,
- }
-\fi
+ \ifovar@option@overleftharpoonup@
+ \DeclareOverArrowCommand{\overleftharpoonup}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoonup,
+ end=\relbar,
+ left arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underleftharpoonup}
% \begin{macrocode}
-\ifovar@option@underleftharpoonup@
- \DeclareOverArrowCommand{underleftharpoonup}{%
- amsmath, middle config=relbar,
- start=\leftharpoonup,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underleftharpoonup@
+ \DeclareOverArrowCommand{\underleftharpoonup}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoonup,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overleftharpoondown}
% \begin{macrocode}
-\ifovar@option@overleftharpoondown@
- \DeclareOverArrowCommand{overleftharpoondown}{%
- amsmath, middle config=relbar,
- start=\leftharpoondown,
- end=\relbar,
- left arrow,
- }
-\fi
+ \ifovar@option@overleftharpoondown@
+ \DeclareOverArrowCommand{\overleftharpoondown}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoondown,
+ end=\relbar,
+ left arrow,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underleftharpoondown}
% \begin{macrocode}
-\ifovar@option@underleftharpoondown@
- \DeclareOverArrowCommand{underleftharpoondown}{%
- amsmath, middle config=relbar,
- start=\leftharpoondown,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
+ \ifovar@option@underleftharpoondown@
+ \DeclareOverArrowCommand{\underleftharpoondown}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoondown,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\overbar}
% \begin{macrocode}
-\ifovar@option@overbar@
- \DeclareOverArrowCommand{overbar}{%
- amsmath, middle config=relbar,
- start={\std@minus}, end={\std@minus},% \relbar is defined with \mathsm@sh
- shift leftright=0,
- space after arrow=-0.3ex,
- }
-\fi
+ \ifovar@option@overbar@
+ \DeclareOverArrowCommand{\overbar}{%
+ amsmath, middle config=relbar,
+ start={\std@minus}, end={\std@minus},% \relbar is defined with \mathsm@sh
+ shift leftright=0,
+ space after arrow=-0.3ex,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
+% With \pkg{unicode-math}, add |\vphantom{+}| to get the correct position.
% \begin{macro}{\underbar}
% \begin{macrocode}
-\ifovar@option@underbar@
- \DeclareOverArrowCommand{underbar}{%
- amsmath, middle config=relbar,
- start={\std@minus}, end={\std@minus},% \relbar is defined with \mathsm@sh
- shift leftright=0,
- arrow under,
- space before arrow=-0.3ex,
- }
-\fi
+ \ifovar@option@underbar@
+ \DeclareOverArrowCommand{\underbar}{%
+ amsmath, middle config=relbar,
+ start={\vphantom{+}\std@minus}, end={\std@minus},% \relbar is defined with \mathsm@sh
+ shift leftright=0,
+ arrow under,
+ space before arrow=-0.3ex,
+ }
+ \fi
% \end{macrocode}
% \end{macro}
%
+% End of |\AddToHook{begindocument}| hook.
+% \begin{macrocode}
+ }
+% \end{macrocode}
+%
+%
% \subsubsection*{Test macros}
%
% \begin{macro}{\ovar@testmathstyles}
@@ -3422,7 +3870,9 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
%
% \begin{macro}{\TestOverArrow}
% \begin{macrocode}
-\NewDocumentCommand{\TestOverArrow}{ s o m }{
+\NewDocumentCommand{\TestOverArrow}{
+ s o >{\ovar@cmdname@processor} m
+}{%
\ifcsdef{#3}{}{%
\PackageWarning{overarrows}{Unknown name '#3' passed to
\protect\TestOverArrow}
@@ -3494,6 +3944,7 @@ $ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
\lstdefinestyle{lstovardoc}{%
language = [LaTeX]TeX,
columns = flexible,
+ keepspaces = true,
keywordstyle = {\bfseries\color{ovar_darkblue}},
texcsstyle = *{\bfseries\color{ovar_darkblue}},
commentstyle = {\color{gray}},
@@ -3618,7 +4069,7 @@ actual '='
name=macrocode,
firstnumber=auto,
style = lstovarcode,
- showlines=false,
+ showlines = false,
% \end{macrocode}
% Commands and lengths identification and indexing
%
@@ -3648,8 +4099,9 @@ actual '='
% \begin{macrocode}
texcs = [4]{% internal macros
ovar@rightarrow, ovar@leftarrow, ifovar@option@oldarrows@,
- ifovar@option@esvect@, ifovar@option@tikz@, ifovar@option@pstarrows@,
- ifovar@detectsubscripts@, ifovar@option@debug@,
+ ifovar@option@esvect@, ifovar@option@tikz@, ifovar@option@pstricks@,
+ ifovar@option@pstarrows@, ifovar@detectsubscripts@,
+ ifovar@option@subother@, ifovar@option@subactive@, ifovar@option@debug@,
ifovar@option@overrightarrow@, ifovar@option@underrightarrow@,
ifovar@option@overleftarrow@, ifovar@option@underleftarrow@,
ifovar@option@overleftrightarrow@, ifovar@option@underleftrightarrow@,
@@ -3657,20 +4109,23 @@ actual '='
ifovar@option@overrightharpoondown@, ifovar@option@underrightharpoondown@,
ifovar@option@overleftharpoonup@, ifovar@option@underleftharpoonup@,
ifovar@option@overleftharpoondown@, ifovar@option@underleftharpoondown@,
- ifovar@option@overbar@, ifovar@option@underbar@, ovar@set, ovar@length@min,
+ ifovar@option@overbar@, ifovar@option@underbar@, ovar@auto@middle,
+ ovar@auto@trim@middle, ovar@subcmd, ovar@set, ovar@length@min,
ovar@before@arrow, ovar@after@arrow, ovar@macro@stack, ovar@macro@arrow,
- ovar@set@, ovar@shift@left, ovar@shift@right, ovar@stack@fill,
- ovar@stackunder@fill, ovar@stack@lens, ovar@stackunder@lens,
- ovar@macro@arrowfill, ovar@arrow@fill, ovar@arrow@start, ovar@trim@start,
- ovar@trim@middle, ovar@arrow@middle, ovar@trim@end, ovar@arrow@end,
- ovar@tikz@command, ovar@tikz@pathoptions, ovar@tikz@path,
- ovar@tikz@options, ovar@picture@geometry, ovar@picture@linethickness,
- ovar@picture@command, ovar@extralength, ovar@tempdim, ovar@set@arrowlength,
- ovar@set@arrowthickness, ovar@stackover@@, ovar@stackunder@@,
- ovar@stackover@, ovar@stackunder@, ovar@stackover@fill,
- ovar@stackover@lens, ovar@set@common, ovar@starversion,
- ovar@testmathstyles, ovar@row@teststyle,%
- ifovar@option@subother@,ifovar@option@subactive@,ovar@subcmd,ovar@testkerning,%
+ ovar@shift@left, ovar@shift@right, ovar@stack@fill, ovar@stackunder@fill,
+ ovar@stack@lens, ovar@stackunder@lens, ovar@macro@arrowfill,
+ ovar@arrow@fill, ovar@arrow@start, ovar@trim@start, ovar@trim@middle,
+ ovar@arrow@middle, ovar@trim@end, ovar@arrow@end, ovar@tikz@command,
+ ovar@tikz@pathoptions, ovar@tikz@path, ovar@tikz@options,
+ ovar@pstricks@geometry, ovar@pstricks@linethickness, ovar@pstricks@psset,
+ ovar@pstricks@command, ovar@picture@geometry, ovar@picture@linethickness,
+ ovar@picture@command, ovar@tempdim, ovar@set@arrowlength,
+ ovar@set@arrowthickness, ovar@set@arrowthickness@UM@lua,
+ ovar@rulethickness@fontdimen, ovar@rulethickness@family, ovar@stackover@@,
+ ovar@stackunder@@, ovar@stackover@, ovar@stackunder@, ovar@stackover@fill,
+ ovar@stackover@lens, ovar@cmdname@processor, ovar@set@common,
+ ovar@starversion, ovar@tempbox, ovar@testmathstyles, ovar@row@teststyle,
+ ovar@testkerning%
},
index = [4][texcs4],%
indexstyle = [4]\indexmacrointernal,%
@@ -3678,20 +4133,25 @@ actual '='
% Other macros identification
% \begin{macrocode}
moretexcs = [5]{% other macros
- Relbar, relbareda, relbaredd, rightarrow, Rightarrow, varleftarrow,
- varrightarrow, twoheadrightarrow,%
+ relbar, Relbar, relbareda, relbaredd, harrowextender, rightarrow,
+ Rightarrow, varleftarrow, varrightarrow, twoheadrightarrow,%
},
% \end{macrocode}
-% Il would be nice to also index keys, but spaces are badly handled by listings.
+% Il would be nice to also index keys, but spaces are badly handled by
+% \pkg{listings}.
% \begin{macrocode}
%^^A morekeywords = [2]{%
-%^^A no stack macro hook, stack macro, arrow macro, no arrow macro hook, min
-%^^A length, before arrow, after arrow, space before arrow, space after arrow,
-%^^A shift left, shift right, shift leftright, center arrow, left arrow, right
-%^^A arrow, arrow under, fill macro, start, middle, end, trim start, trim
-%^^A middle, trim end, trim, no trimming, middle config, amsmath, esvect, tikz
-%^^A command, tikz options, path options, path, add path options, add tikz
-%^^A options, arrows, line thickness, thinner, picture command, geometry, detect subscripts,
+%^^A overarrows, no stack macro hook, stack macro, detect subscripts, arrow
+%^^A macro, no arrow macro hook, min length, before arrow, after arrow, space
+%^^A before arrow, space after arrow, shift left, shift right, shift leftright,
+%^^A center arrow, left arrow, right arrow, arrow under, arrow under/noconfig,
+%^^A arrow under/autoconfig, fill macro, start, middle, end, trim start, trim
+%^^A middle, trim end, trim, no trimming, middle config, middle config/relbar,
+%^^A middle config/relbareda, middle config/harrowextender, middle config/auto,
+%^^A amsmath, amsmath/mimic, amsmath/strict, esvect, esvect/mimic,
+%^^A esvect/strict, tikz command, tikz options, path options, path, add path
+%^^A options, add tikz options, arrows, line thickness, thinner, pstricks
+%^^A command, psset, geometry, arrow, picture command,%
%^^A },
%^^A index = [3][keywords2],%
%^^A indexstyle = [3]\lstindexmacro,%
diff --git a/macros/latex/contrib/overarrows/overarrows.pdf b/macros/latex/contrib/overarrows/overarrows.pdf
index 7203b11bb3..701f3ec02f 100644
--- a/macros/latex/contrib/overarrows/overarrows.pdf
+++ b/macros/latex/contrib/overarrows/overarrows.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/README.md b/macros/latex/contrib/pagelayout/README.md
index 4d62838bf4..8d08f566f7 100644
--- a/macros/latex/contrib/pagelayout/README.md
+++ b/macros/latex/contrib/pagelayout/README.md
@@ -1,4 +1,4 @@
-![The pagelayout LaTeX class](doc/banner.svg)
+![The pagelayout LaTeX class](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/banner.svg)
The pagelayout class enables you to design pages declaratively using simple macros for pages, covers, grids, templates, text, and graphics to create graphic rich, perfectly typeset, and print ready PDFs.
@@ -26,7 +26,7 @@ Create a page with the `\page` command. A grid with rows and cells helps you to
}
```
-![A page with a two column layout](doc/quickstart-1.svg)
+![A page with a two column layout](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-1.svg)
### Templates
@@ -44,7 +44,7 @@ You can set width relations between grid cells and height relations between grid
\template{my template}{}
```
-![A template with two placeholders](doc/quickstart-2.svg)
+![A template with two placeholders](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-2.svg)
You can set margin and gutter at grid, page, or document level.
@@ -72,17 +72,17 @@ You can scale and position a graphic. And you can add borders and box shadows to
}
```
-![Photo with border and shadow](doc/quickstart-3.svg)
+![Photo with border and shadow](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-3.svg)
-Have a look at the [examples](doc) to learn how to create double pages, covers, and more.
+Have a look at the [examples](https://github.com/friedemannbartels/latex-pagelayout/tree/1.1.1/doc) to learn how to create double pages, covers, and more.
-For a complete reference, read the [manual](doc/pagelayout-manual.pdf).
+For a complete reference, read the [manual](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/pagelayout-manual.pdf).
## Installation
In general, you should use the package manager shipped with your TeX distribution to install the pagelayout package.
-To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/1.1.0/pagelayout-1.1.0.tds.zip) to your local TeX directory tree and run the command `texhash`.
+To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/1.1.1/pagelayout.tds.zip) to your local TeX directory tree and run the command `texhash`.
To enable image optimization, shadow creation, and preflight, perform these installation steps:
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf
index 6913eb17ce..a8ec76cc08 100644
--- a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex
index 460f1170d0..df37ebaa6f 100644
--- a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex
@@ -18,7 +18,7 @@
\usepackage{tikz}
\OnlyDescription
\hypersetup{pdfborder={0 0 0}}
-\def\pagelayoutversion{1.1.0}
+\def\pagelayoutversion{1.1.1}
\begin{document}
diff --git a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi
index be034baaa7..1232ae3ab7 100755
--- a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi
+++ b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi
@@ -13,7 +13,7 @@
# LaTeX version 2008/05/04 or later.
#
-version=1.1.0
+version=1.1.1
_convert() {
turbo=$1
diff --git a/macros/latex/contrib/pagelayout/scripts/textestvis b/macros/latex/contrib/pagelayout/scripts/textestvis
index 8ddcde77e1..8120a7ba1f 100755
--- a/macros/latex/contrib/pagelayout/scripts/textestvis
+++ b/macros/latex/contrib/pagelayout/scripts/textestvis
@@ -13,7 +13,7 @@
# LaTeX version 2008/05/04 or later.
#
-version=1.1.0
+version=1.1.1
OK="$( tput setaf 2 )•$( tput sgr0 )"
FAILED="$( tput setaf 1 )$( tput bold )x$( tput sgr0 )"
@@ -122,13 +122,13 @@ test() {
fi
fi
- magick convert -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png
+ magick -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png
if [ -f "$tmpdir/$name.png" ]; then
mv $tmpdir/$name.png $tmpdir/$name-0.png
fi
if [ -f "$name.approved.pdf" ]; then
- magick convert -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png
+ magick -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png
if [ -f "$tmpdir/$name.approved.png" ]; then
mv $tmpdir/$name.approved.png $tmpdir/$name.approved-0.png
fi
@@ -311,11 +311,11 @@ compare() {
spacer=""
if [ -f "$filea" ]; then
if [ -f "$fileb" ]; then
- magick convert -density $1 -quiet $filea $tmpdir/$basenamea.png
+ magick -density $1 -quiet $filea $tmpdir/$basenamea.png
if [ -f "$tmpdir/$basenamea.png" ]; then
mv $tmpdir/$basenamea.png $tmpdir/$basenamea-0.png
fi
- magick convert -density $1 -quiet $fileb $tmpdir/$basenameb.png
+ magick -density $1 -quiet $fileb $tmpdir/$basenameb.png
if [ -f "$tmpdir/$basenameb.png" ]; then
mv $tmpdir/$basenameb.png $tmpdir/$basenameb-0.png
fi
diff --git a/macros/latex/contrib/pagelayout/tex/pagelayout.cls b/macros/latex/contrib/pagelayout/tex/pagelayout.cls
index 8e7d3616ae..655ed59bd2 100644
--- a/macros/latex/contrib/pagelayout/tex/pagelayout.cls
+++ b/macros/latex/contrib/pagelayout/tex/pagelayout.cls
@@ -13,8 +13,8 @@
%%
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesClass{pagelayout}[2024/01/17 Layout graphic rich documents]
-\def\pagelayoutversion{1.1.0}
+\ProvidesClass{pagelayout}[2024/07/31 Layout graphic rich documents]
+\def\pagelayoutversion{1.1.1}
% packages
\RequirePackage{pgfopts}
@@ -372,7 +372,11 @@
\pal@outermargin=\ifdim\pal@gridoutermargin=\pal@undefdim\pal@gridmargin\else\pal@gridoutermargin\fi
\height=\dimexpr\pal@pageheight - \pal@topmargin - \pal@bottommargin\relax
- \width=\dimexpr\pal@pagewidth - \pal@innermargin - \pal@outermargin\relax
+ \ifpal@isdoublepage
+ \width=\dimexpr2\pal@pagewidth - 2\pal@outermargin\relax
+ \else
+ \width=\dimexpr\pal@pagewidth - \pal@innermargin - \pal@outermargin\relax
+ \fi
\ifdim\dimexpr\pal@gridoptionheight\relax=\pal@undefdim
\else
\pal@gridheightdiff=\dimexpr0.5\height - 0.5\dimexpr\pal@gridoptionheight\relax\relax
diff --git a/macros/latex/contrib/passopt/README.md b/macros/latex/contrib/passopt/README.md
new file mode 100644
index 0000000000..f8eb8f4c43
--- /dev/null
+++ b/macros/latex/contrib/passopt/README.md
@@ -0,0 +1,18 @@
+# The `passopt` package
+Passing options to packages or classes (v1.01a)
+
+## Abstract
+`passopt` allow reset the global options of a loaded macro package or document class, or to change the position of the pre-passed options in the list to the right.
+
+## License
+This work may be distributed and/or modified under the conditions of the CC-BY 4.0 License. The latest version of this license is in https://creativecommons.org/licenses/by/4.0/legalcode
+
+## Website
+| [Gitee](https://gitee.com/texno3/passopt) | [Github](https://github.com/texno3/passopt) | [CTAN](https://ctan.org/pkg/passopt) |
+
+## Maintainer
+Qu Yi<br/>
+Email: toquyi@163.com
+
+## Contributor
+Jonathan P. Spratte \ No newline at end of file
diff --git a/macros/latex/contrib/passopt/passopt.pdf b/macros/latex/contrib/passopt/passopt.pdf
new file mode 100644
index 0000000000..ce6e437c65
--- /dev/null
+++ b/macros/latex/contrib/passopt/passopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/passopt/passopt.sty b/macros/latex/contrib/passopt/passopt.sty
new file mode 100644
index 0000000000..d74c698d27
--- /dev/null
+++ b/macros/latex/contrib/passopt/passopt.sty
@@ -0,0 +1,56 @@
+%
+% ***************** THE PASSOPT PACKAGE *****************
+%
+% Copyright (C) 2024 by Qu Yi <toquyi@163.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the CC-BY 4.0 License.
+% The latest version of this license is in
+% https://creativecommons.org/licenses/by/4.0/legalcode
+\NeedsTeXFormat{LaTeX2e}[2021/11/15]
+\ProvidesExplPackage{passopt}{2024/07/17}{1.01a}
+ {Passing options to packages or classes}
+
+\cs_generate_variant:Nn \tl_if_blank:nTF { v }
+\cs_new_protected:Npn \po_add_before_hook:nnn #1#2
+ { \hook_gput_code:nnn { #1/#2/before } { passopt } }
+\cs_new_protected:Npn \po_set_options_list:nnnnn #1#2#3#4#5
+ {
+ \po_add_before_hook:nnn {#1} {#5}
+ {
+ \cs_set:cpx { @raw@opt@#5.#2 }
+ {
+ \IfBooleanTF{#3}
+ {\exp_not:o {#4}}
+ {
+ \tl_if_blank:vTF { @raw@opt@#5.#2 }
+ { \exp_not:o {#4} }
+ { \exp_not:v { @raw@opt@#5.#2 },\exp_not:o {#4} }
+ }
+ }
+ \exp_args:Nc \protected@edef { opt@#5.#2 }
+ {
+ \exp_last_unbraced:Nv
+ \zap@space { @raw@opt@#5.#2 }~\@empty
+ }
+ }
+ }
+\cs_new_protected:Npn \po_clear_options_list:nnn #1#2#3
+ {
+ \po_add_before_hook:nnn {#1} {#3}
+ {
+ \tl_clear:c { @raw@opt@#3.#2 }
+ \tl_clear:c { opt@#3.#2 }
+ }
+ }
+\NewDocumentCommand{\SetOptionsToPackage}{smm}
+ {\po_set_options_list:nnnnn { package } { sty } {#1} {#2} {#3}}
+\NewDocumentCommand{\SetOptionsToClass}{smm}
+ {\po_set_options_list:nnnnn { class } { cls } {#1} {#2} {#3}}
+\cs_new_protected:Npn \ClearPackageOptions #1
+ { \po_clear_options_list:nnn { package } { sty } {#1} }
+\cs_new_protected:Npn \ClearClassOptions #1
+ { \po_clear_options_list:nnn { class } { cls } {#1} }
+\endinput
+%
+% End of file `passopt.sty'. \ No newline at end of file
diff --git a/macros/latex/contrib/passopt/passopt.tex b/macros/latex/contrib/passopt/passopt.tex
new file mode 100644
index 0000000000..fb4473e356
--- /dev/null
+++ b/macros/latex/contrib/passopt/passopt.tex
@@ -0,0 +1,103 @@
+\documentclass[load-preamble+]{cnltx-doc}
+
+\usepackage{setspace,hologo,changelog,enumitem}
+\usepackage[margin = 1in,marginparwidth = 0.6in,footskip = 0.5in]{geometry}
+\setcnltx
+ {
+ package = passopt,
+ version = v1.01a,
+ date = 2024/07/17,
+ authors = Qu Yi,
+ info = Passing options to packages or classes,
+ email = toquyi@163.com,
+ url = https://github.com/texno3/passopt,
+ abstract =
+ {
+ \pkg*{passopt} allow reset the global options of a loaded macro package or document class, or to change the position of the pre-passed options in the list to the right.
+ },
+ color-scheme = blue,
+ listings-options = {numbers = none,gobble = 2,lineskip = 1pt},
+ pre-output = {\parindent = 0em\setstretch{1.3}},
+ before-skip = \smallskipamount,
+ after-skip = \smallskipamount
+ }
+\makeatletter
+\newcommand{\splitmeta}[2]{\meta{#1}\texttt{,}\meta{#2}}
+\newcommand{\newsplitarg}[4][\splitmeta]
+ {
+ \newcommand{#2}[2]
+ {\code{\textcolor{argument}{#3\textnormal{#1{##1}{##2}}#4}}}
+ }
+\newcommand{\kvsplit}[3]
+ {
+ \item\code{\option{#1}\cnltx@isvalue\splitmarg{#2}{#3}}
+ \cnltx@checkdefault{\hfill\newline}
+ }
+\newsplitarg{\splitoarg}{[}{]}
+\newsplitarg{\splitmarg}{\{}{\}}
+\newsplitarg{\splitdarg}{(}{)}
+\newnote{\newtag}[1]{\textcolor{red}{#1}}
+\renewcommand{\emph}[1]{\textcolor{red}{#1}}
+\renewcommand{\cnltx@write@lastname}{}
+\setlist{nosep,topsep = \smallskipamount}
+\setlist[description,1]{leftmargin = \parindent}
+\setlist[itemize,1]{leftmargin = *}
+\makeatother
+
+\begin{document}
+\section{Preface}
+For a developer, there are some cases where packages and classes may load other packages or classes with options. However, other developers or users may wish to disable the enabled options or enable new ones. To enable new options, \hologo{LaTeXe} provides the \cs{PassOptionsToPackage} and \cs{PassOptionsToClass} commands to pass the options before the package or class is loaded, but the passed options are located on the \textcolor{red}{left} side of the final options list.
+\begin{sourcecode}
+ \PassOptionsToPackage{opt1,opt2=A}{mypackage}
+
+ \documentclass{book}
+ \usepackage[opt3]{mypackage}
+
+ \begin{document}
+\end{sourcecode}
+
+In the example above, the list of options that the \pkg*{mypackage} macro package ends up executing is \fbox{\code{opt1,opt2=A,opt3}}. If you wish to \textcolor{red}{disable} the pre-enabled options or place the newly enabled options to the \textcolor{red}{right} of the list (last executed), then you need to modify the code of the load command in the package or class file, but this is not recommended for public sharing. Therefore, this macro package provides commands to reset the options and change the order of the new options.
+
+\section{User commands}
+Four commands are provided to set the options to be passed later, all of which are \textcolor{red}{locally} assigned. Subsequent loading of the macro package is not must required due to the hook mechanism used to modify the list of options.
+\begin{commands}
+ \command{SetOptionsToPackage}[\sarg\marg{options list}\marg{package}]
+ Passes options to the macro package, the location of the passed options is to the right of the options used when loading the macro package. If an asterisk parameter is used, only the passed options were ultimately retained.
+ \command{SetOptionsToClass}[\sarg\marg{options list}\marg{class}]
+ Similar to the previous command, but passing options for the document class.
+ \begin{sourcecode}
+ \RequirePackage{passopt}
+ \SetOptionsToPackage{opt1,opt2=A}{mypackage}
+
+ \documentclass{book}
+ \usepackage[opt3]{mypackage}
+
+ \begin{document}
+ \end{sourcecode}
+
+ In the example above, the list of options that the \pkg*{mypackage} macro package ends up executing is \fbox{\code{opt3,opt1,opt2=A}}. If the asterisk parameter is used, the list is \fbox{\code{opt1,opt2=A}}.
+
+ Note that since macro packages or document classes can only be loaded effectively once (using the \cs{usepackage} and \cs{RequirePackage} commands), only options passed before the first loading of a macro package or document class are effective, and it is recommended for users to use commands that pass options before \cs{documentclass}.
+ \command{ClearPackageOptions}[\marg{package}]
+ Clears the options that will be loaded into the macro package. The following commands has the same effect as \cs*{SetOptionsToPackage}\code{*}.
+ \begin{sourcecode}
+ \ClearPackageOptions{mypackage}
+ \SetOptionsToPackage{opt1,opt2=A}{mypackage}
+ \end{sourcecode}
+ \command{ClearClassOptions}[\marg{class}]
+ Similar to the previous command, but passing options for the document class.
+\end{commands}
+
+\section{Acknowledgment}
+Thanks Jonathan P. Spratte for the improvement suggestions.
+
+\appendix
+\begin{changelog}[simple]
+ \begin{version}[v = 1.01,date = 2024/07/15]
+ \item Synchronized modification for lists of \code{@raw@opt@} and \code{opt@}.
+ \item Options that are set are expanded once rather than fully expanded.
+ \end{version}
+\end{changelog}
+\nocite{*}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/photobook/Makefile b/macros/latex/contrib/photobook/Makefile
index 59b7ea002c..19edca368e 100644
--- a/macros/latex/contrib/photobook/Makefile
+++ b/macros/latex/contrib/photobook/Makefile
@@ -85,8 +85,7 @@ endif
# markdown dialect...
#
-# XXX still needs some tweaking...
-MD_FORMAT ?= markdown_github
+MD_FORMAT ?= gfm
# debug output...
@@ -173,26 +172,11 @@ LN := cp -l
# - |..| - verbatim does not work...
# - || - parts of doc omitted...
# - verbatim blocks get merged sometimes...
+# - does not resolve \jobname in include...
# - ...
# ...not sure if this can be tweaked...
-#%.md: %.tex
-# pandoc -t $(MD_FORMAT) -s $< -o $@
-
-# XXX EXPERIMENTAL...
-# XXX revise:
-# ...for this to work we need to replace:
-# \documentclass{ltxdoc}
-# to:
-# \documentclass[markdownextra]{internet}
-# XXX install the internet class...
-# https://github.com/loopspace/latex-to-internet
-# ...needs testing...
%.md: %.tex
- cat $< \
- | sed 's/documentclass{ltxdoc}/documentclass[markdownextra]{internet}/' \
- > $<.tmp
- mv $<{.tmp,}
- $(TEX) $< $(STDERR)
+ pandoc -t $(MD_FORMAT) -s $< -o $@
# meta-section...
diff --git a/macros/latex/contrib/photobook/README.md b/macros/latex/contrib/photobook/README.md
index 13daa3c373..7055717be0 100644
--- a/macros/latex/contrib/photobook/README.md
+++ b/macros/latex/contrib/photobook/README.md
@@ -28,7 +28,7 @@ $ make install
The `photobook` document class requires a set of modules to be installed
for it to function, the full list is included in the docs and can be
-printed by calling:
+generated and printed by calling:
```shell
$ make depends
```
@@ -39,7 +39,8 @@ For more info on `make` targets see the: [./Makefile](./Makefile)
# Documentation
-Pre-built documentation can be found on
+Pre-built documentation can be found in the
+[Github releases](https://github.com/flynx/photobook/releases/latest) or on
[CTAN](http://mirrors.ctan.org/macros/latex/contrib/photobook/photobook.pdf).
@@ -69,7 +70,7 @@ Build requirements for docs:
## Notes
-- The main refetence is inline with the source [photobook.cls](./photobook.cls)
+- The main reference is maintained inline with the source [photobook.cls](./photobook.cls)
thus it is both human-readable next to the code it documents and is
used to build the `photobook.pdf`.
Extracting the documentation source (`photobook*.tex`) is done
diff --git a/macros/latex/contrib/photobook/photobook.cls b/macros/latex/contrib/photobook/photobook.cls
index a2a84809e8..ae2ecac6b6 100644
--- a/macros/latex/contrib/photobook/photobook.cls
+++ b/macros/latex/contrib/photobook/photobook.cls
@@ -38,6 +38,7 @@
%
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%
+%
% XXX ASAP: imagecell: photobook@imagecell@left and photobook@imagecell@top
% should explicitly account for clearence@left and clearence@top resp.
% XXX ASAP: imagecell: clearance should have the same semantics as cliptocell
@@ -88,12 +89,25 @@
% cell/cell* depend on absolute mode being set globally
%
%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Work around an issue with calc's \ratio{..}{..} breaking into an
+% "Arythmetic overflow" when working with large images.
+% (see Issues section for more info)
+%
+% NOTE: if the error persists just make this smaller but note that the
+% smaller this gets the greater the error can be for very small
+% images
+%
+\def\CalcOverflowFactor{0.1}%
+
+
%----------------------------------------------------------------------
%%% NOTE: \def\<module-name>@[A-Z]+ macros will be visible to both the
%%% code and the generated docs...
-\edef\photobook@FILEVERSION{v0.1.29}
-\edef\photobook@FILEDATE{2023-08-24}
+\edef\photobook@FILEVERSION{v0.1.31}
+\edef\photobook@FILEDATE{2024-07-19}
%% \documentclass{ltxdoc}
@@ -248,26 +262,27 @@
%% \begin{minipage}{\textwidth}
%% \begin{verbatim}
%%
+%% <-------------------------------------------------> paperwidth
%% <---> bleed <---> bleed
-%%
-%% + - - - - - - - - - - - - - - - - - - - - - - + - + ^
-%% . . . | bleed
-%% . +-----------------------------------------+----- v . . ---
-%% . | ^ . . = .
-%% . | . . . . . . | . . . = . ^
-%% . |<-- blockwidth ------------------------->= . |
-%% . | . | . . . = . |
-%% . | | . . = . textheight
-%% . | . Page | . . . = . |
-%% . | blockheight . . = . |
-%% . | . | . . <--> bindingoffset |
-%% . | | . . = . |
-%% . | . . . . . . | . <--> gutteroffset v
-%% . | v . . = .
-%% . +-----------------------------------------+----- ^ . . ---
-%% . . . . | bleed
-%% + - - - - - - - - - - - - - - - - - - - - - - + - + v
-%% . .
+%% paperheight v
+%% + - - - - - - - - - - - - - - - - - - - - - - + - + ^ . . . ---
+%% . . . | bleed .
+%% . +-----------------------------------------+----- v . . ---
+%% . | ^ . . = . .
+%% . | . . . . . . | . . . = . ^
+%% . |<-- blockwidth ------------------------->= . | .
+%% . | . | . . . = . |
+%% . | | . . = . textheight .
+%% . | . Page | . . . = . |
+%% . | blockheight . . = . | .
+%% . | . | . . <--> bindingoffset |
+%% . | | . . = . | .
+%% . | . . . . . . | . <--> gutteroffset v
+%% . | v . . = . .
+%% . +-----------------------------------------+----- ^ . . ---
+%% . . . . | bleed .
+%% + - - - - - - - - - - - - - - - - - - - - - - + - + v . . . ---
+%% . . ^
%% | <-- textwidth --------------> . |
%% ^ gutter
%%
@@ -278,6 +293,9 @@
%% account for |\gutteroffset|, namely macros that do not display content
%% with bleeds.
%%
+%% Also note that bleeds are included in \href{https://ctan.org/pkg/geometry}{geometry}'s
+%% |\paperwidth| and |\paperheight|.
+%%
% NOTE: if blockwidth/blockheight are set they will force recalculations
% and overriding of the paperwidth/paperheight if they were changed
% by the user code anywhere between \documentclass[..]{photobook}
@@ -917,7 +935,7 @@
%% \DescribeMacro{\imageblockoffsettop=<ratio>}
%
-%% The ration by which the image is raised in |\ImagePage{..}| and
+%% The ratio by which the image is raised in |\ImagePage{..}| and
%% derived templates.
%%
\edef\imageblockoffsettop{\photobook@imageblockoffsettop}
@@ -2515,8 +2533,9 @@
% NOTE: here we calculate image/cell eccentricity to decide
% to fit to width or heigh of cell...
% NOTE: did I say that I "love" how LaTeX does basic math??
+ % NOTE: \ratio{..}{..} here can break, see Issues for more info...
\setlength\photobook@imagecell@imgratio{%
- 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}%
+ 1pt * \ratio{\CalcOverflowFactor\wd\photobook@imagebox}{\CalcOverflowFactor\ht\photobook@imagebox}}%
\setlength\photobook@imagecell@cellratio{%
1pt * \ratio{\cellwidth}{\cellheight}}%
\ifdim \photobook@imagecell@imgratio < \photobook@imagecell@cellratio%
@@ -2524,7 +2543,7 @@
\includegraphics[%
keepaspectratio,
width=\photobook@imagecell@scale\dimexpr
- + \cellwidth
+ \cellwidth
- \photobook@imagecell@clearance@left
- \photobook@imagecell@clearance@right \relax]{#3}}%
\else%
@@ -2532,7 +2551,7 @@
\includegraphics[%
keepaspectratio,
height=\photobook@imagecell@scale\dimexpr
- + \cellheight
+ \cellheight
- \photobook@imagecell@clearance@top
- \photobook@imagecell@clearance@bottom \relax]{#3}}%
\fi\fi\fi%
@@ -4848,8 +4867,9 @@
% align center -> check if image fits vertically...
\ifphotobook@ImagePageFit@centered\else%
\sbox{\photobook@imagebox}{\includegraphics{#3}}%
+ % NOTE: \ratio{..}{..} here can break, see Issues for more info...
\setlength\photobook@ImagePageFit@imgratio{%
- 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}%
+ 1pt * \ratio{\CalcOverflowFactor\wd\photobook@imagebox}{\CalcOverflowFactor\ht\photobook@imagebox}}%
% NOTE: subtracting \bindingoffset from \cellwidth here makes sure that
% we avoid offsetting images close enough in ratio to the page and
% messing up bleeds...
@@ -5692,6 +5712,26 @@
%----------------------------------------------------------------------
+%%%% Issues
+%
+%% \subsection*{Large images can cause "Arythmetic overflow"}
+%
+%% \DescribeMacro{\CalcOverflowFactor=0.1}
+%
+%% If the issue occurs set |\CalcOverflowFactor| to a smaller value.
+%% But note, a value too small can lead to errors in the affected macros,
+%% a good value is between 0.1 and 0.01.
+%%
+%% Also note that it is recommended to pre-size images the print outside
+%% of \LaTeX.
+%%
+%% Affected macros: |\imagecell[fill]{..}{..}|, |\ImagePageFit|.
+%%
+% The issue occurs in the calc's |\ratio{..}{..}| macro when calculating
+% image proportions.
+%
+%
+%----------------------------------------------------------------------
% Index...
%
% XXX this prints trash at this point...
diff --git a/macros/latex/contrib/photobook/photobook.pdf b/macros/latex/contrib/photobook/photobook.pdf
index 5e785e73cf..119574f619 100644
--- a/macros/latex/contrib/photobook/photobook.pdf
+++ b/macros/latex/contrib/photobook/photobook.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
index 40cb330c40..b4802be53e 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
index 5e6698109f..c3e58a2813 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index c13d91729a..e37ce44eeb 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,7 +3,8 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2024/05/31 3.04c Aide pour l'utilisation de LaTeX en lycee]
+\ProvidesPackage{ProfLycee}[2024/07/13 3.04d Aide pour l'utilisation de LaTeX en lycee]
+% 3.04d PitonInputFile et styles
% 3.04c Max et min pour des fonctions
% 3.04b Travail sur la loi binomiale + Ajout de clés pour les environnements graphiques
% 3.04a Améliorations de la partie graphiques tikz (intégrales, axes) + Factorielle
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
index 418c5aa8cc..0cb6600617 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-piton.tex
@@ -2,6 +2,7 @@
% Copyright 2023-2024 Cédric Pierquet
% Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+%3.04d PitonInputFile et styles, pour compatibilité pfm
%3.03c Thonny via piton + modification clé gobble ?
%3.01f PseudoCode via piton (?)
%3.01e Correction du comportement de la console repl piton/pyluatex
@@ -220,6 +221,57 @@
\endtcolorbox%
}
+%inputfile
+\NewDocumentCommand\CodePitonFichier{ O{} m D<>{} }{%
+ {\tcbset{reset}
+ \useKVdefault[envpiton]%
+ \setKV[envpiton]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %------les styles piton
+ \SetPitonStyle{ Number = \color{\CODPITcolnb} }
+ \ifboolKV[envpiton]{Lignes}%si lignes=true
+ {\PitonOptions{left-margin=0.75em,line-numbers,line-numbers={skip-empty-lines=false,label-empty-lines=true,#3}}}%left-margin=auto,
+ {}%
+ \PitonOptions{break-lines,indent-broken-lines,continuation-symbol={\;}}%,numbers-sep=0.65em}%language=Python}
+ %------les styles tcbox
+ \IfEq{\CODPITstyle}{Moderne}%style Moderne (défaut)
+ {%
+ \tcbset{cadre/.style={}}
+ \tcbset{titre/.style={}}
+ \tcbset{stylebase/.style={stylepiton,colframe=CouleurVertForet,colback=CouleurVertForet!5,width=\CODPITlargeur,fontupper=\CODPITfonte,fontlower=\CODPITfonte,\CODPITalign,leftupper=0.75em}}
+ \ifboolKV[envpiton]{Filigrane}%si filigrane
+ {\tcbset{filigrane/.style={watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50}}}%
+ {\tcbset{filigrane/.style={}}}%
+ }
+ {}%
+ \IfEq{\CODPITstyle}{Classique}%style Classique
+ {%
+ \ifboolKV[envpiton]{Lignes}%si lignes=true
+ {\tcbset{stylebase/.style={thonnystylelineos,leftupper=0.75em,width=\CODPITlargeur,colframe=darkgray!50!black,fontupper=\CODPITfonte,fontlower=\CODPITfonte,\CODPITalign}}}%
+ {\tcbset{stylebase/.style={thonnystyle,leftupper=0.4em,width=\CODPITlargeur,colframe=darkgray!50!black,fontupper=\CODPITfonte,fontlower=\CODPITfonte,\CODPITalign}}}%
+ \ifboolKV[envpiton]{Filigrane}%si filigrane
+ {\tcbset{filigrane/.style={watermark text={\faPython},watermark opacity=0.25,watermark zoom=0.50}}}%
+ {\tcbset{filigrane/.style={}}}%
+ \ifboolKV[envpiton]{BarreTitre}%
+ {%
+ \ifboolKV[envpiton]{Cadre}
+ {\tcbset{cadre/.style={}}}%
+ {\tcbset{cadre/.style={boxrule=0pt,frame hidden}}}%
+ \tcbset{titre/.style={lefttitle=0.4em,title={\CODPITtitre},fonttitle=\bfseries\footnotesize\sffamily,colbacktitle=darkgray!50!black}}
+ }%
+ {%
+ \tcbset{titre/.style={notitle}}
+ \ifboolKV[envpiton]{Cadre}
+ {\tcbset{cadre/.style={}}}
+ {\tcbset{cadre/.style={boxrule=0pt,frame hidden}}}
+ }
+ }
+ {}%
+ %on crée la boîte
+ \tcolorbox[stylebase,filigrane,cadre,titre]
+ \PitonInputFile{#2}
+ \endtcolorbox}%
+}
+
%piton >= 2.4
\NewPitonEnvironment{PseudoCodePiton}{ O{} m D<>{} }%
{%
@@ -317,6 +369,86 @@
\endtcolorbox%
}
+%--inputfile
+\NewDocumentCommand\PseudoCodePitonFichier{ O{} m D<>{} }{%
+ {\tcbset{reset}
+ \useKVdefault[envpcpiton]%
+ \setKV[envpcpiton]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %------les styles piton
+ \ifboolKV[envpcpiton]{Lignes}%si lignes=true
+ {\PitonOptions{left-margin=0.75em,all-line-numbers}}%left-margin=auto,
+ {}%
+ \PitonOptions{break-lines,indent-broken-lines,language=minimal,continuation-symbol={\;}}%,numbers-sep=0.65em}%
+ \SetPitonStyle{ Number = }
+ \ifboolKV[envpcpiton]{Couleurs}%
+ {%
+ \SetPitonIdentifier[minimal]{Algorithme,Fonction,Début,Paramètre,Paramètres,Faire,Fin,Si,Pour,Tant,Que,que,alors,Alors,Sinon,SinonSi,FinSi,FinPour,FinTantQue,TantQue,Variable,Variables,Procédure}{\color{MotsClesPseudoCodeA}}
+ \SetPitonIdentifier[minimal]{Afficher,Renvoyer,Saisir}{\color{MotsClesPseudoCodeB}}
+ % \PitonOptions{
+ % identifiers =
+ % {
+ % names = {Algorithme,Fonction,Début,Paramètre,Paramètres,allant,Faire,Fin,Si,Pour,Tant,Que,que,alors,Alors,Sinon,SinonSi,FinSi,FinPour,FinTantQue,TantQue,Variable,Variables,Procédure},
+ % style = \color{MotsClesPseudoCodeA}
+ % } ,
+ % identifiers =
+ % {
+ % names = {Afficher,Retourner,Saisir},
+ % style = \color{MotsClesPseudoCodeB}
+ % }
+ % }%
+ \SetPitonStyle
+ {
+ String = \color{MotsClesPseudoCodeChaine},
+ Comment = \itshape\color{gray},
+ }
+ }%
+ {%
+ \SetPitonStyle
+ {
+ String = ,
+ Comment = \itshape
+ }
+ }%
+ %------les styles tcbox
+ \IfEq{\CODPITPCstyle}{Moderne}%style Moderne (défaut)
+ {%
+ \tcbset{cadre/.style={}}
+ \tcbset{titre/.style={}}
+ \tcbset{stylebase/.style={stylepcpiton,colframe=CouleurVertForet,colback=CouleurVertForet!5,width=\CODPITPClargeur,fontupper=\CODPITPCfonte,fontlower=\CODPITPCfonte,\CODPITPCalign,leftupper=0.75em}}
+ \ifboolKV[envpcpiton]{Filigrane}%si filigrane
+ {\tcbset{filigrane/.style={watermark text={\faCode},watermark opacity=0.175,watermark zoom=0.50}}}%
+ {\tcbset{filigrane/.style={}}}%
+ }
+ {}%
+ \IfEq{\CODPITPCstyle}{Classique}%style Classique
+ {%
+ \ifboolKV[envpcpiton]{Lignes}%si lignes=true
+ {\tcbset{stylebase/.style={thonnypcstylelineos,leftupper=0.75em,width=\CODPITPClargeur,colframe=darkgray!50!black,fontupper=\CODPITPCfonte,fontlower=\CODPITPCfonte,\CODPITPCalign}}}%
+ {\tcbset{stylebase/.style={thonnypcstyle,leftupper=0.4em,width=\CODPITPClargeur,colframe=darkgray!50!black,fontupper=\CODPITPCfonte,fontlower=\CODPITPCfonte,\CODPITPCalign}}}%
+ \ifboolKV[envpcpiton]{Filigrane}%si filigrane
+ {\tcbset{filigrane/.style={watermark text={\faCode},watermark opacity=0.25,watermark zoom=0.50}}}%
+ {\tcbset{filigrane/.style={}}}%
+ \ifboolKV[envpcpiton]{BarreTitre}%
+ {%
+ \ifboolKV[envpcpiton]{Cadre}
+ {\tcbset{cadre/.style={}}}%
+ {\tcbset{cadre/.style={boxrule=0pt,frame hidden}}}%
+ \tcbset{titre/.style={lefttitle=0.4em,title={\CODPITPCtitre},fonttitle=\bfseries\footnotesize\sffamily,colbacktitle=darkgray!50!black}}
+ }%
+ {%
+ \tcbset{titre/.style={notitle}}
+ \ifboolKV[envpcpiton]{Cadre}
+ {\tcbset{cadre/.style={}}}
+ {\tcbset{cadre/.style={boxrule=0pt,frame hidden}}}
+ }
+ }
+ {}%
+ %on crée la boîte
+ \tcolorbox[stylebase,filigrane,cadre,titre]
+ \PitonInputFile{#2}%
+ \endtcolorbox}%
+}
+
%======CONSOLE PYLUATEX (package à charger manuellement !!)
\tcbset{consolepylua/.style={%base de la boîte
enhanced,colback=white,colframe=CouleurVertForet,sharp corners,boxrule=1pt,%
@@ -428,6 +560,18 @@
\endtcolorbox%
}%
+\NewDocumentCommand\PitonThonnyEditorFichier{ D<>{} O{\linewidth} m }{%
+ {\restoreKV[pitonthonny]%
+ \setKV[pitonthonny]{#1}%
+ \settowidth{\LargeurNumbersThonny}{\footnotesize\texttt{00}}%
+ \PitonOptions{left-margin=\LargeurNumbersThonny+1mm,line-numbers,line-numbers={skip-empty-lines=false,label-empty-lines=true},break-lines,indent-broken-lines,continuation-symbol={}}%
+ \tcbset{tcbthonnypiton/.style={title=\vphantom{pf}\thonnypitonfilename\:\textcolor{gray}{×}},before skip=0.33\baselineskip,after skip=0.33\baselineskip}%
+ \tcolorbox[sharp corners=all,enhanced,size=small,width=#2,colframe=gray,colback=lightgray!5,tcbthonnypiton,fonttitle=\scriptsize\sffamily,coltitle=black,
+ attach boxed title to top left={yshift*=-0.4pt},fontupper=\footnotesize,bottom=-0.25mm,boxed title style={size=tight,colback=lightgray!15,sharp corners=all,boxrule=0.4pt,boxsep=2pt},boxrule=0.4pt,overlay={\begin{tcbclipinterior}\fill[draw=none,gray!25] ([shift={(0.4pt,0.4pt)}]frame.south west) rectangle ([shift={(\LargeurNumbersThonny+1mm+0.8pt,-0.4pt)}]frame.north west) ;\end{tcbclipinterior}}]%
+ \PitonInputFile{#3}
+ \endtcolorbox}%
+}%
+
\NewDocumentEnvironment{PitonThonnyConsole}{ D<>{} O{} m }%
{
\restoreKV[pitonthonny]%
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
index cd01f4393b..89fe894503 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
@@ -75,6 +75,69 @@
\expandafter\def\csname\RegLinCoeffrd\endcsname{\fpeval{\csname\RegLinCoeffr\endcsname*\csname\RegLinCoeffr\endcsname}}
}
+\defKV[coeffregquad]{%
+ NomCoeffa=\def\RegQuadCoeffa{#1},%
+ NomCoeffb=\def\RegQuadCoeffb{#1},%
+ NomCoeffc=\def\RegQuadCoeffc{#1},%
+ NomXmin=\def\RegQuadCoeffXmin{#1},%
+ NomXmax=\def\RegQuadCoeffXmax{#1}
+}
+
+\setKVdefault[coeffregquad]{%
+ NomCoeffa=COEFFa,%
+ NomCoeffb=COEFFb,%
+ NomCoeffc=COEFFc,%
+ NomXmin=LXmin,%
+ NomXmax=LXmax
+}
+
+\newcommand\CalculsRegQuad[3][]{%
+ \useKVdefault[coeffregquad]%
+ \setKV[coeffregquad]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %xmin et xmax
+ \expandafter\def\csname\RegQuadCoeffXmin\endcsname{\xintfloateval{min(#2)}}%
+ \expandafter\def\csname\RegQuadCoeffXmax\endcsname{\xintfloateval{max(#2)}}%
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}
+ %somme importantes
+ \xdef\LXSomme{0}%
+ \xdef\LXCSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LXXSomme{0}%
+ \xdef\LXYSomme{0}%
+ \xdef\LXXCSomme{0}%
+ \xdef\LXCXCSomme{0}%
+ \xdef\LXCYSomme{0}%
+ %calculs
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}%
+ \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[\i])^2}}%
+ }%
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}%
+ }%
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}%
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}%
+ \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}%
+ %calculs suites
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[\i]-\LXmoy)^2}}%
+ \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}%
+ \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[\i]-\LXmoy)*((\LX[\i])*(\LX[\i])-\LXCmoy)}}%
+ \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[\i])^2-\LXCmoy)^2}}%
+ \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[\i])^2-\LXCmoy)*(\LY[\i]-\LYmoy)}}%
+ }%
+ %COEFFS OK
+ \expandafter\def\csname\RegQuadCoeffb\endcsname{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}%
+ \expandafter\def\csname\RegQuadCoeffa\endcsname{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}%
+ \expandafter\def\csname\RegQuadCoeffc\endcsname{\xintfloateval{\LYmoy-\csname\RegQuadCoeffb\endcsname*\LXmoy-\csname\RegQuadCoeffa\endcsname*\LXCmoy}}%
+}
+
%pour un nuage en TiKz
\defKV[nuagereglin]{%
Couleur=\def\RegLinNuageCouleur{#1},%
diff --git a/macros/latex/contrib/prtec/PRTEC19-template.pdf b/macros/latex/contrib/prtec/PRTEC19-template.pdf
deleted file mode 100644
index c0f369154a..0000000000
--- a/macros/latex/contrib/prtec/PRTEC19-template.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/prtec/PRTEC24-template.pdf b/macros/latex/contrib/prtec/PRTEC24-template.pdf
new file mode 100644
index 0000000000..a65827b7c4
--- /dev/null
+++ b/macros/latex/contrib/prtec/PRTEC24-template.pdf
Binary files differ
diff --git a/macros/latex/contrib/prtec/PRTEC19-template.tex b/macros/latex/contrib/prtec/PRTEC24-template.tex
index e0769005af..59e978ef74 100644
--- a/macros/latex/contrib/prtec/PRTEC19-template.tex
+++ b/macros/latex/contrib/prtec/PRTEC24-template.tex
@@ -4,7 +4,7 @@
%%
%% PRTEC uses A4 paper.
%%
-%% This file is version 1.04 dated 2019/04/17
+%% This file is version 1.07 dated 2024/07/07
%%
%% Author: John H. Lienhard V
%% Department of Mechanical Engineering
@@ -22,18 +22,17 @@
%%
%% * option to omit PRTEC footer and header [nofoot]
%%
-%% * option not to use newtxtext's superiors font for footnotes [nodefaultsups] and option
-%% * for slightly larger small capitals [largesc]
+%% * option for slightly larger small capitals [largesc]
%%
%% For details of newtxmath and newtxtext, see the documentation available on CTAN (http://ctan.org)
%%
-%% The booktabs, array, and dcolumn packages are loaded by default; those macros may be used for setting tables.
+%% The booktabs, array, and dcolumn packages are loaded by default; those macros are for tables.
%%
%=========================================================
%%
%% LICENSE:
%%
-%% Copyright (c) 2019 John Lienhard
+%% Copyright (c) 2024 John Lienhard
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
%% associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -53,17 +52,16 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Class options are described above.
-
-\documentclass[upint,varvw]{prtec}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Editing tools; can delete these if not using.
-
-\usepackage{lipsum} % makes paragraphs of "latin" for layout testing
-\usepackage{comment} % see package documentation. Can comment out sections as needed.
+%% Don't modify the \DocumentMetadata command unless you know what it does.
+%% If this command throws an "undefined" error, your latex system is out of date: comment this command out.
+\DocumentMetadata{
+ pdfstandard = a-2b,% a-4,
+ pdfversion = 1.7,% 2.0,
+ lang = en-US,
+}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Class options are described above.
+\documentclass[upint,varvw,subscriptcorrection]{prtec}
%%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -86,15 +84,15 @@
%%%%% Conference, title, authors, affiliations %%%%%%%%
-\confname{Extended Abstracts of The Second Pacific Rim Thermal Engineering Conference}
-\confdate{December 13-17, 2019}
-\confcity{Maui, Hawaii, USA}
+\confname{Extended Abstracts of The Third Pacific Rim Thermal Engineering Conference}
+\confdate{December 15--19, 2024}
+\confcity{Honolulu, Hawaii, USA}
%%% Your paper number
\paperno{PRTEC-XXXXX}
%%% Your title
-\papertitle{Our research paper: the latest developments in cutting-edge engineering}
+\papertitle{Our research paper: cutting-edge cooling}
%% Put author names into the order you want. Use the same order for affiliations.
@@ -106,7 +104,7 @@
%%
%% \JointFirstAuthor, if applicable, follows the affiliation of the relevant authors, no spaces.
-\SetAuthors{Mamoru Tanahashi\affil{1}\JointFirstAuthor , Yongchan Kim\affil{2}\JointFirstAuthor , Sumanta Acharya\affil{3} , Koji Fukagata\affil{4}, John Lienhard\affil{5}\CorrespondingAuthor{lienhard@mit.edu}}
+\SetAuthors{Mamoru Tanahashi\affil{1}\JointFirstAuthor, Yongchan Kim\affil{2}\JointFirstAuthor, Sumanta Acharya\affil{3}, Koji Fukagata\affil{4}, John Lienhard\affil{5}\CorrespondingAuthor{lienhard@mit.edu}}
\SetAffiliation{1}{Department of Mechanical Engineering, Tokyo Institute of Technology, Japan}
\SetAffiliation{2}{School of Mechanical Engineering, Korea University, Republic of Korea}
@@ -124,18 +122,17 @@
\begin{abstract}
-This guide has been prepared for authors of extended abstract to be presented at The Second Pacific Rim Thermal Engineering Conference (PRTEC2019), December 13--17, 2019, Maui, Hawaii, USA. Authors are requested to follow these guidelines to achieve uniformity in the presentation of the proceedings. The main format of the extended abstract is as follows. Text: Times New Roman (or equivalent), 11 pt, left and right justified. Headings: Times New Roman, all capitals, 12 pt, centered. Page size A4 (210 $\times$ 297 mm); 20 mm borders all round; paper title starts at 40 mm from the top of the page except for the first page. Convert the manuscript to a single PDF file and submit it to the Online Submission System (\url{https://www.jsme.or.jp/ted/PRTEC2019/}) by the electrical format. The abstract should summarize the key findings in your study and should be in a single paragraph no more than 250 words. It should give an account of the most relevant contributions of the paper. It is also important to briefly indicate the goal, the methods, the results, and the conclusions. Avoid abbreviations, diagrams, and references. It must be self-contained and understandable without reference to the text.
+This guide has been prepared for authors of extended abstract to be presented at The Second Pacific Rim Thermal Engineering Conference (PRTEC2024), December 15--19, 2024, Honolulu, Hawaii, USA. Authors are requested to follow these guidelines to achieve uniformity in the presentation of the proceedings. The main format of the extended abstract is as follows. Text: Times New Roman (or equivalent), 11 pt, left and right justified. Headings: Times New Roman, all capitals, 12 pt, centered. Page size A4 (210 $\times$ 297 mm); 20 mm borders all round; paper title starts at 40 mm from the top of the page except for the first page. Convert the manuscript to a single PDF file and submit it to the Online Submission System (\url{https://www.jsme.or.jp/conference/PRTEC2024/}) by the electrical format. The abstract should summarize the key findings in your study and should be in a single paragraph no more than 250 words. It should give an account of the most relevant contributions of the paper. It is also important to briefly indicate the goal, the methods, the results, and the conclusions. Avoid abbreviations, diagrams, and references. It must be self-contained and understandable without reference to the text.
-\keywords{PRTEC, Extended Abstract, Template; 10 pt Times font} %% <=== Change to your keywords, keep this command before \end{abstract}.
+\keywords{Times New Roman, 10 pt, Convection, Computational methods, Heat exchanger, Cooling turbine blade, Film cooling, High temperature} %% <=== Change to your keywords, keep this command before \end{abstract}.
\end{abstract}
-
\section{Introduction \NoCaseChange{(Details for submitting extended abstract)}}
-The Extended Abstract must be formatted using this template and submitted by \textbf{June 30, 2019} for review. \textbf{The final version of the Extended Abstract must be submitted by August 31, 2019 for inclusion in the proceedings.} The final version of the extended abstract that does not conform to the correct format will not be included in the proceedings. There will be no opportunity to alter it after the submission of the final version.
+The Extended Abstract must be formatted using this template and submitted by \textbf{August 15, 2024} for review. \textbf{The final version of the Extended Abstract must be submitted by September 30, 2024 for inclusion in the proceedings.} The final version of the extended abstract that does not conform to the correct format will not be included in the proceedings. There will be no opportunity to alter it after the submission of the final version.
-It is assumed that the corresponding author will make a presentation at the conference. Each accepted extended abstract must have at least one paid regular or student registration by \textbf{August 31, 2019} to ensure that their presentation is included in the Conference Program.
+It is assumed that the corresponding author will make a presentation at the conference. Each accepted extended abstract must have at least one paid regular or student registration by \textbf{October 15, 2024} to ensure that their presentation is included in the Conference Program.
\section{Length and Layout}
@@ -150,7 +147,7 @@ The layout of the extended abstract should follow the style of this document, st
\textbf{KEYWORDS:} Keywords can be selected to describe the feature of the extended abstract. Leave two blank lines between keywords and the first major heading.
-\textbf{Header and footnotes:} The header includes the Paper number. \textbf{Please insert your presentation ID supplied by the Online Submission System, e.g., PRTEC-23456, if your presentation ID is PRTEC-23456.} The footnote of the first page contains E-mail address of the corresponding author. Note that this ``formal'' corresponding author can be different from the ``practical'' corresponding author registered on the submission system. Do not edit the copyright line. We do not transfer the copyright for the authors' convenience. The copyright line should always appear as ``Copyright \textcopyright\ 2019 by The Author(s). Distributed by JSME, KSME, and ASTFE with permission.'' Do not substitute the authors' names in the copyright line.
+\textbf{Header and footnotes:} The header includes the Paper number. \textbf{Please insert your presentation ID supplied by the Online Submission System, e.g., PRTEC-23456, if your presentation ID is PRTEC-23456.} The footnote of the first page contains E-mail address of the corresponding author. Note that this ``formal'' corresponding author can be different from the ``practical'' corresponding author registered on the submission system. Do not edit the copyright line. We do not transfer the copyright for the authors' convenience. The copyright line should always appear as ``Copyright \textcopyright\ 2024 by The Author(s). Distributed by JSME, KSME, and ASTFE with permission.'' Do not substitute the authors' names in the copyright line.
@@ -240,11 +237,11 @@ Authors from non-English speaking countries are requested to find persons who ar
\textbf{Figures and tables:} Figures and tables should be placed at the top or bottom of the page on which they are first mentioned if possible, on the next page if not. Do not gather them at the end of the extended abstract.
-\textbf{Submission:} The Extended Abstract should be converted to a single PDF file whose size is no more than 4 Mbytes, and submitted to the Online Submission System (\url{https://www.jsme.or.jp/ted/PRTEC2019/}).
+\textbf{Submission:} The Extended Abstract should be converted to a single PDF file whose size is no more than 4 Mbytes, and submitted to the Online Submission System (\url{https://www.jsme.or.jp/conference/PRTEC2024/}).
-\textbf{Submission Deadline for review:} Extended Abstract for review should be submitted by \textbf{June 30, 2019}. Notification of acceptance will be made by July 15, 2019.
+\textbf{Submission Deadline for review:} Extended Abstract for review should be submitted by \textbf{July 15, 2024}. Notification of acceptance will be made by August 15, 2024.
-\textbf{Submission Deadline for final version:} All contributors must upload the final version of Extended Abstract for inclusion in the proceedings by \textbf{August 31, 2019} even if there is no modification from the initial Extended Abstract. The Final Extended Abstract that does not conform to the correct format will not be included in the proceedings. There will be no opportunity to alter it after the submission of the final version.
+\textbf{Submission Deadline for final version:} All contributors must upload the final version of Extended Abstract for inclusion in the proceedings by \textbf{September 30, 2024} even if there is no modification from the initial Extended Abstract. The Final Extended Abstract that does not conform to the correct format will not be included in the proceedings. There will be no opportunity to alter it after the submission of the final version.
\section*{Acknowledgements}
@@ -286,7 +283,7 @@ Acknowledgments should be placed immediately following CONCLUSIONS, if necessary
\section{Additional notes for \LaTeX\ users}
The PRTEC class file is compatible with \hologo{pdfLaTeX}, \hologo{LuaLaTeX}, and \hologo{XeLaTeX}. The class relies on the \texttt{newtx} math and text fonts and is not configured for \texttt{fontspec}. The class will automatically set the needed margins, spacings, font sizes, and citation formats. The class is also designed to support hyperlinks, metadata, and pdf bookmarks.
-The class loads the \verb|\booktabs|, \verb|\array|, and \verb|\dcolumn| packages, for use in formatting tables.
+The class loads the \verb|mathtools| and \verb|amsmath| for setting mathematics. The class loads the \verb|booktabs|, \verb|array|, and \verb|dcolumn| packages for formatting tables.
PRTEC requires that section headings be set in uppercase, bold-face type. The class will do this automatically. You can place \verb|\cite{..}|, \verb|\ref{..}|, \verb|\label{..}|, and into headings directly, as you would in the main text. Do not enclose them braces, e.g.\ \verb|{\cite{..}}|, which will cause errors. You can place \verb|\footnote{..}| into headings, but not into captions.\footnote{See \texttt{tex-stackexchange} for various approaches to footnotes in captions, if they seem necessary. For footnotes inside tables, use the \texttt{tablefootnote} package.}
@@ -298,12 +295,12 @@ The pdf bookmarks are automatically set as the text of the section heading. Simp
%% For math in a section heading: the optional argument creates a pdfbookmark
%% without an error message or loss of characters.
-\section[Proof that S-gen\neq 0]{Proof that $\dot{S}_{\textrm{gen}}\neq 0$}
+\section[Proof that S-gen\neq 0]{Proof that \(\dot{S}_{\textrm{gen}}\neq 0\)}
For math in a section heading, the optional argument of \verb|\section[..]{..}| creates a pdfbookmark without losing characters or producing error messages. For this example, we use:
-\verb|\section[Proof that S-gen\neq 0]{Proof that $\dot{S}_{\textrm{gen}}\neq 0$}|
+\verb|\section[Proof that S-gen\neq 0]{Proof that \(\dot{S}_{\textrm{gen}}\neq 0\)}|
-Observe that some simple math expressions are accepted by the \verb|hyperref| package that manages the bookmarks.
+Some simple math expressions are accepted by the \verb|hyperref| package that manages the bookmarks.
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/prtec/README.md b/macros/latex/contrib/prtec/README.md
index f3dacefae1..f01e4e5dc1 100644
--- a/macros/latex/contrib/prtec/README.md
+++ b/macros/latex/contrib/prtec/README.md
@@ -1,6 +1,6 @@
#prtec -- A template for PRTEC conference papers#
- Version 1.06 dated 2019/08/20.
+ Version 1.07 dated 2024/07/07.
####Overview####
This class provides a LaTeX template to format extended abstracts for the
@@ -50,6 +50,12 @@
####Version History####
+ v1.07
+ - update to PRTEC 24
+ - update various aspects of code to account for 5 years of change in LaTeX
+ - adjust top and bottom margins
+ - include \\DocumentMetadata
+
v1.06 -- correct nofoot option to fully clear header
v1.05 -- edits to .bst to better support urls; minor edit to \\entry
@@ -62,7 +68,7 @@
####License####
- Copyright (c) 2019 John H. Lienhard
+ Copyright (c) 2024 John H. Lienhard
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction,
diff --git a/macros/latex/contrib/prtec/prtec.cls b/macros/latex/contrib/prtec/prtec.cls
index 9bd3af2237..9bd46e5ba1 100644
--- a/macros/latex/contrib/prtec/prtec.cls
+++ b/macros/latex/contrib/prtec/prtec.cls
@@ -1,12 +1,14 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% This file provides the prtec class for formatting conference papers according to
-%% the Pacific Rim Thermal Engineering Conference (PRTEC) requirements as of April 2019.
+%% the Pacific Rim Thermal Engineering Conference (PRTEC) requirements as of July 2024.
%%
%% The prtec.cls file should be used with the files prtec.bst (for citations) and prtec-template.tex.
%%
%%
-%% This file is version 1.06 dated 2019/08/20.
+%% This file is version and date:
+ \def\versionno{1.07}
+ \def\versiondate{2024/07/07\space}
%%
%% Author: John H. Lienhard V
%% Department of Mechanical Engineering
@@ -34,7 +36,7 @@
%%
%% LICENSE:
%%
-%% Copyright (c) 2019 John H. Lienhard
+%% Copyright (c) 2024 John H. Lienhard
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
%% associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -54,33 +56,14 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{prtec}[2019/08/20 PRTEC paper format]
+\ProvidesClass{prtec}[\versiondate\ PRTEC paper format]
-\LoadClass[twoside,11pt]{article}
-% Two-sided layout not used in PRTEC's specs, but is included anyway.
+\LoadClass[11pt]{article}
%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{ifthen}
-\newboolean{DefaultSups}
-\setboolean{DefaultSups}{true}
-
-\RequirePackage{kvoptions}
-\RequirePackage{kvsetkeys}
-\SetupKeyvalOptions{
- family=prtec,
- prefix=prtec@,
- setkeys=\kvsetkeys,
-}
-
-%%% set key nodefaultsups to obtain newtx superiors font for footnotes.
-\define@key{prtec}{nodefaultsups}[false]{%
- \setboolean{DefaultSups}{#1}
-}
-
-\ProcessKeyvalOptions*
-
%% option to omit PRTEC footer and header
\DeclareOption{nofoot}{%
@@ -96,13 +79,10 @@
%% Access many options from newtxmath
%% See newtxmath documentation for details
-\DeclareOption{upint,smallerops,varvw,varg,slantedGreek,frenchmath,varbb,cmbraces}{\PassOptionsToPackage{}{newtxmath}}
+\DeclareOption{upint,smallerops,varvw,varg,slantedGreek,frenchmath,varbb,cmbraces,subscriptcorrection}{\PassOptionsToPackage{}{newtxmath}}
%% Option for slightly larger small capitals font
-\DeclareOption{largesc}{\PassOptionsToPackage{}{newtxtext}}
-
-%% Option not to use latex default superscripts, instead using the newtxtext superiors font [nodefaultsups]
-\ifthenelse{\boolean{DefaultSups}}{\PassOptionsToPackage{defaultsups}{newtxtext}}{\relax}
+\DeclareOption{largesc}{\PassOptionsToPackage{largesc=true}{newtxtext}}
%% Suppress warnings about any omitted keys as unused global options
\DeclareOption*{}
@@ -112,8 +92,8 @@
%%%%%%%%%%%%% end options %%%%%%%%%%%%%%%%%%%
-\RequirePackage[a4paper, left=20mm, right=20mm, top=20mm, bottom = 20mm, footskip=10mm, includefoot, headsep=2mm]{geometry}
-% conforms to PRTEC 19 required margins
+\RequirePackage[a4paper, left=20mm, right=20mm, top=20mm, bottom=20mm, headsep=3mm, includefoot ]{geometry}
+% conforms to PRTEC24 required margins
\RequirePackage{parskip}
@@ -122,8 +102,9 @@
\renewcommand*{\bibfont}{\footnotesize}
\RequirePackage{graphicx}
-\RequirePackage[hyperref,fixpdftex,dvipsnames,svgnames,x11names]{xcolor}
-\RequirePackage{xparse}
+\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}
+
+\ifdefined\NewDocumentCommand\else\RequirePackage{xparse}\fi
%%%%%%%%%%%%%%%%%%%%%%%%
@@ -136,14 +117,10 @@
%%%% FONT related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{mathtools} % extends amsmath
-\RequirePackage[utf8]{inputenc}
\RequirePackage[]{newtxtext}
\RequirePackage[]{newtxmath}
% See package documentation
-%% override \textsu if using default superiors
-\ifthenelse{\boolean{DefaultSups}}{\let\textsu\textsuperscript}{\relax}
-
\RequirePackage{bm} % load after all other math packages, to give greater access to bold math
@@ -163,19 +140,19 @@
\RequirePackage{fancyhdr}
\pagestyle{fancy}
-\setlength{\headheight}{22.53pt}
+\setlength{\headheight}{24pt}
\fancyfoot{}
-\fancyfoot[CE,CO]{\thepage}
-\fancyfoot[RO,LE]{}
+\fancyfoot[C,C]{\thepage}
+\fancyfoot[R,L]{}
\fancyhead{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\fancypagestyle{title}{%
\fancyhf{} % clear all header and footer fields
-\fancyfoot[LO,RE]{Copyright~\textcopyright~\the\year\ The Author(s). Distributed by JSME, KSME, and ASTFE with permission.}
-\fancyfoot[LE,RO]{\thepage}
-\fancyhead[LE,RO]{\bfseries\sffamily \HeaderConfName}
+\fancyfoot[L]{Copyright~\textcopyright~\the\year\ The Author(s). Distributed by JSME, KSME, and ASTFE with permission.}
+\fancyfoot[R]{\thepage}
+\fancyhead[R]{\bfseries\sffamily \HeaderConfName}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
@@ -196,10 +173,9 @@
\noindent\makebox[2ex][r]{\@makefnmark}#1}
-
%%%%%%%%% CAPTION RELATED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage[labelfont={sf,bf},hypcap=false]{caption}
+\RequirePackage[labelfont={bf},hypcap=false]{caption}
\RequirePackage[hypcap=false,list=true]{subcaption}
\captionsetup[figure]{name=Fig.,labelfont={bf},textfont={}, labelsep=quad} %textformat=period,
@@ -207,15 +183,12 @@
%%%%%%%%%%%%%%%%%% Section headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% wish to accommodate hyperref
-
-\RequirePackage{textcase} %% Allows uppercase titles and captions without errors from math and citations
\RequirePackage[raggedright,indentafter]{titlesec}
% PRTEC specifies 12 pt headings
-\titleformat{\section}{\bfseries\mathversion{bold}\large\centering}{\thesection.}{0.5em}{\MakeTextUppercase}
-\titleformat{name=\section,numberless}{\bfseries\mathversion{bold}\large\centering}{}{0em}{\MakeTextUppercase}
+\titleformat{\section}{\bfseries\mathversion{bold}\large\centering}{\thesection.}{0.5em}{\MakeUppercase}
+\titleformat{name=\section,numberless}{\bfseries\mathversion{bold}\large\centering}{}{0em}{\MakeUppercase}
\titleformat{\subsection}[runin]{\bfseries}{\thesubsection}{0.5em}{\mathversion{bold}\noindent}[\hspace*{0.5em}]
\titleformat{\subsubsection}[runin]{\itshape}{}{0em}{\noindent\underline}[.\hspace*{0.5em}]
@@ -230,88 +203,81 @@
\setcounter{section}{0}
\pdfbookmark[0]{Appendices}{appendices}
\renewcommand\thesection{\Alph{section}}
- \titleformat{\section}{\bfseries\mathversion{bold}\large\centering}{APPENDIX \thesection:}{0.5em}{\MakeTextUppercase}
+ \titleformat{\section}{\bfseries\mathversion{bold}\large\centering}{APPENDIX \thesection:}{0.5em}{\MakeUppercase}
}
%%%%%%%%%%%%% hyperref %%%%%%%%%%%%%%%%%%%
-\RequirePackage{hyperxmp} %% to fix transfer of metadata to Acrobat pdf
-
-\RequirePackage[%
- unicode, % Unicode encoded PDF strings
- psdextra, % additional support for math in pdf bookmarks
- pdfborder={0 0 0},%
- bookmarks=true, %
- bookmarksnumbered=true,%
- bookmarksopen=true,%
- bookmarksopenlevel=1,%
- colorlinks=true,%%% <=== set false to get black type, but do so in .tex file
+\RequirePackage[psdextra]{hyperref}
+
+\hypersetup{
+ colorlinks=true,
+ pdfborder={0 0 0},
+ bookmarksnumbered=true,
+ bookmarksopen=true,
+ bookmarksopenlevel=1,
+ pdfpagelayout=SinglePage,
+ pdfdisplaydoctitle=true,
+ pdfstartview=Fit,
+ pdfnewwindow=true,
linkcolor=blue, %
- citecolor=blue, % SeaGreen4,%
- urlcolor=blue, % Red3,%
- breaklinks=true,%
- pdftitle={}, % <=== add in .tex file
- pdfkeywords={}, % <=== add in .tex file
- pdfnewwindow=true,%
- pdfpagelayout=TwoPageRight,%
- pdfauthor={}, % <=== add in .tex file
- pdfdisplaydoctitle=true%
- ]{hyperref}
-
+ citecolor=blue, %
+ urlcolor=blue, %
+ filecolor=violet,%
+}
\urlstyle{same} % don't switch to typewriter font
\RequirePackage{doi} % provides hyperlinks for doi in bibliography
\renewcommand{\doitext}{doi:~} % change the default, {doi:}, to this for PRTEC specification
-%% Since \bm is useful in headings, this fix will reduce frequency with which
-%% alternate pdfstrings must be given in section command as \section[pdfstring]{texstring}
+%% Since \bm may be useful in headings, this fix will reduce frequency with which
+%% alternate pdfstrings must be given in revised section command as \section[pdfstring]{texstring}
\pdfstringdefDisableCommands{%
\def\bm#1#{\relax}%
}
-%% Let's also make sure \NoCaseChange in section headings won't break pdf bookmarks
+% Let's disable \( and \) in pdf bookmarks
+\pdfstringdefDisableCommands{%
+ \def\({\relax}%
+ \def\){\relax}%
+}
+
+% Let's also make sure \NoCaseChange in section headings won't break pdf bookmarks
\pdfstringdefDisableCommands{%
\let\NoCaseChange\relax%
}
-%% Let's just remove citations from pdf bookmarks
+% Let's just remove citations from pdf bookmarks
\pdfstringdefDisableCommands{%
\def\cite{\@gobble}%
}
-%% Let's make sure footnotes in section headings don't break pdf bookmarks.
+%% Ensure that tag color does not follow \eqref into bookmarks
+\pdfstringdefDisableCommands{%
+ \def\eqref#1{(\ref{#1})}%
+}
+
+% Let's make sure footnotes in section headings don't break pdf bookmarks.
+% Revised footnote command above is already robust
+
\RequirePackage{etoolbox}
-\robustify{\footnote}
+\robustify\footnote
\pdfstringdefDisableCommands{%
\def\footnote#1{}%
}
-
%% Let's also add \footnote to the \TextUppercase exception list, so that footnote text won't be capitalized
-%% if given in section headings
-\RequirePackage{xpatch}
-\xpatchcmd{\@uclcnotmath}{\@nonchangecase\ref}{\@nonchangecase\ref\@nonchangecase\footnote}{}{}
-
-
-%%% Create an optional argument for unnumbered sections and set pdf bookmark (thru \addcontentsline).
-%%% The optional argument will manually set the pdf bookmark for that section; can be used to avoid hyperref
-%%% errors when macros are in section titles.
-%%% There should not be errors for $$, \cite, \ref, \label, \footnote, or \bm with current construction.
-\let\svsection\section
-\RenewDocumentCommand{\section}{s o m}{%
- \IfBooleanTF {#1}
- {\svsection*{#3}\phantomsection
- {\IfNoValueTF {#2}
- {\addcontentsline{toc}{section}{#3} }
- {\addcontentsline{toc}{section}{#2} }
- }
- }
- {\IfNoValueTF {#2}
- {\svsection{#3}}
- {\svsection[#2]{#3}}
- }
-}
+%% if given in section headings. Ditto for \eqref
+%
+\ifx\AddToNoCaseChangeList\@undefined % see https://github.com/John02139/asmeconf/issues/5
+ \patchcmd{\@uclcnotmath}{\@nonchangecase\ref}{\@nonchangecase\ref\@nonchangecase\footnote}{\typeout{PRTEC patched textcase nonchangecase to include footnote.}}{}
+ \patchcmd{\@uclcnotmath}{\@nonchangecase\ref}{\@nonchangecase\ref\@nonchangecase\eqref}{\typeout{PRTEC patched textcase nonchangecase to include eqref.}}{}
+\else
+ \AddToNoCaseChangeList{\eqref \footnote}
+\fi
+
+%%% There should be no errors for section headings with \(, \), \cite, \ref, \eqref, \label, \footnote, \NoCaseChange, or \bm
%%%%%%%%%%%%% Define special environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -321,7 +287,7 @@
\providecommand{\@keywords}{\relax}
-\DeclareDocumentCommand{\keywords}{m}{%
+\NewDocumentCommand{\keywords}{m}{%
\IfNoValueTF{#1}{%
\relax}{%
\long\def\@keywords{\par\medskip\noindent{\bfseries\small KEYWORDS: }{\small #1}}%
@@ -331,7 +297,7 @@
\DeclareDocumentEnvironment{abstract}{}{%
\section*{Abstract}%
}
- {\@keywords\bigskip%
+ {\@keywords\ignorespacesafterend%
}
@@ -347,7 +313,7 @@
%% If the second argument of \entry is omitted, a bold section heading is produced, e.g. \entry{Greek Letters}
-\DeclareDocumentCommand{\entry}{m g}{%
+\NewDocumentCommand{\entry}{m g}{%
\IfNoValueTF{#2}{%
\item[\itshape#1\hfill]\smallskip
}{%
@@ -388,7 +354,7 @@
\providecommand\@ConfCity{\hbox{ }}
\newcommand{\HeaderConfName}{%
-\parbox{\linewidth}{\raggedleft\bfseries\sffamily%
+\parbox{\linewidth}{\raggedleft\bfseries\sffamily\small%
\@ConfName\linebreak[4]%\par%
\@ConfDate\@CDsep\@ConfCity%
}%
@@ -400,7 +366,7 @@
\newcommand{\PaperNo}{%
\vspace*{-4.7mm}%
\parbox{\linewidth}{\raggedleft\bfseries\sffamily\Large%
-\MakeTextUppercase{\@paperno}%
+\MakeUppercase{\@paperno}%
}%
}
@@ -410,7 +376,7 @@
\newcommand{\PaperTitle}{%
\par\vspace*{6mm}%
\parbox{\linewidth}{\centering{\bfseries\Large%
-\MakeTextUppercase{\@papertitle}%
+\MakeUppercase{\@papertitle}%
\thispagestyle{title}\par} %% <=== \par gets the font leading to stick so that lines space properly
}%
}
@@ -429,13 +395,13 @@
\NewCoffin{\AffiliationsBlock}
\SetHorizontalCoffin\AffiliationsBlock{}
-\DeclareDocumentCommand{\SetAuthors}{m}{%
+\NewDocumentCommand{\SetAuthors}{m}{%
\SetHorizontalCoffin\AuthorBlock{%
\parbox{\linewidth}{\centering\bfseries\ignorespaces#1\ignorespaces}%
}
}
-\DeclareDocumentCommand{\SetAffiliation}{m m}{%
+\NewDocumentCommand{\SetAffiliation}{m m}{%
\SetVerticalCoffin\AffiliationBlock{\textwidth}{%
\centering\footnotemark[#1]#2\ignorespaces%
}
@@ -448,7 +414,7 @@
\newif\ifCA\CAfalse
\newcommand{\CAemail}[1]{\gdef\@CAemail{#1}}
-\DeclareDocumentCommand{\CorrespondingAuthor}{m}{%
+\NewDocumentCommand{\CorrespondingAuthor}{m}{%
\global\CAtrue%
\CAemail{#1}%
$^\ast$%
@@ -457,13 +423,13 @@
%%% flag for joint first authors (two or more)
\newif\ifJA\JAfalse
-\DeclareDocumentCommand{\JointFirstAuthor}{}{%
+\NewDocumentCommand{\JointFirstAuthor}{}{%
\global\JAtrue%
$^\dagger$%
}
%%% Affiliation mark
-\DeclareDocumentCommand{\affil}{m}{%
+\NewDocumentCommand{\affil}{m}{%
{\mdseries\footnotemark[#1]}%
}
@@ -475,11 +441,11 @@
\oldaffil{#1}\futurelet\nextToken\isOthernote}
\newcommand\isOthernote{%
- \ifx\CorrespondingAuthor\nextToken\textsu{\mdseries,}%
+ \ifx\CorrespondingAuthor\nextToken\textsuperscript{\mdseries,}%
\else%
- \ifx\JointFirstAuthor\nextToken\textsu{\mdseries,}%
+ \ifx\JointFirstAuthor\nextToken\textsuperscript{\mdseries,}%
\else
- \ifx\affil\nextToken\textsu{\mdseries,}%
+ \ifx\affil\nextToken\textsuperscript{\mdseries,}%
\fi%
\fi%
\fi%
@@ -494,7 +460,7 @@
\renewcommand\JointFirstAuthor{%
\oldJointFirstAuthor\futurelet\nextToken\isOthernote}
-\DeclareDocumentCommand{\SetAuthorBlock}{}{%
+\NewDocumentCommand{\SetAuthorBlock}{}{%
\let\savethefootnote\thefootnote
\JoinCoffins\AuthorBlock[hc,b]\AffiliationsBlock[hc,t](0pt,-\baselineskip)
\centerline{\TypesetCoffin\AuthorBlock}
@@ -511,7 +477,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Make the title section
-\DeclareDocumentCommand{\MakeTitlePage}{}{%
+\NewDocumentCommand{\MakeTitlePage}{}{%
\PaperNo
\PaperTitle
\vspace*{2\baselineskip}
diff --git a/macros/latex/contrib/prtec/sample-figure.pdf b/macros/latex/contrib/prtec/sample-figure.pdf
index 29b41786be..89d44bf9cf 100644
--- a/macros/latex/contrib/prtec/sample-figure.pdf
+++ b/macros/latex/contrib/prtec/sample-figure.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-a-answer.pdf b/macros/latex/contrib/randexam/randexam-a-answer.pdf
index d961cd9cb5..686d3f696c 100644
--- a/macros/latex/contrib/randexam/randexam-a-answer.pdf
+++ b/macros/latex/contrib/randexam/randexam-a-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-a-blank.pdf b/macros/latex/contrib/randexam/randexam-a-blank.pdf
index 9656be370d..d6ea0b132c 100644
--- a/macros/latex/contrib/randexam/randexam-a-blank.pdf
+++ b/macros/latex/contrib/randexam/randexam-a-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-b-answer.pdf b/macros/latex/contrib/randexam/randexam-b-answer.pdf
index fe0867038c..ec97459092 100644
--- a/macros/latex/contrib/randexam/randexam-b-answer.pdf
+++ b/macros/latex/contrib/randexam/randexam-b-answer.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam-b-blank.pdf b/macros/latex/contrib/randexam/randexam-b-blank.pdf
index c059b6e615..459ad1f116 100644
--- a/macros/latex/contrib/randexam/randexam-b-blank.pdf
+++ b/macros/latex/contrib/randexam/randexam-b-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam.cls b/macros/latex/contrib/randexam/randexam.cls
index ec5d1c43c2..dacc079cb0 100644
--- a/macros/latex/contrib/randexam/randexam.cls
+++ b/macros/latex/contrib/randexam/randexam.cls
@@ -6,7 +6,7 @@
% ----------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{randexam}[2024-02-18 v2024E Make an exam paper and its randomized variants]
+\ProvidesClass{randexam}[2024-07-09 v2024F Make an exam paper and its randomized variants]
%% Old LaTeX release could not recognize date format like 2022-11-01
%\@ifl@t@r\fmtversion{2022-11-01}{}{
@@ -786,7 +786,8 @@
\UseExamTemplate{examdata}{default}
}
-\preto{\@enddocumenthook}{\printquestions\rdxm@stop@random}
+%% this equals to \AddToHook{enddocument}[randexam]{...}
+\AtEndDocument{\printquestions\rdxm@stop@random}
\newcommand\ignorepars{\@ifnextchar\par{\expandafter\ignorepars\@gobble}{}}
@@ -1228,6 +1229,11 @@
\mbox{}\nobreak\hfill$\cdots\cdots$\solutionpointstext{#1}
\par\noindent\ignorespaces
}
+
+%% \eqno would cause extra space after a $$...$$ equation
+%% this bug was fixed in latex release 2023-06-01
+%% see https://github.com/latex3/latex2e/issues/1059
+%% \tag is used in a \[...\] equation hence no problem with it
\newcommand{\pointseqno}[1]{\eqno{\cdots\cdots\text{\solutionpointstext{#1}}}}
\newcommand{\pointstag}[1]{\tag*{$\cdots\cdots$\solutionpointstext{#1}}}
@@ -1374,6 +1380,9 @@
\RequirePackage{extarrows}
\newcommand{\e}{\mathrm{e}}
\newcommand{\R}{\mathbb{R}}
+ \newcommand{\jacobi}[2]{{\left(\frac{##1}{##2}\right)}}
+ \newcommand{\ii}{\mathrm{i}}
+ \newcommand{\Zi}{\mathbb{Z}[\ii]}
\DeclareMathOperator{\arccot}{arccot}
\DeclareMathOperator{\Corr}{\rho}
\DeclareMathOperator{\Cov}{Cov}
diff --git a/macros/latex/contrib/randexam/randexam.pdf b/macros/latex/contrib/randexam/randexam.pdf
index 68c0e5925d..1ef3fcc5ad 100644
--- a/macros/latex/contrib/randexam/randexam.pdf
+++ b/macros/latex/contrib/randexam/randexam.pdf
Binary files differ
diff --git a/macros/latex/contrib/randexam/randexam.tex b/macros/latex/contrib/randexam/randexam.tex
index 74e57318df..ff7d951a15 100644
--- a/macros/latex/contrib/randexam/randexam.tex
+++ b/macros/latex/contrib/randexam/randexam.tex
@@ -3,7 +3,7 @@
\documentclass[12pt,plain,math=most]{randexam}
\geometry{b5paper,margin=2cm}
-\newcommand*{\myversion}{2024E}
+\newcommand*{\myversion}{2024F}
\newcommand*{\mydate}{\the\year-\mylpad\month-\mylpad\day}
\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi}
diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
index 1ae91515fb..fc1cf0d3af 100644
--- a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
+++ b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
index 58f1d6981d..7454d1cce0 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
index ea2f749d32..51238cf571 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
index 2d7130fcb9..fa4b8cdbb5 100644
--- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
index d7a945978b..80a889d85b 100644
--- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
index 75b679b50d..4881557ce0 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf
index e1d1b6af19..3caf07a14a 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
index f7b843c631..7c94d43d13 100644
--- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
index 1c53f875a0..0278d89b9f 100644
--- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
index c9e6daca45..542174e6f0 100644
--- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
index f702632cf3..3ecab9d63b 100644
--- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
index ca3b90abcc..607860d6e6 100644
--- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
index 95a09523d9..26e21be7b9 100644
--- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
index 0021b1cbd3..b1dca2b117 100644
--- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
index 67424c3e0c..499104658b 100644
--- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
index 362ff7012a..f5f58e81d6 100644
--- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
index 0fe795532a..abaf67b4f6 100644
--- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
index ad48933ba2..3cda9762d0 100644
--- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf
index e68f4f3b49..c543daa168 100644
--- a/macros/latex/contrib/reledmac/examples/2-performances.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
index ed0755c95b..9030d23e94 100644
--- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
index a0e92d1b90..53b0429efc 100644
--- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
index 22f3ac9ed3..7872a6a918 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
index 6edc466546..d751ef78ff 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
index ae6daea2f3..d05683ac0a 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
index 65e77b6045..71adb5d7bb 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
index 7864905fc5..3d12b5b07b 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
index 147ece9039..36e5904216 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
index bc2e485aa7..df79382ca8 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
index a53aafd365..d68d98ff29 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
index b873ef2634..448dea3da8 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
index 4437bcd188..37ac4daee6 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
index 0c36cb9564..d69077e19b 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
index 073be3c769..692832cc52 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
index 7a13994ca4..bf85737443 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
index 5dbce10161..e9fb82d345 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
index 4c574e496b..6136c9957b 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
index 012bb74b4e..0fea810dc6 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
index fc67986e5a..b492f69121 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
index 58d08bf3bd..d4643edcb3 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
index 36f6321386..09f3b72602 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
index db1ccbc5a7..4ccf4308cd 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
index d71f06d80e..000ffd301c 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
index c6186efd4d..3baa1de986 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
index a36ab701dd..7a63bced17 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
index 33338d8f63..e68462600d 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
index c8200f5ff5..120bdeb43a 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf
index 50d46b721e..1512a20fea 100644
--- a/macros/latex/contrib/reledmac/migration.pdf
+++ b/macros/latex/contrib/reledmac/migration.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx
index 2109ca38b5..8b43d5b6be 100644
--- a/macros/latex/contrib/reledmac/reledmac.dtx
+++ b/macros/latex/contrib/reledmac/reledmac.dtx
@@ -786,7 +786,7 @@
% Briefe}, series {\sc I, III, VII,} being edited by Dr.\ H.\
% Breger\index{Breger, Herbert}, Dr.~N. G\"adeke\index{G\"adeke, Nora} and
% others at the Leibniz-Archiv, Nieders\"achsische Landesbibliothek, Hannover.
-% (see \url{http://www.nlb-hannover.de/Leibniz})}
+% (see \url{https://www.gwlb.de/leibniz/digitale-ressourcen/repositorium-des-leibniz-archivs})}
% Theodosius's\index{Theodosius} {\em Spherics}, the German {\em
% Algorismus} of Sacrobosco,\index{Sacrobosco} the Sanskrit text of the
% {\em K\={a}\'{s}ik\={a}\-v\d{r}tti\/} of V\={a}mana\index{Vamana} and
@@ -3962,7 +3962,7 @@
% & It makes the peas taste funny \\
% & And get my tummy gummy.\edindex{gummy} &
% & But it keeps them on the knife.
-% \end{edtabularr}
+% \end{edtabularl}
% \pend
% \endnumbering
% \end{verbatim}
diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf
index bc1f8b20f9..bf4c1a04d6 100644
--- a/macros/latex/contrib/reledmac/reledmac.pdf
+++ b/macros/latex/contrib/reledmac/reledmac.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledpar.dtx b/macros/latex/contrib/reledmac/reledpar.dtx
index aff1d03da1..1d09e9c4ef 100644
--- a/macros/latex/contrib/reledmac/reledpar.dtx
+++ b/macros/latex/contrib/reledmac/reledpar.dtx
@@ -354,6 +354,7 @@
% \changes{v2.25.4}{2023/07/04}{Fix bug with \protect\cs{linenumOnlyPagesForColumnsR} and multiple numbered sections}
% \changes{v2.25.5}{2023/07/20}{Fix bug with hyperlink when using \protect\cs{footnoteXnomk}}
% \changes{v2.25.6}{2024/02/26}{Make \protect\cs{doinsidethislinehook} working on right side}
+% \changes{v2.25.7}{2024/07/23}{Fix compatibility with \protect\package{polyglossia} 2.2}
% ^^A PW added following as the definitions are at some unknown elsewhere
%
% \newcommand{\egstart}{%
@@ -1410,7 +1411,7 @@
% \begin{macrocode}
%<*code>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{reledpar}[2024/05/11 v2.25.6a reledmac extension for parallel texts]%
+\ProvidesPackage{reledpar}[2024/07/23 v2.25.7 reledmac extension for parallel texts]%
% \end{macrocode}
% \subsection{Package's requirement}
@@ -5543,17 +5544,6 @@
% To counter this, we have to make sure that the correct language is
% used at the proper times.
%
-% \begin{macro}{\ifl@dusedbabel}
-% \begin{macro}{\l@dusedbabelfalse}
-% \begin{macro}{\l@dusedbabeltrue}
-% A flag for checking if \verb?babel? has been used as a package.
-% \begin{macrocode}
-\newif\ifl@dusedbabel
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \changes{v1.8.0}{2014/08/05}{Suppress \protect\cs{ifl@dsamelang} which did not work and was not logical, because both columns could have the same language but not the main language of the document.}
%
% \begin{macro}{\l@dchecklang}
@@ -5598,20 +5588,18 @@
% Now do the \protect\package{babel} or \protect\package{polyglossia} fix or, if necessary.
% \begin{macrocode}
\AtBeginDocument{%
- \@ifundefined{xpg@main@language}{%
+ \@ifpackageloaded{babel}{%
\@ifundefined{bbl@main@language}{%
% \end{macrocode}
% Either \protect\package{babel} has not been used or it has been used with no
% specified language.
% \begin{macrocode}
- \l@dusedbabelfalse
}{%
% \end{macrocode}
% Here we deal with the case where babel has been used. \protect\cs{selectlanguage}
% has to be redefined to use our version of \protect\cs{bbl@set@language} and to
% store the left or right language.
% \begin{macrocode}
- \l@dusedbabeltrue
\let\l@doldselectlanguage\selectlanguage
\let\l@doldbbl@set@language\bbl@set@language
\renewcommand{\selectlanguage}[1]{%
@@ -5635,7 +5623,7 @@
\gdef\theledlanguageL{\bbl@main@language}%
\gdef\theledlanguageR{\bbl@main@language}%
}%
- }
+ }{}%
% \end{macrocode}
% If use \protect\package{polyglossia}
% \changes{v1.8.0}{2014/08/05}{Correct left/right language setting with polyglossia.}
@@ -5643,25 +5631,28 @@
% \changes{v2.22.4}{2019/11/04}{Provide compatibility with the latest version of polyglossia (v1.45).}
% \changes{v2.23.0}{2020/03/08}{Restore compatibility with versions of polyglossia prior to v1.45.}
% \begin{macrocode}
- {%
- \@ifpackagelater{polyglossia}{2022/04/10}{}{\led@err@polyglossiaTooOld}%
- \let\old@otherlanguage\otherlanguage%
- \renewcommand{\otherlanguage}[2][]{%
- \selectlanguage[#1]{#2}%
- \xpg@set@language@only@aux[#1]{#2}%
- \ifledRcol \gdef\theledlanguageR{#2}%
- \else \gdef\theledlanguageL{#2}%
- \fi}%
+ \@ifpackageloaded{polyglossia}{%
+ \@ifpackagelater{polyglossia}{2024/07/15}{}{\led@err@polyglossiaTooOld}%
\renewcommand{\l@duselanguage}[1]{%
\csuse{no\languagename @numbers}%
- \expandafter\@select@language\expandafter{#1}%
+ \selectlanguage*{#1}%
+ }%
+ \AddToHook{env/Leftside/begin}{%
+ \AddToHookNext{cmd/polyglossia@language@switched/after}{%
+ \xdef\theledlanguageL{\languagename}%
+ }%
}%
- \xdef\theledlanguageL{\xpg@main@language}%
- \xdef\theledlanguageR{\xpg@main@language}%
+ \AddToHook{env/Rightside/begin}{%
+ \AddToHookNext{cmd/polyglossia@language@switched/after}{%
+ \xdef\theledlanguageR{\languagename}%
+ }%
+ }%
+ \xdef\theledlanguageL{\mainlanguagename}%
+ \xdef\theledlanguageR{\mainlanguagename}%
% \end{macrocode}
% That is it.
% \begin{macrocode}
- }%
+ }{}%
}%
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf
index 84a3fd4ec0..09730ec178 100644
--- a/macros/latex/contrib/reledmac/reledpar.pdf
+++ b/macros/latex/contrib/reledmac/reledpar.pdf
Binary files differ
diff --git a/macros/latex/contrib/responsive/README b/macros/latex/contrib/responsive/README
index dc2953cb54..c6ed3ea7ea 100644
--- a/macros/latex/contrib/responsive/README
+++ b/macros/latex/contrib/responsive/README
@@ -1,6 +1,6 @@
The Responsive Package
-Version 0.1
+Version v0.1a
Change font sizes and other typographic details in LaTeX documents depending on
the page dimensions.
@@ -21,7 +21,7 @@ elements for various output formats and devices. Key features include:
- Line Spacing Control: adjust line spacing determining the x-height percentage
for enhanced readability.
-Copyright: 2023-2023 Michal Hoftich
+Copyright: 2023-2024 Michal Hoftich
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/responsive/responsive-doc.pdf b/macros/latex/contrib/responsive/responsive-doc.pdf
index 1e7245c04f..498fcac9bb 100644
--- a/macros/latex/contrib/responsive/responsive-doc.pdf
+++ b/macros/latex/contrib/responsive/responsive-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/responsive/responsive-doc.tex b/macros/latex/contrib/responsive/responsive-doc.tex
index 4272397e3e..e5e5b3f074 100644
--- a/macros/latex/contrib/responsive/responsive-doc.tex
+++ b/macros/latex/contrib/responsive/responsive-doc.tex
@@ -22,7 +22,7 @@
\usepackage{booktabs}
\usepackage[style=iso-authoryear]{biblatex}
\addbibresource{responsive-doc.bib}
-\newenvironment{changelog}{\longtable{@{} l p{30em}}}{\endlongtable}
+\newenvironment{changelog}{\longtable{@{} l p{20em}}}{\endlongtable}
\newcommand\change[2]{#1 & #2\\}
\ifdefined\HCode
% I want to convert parts of the document to images,
@@ -525,6 +525,9 @@ under the terms of the \LaTeX\ Project Public License, version 1.3.
\section{Changes}
\begin{changelog}
+ \change{2024-07-14}{Version 0.1a released}
+ \change{2024-03-16}{Set the \texttt{topmargin} dimension}
+ \change{}{Call Geometry's \texttt{\textbackslash Gm@process} command to fix page dimensions, if Geometry is loaded}
\change{2023-12-13}{Version 0.1 released.}
\change{}{Finished documentation.}
\change{2023-12-07}{Added the \texttt{lineheight} property.}
diff --git a/macros/latex/contrib/responsive/responsive.sty b/macros/latex/contrib/responsive/responsive.sty
index 65e5061f45..289f04ca8b 100644
--- a/macros/latex/contrib/responsive/responsive.sty
+++ b/macros/latex/contrib/responsive/responsive.sty
@@ -3,7 +3,7 @@
\RequirePackage{expl3,l3keys2e}
\RequirePackage{kvoptions}
\ProvidesExplPackage{responsive}
-{2023-12-15}{0.1}{Responsive design for LaTeX}
+{2024-07-14}{v0.1a}{Responsive design for LaTeX}
%%%%%%%%%%%%%%%%%%%%%%
% keyval processing %
@@ -168,6 +168,10 @@
\@setfontsize#1{\resp_multiply_note:nnn\resp_font_size{#2}{1}}{\resp_multiply_note:nnn\resp_line_skip{#2}{\l_resp_lineheight_multiplier}}
}
+% This is a dummy definition. It should restore page dimensions using the Geometry package if it is loaded.
+% The correct definition is added in \AtBeginDocument
+\cs_set:Npn\resp_reset_geometry{}
+
% recalculate \textheight and \headheight with the changed font size
% this is necessary to prevent the underfull \vbox messages from the output rutine
\cs_set:Npn\resp_textheight:n {
@@ -182,6 +186,9 @@
\setlength\headheight{\resp_font_size}
\setlength\headsep {1.5\resp_font_size}
\setlength\footskip{\fp_to_dim:n{2*\resp_font_size+1}}
+ \setlength\topmargin{\fp_to_dim:n{(\paperheight-\textheight -\headheight-\headsep-\footskip)/2 - 1in}}
+ \resp_reset_geometry
+ % \addtolength\topmargin{\topskip}
}
% the functionality to fix the textheight should be available as a document command
@@ -355,6 +362,9 @@
% setup font sizes at the begin document, in order to support Geometry etc.
\AtBeginDocument{
+ \@ifpackageloaded{geometry}{
+ \cs_set:Npn\resp_reset_geometry{\Gm@process}
+ }{}
% set the default font size, based on numbers of characters we want to show on a line of text
% \fonttobox[32]\textwidth{\tl_range:Nnn\l_resp_charlist_tl{1}{\l_resp_charlines_int}}%
\bool_if:NTF\l_resp_no_execute {}{
diff --git a/macros/latex/contrib/se2thesis/CHANGELOG.md b/macros/latex/contrib/se2thesis/CHANGELOG.md
index fa60e6d1b0..19e4330b9f 100644
--- a/macros/latex/contrib/se2thesis/CHANGELOG.md
+++ b/macros/latex/contrib/se2thesis/CHANGELOG.md
@@ -7,6 +7,28 @@ and this project adheres to
## [Unreleased]
+## [v4.3.1] – 2024–07–31
+
+### Added
+
+- Add a hint on the usage of `scrreprt` as the base class if one wants to have
+ numbered bibliography or appendices.
+- Add section in the documentation on the usage of babel, its shorthands for
+ German and English to re-enable hyphenation of compound words, and the
+ conflicting package `hyphenat`.
+
+### Fixed
+
+- Fix list of implicitly loaded packages.
+
+## [v4.3.0] – 2024–07–23
+
+### Fixed
+
+- The spelling bachelor thesis and master thesis are widely used but seem to be
+ wrong. According to the Oxford English Dictionary, the spelling shall be
+ bachelor's thesis and master's thesis.
+
## [v4.2.0] – 2024–06–25
### Fixed
@@ -237,7 +259,9 @@ These changes might be breaking changes!
### Added
- First official release
-[Unreleased]: https://github.com/se2p/se2thesis/compare/v4.2.0...HEAD
+[Unreleased]: https://github.com/se2p/se2thesis/compare/v4.3.1...HEAD
+[v4.3.1]: https://github.com/se2p/se2thesis/compare/v4.3.1...v4.3.0
+[v4.3.0]: https://github.com/se2p/se2thesis/compare/v4.3.0...v4.2.0
[v4.2.0]: https://github.com/se2p/se2thesis/compare/v4.2.0...v4.1.0
[v4.1.0]: https://github.com/se2p/se2thesis/compare/v4.1.0...v4.0.3
[v4.0.3]: https://github.com/se2p/se2thesis/compare/v4.0.3...v4.0.2
diff --git a/macros/latex/contrib/se2thesis/se2colors.dtx b/macros/latex/contrib/se2thesis/se2colors.dtx
index 09e6523a9e..b597e876ff 100644
--- a/macros/latex/contrib/se2thesis/se2colors.dtx
+++ b/macros/latex/contrib/se2thesis/se2colors.dtx
@@ -231,7 +231,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2colors} {2024-06-25} {4.2.0}
+\ProvidesExplPackage {se2colors} {2024-07-31} {4.3.1}
{A colour support package for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2fonts.dtx b/macros/latex/contrib/se2thesis/se2fonts.dtx
index bfc3210cc0..0d33b81228 100644
--- a/macros/latex/contrib/se2thesis/se2fonts.dtx
+++ b/macros/latex/contrib/se2thesis/se2fonts.dtx
@@ -151,7 +151,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2fonts} {2024-06-25} {4.2.0}
+\ProvidesExplPackage {se2fonts} {2024-07-31} {4.3.1}
{A font-selection support package for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2packages.dtx b/macros/latex/contrib/se2thesis/se2packages.dtx
index 4c915c3eb5..ed6cdd7ebf 100644
--- a/macros/latex/contrib/se2thesis/se2packages.dtx
+++ b/macros/latex/contrib/se2thesis/se2packages.dtx
@@ -470,7 +470,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2packages} {2024-06-25} {4.2.0}
+\ProvidesExplPackage {se2packages} {2024-07-31} {4.3.1}
{Supporting packages for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
index 703086bd37..8fe6613340 100644
--- a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis.dtx b/macros/latex/contrib/se2thesis/se2thesis.dtx
index 0a6705aaa5..d0c787bf2a 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.dtx
+++ b/macros/latex/contrib/se2thesis/se2thesis.dtx
@@ -62,7 +62,7 @@
% internet, causing each thesis looking differently.
%
% The author of this package provided a template,
-% which he initially created for his bachelor and master thesis,
+% which he initially created for his bachelor's and master's thesis,
% that was recommended and used by many students.
% The implementation of that template, however, was very hacky and required
% some changes over time.
@@ -74,7 +74,7 @@
% The bundle itself consists of several \LaTeX{} classes and packages
% that also allow reuse of various parts of it.
% Its main class is the \pkg{se2thesis} document class,
-% an extension of the \KOMAScript{} |scrreprt| document class.
+% an extension of the \KOMAScript{} |scrbook| document class.
% The packages \pkg{se2colors} and \pkg{se2fonts} provide necessary
% colour and font settings for the \pkg{se2thesis} class;
% the \pkg{se2packages} allows to load several recommended packages~(see
@@ -186,9 +186,9 @@
% \pkg{expl3}, \pkg{l3keys2e} in case one uses a \LaTeX{} kernel from before
% 2022--06--01, \pkg{graphicx}, \pkg{translations}, \KOMAScript, \pkg{xcolor},
% \pkg{ifthen}, as well as \pkg{fontspec}, \pkg{unicode-math},
-% and \pkg{libertinus-otf} if one uses \LuaTeX{};
+% \pkg{inconsolata-nerd-font} and \pkg{libertinus-otf} if one uses \LuaTeX{};
% for \pdfLaTeX{} we load \pkg{fontenc}, \pkg{libertinus-type1}, and
-% \pkg{AnonymousPro} instead of the latter three.
+% \pkg{inconsolata} instead of the latter three.
% Furthermore, we load \pkg{microtype};
% when using \LuaTeX{}, we also load \pkg{lua-widow-control} and \pkg{selnolig}.
%
@@ -220,6 +220,11 @@
% \emph{Note:} you cannot use \cls{scrartcl} because it does not provide
% the required |chapter| sectioning.
% Default is |scrbook|.
+%
+% Please note that if you want to have the bibliography numbered or use an
+% appendix with alpha-numbering (A, B, \dots), you want to explicitly use
+% |scrreprt| as the base class; for some (currently unknown) reason this does
+% not work with the default |scrbook|.
% \end{function}
% \begin{function}{paper}
% \begin{syntax}
@@ -243,9 +248,9 @@
% \end{syntax}
% Defines the type of the thesis.
% Possible values are:
-% |bachelor| for a bachelor thesis, |bachelorproposal| for a proposal to
-% a bachelor thesis, |master| for a master thesis, |masterproposal| for
-% a proposal to a master thesis, |phdproposal| for a proposal to a PhD thesis,
+% |bachelor| for a bachelor's thesis, |bachelorproposal| for a proposal to
+% a bachelor's thesis, |master| for a master's thesis, |masterproposal| for
+% a proposal to a master's thesis, |phdproposal| for a proposal to a PhD thesis,
% |phd| for a PhD thesis in the natural sciences, |phdeng| for a PhD thesis
% in engineering, and |phdphil| for a PhD thesis in natural philosophy.
% \end{function}
@@ -307,7 +312,7 @@
% \cmd{\matrnumber} \marg{matriculation-number}
% \end{syntax}
% Specify the matriculation number of the student writing the thesis.
-% This is required for Bachelor and Master theses.
+% This is required for bachelor's and master's theses.
% \end{function}
%
% \begin{function}{\supervisor, \cosupervisor}
@@ -437,7 +442,7 @@
% We provide the \env{acknowledgements} environment to typeset acknowledgements
% for your thesis.
% Using this environment is optional.
-% Usually, bachelor and master thesis do not contain such an acknowledgements
+% Usually, bachelor's and master's thesis do not contain such an acknowledgements
% section, however, there is no general rule to this.
% \begin{verbatim}
% \begin{acknowledgements}[language]
@@ -540,6 +545,48 @@
% question;
% however, this can also be arbitrary text.
%
+% \subsection{Language Support and Hyphenation}\label{sec:doct-se2thesis-lang}
+%
+% The study regulations of the University of Passau require students to write
+% their thesis in either German or English. For both cases it is recommended
+% to load a package for the correct hyphenation patters. Usually, one can
+% either choose between the \pkg{babel} and \pkg{polyglossia} package. For a
+% detailed discussion in the differences and which to choose, please use the
+% search engine of your choice.
+%
+% For this documentation we stick with the \pkg{babel} package, which is often
+% considered to be the standard package.
+%
+% If you write your thesis in German, load \pkg{babel} in your preamble like
+% follows
+% \begin{verbatim}
+% \usepackage[ngerman]{babel}
+% \end{verbatim}
+% For a thesis in English, you have to also load the German variant plus the
+% English one as the default (see \cref{sec:doc-se2thesis-authorship} for an
+% explanation)
+% \begin{verbatim}
+% \usepackage[ngerman,main=UKenglish]{babel}
+% \end{verbatim}
+%
+% Note that by default, \LaTeX{} does not provide hyphenation for compound
+% words, which is explained in the \TeX{} Book~\cite[p.~454]{TODO} and a
+% StackExchange post\footnote{\href{https://tex.stackexchange.com/a/63234/14622}{https://tex.stackexchange.com/a/63234/14622}}. The \pkg{babel} package
+% provides a way (called shorthands) for German, which allows to reenable
+% hyphenation for compound words (as they are common on German). These
+% shorthands are by default not available for English, but they can easily be
+% added by adding
+% \begin{verbatim}
+% \useshorthands{"}
+% \addto\extrasUKenglish{\languageshorthands{ngerman}}
+% \end{verbatim}
+% after loading \pkg{babel} with the aforementioned \cmd{\usepackage}
+% macro\footnote{see https://tex.stackexchange.com/a/298844/14622}.
+%
+% \emph{Please note:} loading the \pkg{hyphenat} package is strongly discouraged
+% by the \pkg{se2thesis} maintainer because it conflicts with the \env{hyp}
+% environment provided by \pkg{se2thesis} (see \cref{sec:doc-se2thesis-summaries}).
+%
% \end{documentation}
%
% \clearpage
@@ -607,7 +654,7 @@
%
% Identify the class and give the overall version number.
% \begin{macrocode}
-\ProvidesExplClass {se2thesis} {2024-06-25} {4.2.0}
+\ProvidesExplClass {se2thesis} {2024-07-31} {4.3.1}
{A thesis class for the Chair of Software Engineering II}
% \end{macrocode}
%
@@ -1246,7 +1293,7 @@
% \end{macrocode}
% The next block generates the text that describes the thesis.
% In case of a PhD thesis, this text is predefined to match the requirements.
-% In case of a bachelor or master thesis, or a proposal thereof, we generate
+% In case of a bachelor's or master's thesis, or a proposal thereof, we generate
% a text based on the values of the |thesistype| load-time option and the
% values of the \cmd{\degreeprogramme}, \cmd{\department}, and
% \cmd{\institute} variables.
@@ -1678,7 +1725,7 @@
% We provide the following English translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{English}{se2translations}[2024/06/25]
+\ProvideDictionaryFor{English}{se2translations}[2024/07/31]
\ProvideDictTranslation{abstract}{abstract}
\ProvideDictTranslation{Abstract}{Abstract}
\ProvideDictTranslation{acknowledgement}{acknowledgement}
@@ -1703,10 +1750,10 @@
\ProvideDictTranslation{External}{External Examiner}
\ProvideDictTranslation{degreeprogramme}{programme}
\ProvideDictTranslation{Degreeprogramme}{Programme}
-\ProvideDictTranslation{Bachelor-thesis}{Bachelor Thesis}
-\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelor Thesis Proposal}
-\ProvideDictTranslation{Master-thesis}{Master Thesis}
-\ProvideDictTranslation{Master-thesis-proposal}{Master Thesis Proposal}
+\ProvideDictTranslation{Bachelor-thesis}{Bachelor's Thesis}
+\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelor's Thesis Proposal}
+\ProvideDictTranslation{Master-thesis}{Master's Thesis}
+\ProvideDictTranslation{Master-thesis-proposal}{Master's Thesis Proposal}
\ProvideDictTranslation{PhD-thesis}{PhD Thesis}
\ProvideDictTranslation{PhD-thesis-proposal}{PhD Thesis Proposal}
\ProvideDictTranslation{date}{date}
@@ -1729,7 +1776,7 @@
% We provide the following German translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{German}{se2translations}[2024/06/25]
+\ProvideDictionaryFor{German}{se2translations}[2024/07/31]
\ProvideDictTranslation{abstract}{Zusammenfassung}
\ProvideDictTranslation{Abstract}{Zusammenfassung}
\ProvideDictTranslation{acknowledgement}{Danksagung}
diff --git a/macros/latex/contrib/se2thesis/se2thesis.pdf b/macros/latex/contrib/se2thesis/se2thesis.pdf
index 84789f2fc3..bd145acb26 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/sillypage/sillypage-example.pdf b/macros/latex/contrib/sillypage/sillypage-example.pdf
index 3d8180932b..5fa9dd3048 100644
--- a/macros/latex/contrib/sillypage/sillypage-example.pdf
+++ b/macros/latex/contrib/sillypage/sillypage-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/sillypage/sillypage.dtx b/macros/latex/contrib/sillypage/sillypage.dtx
index 86982db30d..922d8b6a66 100644
--- a/macros/latex/contrib/sillypage/sillypage.dtx
+++ b/macros/latex/contrib/sillypage/sillypage.dtx
@@ -19,8 +19,8 @@
% by Phelype Oleinik, Paulo Cereda, samcarter and Ulrike Fischer.
%
%<*package>
-\def\sillypageDate{2023-03-04}
-\def\sillypageVersion{1.6}
+\def\sillypageDate{2024-07-23}
+\def\sillypageVersion{1.7}
%</package>
%<*driver>
\documentclass[a4paper,full]{l3doc}
@@ -261,9 +261,13 @@
\newcommand*\@silly { \@@_step:n }
\cs_new:Npn \@@_step:n #1
{
+ \UseTaggingSocket{@@/begin}{#1}
+ \SuspendTagging{@@}
\@@_step_aux:eN
{ \int_eval:n { \int_mod:nn { #1-1 } { \silly@steps } +1 } }
\c_false_bool
+ \ResumeTagging{@@}
+ \UseTaggingSocket{@@/end}
}
% \end{macrocode}
% \end{macro}
@@ -280,8 +284,12 @@
\newcommand*\@sillynumeral { \@@_numeral:n }
\cs_new:Npn \@@_numeral:n #1
{
+ \UseTaggingSocket{@@/begin}{#1}
+ \SuspendTagging{@@}
\exp_args:Ne \str_map_function:nN
{ \int_to_base:nn {#1} { 12 } } \@@_numeral_aux:n
+ \ResumeTagging{@@}
+ \UseTaggingSocket{@@/end}
}
\cs_new:Npn \@@_numeral_aux:n #1
{ \@@_step_aux:eN { "\char_uppercase:N #1+1 } \c_true_bool }
@@ -289,6 +297,28 @@
% \end{macro}
% \end{macro}
% \end{macro}
+%
+% \subsection{Tagging Support}
+
+% \begin{macrocode}
+\NewSocket{tagsupport/@@/begin}{1}
+\NewSocket{tagsupport/@@/end}{0}
+\NewSocketPlug{tagsupport/@@/begin}{tagged}
+ {
+ \mode_leave_vertical:
+ \tag_mc_end_push:
+ \tag_struct_begin:n {tag=Span}
+ \tag_mc_begin:n {actualtext=#1}
+ }
+\NewSocketPlug{tagsupport/@@/end}{tagged}
+ {
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+\AssignSocketPlug{tagsupport/@@/begin}{tagged}
+\AssignSocketPlug{tagsupport/@@/end}{tagged}
+% \end{macrocode}
%
% \subsection{Internals}
%
diff --git a/macros/latex/contrib/sillypage/sillypage.pdf b/macros/latex/contrib/sillypage/sillypage.pdf
index 3efa13e7d7..60305403ac 100644
--- a/macros/latex/contrib/sillypage/sillypage.pdf
+++ b/macros/latex/contrib/sillypage/sillypage.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index 1c81cd5e7a..e5e9b95b0d 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,12 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.3.20] - 2024-08-01
+
+### Fixed
+- Avoid rounding up when residual is exactly zero (see issue
+ [\#742](https://github.com/josephwright/siunitx/issues/742))
+
## [v3.3.19] - 2024-06-24
### Fixed
@@ -2120,7 +2126,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.19...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.20...HEAD
+[v3.3.20]: https://github.com/josephwright/siunitx/compare/v3.3.19...v3.3.20
[v3.3.19]: https://github.com/josephwright/siunitx/compare/v3.3.18...v3.3.19
[v3.3.18]: https://github.com/josephwright/siunitx/compare/v3.3.17...v3.3.18
[v3.3.17]: https://github.com/josephwright/siunitx/compare/v3.3.16...v3.3.17
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 5f4841816e..95f55e6cac 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-number.dtx b/macros/latex/contrib/siunitx/siunitx-number.dtx
index 2b87514375..4a7e2eb705 100644
--- a/macros/latex/contrib/siunitx/siunitx-number.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-number.dtx
@@ -2980,7 +2980,13 @@
\str_case:nnF {#1}
{
{ down } { \use_i:nn }
- { up } { \use_ii:nn }
+ { up }
+ {
+ \str_if_eq:eeTF
+ {#2} { \prg_replicate:nn { \tl_count:n {#2} } { 0 } }
+ { \use_i:nn }
+ { \use_ii:nn }
+ }
}
{
\bool_lazy_or:nnTF
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index bd97dc5750..054d525a88 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -59,6 +59,9 @@
%
% \begin{documentation}
%
+% ^^A API documentation is given on a per-module basis:
+% ^^A see the siunitx-<module>.dtx files
+%
% \end{documentation}
%
% \begin{implementation}
@@ -121,7 +124,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2024-06-24} {3.3.19}
+\ProvidesExplPackage {siunitx} {2024-08-01} {3.3.20}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 9d1c9d36db..93a003d7f5 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx.tex b/macros/latex/contrib/siunitx/siunitx.tex
index 7c6e147f00..3c0231e5b4 100644
--- a/macros/latex/contrib/siunitx/siunitx.tex
+++ b/macros/latex/contrib/siunitx/siunitx.tex
@@ -414,7 +414,7 @@ mode.
\end{LaTeXdemo}
The second operation mode for the \cs{unit} macro is an \enquote{interpreted}
-system, Here, each unit, \acro{SI} multiple prefix and power is given a macro
+system. Here each unit, \acro{SI} multiple prefix and power is given a macro
name. These are entered in a method very similar to the reading of the unit
name in English.
\begin{LaTeXdemo}
@@ -1252,7 +1252,7 @@ font variant which does not feature them.
\DescribeOption{text-subscript-command}
\DescribeOption{text-superscript-command}
In most cases, the commands \cs{textsubscript} and \cs{textsuperscript} are
-appropriagte for creating sub- and superscript material in text mode. However,
+appropriate for creating sub- and superscript material in text mode. However,
when the \pkg{realscripts} package is loaded, it is possible that the output is
not as desired. These two commands are therefore available to allow tuning of
the results. They can also be used for non-standard effects, for example as
diff --git a/macros/latex/contrib/spbmark/README.md b/macros/latex/contrib/spbmark/README.md
index 510d3a365b..9fe0dc2c5c 100644
--- a/macros/latex/contrib/spbmark/README.md
+++ b/macros/latex/contrib/spbmark/README.md
@@ -1,5 +1,5 @@
# The `spbmark` package
-Customize superscripts and subscripts (v1.46l)
+Customize superscripts and subscripts (v1.46n)
## Abstract
`spbmark` provides three commands `\super`, `\sub` and `\supersub` to improve the layout of superscripts and subscripts which can be adjusted the relative position and format, and can be used in text and math mode.
@@ -11,5 +11,5 @@ This work may be distributed and/or modified under the conditions of the CC-BY 4
| [Gitee](https://gitee.com/texno3/spbmark) | [Github](https://github.com/texno3/spbmark) | [CTAN](https://ctan.org/pkg/spbmark) |
## Maintainer
-QuYi<br/>
+Qu Yi<br/>
Email: toquyi@163.com \ No newline at end of file
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index c1a9613114..c0f3a42077 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty
index 426e75dd7f..4046c8bf9c 100644
--- a/macros/latex/contrib/spbmark/spbmark.sty
+++ b/macros/latex/contrib/spbmark/spbmark.sty
@@ -9,7 +9,7 @@
% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse}
-\ProvidesExplPackage{spbmark}{2024/07/04}{1.46l}
+\ProvidesExplPackage{spbmark}{2024/07/14}{1.46n}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
@@ -34,15 +34,13 @@
\cs_set_eq:NN \spbset \spb_set:n
\cs_new_protected:Npn \spb_mark_core_set_trad:n #1
{
- \cs_set:cpn { spb@text#1script@core }
- { \use:c { spb@text#1script@save } }
- \cs_set:cpn { spb@math@#1@core }
- { \use:c { spb@math@#1@save } }
+ \cs_set_eq:cc { spb@text#1script@core } { spb@text#1script@save }
+ \cs_set_eq:cc { spb@math@#1@core } { spb@math@#1@save }
}
\cs_new_protected:Npn \spb_mark_core_set_none:n #1
{
- \cs_set:cpn { spb@text#1script@core } { \relax }
- \cs_set:cpn { spb@math@#1@core } { \relax }
+ \cs_set_eq:cN { spb@text#1script@core } \use:n
+ \cs_set_eq:cN { spb@math@#1@core } \use:n
}
\keys_define:nn { spbmark/option }
diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex
index 6863c34e03..d452fd0904 100644
--- a/macros/latex/contrib/spbmark/spbmark.tex
+++ b/macros/latex/contrib/spbmark/spbmark.tex
@@ -1,14 +1,14 @@
\documentclass[load-preamble+]{cnltx-doc}
-\usepackage{siunitx,setspace,pifont,hologo,changelog,enumitem}
+\usepackage{siunitx,setspace,hologo,changelog,enumitem}
\usepackage[spbmark]{altsubsup}
\usepackage[margin = 1in,marginparwidth = 0.6in,footskip = 0.5in]{geometry}
\usepackage[noto]{newtxmath}
\setcnltx
{
package = spbmark,
- version = v1.46l,
- date = 2024/07/04,
+ version = v1.46n,
+ date = 2024/07/14,
authors = Qu Yi,
info = Customize superscripts and subscripts,
email = toquyi@163.com,
@@ -316,6 +316,5 @@ At present, the vertical and horizontal move are effective for the unit commands
\end{version}
\end{changelog}
\nocite{*}
-% \AddToHook{cmd/printindex/before}{\clearpage}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/subeqn/CATALOG b/macros/latex/contrib/subeqn/CATALOG
new file mode 100644
index 0000000000..9d420c825f
--- /dev/null
+++ b/macros/latex/contrib/subeqn/CATALOG
@@ -0,0 +1,17 @@
+Name: subeqn
+Problems-To: texniek at texniek.nl
+Author: J.L. Braams, Donald Arsenau, Stephen Gildea
+Version: 2.0c
+
+Description:
+
+The subeqn package implements an extension to LaTeXs's equation
+and eqnarray environments in order to be able to put labels on
+individual expressions. To this end two now environments are defined:
+subequations and subeqnarray.
+
+Keywords: latex equations,
+
+Address:
+TeXniek
+The Netherlands
diff --git a/macros/latex/contrib/subeqn/MANIFEST b/macros/latex/contrib/subeqn/MANIFEST
new file mode 100644
index 0000000000..4fe2a9a156
--- /dev/null
+++ b/macros/latex/contrib/subeqn/MANIFEST
@@ -0,0 +1,19 @@
+%
+% CONTENTS OF THE SUBEQN PACKAGE
+% ==============================
+%
+% README -- A short introduction
+% MANIFEST -- A list of files
+% CATALOG -- An entry for the macro catalog
+%
+% subeqn.dtx -- A package to number subexpressions of an equation;
+% originally by Stephen Gildea,
+% rewritten by Donald Arsenau,
+% updated for LaTeX2e by Johannes Braams
+% subeqn.pdf -- A `printed´ version of subeqn.dtx
+% subeqn-sample.pdf -- The `printed' version of the sample file
+%
+% Installation script for the various parts:
+% -------------------------------------------
+%
+% subeqn.ins -- produces subeqn.sty and subeqn-sample.tex
diff --git a/macros/latex/contrib/subeqn/README b/macros/latex/contrib/subeqn/README
new file mode 100644
index 0000000000..25f16dbe87
--- /dev/null
+++ b/macros/latex/contrib/subeqn/README
@@ -0,0 +1,14 @@
+ subeqn bundle
+
+ July 20, 2024
+
+This bundle contains a package that extends the functionality
+of LaTeX's equation and eqnarray environments.
+It provides the environments subequations and subeqnarray.
+
+Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1.3c of the License, or any later version.
diff --git a/macros/latex/contrib/subeqn/manifest.txt b/macros/latex/contrib/subeqn/manifest.txt
deleted file mode 100644
index 58e7cdb221..0000000000
--- a/macros/latex/contrib/subeqn/manifest.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-%
-% CONTENTS OF THE SUBEQN PACKAGE
-% ==============================
-%
-% manifest.txt -- This file
-%
-% subeqn.dtx -- A package to number subexpressions of an equation;
-% originally by Stephen Gildea,
-% rewritten by Donald Arsenau,
-% updated for LaTeX2e by me
-% subeqn.pdf -- A `printed version of subeqn.dtx
-%
-% Installation script for the various parts:
-% -------------------------------------------
-%
-% subeqn.ins -- produces subeqn.sty and subeqn.tex
diff --git a/macros/latex/contrib/subeqn/subeqn-sample.pdf b/macros/latex/contrib/subeqn/subeqn-sample.pdf
new file mode 100644
index 0000000000..ae4bd5c467
--- /dev/null
+++ b/macros/latex/contrib/subeqn/subeqn-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/subeqn/subeqn.dtx b/macros/latex/contrib/subeqn/subeqn.dtx
index cc49b5f0b5..b9ce870682 100644
--- a/macros/latex/contrib/subeqn/subeqn.dtx
+++ b/macros/latex/contrib/subeqn/subeqn.dtx
@@ -1,48 +1,49 @@
% \iffalse meta-comment
%
-% Copyright 1994-2004 Johannes Braams. All rights reserved.
-%
+% Copyright 1999-2024 Johannes L. Braams. All rights reserved.
+%
% This file is part of the subeqn package.
% ----------------------------------------
-%
+%
% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
% This work has the LPPL maintenance status "maintained".
-%
+%
% The Current Maintainer of this work is Johannes Braams.
-%
-% The list of all files belonging to the subeqn package is
-% given in the file `manifest.txt'.
-%
+%
+% The list of all files belonging to the supertabular package is
+% given in the file `MANIFEST.
+%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
% \fi
-% \CheckSum{76}
+%
+% \CheckSum{84}
% \iffalse
-%% File: `subeqn.dtx'
-%% Copyright (C) 1999-2004
-%% Donald Arsenau (asnd at reg.triumf.ca),
-%% Johannes Braams (TeXniek at braams.cistron.nl)
-%%
+% Copyright (C) 1999-2024
+% Donald Arsenau at reg.triumf.ca,
+% Johannes Braams texniek at texniek.nl
+%
%<*dtx>
\ProvidesFile{subeqn.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
%<package>\ProvidesPackage{subeqn}
-%<sample>\ProvidesFile{subeqn.tex}
+%<sample>\ProvidesFile{subeqn-sample.tex}
%<driver>\ProvidesFile{subeqn.drv}
%\ProvidesFile{subeqn.dtx}
- [2004/04/15 v2.0b subnumbering of equations]
+ [2024/07/21 v2.0c subnumbering of equations]
%<*driver>
\documentclass{ltxdoc}
\begin{document}
+\pagestyle{myheadings}
\providecommand{\Lenv}[1]{\textsf{#1}}
\providecommand{\Lopt}[1]{\textsf{#1}}
\providecommand{\pkg}[1]{\texttt{#1}}
@@ -60,6 +61,10 @@
% \date{\filedate}
% \maketitle
%
+% \markboth
+% {subeqn package version \fileversion\space as of \filedate}
+% {subeqn package version \fileversion\space as of \filedate}
+%
% \section{Introduction}
%
% Sometimes it is necessary to be able to refer to subexpressions
@@ -165,7 +170,7 @@
\global\c@equation\z@
}{%
% \end{macrocode}
-% When the environment is finished we restore the value ot the
+% When the environment is finished we restore the value of the
% \texttt{equation} counter.
% \begin{macrocode}
\global\c@equation\c@mainequation
@@ -220,7 +225,14 @@
\usepackage{subeqn}
\begin{document}
-This is an example ot the use of the \texttt{subeqations} package.
+\title{Sample sub-equations}
+\author{Johannes L. Braams}
+\date{\today}
+\maketitle
+
+\noindent
+This is an example of the use of the \texttt{subeqations}
+package. First we have a normal \textsf{equation} environment.
\begin{equation}
\label{a}
a^2 + b^2 = c^2
@@ -247,6 +259,7 @@ Now we start sub-numbering.
and~\ref{c2}.
\end{subequations}
+\noindent
Now lets start a \textsf{subeqnarray} environment.
\begin{subeqnarray}
\label{d}
diff --git a/macros/latex/contrib/subeqn/subeqn.ins b/macros/latex/contrib/subeqn/subeqn.ins
index e9e8689856..b3e295f28c 100644
--- a/macros/latex/contrib/subeqn/subeqn.ins
+++ b/macros/latex/contrib/subeqn/subeqn.ins
@@ -3,50 +3,41 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 1989-2004 Johannes L. Braams. All rights reserved.
-%%
-%% This file is part of the subeqn package.
-%% ----------------------------------------
-%%
-%% It 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 in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2003/12/01 or later.
-%%
-%% This work has the LPPL maintenance status "maintained".
-%%
-%% The Current Maintainer of this work is Johannes Braams.
-%%
-%% The list of all files belonging to the subeqn package is
-%% given in the file `manifest.txt.
+%%
+%% This file is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
%%
-%% The list of derived (unpacked) files belonging to the distribution
-%% and covered by LPPL is defined by the unpacking scripts (with
-%% extension .ins) which are part of the distribution.
+%% IMPORTANT NOTICE:
+%%
+%% Copyright (C) 1999-2024 Johannes L. Braams. All rights reserved.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1.3c of the License, or any later version.
%%
%% --------------- start of docstrip commands ------------------
%%
-\def\filedate{2004/04/15}
\def\batchfile{subeqn.ins}
\input docstrip.tex
+\keepsilent
\preamble
+This is a generated file.
-Copyright (C) 1999-2004 Johannes Braams. All rights reserved.
+Copyright (C) 1999-2024 Johannes Braams. All rights reserved.
This file was generated from file(s) of the subeqn package.
-----------------------------------------------------------
It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3с
of this license or (at your option) any later version.
The latest version of this license is in
http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2003/12/01 or later.
+and version 1.3с or later is part of all distributions of LaTeX
+version 2008 or later.
This work has the LPPL maintenance status "maintained".
@@ -57,7 +48,7 @@ subeqn package. You may however distribute the subeqn package
without such generated files.
The list of all files belonging to the subeqn package is
-given in the file `manifest.txt.
+given in the file `MANIFEST'.
The list of derived (unpacked) files belonging to the distribution
and covered by LPPL is defined by the unpacking scripts (with
@@ -70,7 +61,7 @@ extension .ins) which are part of the distribution.
% The sample file
-\generateFile{subeqn.tex}{t}{\from{subeqn.dtx}{sample}}
+\generateFile{subeqn-sample.tex}{t}{\from{subeqn.dtx}{sample}}
\Msg{***********************************************************}
\Msg{*}
diff --git a/macros/latex/contrib/subeqn/subeqn.pdf b/macros/latex/contrib/subeqn/subeqn.pdf
index e2247d3fdc..bf29789b71 100644
--- a/macros/latex/contrib/subeqn/subeqn.pdf
+++ b/macros/latex/contrib/subeqn/subeqn.pdf
Binary files differ
diff --git a/macros/latex/contrib/subeqnarray/CATALOG b/macros/latex/contrib/subeqnarray/CATALOG
new file mode 100644
index 0000000000..5e037823f8
--- /dev/null
+++ b/macros/latex/contrib/subeqnarray/CATALOG
@@ -0,0 +1,17 @@
+Name: subeqnarray
+Problems-To: texniek at texniek.nl
+Author: J.L. Braams, Donald Arsenau, Stephen Gildea
+Version: 2.1e
+
+Description:
+
+The subeqnarray package provides two new environments subeqnarray and
+subeqnarray* which behave like LaTeX's eqnarray and subeqnarray environments
+except the individual lines are numbered like 1a, 1b, 1c etc.
+This package is not compatible with the package subeqn.
+
+Keywords: latex equations,
+
+Address:
+TeXniek
+The Netherlands
diff --git a/macros/latex/contrib/subeqnarray/manifest.txt b/macros/latex/contrib/subeqnarray/MANIFEST
index f54bba3c8a..7c25363971 100644
--- a/macros/latex/contrib/subeqnarray/manifest.txt
+++ b/macros/latex/contrib/subeqnarray/MANIFEST
@@ -2,14 +2,18 @@
% CONTENTS OF THE SUBEQNARRAY PACKAGE
% ===================================
%
-% manifest.txt -- This file
+% README -- A short introduction
+% MANIFEST -- A list of files
+% CATALOG -- An entry for the macro catalog
%
% subeqnarray.dtx -- Numbering of individual lines of an eqnarray
% environment as subexpressions; not compatible
% with subeqn.dtx
-% subeqnarray.pdf -- A `printed version of subeqnarray.dtx
+% subeqnarray.pdf -- A `printed´ version of subeqnarray.dtx
+% subeqnarray-sample.pdf -- The `printed' versino of the sample file
%
% Installation script for the various parts:
% -------------------------------------------
%
% subeqnarray.ins -- produces subeqnarray.sty and subeqnarray.tex
+
diff --git a/macros/latex/contrib/subeqnarray/README b/macros/latex/contrib/subeqnarray/README
new file mode 100644
index 0000000000..e52f27f0bb
--- /dev/null
+++ b/macros/latex/contrib/subeqnarray/README
@@ -0,0 +1,16 @@
+ subeqnarray bundle
+
+ July 20, 2024
+
+This bundle contains a package that provides two new environments
+subeqnarray and subeqnarray* which behave like LaTeX's eqnarray and
+subeqnarray environments except the individual lines are numbered like
+1a, 1b, 1c etc.
+This package is not compatible with the package subeqn.
+
+Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1.3c of the License, or any later version.
diff --git a/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf b/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf
new file mode 100644
index 0000000000..2345c08f58
--- /dev/null
+++ b/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.dtx b/macros/latex/contrib/subeqnarray/subeqnarray.dtx
index 5b3555c312..d460ccfca3 100644
--- a/macros/latex/contrib/subeqnarray/subeqnarray.dtx
+++ b/macros/latex/contrib/subeqnarray/subeqnarray.dtx
@@ -1,43 +1,40 @@
% \iffalse meta-comment
%
-% Copyright 1994-2004 Johannes Braams. All rights reserved.
-%
+% Copyright 1998-2024 Johannes L. Braams. All rights reserved.
+%
% This file is part of the subeqnarray package.
% ---------------------------------------------
-%
+%
% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
% This work has the LPPL maintenance status "maintained".
-%
+%
% The Current Maintainer of this work is Johannes Braams.
-%
-% The list of all files belonging to the subeqnarray package is
-% given in the file `manifest.txt'.
-%
+%
+% The list of all files belonging to the supertabular package is
+% given in the file `MANIFEST'.
+%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
% \fi
-% \CheckSum{259}
-%\iffalse
+%
+% \CheckSum{264}
+%
+% \iffalse
%
% Subeqnarray package to use with LaTeX2e
%
-%% Copyright (C) 1988--2004 by Johannes Braams,
-%% all rights resserved
%%
%% Error reports please to: J. Braams
%% TeXniek
-%% Kooienswater 62
-%% 2715 AJ Zoetermeer
-%% The Netherlands
-%% Email: texniek at braams.cistron.nl
+%% Email: texniek at texniek.nl
%
% \section{Producing the documentation}
%
@@ -48,10 +45,10 @@
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
%<package>\ProvidesPackage{subeqnarray}
-%<sample>\ProvidesFile{subeqnarray.tex}
+%<sample>\ProvidesFile{subeqnarray-sample.tex}
%<driver>\ProvidesFile{subeqnarray.drv}
%\ProvidesFile{subeqnarray.dtx}
- [2004/04/15 v2.1c subeqnarray package]
+ [2024/07/20 v2.1e subeqnarray package]
%<*driver>
\documentclass{ltxdoc}
@@ -82,10 +79,8 @@
%
% \author{Johannes Braams\\
% \TeX niek\\
-% Kersengaarde 33\\
-% 2723 BP Zoetermeer\\
% The Netherlands\\
-% Internet: \texttt{TeXniek at braams.cistron.nl}}
+% Internet: \texttt{texniek at texniek.nl}}
%
% \date{\filedate}
%
@@ -114,8 +109,8 @@
% \changes{2.0}{1993/11/02}{Added support for the leqno option}
% \changes{2.0}{1993/11/02}{Added support for the fleqn option}
% \changes{2.1}{1994/02/09}{Upgrade for LaTeX2e}
-% \changes{2.1b}{1999/03/03}{Changed licensing remarks to use LPPL}
-% \changes{2.1c}{2004/04/15}{Updated address information}
+% \changes{v2.1b}{1999/03/03}{Changed licensing remarks to use LPPL}
+% \changes{v2.1e}{2024/07/20}{Updated contact info}
%
% \section{Initial Code}
%
@@ -129,8 +124,8 @@
% \end{macro}
%
% \begin{macro}{\thesubequation}
-% The representation o the counter \texttt{subequation} includes
-% the \texttt{equation} counter
+% The representation of the counter \texttt{subequation} includes
+% the \texttt{equation} counter.
% \begin{macrocode}
\def\thesubequation{\theequation\alph{subequation}}
% \end{macrocode}
@@ -197,7 +192,7 @@
\ExecuteOptions{reqno,deqn}
% \end{macrocode}
%
-% Now see if the use specified any options.
+% Now see if the user specified any options.
% \begin{macrocode}
\ProcessOptions
% \end{macrocode}
@@ -206,9 +201,9 @@
%
% \begin{macro}{\slabel}
% A new label command to refer to subequations. It works
-% like the |\label| command and was taken from \texttt{latex.tex}.
+% like the |\label| command and was taken from \texttt{latex.ltx}.
%
-% |\slabel{FOO}| writes the following on file |\@auxout|
+% |\slabel{FOO}| writes the following on file |\@auxout|:
%
% |\newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}|
%
@@ -285,7 +280,7 @@
% \end{macro}
%
% \begin{macro}{\@@subeqncr}
-% Ceck the number of columns, and insert extra |&| if needed. If
+% Check the number of columns, and insert extra |&| if needed. If
% there appear to be more than 3 columns an error is signalled.
% \begin{macrocode}
\def\@@subeqncr{\let\@tempa\relax
@@ -314,7 +309,6 @@
% \begin{macrocode}
\let\@ssubeqncr\@subeqncr
%</package>
-%<*sample>
% \end{macrocode}
% \end{macro}
%
@@ -328,6 +322,11 @@
\documentclass[fleqn]{article}
\usepackage{subeqnarray}
\begin{document}
+\title{Sample subeqnarray}
+\author{Johannes L. Braams}
+\date{\today}
+\maketitle
+
This document shows an example of the use of the \emph{subeqnarray}
environment. Here is one:
\begin{subeqnarray}
@@ -360,20 +359,4 @@ These are equations~\ref{eq10},~\ref{eq11} and~\ref{eq12}.
%
% \Finale
\endinput
-%
-%% \CharacterTable
-%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-%% Digits \0\1\2\3\4\5\6\7\8\9
-%% Exclamation \! Double quote \" Hash (number) \#
-%% Dollar \$ Percent \% Ampersand \&
-%% Acute accent \' Left paren \( Right paren \)
-%% Asterisk \* Plus \+ Comma \,
-%% Minus \- Point \. Solidus \/
-%% Colon \: Semicolon \; Less than \<
-%% Equals \= Greater than \> Question mark \?
-%% Commercial at \@ Left bracket \[ Backslash \\
-%% Right bracket \] Circumflex \^ Underscore \_
-%% Grave accent \` Left brace \{ Vertical bar \|
-%% Right brace \} Tilde \~}
-%%
+% \ No newline at end of file
diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.ins b/macros/latex/contrib/subeqnarray/subeqnarray.ins
index efa2d4da60..f28eb4717a 100644
--- a/macros/latex/contrib/subeqnarray/subeqnarray.ins
+++ b/macros/latex/contrib/subeqnarray/subeqnarray.ins
@@ -1,53 +1,49 @@
-%%
+%
%% This file will generate fast loadable files and documentation
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 1989-2004 Johannes L. Braams. All rights reserved.
-%%
-%% This file is part of the subeqnarray package.
-%% ---------------------------------------------
-%%
+%% Copyright (C) 1999-2024 Johannes L. Braams. All rights reserved.
+%%
+%% This file is part of the eqnarray distribution.
+%% -----------------------------------------------
+%%
%% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2003/12/01 or later.
-%%
-%% This work has the LPPL maintenance status "maintained".
-%%
-%% The Current Maintainer of this work is Johannes Braams.
-%%
-%% The list of all files belonging to the subeqnarray package is
-%% given in the file `manifest.txt.
-%%
-%% The list of derived (unpacked) files belonging to the distribution
-%% and covered by LPPL is defined by the unpacking scripts (with
-%% extension .ins) which are part of the distribution.
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file has the LPPL maintenance status "maintained".
+%%
+%% As this file contains legal notices, it is NOT PERMITTED to modify
+%% this file in any way that the legal information placed into
+%% generated files is changed (i.e., the files generated when the
+%% original file is executed). This restriction does not apply if
+%% (parts of) the content is reused in a different WORK producing its
+%% own generated files.
%%
%% --------------- start of docstrip commands ------------------
%%
-% ignored commands
-\def\filedate{2004/04/15}
-\def\batchfile{subeqnarray.ins}
+
\input docstrip.tex
\preamble
-Copyright (C) 1999-2004 Johannes Braams. All rights reserved.
+Copyright (C) 1999-2024 Johannes Braams. All rights reserved.
This file was generated from file(s) of the subeqnarray package.
----------------------------------------------------------------
It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3c
of this license or (at your option) any later version.
The latest version of this license is in
http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2003/12/01 or later.
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008 or later.
This work has the LPPL maintenance status "maintained".
@@ -71,7 +67,7 @@ extension .ins) which are part of the distribution.
% The sample file
-\generateFile{subeqnarray.tex}{t}{\from{subeqnarray.dtx}{sample}}
+\generateFile{subeqnarray-sample.tex}{t}{\from{subeqnarray.dtx}{sample}}
\Msg{***********************************************************}
\Msg{*}
@@ -89,4 +85,4 @@ extension .ins) which are part of the distribution.
\Msg{* Happy TeXing}
\Msg{***********************************************************}
-\endinput
+\endbatchfile
diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.pdf b/macros/latex/contrib/subeqnarray/subeqnarray.pdf
index 937120f21d..d69c233513 100644
--- a/macros/latex/contrib/subeqnarray/subeqnarray.pdf
+++ b/macros/latex/contrib/subeqnarray/subeqnarray.pdf
Binary files differ
diff --git a/macros/latex/contrib/supertabular/CATALOG b/macros/latex/contrib/supertabular/CATALOG
index 8c58273050..b6438f4bcf 100644
--- a/macros/latex/contrib/supertabular/CATALOG
+++ b/macros/latex/contrib/supertabular/CATALOG
@@ -1,7 +1,7 @@
Name: supertabular (also called supertab)
-Problems-To: texniek@braams.xs4all.nl
+Problems-To: texniek@texniek.nl
Author: J.L. Braams and T. Jurriens
-Version: 4.1g
+Version: 4.2c
Description:
@@ -23,6 +23,4 @@ ISBN 0-201-54199-8.
Address:
TeXniek
-Kersengaarde 33
-2723 BP Zoetermeer
The Netherlands
diff --git a/macros/latex/contrib/supertabular/MANIFEST b/macros/latex/contrib/supertabular/MANIFEST
index bcd27adbf4..3015e0edd5 100644
--- a/macros/latex/contrib/supertabular/MANIFEST
+++ b/macros/latex/contrib/supertabular/MANIFEST
@@ -1,6 +1,6 @@
-README - A short introduction
-MANIFEST - A list of files
-CATALOG - An entry for the macro catalog
+00readme.tx - A short introduction
+manifest.txt - A list of files
+catalog.txt - An entry for the macro catalog
Changelog - An overview of the changes to the package
supertabular.dtx - The documented version of the code, including a couple
of examples of how to use it. Needs supertabular.sty
diff --git a/macros/latex/contrib/supertabular/README b/macros/latex/contrib/supertabular/README
index ccd7c596a5..9de0746460 100644
--- a/macros/latex/contrib/supertabular/README
+++ b/macros/latex/contrib/supertabular/README
@@ -13,9 +13,9 @@ The files contained in this bundle are listed in the file MANIFEST
Supertabular can be used with LaTeX2e as a package.
-Copyright (C) 1989 - 2020 Johannes L. Braams texniek at braams.xs4all.nl
+Copyright (C) 1989 - 2024 Johannes L. Braams texniek at texniek.nl
This program can be redistributed and/or modified under the terms
of the LaTeX Project Public License Distributed from CTAN
archives in directory macros/latex/base/lppl.txt; either
-version 1 of the License, or any later version.
+version 1.3c of the License, or any later version.
diff --git a/macros/latex/contrib/supertabular/ChangeLog b/macros/latex/contrib/supertabular/supertabular.bug
index 1dedbe6cd4..7c340f0a99 100644
--- a/macros/latex/contrib/supertabular/ChangeLog
+++ b/macros/latex/contrib/supertabular/supertabular.bug
@@ -1,8 +1,29 @@
-2020-02-02 Johannes Braams <texniek at braams.xs4all.nl>
+2021-02-14 Johannes Braams <texniek at texniek.nl>
+
+ * supertabular.dtx: Issue a \penalty-\@M instead of \newpage when
+ moving the first part of a supertabular to the next page to
+ prevent the first two rows from opverlapping.
+
+2021-02-14 Johannes Braams <texniek at texniek.nl>
+
+ * supertabular.dtx: When the tablehead and/or tabletail are not
+ defeined the internal macros that store their arguments need to
+ remain empty as well. Otherwise the algorithm will always think
+ there's a head and tail with a height of 2.5 pt.
+
+2020-06-27 Johannes Braams <texniek at texniek.nl>
+
+ * supertabular.dtx: the new algorithm for calculating the height
+ of the row broke old documents, especially when small font sizes
+ are used. Made the new algorithm optional (calculate versus
+ estimate) and make sure the row height covers super- and
+ subscripts.
+
+2020-02-02 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Replaced the way the height of normal tabular
lines is calculated by basing it on the height and depth of
- \strutbox. This also ment being able to take the \extrarowheight
+ \strutbox. This also meant being able to take the \extrarowheight
from the array package into account.
Also the height of the first and subsequent heads was not taken
into account in the calculation of the available pageheigt. This
@@ -14,25 +35,25 @@
\pagesofar. Therefore we substract a little extra from
\ST@pageleft.
-2020-01-26 Johannes Braams <texniek at braams.xs4all.nl>
+2020-01-26 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Updated the copyright year and rearranged the
text around the examples in order to get the first table to split
accross a page boundary again.
-2019-01-18 Johannes Braams <texniek at braams.xs4all.nl>
+2019-01-18 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: The linenumber in the tracing information, that
is reported from within \\, is off by one when the optional
argument is missing. Therefore the input linenumber is now saved
before TeX starts scanning. Problem reported by Frank Mittelbach.
-2019-01-16 Johannes Braams <texniek at braams.xs4all.nl>
+2019-01-16 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: The option "pageshow" didn't work as it set a
too low value in \c@tracingst. Problem reported by Frank
Mittelbach.
-2019-01-12 Johannes Braams <texniek at braams.xs4all.nl>
+2019-01-12 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : The definition for the first table head was
different from the definition of the regular table heads.
This problem was reported by FMi as it produced an extra table in
@@ -44,7 +65,7 @@
themselves although this couteracts the change that was introduced
on 08-08-1999.
-2001-08-21 Johannes Braams <texniek at braams.xs4all.nl>
+2001-08-21 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : The macro \ST@next needs to be defined when
\ST@skippage was called. Therefore I moved the default definition
@@ -52,7 +73,7 @@
is called; possibly defined by \ST@newpage. This problem was
reported by Andrew Dorrell <dorrell@research.canon.com.au>.
-1999-08-08 Johannes Braams <texniek at braams.xs4all.nl>
+1999-08-08 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : No longer re-initialize the internal variable
\@table@first@head and \@table@last@tail. This made it impossible
@@ -61,20 +82,20 @@
redeclaring the firsthead and/or lasttail. Reported by Christian
Matuszewski <matuszew@informatik.uni-halle.de>.
-Fri Nov 7 20:27:27 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Fri Nov 7 20:27:27 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : For standard LaTeX we need to change
\@@startpbox not \@startpbox. Found by Peter R Wilson
- <Peter.Wilson@PSS.Boeing.com>
+ <Peter.Wilson@PSS.Boeing.com>.
-Wed Oct 8 22:35:40 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Wed Oct 8 22:35:40 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Running the documentation revealed a loop;
inside the table tail and head \\ was reset to \@tabularcr instead
of to \@@tabularcr (now: \org@tabularcr). First found by Thomas
- Esser <te@informatik.uni-hannover.de>
+ Esser <te@informatik.uni-hannover.de>.
-Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Added the mpsupertabular and mpsupertabular*
environments provided by Axel Kielhorn <A.Kielhorn@tu-bs.de>;
@@ -84,14 +105,14 @@ Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at braams.xs4all.nl>
The calculation of the available height still missed the case
where TeX has already begun the second column.
-Thu Sep 18 00:31:55 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Thu Sep 18 00:31:55 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : The \tablehead and \tabletail commands reset
the command \\; they used \cr for it. That should have been
\@tabularcr to properly deal with it's optional argument.
Found by Axel Kielhorn <A.Kielhorn@tu-bs.de>
-Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : In two column mode the parameters that
determine how much space is left on the page were not correctly
@@ -99,7 +120,7 @@ Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at braams.xs4all.nl>
completely.
Found by Jeffrey Spielberg <jspielberg@infinet-software.com>
-Tue May 20 23:46:08 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Tue May 20 23:46:08 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : \shrinkheight didn't shrink the available
height for a part of the tabular (as documented); it just *set* it
@@ -109,26 +130,26 @@ Tue May 20 23:46:08 1997 Johannes Braams <texniek at braams.xs4all.nl>
\@table@last@tail are undefined; this shoud be done globally.
Found by Axel Kielhorn <A.Kielhorn@tu-bs.de>
-Sat Apr 12 23:37:33 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Sat Apr 12 23:37:33 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : Added \ST@stretchht and \ST@prevht to improve
decision process. \estimate@lineht now also computes the
difference between a normal line height and when \arraystretch is
in effect.
-Thu Apr 10 23:33:07 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Thu Apr 10 23:33:07 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Had to repaire some documentation errors.
(found by Thomas Esser <te@informatik.uni-hannover.de>)
-Wed Apr 9 00:29:36 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Wed Apr 9 00:29:36 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : Only the first part of a supertabular can be
moved to the next page. Therefore we need to change the definition
of \ST@skippage in the middle of processing the supertabular data.
-Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx : Using a tabular environment in the cells of a
supertabular gives `interesting' results when the algorithm
@@ -136,14 +157,14 @@ Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at braams.xs4all.nl>
tabular. A number of changes were necessary to make this work.
Found by Axel Kielhorn <i0080108@ws.rz.tu-bs.de>
-Thu Feb 20 23:29:18 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Thu Feb 20 23:29:18 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Renamed \tableformat into \ST@tableformat
because the KOPMA-packages also use \tableformat and therefore
clashed with babel.
Found by Axel Kielhorn <i0080108@ws.rz.tu-bs.de>
-Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at braams.xs4all.nl>
+Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx (section{The Implementation}): Removed the use
of the page height correction for p-columns; the current algorithm
@@ -155,7 +176,7 @@ Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at braams.xs4all.nl>
page on a calculated minimum height of the table. The minimum is
the head, the tail and 1 line of tabular data.
-Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at braams.xs4all.nl>
+Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at texniek.nl>
* supertabular.dtx: Started a cleanup of the code, made source
file a full fledged .dtx file
@@ -168,7 +189,7 @@ Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at braams.xs4all.nl>
% jurriens at fwn.rug.nl P.O Box 800, 9700 AV Groningen
%
% revised by: Johannes Braams
-% texniek at braams.xs4all.nl TeXniek (NL)
+% texniek at texniek.nl TeXniek (NL)
% \def\fileversion{3.7c}
% \def\filename{supertabular sty}
% \def\filedate{1995/10/16}
diff --git a/macros/latex/contrib/supertabular/supertabular.dtx b/macros/latex/contrib/supertabular/supertabular.dtx
index be31a2d113..6bde17bbfa 100644
--- a/macros/latex/contrib/supertabular/supertabular.dtx
+++ b/macros/latex/contrib/supertabular/supertabular.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1989-2020 Johannes L. Braams. All rights reserved.
+% Copyright 1989-2021 Johannes L. Braams. All rights reserved.
%
% This file is part of the supertabular package.
% ---------------------------------------------
@@ -25,14 +25,13 @@
% extension .ins) which are part of the distribution.
% \fi
%
-% \CheckSum{1132}
+% \CheckSum{1188}
% \iffalse
%% Sourcefile `supertabular.dtx'.
%%
%% Copyright (C) 1988 by Theo Jurriens
-%% Copyright (C) 1990-2020 by Johannes Braams texniek at braams.xs4all.nl
-%% Kersengaarde 33
-%% 2723 BP Zoetermeer NL
+%% Copyright (C) 1990-2024 by Johannes Braams texniek at texniek.nl
+%% The Netherlands
%% all rights reserved.
%%
%%
@@ -43,11 +42,11 @@
%<package>\ProvidesPackage{supertabular}
%<driver>\ProvidesFile{supertabular.drv}
%\ProvidesFile{supertabular.dtx}
- [2020/02/02 v4.1g the supertabular environment]
+ [2024/07/20 v4.2c the supertabular environment]
%
%<*driver>
\documentclass{ltxdoc}
-\usepackage[debugshow]{supertabular}
+\usepackage[debugshow,calculate]{supertabular}
\newcommand{\tbsp}{\rule{0pt}{18pt}}
\begin{document}
\providecommand{\Lenv}[1]{\textsf{#1}}
@@ -59,17 +58,19 @@
%</driver>
% \fi
%
-% \changes{v4.0a}{1996/11/28}{Cleanup of the code, now a \file{.dtx}
-% source file}
-% \changes{v4.0c}{1997/02/20}{Replace \cs{tableformat} by
-% \cs{ST@tableformat} to prevent a clash with the \pkg{KOMA}
-% pacakage}
-% \changes{v4.0f}{1997/04/10}{Repaired a few typos in the
-% documentation}
-% \changes{v4.1a}{1997/09/18}{Repaired a number of typos and added
-% contributed mpsupertabular environemnts}
-% \changes{v4.1b}{1997/10/08}{Renamed \cs{@@tabularcr} to
-% \cs{org@tabularcr}}
+% \changes{v4.0a}{1996/11/28}{Cleanup of the code, now a \file{.dtx}
+% source file}
+% \changes{v4.0c}{1997/02/20}{Replace \cs{tableformat} by
+% \cs{ST@tableformat} to prevent a clash with the \pkg{KOMA}
+% pacakage}
+% \changes{v4.0f}{1997/04/10}{Repaired a few typos in the
+% documentation}
+% \changes{v4.1a}{1997/09/18}{Repaired a number of typos and added
+% contributed mpsupertabular environemnts}
+% \changes{v4.1b}{1997/10/08}{Renamed \cs{@@tabularcr} to
+% \cs{org@tabularcr}}
+% \changes{v4.2a}{2020-06-27}{renamed \cs{ST@lineht} to \cs{ST@rowht}}
+% \changes{v4.2c}{2024/07/20}{A few documentation changes}
%
% \GetFileInfo{supertabular.dtx}
% \title{The \texttt{supertabular} environment\thanks{This file
@@ -110,7 +111,13 @@
% and why \pkg{supertabular} decides to break the tabular
% environment in order to produce a new page.
% \item The option \textsf{debugshow} also adds information about
-% each line that is added to the tabular.
+% each row that is added to the tabular.
+% \item The option \textsf{estimate} (the default) has the package
+% use the old estimation-based algortihm to establish the height
+% of individual rows.
+% \item The option \textsf{calculate} has the package use the new
+% calculation-based algortihm to establish the height
+% of individual rows.
% \end{enumerate}
%
% Below is a description of the new commands and environments that
@@ -172,15 +179,15 @@
%
% \begin{itemize}
% \item When the material of a normal entry (not a p-arg) becomes
-% larger than the estimated |\ST@lineht|, overfull |\vbox|es
-% will be produced at all.
+% larger than the estimated |\ST@rowht|, overfull |\vbox|es
+% will be produced.
% \item When the last p-arg on a page gets more than 4 lines
% (probably even more than 3 lines) it will result in an overfull
% |\vbox|. Also some combinations of |\baselinestretch|
-% |\arraystretch| and a large font may lead to one line too much.
-% \item if accidentally the last line of the tabular produces a
+% |\arraystretch| and a large font may lead to one row too much.
+% \item if accidentally the last row of the tabular produces a
% newpage, on the next page the tabletail will be written
-% immediately after the tablehead. Depending on the contents this
+% immediately after the tablehead. Depending on the contents, this
% may result in an error message regarding misplaced |\noalign|.
%
% A quick but not very elegant solution: shrink the allowed height
@@ -431,6 +438,36 @@
\DeclareOption{errorshow}{\c@tracingst\z@}
\DeclareOption{pageshow}{\c@tracingst\thr@@}
\DeclareOption{debugshow}{\c@tracingst5\relax}
+% \end{macrocode}
+% In version 4.1g a new way of determining the height of the
+% average row was introduced. Instead of using an estimation, based
+% on the value of |\baselineskip| a computation was introduced,
+% based on the size of the |\strutbox|. The effect of this new
+% method was that the parial tabulars fill the page better, so less
+% \texttt{underfull vbox} message would appear. Unfortunately this
+% had a negative effect on existing documents (that don;t come out
+% like they used to) and especially when a very small font
+% (|\tiny| or |\scriptsize| was chosen for the tabular and the
+% cells contain subscripts or superscripts. It turned out that the
+% heigth and depth of a formula like $5^5_5$ exceeds the size of
+% |\strutbox|. The result is that the rows have more height (and/or
+% depth) thatn what the algorithm computed. Hence, when more rows
+% are added to the partial tabular than fit on the page. Especially
+% on the first part thisis a probem as the partial tabular becomes
+% too high and doesn't fit in the avialbale space. \TeX\ then
+% decides to move it to the next page, resulting in two
+% consecutive pages that have a lot of white space on them.
+% \changes{v4.2a}{2020-06-27}{Two new options to choose the
+% computation algorithhm}
+% \begin{macrocode}
+\DeclareOption{calculate}{\def\ST@calculate@rowht{\ST@compute@rowht}}
+\DeclareOption{estimate}{\def\ST@calculate@rowht{\ST@estimate@rowht}}
+%\def\ST@calculate@rowht{\ST@estimate@rowht}
+% \end{macrocode}
+% The default for the options is to only show errors and use the
+% old estmation algorithm (so as not to break old documents).
+% \begin{macrocode}
+\ExecuteOptions{errorshow,estimate}
\ProcessOptions
% \end{macrocode}
%
@@ -510,7 +547,7 @@
% yet be visible in the amount of space occupoed on the page
% sofar. Therefore we include the possibility to reduce the height
% of the first part of the supertabular. In order to this we need a
-% macro that indicates a aption has been put in front of the
+% macro that indicates a caption has been put in front of the
% table. We do this to reduce the risk that the first part of the
% table is too high after all and is pushed onto the next page due
% to an overfull |\vbox| condition.
@@ -523,7 +560,7 @@
% \begin{macro}{\ST@caption}
% This is a redefinition of LaTeX's |\@caption|, |\@makecaption| is
% called within a group so as not to return to |\normalsize|
-% globally. also a fix is made for the `feature' of the
+% globally. Also a fix is made for the `feature' of the
% |\@makecaption| of the document class \cls{article} and friends
% that a caption \textbf{always} gets a |\vskip 10pt| at the top
% and \textbf{none} at the bottom. If a user wants to precede his
@@ -554,14 +591,19 @@
% to \cs{@tabularcr}}
% \changes{v4.1b}{1997/10/08}{Not \cs{@tabularcr} but
% \cs{org@tabularcr}}
+% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal
+% macro \cs{@tablehead} needs to be empty as well.}
% \begin{macrocode}
\newcommand\tablehead[1]{%
- \gdef\@tablehead{%
- \noalign{%
- \global\let\@savcr=\\
- \global\let\\=\org@tabularcr}%
- #1%
- \noalign{\global\let\\=\@savcr}}}
+ \def\@ST@arg{#1}%
+ \ifx\@ST@arg\@empty\gdef\@tablehead{}\else
+ \gdef\@tablehead{%
+ \noalign{%
+ \global\let\@savcr=\\
+ \global\let\\=\org@tabularcr}%
+ #1%
+ \noalign{\global\let\\=\@savcr}}%
+ \fi}
\tablehead{}
% \end{macrocode}
% It's possible to specify a different tablehead for the first
@@ -571,17 +613,22 @@
% document.
% \changes{v4.1f}{2019/01/12}{\cs{\@table@first@head} needs the same
% definition as \cs{\@tablehead} (found by FMi)}
+% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal
+% macro \cs{@table@first@head} needs to be empty as well.}
% \begin{macrocode}
\newcommand\tablefirsthead[1]{%
- \gdef\@table@first@head{%
- \noalign{%
- \global\let\@savcr=\\
- \global\let\\=\org@tabularcr}%
- #1%
- \noalign{%
- \global\let\\=\@savcr
- \global\let\@table@first@head\undefined
- }}}
+ \def\@ST@arg{#1}%
+ \ifx\@ST@arg\@empty\gdef\@table@first@head{}\else
+ \gdef\@table@first@head{%
+ \noalign{%
+ \global\let\@savcr=\\
+ \global\let\\=\org@tabularcr}%
+ #1%
+ \noalign{%
+ \global\let\\=\@savcr
+ \global\let\@table@first@head\undefined
+ }}%
+ \fi}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -598,14 +645,19 @@
% to \cs{@tabularcr}}
% \changes{v4.1b}{1997/10/08}{Not \cs{@tabularcr} but
% \cs{org@tabularcr}}
+% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal
+% macro \cs{@tabletail} needs to be empty as well.}
% \begin{macrocode}
\newcommand\tabletail[1]{%
- \gdef\@tabletail{%
- \noalign{%
- \global\let\@savcr=\\
- \global\let\\=\org@tabularcr}%
- #1%
- \noalign{\global\let\\=\@savcr}}}
+ \def\@ST@arg{#1}%
+ \ifx\@ST@arg\@empty\gdef\@tabletail{}\else
+ \gdef\@tabletail{%
+ \noalign{%
+ \global\let\@savcr=\\
+ \global\let\\=\org@tabularcr}%
+ #1%
+ \noalign{\global\let\\=\@savcr}}%
+ \fi}
\tabletail{}
% \end{macrocode}
% It's possible to specify a different tabletail for the last
@@ -615,17 +667,22 @@
% document.
% \changes{v4.1f}{2019/01/12}{\cs{\@table@last@tail} needs the same
% definition as \cs{\@tabletail}}
+% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal
+% macro \cs{@tabletail} needs to be empty as well.}
% \begin{macrocode}
\newcommand\tablelasttail[1]{%
- \gdef\@table@last@tail{%
- \noalign{%
- \global\let\@savcr=\\
- \global\let\\=\org@tabularcr}%
- #1%
- \noalign{%
- \global\let\\=\@savcr
- \global\let\@table@last@tail\undefined
- }}}
+ \def\@ST@arg{#1}%
+ \ifx\@ST@arg\@empty\gdef\@table@last@tail{}\else
+ \gdef\@table@last@tail{%
+ \noalign{%
+ \global\let\@savcr=\\
+ \global\let\\=\org@tabularcr}%
+ #1%
+ \noalign{%
+ \global\let\\=\@savcr
+ \global\let\@table@last@tail\undefined
+ }}%
+ \fi}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -660,7 +717,7 @@
%
% \begin{macro}{\ST@trace@cr}
% A variant of |\ST@trace| that can be called from within |\\| as
-% that command is looking for an optional argument will end up
+% that command is looking for an optional argument and will end up
% scanning the next line.
% \begin{macro}{\ST@save@lineno}
% \changes{v4.1f}{2019/01/18}{Added a macro to save the current input
@@ -752,25 +809,22 @@
% \changes{v4.0b}{1997/02/04}{Removed the use of \cs{ST@pboxcorr},
% correction seems to be no longer necessary}
%
-% \begin{macro}{\ST@lineht}
+% \begin{macro}{\ST@rowht}
% \begin{macro}{\ST@stretchht}
% \changes{v4.0g}{1997/04/12}{Dimension register added}
% \begin{macro}{\ST@prevht}
% \changes{v4.0g}{1997/04/12}{Dimension register added}
-% The estimated height of a normal line is stored in
-% |\ST@lineht|. The dimension register |\ST@stretchht| is used to
-% store the difference between the `normal' line height and the
-% line height when |\arraystretch| has a non-standard value. This
-% is used in the case where p-box entries are added to the
-% tabular. The dimension register |\ST@prevht| is use to store the
-% height of the previous line to use it as an estimate for the
-% height of the next line. This is needed for a better estimate of
+% The estimated height of a normal row is stored in
+% |\ST@rowht|. The dimension register |\ST@stretchht| was used to
+% store the difference between the `normal' row height and the
+% row height when |\arraystretch| has a non-standard value. This
+% was used in the case where p-box entries are added to the
+% tabular. The dimension register |\ST@prevht| is used to store the
+% height of the previous row, to use it as an estimate for the
+% height of the next row. This is needed for a better estimate of
% when to break the tabular.
-% \changes{v4.1g}{2020/02/02}{\cs{ST@stretchht} is no longer needed,
-% will be removed in a future release}
% \begin{macrocode}
-\newdimen\ST@lineht
-%\newdimen\ST@stretchht
+\newdimen\ST@rowht
\newdimen\ST@prevht
% \end{macrocode}
% \end{macro}
@@ -907,10 +961,12 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\ST@compute@lineht}
-% \changes{v4.1g}{2020/02/02}{New macro \cs{ST@compute@lineht} to
-% replacte \cs{estimate@lineht}}
-% The height of a line in an array environemnt can be computed as:
+% \begin{macro}{\ST@compute@rowht}
+% \changes{v4.1g}{2020/02/02}{New macro \cs{ST@compute@rowht} to
+% replace \cs{ST@estimate@rowht}}
+% \changes{v4.2a}{2020-06-27}{Make sure that \cs{ST@rowht} is large
+% enough to take subscripts and superscripts into account}
+% The height of a row in an array environemnt can be computed as:
% \begin{itemize}
% \item the height of the strutbox |\ht\strutbox| (plus
% |\extrarowheight| when the \pkg{array} package is loaded),
@@ -919,34 +975,60 @@
% by |\arraystretch|.
% \end{itemize}
% \begin{macrocode}
-\def\ST@compute@lineht{%
- \ST@lineht=\ht\strutbox
+\def\ST@compute@rowht{%
+% \end{macrocode}
+% Temporarily store a formula with superscript and subscript in a
+% box in order to be able to measure its height and depth.
+% \begin{macrocode}
+ \setbox\@tempboxa=\vbox{\@arrayparboxrestore $5^5_5$}
+% \end{macrocode}
+% Use the largest height of either |\@tempboxa| or |\strutbox|.
+% \begin{macrocode}
+ \ifnum\ht\@tempboxa>\ht\strutbox
+ \ST@rowht=\ht\@tempboxa
+ \else
+ \ST@rowht=\ht\strutbox
+ \fi
+% \end{macrocode}
+% If the \textsf{array} pacakge is used we need to add the
+% value of |\extrarowheight|.
+% \begin{macrocode}
\ifx\extrarowheight\undefined\else
- \advance \ST@lineht by \extrarowheight
+ \advance \ST@rowht by \extrarowheight
+ \fi
+% \end{macrocode}
+% Also use the largest depth of either |\@tempboxa| or |\strutbox|.
+% \begin{macrocode}
+ \ifnum\dp\@tempboxa>\dp\strutbox
+ \advance\ST@rowht \dp\@tempboxa
+ \else
+ \advance\ST@rowht \dp\strutbox
\fi
- \ST@lineht = \arraystretch\ST@lineht
- \advance\ST@lineht \arraystretch\dp\strutbox
- \ST@trace\tw@{Normal Line height: \the\ST@lineht}%
+% \end{macrocode}
+% And finally multiply by |\arraystretch|.
+% \begin{macrocode}
+ \ST@rowht = \arraystretch\ST@rowht
+% \end{macrocode}
+% \begin{macrocode}
+ \ST@trace\tw@{Normal Row height: \the\ST@rowht}%
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\estimate@lineht}
+% \begin{macro}{\ST@estimate@rowht}
% Estimates the height of normal line taking |\arraystretch| into
% account. Also computes the difference between a normal line and a
% `stretched' one.
% \changes{v4.0b}{1997/02/04}{Removed use of \cs{ST@pboxcorr}}
% \changes{v4.0g}{1997/04/12}{Added the computation of
% \cs{ST@stretchht}}
-% This macro will be removed in a future release.
+% \changes{v4.2a}{2020-06-27}{removed the computation of
+% \cs{ST@stretchht} as it is no longer used}
% \begin{macrocode}
-\def\estimate@lineht{%
- \ST@lineht=\arraystretch \baslineskp
- \global\advance\ST@lineht by 1\p@
- \ST@stretchht\ST@lineht\advance\ST@stretchht-\baslineskp
- \ifdim\ST@stretchht<\z@\ST@stretchht\z@\fi
- \ST@trace\tw@{Average line height: \the\ST@lineht}%
- \ST@trace\tw@{Stretched line height: \the\ST@stretchht}%
+\def\ST@estimate@rowht{%
+ \ST@rowht=\arraystretch \baslineskp
+ \global\advance\ST@rowht by 1\p@
+ \ST@trace\tw@{Average Row height: \the\ST@rowht}%
}
% \end{macrocode}
% \end{macro}
@@ -1071,23 +1153,23 @@
\ST@tailht=\ht\@tempboxa\advance\ST@tailht\dp\@tempboxa
\fi
% \end{macrocode}
-% We add the average height of a line to this because when we
+% We add the average height of a row to this because when we
% decide to continue the tabular we need to have enough space left
-% for one line and the tail.
+% for one row \emph{and} the tail.
% \begin{macrocode}
- \advance\ST@tailht by \ST@lineht
+ \advance\ST@tailht by \ST@rowht
\ST@trace\tw@{Height of tail: \the\ST@tailht}%
\ST@trace\tw@{Maximum height of tabular: \the\ST@pageleft}%
\@tempdima\ST@headht
% \end{macrocode}
% \changes{v4.0b}{1997/02/04}{Base the decision whether to start on a
-% new page on the total of headheight, tailht and lineht}
+% new page on the total of headheight, tailht and rowht}
% Now we decide whether we can continue on the current page or
% whether we need to start on a new page. We assume that the
% minimum height of a tabular is the height of the head, the tail
-% and one line of data. If that doesn't fit a new page is started.
+% and one row of data. If that doesn't fit a new page is started.
% \begin{macrocode}
- \advance\@tempdima\ST@lineht
+ \advance\@tempdima\ST@rowht
\advance\@tempdima\ST@tailht
\ST@trace\tw@{Minimum height of tabular: \the\@tempdima}%
\ifnum\@tempdima>\ST@pageleft
@@ -1164,7 +1246,7 @@
\global\let\@oldcr=\\
% \end{macrocode}
% Save the current value of |\baselineskip|, as we need it in the
-% calculation of the average height of a line.
+% calculation of the average height of a row.
% \begin{macrocode}
\def\baslineskp{\baselineskip}%
% \end{macrocode}
@@ -1174,9 +1256,9 @@
\ifx\undefined\@classix
% \end{macrocode}
% Save old |\@tabularcr| and insert the definition of
+% |\ST@tabularcr|.
% \changes{v4.1c}{1997/11/07}{For standard \LaTeX\ we need to change
% \cs{@@startpbox}, \emph{not} \cs{@startpbox}}
-% |\ST@tabularcr|.
% \begin{macrocode}
\let\org@tabularcr\@tabularcr
\let\@tabularcr\ST@tabularcr
@@ -1210,20 +1292,20 @@
\fi
% \end{macrocode}
% The first part of a supertabular may be moved on to the next page
-% if it doesn't fit on the current page afterall. Subsequent parts
+% if it doesn't fit on the current page after all. Subsequent parts
% can not be moved; therefor we will have to switch the definition
-% of |\ST@skippart| around.
+% of |\ST@skippage| around.
% \changes{v4.0e}{1997/04/09}{Make sure that only the first part of a
% supertabular can be moved to the next page.}
% \begin{macrocode}
\let\ST@skippage\ST@skipfirstpart
% \end{macrocode}
-% Now we can estimate the average line height and the height of the
+% Now we can estimate the average row height and the height of the
% first page of the \Lenv{supertabular}.
% \changes{v4.0i}{1997/09/18}{Added \cs{noindent}}
-% \changes{v4.1g}{2020/02/02}{Now call \cs{ST@compute@lineht}}
+% \changes{v4.1g}{2020/02/02}{Now call \cs{ST@calculate@rowht}}
% \begin{macrocode}
- \ST@compute@lineht
+ \ST@calculate@rowht
\@calfirstpageht
\noindent
}
@@ -1544,20 +1626,20 @@
% \begin{macrocode}
\def\ST@cr{%
\noalign{%
- \ifnum\ST@pboxht<\ST@lineht
+ \ifnum\ST@pboxht<\ST@rowht
% \end{macrocode}
-% If there is a non-empty line, but an empty parbox, then
-% |\ST@pboxht| might be non-zero, but too small thereby breaking
-% the algorithm. Therefor we estimate the height of the line to be
-% |\ST@lineht| in this case.
+% If there is a non-empty row, but an empty parbox, then
+% |\ST@pboxht| might be non-zero, but too small, thereby breaking
+% the algorithm. Therefor we estimate the height of the row to be
+% |\ST@rowht| in this case.
% \begin{macrocode}
- \global\advance\ST@pageleft -\ST@lineht
+ \global\advance\ST@pageleft -\ST@rowht
% \end{macrocode}
% And we store that fact in |\ST@prevht|.
-% \changes{v4.0g}{1997/04/12}{store the height of the previous line in
+% \changes{v4.0g}{1997/04/12}{store the height of the previous row in
% \cs{ST@prevht}}
% \begin{macrocode}
- \global\ST@prevht\ST@lineht
+ \global\ST@prevht\ST@rowht
\else
% \end{macrocode}
% When the parbox was not empty we take into account its height
@@ -1605,11 +1687,11 @@
\else
% \end{macrocode}
% When there is not enough space left on the current page, we start
-% a new page. To compute the amount of space need we use the
-% height of the previous line (|\ST@prevht|) as an estimation of
-% the height of the next line. If we are processing a
+% a new page. To compute the amount of space needed we use the
+% height of the previous row (|\ST@prevht|) as an estimation of
+% the height of the next row. If we are processing a
% \Lenv{mpsupertabular} we need to take the height of the footnotes
-% into account.
+% into account as well.
% \changes{v4.0g}{1997/04/12}{Leave room for both \cs{ST@tailht}
% \emph{and} \cs{ST@prevht}}
% \changes{v4.1a}{1997/09/19}{Take care of space needed for
@@ -1659,10 +1741,19 @@
% \begin{macrocode}
\global\advance\ST@pageleft\pagetotal
% \end{macrocode}
-% Then we can set |\ST@pagesofar| to $0$ and start the new page.
+% Then we can set |\ST@pagesofar| to $0$...
% \begin{macrocode}
\global\ST@pagesofar\z@
- \newpage
+% \end{macrocode}
+% ... and start the new page, but in this special case we need to
+% trigger the output routine directly by issuing a |\penalty|
+% rather than calling |\newpage| as that macro effectively issues a
+% |\vskip-\maxdepth| which makes the first two rows of the tabular
+% overlap.
+% \changes{v4.2b}{2021-02-14}{Issue a \cs{penalty} instead of
+% \cs{newpage} to trigger the output routine.}
+% \begin{macrocode}
+ \penalty -\@M
% \end{macrocode}
%
% Finally we make sure that this macro can only be executed once
diff --git a/macros/latex/contrib/supertabular/supertabular.pdf b/macros/latex/contrib/supertabular/supertabular.pdf
index 444cbfdcd7..a24a8c865c 100644
--- a/macros/latex/contrib/supertabular/supertabular.pdf
+++ b/macros/latex/contrib/supertabular/supertabular.pdf
Binary files differ
diff --git a/macros/latex/contrib/synthslant/LICENSE b/macros/latex/contrib/synthslant/LICENSE
index f8b699e6eb..888d9e68e7 100644
--- a/macros/latex/contrib/synthslant/LICENSE
+++ b/macros/latex/contrib/synthslant/LICENSE
@@ -355,11 +355,11 @@ Here is an example of such a notice and statement:
%% Copyright 2005 M. Y. Name
%
% This work may be distributed and/or modified under the
- % conditions of the LaTeX Project Public License, either version 1.3
+ % conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
- % http://www.latex-project.org/lppl.txt
- % and version 1.3 or later is part of all distributions of LaTeX
+ % https://www.latex-project.org/lppl.txt
+ % and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
diff --git a/macros/latex/contrib/synthslant/Makefile b/macros/latex/contrib/synthslant/Makefile
index d8de419230..8ef77a6982 100644
--- a/macros/latex/contrib/synthslant/Makefile
+++ b/macros/latex/contrib/synthslant/Makefile
@@ -19,8 +19,9 @@ DVIPS := dvips
DVIPS_FLAGS := -d1 # debug \special{}
-LATEX := /usr/bin/env max_print_line=2147483647 pdflatex
-LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode
+LATEX_PROPER := pdflatex
+LATEX := /usr/bin/env max_print_line=2147483647 $(LATEX_PROPER)
+LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode -output-directory=.
LATEX_RERUN_TRIGGER := '^Package rerunfilecheck Warning: File [^ ]* has changed'
LATEX_WARNING := '^LaTeX (|[A-Za-z0-9_]* )Warning:'
@@ -33,18 +34,9 @@ METAPOST := mpost
METAPOST_FLAGS := -file-line-error -interaction=nonstopmode -tex=latex
-SPELLCHECK := aspell
-SPELLCHECK_FLAGS := \
- --add-tex-command='citenum p' --add-tex-command='code p' \
- --add-tex-command='Cref p' --add-tex-command='cref p' \
- --add-tex-command='cs p' \
- --add-tex-command='DescribeEnv p' --add-tex-command='DescribeMacro p' \
- --add-tex-command='marg p' --add-tex-command='meta p' \
- --add-tex-command='oarg p' \
- --lang=en_US --mode=tex
-
-
-SOURCE_FILES := LICENSE Makefile synthslant.dtx synthslant.ins
+PROJECT_NAME := synthslant
+SOURCE_FILES := LICENSE Makefile README.md synthslant.dtx synthslant.ins
+DOCUMENTATION_FILES := synthslant-gauge.pdf synthslant.pdf
@@ -57,7 +49,7 @@ sty: synthslant.sty
.PHONY: pdf
-pdf: doc gauge
+pdf: doc gauge test
.PHONY: doc
@@ -68,19 +60,42 @@ doc: synthslant.pdf
gauge: synthslant-gauge.pdf
-.PHONY: cpio
-cpio:
- cd ..; \
- echo $(addprefix synthslant/,$(SOURCE_FILES)) | \
- cpio -o | \
- gzip > "synthslant-$$(date +%Y-%m-%d).cpio.gz"
+.PHONY: test
+test: synthslant-minimal-test.pdf
+
+
+export TEMPORARY_DIRECTORY
+
+
+.PHONY: dist
+dist:
+ $(eval TEMPORARY_DIRECTORY := $(shell mktemp -d))
+ trap '$(RM) -r $(TEMPORARY_DIRECTORY); exit 1' HUP INT QUIT TERM; $(MAKE) __dist
+ $(RM) -r $(TEMPORARY_DIRECTORY)
+
+
+.PHONY: __dist
+__dist: LATEX_FLAGS += -interaction=batchmode
+__dist: $(DOCUMENTATION_FILES)
+ test -d '$(TEMPORARY_DIRECTORY)'
+ test -w '$(TEMPORARY_DIRECTORY)'
+ mkdir $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)
+ cp $(SOURCE_FILES) $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)
+ mkdir $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)/docs
+ cp $(DOCUMENTATION_FILES) $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)/docs
+ tar czf $(PROJECT_NAME).tar.gz -C $(TEMPORARY_DIRECTORY) $(PROJECT_NAME)
-.PHONY: tar
-tar:
- cd ..; \
- tar czf "synthslant-$$(date +%Y-%m-%d).tar.gz" \
- $(addprefix synthslant/,$(SOURCE_FILES))
+.PHONY: distcheck
+distcheck: LATEX_FLAGS += -interaction=batchmode
+distcheck: dist
+ $(eval TEMPORARY_DIRECTORY := $(shell mktemp -d))
+ test -d '$(TEMPORARY_DIRECTORY)'
+ test -w '$(TEMPORARY_DIRECTORY)'
+ tar xzf $(PROJECT_NAME).tar.gz -C $(TEMPORARY_DIRECTORY)
+ $(MAKE) --directory=$(TEMPORARY_DIRECTORY)/$(PROJECT_NAME) LATEX_FLAGS='$(LATEX_FLAGS)' all
+ $(RM) -r $(TEMPORARY_DIRECTORY)
+ @printf '\n\ndistcheck passed.\n'
.PHONY: clean
@@ -91,6 +106,7 @@ clean:
$(RM) mptextmp.* mpxerr.tex
$(RM) README README.html RELEASE-HOWTO RELEASE-HOWTO.html
$(RM) compare-with-the-gimp.eps compare-with-the-gimp.png
+ $(RM) $(PROJECT_NAME).tar.gz
.PHONY: mostlyclean
@@ -99,35 +115,27 @@ mostlyclean: clean
.PHONY: maintainer-clean
maintainer-clean: mostlyclean
- $(RM) ./*.base64 ./*.ist ./*.mp ./*.sty ./*.tex
+ $(RM) ./*.base64 ./*.gst ./*.ist ./*.mp ./*.sty ./*.tex
.PHONY: perf
perf: synthslant-gauge.tex synthslant.sty
- perf stat --repeat=10 -- $(LATEX) $(LATEX_FLAGS) -interaction batchmode -draftmode $<
+ perf stat --repeat=10 -- $(LATEX) $(LATEX_FLAGS) -interaction=batchmode -draftmode $<
.PHONY: tool-check
tool-check:
- @printf '*** LATEX = "%s"\n' '$(LATEX)'
- $(LATEX) --version
+ @printf '*** LATEX_PROPER = "%s"\n' '$(LATEX_PROPER)'
+ $(LATEX_PROPER) --version
+ @printf '\n\n*** BibTeX\n'
+ bibtex --version
@printf '\n\n*** MAKEINDEX = "%s"\n' '$(MAKEINDEX)'
- $(MAKEINDEX) < /dev/null
+ $(MAKEINDEX) < /dev/null
@printf '\n\n*** METAPOST = "%s"\n' '$(METAPOST)'
$(METAPOST) --version
@printf '\n*** BASE64 = "%s"\n' '$(BASE64)'
$(BASE64) --version
- @printf '\n\nTool check passed.\n'
-
-
-.PHONY: spell-check
-spell-check:
- @sed -e '\#<DISABLE-SPELL-CHECK/>#d' \
- -e '\#<DISABLE-SPELL-CHECK>#,\#</DISABLE-SPELL-CHECK>#d' < synthslant.dtx | \
- sed -e 's/^ *%%*//' | \
- sed -e 's/\\-//g' -e 's/|[^|]*|/ /g' | \
- $(SPELLCHECK) $(SPELLCHECK_FLAGS) list | \
- sort | uniq | fmt | sed -e 's/ / /g'
+ @printf '\n\ntool check passed.\n'
.PHONY: update-docs
@@ -142,8 +150,12 @@ all: Make everything there is to make. This is the .DEFAULT_GOAL.
clean: Remove some products.
-cpio: In the parent directory create a cpio(1) archive of the
- project source files whose name is time-stamped.
+dist: Create a tar file of the project source files and the PDF
+ documentation files. The archive is in the form and has a
+ name that CTAN prefers.
+
+distcheck: Create a tar file of the project source files, unpack it in
+ a different location and build all targets.
doc: Build "synthslant.pdf" the Syntslant documentation.
@@ -160,15 +172,22 @@ pdf: Build doc: and gauge:.
sty: Only extract "synthslant.sty" from "synthslant.dtx". This
operation requires LaTeX (-> $(LATEX)) and nothing else.
-tar: In the parent directory create a tar(1) file of the project
- source files whose name is time-stamped.
+test: Run some tests. Currently only compiles a minimal document
+ to check whether "synthslant.sty" contains all the necessary
+ \RequirePackage directives.
tool-check: Check whether some of the required tools to build the
project are available.
+update-docs: Copy the documentation files into the "docs"
+ sub-directory.
+
Selected Implicit Rules
-----------------------
+%: %.html
+ Convert HTML to plain text. Requires w3m(1).
+
%.dvi %.pdf: %.dtx
Run LaTeX or pdfLaTeX (-> $(LATEX)) on dtx source until a
fix-point is reached.
@@ -177,6 +196,9 @@ Selected Implicit Rules
Run LaTeX or pdfLaTeX (-> $(LATEX)) on tex file until a
fix-point is reached.
+%.html: %.md
+ Convert markdown to HTML. Requires markdown(1).
+
%.mx.pdf: %.dvi
Convert dvi to pdf via dvipdfmx (-> $(DVIPDFMX)).
@@ -187,9 +209,9 @@ Selected Implicit Rules
Some Explicit Rules
-------------------
README.html:
- Convert "README.md" to html. Requires markdown(1).
+ Convert "README.md" to html.
-README: Convert "README.html" to plain text. Requires w3m(1).
+README: Convert "README.html" to plain text.
endef
@@ -205,8 +227,8 @@ help:
define MAKE_INDEX_AND_GLOSSARY
sed -e '/@/d' < $*.idx > ,$*.idx; mv ,$*.idx $*.idx; \
-$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s synthslant.ist -t $*.ilg -o $*.ind $*.idx; \
-$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s gglo.ist -t $*.glg -o $*.gls $*.glo
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s $*.ist -t $*.ilg -o $*.ind $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s $*.gst -t $*.glg -o $*.gls $*.glo
endef
define GREP_LATEX_WARNINGS
@@ -250,7 +272,13 @@ endef
%.mps: %.mp
- $(METAPOST) -s 'outputtemplate="%j.mps"' $(METAPOST_FLAGS) $<
+ $(METAPOST) -s 'outputtemplate="%j.mps"' $(METAPOST_FLAGS) $< || { \
+ printf '=== $*.log ===\n'; \
+ cat $*.log; \
+ printf '\n\n=== mpxerr.log ===\n'; \
+ cat mpxerr.log; \
+ false; \
+ } 1>&2
%.eps: %.png
@@ -265,7 +293,8 @@ endef
-synthslant.sty synthslant.ist synthslant-gauge.tex \
+synthslant.sty synthslant.ist \
+synthslant-gauge.tex synthslant-minimal-test.tex \
compare-with-the-gimp.png.base64 shear-transform.mp title.mp: \
synthslant.ins synthslant.dtx
$(LATEX) $(LATEX_FLAGS) $<
diff --git a/macros/latex/contrib/synthslant/README.md b/macros/latex/contrib/synthslant/README.md
index 1b1c719189..efc20fd37e 100644
--- a/macros/latex/contrib/synthslant/README.md
+++ b/macros/latex/contrib/synthslant/README.md
@@ -1,3 +1,6 @@
+![distcheck status](https://github.com/cspiel/synthslant/actions/workflows/distcheck.yml/badge.svg)
+
+
# SynthSlant &ndash; Synthetic slanting of glyphs
LaTeX package `synthslant` slants short pieces of text to the right or to the left.
diff --git a/macros/latex/contrib/synthslant/RELEASE-HOWTO.md b/macros/latex/contrib/synthslant/RELEASE-HOWTO.md
deleted file mode 100644
index 13435ef66d..0000000000
--- a/macros/latex/contrib/synthslant/RELEASE-HOWTO.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# How to prepare a new release
-
-... and not make too many mistakes.
-
-
-1. Check that the work-area is clean with respect to **git**-tracked
- files.
-
- ``` git status ```
-
-1. Update the date stamp of `\ProvidesPackage`.
-
-1. (Temporarily) Zero the `\overfullrule`s of the documentation and
- the example files.
-
-1. Thoroughly clean the work-area:
-
- ```make maintainer-clean```
-
-1. Rebuild:
-
- ```make```
-
-1. Check that all _*.sty_ and _*.pdf_ files are in good shape.
-
-1. Push the documentation files created in the previous step down into
- the *docs* directory:
-
- ```make update-docs```
-
-1. Undo the `\overfullrule` change.
-
-1. Commit the changes:
-
- ```
- git add .
- ```
-
- and finally
-
- ```
- git commit
- ```
-
-1. Tag the commit with the version string of `\ProvidesPackage`:
-
- ```git tag v1.23```
-
-1. Push the changes to the public repository:
-
- ```git push origin master --tags```
diff --git a/macros/latex/contrib/synthslant/docs/index.md b/macros/latex/contrib/synthslant/docs/index.md
deleted file mode 100644
index c8c312f388..0000000000
--- a/macros/latex/contrib/synthslant/docs/index.md
+++ /dev/null
@@ -1,4 +0,0 @@
-### Package Documentation
-
-- Comprehensive `synthslant` documentation: [synthslant.pdf](https://cspiel.github.io/synthslant/synthslant.pdf)
-- `synthslant` test and demonstration: [synthslant-gauge.pdf](https://cspiel.github.io/synthslant/synthslant-gauge.pdf)
diff --git a/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf b/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf
index 425e7944ef..762c1e00a0 100644
--- a/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf
+++ b/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf
Binary files differ
diff --git a/macros/latex/contrib/synthslant/docs/synthslant.pdf b/macros/latex/contrib/synthslant/docs/synthslant.pdf
index 9b034b86c3..555101ee3c 100644
--- a/macros/latex/contrib/synthslant/docs/synthslant.pdf
+++ b/macros/latex/contrib/synthslant/docs/synthslant.pdf
Binary files differ
diff --git a/macros/latex/contrib/synthslant/synthslant.dtx b/macros/latex/contrib/synthslant/synthslant.dtx
index f5424cf7fa..6c052c64a7 100644
--- a/macros/latex/contrib/synthslant/synthslant.dtx
+++ b/macros/latex/contrib/synthslant/synthslant.dtx
@@ -3,11 +3,11 @@
% Copyright (C) 2024 by Ch. L. Spiel
%
% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3 of this
+% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
+% httpc://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
% version 2003/12/01 or later.
%
% \fi
@@ -26,7 +26,6 @@
\PassOptionsToClass{a4paper}{article}
\PassOptionsToPackage{hyperfootnotes=false}{hyperref}
-\PassOptionsToPackage{charter, scale=1.06}{newtxmath}
\PassOptionsToPackage{dvipsnames}{xcolor}
\usepackage{amsmath}
@@ -52,6 +51,7 @@
\newcommand*{\textls}[2][]{#2}
\fi
\usepackage{needspace}
+\usepackage[section]{placeins}
\usepackage{ragged2e}
\usepackage{setspace}
\usepackage[slant=.18, negslant=-.16]{synthslant}
@@ -65,7 +65,7 @@
\usepackage[default, lining, proportional, regular, semibold]{sourceserifpro}
\usepackage[lining, proportional, regular, semibold]{sourcesanspro}
\usepackage[lining, regular]{sourcecodepro}
-\usepackage[xcharter]{newtxmath}
+\usepackage[scaled=1.08, uprightscript, xcharter]{newtxmath}
\setstretch{1.04166}% \baselineskip: 12.5pt
@@ -74,15 +74,15 @@
\newcommand*{\fontclan}{\expandafter\@get@fontclan\f@family\relax}
\makeatother
-\newcommand*{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
-\newcommand*{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
-\newcommand*{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
-\newcommand*{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
+\DeclareRobustCommand{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
+\DeclareRobustCommand{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
+\DeclareRobustCommand{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
+\DeclareRobustCommand{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
-\newcommand*{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
-\newcommand*{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
-\newcommand*{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
-\newcommand*{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
+\DeclareRobustCommand{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
+\DeclareRobustCommand{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
+\DeclareRobustCommand{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
+\DeclareRobustCommand{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
\newcommand*{\nativetextfraction}[2]
{\mbox{\textnumerator{#1}\textfractionsolidus\textdenominator{#2}}}
@@ -92,21 +92,23 @@
\newenvironment*{tabfigures}
{\edef\rmdefault{\fontclan-T\sourceserifpro@figurestyle}\rm\ignorespaces}
{\ignorespacesafterend}
-
-\newcommand*{\elseries}{\def\mdseries@rm{el}\def\mdseries@sf{el}\def\mdseries@tt{el}}
-\newcommand*{\textel}[1]{{\elseries\textmd{#1}}}
-\newcommand*{\lseries}{\def\mdseries@rm{l}\def\mdseries@sf{l}\def\mdseries@tt{l}}
-\newcommand*{\textl}[1]{{\lseries\textmd{#1}}}
-%%--\newcommand*{\mdseries}{\def\mdseries@rm{m}\def\mdseries@sf{m}\def\mdseries@tt{m}}
-%%--\newcommand*{\textmd}[1]{{\mdseries\textmd{#1}}}
-\newcommand*{\sbseries}{\def\bfseries@rm{sb}\def\bfseries@sf{sb}\def\bfseries@tt{sb}}
-\newcommand*{\textsb}[1]{{\sbseries\textbf{#1}}}
-\newcommand*{\bseries}{\def\bfseries@rm{b}\def\bfseries@sf{b}\def\bfseries@tt{b}}
-\newcommand*{\textb}[1]{{\bseries\textbf{#1}}}
-\newcommand*{\ebseries}{\def\bfseries@rm{k}\def\bfseries@sf{eb}\def\bfseries@tt{k}}
-\newcommand*{\texteb}[1]{{\ebseries\textbf{#1}}}
\makeatother
+\DeclareRobustCommand{\elseries}{\fontseries{el}\selectfont}
+\DeclareTextFontCommand{\textel}{\elseries}
+\DeclareRobustCommand{\lseries}{\fontseries{l}\selectfont}
+\DeclareTextFontCommand{\textl}{\lseries}
+%%--\DeclareRobustCommand{\mdseries}{\fontseries{m}\selectfont}
+%%--\DeclareTextFontCommand{\textmd}{\mdseries}
+\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
+\DeclareTextFontCommand{\textsb}{\sbseries}
+\DeclareRobustCommand{\bseries}{\fontseries{b}\selectfont}
+\DeclareTextFontCommand{\textb}{\bseries}
+\DeclareRobustCommand{\ebseries}{\fontseries{eb}\selectfont}
+\DeclareTextFontCommand{\texteb}{\ebseries}
+\DeclareRobustCommand{\ubseries}{\fontseries{k}\selectfont}
+\DeclareTextFontCommand{\textub}{\ubseries}
+
\usepackage{cleveref}
@@ -119,7 +121,7 @@
citecolor = blue,
colorlinks = true,
linkcolor = blue,
- linktocpage = false,
+ linktocpage = true,
pdfauthor={Dr. Christoph L. Spiel},
pdfcreationdate={\pdffiledate},
pdfkeywords={LaTeX, font, italic, oblique, slant, upright},
@@ -131,9 +133,94 @@
}
+\SetExtraKerning[context=drop-left-sidebearing, name=source-code-normal, unit=space]
+ {font={T1/SourceCodePro-LF/m/n/44, T1/SourceCodePro-TLF/m/n/44}}
+ {
+ 1={-150,},
+ 2={-120,},
+ 3={-120,},
+ 4={-40,},
+ A={-100,},
+ B={-170,}
+ }
+
+\newlength{\sectiontocindent}
+\newlength{\sectionnumberwidth}
+\newlength{\subsectiontocindent}
+\newlength{\subsectionnumberwidth}
+\newlength{\subsubsectiontocindent}
+\newlength{\subsubsectionnumberwidth}
+
+\setlength{\sectiontocindent}{0pt}
+\setlength{\sectionnumberwidth}{40pt}
+\setlength{\subsectiontocindent}{40pt}
+\setlength{\subsectionnumberwidth}{25pt}
+\setlength{\subsubsectiontocindent}{65pt}
+\setlength{\subsubsectionnumberwidth}{30pt}
+
\makeatletter
-\renewcommand*{\@dotsep}{10000} % suppress leaders
-\patchcmd{\@dottedtocline}{\normalfont}{\bfseries}{\relax}{\PatchingFailed}
+\renewcommand*{\l@section}[2]
+ {\ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength{\@tempdima}{\sectionnumberwidth}%
+ \begingroup
+ \def\numberline##1{\hb@xt@\@tempdima{%
+ \tt\lseries
+ \fontsize{44}{0}\selectfont
+ \microtypecontext{kerning=drop-left-sidebearing}%
+ \iffalse\raisebox{-30pt}[0pt][0pt]{\rule{0.1pt}{40pt}}\fi
+ \textcolor{customred3}{##1}%
+ \hfil}}%
+ \parindent \z@
+ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ \bfseries
+ \iffalse
+ \nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss #2\kern-\p@\kern\p@}%
+ \else
+ {\sffamily\large #1}\quad
+ {#2}\hfil\hbox{}
+ \fi
+ \par
+ \endgroup
+ \fi}
+
+\renewcommand*{\@dottedtocline}[5]
+ {\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ \@plus.2\p@
+ \begingroup
+ \leftskip #2\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima
+ \null\nobreak
+ \hskip -\leftskip
+ {#4}\nobreak
+ \iffalse
+ \leaders\hbox{$\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill
+ \nobreak\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5\kern-\p@\kern\p@}%
+ \else
+ \hbox{\quad\normalfont\bfseries #5}\nobreak\hfill\hbox{}%
+ \fi
+ \par
+ \endgroup
+ \fi}
+
+\renewcommand*{\l@subsection}{\@dottedtocline{2}{\subsectiontocindent}{\subsectionnumberwidth}}
+\renewcommand*{\l@subsubsection}{\@dottedtocline{3}{\subsubsectiontocindent}{\subsubsectionnumberwidth}}
+\newrobustcmd*{\tocsquashedsubsections}
+ {\def\l@subsection{\@dottedtocline{2}{0pt}{\subsubsectionnumberwidth}}%
+ \def\l@subsubsection{\@dottedtocline{3}{0pt}{\subsubsectionnumberwidth}}}
\makeatother
@@ -156,8 +243,10 @@
\newcommand*{\floatcaptionwidth}{.79\textwidth}
-\captionsetup[figure]{font=small, justification=centerlast, labelfont=sc, width=\floatcaptionwidth}
-\captionsetup[table]{font=small, justification=centerlast, labelfont=sc, width=\floatcaptionwidth}
+\captionsetup[figure]{font=small, justification=centerlast,
+ labelfont=sc, width=\floatcaptionwidth}
+\captionsetup[table]{font=small, justification=centerlast,
+ labelfont=sc, width=\floatcaptionwidth}
\newsavebox{\listlabelbox}
@@ -188,13 +277,15 @@
\fancypagestyle{pagenumberonly}{
+ \fancyhf{}
\fancyhead[L]{}
\fancyhead[R]{\thepage}
}
-\pagestyle{fancy}
-\fancyhf{}
-\fancyhead[L]{\rightmark}
-\fancyhead[R]{\textsf{\thepage}}
+\fancypagestyle{fancy}{
+ \fancyhf{}
+ \fancyhead[L]{\rightmark}
+ \fancyhead[R]{\thepage}
+}
\newcommand*{\resetfancyhead}
{\fancyhead[L]{\textsf{\textsc{\textls[20]{\nouppercase\rightmark}}}}}
@@ -236,12 +327,9 @@
\pretocmd{\DescribeMacro}{\needspace{25pt}}{\relax}{\PrependingFailed}
-\setcounter{IndexColumns}{2}
-
-
\setlength{\columnsep}{20pt}
\setlength{\skip\footins}{25pt}
-\setlength{\overfullrule}{3pt}
+\setlength{\overfullrule}{0pt}
@@ -273,15 +361,19 @@
\newcommand*{\citenum}[1]{\@nameuse{b@#1}}
\makeatother
-\def\code#1{\texttt{#1}}
+\renewcommand*{\code}[1]{\texttt{#1}}
+
+\newcommand*{\codelineindicator}{\mbox{\small$\mathscr{l}$}}
\newrobustcmd*{\command}[1]{\mbox{\textbf{#1}}}
\newcommand*{\degree}{{}^\circ}
+\newcommand*{\detoxindex}[1]{\index{\detokenize{#1}}}
+
\newcommand*{\doublequotes}[1]{\guillemetright\kern-.03333em #1\guillemetleft}
-\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}}}
+\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}\unskip}}
\newcommand*{\filesystem}[1]{\mbox{\textit{#1\/}}}
@@ -295,12 +387,48 @@
\renewcommand*{\fps@table}{htbp}
\makeatother
+\apptocmd{\GlossaryParms}
+ {\RaggedRight\normalsize}
+ {\relax}
+ {\AppendingFailed}
+
+\let\oldhdclindex=\hdclindex
+\renewcommand*{\hdclindex}[2]
+ {\ifstrequal{#2}{code}
+ {\oldhdclindex{#1}{codeidx}}
+ {\oldhdclindex{#1}{#2}}}
+
+\let\oldhdpindex=\hdpindex
+\renewcommand*{\hdpindex}[2]{\textbf{\oldhdpindex{#1}{#2}}}
+
\newcommand*{\hollowrectangle}[2]
{\setlength{\fboxrule}{.5pt}%
\setlength{\fboxsep}{0pt}%
\framebox{\rule{#1}{0pt}\rule{0pt}{#2}}}
\newcommand*{\hollowsquare}[1]{\hollowrectangle{#1}{#1}}
+\apptocmd{\IndexParms}
+ {\RaggedRight\small}
+ {\relax}
+ {\AppendingFailed}
+
+\makeatletter
+\ExplSyntaxOn
+\apptocmd{\index@prologue}
+ {\legacy_if:nTF {codeline@index}
+ {We\space prefix\space all\space references\space
+ to\space code\space lines\space with~\singlequotes{\codelineindicator}.}
+ {}}
+ {\relax}
+ {\AppendingFailed}
+
+\newcommand*{\linenumberdecoration}
+ {\legacy_if:nTF {codeline@index}
+ {\codelineindicator}
+ {}}
+\ExplSyntaxOff
+\makeatother
+
\newcommand*{\logmacro}[1]
{\ifdef{#1}
{\message{^^JDump of macro \string#1 follows.^^J}
@@ -314,6 +442,24 @@
\begin{fullwidth}}
{\end{fullwidth}}
+
+\let\originalmulticols=\multicols
+\let\endoriginalmulticols=\endmulticols
+\RenewDocumentEnvironment{multicols}{m o o}
+ {\ifnum #1=1
+ \IfNoValueTF{#2}{\relax}{#2}%
+ \else
+ \IfNoValueTF{#2}
+ {\originalmulticols{#1}}
+ {\originalmulticols{#1}[#2]}%
+ \fi}
+ {\ifnum #1=1
+ \relax
+ \else
+ \endoriginalmulticols
+ \fi}
+
+
\newenvironment*{multilinecodeexample}
{\begin{quote}\tt
\def\indent{\mbox{}\hspace{25pt}}%
@@ -409,7 +555,7 @@
\newenvironment*{specialcodesection}[1]
{\Needspace{4\baselineskip}%
\begin{tcolorbox}[colback=white, colframe=\markercolor,
- bottomrule=0pt, leftrule=5pt, rightrule=0pt, toprule=0pt]
+ bottomrule=.5pt, leftrule=5pt, rightrule=.5pt, toprule=.5pt]
\sffamily
\begin{list}
{\specialcodesectionheading{#1}}
@@ -464,6 +610,12 @@
\newcommand*{\tikzlogo}{\textrm{Ti\textit{k\/}Z}}
+\newcommand*{\toccontinuesonnextpage}
+ {\addtocontents{toc}{\par
+ \bigskip
+ \hfill\textit{Table of Contents continued on next page.}\par
+ \clearpage}}
+
\newcommand*{\topstrut}{\rule{0pt}{1.3em}}
\newcommand*{\transpose}[1]{{#1}^{\text{T}}}
@@ -477,6 +629,12 @@
\copy0\kern\ttellipsisgap
\box0\kern\ttellipsisgap}
+\newcommand*{\unmarkedfntext}[1]
+ {{\def\thefootnote{}\footnote{#1}%
+ \addtocounter{footnote}{-1}}}
+
+\newcommand*{\userman}[1]{\textbf{\hyperpage{#1}}}
+
\newcommand*{\visualpar}{\textcolor{\markercolor}{\P}\linebreak[1]\enspace}
\newenvironment*{widecodeexample}
@@ -491,6 +649,15 @@
\hyphenation{% https://hyphenateit.com/en-us
+ neg-slant-context
+ neg-slant-environment
+ slant-context
+ slant-environment
+ synth-neg-slant
+ synth-slant
+ synth-slant-box
+ text-synth-slant
+ text-synth-upright-italic
}
@@ -515,12 +682,33 @@
%</driver>
%<*index-style>
actual '='
+delim_0 "\\nobreak\\enspace"
+delim_1 "\\nobreak\\enspace"
+delim_2 "\\nobreak\\enspace"
heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
heading_suffix "}\\nopagebreak\n"
headings_flag 1
level '>'
+line_max 65536
quote '!'
%</index-style>
+%<*changes-style>
+actual '='
+delim_0 "\\nobreak\\enspace"
+delim_1 "\\nobreak\\enspace"
+delim_2 "\\nobreak\\enspace"
+heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
+heading_suffix "}\\nopagebreak\n"
+headings_flag 0
+item_x1 "\\efill\n\\subitem "
+item_x2 "\\ "
+keyword "\\glossaryentry"
+level '>'
+line_max 65536
+postamble "\n\\end{theglossary}\n"
+preamble "\\begin{theglossary}\n \\makeatletter\\scan@allowedfalse"
+quote '!'
+%</changes-style>
% \fi
%
%
@@ -530,7 +718,7 @@ quote '!'
% \DoNotIndex{\edef,\else}
% \DoNotIndex{\endgroup,\endmicrotypecontext,\endnegslantenvironment,\endslantenvironment}
% \DoNotIndex{\expandafter,\ExplSyntaxOff,\ExplSyntaxOn}
-% \DoNotIndex{\fi,\font,\fontdimen,\fontspec,\fp}
+% \DoNotIndex{\fi,\font,\fontdimen,\fontspec,\fp,\fpeval}
% \DoNotIndex{\hbox,\hskip}
% \DoNotIndex{\ifcase,\ifcsdef,\ifdefined,\ifluatex,\ifmmode,\ifnum,\ifpdftex,\ifx,\itshape}
% \DoNotIndex{\kern}
@@ -540,16 +728,17 @@ quote '!'
% \DoNotIndex{\newbox,\newcommand,\NewDocumentCommand,\NewDocumentEnvironment,\newenvironment,\newrobustcmd}
% \DoNotIndex{\node,\nolinebreak}
% \DoNotIndex{\or}
-% \DoNotIndex{\PackageInfo,\PackageWarning,\ProcessOptionsX,\providecommand,\ProvidesPackage}
+% \DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\ProcessOptionsX,\providecommand,\ProvidesPackage}
% \DoNotIndex{\pdfoutput,\pdfrestore,\pdfsave,\pdfsetmatrix,\pstilt}
% \DoNotIndex{\relax,\RequirePackage}
-% \DoNotIndex{\sbox,\skip,\space}
+% \DoNotIndex{\sbox,\skip,\space,\string}
% \DoNotIndex{\tikz}
% \DoNotIndex{\upshape,\usebox}
% \DoNotIndex{\wd}
+% \DoNotIndex{\xdef}
%
%
-% \changes{v0.1}{2024-2-12}{Initial version}
+% \changes{v0.1}{2024-2-12}{Initial version.}
%
%
% \pagenumbering{roman}
@@ -636,39 +825,83 @@ end
% \footnotesize
% \noindent
% This package is copyright \textcopyright~2024 Ch.~L.~Spiel. It may be distributed and/or
-% modified under the conditions of the \LaTeX{} Project Public License \acronym{(LPPL)},
-% either version~1.3c of this license or --~at your option~-- any later version. This work
-% has the \acronym{LPPL} maintenance status \doublequotes{author-maintained}.\par
+% modified under the conditions of the \href{https://www.latex-project.org/lppl.txt}{\LaTeX{}
+% Project Public License} \acronym{(LPPL)}, either version~1.3c of this license or --~at your
+% option~-- any later version. This work has the \acronym{LPPL} maintenance status
+% \doublequotes{author-maintained}.\par
% \endgroup
%
%
% \clearpage
-% \thispagestyle{pagenumberonly}
-% \tableofcontents
+% \pagestyle{pagenumberonly}
%
-% \vspace{\fill}
-%
-% \begingroup
-% \footnotesize
-% \singlespacing
-% \noindent
-% The font samples~\singlequotes{fga} on the title page
-% were generated with the help of \MP{} using \doublequotes{\acronym{URW} Palladio~L}
-% in styles~\singlequotes{roman} and~\singlequotes{italic}.
-% The affine transformations were \code{slanted .2} for the slanted roman and
-% \code{slanted -.2} for the upright italics.\par
-% \endgroup
+% \unmarkedfntext{The font samples~\singlequotes{fga} on the title page were generated with the
+% help of \MP{} using \doublequotes{\acronym{URW} Palladio} in styles~\singlequotes{roman}
+% and~\singlequotes{italic}. The affine transformations were\enspace \code{slanted
+% .2}\enspace for the slanted roman and\enspace \code{slanted -.2}\enspace for the upright
+% italics.}
+% \tableofcontents
%
%
% \clearpage
-% \thispagestyle{pagenumberonly}
% \listoftables
% \bigskip
% \listoffigures
%
%
% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{\numberline{}Quick Reference}
+% \addtocontents{toc}{\medskip}
+% \section*{Quick Reference}
+%
+% Alphabetically sorted list of all user macros and environments defined by
+% package~\packagename{synthslant}. The list of all package options can be found on
+% \cpageref{sec:package-options} and \pageref{secend:package-options}. The
+% \hyperref[sec:index]{Index} on pages~\pageref{sec:index} to~\pageref{secend:index} may
+% provide some more detailed insights.
+%
+% \begin{list}{}{\itemindent=-\leftmargin \itemsep=4.5pt plus 2pt minus 1pt}
+% \NewDocumentCommand{\qritem}{m m O{}}
+% {\item
+% \hyperref[#1]{#2}#3\relax
+% \def\qrref{\cpageref{#1}}\par\ignorespaces}
+% \qritem{syn:negslantcontext}{\cs{negslantcontext}}
+% Name of the \packagename{microtype} context used when typesetting backward slanted
+% text~(\qrref)
+%
+% \qritem{syn:negslantenvironment}{\code{negslantenvironment}}
+% Wrapper around \cs{synthslantbox} when slanting backward with
+% \cs{textsynthuprightitalic}~(\qrref)
+%
+% \qritem{syn:slantcontext}{\cs{slantcontext}}
+% Name of the \packagename{microtype} context used when typesetting forward slanted
+% text~(\cpageref{syn:slantcontext})
+%
+% \qritem{syn:slantenvironment}{\code{slantenvironment}}
+% Wrapper around \cs{synthslantbox} when slanting forward with
+% \cs{textsynthslant}~(\qrref)
+%
+% \qritem{syn:synthnegslant}{\cs{synthnegslant}}
+% Slant value used by \cs{textsynthuprightitalic}~(\qrref)
+%
+% \qritem{syn:synthslantbox}{\cs{synthslantbox}}[\marg{slant}\marg{text}]
+% Slant \meta{text} (forward or backward) with \meta{slant}~(\qrref)
+%
+% \qritem{syn:synthslant}{\cs{synthslant}}
+% Slant value used by \cs{textsynthslant}~(\qrref)
+%
+% \qritem{syn:textsynthslant}{\cs{textsynthslant}}[\marg{text}]
+% Forward slant upright glyphs~(\qrref)
+%
+% \qritem{syn:textsynthuprightitalic}{\cs{textsynthuprightitalic}}[\marg{text}]
+% Backward slant italics or oblique glyphs~(\qrref)
+% \end{list}
+%
+%
+% \clearpage
% \pagenumbering{arabic}
+% \pagestyle{fancy}
% \section{Introduction}\label{sec:introduction}
%
% The \packagename{synthslant} package provides a translator (e.\,g.~\LaTeX, \pdfLaTeX, or
@@ -688,8 +921,8 @@ end
%
% \subsection{Appeal for Artificially Slanted Type}\label{sec:appleal-for-artificially-slanted}
%
-% Artificially slanted type have a bad reputation. Whenever there is an order to round up the
-% usual font suspects synthetically slanted, bolded\footnote{Package~\packagename{amsbsy}
+% Artificially slanted type have a lousy reputation. Whenever there is an order to round up
+% the usual font suspects synthetically slanted, bolded\footnote{Package~\packagename{amsbsy}
% defines a \doublequotes{Poor Man's Bold} macro~\cs{pmb} that works by
% \singlequotes{overprinting}. The authors of \packagename{amsbsy} recommend to prefer
% package~\packagename{bm} for bold mathematical symbols, though.}, and condensed type along
@@ -699,8 +932,9 @@ end
% condescension for synthetic bold and condensed variants. They spoil the glyphs' outline
% because they do not (and cannot) conserve the necessary proportions. For small-caps the
% problems are somewhat minor and I wonder how far one could get with an
-% \propername{OpenType}~font that supports a \code{size}~axis\index{font>axis>size=\code{size}}
-% as well as an \code{opsz}~axis\index{font>axis>opsz=\code{opsz}} in the necessary ranges to
+% \propername{OpenType}~font that supports a
+% \code{size}~axis\index{font>axis>size=\code{size}|userman} as well as an
+% \code{opsz}~axis\index{font>axis>opsz=\code{opsz}|userman} in the necessary ranges to
% construct convincing small-caps out of the multiple-master font.
%
% In my view artificial slanting keeps much of the font's character intact. In fact one
@@ -741,13 +975,14 @@ end
%
% Some fonts in current \LaTeX{} distributions offer slanted series right out of the box.
% \foreignphrase{Eureka!} In particular the oldest (and once upon a time the only) font family
-% shipping with \TeX, \href{https://tug.org/FontCatalogue/cmrfonts.html}{Computer Modern
-% Roman}\index{font>Computer Modern Roman} --~nowadays member of the \acronym{CM}-Super
-% family~-- is available in a deluge of almost thirty shapes. It covers not just slanted roman
-% or slanted smallcaps but also slanted typewriter and somewhat surprisingly upright italics.
-% Furthermore, the \LaTeXe{} font selection scheme provisions \singlequotes{\code{sl}} for
-% slanted shapes and \singlequotes{\code{ui}} for upright italics~\cite{fntguide}. The former
-% is accompanied by the macros~\cs{slshape} and~\cs{textsl}.
+% shipping with \TeX, \href{https://tug.org/FontCatalogue/cmrfonts.html}{\acronym{CM}
+% Roman}\index{font>typeface>CM Roman=\acronym{CM} Roman|userman} --~nowadays member of the
+% \acronym{CM}-Super family~-- is available in a deluge of almost thirty shapes. It covers not
+% just slanted roman or slanted smallcaps but also slanted typewriter and somewhat surprisingly
+% upright italics. Furthermore, the \LaTeXe{} font selection scheme provisions
+% \singlequotes{\code{sl}} for slanted shapes and \singlequotes{\code{ui}} for upright
+% italics~\cite{fntguide}. The former is accompanied by the macros~\cs{slshape}
+% and~\cs{textsl}.
%
% \begin{wraptable}{r}{.382\textwidth}
% \renewcommand*{\floatcaptionwidth}{\textwidth}
@@ -759,15 +994,15 @@ end
%
% \begin{tabular}{@{}l@{}}
% \toprule
-% Font Name \\
+% Font \\
% \midrule
-% Cairo\index{font>Cairo} \\
-% Commissioner\index{font>Commissioner} \\
-% Geologica\index{font>Geologica} \\
-% Gluten\index{font>Gluten} \\
-% Inter\index{font>Inter} \\
-% Recursive\index{font>Recursive} \\
-% Roboto Flex\index{font>Roboto Flex} \\
+% Cairo\index{font>typeface>Cairo|userman} \\
+% Commissioner\index{font>typeface>Commissioner|userman} \\
+% Geologica\index{font>typeface>Geologica|userman} \\
+% Gluten\index{font>typeface>Gluten|userman} \\
+% Inter\index{font>typeface>Inter|userman} \\
+% Recursive\index{font>typeface>Recursive|userman} \\
+% Roboto Flex\index{font>typeface>Roboto Flex|userman} \\
% \bottomrule
% \end{tabular}
% \end{wraptable}
@@ -781,8 +1016,9 @@ end
% \code{slnt}-axis} or fonts with an \href{https://v-fonts.com/tags/C5}{unusual variation} at
% \href{https://v-fonts.com/}{Variable Fonts}.} that offer a slant-axis\footnote{The
% registered axis is called \code{slnt} and it is not to be confused with the
-% \code{ital}~axis.}\index{font>axis>slant=\code{slant}}\index{font>axis>ital=\code{ital}} that
-% can be controlled with \packagename{fontspec}'s\index{package>\packagename{fontspec}}
+% \code{ital}~axis.}\index{font>axis>slant=\code{slant}|userman}\index{font>axis>ital=\code{ital}|userman}
+% that can be controlled with
+% \packagename{fontspec}'s\index{package>fontspec=\packagename{fontspec}|userman}
% \code{Slant}\footnote{Since \packagename{fontspec} version~2.9a as of 2024/2/13.}~key and
% \cref{tab:slanted-series-fonts} for a rather incomplete list of fonts that are shipped with
% slanted shapes. For these fonts \packagename{synthslant} is largely superfluous unless
@@ -801,35 +1037,35 @@ end
%
% \begin{tabular}[t]{@{}p{12em}@{}}
% \toprule
-% Font Name \\
+% Font \\
% \midrule
-% Arvo\index{font>Arvo} \\
-% Computer Modern Roman\index{font>Computer Modern Roman} \\
-% Domitian\index{font>Domitian} \\
-% Droid Serif\index{font>Droid Serif} \\
-% Erewhon\index{font>Erewhon} \\
-% Extended Charter\index{font>Extended Charter} \\
-% \acronym{GFS} Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia} \\
-% \acronym{GFS} Bodoni\index{font>GFS Bodoni=\acronym{GFS} Bodoni} \\
-% \acronym{GFS} Didot\index{font>GFSDidot=\acronym{GFS} Didot} \\
+% Arvo\index{font>typeface>Arvo|userman} \\
+% \acronym{CM} Roman\index{font>typeface>CM Roman=\acronym{CM} Roman|userman} \\
+% Domitian\index{font>typeface>Domitian|userman} \\
+% Droid Serif\index{font>typeface>Droid Serif|userman} \\
+% Erewhon\index{font>typeface>Erewhon|userman} \\
+% Extended Charter\index{font>typeface>Extended Charter|userman} \\
+% \acronym{GFS} Artemisia\index{font>typeface>GFS Artemisia=\acronym{GFS} Artemisia|userman} \\
+% \acronym{GFS} Bodoni\index{font>typeface>GFS Bodoni=\acronym{GFS} Bodoni|userman} \\
+% \acronym{GFS} Didot\index{font>typeface>GFS Didot=\acronym{GFS} Didot|userman} \\
% \\
% \bottomrule
% \end{tabular}
% \qquad
% \begin{tabular}[t]{@{}p{12em}@{}}
% \toprule
-% Font Name \\
+% Font \\
% \midrule
-% Cabin\index{font>Cabin} \\
-% Clear Sans\index{font>Clear Sans} \\
-% Cuprum\index{font>Cuprum} \\
-% Fira Sans\index{font>Fira Sans} \\
-% Gandhi Sans\index{font>Gandhi Sans} \\
-% \acronym{Inria} Sans\index{font>Inria Sans=\acronym{Inria} Sans} \\
-% Lato\index{font>Lato}\itshapemark \\
-% Montserrat\index{font>Montserrat} \\
-% \acronym{PT} Sans\index{font>PT Sans=\acronym{PT} Sans} \\
-% Source Sans Pro\index{font>Source Sans Pro} \\
+% Cabin\index{font>typeface>Cabin|userman} \\
+% Clear Sans\index{font>typeface>Clear Sans|userman} \\
+% Cuprum\index{font>typeface>Cuprum|userman} \\
+% Fira Sans\index{font>typeface>Fira Sans|userman} \\
+% Gandhi Sans\index{font>typeface>Gandhi Sans|userman} \\
+% \acronym{Inria} Sans\index{font>typeface>Inria Sans=\acronym{Inria} Sans|userman} \\
+% Lato\itshapemark\index{font>typeface>Lato|userman} \\
+% Montserrat\index{font>typeface>Montserrat|userman} \\
+% \acronym{PT} Sans\index{font>typeface>PT Sans=\acronym{PT} Sans|userman} \\
+% Source Sans Pro\index{font>typeface>Source Sans Pro|userman} \\
% \bottomrule
% \end{tabular}
%
@@ -852,15 +1088,16 @@ end
% \pdfTeX~version~1.40.0~\cite{schroeder:2007}.} With the help of the latter affine
% transformations of arbitrary content can be coded directly by setting the transformation
% matrix. A slight variant of his code is used in this package for the \acronym{PDF}- and
-% \packagename{l3draw}\index{package>\packagename{l3draw}}-slant~engines. The implementations
-% for \pstrickslogo, \tikzlogo{}, and \packagename{fontspec}\packagename{fontspec} are trivial
-% as they build upon shear~functions supplied by the respective packages.
+% \packagename{l3draw}\index{package>l3draw=\packagename{l3draw}|userman}-slant~engines. The
+% implementations for \pstrickslogo, \tikzlogo{}, and
+% \packagename{fontspec}\packagename{fontspec} are trivial as they build upon shear~functions
+% supplied by the respective packages.
%
%
% \subsection{Shear Transformation, Slant, and Angle}\label{sec:shear-transformation}
%
-% \index{slant>operation}
-% \index{shear>transformation}
+% \index{slant>operation|userman}
+% \index{shear>transformation|userman}
% Mathematically the slant operation is a shear transformation, which can be expressed with the
% equation
% \begin{equation}\label{equ:shear-transformation}
@@ -1018,7 +1255,7 @@ end
% For \(\alpha = 0\) the shear matrix becomes the identity matrix. Throughout of
% \packagename{synthslant} we work with the \meta{slant} which is \(\sin \alpha\) in
% \cref{equ:shear-transformation} and avoid converting back and forth to the
-% \index{shear>angle}shear angle~\(\alpha\).\footnote{At least one slant engine currently
+% \index{shear>angle|userman}shear angle~\(\alpha\).\footnote{At least one slant engine currently
% requires such a conversion, namely~\pstrickslogo. The math is hidden from the user, though.}
% Some values for orientation: \mbox{\(\sin 5.74\degree \approx .1\)}, \mbox{\(\sin 11.5\degree
% \approx .2\)}, and \mbox{\(\sin 17.5\degree \approx .3\)}.\footnote{For small
@@ -1038,8 +1275,8 @@ end
% \begin{enumerate}
% \item\label{it:no-italics}
% Generate a slanted serif in the unfortunate situation when a serif font comes without
-% italics such as \singlequotes{\acronym{URW}~Antiqua}\index{font>URW Antiqua=\acronym{URW}
-% Antiqua}.
+% italics such as
+% \singlequotes{\acronym{URW}~Antiqua}\index{font>typeface>URW Antiqua=\acronym{URW} Antiqua|userman}.
%
% Here, the user is relatively free to choose a \meta{slant}, for there are no italics whose
% angle must be matched. \packagename{Synthslant}'s default of~.2 should be a good starting
@@ -1053,8 +1290,8 @@ end
%
% \item\label{it:correct-italics-angle}
% An italics shape that has an excessive slant angle, as
-% e.\,g.~\singlequotes{Libre~Caslon}\index{font>Libre Caslon} may be corrected, i.\,e.,
-% partially un-slanted.
+% e.\,g.~\singlequotes{Libre~Caslon}\index{font>typeface>Libre Caslon|userman} may be corrected,
+% i.\,e., partially un-slanted.
%
% In this case, and generally if a font as a whole needs to be corrected, an alternative
% approach like the one sketched in \cref{sec:alternative} on \cpageref{sec:alternative} may
@@ -1062,16 +1299,16 @@ end
%
% \item\label{it:generate-sole-obliques}
% Generate an oblique sans-serif if a sans-serif font comes without an oblique shape as,
-% e.\,g., \singlequotes{\acronym{URW}~Grotesk}.\index{font>URW Grotesk=\acronym{URW} Grotesk}
+% e.\,g., \singlequotes{\acronym{URW}~Grotesk}.\index{font>typeface>URW Grotesk=\acronym{URW} Grotesk|userman}
%
% \item\label{it:generate-extra-obliques}
% Supply a slanted sans-serif shape for sans-serif fonts with designed, this is \emph{true}
-% obliques as e.\,g.~\singlequotes{Open Sans}.\index{font>Open Sans}
+% obliques as e.\,g.~\singlequotes{Open Sans}.\index{font>typeface>Open Sans|userman}
%
% \item\label{it:slant-typewriter}
% Fixed-width --~also called \singlequotes{typewriter} or \singlequotes{teletype}~-- fonts
-% without obliques (Yes, I am looking at you, Inconsolata!)\index{font>Inconsolata} finally
-% get an oblique shape.
+% without obliques (Yes, I am looking at you, Inconsolata!)\index{font>typeface>Inconsolata|userman}
+% finally get an oblique shape.
%
% \item\label{it:slanted-small-caps}
% Small caps without accompanying italics can be slanted, too.
@@ -1109,7 +1346,9 @@ end
%
% \begingroup
% \newcommand*{\indexpackageoption}[1]
-% {\index{package option>#1=\code{#1}}\index{#1=\code{#1}~(option)}\ignorespaces}
+% {\detoxindex{package option>#1=\code{#1}|userman}%
+% \detoxindex{#1=\code{#1}~(option)|userman}%
+% \ignorespaces}
% \begin{description}
% [before={\let\oldmakelabel=\makelabel
% \renewcommand{\makelabel}[1]
@@ -1130,13 +1369,14 @@ end
%
% \item[|fontspec|]\label{item:fontspec}
% \indexpackageoption{fontspec}
-% Use \packagename{fontspec}\index{package>\packagename{fontspec}} as slanting
-% back-end.\footnote{Requires \filesystem{fontspec.sty.}}
+% Use \packagename{fontspec}\index{package>fontspec=\packagename{fontspec}|userman} as
+% slanting back-end.\footnote{Requires \filesystem{fontspec.sty.}}
%
% \item[|l3draw|]\label{item:l3draw}
% \indexpackageoption{l3draw}
-% Select the \singlequotes{draw} layer\index{package>\packagename{l3draw}} of \LaTeXIII{} as
-% base for the slanting engine.\footnote{This option requires \filesystem{l3draw.sty.}}
+% Select the \singlequotes{draw} layer\index{package>l3draw=\packagename{l3draw}|userman} of
+% \LaTeXIII{} as base for the slanting engine.\footnote{This option requires
+% \filesystem{l3draw.sty.}}
%
% \begin{caution}
% This engine is experimental and the \singlequotes{draw} layer of \LaTeXIII{} itself is
@@ -1148,7 +1388,7 @@ end
% \indexpackageoption{negslant}
% Set the default value for \hyperref[syn:synthnegslant]{\cs{synthnegslant}} \emph{only.}
% The argument \meta{slant-expr} is a floating-point expression. Note that for this option
-% \meta{slant-expr} must evaluate to a non-positive value.
+% \meta{slant-expr} must evaluate to a nonpositive value.
%
% \item[|PDF|, |pdf|]\label{item:pdf}
% \indexpackageoption{pdf}
@@ -1159,14 +1399,14 @@ end
% \indexpackageoption{posslant}
% Set the default value for \hyperref[syn:synthslant]{\cs{synthslant}} \emph{only.} The
% argument \meta{slant-expr} is a floating-point expression. Note that for this option
-% \meta{slant-expr} must evaluate to a non-negative value.
+% \meta{slant-expr} must evaluate to a nonnegative value.
%
% \item[|PS|, |ps|]\label{item:postscript}
-% \index{ps}
-% Use \pstrickslogo\index{package>\packagename{pstricks}} to delegate slanting to the
-% PostScript\index{PostScript} interpreter. Obviously requires \pstrickslogo\footnote{The
-% package actually required is \filesystem{pst-3d.sty.}} and \acronym{DVI}-to-PostScript
-% translation.
+% \index{ps|userman}
+% Use \pstrickslogo\index{package>pstricks=\packagename{pstricks}|userman} to delegate
+% slanting to the PostScript\index{PostScript|userman} interpreter. Obviously requires
+% \pstrickslogo\footnote{The package actually required is \filesystem{pst-3d.sty.}} and
+% \acronym{DVI}-to-PostScript translation.
%
% \begin{caution}
% This engine is still experimental and produces low-quality output! See
@@ -1176,7 +1416,7 @@ end
% \item[|slant=|\meta{slant-expr}]\label{item:slant}
% \indexpackageoption{slant}
% Set the default values for both \hyperref[syn:synthslant]{\cs{synthslant}} and
-% \hyperref[syn:synthnegslant]{\cs{synthnegslant}}, this is, behave as if the two package
+% \hyperref[syn:synthnegslant]{\cs{synthnegslant}}, this is, act as if the two package
% options \(\code{posslant} = \meta{slant-expr}\) and \(\code{negslant} =
% -(\meta{slant-expr})\) have been given. The argument \meta{slant-expr} is a floating-point
% expression.
@@ -1185,8 +1425,8 @@ end
%
% \item[|TikZ|, |tikz|]\label{item:tikz}
% \indexpackageoption{tikz}
-% Use \packagename{TikZ}\index{package>\packagename{TikZ}} for slanting.\footnote{Requires
-% \filesystem{tikz.sty.}}
+% Use \packagename{TikZ}\index{package>tikz=\packagename{tikz}|userman} for
+% slanting.\footnote{Requires \filesystem{tikz.sty.}}
%
% \begin{caution}
% This engine is still experimental and produces low-quality output! See
@@ -1199,7 +1439,7 @@ end
% floating-point \emph{expressions} as their arguments not just plain floating-point literals.
% See Ref.~\citenum{latex3-interfaces}, Ch.~29, \doublequotes{The \textsf{l3fp}~module~--
% Floating points} for a description of the floating-point expression syntax and the available
-% functions.
+% functions.\label{secend:package-options}
%
%
% \clearpage
@@ -1218,7 +1458,7 @@ end
%
% \DescribeMacro{\synthslant}
% Control the slant applied by \hyperref[syn:textsynthslant]{\cs{textsynthslant}}.
-% This value is non-negative.
+% This value is nonnegative.
%
% \begin{synopsis}\label{syn:synthslant}
% \cs{synthslant}
@@ -1248,43 +1488,43 @@ end
% \begin{tabfigures}
% \begin{tabular}[t]{@{}p{9.5em}l@{}}
% \toprule
-% Font Name & Slant \\
+% Font & Slant \\
% \midrule
-% \acronym{ADF} Accanthis\index{font>ADF Accanthis=\acronym{ADF} Accanthis} & .26 \\
-% \acronym{ADF} Baskervald\index{font>ADF Baskervald=\acronym{ADF} Baskervald} & .32 \\
-% \acronym{ADF} Berenis\index{font>ADF Berenis=\acronym{ADF} Berenis} & .2 \\
-% \acronym{ADF} Venturis\index{font>ADF Venturis=\acronym{ADF} Venturis} & .2 \\
-% Alegreya\index{font>Alegreya} & .2 \\
-% Arvo\index{font>Arvo} & .2 \\
-% BaskervilleF\index{font>BaskervilleF} & .2 \\
-% Bera Serif\index{font>Bera Serif} & .2 \\
-% Bitter\index{font>Bitter} & .16 \\
-% Caladea\index{font>Caladea} & .14 \\
-% Clara\index{font>Clara} & .24 \\
-% Cochineal\index{font>Cochineal} & .2 \\
-% Coelacanth\index{font>Coelacanth} & .2 \\
-% Crimson Pro\index{font>Crimson Pro} & .2 \\
-% Crimson Text\index{font>Crimson Text} & .2 \\
+% \acronym{ADF} Accanthis\index{font>typeface>ADF Accanthis=\acronym{ADF} Accanthis|userman} & .26 \\
+% \acronym{ADF} Baskervald\index{font>typeface>ADF Baskervald=\acronym{ADF} Baskervald|userman} & .32 \\
+% \acronym{ADF} Berenis\index{font>typeface>ADF Berenis=\acronym{ADF} Berenis|userman} & .2 \\
+% \acronym{ADF} Venturis\index{font>typeface>ADF Venturis=\acronym{ADF} Venturis|userman} & .2 \\
+% Alegreya\index{font>typeface>Alegreya|userman} & .2 \\
+% Arvo\index{font>typeface>Arvo|userman} & .2 \\
+% BaskervilleF\index{font>typeface>BaskervilleF|userman} & .2 \\
+% Bera Serif\index{font>typeface>Bera Serif|userman} & .2 \\
+% Bitter\index{font>typeface>Bitter|userman} & .16 \\
+% Caladea\index{font>typeface>Caladea|userman} & .14 \\
+% Clara\index{font>typeface>Clara|userman} & .24 \\
+% Cochineal\index{font>typeface>Cochineal|userman} & .2 \\
+% Coelacanth\index{font>typeface>Coelacanth|userman} & .2 \\
+% Crimson Pro\index{font>typeface>Crimson Pro|userman} & .2 \\
+% Crimson Text\index{font>typeface>Crimson Text|userman} & .2 \\
% \bottomrule
% \end{tabular}%
% \qquad
% \begin{tabular}[t]{@{}p{9.5em}l@{}}
% \toprule
-% Font Name & Slant \\
+% Font & Slant \\
% \midrule
-% Day Roman\index{font>Day Roman} & .2 \\
-% \acronym{EB} Garamond\index{font>EB Garamond=\acronym{EB} Garamond} & .3 \\
-% etbb\index{font>etbb} & .2 \\
-% fbb\index{font>fbb} & .2 \\
-% Garamond Expert\index{font>Garamond Expert} & .2 \\
-% Gandhi Serif\index{font>Gandhi Serif} & .2 \\
-% Gentium\index{font>Gentium} & .2 \\
-% Ibarra Real Nova\index{font>Ibarra Real Nova} & .2 \\
-% \acronym{IBM} Plex Serif\index{font>IBM Plex Serif=\acronym{IBM} Plex Serif} & .24 \\
-% \acronym{Inria} Serif\index{font>Inria Serif=\acronym{Inria} Serif} & .2 \\
-% Libertinus Serif\index{font>Libertinus Serif} & .2 \\
-% Libre Baskerville\index{font>Libre Baskerville} & .3 \\
-% Libre Caslon\index{font>Libre Caslon} & .38 \\
+% Day Roman\index{font>typeface>Day Roman|userman} & .2 \\
+% \acronym{EB} Garamond\index{font>typeface>EB Garamond=\acronym{EB} Garamond|userman} & .3 \\
+% etbb\index{font>typeface>etbb|userman} & .2 \\
+% fbb\index{font>typeface>fbb|userman} & .2 \\
+% Garamond Expert\index{font>typeface>Garamond Expert|userman} & .2 \\
+% Gandhi Serif\index{font>typeface>Gandhi Serif|userman} & .2 \\
+% Gentium\index{font>typeface>Gentium|userman} & .2 \\
+% Ibarra Real Nova\index{font>typeface>Ibarra Real Nova|userman} & .2 \\
+% \acronym{IBM} Plex Serif\index{font>typeface>IBM Plex Serif=\acronym{IBM} Plex Serif|userman} & .24 \\
+% \acronym{Inria} Serif\index{font>typeface>Inria Serif=\acronym{Inria} Serif|userman} & .2 \\
+% Libertinus Serif\index{font>typeface>Libertinus Serif|userman} & .2 \\
+% Libre Baskerville\index{font>typeface>Libre Baskerville|userman} & .3 \\
+% Libre Caslon\index{font>typeface>Libre Caslon|userman} & .38 \\
% & \\
% & \\
% \bottomrule
@@ -1292,22 +1532,22 @@ end
% \qquad
% \begin{tabular}[t]{@{}p{9.5em}l@{}}
% \toprule
-% Font Name & Slant \\
+% Font & Slant \\
% \midrule
-% Merriweather\index{font>Merriweather} & .14 \\
-% MLModern\index{font>MLModern} & .23 \\
-% Noto Serif\index{font>Noto Serif} & .22 \\
-% \acronym{PT} Serif\index{font>PT Serif=\acronym{PT} Serif} & .2 \\
-% Roboto Slab\index{font>Roboto Slab} & .2 \\
-% Quattrocento\index{font>Quattrocento} & .2 \\
-% Source Serif Pro\index{font>Source Serif Pro} & .18 \\
-% Spectral\index{font>Spectral} & .18 \\
-% \acronym{STIX}\index{font>STIX=\acronym{STIX}} & .2 \\
-% \TeX{} Gyre Pagella\index{font>TeX Gyre Pagella=\TeX{} Gyre Pagella} & .16 \\
-% \acronym{TX} Fonts Serif\index{font>TX Fonts Serif=\acronym{TX} Fonts Serif} & .2 \\
-% \acronym{URW} Antiqua\index{font>URW Antiqua=\acronym{URW} Antiqua} & .2 \\
-% \acronym{URW} Nimbus Roman\index{font>URW Nimbus Roman=\acronym{URW} Nimbus Roman} & .2 \\
-% Utopia\index{font>Utopia} & .2 \\
+% Merriweather\index{font>typeface>Merriweather|userman} & .14 \\
+% \acronym{ML} Modern\index{font>typeface>ML Modern=\acronym{ML} Modern|userman} & .23 \\
+% Noto Serif\index{font>typeface>Noto Serif|userman} & .22 \\
+% \acronym{PT} Serif\index{font>typeface>PT Serif=\acronym{PT} Serif|userman} & .2 \\
+% Roboto Slab\index{font>typeface>Roboto Slab|userman} & .2 \\
+% Quattrocento\index{font>typeface>Quattrocento|userman} & .2 \\
+% Source Serif Pro\index{font>typeface>Source Serif Pro|userman} & .18 \\
+% Spectral\index{font>typeface>Spectral|userman} & .18 \\
+% \acronym{STIX}\index{font>typeface>STIX=\acronym{STIX}|userman} & .2 \\
+% \TeX{} Gyre Pagella\index{font>typeface>TeX Gyre Pagella=\TeX{} Gyre Pagella|userman} & .16 \\
+% \acronym{TX} Fonts Serif\index{font>typeface>TX Fonts Serif=\acronym{TX} Fonts Serif|userman} & .2 \\
+% \acronym{URW} Antiqua\index{font>typeface>URW Antiqua=\acronym{URW} Antiqua|userman} & .2 \\
+% \acronym{URW} Nimbus Roman\index{font>typeface>URW Nimbus Roman=\acronym{URW} Nimbus Roman|userman} & .2 \\
+% Utopia\index{font>typeface>Utopia|userman} & .2 \\
% & \\
% \bottomrule
% \end{tabular}
@@ -1319,7 +1559,7 @@ end
% \DescribeMacro{\synthnegslant}
% Control the slant applied by
% \hyperref[syn:textsynthuprightitalic]{\cs{textsynthuprightitalic}}. This value is
-% non-positive.
+% nonpositive.
%
% \begin{synopsis}\label{syn:synthnegslant}
% \cs{synthnegslant}
@@ -1332,9 +1572,9 @@ end
% more flexible and powerful interface, see~\cref{sec:advanced-interface}.
%
% \begin{note}
-% The following restrictions and workarounds to get line-breaking and automatic hyphenation
-% working again do \emph{not} apply to the
-% \packagename{fontspec}\index{package>\packagename{fontspec}} back-end.
+% The following restrictions and workarounds to get line-breaking and \TeX's automatic
+% hyphenation working again do \emph{not} apply to the
+% \packagename{fontspec}\index{package>fontspec=\packagename{fontspec}|userman} back-end.
% \end{note}
%
% \noindent
@@ -1344,7 +1584,7 @@ end
% provisions to re-enable at least some breakability.
%
% \begin{enumerate}
-% \item Spaces introduce breakpoint,\index{breakpoint at space} e.\,g.
+% \item Spaces introduce breakpoint,\index{breakpoint at space|userman} e.\,g.
% \begin{codeexample}
% \cs{textsynthslant}\{topological dual space\}
% \end{codeexample}
@@ -1352,8 +1592,8 @@ end
% second word (producing another horizontal box). \TeX{} sees two (unbreakable) boxes and a
% discardable space when it comes to linebreaking.
%
-% \item Discretionary hyphens\index{discretionary hyphen} in the form of \singlequotes{\cs{-}}
-% get propagated. So, we could improve on our above example by saying
+% \item Discretionary hyphens\index{discretionary hyphen|userman} in the form of
+% \singlequotes{\cs{-}} get propagated. So, we could improve on our above example by saying
% \begin{codeexample}
% \cs{textsynthslant}\{topo\cs{-}log\cs{-}i\cs{-}cal dual space\}
% \end{codeexample}
@@ -1374,7 +1614,7 @@ end
%
% In horizontal mode switch to an upright shape, slant \meta{text} with the slant value stored
% in \hyperref[syn:synthslant]{\cs{synthslant}} and apply \doublequotes{slant
-% correction}\index{slant>correction} --~the equivalent of italics correction~-- at the
+% correction}\index{slant>correction|userman} --~the equivalent of italics correction~-- at the
% right-hand side of~\meta{text}.
%
% In math mode just slant \meta{text} with the slant value stored in
@@ -1391,7 +1631,7 @@ end
%
% \noindent
% where we show the font modification in conjunction with the
-% \packagename{babel}~macro\index{package>\packagename{babel}}
+% \packagename{babel}~macro\index{package>babel=\packagename{babel}|userman}
% \cs{foreignlanguage}~\cite{package:babel}.~\visualpar
%
% In math-mode you cannot have enough fonts, symbols, and most of the gizmos over there! I
@@ -1485,7 +1725,7 @@ end
% \end{synopsis}
%
% Switch to an upright font shape and --~if
-% package~\packagename{microtype}~\cite{package:microtype}\index{package>\packagename{microtype}}
+% package~\packagename{microtype}~\cite{package:microtype}\index{package>microtype=\packagename{microtype}|userman}
% has been loaded~-- enter the Microtype-context defined by
% macro~\hyperref[syn:slantcontext]{\cs{slantcontext}}. At the end add some slant correction,
% which is the equivalent of italics correction.
@@ -1511,7 +1751,7 @@ end
% Microtype-context defined by macro~\hyperref[syn:negslantcontext]{\cs{negslantcontext}}.
%
% \DescribeMacro{\slantcontext}
-% Microtype context used when typesetting slanted text.
+% Name of the \packagename{microtype} context used when typesetting slanted text.
%
% \begin{synopsis}\label{syn:slantcontext}
% \cs{slantcontext}
@@ -1530,7 +1770,7 @@ end
% \end{note}
%
% \DescribeMacro{\negslantcontext}
-% Microtype context used when typesetting un-slanted text.
+% Name of the \packagename{microtype} context used when typesetting backward slanted text.
%
% \begin{synopsis}\label{syn:negslantcontext}
% \cs{negslantcontext}
@@ -1667,13 +1907,13 @@ end
% and --~after recompiling with the appropriate \LaTeX-engine~-- used to examine the details of
% the slant operations.
%
-% Page~2, Sec.~3.1, \singlequotes{Copy}, shows wild mixes of different font shapes, native al
-% well as synthesized ones. Here, the slanted glyphs as well as the upright italics should
-% blend well with the native italics/obliques and the normal font, respectively.
+% Page~2, Sec.~3.1, \singlequotes{Copy}, shows wild mixes of different font shapes, native and
+% synthesized ones. Here, the slanted glyphs as well as the upright italics should blend well
+% with the native italics/obliques and with the normal font, respectively.
%
-% Page~3, Sec.~3.2 and following sub-sections, examines the coupling of
-% \packagename{synthslant} with the \TeX-system and some of its extensions. If a slant engine
-% malfunctions, it will become evident on this page.
+% Page~3, Sec.~3.2 and following sub-sections, examine the coupling of \packagename{synthslant}
+% with the \TeX-system and some of its extensions. If a slant engine malfunctions, it will
+% become evident on this page.
%
%
% \clearpage
@@ -1687,7 +1927,7 @@ end
% \packagename{Syntslant}~manipulations may not survive
% (pre-)\discretionary{}{}{}processing by \MP.
%
-% \item[\packagename{l3draw} engine.]\index{package>\packagename{l3draw}}\mbox{}
+% \item[\packagename{l3draw} engine.]\index{package>l3draw=\packagename{l3draw}|userman}\mbox{}
% \begin{itemize}
% \item Depending of the shear direction the \packagename{l3draw} engine may generate some
% extra positive or negative space at the ends of the text.
@@ -1697,10 +1937,10 @@ end
% \item Markedly slower than the \acronym{PDF}-implementation!
% \end{itemize}
%
-% \item[\pstrickslogo{} engine.]\index{package>\packagename{pstricks}}
+% \item[\pstrickslogo{} engine.]\index{package>pstricks=\packagename{pstricks}|userman}
% The \pstrickslogo{} engine produces some extra space at the ends of the text.
%
-% \item[\tikzlogo{} engine.]\index{package>\packagename{tikz}}
+% \item[\tikzlogo{} engine.]\index{package>tikz=\packagename{tikz}|userman}
% The \tikzlogo{} engine produces some extra space at the ends of the text.
% \end{description}
%
@@ -1753,7 +1993,7 @@ end
%
% I want to elaborate the example given in \cref{sec:usage-ideas},
% \cref{it:correct-italics-angle} and generate less-angled italics for
-% Libre~Caslon.\index{font>Libre Caslon} Here is a suitable map line taken from
+% Libre~Caslon.\index{font>typeface>Libre Caslon|userman} Here is a suitable map line taken from
% \filesystem{pdftex.map} on my system:
%
% \begin{multilinecodeexample}
@@ -1824,7 +2064,8 @@ end
% \end{example}
%
%
-% \subsection{Combining \LaTeX{} and \command{dvipdfmx}}\label{sec:alternative-latex}
+% \subsection{Combining \LaTeX{} and
+% \texorpdfstring{\command{dvipdfmx}}{dvipdfmx}}\label{sec:alternative-latex}
%
% The alternative when using \LaTeX{} is similar the one elaborated in the previous section.
% The font mapline gets modified by \cs{special} primitive
@@ -1872,14 +2113,20 @@ end
%
% \MaybeStop{
% \clearpage
-% \phantomsection
-% \resetfancyhead
-% \addcontentsline{toc}{section}{Change History}
-% \PrintChanges
+% \begingroup
+% \setcounter{GlossaryColumns}{1}
+% \phantomsection
+% \label{sec:changes}
+% \resetfancyhead
+% \addtocontents{toc}{\bigskip}
+% \addcontentsline{toc}{section}{\numberline{}Change History}
+% \PrintChanges
+% \endgroup
%
% \clearpage
% \phantomsection
-% \addcontentsline{toc}{section}{References}
+% \addtocontents{toc}{\medskip}
+% \addcontentsline{toc}{section}{\numberline{}References}
% \begin{RaggedRight}
% \begin{thebibliography}{88}
% \bibitem{package:relsize}
@@ -1986,20 +2233,31 @@ end
%
%
% \clearpage
-% \begin{RaggedRight}
+% \begingroup
% \setcounter{IndexColumns}{2}
% \setlength{\columnsep}{30pt}
-% \label{sec:index}
% \phantomsection
-% \addcontentsline{toc}{section}{Index}
+% \label{sec:index}
+% \addtocontents{toc}{\medskip}
+% \addcontentsline{toc}{section}{\numberline{}Index}
+% \raggedcolumns
+% \def\codeidx##1{\linenumberdecoration\textbf{##1}}
+% \def\main##1{\linenumberdecoration\underbar{\textbf{##1}}}
+% \def\usage##1{\textit{\textbf{##1}}}
% \PrintIndex
-% \end{RaggedRight}
+% \label{secend:index}
+% \endgroup
% }
%
%
% \clearpage
+% \toccontinuesonnextpage
% \section{Package Code}\label{sec:package-code}
-% \addtocontents{toc}{\begingroup\small}
+% \addtocontents{toc}{\protect\begin{list}{}{\leftmargin=\subsectiontocindent\parsep=0pt}}
+% \addtocontents{toc}{\protect\item}
+% \addtocontents{toc}{\RaggedRight}
+% \addtocontents{toc}{\small}
+% \addtocontents{toc}{\tocsquashedsubsections}
% \addtocontents{toc}{\protect\begin{multicols}{2}}
% \addtocontents{toc}{\protect\raggedcolumns}
%
@@ -2008,12 +2266,15 @@ end
% and explain its implementation details.
%
%
+% \changes{v0.1a}{2024-6-2}{Add missing dependency on \packagename{etoolbox}.
+% Fix suggested by \code{mbertucci47}.}
% \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{synthslant}
- [2024/05/07 v0.1 Synthetically Slant glyphs]
+ [2024/07/08 v0.1a Synthetically Slant glyphs]
+\RequirePackage{etoolbox}
\RequirePackage{iftex}
\RequirePackage{xkeyval}
@@ -2094,12 +2355,16 @@ end
% \begin{macrocode}
\ExplSyntaxOn
\fp_compare:nNnTF {\synthslant} < {.0}
- {\PackageError{synthslant}{\string\synthslant\space <\space 0}
- {Pass\space a\space value\space that\space is\space non-negative.}}
+ {\PackageError{synthslant}
+ {\string\synthslant\space <\space 0}
+ {Pass\space a\space value\space that\space
+ is\space nonnegative.}}
{}
\fp_compare:nNnTF {\synthnegslant} > {.0}
- {\PackageError{synthslant}{\string\synthnegslant\space >\space 0}
- {Pass\space a\space value\space that\space is\space non-positive.}}
+ {\PackageError{synthslant}
+ {\string\synthnegslant\space >\space 0}
+ {Pass\space a\space value\space that\space
+ is\space nonpositive.}}
{}
\ExplSyntaxOff
@@ -2176,7 +2441,7 @@ end
% \end{macro}
%
%
-% \subsubsection{\acronym{PDF} Slant Engine}
+% \subsubsection{\texorpdfstring{\acronym{PDF}}{PDF} Slant Engine}
%
% The \acronym{PDF}-engine works well and it is the best tested alternative.
%
@@ -2251,13 +2516,15 @@ end
% \begin{macrocode}
\fp_compare:nNnTF {#1} >= {.0}
{
- \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim - #1\l_tmpb_dim}
+ \box_set_wd:Nn \l_tmpa_box
+ {\l_tmpa_dim - #1\l_tmpb_dim}
}
{
\draw_suspend_begin:
\kern#1\l_tmpb_dim
\draw_suspend_end:
- \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim + #1\l_tmpb_dim}
+ \box_set_wd:Nn \l_tmpa_box
+ {\l_tmpa_dim + #1\l_tmpb_dim}
}
% \end{macrocode}
%
@@ -2348,7 +2615,8 @@ end
% \begin{macrocode}
\newcommand*{\synthslantbox@fontspect@shear@box}[2]{
\begingroup
- \expandafter\fontspec[FakeSlant = #1]{\l_fontspec_family_tl}
+ \expandafter
+ \fontspec[FakeSlant=#1]{\l_fontspec_family_tl}
#2
\endgroup
}
@@ -2473,8 +2741,12 @@ end
% \begin{macrocode}
\ifnum\synthslant@engine=4% fontspec
\newrobustcmd*{\synthslantbox}[2]{%
- \edef\synthslant@slant@value{#1}% definition for compatibility of both branches
- \synthslantbox@fontspect@shear@box{\synthslant@slant@value}{#2}%
+% \end{macrocode}
+% The following (expanding) definition is only here for the compatibility of both branches.
+% \begin{macrocode}
+ \edef\synthslant@slant@value{#1}
+ \synthslantbox@fontspect@shear@box{\synthslant@slant@value}
+ {#2}%
}
% \end{macrocode}
%
@@ -2530,7 +2802,8 @@ end
\NewDocumentEnvironment{slantenvironment}{}
{\upshape
\ifcsdef{microtypecontext}
- {\expandafter\microtypecontext\expandafter{\slantcontext}}
+ {\expandafter\microtypecontext
+ \expandafter{\slantcontext}}
{}}
{\ifcsdef{endmicrotypecontext}
{\endmicrotypecontext}
@@ -2557,8 +2830,8 @@ end
% \end{macro}
%
% \begin{macro}{\synthslantbox@right@negslant@correction}
-% We could play the same trick here as in \cs{synthslantbox@right@slant@correction} and use
-% \cs{synthnegslant} instead of \cs{synthslant}. But my experiments show no need for a
+% We could play the same trick here as in \cs{synthslantbox@\-right@\-slant@\-correction} and
+% use \cs{synthnegslant} instead of \cs{synthslant}. But my experiments show no need for a
% correction. Anyhow, this macro may be convenient to override someday.
%
% \begin{macrocode}
@@ -2588,7 +2861,8 @@ end
\NewDocumentEnvironment{negslantenvironment}{}
{\itshape
\ifcsdef{microtypecontext}
- {\expandafter\microtypecontext\expandafter{\negslantcontext}}
+ {\expandafter\microtypecontext
+ \expandafter{\negslantcontext}}
{}}
{\ifcsdef{endmicrotypecontext}
{\endmicrotypecontext}
@@ -2622,7 +2896,7 @@ end
%
%
% \addtocontents{toc}{\protect\end{multicols}}
-% \addtocontents{toc}{\endgroup}
+% \addtocontents{toc}{\protect\end{list}}
%
%
% \Finale
@@ -4889,7 +5163,7 @@ KJ8AAAAASUVORK5CYII=
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
-\setlength{\overfullrule}{3pt}
+\setlength{\overfullrule}{0pt}
\pagestyle{plain}
@@ -5254,6 +5528,20 @@ right: \code{\cs{textsynthslant}\{Show line-break\cs{-}ing in a sen\cs{-}tence.\
%
%
%
+% \iffalse
+%<*minimal-test>
+\documentclass{minimal}
+
+\usepackage{synthslant}
+
+\begin{document}
+\textsynthslant{abc}
+\end{document}
+%</minimal-test>
+% \fi
+%
+%
+%
\endinput
%
%
diff --git a/macros/latex/contrib/synthslant/synthslant.ins b/macros/latex/contrib/synthslant/synthslant.ins
index 845b4378b1..f7027fe6f5 100644
--- a/macros/latex/contrib/synthslant/synthslant.ins
+++ b/macros/latex/contrib/synthslant/synthslant.ins
@@ -1,11 +1,11 @@
%% Copyright (C) 2024 by Ch. L. Spiel
%%
%% This work may be distributed and/or modified under the conditions
-%% of the LaTeX Project Public License, either version 1.3 of this
+%% of the LaTeX Project Public License, either version 1.3c of this
%% license or (at your option) any later version. The latest version
%% of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2003/12/01 or later.
@@ -23,11 +23,11 @@ This is a generated file.
Copyright (C) 2024 by Ch. L. Spiel
This work may be distributed and/or modified under the conditions
-of the LaTeX Project Public License, either version 1.3 of this
+of the LaTeX Project Public License, either version 1.3c of this
license or (at your option) any later version. The latest version
of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
version 2003/12/01 or later.
This work has the LPPL maintenance status `maintained'.
@@ -46,12 +46,15 @@ shear-transform.mp, and title.mp.
\generate{\file{synthslant.sty}{\from{\source}{package}}
\file{synthslant-gauge.tex}{\from{\source}{gauge}}
- \file{synthslant.ist}{\from{\source}{index-style}}}
+ \file{synthslant-minimal-test.tex}{\from{\source}{minimal-test}}}
\nopostamble
-\generate{\file{title.mp}{\from{\source}{title}}}
-\generate{\file{shear-transform.mp}{\from{\source}{shear-transform}}}
+\generate{\file{shear-transform.mp}{\from{\source}{shear-transform}}
+ \file{synthslant.gst}{\from{\source}{changes-style}}
+ \file{synthslant.ist}{\from{\source}{index-style}}
+ \file{title.mp}{\from{\source}{title}}}
+
\nopreamble
diff --git a/macros/latex/contrib/tagpdf/README.md b/macros/latex/contrib/tagpdf/README.md
index 9602302c2a..edcdc6b5e6 100644
--- a/macros/latex/contrib/tagpdf/README.md
+++ b/macros/latex/contrib/tagpdf/README.md
@@ -1,6 +1,6 @@
#tagpdf — A package to create tagged pdf
-Packageversion: 0.99c
-Packagedate: 2024/06/20
+Packageversion: 0.99d
+Packagedate: 2024/08/02
Author: Ulrike Fischer, LaTeX Project Team
## License
diff --git a/macros/latex/contrib/tagpdf/ex-AF-file.pdf b/macros/latex/contrib/tagpdf/ex-AF-file.pdf
index 37673eac26..9ba962e1e3 100644
--- a/macros/latex/contrib/tagpdf/ex-AF-file.pdf
+++ b/macros/latex/contrib/tagpdf/ex-AF-file.pdf
@@ -1,11 +1,11 @@
%PDF-2.0
%
22 0 obj
-<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<</ModDate (D:20240620175033+02'00') /Size 151 /CheckSum (4C0D15859D9BA750E65BE6F420DEA972) >> /Length 151 >>
+<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<</ModDate (D:20240802125547+02'00') /Size 151 /CheckSum (D4716966C44F441B4E4C1D2DD929683B) >> /Length 151 >>
stream
%% LaTeX2e file `example-input-file.tex'
%% generated by the `filecontents' environment
-%% from source `ex-AF-file' on 2024/06/20.
+%% from source `ex-AF-file' on 2024/08/02.
%%
Additional info!
@@ -15,7 +15,7 @@ endobj
<< /Type /Filespec /AFRelationship /Unspecified /F (example-input-file.tex) /UF <FEFF006500780061006D0070006C0065002D0069006E007000750074002D00660069006C0065002E007400650078> /EF<</F 22 0 R/UF 22 0 R>> >>
endobj
25 0 obj
-<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240620) >> /Length 19 >>
+<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240802) >> /Length 19 >>
stream
Bär with teh shirt
endstream
@@ -24,7 +24,7 @@ endobj
<< /Type /Filespec /AFRelationship /Supplement /F (tag-AFfile1.txt) /UF <FEFF007400610067002D0041004600660069006C00650031002E007400780074> /EF<</F 25 0 R/UF 25 0 R>> >>
endobj
28 0 obj
-<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240620) >> /Length 4 >>
+<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240802) >> /Length 4 >>
stream
Duck
endstream
@@ -242,17 +242,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:50:54+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:56:09+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-AF-file.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:50:54+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:50:54+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:50:54+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:56:09+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:56:09+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:56:09+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:38d5a844-2217-4081-87cc-b2129dc357a6</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:9859f422-c856-46c6-8928-4dfab5f8790c</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:3ff2b426-7c06-4861-8f14-4e8e04ac9b4c</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -347,7 +347,7 @@ endobj
<< /Type /Namespace /NS (https://www.latex-project.org/ns/book/2022) /RoleMapNS 18 0 R >>
endobj
19 0 obj
-<< /Type /Namespace /NS (data:,15379C35-DB3-5B3E-89A5-42149DCFB2F) >>
+<< /Type /Namespace /NS (data:,BBA64916-90D9-A0B9-F592-8E68FD20F532) >>
endobj
8 0 obj
[ 9 0 R 11 0 R 13 0 R 15 0 R 17 0 R 19 0 R ]
@@ -449,7 +449,7 @@ endobj
<< /Type /Catalog /Pages 36 0 R /MarkInfo 37 0 R/Lang (de-DE)/Metadata 31 0 R/StructTreeRoot 5 0 R >>
endobj
46 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175054+02'00')/ModDate (D:20240620175054+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125609+02'00')/ModDate (D:20240802125609+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 47
@@ -458,10 +458,10 @@ xref
0000000003 00000 f
0000000004 00000 f
0000000010 00000 f
-0000016360 00000 n
+0000016362 00000 n
0000013627 00000 n
0000013838 00000 n
-0000015790 00000 n
+0000015792 00000 n
0000014417 00000 n
0000000012 00000 f
0000014485 00000 n
@@ -474,34 +474,34 @@ xref
0000015425 00000 n
0000015703 00000 n
0000000000 00000 f
-0000015851 00000 n
+0000015853 00000 n
0000000020 00000 n
0000000382 00000 n
-0000015964 00000 n
+0000015966 00000 n
0000000603 00000 n
0000000758 00000 n
-0000016096 00000 n
+0000016098 00000 n
0000000943 00000 n
0000001083 00000 n
-0000016228 00000 n
+0000016230 00000 n
0000001268 00000 n
0000013481 00000 n
0000013346 00000 n
0000012740 00000 n
-0000020113 00000 n
-0000020467 00000 n
+0000020115 00000 n
+0000020469 00000 n
0000013591 00000 n
0000013684 00000 n
0000013801 00000 n
-0000016480 00000 n
-0000018929 00000 n
-0000016666 00000 n
-0000019150 00000 n
-0000020267 00000 n
-0000020529 00000 n
-0000020647 00000 n
+0000016482 00000 n
+0000018931 00000 n
+0000016668 00000 n
+0000019152 00000 n
+0000020269 00000 n
+0000020531 00000 n
+0000020649 00000 n
trailer
-<< /Size 47 /Root 45 0 R /Info 46 0 R /ID [ <CB0601DB4D9A68774E7E29190E0D5823> <CB0601DB4D9A68774E7E29190E0D5823> ] >>
+<< /Size 47 /Root 45 0 R /Info 46 0 R /ID [ <E2F9D94DBDFC11D2EE5801BA51FD5C99> <E2F9D94DBDFC11D2EE5801BA51FD5C99> ] >>
startxref
-20870
+20872
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf
index 8bbbbcc16c..f64d4e66bf 100644
--- a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf
+++ b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf
Binary files differ
diff --git a/macros/latex/contrib/tagpdf/ex-attribute.pdf b/macros/latex/contrib/tagpdf/ex-attribute.pdf
index 172ce02990..feda9e252a 100644
--- a/macros/latex/contrib/tagpdf/ex-attribute.pdf
+++ b/macros/latex/contrib/tagpdf/ex-attribute.pdf
@@ -216,17 +216,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:51:49+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:57:08+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-attribute.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:51:49+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:51:49+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:51:49+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:57:08+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:57:08+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:57:08+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:7a9cf910-1c19-429a-8f24-339c62d8a57f</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:d4b89449-5e1d-43cf-83af-3903105d1b3f</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:b262e437-7e89-4c42-8e29-bedae4c498b6</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -450,7 +450,7 @@ endobj
<< /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (de_DE)/Metadata 21 0 R/StructTreeRoot 5 0 R >>
endobj
38 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20240620175149+02'00')/ModDate (D:20240620175149+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20240802125708+02'00')/ModDate (D:20240802125708+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 39
@@ -494,7 +494,7 @@ xref
0000017721 00000 n
0000017839 00000 n
trailer
-<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <658202793A4D39DC44497E1203173F04> <658202793A4D39DC44497E1203173F04> ] >>
+<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <2033D8BFB67E1F1EDFB190E1DEC10A2C> <2033D8BFB67E1F1EDFB190E1DEC10A2C> ] >>
startxref
18076
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf
index 9ac7a851bc..637338d16f 100644
--- a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf
+++ b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf
@@ -239,17 +239,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:52:18+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:57:37+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-formula-problem.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:52:18+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:52:18+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:52:18+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:57:37+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:57:37+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:57:37+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:8eb2ce1d-b2ec-440a-8bc2-73733eb3eeb0</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:b48ac58a-5b57-46ab-8ab8-087479364eeb</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:8fbc3896-5f57-401a-81d8-1fdb02abac8a</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>2</prism:pageCount>
</rdf:Description>
@@ -425,7 +425,7 @@ endobj
<< /Type /Catalog /Pages 16 0 R /MarkInfo 23 0 R/Lang (de-DE)/Metadata 19 0 R/StructTreeRoot 5 0 R >>
endobj
33 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175218+02'00')/ModDate (D:20240620175218+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125737+02'00')/ModDate (D:20240802125737+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 34
@@ -464,7 +464,7 @@ xref
0000018886 00000 n
0000019004 00000 n
trailer
-<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <4A2EBD4B9A1971E2BAF6A530303DF07B> <4A2EBD4B9A1971E2BAF6A530303DF07B> ] >>
+<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <84EDE341B761805B059537E407E8C0CD> <84EDE341B761805B059537E407E8C0CD> ] >>
startxref
19227
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-list.pdf b/macros/latex/contrib/tagpdf/ex-list.pdf
index 2346b0398a..381477d829 100644
--- a/macros/latex/contrib/tagpdf/ex-list.pdf
+++ b/macros/latex/contrib/tagpdf/ex-list.pdf
@@ -210,17 +210,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:52:47+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:58:08+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-list.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:52:47+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:52:47+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:52:47+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:58:08+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:58:08+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:58:08+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:4c749825-1de7-414c-879f-29e4d0bef66e</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:843c5ce9-108a-49d8-86ef-881382f178ee</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:0803684d-fad7-4d08-8dc2-c5108f24d889</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -654,7 +654,7 @@ endobj
<< /Type /Catalog /Pages 54 0 R /MarkInfo 55 0 R/Lang (en)/Metadata 48 0 R/StructTreeRoot 5 0 R >>
endobj
72 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175247+02'00')/ModDate (D:20240620175247+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125808+02'00')/ModDate (D:20240802125808+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 73
@@ -732,7 +732,7 @@ xref
0000029590 00000 n
0000029705 00000 n
trailer
-<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ <14B40F363BE2C4EFB96EAE91DC2CE4F7> <14B40F363BE2C4EFB96EAE91DC2CE4F7> ] >>
+<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ <0EE2DD31789AD5C7E80F8407D72CF075> <0EE2DD31789AD5C7E80F8407D72CF075> ] >>
startxref
29928
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf
index 70cfe5e793..6d60e10736 100644
--- a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf
+++ b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf
@@ -243,17 +243,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:53:22+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:58:35+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-mc-manual-para-split-obsolete.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:53:22+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:53:22+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:53:22+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:58:35+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:58:35+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:58:35+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:c33d64b4-96ec-4e48-8f27-0b3edc831547</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:36712ce3-22f3-4c4a-8418-0427448d178a</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:075c36f4-757d-4e0f-8258-3c0a3e372d69</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>2</prism:pageCount>
</rdf:Description>
@@ -413,7 +413,7 @@ endobj
<< /Type /Catalog /Pages 14 0 R /Lang (de)/Metadata 15 0 R >>
endobj
25 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175322+02'00')/ModDate (D:20240620175322+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125835+02'00')/ModDate (D:20240802125835+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 26
@@ -444,7 +444,7 @@ xref
0000023894 00000 n
0000023972 00000 n
trailer
-<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ <2A141E41EDA78C2ADA31A952D041C439> <2A141E41EDA78C2ADA31A952D041C439> ] >>
+<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ <1A7EFBAD198841A82D20467F858B3B6C> <1A7EFBAD198841A82D20467F858B3B6C> ] >>
startxref
24195
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf
index 5f96db2bdb..09a8d8aca0 100644
--- a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf
+++ b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf
@@ -210,17 +210,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:53:55+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:59:01+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-softhyphen.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:53:55+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:53:55+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:53:55+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:59:01+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:59:01+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:59:01+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:aa82e685-4098-469d-861c-3c45dfc700c7</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:9c8a342f-f758-4367-8d05-7621809f3e05</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:994c7ab3-d509-4a5b-88b5-92bca5031c75</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -393,7 +393,7 @@ endobj
<< /Type /Catalog /Pages 19 0 R /MarkInfo 20 0 R/Lang (de)/Metadata 14 0 R/StructTreeRoot 5 0 R >>
endobj
30 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175355+02'00')/ModDate (D:20240620175355+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125901+02'00')/ModDate (D:20240802125901+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 31
@@ -429,7 +429,7 @@ xref
0000018113 00000 n
0000018228 00000 n
trailer
-<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ <5BCC76B86A64606D9B117AF50FFA18AE> <5BCC76B86A64606D9B117AF50FFA18AE> ] >>
+<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ <EECF5F575625EC21F0BEE870E572FEB1> <EECF5F575625EC21F0BEE870E572FEB1> ] >>
startxref
18451
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf
index 21b11b9346..35e1d0609a 100644
--- a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf
+++ b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf
@@ -210,17 +210,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:54:22+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:59:25+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-spaceglyph-listings.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:54:22+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:54:22+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:54:22+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:59:25+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:59:25+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:59:25+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:acdc2435-bf29-4e54-8d09-1c9b6dc32038</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:ad8487cb-8dcc-4cab-8542-55106010deec</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:c59181fc-bb69-430b-8f90-90206d3ba579</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -354,7 +354,7 @@ endobj
<< /Type /Catalog /Pages 15 0 R /MarkInfo 16 0 R/Lang (de)/Metadata 10 0 R/StructTreeRoot 5 0 R >>
endobj
26 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175422+02'00')/ModDate (D:20240620175422+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125925+02'00')/ModDate (D:20240802125925+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 27
@@ -386,7 +386,7 @@ xref
0000015485 00000 n
0000015600 00000 n
trailer
-<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <50A5738B4CABF76A4CC27558811B7E58> <50A5738B4CABF76A4CC27558811B7E58> ] >>
+<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <EC0A5DEABF5EE1A293FAD60891A0BF63> <EC0A5DEABF5EE1A293FAD60891A0BF63> ] >>
startxref
15823
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf
index 7c9c135bf7..73ce1c0602 100644
--- a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf
+++ b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf
@@ -210,17 +210,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:54:47+02:00</rdf:li>
+ <rdf:li>2024-08-02T12:59:50+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-structure-obsolete.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:54:47+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:54:47+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:54:47+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T12:59:50+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T12:59:50+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T12:59:50+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:bf5e4a2b-cfa9-4fc5-878c-8f9d2ee95445</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:971e1e25-37c4-4af9-8523-72714a87dea7</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:2ccba557-e5ae-4703-80db-28b73a88c1cd</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -526,7 +526,7 @@ endobj
<< /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (de)/Metadata 20 0 R/StructTreeRoot 5 0 R >>
endobj
43 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175447+02'00')/ModDate (D:20240620175447+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125950+02'00')/ModDate (D:20240802125950+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 44
@@ -575,7 +575,7 @@ xref
0000023423 00000 n
0000023538 00000 n
trailer
-<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <ADB87D57539D5CE2A8FC3A4721B94DA0> <ADB87D57539D5CE2A8FC3A4721B94DA0> ] >>
+<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <AE5400E970AB8EBE6C04A229EBA70E89> <AE5400E970AB8EBE6C04A229EBA70E89> ] >>
startxref
23761
%%EOF
diff --git a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf
index 81423fede4..7147cd1e91 100644
--- a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf
+++ b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf
@@ -210,17 +210,17 @@ stream
</dc:language>
<dc:date>
<rdf:Seq>
- <rdf:li>2024-06-20T17:55:14+02:00</rdf:li>
+ <rdf:li>2024-08-02T13:00:16+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:format>application/pdf</dc:format>
<dc:source>ex-tagpdf-template.tex</dc:source>
<xmp:CreatorTool>LaTeX</xmp:CreatorTool>
- <xmp:CreateDate>2024-06-20T17:55:14+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2024-06-20T17:55:14+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2024-06-20T17:55:14+02:00</xmp:MetadataDate>
+ <xmp:CreateDate>2024-08-02T13:00:16+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-08-02T13:00:16+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-08-02T13:00:16+02:00</xmp:MetadataDate>
<xmpMM:DocumentID>uuid:f320abfc-f6ab-4d12-8719-d176f4d947cf</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:898c4009-cc18-43c3-8fda-44ab8e28318c</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:3b4409f1-f3e5-4c01-86c4-a0bcea68ea38</xmpMM:InstanceID>
<prism:complianceProfile>three</prism:complianceProfile>
<prism:pageCount>1</prism:pageCount>
</rdf:Description>
@@ -307,7 +307,7 @@ endobj
<< /Type /Namespace /NS (https://www.latex-project.org/ns/book/2022) /RoleMapNS 18 0 R >>
endobj
19 0 obj
-<< /Type /Namespace /NS (data:,69C62BB9-6D5A-6FC9-FD75-56BC71E087F4) >>
+<< /Type /Namespace /NS (data:,25352333-84F8-941A-42AB-414B46468294) >>
endobj
8 0 obj
[ 9 0 R 11 0 R 13 0 R 15 0 R 17 0 R 19 0 R ]
@@ -399,7 +399,7 @@ endobj
<< /Type /Catalog /Pages 31 0 R /MarkInfo 32 0 R/Lang (en)/Metadata 26 0 R/StructTreeRoot 5 0 R >>
endobj
42 0 obj
-<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175514+02'00')/ModDate (D:20240620175514+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
+<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802130016+02'00')/ModDate (D:20240802130016+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >>
endobj
xref
0 43
@@ -447,7 +447,7 @@ xref
0000017842 00000 n
0000017957 00000 n
trailer
-<< /Size 43 /Root 41 0 R /Info 42 0 R /ID [ <E36FE13F3FA0066C1F9796E38E50018C> <E36FE13F3FA0066C1F9796E38E50018C> ] >>
+<< /Size 43 /Root 41 0 R /Info 42 0 R /ID [ <42D962292B4982520E998D32C837DE43> <42D962292B4982520E998D32C837DE43> ] >>
startxref
18180
%%EOF
diff --git a/macros/latex/contrib/tagpdf/link-figure-input.tex b/macros/latex/contrib/tagpdf/link-figure-input.tex
index ef07c33e95..1a1036d282 100644
--- a/macros/latex/contrib/tagpdf/link-figure-input.tex
+++ b/macros/latex/contrib/tagpdf/link-figure-input.tex
@@ -27,7 +27,7 @@
\NewDocumentCommand\balloon{m}{%
\node[fit={(pic cs:#1-first) (pic cs:#1-end)
([yshift=7pt]pic cs:#1-end)},balloon](#1){};}
-\begin{tikzpicture}[overlay,remember picture]
+\begin{tikzpicture}[overlay,remember picture,alt={Illustration of link annotation structure}]
\balloon{link}
\balloon{structparent}
\balloon{OBJR}
@@ -45,7 +45,7 @@
\draw[ref] (kid)--(OBJR);
\draw[ref] (OBJR)--(linkref);
\end{tikzpicture}
-\begin{lstlisting}[name=OBJR]
+\begin{taglstlisting}[name=OBJR]
*\tikzmark{link-first}*18 0 obj*\tikzmark{link-end}* %Link Object
<< /Type /Annot /Subtype/Link
/Rect [ 196.109 494.573 399.167 506.831 ]
@@ -67,4 +67,4 @@ endobj};
<< /Nums
[... *\tikzmark{pnum-first}*16*\tikzmark{pnum-end}* *\tikzmark{pref-first}*17 0 R*\tikzmark{pref-end}* ...] >>
endobj
-\end{lstlisting}
+\end{taglstlisting}
diff --git a/macros/latex/contrib/tagpdf/pac2024-report.png b/macros/latex/contrib/tagpdf/pac2024-report.png
new file mode 100644
index 0000000000..4474bc989f
--- /dev/null
+++ b/macros/latex/contrib/tagpdf/pac2024-report.png
Binary files differ
diff --git a/macros/latex/contrib/tagpdf/pac2024-version.png b/macros/latex/contrib/tagpdf/pac2024-version.png
new file mode 100644
index 0000000000..1bc12bdafe
--- /dev/null
+++ b/macros/latex/contrib/tagpdf/pac2024-version.png
Binary files differ
diff --git a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx
index 7e19e1e90f..0ed233e2e0 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx
@@ -47,13 +47,13 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{implementation}
% \begin{macrocode}
%<@@=tag>
%<*luatex>
-\ProvidesExplFile {tagpdf-luatex.def} {2024-06-20} {0.99c}
+\ProvidesExplFile {tagpdf-luatex.def} {2024-08-02} {0.99d}
{tagpdf~driver~for~luatex}
% \end{macrocode}
% \section{Loading the lua}
@@ -164,8 +164,8 @@
local ProvidesLuaModule = {
name = "tagpdf",
- version = "0.99c", --TAGVERSION
- date = "2024-06-20", --TAGDATE
+ version = "0.99d", --TAGVERSION
+ date = "2024-08-02", --TAGDATE
description = "tagpdf lua code",
license = "The LATEX Project Public License 1.3c"
}
@@ -252,6 +252,12 @@ local iwfontattributeid = luatexbase.new_attribute ("g_@@_interwordfont_attr")
local tagunmarkedbool= token.create("g_@@_tagunmarked_bool")
local truebool = token.create("c_true_bool")
% \end{macrocode}
+% with this token we can query the state of the softhyphen boolean
+% and so detect if hyphens from hyphenation should be replaced by soft-hyphens.
+% \begin{macrocode}
+local softhyphenbool = token.create("g_@@_softhyphen_bool")
+% \end{macrocode}
+
% Now a number of local versions from global tables.
% Not all is perhaps needed, most node variants were copied from lua-debug.
% \begin{macrocode}
@@ -286,6 +292,9 @@ local KERN = node.id("kern")
local PENALTY = node.id("penalty")
local LOCAL_PAR = node.id("local_par")
local MATH = node.id("math")
+
+local explicit_disc = 1
+local regular_disc = 3
% \end{macrocode}
% Now we setup the main table structure. ltx is used by other latex code too!
% \begin{macrocode}
@@ -1267,6 +1276,80 @@ function ltx.@@.func.output_parenttree (abspage)
end
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}
+% {
+% process_softhyphen_pre
+% process_softhyphen_post
+% }
+% First some local definitions. Since these are only needed locally everything gets wrapped into a block.
+% \begin{macrocode}
+do
+ local properties = node.get_properties_table()
+ local is_soft_hyphen_prop = 'tagpdf.rewrite-softhyphen.is_soft_hyphen'
+ local hyphen_char = 0x2D
+ local soft_hyphen_char = 0xAD
+% \end{macrocode}
+%
+% A lookup table to test if the font supports the soft hyphen glyph.
+% \begin{macrocode}
+ local softhyphen_fonts = setmetatable({}, {__index = function(t, fid)
+ local fdir = identifiers[fid]
+ local format = fdir and fdir.format
+ local result = (format == 'opentype' or format == 'truetype')
+ local characters = fdir and fdir.characters
+ result = result and (characters and characters[soft_hyphen_char]) ~= nil
+ t[fid] = result
+ return result
+ end})
+% \end{macrocode}
+%
+% A pre shaping callback to mark hyphens as being hyphenation hyphens.
+% This runs before shaping to avoid affecting hyphens moved into
+% discretionaries during shaping.
+% \begin{macrocode}
+ local function process_softhyphen_pre(head, _context, _dir)
+ if softhyphenbool.mode ~= truebool.mode then return true end
+ for disc, sub in node.traverse_id(DISC, head) do
+ if sub == explicit_disc or sub == regular_disc then
+ for n, _ch, _f in node.traverse_char(disc.pre) do
+ local props = properties[n]
+ if not props then
+ props = {}
+ properties[n] = props
+ end
+ props[is_soft_hyphen_prop] = true
+ end
+ end
+ end
+ return true
+ end
+
+% \end{macrocode}
+%
+% Finally do the actual replacement after shaping. No checking for double processing here
+% since the operation is idempotent.
+% \begin{macrocode}
+ local function process_softhyphen_post(head, _context, _dir)
+ if softhyphenbool.mode ~= truebool.mode then return true end
+ for disc, sub in node.traverse_id(DISC, head) do
+ for n, ch, fid in node.traverse_glyph(disc.pre) do
+ local props = properties[n]
+ if softhyphen_fonts[fid] and ch == hyphen_char and props and props[is_soft_hyphen_prop] then
+ n.char = soft_hyphen_char
+ props.glyph_info = nil
+ end
+ end
+ end
+ return true
+ end
+
+ luatexbase.add_to_callback('pre_shaping_filter', process_softhyphen_pre, 'tagpdf.rewrite-softhyphen')
+ luatexbase.add_to_callback('post_shaping_filter', process_softhyphen_post, 'tagpdf.rewrite-softhyphen')
+end
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</lua>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx
index 345b2e35ba..3cbe3b141b 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \section{Commands}
@@ -331,7 +331,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-checks-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-checks-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to checks, conditionals, debugging and messages}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-code.pdf b/macros/latex/contrib/tagpdf/tagpdf-code.pdf
index 4dd216d1a9..76e839d0d5 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-code.pdf
+++ b/macros/latex/contrib/tagpdf/tagpdf-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/tagpdf/tagpdf-data.dtx b/macros/latex/contrib/tagpdf/tagpdf-data.dtx
index f07e5db3ed..6417b44c40 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-data.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-data.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% This files contains a various data files which are read in
@@ -61,7 +61,7 @@
% latex-lab has also a namespace module, which takes precedence!
% \begin{macrocode}
%<*ns-latex>
-%% \ProvidesExplFile {tagpdf-ns-latex.def} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-ns-latex.def} {2024-08-02} {0.99d}
%% {latex} {https://www.latex-project.org/ns/dflt/2022}{}
title, Title, pdf2,
part, Title, pdf2,
@@ -93,7 +93,7 @@ text, P, pdf2,
% It is bound to change
% \begin{macrocode}
%<*ns-latex-book>
-%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2024-08-02} {0.99d}
%% {latex-book} {https://www.latex-project.org/ns/book/2022}{}
chapter, H1,pdf2,
section, H2,pdf2,
@@ -107,7 +107,7 @@ subparagraph, H6,pdf2,
% \section{The pdf namespace data}
% \begin{macrocode}
%<*ns-pdf>
-%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2024-08-02} {0.99d}
%% {pdf} {http://iso.org/pdf/ssn}{}
StructTreeRoot,StructTreeRoot,pdf,D,
Document,Document,pdf,D,
@@ -175,7 +175,7 @@ Strong,Span,pdf,I,
% \section{The pdf 2.0 namespace data}
% \begin{macrocode}
%<*ns-pdf2>
-%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2024-08-02} {0.99d}
%% {pdf2} {http://iso.org/pdf2/ssn}{}
StructTreeRoot,StructTreeRoot,pdf2,D,
Document,Document,pdf2,D,
@@ -232,7 +232,7 @@ Strong,Strong,pdf2,I,
% \section{The mathml namespace data}
% \begin{macrocode}
%<*ns-mathml>
-%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2024-08-02} {0.99d}
% {mathml}{http://www.w3.org/1998/Math/MathML}{}
abs,abs,mathml,
and,and,mathml,
@@ -467,7 +467,7 @@ xor,xor,mathml,
% This will perhaps change in future.
% \begin{macrocode}
%<*parent-child>
-%% \ProvidesExplFile {tagpdf-parent-child.csv} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-parent-child.csv} {2024-08-02} {0.99d}
,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC
Document,both,document level,1,0..n,∅,‡,‡,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅
Art,1.7,grouping,∅,0..n,∅,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅
@@ -522,7 +522,7 @@ MC,both,---,∅,∅,∅,∅,∅,∅,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0..
% This will perhaps change in future.
% \begin{macrocode}
%<*parent-child-2>
-%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2024-06-20} {0.99c}
+%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2024-08-02} {0.99d}
,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC
Document,both,document level,1,0..n,0..n,∅,‡,‡,∅,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅
DocumentFragment,2.0,document level,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,0..n,∅
diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx
index 0cef27fd3b..ff036b5523 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \end{documentation}
@@ -55,11 +55,11 @@
% \begin{macrocode}
%<@@=tag>
%<*generic>
-\ProvidesExplPackage {tagpdf-mc-code-generic} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-mc-code-generic} {2024-08-02} {0.99d}
{part of tagpdf - code related to marking chunks - generic mode}
%</generic>
%<*debug>
-\ProvidesExplPackage {tagpdf-debug-generic} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-debug-generic} {2024-08-02} {0.99d}
{part of tagpdf - debugging code related to marking chunks - generic mode}
%</debug>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx
index 7dd309c5f5..3c2e91605e 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{implementation}
% The code is split into three parts: code shared by all engines,
@@ -86,11 +86,11 @@
% \begin{macrocode}
%<@@=tag>
%<*luamode>
-\ProvidesExplPackage {tagpdf-mc-code-lua} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-mc-code-lua} {2024-08-02} {0.99d}
{tagpdf - mc code only for the luamode }
%</luamode>
%<*debug>
-\ProvidesExplPackage {tagpdf-debug-lua} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-debug-lua} {2024-08-02} {0.99d}
{part of tagpdf - debugging code related to marking chunks - lua mode}
%</debug>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx
index c96fd8c4c8..5bfe0658d1 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \section{Public Commands}
@@ -181,7 +181,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-mc-code-shared} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-mc-code-shared} {2024-08-02} {0.99d}
{part of tagpdf - code related to marking chunks -
code shared by generic and luamode }
%</header>
diff --git a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx
index 80f9da0f6b..fb5f1b77c9 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \begin{function}
@@ -98,7 +98,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-roles-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-roles-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to roles and structure names}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-space.dtx b/macros/latex/contrib/tagpdf/tagpdf-space.dtx
index a29c8f0fb3..5c8e007084 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-space.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-space.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \begin{function}{activate/space (setup-key),interwordspace (deprecated)}
@@ -66,7 +66,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-space-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-space-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to real space chars}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx
index 963852b1fc..6da5e48b18 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \section{Public Commands}
@@ -285,7 +285,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-struct-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-struct-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to storing structure}
%</header>
% \end{macrocode}
@@ -1937,7 +1937,7 @@
% \section{Attributes and attribute classes}
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage {tagpdf-attr-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-attr-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to attributes and attribute classes}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx
index 04b9309597..f7ae6de996 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx
@@ -47,13 +47,13 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{implementation}
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-tree-code} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-tree-code} {2024-08-02} {0.99d}
{part of tagpdf - code related to writing trees and dictionaries to the pdf}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf-user.dtx b/macros/latex/contrib/tagpdf/tagpdf-user.dtx
index 916ff041d0..a4014b62e3 100644
--- a/macros/latex/contrib/tagpdf/tagpdf-user.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf-user.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Version 0.99c, released 2024-06-20}
+% \date{Version 0.99d, released 2024-08-02}
% \maketitle
% \begin{documentation}
% \section{Setup commands}
@@ -309,7 +309,7 @@
% \begin{macrocode}
%<@@=tag>
%<*header>
-\ProvidesExplPackage {tagpdf-user} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-user} {2024-08-02} {0.99d}
{tagpdf - user commands}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/tagpdf/tagpdf.dtx b/macros/latex/contrib/tagpdf/tagpdf.dtx
index e58570340e..b1d008a6e6 100644
--- a/macros/latex/contrib/tagpdf/tagpdf.dtx
+++ b/macros/latex/contrib/tagpdf/tagpdf.dtx
@@ -72,6 +72,12 @@
% marked up as artifact. The initial value is true.
% \end{function}
%
+% \begin{function}{activate/softhyphen (setup-key)}
+% This key allows to activates automatic handling of hyphens inserted
+% by hyphenation. It only is used in luamode and replaces hyphens
+% by U+00AD if the font supports this.
+% \end{function}
+%
% \begin{function}{page/tabsorder (setup-key), tabsorder (deprecated)}
% This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default)
% or |none|. Currently this is set more or less globally. More finer control can be
@@ -87,7 +93,7 @@
% \begin{macrocode}
%<@@=tag>
%<*package>
-\ProvidesExplPackage {tagpdf} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf} {2024-08-02} {0.99d}
{ A package to experiment with pdf tagging }
\bool_if:nF
@@ -113,7 +119,7 @@
% \end{macrocode}
%<*debug>
% \begin{macrocode}
-\ProvidesExplPackage {tagpdf-debug} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-debug} {2024-08-02} {0.99d}
{ debug code for tagpdf }
\@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput}
% \end{macrocode}
@@ -136,7 +142,7 @@
% we define a base package with dummy functions
% \begin{macrocode}
%<*base>
-\ProvidesExplPackage {tagpdf-base} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdf-base} {2024-08-02} {0.99d}
{part of tagpdf - provide base, no-op versions of the user commands }
%</base>
% \end{macrocode}
@@ -354,6 +360,13 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\g_@@_softhyphen_bool}
+% This boolean controls if the code should try to automatically
+% handle hyphens from hyphenation. It is currently only used in luamode.
+% \begin{macrocode}
+\bool_new:N \g_@@_softhyphen_bool
+% \end{macrocode}
+% \end{variable}
% \section{Variants of l3 commands}
% \begin{macrocode}
\prg_generate_conditional_variant:Nnn \pdf_object_if_exist:n {e}{T,F,TF}
@@ -648,6 +661,13 @@
tagunmarked .bool_gset:N = \g_@@_tagunmarked_bool,
% \end{macrocode}
% \end{macro}
+% \begin{macro}{activate/softhyphen (setup-key)}
+% This key activates (in luamode) the handling of soft hyphens.
+% \begin{macrocode}
+ activate/softhyphen .bool_gset:N = \g_@@_softhyphen_bool,
+ activate/softhyphen .initial:n = true,
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{page/tabsorder (setup-key),tabsorder (deprecated)}
% This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default)
% or |none|. Currently this is set more or less globally. More finer control can be
diff --git a/macros/latex/contrib/tagpdf/tagpdf.pdf b/macros/latex/contrib/tagpdf/tagpdf.pdf
index 04d46c2fbf..f7c6ea02a3 100644
--- a/macros/latex/contrib/tagpdf/tagpdf.pdf
+++ b/macros/latex/contrib/tagpdf/tagpdf.pdf
Binary files differ
diff --git a/macros/latex/contrib/tagpdf/tagpdf.tex b/macros/latex/contrib/tagpdf/tagpdf.tex
index ac1c33fa4a..10d36d09a0 100644
--- a/macros/latex/contrib/tagpdf/tagpdf.tex
+++ b/macros/latex/contrib/tagpdf/tagpdf.tex
@@ -16,8 +16,8 @@
}
\DebugBlocksOff
\makeatletter
-\def\UlrikeFischer@package@version{0.99c}
-\def\UlrikeFischer@package@date{2024-06-20}
+\def\UlrikeFischer@package@version{0.99d}
+\def\UlrikeFischer@package@date{2024-08-02}
\makeatother
\documentclass[bibliography=totoc,a4paper]{article}
@@ -338,13 +338,15 @@ improvements and new features in the \LaTeX\ kernel, the latex-lab bundle and
the \PDF\ management code and is now much better. Only a few
structures---mostly some from currently unsupported packages--- still need
manual tagging. But sadly the output of the validators don't quite reflect
-the improvements. The documentation uses now \PDF~2.0 and PAC~2024 can't handle
-this, it claims that the file is damaged. The Adobe validator has a bug and
+the improvements. The documentation uses now \PDF~2.0 and while the newest
+PAC~2024 can at least open the file it can not validate properly the file. For example
+it complains about the tabular header cells as it doesn't follow attribute classes.
+The Adobe validator has a bug and
doesn't like the (valid) use of the \texttt{Lbl} tag for the section numbers
(see figure~\ref{fig:adobe}).
-But even if the documentation passed the tests of the validators: as
+But even if the documentation would pass all the tests of the validators: as
mentioned above passing a formal test doesn't mean that the content is really
good and usable. The user commands used for the tagging and also some of the
patches used are still rather crude. So there is lot space for improvement.
@@ -354,8 +356,9 @@ Be aware that to create the tagged version a current lualatex-dev and a
current version of the pdfmanagment-testphase package is needed.
\end{tcolorbox}
-\includegraphics[alt=PAC 3 report]{pac3}
+\includegraphics[alt=PAC 2024 complains about PDF version]{pac2024-version}
+\includegraphics[alt=PAC 2024 complains about table header cells]{pac2024-report}
\begin{figure}
@@ -504,6 +507,10 @@ The key-val list understands at least the following keys. More keys are defined
least \PrintKeyName{activate/mc} has been used.
The old name of the key |interwordspace| is still supported but deprecated.
+\item[\PrintKeyName{activate/softhyphen}] Boolean. luamode only.
+ The key activates/deactivates the replacing of hard hyphens from hyphenation
+ by soft hyphens. By default this is activated.
+
\item[\PrintKeyName{role/new-tag}] Allows to define new tag names, see
section \ref{sec:new-tag} for a description.
@@ -721,11 +728,8 @@ To tag a \PDF{} three tasks must be carried out:
\minisec{Page stream with marked content}
-\tagpdfparaOff
-
-\tagstructbegin{tag=Figure,alt={Illustration of page stream with marked content},attribute=bbox}%
-\tagmcbegin{tag=Figure}%
-\begin{tikzpicture}[baseline=(a.north),node distance=2pt,remember picture]
+\begin{tikzpicture}[baseline=(a.north),node distance=2pt,remember picture,
+alt={Illustration of page stream with marked content}]
\node(start){\ldots~\ldots~\ldots};
\node[draw,base right = of start](a) {mc-chunk 1};
\node[draw,base right = of a](b) {mc-chunk 2};
@@ -733,20 +737,13 @@ To tag a \PDF{} three tasks must be carried out:
\node[draw,base right = of c](d) {mc-chunk 3};
\node[base right = of d] {\ldots~\ldots};
\end{tikzpicture}
-\tagmcend\tagstructend
-
-\tagpdfparaOn
\minisec{Structure}
-\tagpdfparaOff
\newlength\ydistance\setlength\ydistance{-0.8cm}
-\tagstructbegin{tag=Figure,alt={Illustration of structure},attribute=bbox}%
-\tagmcbegin{tag=Figure}%
-\begin{tikzpicture}[remember picture,baseline=(root.north)]
-
+\begin{tikzpicture}[remember picture,baseline=(root.north),alt={Illustration of structure}]
\node[draw,anchor=base west] (root) at (0,0) {Sect (start section)};
\node[draw,anchor=base west] at (0.3,\ydistance) {H (header section)};
\node[draw,anchor=base west](aref) at (0.6,2\ydistance){mc-chunk 1};
@@ -758,17 +755,12 @@ To tag a \PDF{} three tasks must be carried out:
\node[draw,anchor=base west] at (0.3,8\ydistance){/P (end paragraph)};
\node[draw,anchor=base west] at (0,9\ydistance){/Sect (end section)};
\end{tikzpicture}
-
\begin{tikzpicture}[remember picture, overlay]
\draw[->,red](aref)-|(a);
\draw[->,red](bref)-|(b);
\draw[->,red](cref)-|(c);
\draw[->,red](dref)-|(d);
-
\end{tikzpicture}
-\tagmcend\tagstructend
-
-\tagpdfparaOn
\end{tcolorbox}
@@ -1108,8 +1100,8 @@ the command, as the effect of the begin command ends with a new
\begin{docCommands}
{
- {doc name=tagmcuse},
- {doc name=tag_mc_use:n}
+ {doc name=tagmcuse,doc parameter=\marg{label}},
+ {doc name=tag_mc_use:n,doc parameter=\marg{label}}
}
\end{docCommands}
@@ -1283,13 +1275,8 @@ add the needed code.
\begin{figure}
-\tagpdfparaOff
-\tagstructbegin{tag=Figure,alt={Illustration of link annotation structure},attribute=bbox}\tagmcbegin{tag=Figure}
-\tagstop
\input{link-figure-input}
-\tagstart
-\tagmcend\tagstructend
\caption{Structure needed for a link annotation}\label{fig:linkannot}
@@ -2661,7 +2648,8 @@ already mentioned there are more requirements:
is normally not a problem. With pdflatex it could need additional
\verb+\pdfglyphtounicode+ commands.
- \item Hard and soft hyphen must be distinct.
+ \item Hard and soft hyphen must be distinct. In luamode this is now handled through
+ the \texttt{activate/softhyphen} key. For pdftex no solution is known.
\item Spaces between words should be space glyphs and not only a
horizontal movement. See section~\ref{sec:spacechars}.
@@ -3061,10 +3049,7 @@ examples and remarks easier to understand.
\item[postfix notation] \PDF{} uses in various places postfix
notation. This means that the operator is behind its arguments:
-\tagpdfparaOff
-
-\tagstructbegin{tag=Figure,alt={Illustration of postfix notation},attribute=bbox}\tagmcbegin{tag=Figure}
-\begin{tikzpicture}[baseline=(c.base)]
+\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}]
\node[arg](a1) {18};
\node[arg,right=of a1.east](a2) {0};
\node[operator,right= of a2.east](c) {obj};
@@ -3072,7 +3057,7 @@ examples and remarks easier to understand.
\draw[->] (c.south) --++(0,-2mm) -| (a2);
\end{tikzpicture}
-\begin{tikzpicture}[baseline=(c.base)]
+\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}]
\node[arg](a1) {18};
\node[arg,right=of a1.east](a2) {0};
\node[operator,right= of a2.east](c) {R};
@@ -3081,7 +3066,7 @@ examples and remarks easier to understand.
\end{tikzpicture} (a reference (operator R) to an object
-\begin{tikzpicture}[baseline=(c.base)]
+\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}]
\node[arg](a1) {1};
\node[arg,right = of a1.east](a2) {0};
\node[arg,right = of a2.east](a3) {0};
@@ -3097,19 +3082,15 @@ examples and remarks easier to understand.
\draw[->] (c.south) --++(0,-2mm) -|(a1);
\end{tikzpicture}
-\begin{tikzpicture}[baseline=(c.base)]
+\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}]
\node[arg](a1) {/P};
\node[arg,right = of a1.east](a2) {<</MCID 0>>};
\node[operator,right = of a2.east](c) {BDC};
\draw[->] (c.south) --++(0,-2mm) -| (a1);
\draw[->] (c.south) --++(0,-2mm) -| (a2);
\end{tikzpicture}
-\tagmcend\tagstructend
-
-\tagpdfparaOn
-
\item[Names] \PDF{} knows a sort of variable called a
\enquote{name}. Names start with a slash and may include any regular
characters, but not delimiter or white-space characters. Uppercase
@@ -3152,19 +3133,13 @@ examples and remarks easier to understand.
\mbox{\texttt{[0 15 0 R (hello) <</Type /X>> [1 2 3]]}}
-\tagpdfparaOff
-
- \tagstructbegin{tag=Figure,alt={Illustration of array},attribute=bbox}\tagmcbegin{tag=Figure}
- \begin{tikzpicture}[baseline=(c.base)]
+ \begin{tikzpicture}[baseline=(c.base),alt={Illustration of array}]
\node[arg](a1) {0};
\node[arg,right = of a1.east](a2) {15 0 R};
\node[arg,right = of a2.east](a3) {(hello)};
\node[arg,right = of a3.east](a4) {<</Type /X>>};
\node[arg,right = of a4.east](a5) {[1 2 3]};
\end{tikzpicture}
-\tagmcend\tagstructend
-
-\tagpdfparaOn
\item[Dictionaries] Dictionaries are enclosed by double angle
diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
index 936f8adacd..6ae5840b11 100644
--- a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
+++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
@@ -1,5 +1,5 @@
%\RequirePackage[enable-debug]{expl3}[2018/06/14]
-\ProvidesExplPackage {tagpdfdocu-patches} {2024-06-20} {0.99c}
+\ProvidesExplPackage {tagpdfdocu-patches} {2024-08-02} {0.99d}
{patches/commands for the tagpdf documentation}
\RequirePackage{etoolbox,xpatch}
@@ -82,10 +82,6 @@
% }
\ExplSyntaxOff
-% ======== tikzpicture ==========
-% TODO this needs some investigation: it messes up the stack if one add paraOff
-
-\AddToHook{env/tikzpicture/begin}{}
%======== tcolorbox ========
% We switch of paratagging at the begin and reenable it locally in before upper.
@@ -138,22 +134,6 @@
% ======= footnote ========
% done in testphase code
-% ======= bibliography ========
-% biblatex. Creates some empty mc-chunks.
-% no internal patches, but redefining begentry/finentry is not safe.
-% better hook is needed.
-
-
-\def\blx@endbibliography{%
- \csuse{blx@endenv@\blx@theenv}%
- \blx@noitem
- \blx@locallabelwidth@finish
- \endgroup
- \blx@bibnote\blx@thepostnote
-% \endgroup
- \expandafter\endgroup\if@endpe\@doendpe\fi
-}
-
% ====== hyperref ========
% this should probably go into tagpdf, but it is related to
% problem of pdf strings and context ....
@@ -167,16 +147,147 @@
\let\tagstructend\relax
}}{}
-%====== picture =======
+%====== tikz picture =======
+% first draft to tag. The main problem is to handle paragraphs. One
+\ExplSyntaxOn
+\cs_new_protected:Npn\__tag_tikz_savepos:n #1
+ {
+ \tex_savepos:D
+ \tikz@resetexpandcount%
+ \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.north~east)\relax
+ \pgf@pos@transform{\pgf@x}{\pgf@y}%
+ \property_record:nn{#1}{xpos,ypos,abspage}
+ \property_record:nn{#1-tr}{pgfx,pgfy}
+ \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.south~west)\relax
+ \pgf@pos@transform{\pgf@x}{\pgf@y}%
+ \property_record:nn{#1-bl}{pgfx,pgfy}
+ \tex_savepos:D
+ }
+\cs_generate_variant:Nn \__tag_tikz_savepos:n {e}
+
+\NewProperty{pgfx}{now}{0}
+ {
+ \dim_compare:nNnTF {\dim_abs:n {\pgf@x}} > {15999pt}
+ { 0 }
+ { \dim_to_decimal_in_sp:n{\pgf@x} }
+ }
+\NewProperty{pgfy}{now}{0}
+ {
+ \dim_compare:nNnTF {\dim_abs:n {\pgf@y}} > {15999pt}
+ { 0 }
+ { \dim_to_decimal_in_sp:n{\pgf@y} }
+ }
+
+\cs_new_protected:Npn \__tag_tikz_getbbox:
+ {
+ \int_gincr:N\g__tag_graphic_int
+ \tl_set:Ne\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int}
+ \tl_gset:Ne\g__tag_graphic_lx_tl
+ {
+ \dim_to_decimal_in_bp:n
+ { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp
+ + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfx}{0}sp
+ }
+ }
+ \tl_gset:Ne\g__tag_graphic_ly_tl
+ {
+ \dim_to_decimal_in_bp:n
+ { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp
+ + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfy}{0}sp
+ }
+ }
+ \tl_gset:Ne\g__tag_graphic_ux_tl
+ {
+ \dim_to_decimal_in_bp:n
+ { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp
+ + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfx}{0}sp
+ }
+ }
+ \tl_gset:Ne\g__tag_graphic_uy_tl
+ {
+ \dim_to_decimal_in_bp:n
+ { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp
+ + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfy}{0}sp
+ }
+ }
+ }
-% PAC3 complained that the BBox is missing, so we are cheating for now
-% and add a fix size.
-\tagpdfsetup
- {
- newattribute =
- {bbox}{/O /Layout /BBox [0 0 100 100]}
+\cs_new_protected:Npn \__tag_graphic_tikz_begin_picture:
+ {
+ \tag_mc_end_push:
+ \bool_if:NTF \l__tag_graphic_artifact_bool
+ { \tagmcbegin{artifact} }
+ {
+ \__tag_tikz_getbbox:
+ \tagstructbegin{tag=Figure,alt=\l__tag_graphic_alt_tl}\tagmcbegin{}
+ \__tag_prop_gput:cne
+ { g__tag_struct_\int_eval:n {\c@g__tag_struct_abs_int}_prop }
+ { A }
+ {
+ <<
+ /O /Layout /BBox~
+ [
+ \g__tag_graphic_lx_tl\c_space_tl
+ \g__tag_graphic_ly_tl\c_space_tl
+ \g__tag_graphic_ux_tl\c_space_tl
+ \g__tag_graphic_uy_tl
+ ]
+ >>
+ }
+ \bool_if:NT\l__tag_graphic_debug_bool
+ {
+ \__tag_graphic_show_bbox:VVVVne
+ \g__tag_graphic_lx_tl
+ \g__tag_graphic_ly_tl
+ \g__tag_graphic_ux_tl
+ \g__tag_graphic_uy_tl
+ {red}
+ {\int_use:N\g__tag_graphic_int}
+ }
+ }
+ \SuspendTagging{tikz}
}
+\cs_new_protected:Npn \__tag_graphic_tikz_end_picture:
+ {
+ \ResumeTagging{tikz}\tagmcend
+ \bool_if:NF \l__tag_graphic_artifact_bool
+ {
+ \tagstructend
+ \__tag_tikz_savepos:e {__tag_graphic_\int_use:N \g__tag_graphic_int}
+ }
+ \tag_mc_begin_pop:n{}
+ }
+
+\tikzset
+ {
+ every~picture/.style=
+ {
+ artifact,
+ execute~at~begin~picture=\__tag_graphic_tikz_begin_picture:,
+ execute~at~end~picture=\__tag_graphic_tikz_end_picture:
+ }
+ }
+\AddToHook{env/tikzpicture/before}{\leavevmode}
+
+\tikzset
+ {
+ alt/.code=
+ {
+ \bool_set_false:N \l__tag_graphic_artifact_bool
+ \tl_set:Nn \l__tag_graphic_alt_tl{#1}
+ }
+ }
+\tikzset
+ {
+ artifact/.code=
+ \bool_set_true:N \l__tag_graphic_artifact_bool
+ }
+
+\ExplSyntaxOff
+
+
+
\endinput
diff --git a/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex b/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex
index 04f8b88aec..a02411c31f 100644
--- a/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex
+++ b/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex
@@ -12,7 +12,8 @@ new key name & old key name & value &type & defined in \\\midrul
activate & activate & boolean &meta & tagpdf \\
activate/all & activate-all & boolean &meta & tagpdf\\
-activate/mc & activate-mc & boolean &bool & tagpdf\\
+activate/mc & activate-mc & boolean &bool & tagpdf\\
+activate/softhyphen & --- & boolean &bool & tagpdf \\
activate/spaces & interwordspace & boolean &code & tagpdf-space\\
activate/struct & activate-struct & boolean &bool & tagpdf\\
activate/struct-dest & no-struct-dest&boolean &bool & tagpdf\\
diff --git a/macros/latex/contrib/tcolorbox/CHANGES.md b/macros/latex/contrib/tcolorbox/CHANGES.md
index 5aaa4f6f21..a0287ad4b2 100644
--- a/macros/latex/contrib/tcolorbox/CHANGES.md
+++ b/macros/latex/contrib/tcolorbox/CHANGES.md
@@ -22,7 +22,45 @@ and this project adheres to
-## [6.2.0]
+## [6.3.0] - 2024-07-10
+
+### Added
+- Library `documentation`:
+ - Option `page ref formatter` (issue #273)
+- First experimental partial tagging support: suppress tagging of drawing (issue #283)
+ This works for lualatex only.
+
+### Changed
+- The base package loads `tikz` now instead of `pgf`.
+ All skins, including the `standard` family, use `tikzpicture` as internal environment now.
+- Boolean marker to detect if inside a `tcb@savebox` introduced (issue #262)
+- LaTeX usrguide cited for `\NewDocumentCommand` and friends (issue #263)
+- Stricter checks on box names in `\newtcbox` and friends (issue #264)
+- Checks on formatter like `index key formatter` enforced (issue #265)
+- Needed LaTeX version updated to 2023-11-01
+- More meaningful error message in case of `\DeclareTColorBox` with same auto counter (issue #276)
+- Library `theorems`:
+ - Options `ams align`, `ams align*`, `ams gather`, and `ams gather*` are now shortcuts
+ for the upper part only (issue #282)
+ - Documentation for `ams align`, `ams align*`, `ams gather`, and `ams gather*` adapted, i.e.
+ exclusion of lower parts documented (issue #282)
+- Technical information: The package documentation is now produced with lualatex instead of pdflatex
+
+### Deprecated
+- The option `graphical environment` is useless now, since all environments are based on `tikzpicture` now.
+
+### Removed
+- Documentation for the deprecated options `before example` and `after example`
+- Documentation for the deprecated option `graphical environment`
+
+### Fixed
+- `\@nobreakfalse` added to `\tcb@parbox@false@settings` to avoid
+ decreased space before list with `parbox=false` following a section heading (issue #270)
+- Documentation typos fixed (issue #279)
+
+
+
+## [6.2.0] - 2024-01-10
### Added
- New convenience options for box content additions (issue #250)
diff --git a/macros/latex/contrib/tcolorbox/README.md b/macros/latex/contrib/tcolorbox/README.md
index 27f6edf11d..e90e2bec18 100644
--- a/macros/latex/contrib/tcolorbox/README.md
+++ b/macros/latex/contrib/tcolorbox/README.md
@@ -1,4 +1,4 @@
-# The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+# The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
> Copyright (c) 2006-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
diff --git a/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex b/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex
index 90ece8e5a5..cade134ab2 100644
--- a/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbbreakable.code.tex: Code for breakable colorboxes
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\RequirePackage{pdfcol}
\pdfcolInitStack{tcb@breakable}
@@ -82,6 +82,7 @@
\reserved@a%
\@endpefalse%
\global\@newlistfalse%
+ \tcb@set@savebox@construction@true%
\let\tcbbreak\tcb@@break%
\iftcb@usecolorstack%
\pdfcolSwitchStack{tcb@breakable}%
@@ -551,7 +552,7 @@
\let\tcb@before@middle=\@empty%
\let\tcb@before@last=\@empty%
\iftcb@multicol%
- \long\def\tcb@after@first{\par}% using \columnbreak here kills multicols' algortihm sometimes
+ \long\def\tcb@after@first{\par}% using \columnbreak here kills multicols' algorithm sometimes
\long\def\tcb@after@middle{\par\vfill}%
\else%
\long\def\tcb@after@first{\par\pagebreak\tcb@enlbreak@next}%
@@ -827,7 +828,7 @@
\csname tcb@break@ch@\tcb@split@state\endcsname%
\tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}%
\tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}%
- \tcb@drawing@env@begin%
+ \begin{tcb@drawing}%
\tcb@extensions@preframe%
% draw frame and interior
\tcb@adraw@frame%
@@ -842,7 +843,7 @@
\tcb@tdraw@upper%
\tcb@tdraw@lower%
\tcb@extensions@final%
- \tcb@drawing@env@end%
+ \end{tcb@drawing}%
\endgroup%
}
@@ -857,7 +858,7 @@
\csname tcb@break@ch@\tcb@split@state\endcsname%
\tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}%
\tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}%
- \tcb@drawing@env@begin%
+ \begin{tcb@drawing}%
\tcb@extensions@preframe%
% draw frame and interior
\tcb@adraw@frame%
@@ -868,7 +869,7 @@
\tcb@tdraw@title%
\tcb@tdraw@upper%
\tcb@extensions@final%
- \tcb@drawing@env@end%
+ \end{tcb@drawing}%
\endgroup%
}
@@ -883,7 +884,7 @@
\csname tcb@break@ch@\tcb@split@state\endcsname%
\tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}%
\tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}%
- \tcb@drawing@env@begin%
+ \begin{tcb@drawing}%
\tcb@extensions@preframe%
% draw frame and interior
\tcb@adraw@frame%
@@ -897,7 +898,7 @@
\tcb@tdraw@title%
\tcb@tdraw@lower%
\tcb@extensions@final%
- \tcb@drawing@env@end%
+ \end{tcb@drawing}%
\endgroup%
}
@@ -912,7 +913,7 @@
\csname tcb@break@ch@\tcb@split@state\endcsname%
\tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}%
\tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}%
- \tcb@drawing@env@begin%
+ \begin{tcb@drawing}%
\tcb@extensions@preframe%
% draw frame and interior
\tcb@adraw@frame%
@@ -923,7 +924,7 @@
\tcb@tdraw@title%
\tcb@tdraw@lower%
\tcb@extensions@final%
- \tcb@drawing@env@end%
+ \end{tcb@drawing}%
\endgroup%
}
diff --git a/macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex b/macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex
index 3eff9746f8..a550de9fff 100644
--- a/macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbdocumentation.code.tex: Code for LaTeX documentations
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{listings,skins,external,raster}
@@ -199,10 +199,6 @@
keywords bold/true/.code={\let\tcb@doc@bfseries\bfseries},
keywords bold/false/.code={\let\tcb@doc@bfseries\mdseries},
doc key prefix/.store in=\kvtcb@doc@keyprefix,
- index key formatter/.code={\let\kvtcb@doc@format@key=#1},
- index keys formatter/.code={\let\kvtcb@doc@format@keys=#1},
- index key formatter/.default=\@firstofone,
- index keys formatter/.default=\@firstofone,
}
@@ -337,6 +333,43 @@
\ExplSyntaxOn
+\tcbset{
+ index~key~formatter / .code =
+ {
+ \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@key
+ },
+ index~key~formatter / .default = \use:n,
+ index~keys~formatter / .code =
+ {
+ \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@keys
+ },
+ index~keys~formatter / .default = \use:n,
+ page~ref~formatter / .code =
+ {
+ \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@page
+ },
+ page~ref~formatter / .default = \use:n,
+}
+
+
+\cs_if_exist:NF \__tcobox_store_formatter_in:nN
+ {
+ \cs_new_protected:Npn \__tcobox_store_formatter_in:nN #1#2
+ {
+ \__tcobox_if_single_cs:nTF {#1}
+ { \cs_set_eq:NN #2 #1 }
+ {
+ \tcb@error
+ {
+ Invalid~formatter~ "\tl_to_str:n {#1}" ~passed~to \MessageBreak
+ "\pgfkeyscurrentkey". \MessageBreak
+ A~formatter~should~be~a~single~command~taking~one \MessageBreak
+ mandatory~argument
+ }
+ }
+ }
+ }
+
\cs_new_nopar:Npn \__tcobox_new_bool_key:Nn #1 #2
{
@@ -879,7 +912,7 @@
\IfBooleanTF{#2}{}{%
\ifnum\getpagerefnumber{#1:#3}=\thepage\relax%
\else%
- \textsuperscript{{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char213}%
+ \kvtcb@doc@format@page{{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char213}%
\,\kvtcb@text@pageshort\,\pageref*{#1:#3}}%
\fi}}%
}
@@ -1027,6 +1060,7 @@
doc key prefix={/},
index key formatter,
index keys formatter,
+ page ref formatter=\textsuperscript,
}
% deprecated
diff --git a/macros/latex/contrib/tcolorbox/tcbexternal.code.tex b/macros/latex/contrib/tcolorbox/tcbexternal.code.tex
index 0bfa994f68..060f1bb9a0 100644
--- a/macros/latex/contrib/tcolorbox/tcbexternal.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbexternal.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbexternal.code.tex: Code for externalization
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{pro@cessing}
@@ -111,14 +111,14 @@
\def\tcbexternal@pdfmissing@warning{%
\tcb@warning{File '\tcbexternal@job@pdf' missing.
- Compilation error or shell-escape wasn't enabled or a subdirectory could'nt be generated}%
+ Compilation error or shell-escape wasn't enabled or a subdirectory couldn't be generated}%
\message{Load '\tcbexternal@job@source' instead}%
\tcbexternal@inputsource%
}
\def\tcbexternal@pdfmissing@error{%
\tcb@error{File '\tcbexternal@job@pdf' missing.
- Compilation error or shell-escape wasn't enabled or a subdirectory could'nt be generated}{}%
+ Compilation error or shell-escape wasn't enabled or a subdirectory couldn't be generated}{}%
}
\def\tcbexternal@inputpdf{%
diff --git a/macros/latex/contrib/tcolorbox/tcbfitting.code.tex b/macros/latex/contrib/tcolorbox/tcbfitting.code.tex
index 0e34e15ad5..e133063705 100644
--- a/macros/latex/contrib/tcolorbox/tcbfitting.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbfitting.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbfitting.code.tex: Code for fit boxes
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\newdimen\tcbfitdim
\newdimen\tcb@lowerfitdim
diff --git a/macros/latex/contrib/tcolorbox/tcbhooks.code.tex b/macros/latex/contrib/tcolorbox/tcbhooks.code.tex
index b3edf95636..6a60587177 100644
--- a/macros/latex/contrib/tcolorbox/tcbhooks.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbhooks.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbhooks.code.tex: Code for adding hooks
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbset{%
before upper app/.code={\appto\kvtcb@before@upper{#1}},%
diff --git a/macros/latex/contrib/tcolorbox/tcblistings.code.tex b/macros/latex/contrib/tcolorbox/tcblistings.code.tex
index 195076eee1..9a869f870f 100644
--- a/macros/latex/contrib/tcolorbox/tcblistings.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcblistings.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcblistings.code.tex: Code for colorboxes with listings
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\RequirePackage{listings}[2007/02/22]
diff --git a/macros/latex/contrib/tcolorbox/tcblistingscore.code.tex b/macros/latex/contrib/tcolorbox/tcblistingscore.code.tex
index 48241a94d5..f3ffb31b90 100644
--- a/macros/latex/contrib/tcolorbox/tcblistingscore.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcblistingscore.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcblistingscode.code.tex: Auxiliary code for colorboxes with listings
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{pro@cessing}
diff --git a/macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex b/macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex
index 0c9b2b7e8c..0fb3fd8d22 100644
--- a/macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcblistingsutf8.code.tex: Code for colorboxes with listings in UTF-8
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{listings}
diff --git a/macros/latex/contrib/tcolorbox/tcbmagazine.code.tex b/macros/latex/contrib/tcolorbox/tcbmagazine.code.tex
index 81180a8eb8..49059a0863 100644
--- a/macros/latex/contrib/tcolorbox/tcbmagazine.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbmagazine.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbmagazine.code.tex: Code for box sets and magazine styles
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{breakable}
diff --git a/macros/latex/contrib/tcolorbox/tcbminted.code.tex b/macros/latex/contrib/tcolorbox/tcbminted.code.tex
index cae9e8d707..d21bc11036 100644
--- a/macros/latex/contrib/tcolorbox/tcbminted.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbminted.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbminted.code.tex: Code for colorboxes with listings
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\RequirePackage{minted}[2021/12/24]
diff --git a/macros/latex/contrib/tcolorbox/tcbposter.code.tex b/macros/latex/contrib/tcolorbox/tcbposter.code.tex
index 49abfc651a..3fcec6b22c 100644
--- a/macros/latex/contrib/tcolorbox/tcbposter.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbposter.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbposter.code.tex: Code for posters
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{breakable,magazine,skins,fitting}
diff --git a/macros/latex/contrib/tcolorbox/tcbprocessing.code.tex b/macros/latex/contrib/tcolorbox/tcbprocessing.code.tex
index ce0ae43075..a5bdabc874 100644
--- a/macros/latex/contrib/tcolorbox/tcbprocessing.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbprocessing.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbprocessing.code.tex: Code for conditional processing
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/tcolorbox/tcbraster.code.tex b/macros/latex/contrib/tcolorbox/tcbraster.code.tex
index 3551030092..e3645497e9 100644
--- a/macros/latex/contrib/tcolorbox/tcbraster.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbraster.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbskinsjigsaw.code.tex: Code for colorboxes with different skins
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\newcounter{tcbrastercolumn}
\newcounter{tcbrasterrow}
diff --git a/macros/latex/contrib/tcolorbox/tcbskins.code.tex b/macros/latex/contrib/tcolorbox/tcbskins.code.tex
index 3fbad78584..5e3faed9dd 100644
--- a/macros/latex/contrib/tcolorbox/tcbskins.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbskins.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbskins.code.tex: Code for colorboxes with different skins
%%
%% -------------------------------------------------------------------------------------------
@@ -17,15 +17,10 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
-\RequirePackage{tikz}[2010/10/13]
\RequirePackage{tikzfill.image}
-\newenvironment{tikzpicture@tcb@hooked}{%
- \edef\tcb@tikzpicture@begin{\noexpand\tikzpicture[\expandonce\tcb@tikz@option@hook]}%
- \tcb@tikzpicture@begin\tcb@tikz@begin@hook}{\tcb@tikz@end@hook\endtikzpicture}
-
\def\tcb@creategeonodes@true{%
\begin{scope}[every node/.style={line width=0mm,inner sep=0mm,outer sep=0mm,draw=none,fill=none,rectangle}]
\node[name=frame,at={(0,0)},above right,minimum width=\tcb@width,minimum height=\tcb@height]{};
@@ -438,7 +433,7 @@
\tcbset{%
base@unbroken/.style={%
- clear@spec,graphical environment=tikzpicture@tcb@hooked,geometry nodes,%
+ clear@spec,geometry nodes,%
set@outerboundary=\tcb@boundaryframe@standard,%
shape@of@skin=unbroken,%
set@extensions@preframe={\kvtcb@shadow},%
@@ -446,7 +441,7 @@
set@extensions@final={\tcb@apply@finish}%
},%
base@first/.style={%
- clear@spec,graphical environment=tikzpicture@tcb@hooked,geometry nodes,%
+ clear@spec,geometry nodes,%
set@outerboundary=\tcb@boundaryframe@pathfirst,%
shape@of@skin=first,%
set@extensions@preframe={\kvtcb@shadow},%
@@ -454,7 +449,7 @@
set@extensions@final={\tcb@apply@finish}%
},%
base@middle/.style={%
- clear@spec,graphical environment=tikzpicture@tcb@hooked,geometry nodes,%
+ clear@spec,geometry nodes,%
set@outerboundary=\tcb@boundaryframe@pathmiddle,%
shape@of@skin=middle,%
set@extensions@preframe={\kvtcb@shadow},%
@@ -462,7 +457,7 @@
set@extensions@final={\tcb@apply@finish}%
},%
base@last/.style={%
- clear@spec,graphical environment=tikzpicture@tcb@hooked,geometry nodes,%
+ clear@spec,geometry nodes,%
set@outerboundary=\tcb@boundaryframe@pathlast,%
shape@of@skin=last,%
set@extensions@preframe={\kvtcb@shadow},%
@@ -885,7 +880,7 @@
segmentation code={\tcb@drawspec@widgetsegment},%
skin first=widgetmiddle,skin middle=widgetmiddle,skin last=widgetlast}
-\tcb@new@skin{spartan}{graphical environment=tikzpicture@tcb@hooked,geometry nodes=true,shape@of@skin=unbroken,%
+\tcb@new@skin{spartan}{geometry nodes=true,shape@of@skin=unbroken,%
set@extensions@preframe=,set@extensions@postframe={\tcb@apply@underlay},set@extensions@final=,%
frame engine=spartan,interior titled engine=spartan,interior engine=spartan,title engine=spartan,segmentation engine=spartan,%
set@outerboundary=\tcb@boundaryframe@standard,%
@@ -893,7 +888,7 @@
\tcbset{spartan/.style={skin=spartan}}
-\tcb@new@skin{draft}{clear@spec,graphical environment=tikzpicture@tcb@hooked,geometry nodes,shape@of@skin=unbroken,%
+\tcb@new@skin{draft}{clear@spec,geometry nodes,shape@of@skin=unbroken,%
frame engine=empty,interior titled engine=empty,interior engine=empty,segmentation engine=path,title empty,%
segmentation style={draw=black,dashed},
set@extensions@postframe=,
diff --git a/macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex b/macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex
index 551971a0df..6a54fca567 100644
--- a/macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbskinsjigsaw.code.tex: Code for colorboxes with different skins
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{skins}
diff --git a/macros/latex/contrib/tcolorbox/tcbtheorems.code.tex b/macros/latex/contrib/tcolorbox/tcbtheorems.code.tex
index f53eda79a5..cfbc1ba796 100644
--- a/macros/latex/contrib/tcolorbox/tcbtheorems.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbtheorems.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbtheorems.code.tex: Code for theorems in colorboxes
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\RequirePackage{amsmath}
@@ -138,7 +138,7 @@
% insert box with name and number
\mode_leave_vertical:
\box_use_drop:N \l__tcobox_tmpa_box
- % insert formated title
+ % insert formatted title
\group_begin:
\__tcobox_theo_format_description:n{#3}
\group_end:
@@ -260,11 +260,31 @@
description~font/.default =,
description~formatter/.code =
{
- \cs_set_eq:NN \__tcobox_theo_format_description:n #1
+ \__tcobox_store_formatter_in:nN {#1} \__tcobox_theo_format_description:n
},
description~formatter/.default = \__tcobox_theo_format_description_standard:n,
}
+
+\cs_if_exist:NF \__tcobox_store_formatter_in:nN
+ {
+ \cs_new_protected:Npn \__tcobox_store_formatter_in:nN #1#2
+ {
+ \__tcobox_if_single_cs:nTF {#1}
+ { \cs_set_eq:NN #2 #1 }
+ {
+ \tcb@error
+ {
+ Invalid~formatter~ "\tl_to_str:n {#1}" ~passed~to \MessageBreak
+ "\pgfkeyscurrentkey". \MessageBreak
+ A~formatter~should~be~a~single~command~taking~one \MessageBreak
+ mandatory~argument
+ }
+ }
+ }
+ }
+
+
\ExplSyntaxOff
@@ -298,16 +318,16 @@
ams equation*/.style={ams equation* upper,ams equation* lower},%
ams align upper/.style={before upper*=\tcb@hack@amsmath\align,after upper*=\endalign},%
ams align lower/.style={before lower*=\tcb@hack@amsmath\align,after lower*=\endalign},%
- ams align/.style={ams align upper,ams align lower},%
+ ams align/.style={ams align upper},%
ams align* upper/.style={before upper*=\tcb@hack@amsmath\csname align*\endcsname,after upper*=\endalign},%
ams align* lower/.style={before lower*=\tcb@hack@amsmath\csname align*\endcsname,after lower*=\endalign},%
- ams align*/.style={ams align* upper,ams align* lower},%
+ ams align*/.style={ams align* upper},%
ams gather upper/.style={before upper*=\tcb@hack@amsmath\gather,after upper*=\endgather},%
ams gather lower/.style={before lower*=\tcb@hack@amsmath\gather,after lower*=\endgather},%
- ams gather/.style={ams gather upper,ams gather lower},%
+ ams gather/.style={ams gather upper},%
ams gather* upper/.style={before upper*=\tcb@hack@amsmath\csname gather*\endcsname,after upper*=\endgather},%
ams gather* lower/.style={before lower*=\tcb@hack@amsmath\csname gather*\endcsname,after lower*=\endgather},%
- ams gather*/.style={ams gather* upper,ams gather* lower},%
+ ams gather*/.style={ams gather* upper},%
ams nodisplayskip upper/.style={before upper=\vskip-\abovedisplayskip},%
ams nodisplayskip lower/.style={before lower=\vskip-\abovedisplayskip},%
ams nodisplayskip/.style={ams nodisplayskip upper,ams nodisplayskip lower},%
diff --git a/macros/latex/contrib/tcolorbox/tcbvignette.code.tex b/macros/latex/contrib/tcolorbox/tcbvignette.code.tex
index e177bb33d4..51a4c9d6d0 100644
--- a/macros/latex/contrib/tcolorbox/tcbvignette.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbvignette.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbvignette.code.tex: Code for ornamental frames
%%
%% -------------------------------------------------------------------------------------------
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\tcbuselibrary{skins}
diff --git a/macros/latex/contrib/tcolorbox/tcbxparse.code.tex b/macros/latex/contrib/tcolorbox/tcbxparse.code.tex
index cf60ef0731..5223be23ea 100644
--- a/macros/latex/contrib/tcolorbox/tcbxparse.code.tex
+++ b/macros/latex/contrib/tcolorbox/tcbxparse.code.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcbxparse.code.tex: Code for xparse features
%%
%% -------------------------------------------------------------------------------------------
@@ -18,6 +18,6 @@
%% This work consists of all files listed in README
%%
%\makeatletter
-\tcb@set@library@version{6.2.0}
+\tcb@set@library@version{6.3.0}
\RequirePackage{xparse}[2013/12/31]
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdf b/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdf
index e39ddaa037..1e380d5559 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdf
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex b/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex
index ffa291103b..cb8586e6ec 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcolorbox-example-poster.tex: a poster example for tcolorbox
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-example.pdf b/macros/latex/contrib/tcolorbox/tcolorbox-example.pdf
index 809b35a2ca..2d332523c2 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-example.pdf
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-example.tex b/macros/latex/contrib/tcolorbox/tcolorbox-example.tex
index 1adaa24d7e..6f878d2f1d 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-example.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-example.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcolorbox-example.tex: an example for tcolorbox
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdf b/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdf
index eb23961967..f81aee0783 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdf
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex b/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex
index ae550c5c6d..7c6c769d1d 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex
@@ -1,5 +1,5 @@
% \LaTeX-Main\
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcolorbox-tutorial-poster.tex: a tutorial for poster creation with tcolorbox
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.bib b/macros/latex/contrib/tcolorbox/tcolorbox.doc.bib
index be1c60b666..e38e91c3d4 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.bib
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.bib
@@ -209,3 +209,9 @@
}
+@manual{latexproject:usrguide,
+ author = {The \LaTeX{} Project Team},
+ title = {{\LaTeX} for authors --- current version},
+ url = {https://mirrors.ctan.org/macros/latex/base/usrguide.pdf},
+ date = {2023-05-23},
+}
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex
index a86994c7e2..00dc2198b2 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex
@@ -252,7 +252,7 @@ The |break at| option can be used to insert better break points by hand.
The example code enlarged the second partial box by one line, the third
partial box by two lines, and all following parts are not enlarged.
\begin{marker}
- If an automated page break occures before the first partial box, the
+ If an automated page break occurs before the first partial box, the
page enlargement is applied to the page before the first partial box \emph{and}
again to the page of the first partial box. Insert a manual break to prevent this.\\
In general, |enlargepage| should be used at the final stage of a document
@@ -513,7 +513,7 @@ and \refKey{/tcb/enlarge bottom at break by}.
\item the segmentation line (or similar) is drawn as first element of the
partial box containing the \emph{lower part}, if \refKey{/tcb/segmentation at break}
is set to be |true|.
- \item the segmenation line (or similar) is not drawn at all, if
+ \item the segmentation line (or similar) is not drawn at all, if
\refKey{/tcb/segmentation at break} is set to be |false|.
This may be preferable for skins like \refSkin{bicolor}, \refSkin{tile},
or \refSkin{beamer}.
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex
index 0847f09775..c41134a6c8 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex
@@ -214,7 +214,8 @@ numbered title and options.
\begin{docCommand}{NewTColorBox}{\oarg{init options}\marg{name}\marg{specification}\marg{options}}
Creates a new environment \meta{name} based on \refEnv{tcolorbox}.\\
Basically, \refCom{NewTColorBox} operates like |\NewDocumentEnvironment|. This means,
- the new environment \meta{name} is constructed with the given argument \meta{specification}.
+ the new environment \meta{name} is constructed with the
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if an environment with \meta{name} has already been defined.
The \meta{options} are given to the underlying \refEnv{tcolorbox}.\\
Note that \refKey{/tcb/savedelimiter} is set to the given \meta{name}
@@ -275,7 +276,8 @@ This is a tcolorbox.
Creates a new command \texttt{\textbackslash}\meta{name} based on \refEnv{tcolorbox}.
In contrast to \refCom{NewTColorBox}, also the \meta{content} of the |tcolorbox| is specified.\\
Basically, \refCom{NewTotalTColorBox} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the given
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refEnv{tcolorbox} which is filled with
the specified \meta{content}.\\
@@ -387,7 +389,8 @@ The \xmybox[green]{quick} brown \xmybox{fox} \xmybox[blue]{jumps} over the
\begin{docCommand}{NewTCBox}{\oarg{init options}\brackets{\texttt{\textbackslash}\meta{name}}\marg{specification}\marg{options}}
Creates a new command \texttt{\textbackslash}\meta{name} based on \refCom{tcbox}.
Basically, \refCom{NewTCBox} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the given
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refCom{tcbox}.\\
Note that \refKey{/tcb/savedelimiter} is set to the given \meta{name}
@@ -437,7 +440,8 @@ The \xmybox[green]{quick} brown \xmybox{fox} \xmybox[blue]{jumps} over the
Creates a new command \texttt{\textbackslash}\meta{name} based on \refCom{tcbox}.
In contrast to \refCom{NewTCBox}, also the \meta{content} of the |tcbox| is specified.\\
Basically, \refCom{NewTotalTCBox} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refCom{tcbox} which is filled with
the specified \meta{content}.\\
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex
index e20936d76b..62f3fa3c01 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex
@@ -3104,11 +3104,11 @@ inside the document preamble.
\begin{docTcbKey}[][doc new={2020-09-25}]{before skip balanced}{=\meta{glue}}{no default, initially |0.5\textbackslash baselineskip plus 2pt|}
Inserts some vertical space before the colored box. This style sets \refKey{/tcb/before}.\par
If the depth of the
- preceeding \TeX\ box is between |0pt| and |0.3\baselineskip|,
- the distance between the \emph{baseline} of the preceeding \TeX\ box and the tcolorbox
- ist set to \meta{glue}$+$|0.3\baselineskip|.\par
- If the depth is larger, the distance of the preceeding \TeX\ box and the tcolorbox
- ist set to \meta{glue}.\par
+ preceding \TeX\ box is between |0pt| and |0.3\baselineskip|,
+ the distance between the \emph{baseline} of the preceding \TeX\ box and the tcolorbox
+ is set to \meta{glue}$+$|0.3\baselineskip|.\par
+ If the depth is larger, the distance of the preceding \TeX\ box and the tcolorbox
+ is set to \meta{glue}.\par
Alternatively, see \refKey{/tcb/before skip} which ignores the \emph{baseline}.
\begin{exdispExample*}{before_skip_balanced}{sbs,lefthand ratio=0.6}
@@ -3174,7 +3174,7 @@ line 4 g
Inserts some vertical space of the given \meta{glue} before the colored box.
This style sets \refKey{/tcb/before}.
In contrast to \refKey{/tcb/before skip balanced}, this \meta{glue} is
- relative to the lower edge of the preceeding box and not to the baseline.
+ relative to the lower edge of the preceding box and not to the baseline.
\begin{exdispExample*}{before_skip}{sbs,lefthand ratio=0.6}
Some text.
\begin{tcolorbox}[before skip=1cm,
@@ -4363,7 +4363,8 @@ from page \pageref{sec:numberedboxes}, e.\,g.\ \refKey{/tcb/new/auto counter}.
\begin{docTcbKey}[][doc new=2014-11-28]{phantomlabel}{=\meta{marker}}{no default, initially unset}
Equivalent to \refKey{/tcb/label} for an \emph{unnumbered} box.
A |\phantomsection| from the package |hyperref| \cite{rahtz:hyperref} is used to set a correct
-hyperlink target. This is not needed for a numbered box.
+hyperlink target.
+This is not needed and should typically not be used for a numbered box.
\end{docTcbKey}
\clearpage
@@ -4691,8 +4692,7 @@ It is precise only, if \refKey{/tcb/check odd page} was set.
See \Fullref{sec:external} for the \mylib{external} library of |tcolorbox|.
\end{marker}
-If the \emph{externalization} library of the \texttt{tikz} package is used
-and \refKey{/tcb/graphical environment} is set to |tikzpicture|,
+If the \emph{externalization} library of the \texttt{tikz} package is used,
a |tcolorbox| could trigger the externalization process which will arise
a compilation error.
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex
index 9934cd5c86..45282f3c46 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex
@@ -953,7 +953,7 @@ hand side if too long. Linebreaks can be used inside the \meta{text}.
\begin{dispListing}
\begin{docCommands}[
doc name = l_tcobox_example_tl,
- doc sort index = example_tl, % sorted unter e like example
+ doc sort index = example_tl, % sorted under e like example
]{}
\end{docCommands}
\end{dispListing}
@@ -1354,29 +1354,6 @@ keys to insert code before (or after) the description texts.
\end{docTcbKey}
-\begin{marker}
-The following two keys are deprecated and without function (v3.50 and above).
-Use \refKey{/tcb/before} and \refKey{/tcb/after} with appropriate values
-instead. Also see \refKey{/tcb/docexample}.
-\end{marker}
-
-\begin{docTcbKey}[][doc updated=2015-03-16]{before example}{=\meta{macros}}{no default, initially empty}
-\smallskip\begin{deprecated}
- Sets the \meta{macros} which are executed before \refEnv{dispExample} and \refEnv{dispListing}
- additional to \refKey{/tcb/before}.
-\end{deprecated}
-\end{docTcbKey}
-
-\enlargethispage*{1cm}
-
-\begin{docTcbKey}{after example}{=\meta{macros}}{no default, initially empty}
-\smallskip\begin{deprecated}
- Sets the \meta{macros} which are executed after \refEnv{dispExample} and \refEnv{dispListing}
- additional to \refKey{/tcb/after}.
-\end{deprecated}
-\end{docTcbKey}
-
-\clearpage
\begin{docTcbKey}[][doc new=2017-04-25]{keywords bold}{\colOpt{=true\textbar false}}{default |true|, initially |true|}
Keyword used in \refEnv{docEnvironment}, \refEnv{docCommand}, etc. are printed
boldface (or not). Since the typewriter font is used, the effect may be
@@ -1391,6 +1368,24 @@ instead. Also see \refKey{/tcb/docexample}.
\end{dispExample*}
\end{docTcbKey}
+\clearpage
+
+\begin{docTcbKeys}
+ {
+ {
+ doc name = page ref formatter,
+ doc new = {2024-03-13},
+ doc parameter = \colOpt{=\meta{macro}},
+ doc description = {no default, initially \texttt{\textbackslash textsuperscript}},
+ }
+ }
+Sets \meta{macro} as formatter for page references like the
+reference to \refEnv{tcolorbox}.
+The default setting puts the page reference in a |\textsuperscript|.
+It may be changed to |\fakesuperscript| to cope with superiors problems
+in combination with the |realscripts| package or just otherwise for user customization.
+\end{docTcbKeys}
+
\begin{docTcbKey}[][doc new=2015-01-09]{index command}{=\meta{macro}}{no default, initially \cs{index}}
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex
index b7a10c2331..62c982c2d3 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex
@@ -74,7 +74,7 @@ executed.
\documentclass[a4paper]{book}% for example
\usepackage{...}% anything
% ...
-% Tpyically, all or the very most settings for the document.
+% Typically, all or the very most settings for the document.
\tcbEXTERNALIZE% Typically, just before \begin{document}
@@ -500,7 +500,7 @@ in this case.
\clearpage
\begin{docCommand}[doc new=2015-03-11]{newtcbexternalizeenvironment}{\marg{newenv}\marg{env}\marg{options}\marg{begin}\marg{end}}
Creates a new environment \meta{newenv} which is based on
- \refEnv{tcbexternal}. This enviroment takes \emph{at least}
+ \refEnv{tcbexternal}. This environment takes \emph{at least}
one optional parameter and one mandatory parameter.
These two parameters are passed to \refEnv{tcbexternal}.
Further, the given \meta{options} are always added to the option list of \refEnv{tcbexternal}.\par
@@ -532,7 +532,7 @@ a & This table is externalized as snippet. Obviously,
\begin{docCommand}[doc new=2015-03-11]{newtcbexternalizetcolorbox}{\marg{newenv}\marg{env}\marg{options}\marg{begin end options}}
Creates a new environment \meta{newenv} which is based on
- \refEnv{tcbexternal}. This enviroment takes \emph{at least}
+ \refEnv{tcbexternal}. This environment takes \emph{at least}
one optional parameter and one mandatory parameter.
These two parameters are passed to \refEnv{tcbexternal}.
Further, the given \meta{options} are always added to the option list of \refEnv{tcbexternal}.\par
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex
index 9f1f4627ca..909f7f4ac0 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex
@@ -63,7 +63,7 @@ To be more specific, they determine the east-to-west and the north-to-south dime
which may be not the maximal dimensions for a non-rectangular node.
Note that the following dimensions are measured exactly including the line width
of the border line. If a new rectangle or node with the same dimensions
-and a border is to be drawn, this border width has to be substracted.
+and a border is to be drawn, this border width has to be subtracted.
\begin{docCommand}[doc new=2014-09-19]{tcbsettowidthofnode}{\marg{register}\marg{node}}
Sets the east-to-west dimension of the given \meta{node}
@@ -88,7 +88,7 @@ and a border is to be drawn, this border width has to be substracted.
\node[align=center,draw=red,fill=yellow] (A) {This is my\\example node};
\tcbsetmacrotowidthofnode\mywidth{A}
\tcbsetmacrotoheightofnode\myheight{A}
- \path[fill=blue!25!white] % rectangle widthout border
+ \path[fill=blue!25!white] % rectangle without border
([xshift=2mm]A.south east)
rectangle node{Copy} +(\mywidth,\myheight);
\node[draw=blue,fill=blue!25!white, % standard border width 0.4pt
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex
index 14f9e7b577..a541659c37 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex
@@ -145,7 +145,8 @@ The library is loaded by a package option or inside the preamble by:
\begin{docCommand}{NewTCBoxFit}{\oarg{init options}\brackets{\texttt{\textbackslash}\meta{name}}\marg{specification}\marg{options}}
Creates a new command \texttt{\textbackslash}\meta{name} based on \refCom{tcboxfit}.
Basically, \refCom{NewTCBoxFit} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the given
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refCom{tcboxfit}.\\
Note that \refKey{/tcb/savedelimiter} is set to the given \meta{name}
@@ -192,7 +193,8 @@ The library is loaded by a package option or inside the preamble by:
Creates a new command \texttt{\textbackslash}\meta{name} based on \refCom{tcboxfit}.
In contrast to \refCom{NewTCBoxFit}, also the \meta{content} of the |tcboxfit| is specified.\\
Basically, \refCom{NewTotalTCBoxFit} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the given
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refCom{tcboxfit} which is filled with
the specified \meta{content}.\\
@@ -620,7 +622,7 @@ if necessary.
\begin{docTcbKey}{fit maxstep}{=\meta{number}}{no default, initially |20|}
Sets the maximal step size for the font size adjustment algorithm.
- In normal situations, the algorithm stops before reaching the intial value of 20 steps.
+ In normal situations, the algorithm stops before reaching the initial value of 20 steps.
If the box content does not shrink, this value prevents an endless loop.
\end{docTcbKey}
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex
index 548c70e081..0d76c0afbb 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex
@@ -48,7 +48,7 @@ for some hints. The short story is: you have to install not only
\subsection{Loading the Package}
The base package |tcolorbox| loads the packages
-|pgf| \cite{tantau:tikz_and_pgf}, |verbatim| \cite{schoepf:verbatim},
+|tikz| \cite{tantau:tikz_and_pgf}, |verbatim| \cite{schoepf:verbatim},
|etoolbox| \cite{lehmann:etoolbox},
and |environ| \cite{robertson:2014a}.
|tcolorbox| itself is loaded in the usual manner in the preamble:
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex
index c2e8b5fe27..c6e56dcdfa 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex
@@ -282,7 +282,8 @@ This is my \LaTeX\ box.
\begin{docCommand}{NewTCBListing}{\oarg{init options}\marg{name}\marg{specification}\marg{options}}
Creates a new environment \meta{name} based on \refEnv{tcblisting}.\\
Basically, \refCom{NewTCBListing} operates like |\NewDocumentEnvironment|. This means,
- the new environment \meta{name} is constructed with the given argument \meta{specification}.
+ the new environment \meta{name} is constructed with the
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \meta{name} has already been defined.
The \meta{options} are given to the underlying \refEnv{tcblisting}.\\
Note that \refKey{/tcb/savedelimiter} is set to the given \meta{name}
@@ -429,7 +430,8 @@ Note that the following code uses \verb+!O{}+ now.
\begin{docCommand}{NewTCBInputListing}{\oarg{init options}\brackets{\texttt{\textbackslash}\meta{name}}\marg{specification}\marg{options}}
Creates a new command \texttt{\textbackslash}\meta{name} based on \refCom{tcbinputlisting}.
Basically, \refCom{NewTCBInputListing} operates like |\NewDocumentCommand|. This means,
- the new command \texttt{\textbackslash}\meta{name} is constructed with the given argument \meta{specification}.
+ the new command \texttt{\textbackslash}\meta{name} is constructed with the
+ given \LaTeX3 argument \meta{specification} following \cite{latexproject:usrguide}.
An error is issued if \texttt{\textbackslash}\meta{name} has already been defined.
The \meta{options} are given to the underlying \refCom{tcbinputlisting}.\\
The \meta{init options} allow setting up automatic numbering,
@@ -1178,6 +1180,7 @@ This \meta{system command} is added to \refKey{/tcb/process code}.
\end{marker}
\end{docTcbKey}
+\enlargethispage*{5mm}
\begin{docTcbKey}[][doc new=2014-11-14]{run pdflatex}{\colOpt{=\meta{arguments}}}{style, no default, initially unset}
Issues a |pdflatex| compilation of the listing with the given \meta{arguments}.
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty b/macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty
index 3eabd88b1e..7bc44882c8 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty
@@ -276,9 +276,9 @@
before skip=\medskipamount,after skip=\medskipamount,frame style={}},
}
-\newtcbexternalizetcolorbox{exdispExample}{dispExample}{environment with percent=false,minipage}{beforeafter example}
+\newtcbexternalizetcolorbox{exdispExample}{dispExample}{environment with percent=false,minipage,compiler=lualatex}{beforeafter example}
-\newtcbexternalizetcolorbox{exdispExample*}{dispExample*}{environment with percent=false,minipage}{beforeafter example}
+\newtcbexternalizetcolorbox{exdispExample*}{dispExample*}{environment with percent=false,minipage,compiler=lualatex}{beforeafter example}
\newcommand{\inputpreamblelisting}[1]{%
\tcbinputlisting{title=Definition in the preamble:,
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.skincatalog.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.skincatalog.tex
index ece3b4bc35..9f79252f3e 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.skincatalog.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.skincatalog.tex
@@ -117,7 +117,6 @@ defined just for this documentation.
\begin{tcolorbox}[skintable=standard]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |pgfpicture|\\
\refKey{/tcb/frame engine}: \> |standard|\\
\refKey{/tcb/interior titled engine}: \> |standard|\\
\refKey{/tcb/interior engine}: \> |standard|\\
@@ -143,7 +142,6 @@ defined just for this documentation.
\begin{tcolorbox}[skintable=standard jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |pgfpicture|\\
\refKey{/tcb/frame engine}: \> |standardjigsaw|\\
\refKey{/tcb/interior titled engine}: \> |standard|\\
\refKey{/tcb/interior engine}: \> |standard|\\
@@ -185,7 +183,6 @@ have some \enquote{enhanced} features, the |enhanced| skin is what you are looki
\begin{tcolorbox}[skintable=enhanced]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |path|\\
\refKey{/tcb/interior titled engine}: \> |path|\\
\refKey{/tcb/interior engine}: \> |path|\\
@@ -297,7 +294,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedfirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirst|\\
\refKey{/tcb/interior titled engine}: \> |pathfirst|\\
\refKey{/tcb/interior engine}: \> |pathfirst|\\
@@ -322,7 +318,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedmiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddle|\\
\refKey{/tcb/interior titled engine}: \> |pathmiddle|\\
\refKey{/tcb/interior engine}: \> |pathmiddle|\\
@@ -346,7 +341,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedlast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlast|\\
\refKey{/tcb/interior titled engine}: \> |pathlast|\\
\refKey{/tcb/interior engine}: \> |pathlast|\\
@@ -368,7 +362,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhanced jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathjigsaw|\\
\refKey{/tcb/interior titled engine}: \> |path|\\
\refKey{/tcb/interior engine}: \> |path|\\
@@ -404,7 +397,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedfirst jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirstjigsaw|\\
\refKey{/tcb/interior titled engine}: \> |pathfirst|\\
\refKey{/tcb/interior engine}: \> |pathfirst|\\
@@ -429,7 +421,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedmiddle jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddlejigsaw|\\
\refKey{/tcb/interior titled engine}: \> |pathmiddle|\\
\refKey{/tcb/interior engine}: \> |pathmiddle|\\
@@ -509,7 +500,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=enhancedlast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlastjigsaw|\\
\refKey{/tcb/interior titled engine}: \> |pathlast|\\
\refKey{/tcb/interior engine}: \> |pathlast|\\
@@ -537,7 +527,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolor]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |path|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -694,7 +683,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolorfirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirst|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -720,7 +708,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolormiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddle|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -746,7 +733,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolorlast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlast|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -772,7 +758,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolor jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathjigsaw|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -805,7 +790,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolorfirst jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirstjigsaw|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -833,7 +817,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolormiddle jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddlejigsaw|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -860,7 +843,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=bicolorlast jigsaw]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlastjigsaw|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -891,7 +873,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=tile]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -923,7 +904,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=tilefirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -949,7 +929,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=tilemiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -976,7 +955,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=tilelast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1006,7 +984,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=beamer]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |path|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1069,7 +1046,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=beamerfirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirst|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1094,7 +1070,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=beamermiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddle|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1118,7 +1093,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=beamerlast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlast|\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1145,7 +1119,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=widget]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |path|\\
\refKey{/tcb/interior titled engine}: \> |path|\\
\refKey{/tcb/interior engine}: \> |path|\\
@@ -1184,7 +1157,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=widgetfirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathfirst|\\
\refKey{/tcb/interior titled engine}: \> |pathfirst|\\
\refKey{/tcb/interior engine}: \> |pathfirst|\\
@@ -1208,7 +1180,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=widgetmiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathmiddle|\\
\refKey{/tcb/interior titled engine}: \> |pathmiddle|\\
\refKey{/tcb/interior engine}: \> |pathmiddle|\\
@@ -1231,7 +1202,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=widgetlast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |pathlast|\\
\refKey{/tcb/interior titled engine}: \> |pathlast|\\
\refKey{/tcb/interior engine}: \> |pathlast|\\
@@ -1257,7 +1227,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=empty]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> |empty|\\
\refKey{/tcb/interior engine}: \> |empty|\\
@@ -1348,7 +1317,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=emptyfirst]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> |empty|\\
\refKey{/tcb/interior engine}: \> |empty|\\
@@ -1375,7 +1343,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=emptymiddle]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> |empty|\\
\refKey{/tcb/interior engine}: \> |empty|\\
@@ -1401,7 +1368,6 @@ Nevertheless, this skin can be applied independently.
\begin{tcolorbox}[skintable=emptylast]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |empty|\\
\refKey{/tcb/interior titled engine}: \> |empty|\\
\refKey{/tcb/interior engine}: \> |empty|\\
@@ -1520,7 +1486,6 @@ are drawn by the codes given by
\begin{tcolorbox}[skintable=spartan]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |spartan|\\
\refKey{/tcb/interior titled engine}: \> |spartan|\\
\refKey{/tcb/interior engine}: \> |spartan|\\
@@ -1551,7 +1516,6 @@ are drawn by the codes given by
\begin{tcolorbox}[skintable=draft]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> \emph{special}\\
\refKey{/tcb/interior titled engine}: \> \emph{special}\\
\refKey{/tcb/interior engine}: \> \emph{special}\\
@@ -1612,7 +1576,6 @@ you would have used \refKey{/tcb/freelance} before.
\begin{tcolorbox}[skintable=freelance]
\begin{tabbing}
\refKey{/tcb/interior titled engine}: \=\kill
- \refKey{/tcb/graphical environment}: \> |tikzpicture|\\
\refKey{/tcb/frame engine}: \> |freelance|\\
\refKey{/tcb/interior titled engine}: \> |freelance|\\
\refKey{/tcb/interior engine}: \> |freelance|\\
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex
index e92d81a644..bbf946c9fc 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex
@@ -7,8 +7,7 @@ The library is loaded by a package option or inside the preamble by:
\begin{dispListing}
\tcbuselibrary{skins}
\end{dispListing}
-This also loads the package |tikz| \cite{tantau:tikz_and_pgf}. Typically but not necessarily,
-the following skins use |tikz| instead of |pgf|.
+This also loads the package |tikzfill.image|.
In the following, general settings and options of the library are
documented.
@@ -1059,9 +1058,7 @@ By default, the resulting boxed title is somewhat smaller than the main box.
\clearpage
\subsection{Watermark Option Keys}\label{subsec:watermarks}
-The following watermark options are applicable for all skins which
-use |tikzpicture| as \refKey{/tcb/graphical environment}.
-Therefore, the skin \refSkin{standard} does not support these watermarks,
+The skin \refSkin{standard} does not support these watermarks,
but all other skins, e.\,g.\ \refSkin{enhanced}.
\begin{marker}
@@ -1479,9 +1476,7 @@ Donau\-dampf\-schiff\-fahrts\-ka\-pi\-t\"ans\-m\"ut\-zen\-fran\-sen
\clearpage
\subsection{Border Line Option Keys}\label{subsec:borderline}
-The following borderline options are applicable for most skins which
-use |tikzpicture| as \refKey{/tcb/graphical environment}.
-Therefore, the skin \refSkin{standard} does not support these border lines,
+The skin \refSkin{standard} does not support these border lines,
but most other skins, e.\,g.\ \refSkin{enhanced}.
The borderlines are independent from the normal |tcolorbox| rules.
@@ -1714,9 +1709,7 @@ but adapt to breakable boxes.
\clearpage
\subsection{Shadow Option Keys}\label{subsec:shadows}
-The following shadow options are applicable for most skins which
-use |tikzpicture| as \refKey{/tcb/graphical environment}.
-Therefore, the skin \refSkin{standard} does not support these shadows,
+The skin \refSkin{standard} does not support these shadows,
but most other skins, e.\,g.\ \refSkin{enhanced}.
The shadows are stackable, i.\,e.\ several different shadows can be
@@ -2087,7 +2080,7 @@ This is a tcolorbox.
from the frame outline. A positive \meta{offset} value shrinks the shadow
and a negative \meta{offset} value enlarges the shadow.
The shadow is filled along a \tikzname\ path with the given \tikzname\ \meta{options}.\\
- The shadows adapt to the rounded corners of the |tcolorbox|. A shrinked shadow
+ The shadows adapt to the rounded corners of the |tcolorbox|. A shrunken shadow
will switch to sharp corners if necessary, an enlarged shadow may become
more rounded depending on several factors. But \refKey{/tcb/sharp corners}
have sharp shadows.
@@ -2255,7 +2248,7 @@ This is a tcolorbox.
\clearpage
\subsubsection{\tikzname\ Shadows}
-Alternativ to the package shadow options described before, shadows from
+Alternative to the package shadow options described before, shadows from
the \flqq Shadows Library\frqq\ of \tikzname\ can be used.
Such shadows can be added directly to the frame path using \refKey{/tcb/frame style}.
@@ -2292,9 +2285,7 @@ Such shadows can be added directly to the frame path using \refKey{/tcb/frame st
\clearpage
\subsection{\tikzname\ Picture Option Keys}\label{subsec:tikzpicture}
-The following general options are applicable for skins which
-use |tikzpicture| as \refKey{/tcb/graphical environment}.
-Therefore, the skin \refSkin{standard} does not support these options,
+The skin \refSkin{standard} does not support these options,
but most other skins, e.\,g.\ \refSkin{enhanced}.
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex
index 1e6960ffd2..a9fbc31bb2 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex
@@ -62,13 +62,6 @@ option from the core package has to be set.
\clearpage
-\begin{docTcbKey}{graphical environment}{=\meta{name}}{no default, initially \texttt{pgfpicture}}
- Sets the graphical environment for the |tcolorbox| to \meta{name}.
- Feasible values are |pgfpicture| and |tikzpicture| or environments which
- inherit from one of these two. This key is set by a \refKey{/tcb/skin} and
- may seldom be used directly.
-\end{docTcbKey}
-
The skin of a |tcolorbox| is drawn by up to four \emph{engines}.
Afterwards, the text content is drawn which is not part of a skin.
The four steps are:
@@ -85,18 +78,6 @@ The four steps are:
by \refKey{/tcb/title engine}.
\end{enumerate}
-%Every engine for the up to four steps can be set to one of the following types:
-%\begin{enumerate}
-%\item\docValue{standard}: the original code from the core package.
-%\item\docValue{path}: a |tikz| path which can be controlled by options.
-%\item\docValue{pathfirst}: a |tikz| path which can be controlled by options.
-%\item\docValue{pathmiddle}: a |tikz| path which can be controlled by options.
-%\item\docValue{pathlast}: a |tikz| path which can be controlled by options.
-%\item\docValue{freelance}: arbitrary user code.
-%\item\docValue{spartan}: a quite spartan code.
-%\end{enumerate}
-%\clearpage
-
\begin{docTcbKey}{frame engine}{=\meta{name}}{no default, initially \texttt{standard}}
Sets the \emph{frame} drawing engine for a box to \meta{name}.
Typically, this key is set by a \refKey{/tcb/skin}.
@@ -644,7 +625,7 @@ These color names are
\item\docColor{tcbcolframe} set by \refKey{/tcb/colframe} (frame color)
\item\docColor{tcbcolback} set by \refKey{/tcb/colback} (background color)
\item\docColor{tcbcolbacktitle} set by \refKey{/tcb/colbacktitle} (background color of the title)
-\item\docColor{tcbcolbacklower} set by \refKey{/tcb/colbacklower} (skin dependend background color
+\item\docColor{tcbcolbacklower} set by \refKey{/tcb/colbacklower} (skin dependent background color
of the lower part; needs \mylib{skins} to be loaded)
\item\docColor{tcbcolupper} set by \refKey{/tcb/colupper} (text color upper part)
\item\docColor{tcbcollower} set by \refKey{/tcb/collower} (text color lower part)
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex
index 4884e85f57..f1a7be1ff4 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex
@@ -243,7 +243,7 @@ E&=mc^2 + \int_a^b x\, dx
\begin{docTcbKey}{separator sign}{=\meta{sign}}{no default, initially |:|}
The given \meta{sign} is used inside the title text of a theorem
- as separater between display name combined with number and
+ as separator between display name combined with number and
the specific title text. It is omitted, if there is no specific title text.
\begin{dispExample}
@@ -706,91 +706,140 @@ created by hand or using \refCom{newtcbtheorem}.
\end{docTcbKey}
\clearpage
-\begin{docTcbKey}{ams align upper}{}{style, no value}
+\begin{docTcbKeys}[
+ doc parameter = ,
+ doc description = {style, no value},
+ ]
+ {
+ {
+ doc name = ams align upper,
+ },
+ {
+ doc name = ams align,
+ doc updated = 2024-06-27,
+ }
+ }
Adds an |amsmath| |align| environment to the start and end
of the upper part.
-\end{docTcbKey}
-
-\begin{docTcbKey}{ams align lower}{}{style, no value}
- Adds an |amsmath| |align| environment to the start and end
- of the lower part.
-\end{docTcbKey}
-
-\begin{docTcbKey}{ams align}{}{style, no value}
- Adds an |amsmath| |align| environment to the start and end
- of the upper \emph{and} lower part.
\begin{dispExample}
\begin{tcolorbox}[ams align,colback=yellow!10!white,colframe=red!50!black]
\sum\limits_{n=1}^{\infty} \frac{1}{n} &= \infty.\\
\int x^2 ~\text{d}x &= \frac13 x^3 + c.
\end{tcolorbox}
\end{dispExample}
-\end{docTcbKey}
-
-\begin{docTcbKey}{ams align* upper}{}{style, no value}
- Adds an |amsmath| |align*| environment to the start and end
- of the upper part.
-\end{docTcbKey}
+\begin{marker}
+ Boxes with \refKey{/tcb/ams align upper} or \refKey{/tcb/ams align}
+ cannot have a lower part!
+ For a lower part, use \refKey{/tcb/ams nodisplayskip upper} instead.
+\end{marker}
+\end{docTcbKeys}
-\begin{docTcbKey}{ams align* lower}{}{style, no value}
- Adds an |amsmath| |align*| environment to the start and end
+\begin{docTcbKey}{ams align lower}{}{style, no value}
+ Adds an |amsmath| |align| environment to the start and end
of the lower part.
\end{docTcbKey}
-\begin{docTcbKey}{ams align*}{}{style, no value}
+
+\begin{docTcbKeys}[
+ doc parameter = ,
+ doc description = {style, no value},
+ ]
+ {
+ {
+ doc name = ams align* upper,
+ },
+ {
+ doc name = ams align*,
+ doc updated = 2024-06-27,
+ }
+ }
Adds an |amsmath| |align*| environment to the start and end
- of the upper \emph{and} lower part.
+ of the upper part.
\begin{dispExample}
\begin{tcolorbox}[ams align*,colback=yellow!10!white,colframe=red!50!black]
\sum\limits_{n=1}^{\infty} \frac{1}{n} &= \infty.\\
\int x^2 ~\text{d}x &= \frac13 x^3 + c.
\end{tcolorbox}
\end{dispExample}
-\end{docTcbKey}
-
-\clearpage
-\begin{docTcbKey}{ams gather upper}{}{style, no value}
- Adds an |amsmath| |gather| environment to the start and end
- of the upper part.
-\end{docTcbKey}
+\begin{marker}
+ Boxes with \refKey{/tcb/ams align* upper} or \refKey{/tcb/ams align*}
+ cannot have a lower part!
+ For a lower part, use \refKey{/tcb/ams nodisplayskip upper} instead.
+\end{marker}
+\end{docTcbKeys}
-\begin{docTcbKey}{ams gather lower}{}{style, no value}
- Adds an |amsmath| |gather| environment to the start and end
+\begin{docTcbKey}{ams align* lower}{}{style, no value}
+ Adds an |amsmath| |align*| environment to the start and end
of the lower part.
\end{docTcbKey}
-\begin{docTcbKey}{ams gather}{}{style, no value}
+
+\clearpage
+\begin{docTcbKeys}[
+ doc parameter = ,
+ doc description = {style, no value},
+ ]
+ {
+ {
+ doc name = ams gather upper,
+ },
+ {
+ doc name = ams gather,
+ doc updated = 2024-06-27,
+ }
+ }
Adds an |amsmath| |gather| environment to the start and end
- of the upper \emph{and} lower part.
+ of the upper part.
\begin{dispExample}
\begin{tcolorbox}[ams gather,colback=yellow!10!white,colframe=red!50!black]
\sum\limits_{n=1}^{\infty} \frac{1}{n} = \infty.\\
\int x^2 ~\text{d}x = \frac13 x^3 + c.
\end{tcolorbox}
\end{dispExample}
-\end{docTcbKey}
-
-\begin{docTcbKey}{ams gather* upper}{}{style, no value}
- Adds an |amsmath| |gather*| environment to the start and end
- of the upper part.
-\end{docTcbKey}
+\begin{marker}
+ Boxes with \refKey{/tcb/ams gather upper} or \refKey{/tcb/ams gather}
+ cannot have a lower part!
+ For a lower part, use \refKey{/tcb/ams nodisplayskip upper} instead.
+\end{marker}
+\end{docTcbKeys}
-\begin{docTcbKey}{ams gather* lower}{}{style, no value}
- Adds an |amsmath| |gather*| environment to the start and end
+\begin{docTcbKey}{ams gather lower}{}{style, no value}
+ Adds an |amsmath| |gather| environment to the start and end
of the lower part.
\end{docTcbKey}
-\begin{docTcbKey}{ams gather*}{}{style, no value}
+\begin{docTcbKeys}[
+ doc parameter = ,
+ doc description = {style, no value},
+ ]
+ {
+ {
+ doc name = ams gather* upper,
+ },
+ {
+ doc name = ams gather*,
+ doc updated = 2024-06-27,
+ }
+ }
Adds an |amsmath| |gather*| environment to the start and end
- of the upper \emph{and} lower part.
+ of the upper part.
\begin{dispExample}
\begin{tcolorbox}[ams gather*,colback=yellow!10!white,colframe=red!50!black]
\sum\limits_{n=1}^{\infty} \frac{1}{n} = \infty.\\
\int x^2 ~\text{d}x = \frac13 x^3 + c.
\end{tcolorbox}
\end{dispExample}
-\end{docTcbKey}
+\begin{marker}
+ Boxes with \refKey{/tcb/ams gather* upper} or \refKey{/tcb/ams gather*}
+ cannot have a lower part!
+ For a lower part, use \refKey{/tcb/ams nodisplayskip upper} instead.
+\end{marker}
+\end{docTcbKeys}
+\begin{docTcbKey}{ams gather* lower}{}{style, no value}
+ Adds an |amsmath| |gather*| environment to the start and end
+ of the lower part.
+\end{docTcbKey}
\clearpage
\begin{docTcbKey}{ams nodisplayskip upper}{}{style, no value}
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex b/macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex
index 733c356d8e..8ea72010fe 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex
@@ -140,7 +140,7 @@ is used internally.
\enlargethispage*{1cm}
-\begin{vigTcbKey}[][doc new=2016-04-22]{inside node}{=\meta{name}}{style, initally unset}
+\begin{vigTcbKey}[][doc new=2016-04-22]{inside node}{=\meta{name}}{style, initially unset}
Places the \refCom{tcbvignette} inside the node with the given \meta{name}.
The outer limits of the \emph{vignette} are adapted to the node geometry.
\begin{dispExample*}{sbs,righthand width=3cm,center lower}
@@ -154,7 +154,7 @@ is used internally.
\clearpage
-\begin{vigTcbKey}[][doc new=2016-04-22]{outside node}{=\meta{name}}{style, initally unset}
+\begin{vigTcbKey}[][doc new=2016-04-22]{outside node}{=\meta{name}}{style, initially unset}
Places the \refCom{tcbvignette} outside the node with the given \meta{name}.
The inner limits of the \emph{vignette} are adapted to the node geometry.
\begin{dispExample*}{sbs,righthand width=3cm,center lower}
@@ -167,7 +167,7 @@ is used internally.
\end{vigTcbKey}
-\begin{vigTcbKey}[][doc new=2016-04-22]{over node}{=\meta{name}}{style, initally unset}
+\begin{vigTcbKey}[][doc new=2016-04-22]{over node}{=\meta{name}}{style, initially unset}
Places the \refCom{tcbvignette} over the node with the given \meta{name}.
The outer limits of the \emph{vignette} are adapted to the node geometry, but
are shifted to the outside by \refKey{/tcb/vig/over node offset}.
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.pdf b/macros/latex/contrib/tcolorbox/tcolorbox.pdf
index a7499395e4..3054aff591 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.pdf
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.sty b/macros/latex/contrib/tcolorbox/tcolorbox.sty
index be2dc7e19b..23f0d51569 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.sty
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.sty
@@ -1,4 +1,4 @@
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcolorbox.sty: Text color boxes
%%
%% -------------------------------------------------------------------------------------------
@@ -17,11 +17,12 @@
%%
%% This work consists of all files listed in README
%%
-\NeedsTeXFormat{LaTeX2e}[2021-11-15]
-\ProvidesPackage{tcolorbox}[2024/01/10 version 6.2.0 text color boxes]
-\def\tcb@version{6.2.0}
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
+\ProvidesPackage{tcolorbox}[2024/07/10 version 6.3.0 text color boxes]
+\def\tcb@version{6.3.0}
-\RequirePackage{pgf}[2008/01/15]
+%\RequirePackage{pgf}[2008/01/15]
+\RequirePackage{tikz}[2023/01/15]
\RequirePackage{verbatim}[2003/08/22]
\RequirePackage{environ}[2013/04/01]
\RequirePackage{etoolbox}[2011/01/03]
@@ -57,6 +58,7 @@
\ExplSyntaxOn
\bool_new:N \l__tcobox_prevent_init_overwrite_bool
+\bool_new:N \l__tcobox_savebox_construction_bool
\box_new:N \l__tcobox_tmpa_box
\dim_new:N \l__tcobox_tmpa_dim
\fp_new:N \l__tcobox_tmpa_fp
@@ -561,7 +563,7 @@
toggle left and right/evenpage/.code={\let\tcb@lrtoggle=\tcb@lrtoggle@evenpage\tcbset{check odd page}},
toggle left and right/forced/.code={\let\tcb@lrtoggle=\tcb@lrtoggle@forced},
toggle left and right/.default=evenpage,
- graphical environment/.store in=\kvtcb@graphenv,
+ graphical environment/.style=,% deprecated
%
frame engine/.is choice,
frame engine/standard/.style={frame code=\tcb@drawframe@standard},
@@ -1003,22 +1005,13 @@
IfBooleanF/.code~n~args={2}{\IfBooleanF{#1}{\pgfkeysalso{#2}}},
}
-\IfFormatAtLeastTF{2023-06-01}
- {
- \def\tcb@set@parbox@indent@{
- \exp_args:Nne \hook_gput_next_code:nn {para/begin}
- { \__tcobox_set_parbox_indent:n { \thetcolorboxnumber } }
- \let\tcb@set@parbox@indent\@empty
- }
- }
- {
- % Note: To be removed in future
- \def\tcb@set@parbox@indent@{
- \vspace{-\parskip}
- \noindent
- \let\tcb@set@parbox@indent\@empty
- }
- }
+
+\def\tcb@set@parbox@indent@{
+ \exp_args:Nne \hook_gput_next_code:nn {para/begin}
+ { \__tcobox_set_parbox_indent:n { \thetcolorboxnumber } }
+ \let\tcb@set@parbox@indent\@empty
+}
+
\cs_new_protected:Npn \__tcobox_set_parbox_indent:n #1
{
@@ -1027,12 +1020,20 @@
{ \int_compare_p:nNn { #1 } = { \thetcolorboxnumber } }
% and if inside a "tcb@savebox" env (upper or lower part is non-empty),
% hence not at the time of using saved \tcb@upperbox or \tcb@lowerbox
- { \cs_if_exist_p:N \tcbbreak }
+ { \l__tcobox_savebox_construction_bool }
{
\OmitIndent
}
}
+
+\def\tcb@set@savebox@construction@true
+ {
+ \bool_set_true:N \l__tcobox_savebox_construction_bool
+ }
+\bool_set_false:N \l__tcobox_savebox_construction_bool
+
+
\ExplSyntaxOff
\def\tcb@parbox@true@indent{}%
@@ -1045,6 +1046,7 @@
\let\tcb@parboxrestore=\@parboxrestore
\def\tcb@parbox@false@settings{%
+ \@nobreakfalse%
\let\par\@@par%
\linewidth\hsize%
\@totalleftmargin\z@%
@@ -1082,6 +1084,7 @@
\reserved@a
\@endpefalse%
\global\@newlistfalse%
+ \tcb@set@savebox@construction@true%
\let\tcbbreak\@@par%
\csname tcb@parbox@use@\kvtcb@parbox\endcsname%
\tcb@minipage{#2}%
@@ -2025,17 +2028,42 @@
\fi%
}
-\def\tcb@drawing@env@begin{%
- \csname tcb@before@\tcb@split@state\endcsname%
- \begin{\kvtcb@graphenv}%
- \tcb@bbdraw%
- \tcb@apply@graph@patches%
-}
-\def\tcb@drawing@env@end{%
- \end{\kvtcb@graphenv}%
- \csname tcb@after@\tcb@split@state\endcsname%
-}
+\let\tcb@tikz@option@hook\@empty
+\let\tcb@tikz@begin@hook\@empty
+\let\tcb@tikz@end@hook\@empty
+
+\ExplSyntaxOn
+
+\NewSocket{tagsupport/tcb/drawing/begin}{0}
+\NewSocket{tagsupport/tcb/drawing/end}{0}
+\NewSocketPlug{tagsupport/tcb/drawing/begin}{suspend}
+ {\tag_mc_end_push:\tag_mc_begin:n{artifact}}
+\NewSocketPlug{tagsupport/tcb/drawing/end}{resume}
+ {\tag_mc_end:\tag_mc_begin_pop:n{}}
+\AssignSocketPlug{tagsupport/tcb/drawing/begin}{suspend}
+\AssignSocketPlug{tagsupport/tcb/drawing/end}{resume}
+
+\NewDocumentEnvironment{ tcb@drawing }{ }
+ {
+ \use:c{ tcb@before@\tcb@split@state }
+ \exp_last_unbraced:NnNo \begin{tikzpicture}[\tcb@tikz@option@hook]
+ \UseTaggingSocket{tcb/drawing/begin}
+ \SuspendTagging{tcb/drawing}
+ \tcb@tikz@begin@hook
+ \tcb@bbdraw
+ \tcb@apply@graph@patches
+ }
+ {
+ \tcb@tikz@end@hook
+ \ResumeTagging{tcb/drawing}
+ \UseTaggingSocket{tcb/drawing/end}
+ \end{tikzpicture}
+ \use:c{ tcb@after@\tcb@split@state }
+ }
+
+\ExplSyntaxOff
+
\def\tcb@set@normal@unbroken@beforeafter{%
\let\tcb@before@unbroken=\kvtcb@beforebox%
@@ -2077,7 +2105,8 @@
\tcb@ch%
\tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}%
\tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}%
- \tcb@drawing@env@begin%
+ \begin{tcb@drawing}%
+ %\tcb@drawing@env@begin%
\pgfsetbaseline{\the\dimexpr\kvtcb@baseline-\kvtcb@bbbottom\relax}%
\tcb@extensions@preframe%
% draw frame and interior
@@ -2097,7 +2126,8 @@
\tcb@tdraw@upper%
\iftcb@hasLower\tcb@tdraw@lower\fi%
\tcb@extensions@final%
- \tcb@drawing@env@end%
+ %\tcb@drawing@env@end%
+ \end{tcb@drawing}%
}
\let\tcb@drawcolorbox@standalone=\tcb@drawcolorbox
@@ -2255,6 +2285,9 @@
}
\def\tcb@proc@counter@auto#1{%
+ \ifcsdef{c@tcb@cnt@#1}
+ {\tcb@error{Auto counter for environment '#1' already defined}{}}
+ {}%
\newcounter{tcb@cnt@#1}%
\csxdef{tcb@cnt@#1}{tcb@cnt@#1}%
\tcb@proc@counter@autoanduse{#1}%
@@ -2297,6 +2330,33 @@
\ExplSyntaxOn
+\prg_new_conditional:Npnn \__tcobox_if_single_cs:n #1 { p, TF }
+ {
+ \bool_lazy_and:nnTF
+ { \tl_if_single_p:n { #1 } }
+ { \token_if_cs_p:N #1 }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\msg_new:nnn { tcolorbox } { invalid-box-name }
+ {
+ Invalid~box~name~`` \tl_to_str:n {#1} ''.~
+ A~single~command~is~expected~after~space~trimming.~
+ I'll~drop~this~box~definition.
+ }
+
+\cs_new:Npn \__tcobox_set_backslash_removed:Nn #1#2
+ {
+ \__tcobox_if_single_cs:nTF { #2 }
+ {
+ \tl_set:Ne #1 { \exp_last_unbraced:Ne \cs_to_str:N { \tl_trim_spaces:n { #2 } } }
+ }
+ {
+ \msg_error:nnn { tcolorbox } { invalid-box-name } { #2 }
+ }
+ }
+
\cs_new:Npn \__tcobox_process_newtcolorbox:nn #1#2
{
\bool_lazy_and:nnF
@@ -2312,14 +2372,6 @@
}
-\cs_new:Npn \__tcobox_set_backslash_removed:Nn #1#2
- {
- \tl_set:Nn #1 { #2 }
- \tl_trim_spaces:N #1
- \tl_set:Ne #1 { \exp_last_unbraced:NV \cs_to_str:N #1 }
- }
-
-
\NewDocumentCommand \__tcobox_new_tcolorbox:w { m +O{} >{\TrimSpaces} m o +o +m }
{
\__tcobox_process_newtcolorbox:nn { #2 }{ #3 }
@@ -2740,7 +2792,7 @@
\tcb@new@skin{standard}{frame engine=standard,interior titled engine=standard,
interior engine=standard,segmentation engine=standard,title engine=standard,
- graphical environment=pgfpicture,geometry nodes=false,
+ geometry nodes=false,
set@extensions@preframe=,set@extensions@postframe={\tcb@apply@overlay},set@extensions@final=,%
set@outerboundary=\tcb@boundaryframe@standard,%
shape@of@skin=unbroken,
diff --git a/macros/latex/contrib/tcolorbox/tcolorbox.tex b/macros/latex/contrib/tcolorbox/tcolorbox.tex
index b7c1742391..c60eb4acfa 100644
--- a/macros/latex/contrib/tcolorbox/tcolorbox.tex
+++ b/macros/latex/contrib/tcolorbox/tcolorbox.tex
@@ -1,5 +1,5 @@
% \LaTeX-Main\
-%% The LaTeX package tcolorbox - version 6.2.0 (2024/01/10)
+%% The LaTeX package tcolorbox - version 6.3.0 (2024/07/10)
%% tcolorbox.tex: Manual
%%
%% -------------------------------------------------------------------------------------------
@@ -25,6 +25,18 @@
% arara: pdflatex: { shell: yes, synctex: yes }
% arara: pdflatex: { shell: yes, synctex: yes }
%
+%\DocumentMetadata{
+% lang = en,
+% pdfversion = 2.0,
+% pdfstandard = ua-2,
+% pdfstandard = a-4f,
+% testphase =
+% {
+% phase-III,
+% firstaid
+% },
+% %uncompress,
+%}
\PassOptionsToPackage{pdftex,bookmarks,raiselinks,pageanchor,hyperindex,colorlinks,pdfusetitle,pdfpagelabels}{hyperref}
\documentclass[a4paper,11pt]{ltxdoc}
@@ -51,8 +63,8 @@
\setlength{\bibitemsep}{\smallskipamount}
\addbibresource{tcolorbox.doc.bib}
-\def\version{6.2.0}%
-\def\datum{2024/01/10}%
+\def\version{6.3.0}%
+\def\datum{2024/07/10}%
\makeindex
\hypersetup{
@@ -68,7 +80,7 @@
%\geometry{showframe}
%\tcbset{draftmode}
\tcbset{/tcb/external/-}% for final run
-%\includeonly{tcolorbox.doc.initoptions,tcolorbox.doc.index}
+%\includeonly{tcolorbox.doc.coreoptions}
%\hypersetup{colorlinks=false}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/telprint/README.md b/macros/latex/contrib/telprint/README.md
new file mode 100644
index 0000000000..de7d729ad6
--- /dev/null
+++ b/macros/latex/contrib/telprint/README.md
@@ -0,0 +1,13 @@
+# telprint package for LaTeX
+
+Version: 2024-07-26 v1.12
+
+Format German phone numbers
+
+## Copyright (C)
+* 1996, 1997, 2004-2008 Heiko Oberdiek
+* 2016-2024 Oberdiek Package Support Group
+
+
+## License
+LATEX Project Public License, version 1.3c or later.
diff --git a/macros/latex/contrib/oberdiek/telprint.dtx b/macros/latex/contrib/telprint/telprint.dtx
index 57152c6651..74bb22ea8a 100644
--- a/macros/latex/contrib/oberdiek/telprint.dtx
+++ b/macros/latex/contrib/telprint/telprint.dtx
@@ -1,13 +1,13 @@
% \iffalse meta-comment
%
% File: telprint.dtx
-% Version: 2016/05/16 v1.11
+% Version: 2024-07-26 v1.12
% Info: Format German phone numbers
%
% Copyright (C)
% 1996, 1997, 2004-2008 Heiko Oberdiek
-% 2016-2019 Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% 2016-2024 Oberdiek Package Support Group
+% https://github.com/ho-tex/telprint/issues
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -23,7 +23,7 @@
%
% The Current Maintainers of this work are
% Heiko Oberdiek and the Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% https://github.com/ho-tex/telprint/issues
%
% The Base Interpreter refers to any `TeX-Format',
% because some files are installed in TDS:tex/generic//.
@@ -34,8 +34,8 @@
% telprint-test1.tex.
%
% Distribution:
-% CTAN:macros/latex/contrib/oberdiek/telprint.dtx
-% CTAN:macros/latex/contrib/oberdiek/telprint.pdf
+% CTAN:macros/latex/contrib/telprint/telprint.dtx
+% CTAN:macros/latex/contrib/telprint/telprint.pdf
%
% Unpacking:
% (a) If telprint.ins is present:
@@ -56,7 +56,7 @@
% use A4 as paper format:
% \PassOptionsToClass{a4paper}{article}
%
-% Programm calls to get the documentation (example):
+% Program calls to get the documentation (example):
% pdflatex telprint.dtx
% makeindex -s gind.ist telprint.idx
% pdflatex telprint.dtx
@@ -64,9 +64,9 @@
% pdflatex telprint.dtx
%
% Installation:
-% TDS:tex/generic/oberdiek/telprint.sty
-% TDS:doc/latex/oberdiek/telprint.pdf
-% TDS:source/latex/oberdiek/telprint.dtx
+% TDS:tex/generic/telprint/telprint.sty
+% TDS:doc/latex/telprint/telprint.pdf
+% TDS:source/latex/telprint/telprint.dtx
%
%<*ignore>
\begingroup
@@ -83,7 +83,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: telprint 2016/05/16 v1.11 Format German phone numbers (HO)}
+\Msg{* Package: telprint 2024-07-26 v1.12 Format German phone numbers (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -95,11 +95,11 @@
This is a generated file.
Project: telprint
-Version: 2016/05/16 v1.11
+Version: 2024-07-26 v1.12
Copyright (C)
1996, 1997, 2004-2008 Heiko Oberdiek
- 2016-2019 Oberdiek Package Support Group
+ 2016-2024 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -115,7 +115,7 @@ This work has the LPPL maintenance status "maintained".
The Current Maintainers of this work are
Heiko Oberdiek and the Oberdiek Package Support Group
-https://github.com/ho-tex/oberdiek/issues
+https://github.com/ho-tex/telprint/issues
The Base Interpreter refers to any `TeX-Format',
@@ -132,9 +132,9 @@ and the derived files
\generate{%
\file{telprint.ins}{\from{telprint.dtx}{install}}%
\file{telprint.drv}{\from{telprint.dtx}{driver}}%
- \usedir{tex/generic/oberdiek}%
+ \usedir{tex/generic/telprint}%
\file{telprint.sty}{\from{telprint.dtx}{package}}%
-% \usedir{doc/latex/oberdiek/test}%
+% \usedir{doc/latex/telprint/test}%
% \file{telprint-test1.tex}{\from{telprint.dtx}{test1}}%
}
@@ -162,7 +162,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{telprint.drv}%
- [2016/05/16 v1.11 Format German phone numbers (HO)]%
+ [2024-07-26 v1.12 Format German phone numbers (HO)]%
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
\usepackage[ngerman,english]{babel}
@@ -177,9 +177,9 @@ and the derived files
% \GetFileInfo{telprint.drv}
%
% \title{The \xpackage{telprint} package}
-% \date{2016/05/16 v1.11}
+% \date{2024-07-26 v1.12}
% \author{Heiko Oberdiek\thanks
-% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}}
+% {Please report any issues at \url{https://github.com/ho-tex/telprint/issues}}}
%
% \maketitle
%
@@ -397,7 +397,7 @@ and the derived files
\fi
\expandafter\x\csname ver@telprint.sty\endcsname
\ProvidesPackage{telprint}%
- [2016/05/16 v1.11 Format German phone numbers (HO)]%
+ [2024-07-26 v1.12 Format German phone numbers (HO)]%
% \end{macrocode}
%
% \subsection{Catcodes}
@@ -467,7 +467,11 @@ and the derived files
% \begin{macro}{\telspace}
% \begin{macrocode}
\DeclareRobustCommand*{\telspace}[1]{\def\TELspace{#1}}
-\telspace{{}$\,${}}
+\ifcsname LaTeXReleaseInfo\endcsname
+ \telspace{\,}
+\else
+ \telspace{{}$\,${}}
+\fi
% \end{macrocode}
% \end{macro}
% \begin{macro}{\telhyphen}
@@ -615,30 +619,10 @@ and the derived files
% \paragraph{Package.} This package is available on
% CTAN\footnote{\CTANpkg{telprint}}:
% \begin{description}
-% \item[\CTAN{macros/latex/contrib/oberdiek/telprint.dtx}] The source file.
-% \item[\CTAN{macros/latex/contrib/oberdiek/telprint.pdf}] Documentation.
-% \end{description}
-%
-%
-% \paragraph{Bundle.} All the packages of the bundle `oberdiek'
-% are also available in a TDS compliant ZIP archive. There
-% the packages are already unpacked and the documentation files
-% are generated. The files and directories obey the TDS standard.
-% \begin{description}
-% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}]
+% \item[\CTAN{macros/latex/contrib/telprint/telprint.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/telprint/telprint.pdf}] Documentation.
% \end{description}
-% \emph{TDS} refers to the standard ``A Directory Structure
-% for \TeX\ Files'' (\CTANpkg{tds}). Directories
-% with \xfile{texmf} in their name are usually organized this way.
%
-% \subsection{Bundle installation}
-%
-% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the
-% TDS tree (also known as \xfile{texmf} tree) of your choice.
-% Example (linux):
-% \begin{quote}
-% |unzip oberdiek.tds.zip -d ~/texmf|
-% \end{quote}
%
% \subsection{Package installation}
%
@@ -655,9 +639,9 @@ and the derived files
% \begin{quote}
% \def\t{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
-% telprint.sty & tex/generic/oberdiek/telprint.sty\\
-% telprint.pdf & doc/latex/oberdiek/telprint.pdf\\
-% telprint.dtx & source/latex/oberdiek/telprint.dtx\\
+% telprint.sty & tex/generic/telprint/telprint.sty\\
+% telprint.pdf & doc/latex/telprint/telprint.pdf\\
+% telprint.dtx & source/latex/telprint/telprint.dtx\\
% \end{tabular}^^A
% }^^A
% \sbox0{\t}^^A
@@ -836,6 +820,9 @@ and the derived files
% \item
% Documentation updates.
% \end{Version}
+% \begin{Version}{2024-07-26 v1.12}
+% \item Avoid math in \cs{telspace} for better tagging support.
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/telprint/telprint.pdf
index f8027491c8..49a2968f35 100644
--- a/macros/latex/contrib/oberdiek/telprint.pdf
+++ b/macros/latex/contrib/telprint/telprint.pdf
Binary files differ
diff --git a/macros/latex/contrib/texvc/Makefile b/macros/latex/contrib/texvc/Makefile
new file mode 100644
index 0000000000..d32d473d3b
--- /dev/null
+++ b/macros/latex/contrib/texvc/Makefile
@@ -0,0 +1,17 @@
+PACKAGE = texvc
+all: $(PACKAGE).pdf
+
+$(PACKAGE).sty: $(PACKAGE).dtx $(PACKAGE).ins
+ pdflatex $(PACKAGE).ins
+
+$(PACKAGE).idx: $(PACKAGE).dtx $(PACKAGE).sty
+ pdflatex $(PACKAGE).dtx
+
+$(PACKAGE).ind: $(PACKAGE).idx $(PACKAGE).sty
+ makeindex -s gind.ist $(PACKAGE).idx
+
+$(PACKAGE).gls: $(PACKAGE).idx $(PACKAGE).sty
+ makeindex -s gglo.ist -o $(PACKAGE).gls $(PACKAGE).glo
+
+$(PACKAGE).pdf: $(PACKAGE).dtx $(PACKAGE).sty $(PACKAGE).ind $(PACKAGE).gls
+ pdflatex $(PACKAGE).dtx
diff --git a/macros/latex/contrib/texvc/texvc.dtx b/macros/latex/contrib/texvc/texvc.dtx
index 429a1a5e6e..7309d0266f 100644
--- a/macros/latex/contrib/texvc/texvc.dtx
+++ b/macros/latex/contrib/texvc/texvc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2015 by Moritz Schubotz
+% Copyright (C) 2015-2018 by Moritz Schubotz
% -----------------------------------
%
% This file may be distributed and/or modified under the
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{texvc}
%<*package>
-[2018/03/04 v1.1 Bugfixes]
+[2020/02/09 v1.2 Document deprecations]
%</package>
%<package>
%<package>\RequirePackage{amsmath}
@@ -42,7 +42,7 @@
%<package>
%<*driver>
\documentclass{ltxdoc}
-\usepackage{texvc}[2018/03/04]
+\usepackage{texvc}[2020/02/09]
\EnableCrossrefs
\CodelineIndex
\RecordChanges
@@ -75,19 +75,21 @@
%
% \changes{v1.0}{2015/11/09}{Initial version}
% \changes{v1.1}{2018/03/04}{Fix bug with varcoppa, document usage of or}
+% \changes{v1.2}{2020/02/09}{Document deprecations}
% \GetFileInfo{texvc.sty}
-%
+% \newcommand{\deprecated}{\emph{This command is deprecated.}}
% \DoNotIndex{\newcommand,\newenvironment}
%
% \title{The \textsf{texvc} package\thanks{This document
% corresponds to \textsf{texvc}~\fileversion,
% dated \filedate.}}
-% \author{Moritz Schubotz \\ \texttt{moritz.schubotz@uni-konstanz.de}}
-%
+% \author{Moritz Schubotz \\ \texttt{moritz.schubotz@fiz-karlsruhe.de}}
+% \date{\filedate}
+%
% \maketitle
%
% \begin{abstract}
-% This package provides all\footnote{The command \texttt{\textbackslash or} is only availible if custom code is copied into your \LaTeX-file. See page \pageref{cmd.or} for details.} LaTeX command availible in MediaWiki.
+% This package provides all\footnote{The command \texttt{\textbackslash or} is only available if custom code is copied into your \LaTeX-file. See page \pageref{cmd.or} for details.} LaTeX command available in MediaWiki.
% This includes several packages like amsmath, and adds some specific
% commands such as \texttt{\textbackslash Reals}.
% \end{abstract}
@@ -95,7 +97,7 @@
% \section{Provided Macros}
%
% \subsection{Arrows}
-% The first group of MediaWiki coustom command (other\_delimiters2) defines short hand notations for some arrorws.
+% The first group of MediaWiki custom command (other\_delimiters2) defines short hand notations for some arrows.
%
% \DescribeMacro{\darr} Short hand notation for arrow $\downarrow.$
%
@@ -122,12 +124,12 @@
%
% \subsection{Literals}
%
-% The second group of MediaWiki coustom commands (other\_litereals3) defines short hand notations for some literals.
+% The second group of MediaWiki custom commands (other\_litereals3) defines short hand notations for some literals.
%
-% \DescribeMacro{\C} Short hand notation for literal $\mathbb{C}.$
+% \DescribeMacro{\C} Short hand notation for literal $\mathbb{C}.$ \deprecated
%
%
-% \DescribeMacro{\H} Short hand notation for literal $\mathbb{H}.$
+% \DescribeMacro{\H} Short hand notation for literal $\mathbb{H}.$ \deprecated
%
%
% \DescribeMacro{\N} Short hand notation for literal $\mathbb{N}.$
@@ -151,10 +153,10 @@
% \DescribeMacro{\Alpha} Short hand notation for literal $\mathrm{A}.$
%
%
-% \DescribeMacro{\and} Short hand notation for literal $\land.$
+% \DescribeMacro{\and} Short hand notation for literal $\land.$ \deprecated
%
%
-% \DescribeMacro{\ang} Short hand notation for literal $\angle.$
+% \DescribeMacro{\ang} Short hand notation for literal $\angle.$ \deprecated
%
%
% \DescribeMacro{\Beta} Short hand notation for literal $\mathrm{B}.$
@@ -277,10 +279,10 @@
% \DescribeMacro{\Omicron} Short hand notation for literal $\mathrm{O}.$
%
%
-% \DescribeMacro{\or} Short hand notation for literal $\lor.$
+% \DescribeMacro{\or} Short hand notation for literal $\lor.$ \deprecated
%
%
-% \DescribeMacro{\part} Short hand notation for literal $\partial.$
+% \DescribeMacro{\part} Short hand notation for literal $\partial.$ \deprecated
%
%
% \DescribeMacro{\plusmn} Short hand notation for literal $\pm.$
@@ -342,7 +344,21 @@
%
% \DescribeMacro{\Zeta} Short hand notation for literal $\mathrm{Z}.$
%
-%
+% \section{Deprecations}
+% According to the decision of \emph{Wikimedia Community User Group Math}\footnote{\url{https://meta.wikimedia.org/w/index.php?oldid=19705444}} the following macros have been deprecated\footnote{See \url{https://phabricator.wikimedia.org/T197842} for the discussion.}:
+% \begin{enumerate}
+% \item \verb|$|
+% \item \verb|%|
+% \item \verb|\and|
+% \item \verb|\or|
+% \item \verb|\part|
+% \item \verb|\ang|
+% \item \verb|\C|
+% \item \verb|\H|
+% \item \verb|\bold|
+% \item \verb|\Bbb|
+% \end{enumerate}
+% The commands 1,2,4,9,10 have never been part of this package, but were available from within Wikipedia.
% \StopEventually{}
%
% \section{Implementation}
diff --git a/macros/latex/contrib/texvc/texvc.ins b/macros/latex/contrib/texvc/texvc.ins
index 5343a6a94f..0c12dd61eb 100644
--- a/macros/latex/contrib/texvc/texvc.ins
+++ b/macros/latex/contrib/texvc/texvc.ins
@@ -1,42 +1,42 @@
-%%
-%% Copyright (C) 2015 by Moritz Schubotz
-%%
-%% This file 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 in:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% and version 1.3 or later is part of all distributions of
-%% LaTeX version 2005/12/01 or later.
-%%
-\input docstrip.tex
-\keepsilent
-\usedir{tex/latex/texvc}
-\askforoverwritefalse
-\preamble
-This is a generated file.
-Copyright (C) 2015 by Moritz Schubotz
-This file 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 in:
-http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of
-LaTeX version 2005/12/01 or later.
-\endpreamble
-\generate{\file{texvc.sty}{\from{texvc.dtx}{package}}}
-\Msg{*********************************************************}
-\Msg{*}
-\Msg{* To finish the installation you have to move the}
-\Msg{* following file into a directory searched by TeX:}
-\Msg{*}
-\Msg{* \space\space texvc.sty}
-\Msg{*}
-\Msg{* To produce the documentation run the file texvc.dtx}
-\Msg{* through LaTeX.}
-\Msg{*}
-\Msg{* Happy TeXing!}
-\Msg{*********************************************************}
-\endbatchfile
+%%
+%% Copyright (C) 2015-2018 by Moritz Schubotz
+%%
+%% This file 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 in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/texvc}
+\askforoverwritefalse
+\preamble
+This is a generated file.
+Copyright (C) 2015-2018 by Moritz Schubotz
+This file 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 in:
+http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+\endpreamble
+\generate{\file{texvc.sty}{\from{texvc.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space texvc.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file texvc.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/macros/latex/contrib/texvc/texvc.pdf b/macros/latex/contrib/texvc/texvc.pdf
index 7269b865f2..f431f01829 100644
--- a/macros/latex/contrib/texvc/texvc.pdf
+++ b/macros/latex/contrib/texvc/texvc.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/README.md b/macros/latex/contrib/tkz/tkz-elements/README.md
index a4d8d90fad..66c11bf62f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/README.md
+++ b/macros/latex/contrib/tkz/tkz-elements/README.md
@@ -1,10 +1,10 @@
# tkz-elements — for euclidean geometry
-Release 2.25c 2024/04/28
+Release 2.30c 2024/07/16
## Description
-`tkz-elements v.2.25c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
+`tkz-elements v.2.30c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings. You can use the option `mini` with `tkz-euclide` to load only the modules required for tracing.
@@ -62,6 +62,15 @@ An important example `Golden Arbelos` using the package is on the site. All the
are on the site.
## History
+
+ - version 2.30c
+ - new version of the macro `\tkzGetNodes` written by Sanskar Singh. This version now fixes a bug that prevented a figure from being centred with `centering` or the `center` environment.
+ - adding methods `bevan_circle`, `symmedial_circle`.
+ - correction of the methods `function triangle: bevan_point ()` and `function triangle: mittenpunkt_point ()`.
+ - adding `function triangle: similar ()`
+ - adding `function line : perpendicular_bisector ()` which is similar to `function line : mediator ()`
+ - correction of documentation.
+
- version 2.25c
- French documentation at my site: [http://altermundus.fr](http://altermundus.fr)
- Added `colinear_at` a new method for the classe `line`
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
index 7ae96c7ada..85e7359518 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
@@ -25,8 +25,8 @@ This class is defined by two points: the center and a point through which the ci
\Iattr{circle}{south} & |C.AB.south| & |z.S = C.OA.south| \\
\Iattr{circle}{east} & |C.AB.east| & |z.E = C.OA.east| \\
\Iattr{circle}{west} & |C.AB.west| & |z.W = C.OA.west| \\
-\Iattr{circle}{opp} & |z.Ap = C.AB.opp| & Refer to (\ref{ssub:example_circle_attributes}) \\
-\Iattr{circle}{ct} & |L = C.AB.ct| & Refer to (\ref{ssub:example_circle_attributes}) \\
+\Iattr{circle}{opp} & |z.Ap = C.AB.opp| & [\ref{ssub:example_circle_attributes}] \\
+\Iattr{circle}{ct} & |L = C.AB.ct| [ \ref{ssub:example_circle_attributes} ] \\
\bottomrule %
\end{tabular}
\egroup
@@ -71,16 +71,16 @@ Three attributes are used (south, west, radius).
z.c = C.ab.opp
z.r,z.t = get_points (C.ab.ct : ortho_from (z.b))
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
+
+\emph{\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPoints(a,b,c,s,w)
\tkzLabelPoints(a,b,c,s,w)
\tkzDrawCircle(a,b)
\tkzDrawSegments(a,b r,t b,c)
\tkzLabelSegment[sloped](a,b){ab = \tkzUseLua{r}}
-\end{tikzpicture}
-\hspace*{\fill}
+\end{tikzpicture}}
+
\end{minipage}
% subsubsection example_circle_attributes (end)
% subsection attributes_of_a_circle (end)
@@ -96,184 +96,314 @@ Three attributes are used (south, west, radius).
\toprule
\textbf{Methods} & \textbf{Comments} & \\
\midrule \\
-\Igfct{circle}{new(O,A)} & |C.OA = circle : new (z.O,z.A)| & circle center $O$ through $A$\\
-\Igfct{circle}{radius(O,r)} & |C.OA = circle : radius (z.O,2)| & circle center $O$ radius =2 cm\\
-\Igfct{circle}{diameter(A,B)} & |C.OA = circle :diameter(z.A,z.B)| & circle diameter $[AB]$ \\
+\Igfct{circle}{new(O,A)} & |C.OA = circle : new (z.O,z.A)| & center $O$ through $A$; [\ref{ssub:method_imeth_circle_new}]\\
+\Igfct{circle}{radius(O,r)} & |C.OA = circle : radius (z.O,2)| & center $O$ radius =2 cm; [\ref{ssub:method_imeth_circle_radius}]\\
+\Igfct{circle}{diameter(A,B)} & |C.OA = circle :diameter(z.A,z.B)| & diameter $[AB]$; [\ref{ssub:method_imeth_circle_diameter}] \\
\midrule
\textbf{Points} &&\\
\midrule
-\Imeth{circle}{antipode (pt)} & |z.C = C.OA: antipode (z.B)| & $[BC]$ is a diameter \\
-\Imeth{circle}{inversion (pt)} & |z.Bp = C.AC: inversion (z.B)|&\\
-\Imeth{circle}{midarc (pt,pt)} & |z.D = C.AB: midarc (z.B,z.C)|& $D$ is the midarc of $\widearc{BC}$\\
-\Imeth{circle}{point (r)} & |z.E = C.AB: point (0.25)|& |r| between 0 and 1\\
+\Imeth{circle}{antipode (pt)} & |z.C = C.OA: antipode (z.B)| & $[BC]$ = diameter; [\ref{ssub:method_imeth_circle_antipode}] \\
+\Imeth{circle}{midarc (pt,pt)} & |z.D = C.AB: midarc (z.B,z.C)|& $D$ is the midarc of $\widearc{BC}$; [\ref{ssub:method_imeth_circle_midarc}]\\
+\Imeth{circle}{point (r)} & |z.E = C.AB: point (0.25)|& |r| between 0 and 1; [\ref{ssub:method_imeth_circle_point}]\\
\Imeth{circle}{random\_pt(lower, upper)} & &\\
-\Imeth{circle}{internal\_similitude (C)} & |z.I = C.one : internal_similitude (C.two)| &\\
-\Imeth{circle}{external\_similitude (C)} & |z.J = C.one : external_similitude (C.two)| & \\
-\Imeth{circle}{radical\_center (C1<,C2>)} & or only (C1) & Refer to \ref{sub:radical_center} \\
+\Imeth{circle}{inversion (obj)} & |z.Bp = C.AC: inversion (z.B)|& [\ref{ssub:inversion}]\\
+\Imeth{circle}{internal\_similitude (C)} & |z.I= C.one: internal_similitude(C.two)| & [\ref{ssub:method_imeth_circle_internal__similitude}]\\
+\Imeth{circle}{external\_similitude (C)} & |z.J= C.one: external_similitude(C.two)| & [\ref{ssub:method_imeth_circle_external__similitude}] \\
+\Imeth{circle}{radical\_center (C1<,C2>)} & or only (C1) & [\ref{ssub:radical_center} ] \\
\midrule
\textbf{Lines} & & \\
\midrule
-\Imeth{circle}{radical\_axis (C)} & Refer to ( \ref{sub:d_alembert_2} ; \ref{sub:radical_axis_v1} ; \ref{sub:radical_axis_v2} ; \ref{sub:radical_axis_v3} ; \ref{sub:radical_axis_v4})& \\
-\Imeth{circle}{tangent\_at (pt)} & |z.P = C.OA: tangent_at (z.M)| & Refer to (\ref{ssub:lemoine} ; \ref{ssub:example_combination_of_methods})\\
-\Imeth{circle}{tangent\_from (pt)}& |z.M,z.N = C.OA: tangent_from (z.P)| & Refer to (\ref{tangent_from})\\
-\Imeth{circle}{inversion (line)} & |L or C = C.AC: inversion (L.EF)|& Refer to (\ref{ssub:inversion_line})\\
-\Imeth{circle}{common\_tangent (C)} & |z.a,z.b = C.AC: common_tangent (C.EF)|& Refer to (\ref{sub:common_tangent} ; \ref{sub:common_tangent_orthogonality})\\
+\Imeth{circle}{radical\_axis (C)} & [ \ref{ssub:method_imeth_circle_radical__axis_c} ; \ref{sub:d_alembert_2} ] & \\
+\Imeth{circle}{tangent\_at (pt)} & |z.P=C.OA:tangent_at(z.M)| & [\ref{ssub:method_imeth_circle_tangent}] \\
+\Imeth{circle}{tangent\_from (pt)}& |z.M,z.N=C.OA: tangent_from (z.P)| & [\ref{ssub:method_imeth_circle_tangent} ] \\
+\Imeth{circle}{common\_tangent (C)}& |z.a,z.b = C.AC: common_tangent (C.EF)|& [\ref{ssub:common_tangent} ; \ref{sub:common_tangent_orthogonality}] \\
\midrule
\textbf{Circles}& &\\
\midrule
-\Imeth{circle}{orthogonal\_from (pt)} &|C=C.OA:orthogonal_from (z.P)| & Refer to (\ref{ssub:altshiller} ; \ref{sub:common_tangent_orthogonality} ; \ref{sub:orthogonal_circles_v1} ; \ref{sub:pencil_v1}) \\
-\Imeth{circle}{orthogonal\_through (pta,ptb)}&|C=C.OA:orthogonal_through (z.z1,z.z2)| & Refer to (\ref{sub:orthogonal_circle_through})\\
-\Imeth{circle}{inversion (...)} &|C.AC:inversion (pt, pts, L or C)|& Refer to \ref{ssub:inversion}, \ref{ssub:inversion_point}, \ref{ssub:inversion_line}, \ref{ssub:inversion_circle}\\
-\Imeth{circle}{midcircle (C)} & |C.inv = C.OA: midcircle (C.EF)| & Refer to \ref{ssub:midcircle} \\
-\Imeth{circle}{radical\_circle (C1<,C2>)} & or only (C1) & Refer to \ref{sub:radical_circle}\\
+\Imeth{circle}{orthogonal\_from (pt)} &|C=C.OA:orthogonal_from (z.P)| & [\ref{ssub:method_imeth_circle_orthogonal_from_pt} ;\ref{sub:altshiller} ; \ref{sub:pencil_v1}] \\
+\Imeth{circle}{orthogonal\_through(pta,ptb)}&|C=C.OA:orthogonal_through (z.z1,z.z2)| & [\ref{ssub:method_imeth_circle_orthogonal_through}]\\
+\Imeth{circle}{midcircle (C)} & |C.inv = C.OA: midcircle (C.EF)| & [\ref{ssub:midcircle}] \\
+\Imeth{circle}{radical\_circle (C1<,C2>)} & or only (C1) & [\ref{ssub:radical_circle}] \\
\midrule
\textbf{Miscellaneous} &&\\
\midrule
-\Imeth{circle}{power (pt)} &|p = C.OA: power (z.M)| & Refer to (\ref{sub:power_v1} ; \ref{sub:power_v2} ; \ref{sub:apollonius_circle_v1_with_inversion}) \\
-\Imeth{circle}{in\_out (pt)} & |C.OA : in_out (z.M)| & Refer to (\ref{sub:in_out_for_circle_and_disk}) \\
-\Imeth{circle}{in\_out\_disk (pt)} & |C.OA : in_out_disk (z.M)| & Refer to (\ref{sub:in_out_for_circle_and_disk}) \\
+\Imeth{circle}{power (pt)} &| r = C.OA: power (z.M)| & [\ref{par:power_v1} ; \ref{par:power_v2} ; \ref{sub:apollonius_circle_v1_with_inversion} ] \\
+\Imeth{circle}{in\_out (pt)} & |C.OA : in_out (z.M)| & [\ref{ssub:in_out_for_circle_and_disk}] \\
+\Imeth{circle}{in\_out\_disk (pt)} & |C.OA : in_out_disk (z.M)| & [\ref{ssub:in_out_for_circle_and_disk}] \\
\Imeth{circle}{draw ()} & for further use &\\
-\Imeth{circle}{circles\_position (C1)} & result = string &Refer to (\ref{sub:circles_position}) \\
+\Imeth{circle}{circles\_position (C1)} & result = string & [\ref{ssub:circles_position}] \\
\bottomrule
\end{tabular}
\egroup
% subsection methods_circle (end)
-\subsubsection{Altshiller} % (fold)
-\label{ssub:altshiller}
+\subsubsection{Method \Imeth{circle}{new}} % (fold)
+\label{ssub:method_imeth_circle_new}
+
+A circle is defined by its centre and a point through which it passes.
+\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- z.P = point : new (0,0)
- z.Q = point : new (5,0)
- z.I = point : new (3,2)
- C.QI = circle : new (z.Q,z.I)
- C.PE = C.QI : orthogonal_from (z.P)
- z.E = C.PE.through
- C.QE = circle : new (z.Q,z.E)
- _,z.F = intersection (C.PE,C.QE)
- z.A = C.PE: point (1/9)
- L.AE = line : new (z.A,z.E)
- _,z.C = intersection (L.AE,C.QE)
- L.AF = line : new (z.A,z.F)
- L.CQ = line : new (z.C,z.Q)
- z.D = intersection (L.AF,L.CQ)
+z.O = point: new (0,0)
+z.A = point: new (2,1)
+C = circle: new (z.O , z.A)
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(P,E Q,E)
- \tkzDrawLines[add=0 and 1](P,Q)
- \tkzDrawLines[add=0 and 2](A,E)
- \tkzDrawSegments(P,E E,F F,C A,F C,D)
- \tkzDrawPoints(P,Q,E,F,A,C,D)
- \tkzLabelPoints(P,Q,E,F,A,C,D)
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,O)
+\tkzLabelPoints[right](A,O)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
-\hspace*{\fill}
\begin{minipage}{.5\textwidth}
- \begin{tkzelements}
- scale =.5
- z.P = point : new (0,0)
- z.Q = point : new (5,0)
- z.I = point : new (3,2)
- C.QI = circle : new (z.Q,z.I)
- C.PE = C.QI : orthogonal_from (z.P)
- z.E = C.PE.through
- C.QE = circle : new (z.Q,z.E)
- _,z.F = intersection (C.PE,C.QE)
- z.A = C.PE: point (1/9)
- L.AE = line : new (z.A,z.E)
- _,z.C = intersection (L.AE,C.QE)
- L.AF = line : new (z.A,z.F)
- L.CQ = line : new (z.C,z.Q)
- z.D = intersection (L.AF,L.CQ)
- \end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(P,E Q,E)
- \tkzDrawLines[add=0 and 1](P,Q)
- \tkzDrawLines[add=0 and 2](A,E)
- \tkzDrawSegments(P,E E,F F,C A,F C,D)
- \tkzDrawPoints(P,Q,E,F,A,C,D)
- \tkzLabelPoints(P,Q,E,F,A,C,D)
- \end{tikzpicture}
+\begin{tkzelements}
+z.O = point: new (0,0)
+z.A = point: new (2,1)
+C = circle: new (z.O , z.A)
+\end{tkzelements}
+ \begin{center}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,O)
+\tkzLabelPoints[right](A,O)
+\end{tikzpicture}
+ \end{center}
+
\end{minipage}
-%subsubsection altshiller (end)
-\subsubsection{Lemoine} % (fold)
-\label{ssub:lemoine}
+% subsubsection method_imeth_circle_new (end)
+\subsubsection{Method \Imeth{circle}{radius}} % (fold)
+\label{ssub:method_imeth_circle_radius}
+
+
+We define a circle with its centre and radius.
+
+\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 1.25
- z.A = point: new (1,0)
- z.B = point: new (5,2)
- z.C = point: new (1.2,2)
- T = triangle: new(z.A,z.B,z.C)
- z.O = T.circumcenter
- C.OA = circle: new (z.O,z.A)
- L.tA = C.OA: tangent_at (z.A)
- L.tB = C.OA: tangent_at (z.B)
- L.tC = C.OA: tangent_at (z.C)
- z.P = intersection (L.tA,T.bc)
- z.Q = intersection (L.tB,T.ca)
- z.R = intersection (L.tC,T.ab)
+z.O = point: new (0,0)
+z.A = point: new (2,1)
+C = circle: radius (z.A , math.sqrt(5))
+z.T = C.through
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon[teal](A,B,C)
- \tkzDrawCircle(O,A)
- \tkzDrawPoints(A,B,C,P,Q,R)
- \tkzLabelPoints(A,B,C,P,Q,R)
- \tkzDrawLine[blue](Q,R)
- \tkzDrawLines[red](A,P B,Q R,C)
- \tkzDrawSegments(A,R C,P C,Q)
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(A,T)
+\tkzDrawPoints(A,O,T)
+\tkzLabelPoints[right](A,O,T)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.O = point: new (0,0)
+ z.A = point: new (2,1)
+ C = circle: radius (z.A , math.sqrt(5))
+ z.T = C.through
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawCircles(A,T)
+ \tkzDrawPoints(A,O,T)
+ \tkzLabelPoints[right](A,O,T)
+ \end{tikzpicture}
+ \end{center}
+\end{minipage}
+% subsubsection method_imeth_circle_radius (end)
+
+\subsubsection{Method \Imeth{circle}{diameter}} % (fold)
+\label{ssub:method_imeth_circle_diameter}
+
+A circle is defined by two points at the ends of one of its diameters.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.B = point: new (2,1)
+C = circle: diameter (z.A , z.B)
+z.O = C.center
+z.T = C.through
+\end{tkzelements}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,T)
+\tkzDrawPoints(A,B,O,T)
+\tkzLabelPoints[right](A,B,O,T)
\end{tikzpicture}
\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.B = point: new (2,1)
+C = circle: diameter (z.A , z.B)
+z.O = C.center
+z.T = C.through
+\end{tkzelements}
+ \begin{center}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,T)
+\tkzDrawPoints(A,B,O,T)
+\tkzLabelPoints[right](A,B,O,T)
+\end{tikzpicture}
+ \end{center}
+\end{minipage}
+% subsubsection method_imeth_circle_diameter (end)
+\subsubsection{Method \Imeth{circle}{antipode}} % (fold)
+\label{ssub:method_imeth_circle_antipode}
+This method is used to define a point that is diametrically opposed to a point on a given circle.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.O = point: new (2,1)
+C = circle: new (z.O , z.A)
+z.B = C : antipode (z.A)
+\end{tkzelements}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,B,O)
+\tkzLabelPoints[right](A,B,O)
+\end{tikzpicture}
+\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\begin{tkzelements}
-scale = .75
-z.A = point: new (1,0)
-z.B = point: new (5,2)
-z.C = point: new (1.2,2)
-T = triangle: new(z.A,z.B,z.C)
-z.O = T.circumcenter
-C.OA = circle: new (z.O,z.A)
-L.tA = C.OA: tangent_at (z.A)
-L.tB = C.OA: tangent_at (z.B)
-L.tC = C.OA: tangent_at (z.C)
-z.R = intersection (L.tC,T.ab)
-z.P = intersection (L.tA,T.bc)
-z.Q = intersection (L.tB,T.ca)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[rotate=90]
-\tkzGetNodes
-\tkzDrawPolygon[teal](A,B,C)
+z.A = point: new (0,0)
+z.O = point: new (2,1)
+C = circle: new (z.O , z.A)
+z.B = C : antipode (z.A)
+\end{tkzelements}
+ \begin{center}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,B,O)
+\tkzLabelPoints[right](A,B,O)
+\end{tikzpicture}
+ \end{center}
+\end{minipage}
+
+
+% subsubsection method_imeth_circle_antipode (end)
+
+\subsubsection{Method \Imeth{circle}{midarc}} % (fold)
+\label{ssub:method_imeth_circle_midarc}
+The definition given in [ \href{https://mathworld.wolfram.com/Mid-ArcPoints.html}{Weisstein, Eric W. "Mid-Arc Points." From MathWorld--A Wolfram Web Resource.}] is as follows:
+The mid-arc points of a triangle as defined by Johnson (1929) are the points on the circumcircle of the triangle which lie half-way along each of the three arcs determined by the vertices. These points arise in the definition of the Fuhrmann circle and Fuhrmann triangle, and lie on the extensions of the perpendicular bisectors of the triangle sides drawn from the circumcenter.
+
+The definition I use here is more general: the defined point is simply the point that divides an arc into two arcs of the same length.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.O = point: new (2,1)
+C = circle: new (z.O , z.A)
+z.B = C : point (0.25)
+z.M = C : midarc (z.A,z.B)
+\end{tkzelements}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,B,O,M)
+\tkzLabelPoints[right](A,B,O,M)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.O = point: new (2,1)
+C = circle: new (z.O , z.A)
+z.B = C : point (0.25)
+z.M = C : midarc (z.A,z.B)
+\end{tkzelements}
+ \begin{center}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(O,A)
+\tkzDrawPoints(A,B,O,M)
+\tkzLabelPoints[right](A,B,O,M)
+\end{tikzpicture}
+ \end{center}
+\end{minipage}
+
+% subsubsection method_imeth_circle_midarc (end)
+
+\subsubsection{Method \Imeth{circle}{point (r)}} % (fold)
+\label{ssub:method_imeth_circle_point}
+
+Let $C$ be a circle with centre $O$ and passing through $A$ such that |z.A = C.through|. This method defines a point $M$ on the circle from A such that the ratio of the length of $\widearc{AM}$ to the circumference of the circle is equal to $r$.
+
+In the next example, $r=\dfrac{1}{6}$ corresponds to $\dfrac{\pi/3}{2\pi}$, so the angle $\widehat{AOE}$ has the measure $\pi/3$.
+
+If $r=.5$ the defined point is diametrically opposed to $A$, the angle $\widehat{AOD}$ has the measure $\pi$.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+ \begin{tkzelements}
+ z.O = point: new (0,0)
+ z.A = point: new (1,2)
+ C.OA = circle: new (z.O,z.A)
+ z.B = C.OA: point (1/6)
+ z.C = C.OA: point (0.25)
+ z.D = C.OA: point (0.5)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
\tkzDrawCircle(O,A)
-\tkzDrawPoints(A,B,C,P,Q,R)
-\tkzLabelPoints(A,B,C,P,Q,R)
-\tkzDrawLine[blue](Q,R)
-\tkzDrawLines[red](A,P B,Q R,C)
-\tkzDrawSegments(A,R C,P C,Q)
+\tkzDrawPoints(A,...,D,O)
+\tkzLabelPoints(A,...,D,O)
\end{tikzpicture}
+\end{Verbatim}
\end{minipage}
-%\caption{Lemoine line}
-% subsubsection lemoine (end)
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.O = point: new (0,0)
+ z.A = point: new (1,2)
+ C.OA = circle: new (z.O,z.A)
+ z.B = C.OA: point (1/6)
+ z.C = C.OA: point (0.25)
+ z.D = C.OA: point (0.5)
+\end{tkzelements}
+\begin{center}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircle(O,A)
+\tkzDrawPoints(A,...,D,O)
+\tkzLabelPoints(A,...,D,O)
+\end{tikzpicture}
+\end{center}
+\end{minipage}
-\subsubsection{Inversion: point, line and circle} % (fold)
+
+% subsubsection method_imeth_circle_point (end)
+
+\subsubsection{Method \Imeth{circle}{inversion (obj)}: point, line and circle} % (fold)
\label{ssub:inversion}
The \code{inversion} method can be used on a point, a line or a circle. Depending on the type of object, the function determines the correct algorithm to use.
-\subsubsection{Inversion: point} % (fold)
-\label{ssub:inversion_point}
+\paragraph{Inversion: point} % (fold)
+\label{par:inversion_point}
The \code{inversion} method can be used on a point, a group of points, a line or a circle. Depending on the type of object, the function determines the correct algorithm to use.
@@ -308,20 +438,23 @@ The \code{inversion} method can be used on a point, a group of points, a line or
z.d = C.oa: inversion (z.c)
p = C.oa: power (z.c)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(o,a)
- \tkzDrawSegments(o,a o,c)
- \tkzDrawPoints(a,o,c,d)
- \tkzLabelPoints(a,o,c,d)
- \tkzLabelSegment[sloped,above=1em](c,d){%
- La puissance de c est \tkzUseLua{p}}
- \end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(o,a)
+ \tkzDrawSegments(o,a o,c)
+ \tkzDrawPoints(a,o,c,d)
+ \tkzLabelPoints(a,o,c,d)
+ \tkzLabelSegment[sloped,above=1em](c,d){%
+ La puissance de c est \tkzUseLua{p}}
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
-\subsubsection{Inversion: line} % (fold)
-\label{ssub:inversion_line}
+\paragraph{Inversion: line} % (fold)
+\label{par:inversion_line}
The result is either a straight line or a circle.
@@ -333,7 +466,7 @@ The result is either a straight line or a circle.
C.oa = circle: new (z.o,z.a)
z.c = point: new (3,2)
z.d = point: new (0,4)
- L.cd = line: new (z.c,z.d)
+ L.cd = line: new (z.c,z.d)
C.OH = C.oa: inversion (L.cd)
z.O,z.H = get_points(C.OH)
\end{tkzelements}
@@ -357,19 +490,22 @@ The result is either a straight line or a circle.
C.OH = C.oa: inversion (L.cd)
z.O,z.H = get_points(C.OH)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(o,a)
- \tkzDrawCircles[new](O,H)
- \tkzDrawLines(c,d o,H)
- \tkzDrawPoints(a,o,c,d,H)
- \tkzLabelPoints(a,o,c,d,H)
- \end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(o,a)
+ \tkzDrawCircles[new](O,H)
+ \tkzDrawLines(c,d o,H)
+ \tkzDrawPoints(a,o,c,d,H)
+ \tkzLabelPoints(a,o,c,d,H)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
- \subsubsection{Inversion: circle} % (fold)
- \label{ssub:inversion_circle}
+\paragraph{Inversion: circle} % (fold)
+ \label{par:inversion_circle}
The result is either a straight line or a circle.
@@ -423,19 +559,697 @@ color = "orange"
else z.f,z.b = get_points(obj) end
color = "orange"
\end{tkzelements}
- \hspace{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles[black](o,a)
- \tkzDrawCircles[teal](c,o e,d)
- \tkzDrawCircles[\tkzUseLua{color}](f,b)
- \tkzDrawLines[\tkzUseLua{color}](p,q)
- \tkzDrawPoints(a,...,f,o,p,q)
- \tkzLabelPoints(a,...,f,o,p,q)
- \end{tikzpicture}
+
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[black](o,a)
+ \tkzDrawCircles[teal](c,o e,d)
+ \tkzDrawCircles[\tkzUseLua{color}](f,b)
+ \tkzDrawLines[\tkzUseLua{color}](p,q)
+ \tkzDrawPoints(a,...,f,o,p,q)
+ \tkzLabelPoints(a,...,f,o,p,q)
+ \end{tikzpicture}
+ \end{center}
\end{minipage}
+
% subsubsection inversion (end)
+\subsubsection{Method \Imeth{circle}{internal\_similitude}} % (fold)
+\label{ssub:method_imeth_circle_internal__similitude}
+
+Circles are geometrically similar to one another and mirror symmetric. Hence, a pair of circles has both types of homothetic centers, internal and external, unless the centers are equal or the radii are equal; these exceptional cases are treated after general position. These two homothetic centers lie on the line joining the centers of the two given circles, which is called the line of centers. Circles with radius zero can also be included (see exceptional cases), and negative radius can also be used, switching external and internal. [Wikipedia]
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 0.75
+z.A = point : new ( 0 , 0 )
+z.a = point : new ( 2 , 2 )
+z.B = point : new ( 5 , 2 )
+z.b = point : new ( 6 , 1 )
+C.Aa = circle : new (z.A,z.a)
+C.Bb = circle : new (z.B,z.b)
+z.I = C.Aa : internal_similitude (C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+z.A1 = L.TA1.pb
+z.A2 = L.TA2.pb
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(A,a B,b)
+\tkzDrawPoints(A,a,B,b,I,A1,A2)
+\tkzDrawLines[add = 1 and 2](A1,I A2,I)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .75
+z.A = point : new ( 0 , 0 )
+z.a = point : new ( 2 , 2 )
+z.B = point : new ( 5 , 2 )
+z.b = point : new ( 6 , 1 )
+C.Aa = circle : new (z.A,z.a)
+C.Bb = circle : new (z.B,z.b)
+z.I = C.Aa : internal_similitude (C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+z.A1 = L.TA1.pb
+z.A2 = L.TA2.pb
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,a B,b)
+ \tkzDrawPoints(A,a,B,b,I,A1,A2)
+ \tkzDrawLines[add = 1 and 2](A1,I A2,I)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+% subsubsection method_imeth_circle_internal__similitude (end)
+
+\subsubsection{Method \Imeth{circle}{external\_similitude}} % (fold)
+\label{ssub:method_imeth_circle_external__similitude}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.a = point : new ( 2 , 2 )
+z.B = point : new ( 3 , 2 )
+z.b = point : new ( 4 , 1 )
+C.Aa = circle : new (z.A,z.a)
+C.Bb = circle : new (z.B,z.b)
+z.I = C.Aa : external_similitude (C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+z.A1 = L.TA1.pb
+z.A2 = L.TA2.pb
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(A,a B,b)
+\tkzDrawPoints(A,a,B,b,I,A1,A2)
+\tkzDrawLines[add = .5 and .2](A1,I A2,I)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .75
+z.A = point : new ( 0 , 0 )
+z.a = point : new ( 2 , 2 )
+z.B = point : new ( 3 , 2 )
+z.b = point : new ( 4 , 1 )
+C.Aa = circle : new (z.A,z.a)
+C.Bb = circle : new (z.B,z.b)
+z.I = C.Aa : external_similitude (C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+z.A1 = L.TA1.pb
+z.A2 = L.TA2.pb
+\end{tkzelements}
+\begin{center}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(A,a B,b)
+\tkzDrawPoints(A,a,B,b,I,A1,A2)
+\tkzDrawLines[add = .5 and .2](A1,I A2,I)
+\end{tikzpicture}
+\end{center}
+\end{minipage}
+% subsubsection method_imeth_circle_external__similitude (end)
+
+
+\subsubsection{Method \Imeth{circle}{radical\_center (C1,C2)}} % (fold)
+\label{ssub:radical_center}
+
+The radical lines of three circles are concurrent in a point known as the radical center (also called the power center). This theorem was originally demonstrated by Monge (Dörrie 1965, p. 153). [\href{https://mathworld.wolfram.com/RadicalCenter.html}{Weisstein, Eric W. "Radical Center." From MathWorld--A Wolfram Web Resource. }
+]
+
+Here I have also named \code{radical\_center} the point of intersection of the radical axis of two circles with the centre axis. See the following example for how to obtain point $H$.
+
+
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{Verbatim}
+\begin{tkzelements}
+ z.O = point : new (0,0)
+ z.x = point : new (1,0)
+ z.y = point : new (4,0)
+ z.z = point : new (2,0)
+ z.Op = point : new (4,2)
+ z.P = point : new (2,2.5)
+ C.Ox = circle : new (z.O,z.x)
+ C.Pz = circle : new (z.P,z.z)
+ C.Opy = circle : new (z.Op,z.y)
+ z.ap,z.a = intersection (C.Ox,C.Pz)
+ z.bp,z.b = intersection (C.Opy,C.Pz)
+ L.aap = line : new (z.a,z.ap)
+ L.bbp = line : new (z.b,z.bp)
+ -- z.X = intersection (L.aap,L.bbp)
+ z.X = C.Ox : radical_center(C.Pz,C.Opy)
+ -- L.OOp = line : new (z.O,z.Op)
+ -- z.H = L.OOp : projection (z.X)
+ z.H = C.Ox : radical_center(C.Opy)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,a O',b P,z)
+ \tkzDrawLines[red](a,X b',X H,X O,O')
+ \tkzDrawPoints(O,O',P,a,a',b,b',X,H)
+ \tkzLabelPoints[below right](O,O',P,H)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{tkzelements}
+z.O = point : new (0,0)
+z.x = point : new (1,0)
+z.y = point : new (4,0)
+z.z = point : new (2,0)
+z.Op = point : new (4,2)
+z.P = point : new (2,2.5)
+C.Ox = circle : new (z.O,z.x)
+C.Pz = circle : new (z.P,z.z)
+C.Opy = circle : new (z.Op,z.y)
+z.ap,z.a = intersection (C.Ox,C.Pz)
+z.bp,z.b = intersection (C.Opy,C.Pz)
+L.aap = line : new (z.a,z.ap)
+L.bbp = line : new (z.b,z.bp)
+z.X = intersection (L.aap,L.bbp)
+L.OOp = line : new (z.O,z.Op)
+z.H = L.OOp : projection (z.X)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,a O',b P,z)
+ \tkzDrawLines[red](a,X b',X H,X O,O')
+ \tkzDrawPoints(O,O',P,a,a',b,b',X,H)
+ \tkzLabelPoints[below right](O,O',P,H)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection radical_center (end)
+
+\subsubsection{Method \Imeth{circle}{radical\_axis}(C)} % (fold)
+\label{ssub:method_imeth_circle_radical__axis_c}
+
+The radical line, also called the radical axis, is the locus of points of equal circle power with respect to two nonconcentric circles. By the chordal theorem, it is perpendicular to the line of centers (Dörrie 1965). [\href{https://mathworld.wolfram.com/RadicalLine.html}{Weisstein, Eric W. "Radical Line." From MathWorld--A Wolfram Web Resource.} ]
+
+\vspace{6pt}
+\paragraph{Radical axis v1} % (fold)
+\label{par:radical_axis_v1}
+
+\begin{Verbatim}
+\begin{tkzelements}
+scale = .75
+z.X = point : new (0,0)
+z.B = point : new (2,2)
+z.Y = point : new (7,1)
+z.Ap = point : new (8,-1)
+L.XY = line : new (z.X,z.Y)
+C.XB = circle : new (z.X,z.B)
+C.YAp = circle : new (z.Y,z.Ap)
+z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
+z.A = C.XB : point (0.4)
+T.ABAp = triangle: new (z.A,z.B,z.Ap)
+z.O = T.ABAp.circumcenter
+C.OAp = circle : new (z.O,z.Ap)
+_,z.Bp = intersection (C.OAp,C.YAp)
+L.AB = line : new (z.A,z.B)
+L.ApBp = line : new (z.Ap,z.Bp)
+z.M = intersection (L.AB,L.ApBp)
+z.H = L.XY : projection (z.M)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(X,B Y,A')
+ \tkzDrawArc[dashed,delta=30](O,A')(A)
+ \tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F)
+ \tkzDrawLines[red](A,M A',M X,Y E,F)
+ \tkzDrawLines[red,add=1 and 3](M,H)
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+scale = .75
+z.X = point : new (0,0)
+z.B = point : new (2,2)
+z.Y = point : new (7,1)
+z.Ap = point : new (8,-1)
+L.XY = line : new (z.X,z.Y)
+C.XB = circle : new (z.X,z.B)
+C.YAp = circle : new (z.Y,z.Ap)
+z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
+z.A = C.XB : point (0.4)
+T.ABAp = triangle: new (z.A,z.B,z.Ap)
+z.O = T.ABAp.circumcenter
+C.OAp = circle : new (z.O,z.Ap)
+_,z.Bp = intersection (C.OAp,C.YAp)
+L.AB = line : new (z.A,z.B)
+L.ApBp = line : new (z.Ap,z.Bp)
+z.M = intersection (L.AB,L.ApBp)
+z.H = L.XY : projection (z.M)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(X,B Y,A')
+ \tkzDrawArc[dashed,delta=30](O,A')(A)
+ \tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F)
+ \tkzDrawLines[red](A,M A',M X,Y E,F)
+ \tkzDrawLines[red,add=1 and 3](M,H)
+ \end{tikzpicture}
+\end{center}
+% paragraph radical_axis_v1 (end)
+
+\paragraph{Radical axis v2} % (fold)
+\label{par:radical_axis_v2}
+
+\begin{Verbatim}
+\begin{tkzelements}
+scale = 1.25
+z.O = point : new (-1,0)
+z.Op = point : new (4,-1)
+z.B = point : new (0,2)
+z.D = point : new (4,0)
+C.OB = circle : new (z.O,z.B)
+C.OpD = circle : new (z.Op,z.D)
+L.EF = C.OB : radical_axis (C.OpD)
+z.E,z.F = get_points (L.EF)
+z.M = L.EF : point (.75)
+L.MT,L.MTp = C.OB : tangent_from (z.M)
+_,z.T = get_points (L.MT)
+_,z.Tp = get_points (L.MTp)
+L.MK,L.MKp = C.OpD : tangent_from (z.M)
+_,z.K = get_points (L.MK)
+_,z.Kp = get_points (L.MKp)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',D)
+ \tkzDrawLine(E,F)
+ \tkzDrawLine[add=.5 and .5](O,O')
+ \tkzDrawLines[add = 0 and .5](M,T M,T' M,K M,K')
+ \tkzDrawCircle(M,T)
+ \tkzDrawPoints(O,O',T,M,T',K,K')
+ \tkzLabelPoints(O,O',T,T',K,K',M)
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+scale =1.25
+z.O = point : new (-1,0)
+z.Op = point : new (4,-1)
+z.B = point : new (0,2)
+z.D = point : new (4,0)
+C.OB = circle : new (z.O,z.B)
+C.OpD = circle : new (z.Op,z.D)
+L.EF = C.OB : radical_axis (C.OpD)
+z.E,z.F = get_points (L.EF)
+z.M = L.EF : point (.75)
+L.MT,L.MTp = C.OB : tangent_from (z.M)
+_,z.T = get_points (L.MT)
+_,z.Tp = get_points (L.MTp)
+L.MK,L.MKp = C.OpD : tangent_from (z.M)
+_,z.K = get_points (L.MK)
+_,z.Kp = get_points (L.MKp)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',D)
+ \tkzDrawLine(E,F)
+ \tkzDrawLine[add=.5 and .5](O,O')
+ \tkzDrawLines[add = 0 and .5](M,T M,T' M,K M,K')
+ \tkzDrawCircle(M,T)
+ \tkzDrawPoints(O,O',T,M,T',K,K')
+ \tkzLabelPoints(O,O',T,T',K,K',M)
+ \end{tikzpicture}
+\end{center}
+% paragraph radical_axis_v2 (end)
+
+\paragraph{Radical axis v3} % (fold)
+\label{par:radical_axis_v3}
+
+\begin{Verbatim}
+ \begin{tkzelements}
+ z.O = point : new (0,0)
+ z.B = point : new (4,0)
+ z.Op = point : new (6,0)
+ C.OB = circle : new (z.O,z.B)
+ C.OpB = circle : new (z.Op,z.B)
+ L.EF = C.OB : radical_axis (C.OpB)
+ z.E,z.F = get_points(L.EF)
+ z.M = L.EF : point (0.2)
+ L = C.OB : tangent_from (z.M)
+ _,z.T = get_points (L)
+ L = C.OpB : tangent_from (z.M)
+ _,z.Tp = get_points (L)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',B)
+ \tkzDrawSegments(M,T M,T')
+ \tkzDrawSegments(E,F)
+ \tkzDrawLine[add=.5 and .5](O,O')
+ \tkzDrawPoints(O,B,O',E,F,M,T,T')
+ \tkzLabelPoints(O,O',B,E,F,T,T')
+ \tkzDrawArc(M,T')(T)
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+z.O = point : new (0,0)
+z.B = point : new (4,0)
+z.Op = point : new (6,0)
+C.OB = circle : new (z.O,z.B)
+C.OpB = circle : new (z.Op,z.B)
+L.EF = C.OB : radical_axis (C.OpB)
+z.E,z.F = get_points(L.EF)
+z.M = L.EF : point (0.2)
+L = C.OB : tangent_from (z.M)
+_,z.T = get_points (L)
+L = C.OpB : tangent_from (z.M)
+_,z.Tp = get_points (L)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',B)
+ \tkzDrawSegments(M,T M,T')
+ \tkzDrawSegments(E,F)
+ \tkzDrawLine[add=.5 and .5](O,O')
+ \tkzDrawPoints(O,B,O',E,F,M,T,T')
+ \tkzLabelPoints(O,O',B,E,F,T,T')
+ \tkzDrawArc(M,T')(T)
+ \end{tikzpicture}
+\end{center}
+% paragraph radical_axis_v3 (end)
+
+\paragraph{Radical axis v4} % (fold)
+\label{par:radical_axis_v4}
+
+\begin{Verbatim}
+\begin{tkzelements}
+ z.O = point : new (0,0)
+ z.B = point : new (5,0)
+ z.Op = point : new (3,0)
+ C.OB = circle : new (z.O,z.B)
+ C.OpB = circle : new (z.Op,z.B)
+ L.EF = C.OB : radical_axis (C.OpB)
+ z.E,z.F = get_points(L.EF)
+ z.H = L.EF.mid
+ z.M = L.EF : point (.8)
+ _,L = C.OB : tangent_from (z.M)
+ _,z.T = get_points (L)
+ _,L = C.OpB : tangent_from (z.M)
+ _,z.Tp = get_points (L)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',B)
+ \tkzDrawSegments(M,T M,T')
+ \tkzDrawSegments(E,F)
+ \tkzDrawLine[add=.3 and .3](O,H)
+ \tkzDrawPoints(O,O',B,E,H,M)
+ \tkzLabelPoints[below right](O,O',E,F,M,T,T')
+ \tkzDrawArc(M,B)(T)
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+ z.O = point : new (0,0)
+ z.B = point : new (5,0)
+ z.Op = point : new (3,0)
+ C.OB = circle : new (z.O,z.B)
+ C.OpB = circle : new (z.Op,z.B)
+ L.EF = C.OB : radical_axis (C.OpB)
+ z.E,z.F = get_points(L.EF)
+ z.H = L.EF.mid
+ z.M = L.EF : point (.8)
+ _,L = C.OB : tangent_from (z.M)
+ _,z.T = get_points (L)
+ _,L = C.OpB : tangent_from (z.M)
+ _,z.Tp = get_points (L)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',B)
+ \tkzDrawSegments(M,T M,T')
+ \tkzDrawSegments(E,F)
+ \tkzDrawLine[add=.3 and .3](O,H)
+ \tkzDrawPoints(O,O',B,E,H,M)
+ \tkzLabelPoints[below right](O,O',E,F,M,T,T')
+ \tkzDrawArc(M,B)(T)
+ \end{tikzpicture}
+\end{center}
+% paragraph radical_axis_v4 (end)
+
+% subsubsection method_imeth_circle_radical__axis_c (end)
+
+
+\subsubsection{Methods \Imeth{circle}{tangent\_at (P)} and \Imeth{circle}{tangent\_from (P)}} % (fold)
+\label{ssub:method_imeth_circle_tangent}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+ \begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (1,2)
+ C.AB = circle: new (z.A,z.B)
+ z.C = point: new (3,-2)
+ L.T = C.AB : tangent_at (z.B)
+ z.D = L.T.pb
+ L.T1,L.T2 = C.AB : tangent_from (z.C)
+ z.T1 = L.T1.pb
+ z.T2 = L.T2.pb
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircle(A,B)
+\tkzDrawLines[add =.5 and .5](B,D C,T1 C,T2)
+\tkzDrawSegments[dashed](A,B A,T1 A,T2)
+\tkzDrawPoints(A,...,D,T1,T2)
+\tkzLabelPoints[below left](A,T2,C)
+\tkzLabelPoints[above right](B,T1,D)
+\tkzMarkRightAngles(A,B,D A,T1,C A,T2,C)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (1,2)
+ C.AB = circle: new (z.A,z.B)
+ z.C = point: new (3,-2)
+ L.T = C.AB : tangent_at (z.B)
+ z.D = L.T.pb
+ L.T1,L.T2 = C.AB : tangent_from (z.C)
+ z.T1 = L.T1.pb
+ z.T2 = L.T2.pb
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(A,B)
+ \tkzDrawLines[add =.5 and .5](B,D C,T1 C,T2)
+ \tkzDrawSegments[dashed](A,B A,T1 A,T2)
+ \tkzDrawPoints(A,...,D,T1,T2)
+ \tkzLabelPoints[below left](A,T2,C)
+ \tkzLabelPoints[above right](B,T1,D)
+ \tkzMarkRightAngles(A,B,D A,T1,C A,T2,C)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection (end)
+
+\subsubsection{Common tangent: Angle of two intersecting circles} % (fold)
+\label{ssub:common_tangent}
+
+Let be a tangent common to both circles at $T$ and $T'$ (closest to $C$). Let a secant parallel to this tangent pass through $C$. Then the segment $[TT']$ is seen from the other common point $D$ at an angle equal to half the angle of the two circles.
+
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 5 , 2 )
+ L.AB = line : new ( z.A , z.B )
+ z.C = point : new ( 1 , 2 )
+ C.AC = circle : new (z.A,z.C)
+ C.BC = circle : new (z.B,z.C)
+ z.T,z.Tp = C.AC : common_tangent (C.BC)
+ L.TTp = line : new (z.T,z.Tp)
+ z.M = C.AC : point (0.45)
+ L.MC =line : new (z.M,z.C)
+ z.Mp = intersection (L.MC, C.BC)
+ L.mm = L.TTp : ll_from (z.C)
+ _,z.M = intersection (L.mm, C.AC)
+ z.Mp = intersection (L.mm, C.BC)
+ _,z.D = intersection (C.AC,C.BC)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,C B,C)
+ \tkzDrawSegments(M,M' A,D B,D A,B C,D T,C T',C)
+ \tkzDrawSegments[gray](D,M D,M' T,T' D,T D,T')
+ \tkzDrawPoints(A,B,C,D,M,M',T,T')
+ \tkzLabelPoints(A,B,D,M)
+ \tkzLabelPoints[above](C,M',T,T')
+ \tkzMarkAngles[mark=|,size=.75](T,C,M C,T,T' C,D,T T,D,M)
+ \tkzMarkAngles[mark=||,size=.75](M',C,T' T,T',C T',D,C M',D,T')
+\end{tikzpicture}
+\end{Verbatim}
+
+
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 5 , 2 )
+L.AB = line : new ( z.A , z.B )
+z.C = point : new ( 1 , 2 )
+C.AC = circle : new (z.A,z.C)
+C.BC = circle : new (z.B,z.C)
+z.T,z.Tp = C.AC : common_tangent (C.BC)
+L.TTp = line : new (z.T,z.Tp)
+z.M = C.AC : point (0.45)
+L.MC =line : new (z.M,z.C)
+z.Mp = intersection (L.MC, C.BC)
+L.mm = L.TTp : ll_from (z.C)
+_,z.M = intersection (L.mm, C.AC)
+z.Mp = intersection (L.mm, C.BC)
+_,z.D = intersection (C.AC,C.BC)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,C B,C)
+ \tkzDrawSegments(M,M' A,D B,D A,B C,D T,C T',C)
+ \tkzDrawSegments[gray](D,M D,M' T,T' D,T D,T')
+ \tkzDrawPoints(A,B,C,D,M,M',T,T')
+ \tkzLabelPoints(A,B,D,M)
+ \tkzLabelPoints[above](C,M',T,T')
+ \tkzMarkAngles[mark=|,size=.75](T,C,M C,T,T' C,D,T T,D,M)
+ \tkzMarkAngles[mark=||,size=.75](M',C,T' T,T',C T',D,C M',D,T')
+ \end{tikzpicture}
+\end{center}
+% subsubsection common_tangent (end)
+
+\subsubsection{Method \Imeth{circle}{orthogonal\_from (pt)}} % (fold)
+\label{ssub:method_imeth_circle_orthogonal_from_pt}
+
+In geometry, two circles are said to be orthogonal if their respective tangent lines at the points of intersection are perpendicular (meet at a right angle). [wikipedia]
+
+This method determines a circle with a given centre, orthogonal to a circle that is also given.
+
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .6
+ z.C_1 = point: new (0,0)
+ z.C_2 = point: new (8,0)
+ z.A = point: new (5,0)
+ C = circle: new (z.C_1,z.A)
+ z.S,z.T = get_points (C: orthogonal_from (z.C_2))
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(C_1,T C_2,T)
+ \tkzDrawSegments(C_1,T C_2,T)
+ \tkzDrawLine(C_1,C_2)
+ \tkzMarkRightAngle[fill=teal,%
+ opacity=.2,size=1](C_1,T,C_2)
+ \tkzDrawPoints(C_1,C_2,T)
+ \tkzLabelPoints(C_1,C_2)
+ \tkzLabelPoints[above](T)
+ \tkzLabelSegment[left](C_1,T){r}
+ \tkzLabelSegments[right](C_2,T){$\gamma$}
+ \tkzLabelSegment[below](C_1,C_2){d}
+ \tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1}
+ \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2}
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+scale = .6
+z.C_1 = point: new (0,0)
+z.C_2 = point: new (8,0)
+z.A = point: new (5,0)
+C = circle: new (z.C_1,z.A)
+z.S,z.T = get_points (C: orthogonal_from (z.C_2))
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(C_1,T C_2,T)
+ \tkzDrawSegments(C_1,T C_2,T)
+ \tkzDrawLine(C_1,C_2)
+ \tkzMarkRightAngle[fill=teal,opacity=.2,size=.5](C_1,T,C_2)
+ \tkzDrawPoints(C_1,C_2,T)
+ \tkzLabelPoints(C_1,C_2)
+ \tkzLabelPoints[above](T)
+ \tkzLabelSegment[left](C_1,T){r}
+ \tkzLabelSegments[right](C_2,T){$\gamma$}
+ \tkzLabelSegment[below](C_1,C_2){d}
+ \tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1}
+ \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2}
+ \end{tikzpicture}
+\end{center}
+
+% subsubsection method_imeth_circle_orthogonal__from_pt (end)
+
+\subsubsection{Method \Imeth{circle}{orthogonal\_through}} % (fold)
+\label{ssub:method_imeth_circle_orthogonal_through}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.O = point: new (0,1)
+ z.A = point: new (1,0)
+ z.z1 = point: new (-1.5,-1.5)
+ z.z2 = point: new (2.5,-1.25)
+ C.OA = circle: new (z.O,z.A)
+ C = C.OA: orthogonal_through (z.z1,z.z2)
+ z.c = C.center
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzDrawCircle[new](c,z1)
+ \tkzDrawPoints[new](O,A,z1,z2,c)
+ \tkzLabelPoints[right](O,A,z1,z2,c)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}\begin{tkzelements}
+ z.O = point: new (0,1)
+ z.A = point: new (1,0)
+ z.z1 = point: new (-1.5,-1.5)
+ z.z2 = point: new (2.5,-1.25)
+ C.OA = circle: new (z.O,z.A)
+ C = C.OA: orthogonal_through (z.z1,z.z2)
+ z.c = C.center
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzDrawCircle[orange](c,z1)
+ \tkzDrawPoints[orange](O,A,z1,z2,c)
+ \tkzLabelPoints[right](O,A,z1,z2,c)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+% subsubsection method_imeth_circle_orthogonal__through (end)
+
\subsubsection{midcircle} % (fold)
\label{ssub:midcircle}
@@ -473,8 +1287,8 @@ z.H = C.AO.north
z.F = C.BP.north
z.G = C.BP.south
C.IT,C.JV = C.AO : midcircle (C.BP)
-z.I,z.T = get_points ( C.IT )
-z.J,z.V = get_points ( C.JV )
+z.I,z.T = get_points (C.IT)
+z.J,z.V = get_points (C.JV)
z.X,z.Y = intersection (C.AO,C.BP)
\end{tkzelements}
\end{Verbatim}
@@ -493,8 +1307,8 @@ z.X,z.Y = intersection (C.AO,C.BP)
z.F = C.BP.north
z.G = C.BP.south
C.IT,C.JV = C.AO : midcircle (C.BP)
- z.I,z.T = get_points ( C.IT )
- z.J,z.V = get_points ( C.JV )
+ z.I,z.T = get_points (C.IT)
+ z.J,z.V = get_points (C.JV)
z.X,z.Y = intersection (C.AO,C.BP)
\end{tkzelements}
\begin{tikzpicture}
@@ -520,7 +1334,7 @@ z.X,z.Y = intersection (C.AO,C.BP)
\vfill
\item One given circle is in the interior of the other given circle.
-
+\label{midcircle_diameter}
\begin{minipage}{.6\textwidth}
\begin{Verbatim}
\begin{tkzelements}
@@ -539,7 +1353,7 @@ z.X,z.Y = intersection (C.AO,C.BP)
z.x = C.SV.center
z.y = C.UR.center
C.IT = C.AO : midcircle (C.BP)
- z.I,z.T = get_points ( C.IT )
+ z.I,z.T = get_points (C.IT)
\end{tkzelements}
\end{Verbatim}
\end{minipage}
@@ -560,7 +1374,7 @@ z.X,z.Y = intersection (C.AO,C.BP)
z.x = C.SV.center
z.y = C.UR.center
C.IT = C.AO : midcircle (C.BP)
- z.I,z.T = get_points ( C.IT )
+ z.I,z.T = get_points (C.IT)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -597,7 +1411,7 @@ z.E = C.Aa.north
z.F = C.Bb.north
L.EF = line : new (z.E,z.F)
C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.I,z.T = get_points (C.IT)
L.TF = C.Bb : tangent_from (z.I)
z.H = intersection (L.TF,C.IT)
z.E = intersection (L.TF,C.Aa)
@@ -620,7 +1434,7 @@ z.E = C.Aa.north
z.F = C.Bb.north
L.EF = line : new (z.E,z.F)
C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.I,z.T = get_points (C.IT)
L.TF = C.Bb : tangent_from (z.I)
z.H = intersection (L.TF,C.IT)
z.E = intersection (L.TF,C.Aa)
@@ -662,7 +1476,7 @@ z.E = C.Aa.north
z.F = C.Bb.north
L.EF = line : new (z.E,z.F)
C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.I,z.T = get_points(C.IT)
L.TF = C.Bb : tangent_from (z.I)
z.H = intersection (L.TF,C.IT)
z.E = intersection (L.TF,C.Aa)
@@ -685,7 +1499,7 @@ z.E = C.Aa.north
z.F = C.Bb.north
L.EF = line : new (z.E,z.F)
C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.I,z.T = get_points (C.IT)
L.TF = C.Bb : tangent_from (z.I)
z.H = intersection (L.TF,C.IT)
z.E = intersection (L.TF,C.Aa)
@@ -711,14 +1525,14 @@ z.F=L.TF.pb
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
\begin{tkzelements}
-z.A = point : new ( 2 , 0 )
-z.B = point : new ( 4 , 0 )
-z.a = point : new ( 1 , 0)
-z.b = point : new ( 1 , 0)
-C.Aa = circle : new (z.A,z.a)
-C.Bb = circle : new (z.B,z.b)
-C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.A = point : new ( 2 , 0 )
+z.B = point : new ( 4 , 0 )
+z.a = point : new ( 1 , 0)
+z.b = point : new ( 1 , 0)
+C.Aa = circle : new (z.A,z.a)
+C.Bb = circle : new (z.B,z.b)
+C.IT = C.Aa : midcircle (C.Bb)
+z.I,z.T = get_points(C.IT)
\end{tkzelements}
\end{Verbatim}
\end{minipage}
@@ -731,7 +1545,7 @@ z.b = point : new ( 1 , 0)
C.Aa = circle : new (z.A,z.a)
C.Bb = circle : new (z.B,z.b)
C.IT = C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points ( C.IT )
+z.I,z.T = get_points (C.IT)
\end{tkzelements}
\begin{tikzpicture}
@@ -748,206 +1562,205 @@ z.I,z.T = get_points ( C.IT )
\end{enumerate}
% subsubsection midcircle (end)
-% subsection methods_of_the_class_circle (end)
-\subsection{Circles\_position} % (fold)
-\label{sub:circles_position}
-This function returns a string indicating the position of the circle in relation to another. Useful for creating a function. Cases are:
+\subsubsection{Radical circle} % (fold)
+\label{ssub:radical_circle}
-\begin{itemize}
- \item \code{outside}
- \item \code{outside tangent}
- \item \code{inside tangent}
- \item \code{inside}
- \item \code{intersect}
-\end{itemize}
-
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{Verbatim}
\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.a = point : new ( 3 , 0 )
- z.B = point : new ( 2 , 0 )
- z.b = point : new ( 3 , 0 )
- C.Aa = circle: new (z.A,z.a)
- C.Bb = circle: new (z.B,z.b)
- position = C.Aa : circles_position (C.Bb)
- if position == "inside tangent"
- then color = "orange"
- else color = "blue" end
+ scale = .5
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ C.exa = T.ABC : ex_circle ()
+ z.I_a,z.Xa = get_points (C.exa)
+ C.exb = T.ABC : ex_circle (1)
+ z.I_b,z.Xb = get_points (C.exb)
+ C.exc = T.ABC : ex_circle (2)
+ z.I_c,z.Xc = get_points (C.exc)
+ C.ortho = C.exa : radical_circle (C.exb,C.exc)
+ z.w,z.a = get_points (C.ortho)
\end{tkzelements}
-
\begin{tikzpicture}
\tkzGetNodes
- \tkzDrawCircle(A,a)
- \tkzDrawCircle[color=\tkzUseLua{color}](B,b)
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc)
+ \tkzDrawCircles[red,thick](w,a)
+ \tkzDrawPoints(A,B,C)
+ \tkzLabelPoints(A,B,C)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
-\begin{minipage}{.5\textwidth}
+
\begin{tkzelements}
-z.A = point : new ( 1 , 0 )
-z.a = point : new ( 3 , 0 )
-z.B = point : new ( 2 , 0 )
-z.b = point : new ( 3 , 0 )
-C.Aa = circle: new (z.A,z.a)
-C.Bb = circle: new (z.B,z.b)
-position = C.Aa : circles_position (C.Bb)
-if position == "inside tangent" then color = "orange" else color = "blue" end
+ scale = .5
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ C.exa = T.ABC : ex_circle ()
+ z.I_a,z.Xa = get_points (C.exa)
+ C.exb = T.ABC : ex_circle (1)
+ z.I_b,z.Xb = get_points (C.exb)
+ C.exc = T.ABC : ex_circle (2)
+ z.I_c,z.Xc = get_points (C.exc)
+ C.ortho = C.exa : radical_circle (C.exb,C.exc)
+ z.w,z.a = get_points (C.ortho)
\end{tkzelements}
-\hspace{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(A,a)
-\tkzDrawCircle[color=\tkzUseLua{color}](B,b)
-\end{tikzpicture}\hspace{\fill}
-\end{minipage}
-% subsection circles__position (end)
-\subsection{Common tangent: Angle of two intersecting circles} % (fold)
-\label{sub:common_tangent}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc)
+ \tkzDrawCircles[red,thick](w,a)
+ \tkzDrawPoints(A,B,C)
+ \tkzLabelPoints(A,B,C)
+ \end{tikzpicture}
+\end{center}
+% subsubsection radical_circle (end)
-Let be a tangent common to both circles at $T$ and $T'$ (closest to $C$). Let a secant parallel to this tangent pass through $C$. Then the segment $[TT']$ is seen from the other common point $D$ at an angle equal to half the angle of the two circles.
+\subsubsection{Method \Imeth{circle}{power(C)}} % (fold)
+\label{ssub:method_imeth_circle_power_c}
+\paragraph{Power v1} % (fold)
+\label{par:power_v1}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 5 , 2 )
- L.AB = line : new ( z.A , z.B )
- z.C = point : new ( 1 , 2 )
- C.AC = circle : new (z.A,z.C)
- C.BC = circle : new (z.B,z.C)
- z.T,z.Tp = C.AC : common_tangent (C.BC)
- L.TTp = line : new (z.T,z.Tp)
- z.M = C.AC : point (0.45)
- L.MC =line : new (z.M,z.C)
- z.Mp = intersection (L.MC, C.BC)
- L.mm = L.TTp : ll_from (z.C)
- _,z.M = intersection (L.mm, C.AC)
- z.Mp = intersection (L.mm, C.BC)
- _,z.D = intersection (C.AC,C.BC)
-\end{tkzelements}
+ z.O = point : new (0,0)
+ z.A = point : new (2,-2)
+ z.M = point : new (-6,0)
+ L.AM = line : new (z.A,z.M)
+ C.OA = circle : new (z.O,z.A)
+ z.Ap = C.OA : antipode (z.A)
+ z.B = intersection (L.AM, C.OA)
+\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
- \tkzDrawCircles(A,C B,C)
- \tkzDrawSegments(M,M' A,D B,D A,B C,D T,C T',C)
- \tkzDrawSegments[gray](D,M D,M' T,T' D,T D,T')
- \tkzDrawPoints(A,B,C,D,M,M',T,T')
- \tkzLabelPoints(A,B,D,M)
- \tkzLabelPoints[above](C,M',T,T')
- \tkzMarkAngles[mark=|,size=.75](T,C,M C,T,T' C,D,T T,D,M)
- \tkzMarkAngles[mark=||,size=.75](M',C,T' T,T',C T',D,C M',D,T')
+ \tkzDrawCircle(O,A)
+ \tkzMarkRightAngle[fill=gray!10](A',B,M)
+ \tkzDrawSegments(M,O A,A' A',B)
+ \tkzDrawPoints(O,A,A',M,B)
+ \tkzLabelPoints(O,A,A',M,B)
+ \tkzDrawSegments[-Triangle](M,A M,A')
\end{tikzpicture}
\end{Verbatim}
-
-
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}
\begin{tkzelements}
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 5 , 2 )
-L.AB = line : new ( z.A , z.B )
-z.C = point : new ( 1 , 2 )
-C.AC = circle : new (z.A,z.C)
-C.BC = circle : new (z.B,z.C)
-z.T,z.Tp = C.AC : common_tangent (C.BC)
-L.TTp = line : new (z.T,z.Tp)
-z.M = C.AC : point (0.45)
-L.MC =line : new (z.M,z.C)
-z.Mp = intersection (L.MC, C.BC)
-L.mm = L.TTp : ll_from (z.C)
-_,z.M = intersection (L.mm, C.AC)
-z.Mp = intersection (L.mm, C.BC)
-_,z.D = intersection (C.AC,C.BC)
+scale = 1
+z.O = point : new (0,0)
+z.A = point : new (2,-2)
+z.M = point : new (-6,0)
+L.AM = line : new (z.A,z.M)
+C.OA = circle : new (z.O,z.A)
+z.Ap = C.OA : antipode (z.A)
+z.B = intersection (L.AM, C.OA)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(A,C B,C)
-\tkzDrawSegments(M,M' A,D B,D A,B C,D T,C T',C)
-\tkzDrawSegments[gray](D,M D,M' T,T' D,T D,T')
-\tkzDrawPoints(A,B,C,D,M,M',T,T')
-\tkzLabelPoints(A,B,D,M)
-\tkzLabelPoints[above](C,M',T,T')
-\tkzMarkAngles[mark=|,size=.75](T,C,M C,T,T' C,D,T T,D,M)
-\tkzMarkAngles[mark=||,size=.75](M',C,T' T,T',C T',D,C M',D,T')
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection common_tangent (end)
-\subsection{Common tangent: orthogonality} % (fold)
-\label{sub:common_tangent_orthogonality}
-For two circles to be orthogonal, it is necessary and sufficient for a secant passing through one of their common points to be seen from the other common point at a right angle.
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzMarkRightAngle[fill=gray!10](A',B,M)
+ \tkzDrawSegments(M,O A,A' A',B)
+ \tkzDrawPoints(O,A,A',M,B)
+ \tkzLabelPoints(O,A,A',M,B)
+ \tkzDrawSegments[-Triangle](M,A M,A')
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% paragraph power_v1 (end)
+\paragraph{Power v2} % (fold)
+\label{par:power_v2}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 4 , 2 )
- L.AB = line : new ( z.A , z.B )
- z.a = point : new ( 1 , 2 )
- C.Aa = circle : new (z.A,z.a)
- C.BC = C.Aa : orthogonal_from (z.B)
- z.C,z.D = intersection (C.Aa,C.BC)
- C.AC = circle : new (z.A,z.C)
- z.T,z.Tp = C.AC : common_tangent (C.BC)
- L.TTp = line : new (z.T,z.Tp)
- z.M = C.AC : point (0.45)
- L.MC =line : new (z.M,z.C)
- z.Mp = intersection (L.MC, C.BC)
- L.mm = L.TTp : ll_from (z.C)
- _,z.M = intersection (L.mm, C.AC)
- z.Mp = intersection (L.mm, C.BC)
+ z.O = point : new (0,0)
+ z.A = point : new (2,2)
+ z.M = point : new (-1.5,0)
+ L.AM = line : new (z.A,z.M)
+ C.OA = circle : new (z.O,z.A)
+ z.Ap = C.OA : antipode (z.A)
+ _,z.B = intersection (L.AM, C.OA)
+ z.m = z.M : north(1)
+ L.mM = line : new (z.m,z.M)
+ z.U,z.V = intersection (L.mM,C.OA)
\end{tkzelements}
-
\begin{tikzpicture}
\tkzGetNodes
- \tkzDrawCircles(A,C B,C)
- \tkzDrawSegments(M,M' A,C B,C A,B)
- \tkzDrawSegments[gray](D,M D,M' T,T')
- \tkzDrawPoints(A,B,C,D,M,M',T,T')
- \tkzLabelPoints(A,B,D,M)
- \tkzLabelPoints[above](C,M',T,T')
- \tkzMarkRightAngles(M',D,M A,C,B)
+ \tkzDrawCircle(O,A)
+ \tkzMarkRightAngle[fill=gray!10](A',B,M)
+ \tkzDrawSegments(M,O A,A' A',B A,B U,V)
+ \tkzDrawPoints(O,A,A',M,B,U,V,m)
+ \tkzLabelPoints(O,A,M,U,V,m)
+ \tkzLabelPoints[below left](A',B)
+ \tkzDrawSegments(M,A M,A')
\end{tikzpicture}
\end{Verbatim}
-
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 4 , 2 )
-L.AB = line : new ( z.A , z.B )
-z.a = point : new ( 1 , 2 )
-C.Aa = circle : new (z.A,z.a)
-C.BC = C.Aa : orthogonal_from (z.B)
-z.C,z.D = intersection (C.Aa,C.BC)
-C.AC = circle : new (z.A,z.C)
-z.T,z.Tp = C.AC : common_tangent (C.BC)
-L.TTp = line : new (z.T,z.Tp)
-z.M = C.AC : point (0.45)
-L.MC =line : new (z.M,z.C)
-z.Mp = intersection (L.MC, C.BC)
-L.mm = L.TTp : ll_from (z.C)
-_,z.M = intersection (L.mm, C.AC)
-z.Mp = intersection (L.mm, C.BC)
+scale = 1
+z.O = point : new (0,0)
+z.A = point : new (2,2)
+z.M = point : new (-1.5,0)
+L.AM = line : new (z.A,z.M)
+C.OA = circle : new (z.O,z.A)
+z.Ap = C.OA : antipode (z.A)
+_,z.B = intersection (L.AM, C.OA)
+z.m = z.M : north(1)
+L.mM = line : new (z.m,z.M)
+z.U,z.V = intersection (L.mM,C.OA)
\end{tkzelements}
- \hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(A,C B,C)
- \tkzDrawSegments(M,M' A,C B,C A,B)
- \tkzDrawSegments[gray](D,M D,M' T,T')
- \tkzDrawPoints(A,B,C,D,M,M',T,T')
- \tkzLabelPoints(A,B,D,M)
- \tkzLabelPoints[above](C,M',T,T')
- \tkzMarkRightAngles(M',D,M A,C,B)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection common_tangent_orthogonality (end)
-\subsection{In\_out for circle and disk} % (fold)
-\label{sub:in_out_for_circle_and_disk}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzMarkRightAngle[fill=gray!10](A',B,M)
+ \tkzDrawSegments(M,O A,A' A',B A,B U,V)
+ \tkzDrawPoints(O,A,A',M,B,U,V,m)
+ \tkzLabelPoints(O,A,M,U,V,m)
+ \tkzLabelPoints[below left](A',B)
+ \tkzDrawSegments(M,A M,A')
+ \end{tikzpicture}
+\end{center}
-\begin{Verbatim}
-\begin{tkzelements}
+\end{minipage}
+% paragraph power_v2 (end)
+
+% subsubsection method_imeth_circle_power_c (end)
+
+\subsubsection{Method \Imeth{circle}{in\_out} for circle and disk} % (fold)
+\label{ssub:in_out_for_circle_and_disk}
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ z.O = point : new (0,0)
+ z.A = point : new (1,2)
+ C.OA = circle : new (z.O,z.A)
+ z.N = point : new (-2,2)
+ z.M = point : new (1,0)
+ z.P = point : new (2,1)
+ BCm = C.OA : in_out (z.M)
+ BDm = C.OA : in_out_disk (z.M)
+ BCn = C.OA : in_out (z.N)
+ BDn = C.OA : in_out_disk (z.N)
+ BCp = C.OA : in_out (z.P)
+ BDp = C.OA : in_out_disk (z.P)
+ \end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}\begin{tkzelements}
z.O = point : new (0,0)
z.A = point : new (1,2)
C.OA = circle : new (z.O,z.A)
@@ -965,53 +1778,104 @@ BDp = C.OA : in_out_disk (z.P)
\tkzLabelPoints(O,M,N,P)
\ifthenelse{\equal{\tkzUseLua{#1}}{true}}{
\tkzLabelPoint[below=#4pt,font=\scriptsize](#2){on the #3}}{%
- \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){out the #3}}}
+ \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){out the #3}}
+}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments[dashed](O,M O,N O,P)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(O,M,N,P)
+ \tkzPosPoint{BCm}{M}{circle}{8}
+ \tkzPosPoint{BCn}{N}{circle}{8}
+ \tkzPosPoint{BCp}{P}{circle}{8}
+ \tkzPosPoint{BDm}{M}{disk}{14}
+ \tkzPosPoint{BDn}{N}{disk}{14}
+ \tkzPosPoint{BDp}{P}{disk}{14}
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \def\tkzPosPoint#1#2#3#4{%
+ \tkzLabelPoints(O,M,N,P)
+ \ifthenelse{\equal{\tkzUseLua{#1}}{true}}{
+ \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){on the #3}}{%
+ \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){out the #3}}}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments[dashed](O,M O,N O,P)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(O,M,N,P)
+ \tkzPosPoint{BCm}{M}{circle}{8}
+ \tkzPosPoint{BCn}{N}{circle}{8}
+ \tkzPosPoint{BCp}{P}{circle}{8}
+ \tkzPosPoint{BDm}{M}{disk}{14}
+ \tkzPosPoint{BDn}{N}{disk}{14}
+ \tkzPosPoint{BDp}{P}{disk}{14}
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+
+% subsubsection in_out_for_circle_and_disk (end)
+
+\subsubsection{Method \Imeth{circle}{circles\_position}} % (fold)
+\label{ssub:circles_position}
+
+This function returns a string indicating the position of the circle in relation to another. Useful for creating a function. Cases are:
+
+\begin{itemize}
+ \item \code{outside}
+ \item \code{outside tangent}
+ \item \code{inside tangent}
+ \item \code{inside}
+ \item \code{intersect}
+\end{itemize}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.a = point : new ( 3 , 0 )
+ z.B = point : new ( 2 , 0 )
+ z.b = point : new ( 3 , 0 )
+ C.Aa = circle: new (z.A,z.a)
+ C.Bb = circle: new (z.B,z.b)
+ position = C.Aa : circles_position (C.Bb)
+ if position == "inside tangent"
+ then color = "orange"
+ else color = "blue" end
+\end{tkzelements}
+
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawSegments[dashed](O,M O,N O,P)
-\tkzDrawCircle(O,A)
-\tkzDrawPoints(O,M,N,P)
-\tkzPosPoint{BCm}{M}{circle}{8}
-\tkzPosPoint{BCn}{N}{circle}{8}
-\tkzPosPoint{BCp}{P}{circle}{8}
-\tkzPosPoint{BDm}{M}{disk}{14}
-\tkzPosPoint{BDn}{N}{disk}{14}
-\tkzPosPoint{BDp}{P}{disk}{14}
+ \tkzGetNodes
+ \tkzDrawCircle(A,a)
+ \tkzDrawCircle[color=\tkzUseLua{color}](B,b)
\end{tikzpicture}
\end{Verbatim}
-
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
-z.O = point : new (0,0)
-z.A = point : new (1,2)
-C.OA = circle : new (z.O,z.A)
-z.N = point : new (-2,2)
-z.M = point : new (1,0)
-z.P = point : new (2,1)
-BCm = C.OA : in_out (z.M)
-BDm = C.OA : in_out_disk (z.M)
-BCn = C.OA : in_out (z.N)
-BDn = C.OA : in_out_disk (z.N)
-BCp = C.OA : in_out (z.P)
-BDp = C.OA : in_out_disk (z.P)
+z.A = point : new ( 1 , 0 )
+z.a = point : new ( 3 , 0 )
+z.B = point : new ( 2 , 0 )
+z.b = point : new ( 3 , 0 )
+C.Aa = circle: new (z.A,z.a)
+C.Bb = circle: new (z.B,z.b)
+position = C.Aa : circles_position (C.Bb)
+if position == "inside tangent" then color = "orange" else color = "blue" end
\end{tkzelements}
-\def\tkzPosPoint#1#2#3#4{%
-\tkzLabelPoints(O,M,N,P)
- \ifthenelse{\equal{\tkzUseLua{#1}}{true}}{
- \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){on the #3}}{%
- \tkzLabelPoint[below=#4pt,font=\scriptsize](#2){out the #3}}
-}
+\hspace{\fill}
\begin{tikzpicture}
\tkzGetNodes
-\tkzDrawSegments[dashed](O,M O,N O,P)
-\tkzDrawCircle(O,A)
-\tkzDrawPoints(O,M,N,P)
-\tkzPosPoint{BCm}{M}{circle}{8}
-\tkzPosPoint{BCn}{N}{circle}{8}
-\tkzPosPoint{BCp}{P}{circle}{8}
-\tkzPosPoint{BDm}{M}{disk}{14}
-\tkzPosPoint{BDn}{N}{disk}{14}
-\tkzPosPoint{BDp}{P}{disk}{14}
-\end{tikzpicture}
-% subsection in_out_for_circle_and_disk (end)
+\tkzDrawCircle(A,a)
+\tkzDrawCircle[color=\tkzUseLua{color}](B,b)
+\end{tikzpicture}\hspace{\fill}
+\end{minipage}
+% subsubsection circles__position (end)
+
+% subsection methods_of_the_class_circle (end)
% section class_circle (end)
+
\endinput
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
index 3146f73461..016dd8025c 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
@@ -141,10 +141,10 @@ To do this, you'll need to use a macro: \tkzcname{tkzUseLua} defined in \pkg{tk
\Imeth{ellipse}{foci (f1,f2,v)} & E = ellipse: foci ( focus 1, focus 2, vertex ) \\
\Imeth{ellipse}{radii (c,a,b,sl) } & E = ellipse: radii ( center, radius a, radius b, slope ) \\
\Imeth{ellipse}{in\_out (pt) } & pt in/out of the ellipse \\
-\Imeth{ellipse}{tangent\_at (pt) } & Refer to ex. \ref{ssub:method_point} \\
-\Imeth{ellipse}{tangent\_from (pt) } & Refer to ex. \ref{ssub:method_point} \\
-\Imeth{ellipse}{point (t) } & vertex = point (0) covertex = point (0.25) ex Refer to \ref{ssub:method_point} \\
-\Imeth{ellipse}{orthoptic\_circle () } & Refer to ex. \ref{ssub:steiner_inellipse_and_circumellipse} \\
+\Imeth{ellipse}{tangent\_at (pt) } & [ ex. \ref{ssub:method_point} ] \\
+\Imeth{ellipse}{tangent\_from (pt) } & [ex. \ref{ssub:method_point} ] \\
+\Imeth{ellipse}{point (t) } & vertex = point (0) covertex = point (0.25) [ex. \ref{ssub:method_point} ] \\
+\Imeth{ellipse}{orthoptic\_circle () } & [ex. \ref{ssub:steiner_inellipse_and_circumellipse}] \\
\bottomrule
\end{tabular}
@@ -153,7 +153,7 @@ To do this, you'll need to use a macro: \tkzcname{tkzUseLua} defined in \pkg{tk
\subsubsection{Method \Imeth{ellipse}{new}} % (fold)
\label{ssub:method_imeth_ellipse_new}
The main method for creating a new ellipse is \Imeth{ellipse}{new}. The arguments are three: \Iattr{ellipse}{center}, \Iattr{ellipse}{vertex} and \Iattr{ellipse}{covertex}
-For attributes Refer to \ref{sec:class_ellipse}.
+For attributes [\ref{sec:class_ellipse}].
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -258,22 +258,25 @@ The first two points are the foci of the ellipse, and the third one is the verte
a,b = E.Rx,E.Ry
ang = math.deg(E.slope)
\end{tkzelements}
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C)
- \tkzDrawCircles[cyan](O,A N,I)
- \tkzDrawSegments(X,R A,X)
- \tkzDrawEllipse[red](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
- \tkzDrawLines[add=.2 and .5](I,H)
- \tkzDrawPoints(A,B,C,N,O,X,H,R,S,I)
- \tkzLabelPoints[above](C,X)
- \tkzLabelPoints[above right](N,O)
- \tkzLabelPoints[above left](R)
- \tkzLabelPoints[left](A)
- \tkzLabelPoints[right](B,I,S,H)
- \end{tikzpicture}
- \hspace*{\fill}
+
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles[cyan](O,A N,I)
+ \tkzDrawSegments(X,R A,X)
+ \tkzDrawEllipse[red](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \tkzDrawLines[add=.2 and .5](I,H)
+ \tkzDrawPoints(A,B,C,N,O,X,H,R,S,I)
+ \tkzLabelPoints[above](C,X)
+ \tkzLabelPoints[above right](N,O)
+ \tkzLabelPoints[above left](R)
+ \tkzLabelPoints[left](A)
+ \tkzLabelPoints[right](B,I,S,H)
+ \end{tikzpicture}
+ \end{center}
+
+
\end{minipage}
\begin{Verbatim}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
index 435ad9bcc6..f4acdafc8c 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
@@ -26,22 +26,53 @@ The attributes are :
\Iattr{line}{pb} & Second point of the segment & \\
\Iattr{line}{type} & Type is 'line' & |L.AB.type = 'line'| \\
\Iattr{line}{mid} & Middle of the segment& |z.M = L.AB.mid|\\
-\Iattr{line}{slope} & Slope of the line & Refer to (\ref{ssub:example_class_line})\\
-\Iattr{line}{length} &|l = L.AB.length|&Refer to (\ref{sub:transfer_from_lua_to_tex} ; \ref{ssub:example_class_line})\\
-\Iattr{line}{north\_pa} & &Refer to (\ref{ssub:example_class_line}) \\
+\Iattr{line}{slope} & Slope of the line & [\ref{ssub:example_class_line}] \\
+\Iattr{line}{length} &|l = L.AB.length|& [\ref{sub:transfer_from_lua_to_tex} ; \ref{ssub:example_class_line}] \\
+\Iattr{line}{north\_pa} & & [\ref{ssub:example_class_line}] \\
\Iattr{line}{north\_pb} & &\\
\Iattr{line}{south\_pa} & &\\
-\Iattr{line}{south\_pb} & &Refer to (\ref{ssub:example_class_line}) \\
+\Iattr{line}{south\_pb} & & [\ref{ssub:example_class_line}] \\
\Iattr{line}{east} & &\\
\Iattr{line}{west} & &\\
-\Iattr{line}{vec} & |V.AB = L.AB.vec|& defines $\overrightarrow{AB}$ Refer to (\ref{sec:class_vector})\\
+\Iattr{line}{vec} & |V.AB = L.AB.vec|& defines $\overrightarrow{AB}$ [\ref{sec:class_vector}] \\
\bottomrule
\end{tabular}
\egroup
\subsubsection{Example: attributes of class line} % (fold)
\label{ssub:example_class_line}
-\begin{minipage}{.5\textwidth}
+
+\vspace{5pt}
+\begin{tkzelements}
+z.a = point: new (1, 1)
+z.b = point: new (5, 4)
+L.ab = line : new (z.a,z.b)
+z.m = L.ab.mid
+z.w = L.ab.west
+z.e = L.ab.east
+z.r = L.ab.north_pa
+z.s = L.ab.south_pb
+sl = L.ab.slope
+len = L.ab.length
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(a,b,m,e,r,s,w)
+ \tkzLabelPoints(a,b)
+ \tkzLabelPoint(r){north\_pa}
+ \tkzLabelPoint(s){south\_pb}
+ \tkzLabelPoint[below](m){mid}
+ \tkzLabelPoint[right](w){west}
+ \tkzLabelPoint[left](e){east}
+ \tkzDrawLine(a,b)
+ \tkzLabelSegment[above = 1em,sloped](a,b){ab = \pmpn{\tkzUseLua{len}}}
+ \tkzLabelSegment[above=2em,sloped](a,b){slope of (ab) = \pmpn{\tkzUseLua{sl}}}
+ \end{tikzpicture}
+\end{center}
+
+
\begin{Verbatim}
\begin{tkzelements}
scale = .5
@@ -67,35 +98,8 @@ The attributes are :
\tkzLabelSegment[above=12pt,sloped](a,b){slope of (ab) = \tkzUseLua{sl}}
\end{tikzpicture}
\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}\begin{tkzelements}
-scale = .5
-z.a = point: new (1, 1)
-z.b = point: new (5, 4)
-L.ab = line : new (z.a,z.b)
-z.m = L.ab.mid
-z.w = L.ab.west
-z.e = L.ab.east
-z.r = L.ab.north_pa
-z.s = L.ab.south_pb
-sl = L.ab.slope
-len = L.ab.length
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPoints(a,b,m,e,r,s,w)
- \tkzLabelPoints(a,b)
- \tkzLabelPoint(r){north\_pa}
- \tkzLabelPoint(s){south\_pb}
- \tkzLabelPoint[below](m){mid}
- \tkzLabelPoint[right](w){west}
- \tkzLabelPoint[left](e){east}
- \tkzDrawLine(a,b)
- \tkzLabelSegment[above = 1em,sloped](a,b){ab = \pmpn{\tkzUseLua{len}}}
- \tkzLabelSegment[above=2em,sloped](a,b){slope of (ab) = \pmpn{\tkzUseLua{sl}}}
-\end{tikzpicture}
-\end{minipage}
+
+
% subsubsection example_class_line (end)
\subsubsection{Method \Imeth{line}{new} and line attributes}
@@ -161,62 +165,54 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\toprule
\textbf{Methods} & \textbf{Comments} & \\
\midrule
-\Igfct{line}{new(pt, pt)} & |L.AB = line : new(z.A,z.B)| & Create line $(AB)$ ; Refer to (\ref{ssub:altshiller})\\
+\Igfct{line}{new(pt, pt)} & |L.AB = line : new(z.A,z.B)| & Create line $(AB)$ ; [\ref{sub:altshiller}] \\
\midrule
\textbf{Points} &&\\
\midrule
-\Imeth{line}{gold\_ratio ()} & |z.C=L.AB : gold_ratio()| & Refer to (\ref{sub:gold_ratio_with_segment} ; \ref{sub:the_figure_pappus_circle} ; \ref{sub:bankoff_circle}) \\
-\Imeth{line}{normalize ()} & |z.C=L.AB : normalize()| & AC =1 and $C\in (AB)$ Refer to (\ref{ssub:normalize}) \\
+\Imeth{line}{gold\_ratio ()} & |z.C=L.AB : gold_ratio()| & [\ref{sub:gold_ratio_with_segment} ; \ref{sub:the_figure_pappus_circle} ; \ref{sub:bankoff_circle} ] \\
+\Imeth{line}{normalize ()} & |z.C=L.AB : normalize()| & AC =1 and $C\in (AB)$ [ \ref{ssub:normalize}] \\
\Imeth{line}{normalize\_inv ()} & |z.C=L.AB : normalize_inv()| & CB=1 and $C\in (AB)$ \\
-\Imeth{line}{barycenter (r,r)} & |z.C=L.AB : barycenter (1,2)| & Refer to (\ref{ssub:barycenter_with_a_line})\\
-\Imeth{line}{point (r)} & |z.C=L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$ Refer to (\ref{sub:ellipse} ; \ref{ssub:method_point})\\
+\Imeth{line}{barycenter (r,r)} & |z.C=L.AB : barycenter (1,2)| & [\ref{ssub:barycenter_with_a_line}] \\
+\Imeth{line}{point (r)} & |z.C=L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$ [\ref{sub:ellipse} ; \ref{ssub:method_point}] \\
\Imeth{line}{midpoint ()} & |z.M=L.AB : midpoint ()| & better is |z.M = L.AB.mid| \\
-\Imeth{line}{harmonic\_int (pt)} & |z.D=L.AB : harmonic_int (z.C)| & Refer to (\ref{sub:bankoff_circle})\\
-\Imeth{line}{harmonic\_ext (pt)} & |z.D=L.AB : harmonic_ext (z.C)| & Refer to (\ref{sub:bankoff_circle})\\
-\Imeth{line}{harmonic\_both (r)} & |z.C,z.D=L.AB : harmonic_both|($\varphi$) & \ref{sub:harmonic_division_with_tkzphi}\\
+\Imeth{line}{harmonic\_int (pt)} & |z.D=L.AB : harmonic_int (z.C)| & [ \ref{sub:bankoff_circle}] \\
+\Imeth{line}{harmonic\_ext (pt)} & |z.D=L.AB : harmonic_ext (z.C)| & [ \ref{sub:bankoff_circle}] \\
+\Imeth{line}{harmonic\_both (r)} & |z.C,z.D=L.AB : harmonic_both|($\varphi$) & [\ref{sub:harmonic_division_with_tkzphi}] \\
\Imeth{line}{\_east(d)} & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned \\
\Imeth{line}{\_west(d)} & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned \\
-\Imeth{line}{\_north\_pa(d)} &|z.M=L.AB: _north_pa(2)| &|AM=2| $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise \\
-\Imeth{line}{\_south\_pa(d)} &|z.M=L.AB:_south_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ clockwise \\
-\Imeth{line}{\_north\_pb(d)} &|z.M=L.AB:_north_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{BA},\overrightarrow{BM}$ clockwise \\
-\Imeth{line}{\_south\_pb(d)} &|z.M=L.AB:_south_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise \\
-\Imeth{line}{report(d,pt)} &|z.M=L.AB:report(2,z.N)| &|MN=2|; $AB\parallel MN$ ; Refer to ex. (\ref{ssub:method_report})\\
-\Imeth{line}{colinear\_at(pt,k)} &|z.D=L.AB:colinear_at(z.C,2)| &|CD=2AB|; $AB\parallel CD$ ; Refer to ex. (\ref{ssub:method_imeth_line_colinear__at})\\
+\Imeth{line}{\_north\_pa(d)} &|z.M=L.AB: _north_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise. \\
+...&& [\ref{ssub:new_line_from_a_defined_line}; \ref{ssub:attributes_of_an_ellipse}]\\
+\Imeth{line}{\_south\_pa(d)} &|z.M=L.AB: _south_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ clockwise \\
+\Imeth{line}{\_north\_pb(d)} &|z.M=L.AB: _north_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{BA},\overrightarrow{BM}$ clockwise \\
+\Imeth{line}{\_south\_pb(d)} &|z.M=L.AB: _south_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise \\
+\Imeth{line}{report(d,pt)} &|z.M=L.AB: report(2,z.N)| &|MN=2|; $AB\parallel MN$ ; [ex. \ref{ssub:method_report}]\\
+\Imeth{line}{colinear\_at(pt,k)} &|z.D=L.AB: colinear_at(z.C,2)| &|CD=2AB|; $AB\parallel CD$ ; [ex. \ref{ssub:method_imeth_line_colinear__at}]\\
\midrule
\textbf{Lines} &&\\
\midrule
-\Imeth{line}{ll\_from ( pt )} &|L.CD=L.AB: ll_from(z.C)| &$(CD) \parallel (AB)$ \\
-\Imeth{line}{ortho\_from ( pt )} &|L.CD=L.AB: ortho_from(z.C)|&$(CD) \perp (AB)$\\
-\Imeth{line}{mediator ()}&|L.uv=L.AB: mediator()| & $(u,v)$mediator of $(A,B)$\\
+\Imeth{line}{ll\_from ( pt )} &|L.CD=L.AB: ll_from(z.C)| &$(CD) \parallel (AB)$; [\ref{ssub:new_line_from_a_defined_line}] \\
+\Imeth{line}{ortho\_from ( pt )} &|L.CD=L.AB: ortho_from(z.C)|&$(CD) \perp (AB)$; [\ref{ssub:newline_ortho_from}] \\
+ \Imeth{line}{mediator ()} & |L.uv=L.AB: mediator()| & perpendicular bisector of $(A,B)$ \footnote{You can use |perpendicular_bisector| intead of \tkzname{mediator}.}; [\ref{ssub:method_imeth_line_mediator}]\\
\midrule
\textbf{Triangles}&&\\
\midrule
-\Imeth{line}{equilateral (<swap>)} & |T.ABC=L.AB:equilateral()| & $(\overrightarrow{AB},\overrightarrow{AC})>0$ or $<0$ with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.} \\
-\Imeth{line}{isosceles (an<,swap>)}&|T.ABC=L.AB:isosceles(math.pi/6)|&\\
-\Imeth{line}{two\_angles (an,an)} &|T.ABC=L.AB:two_angles(an,an)|&note \footnote{The given side is between the two angles} Refer to (\ref{ssub:triangle_with_two__angles}) \\
+\Imeth{line}{equilateral (<swap>)} & |T.ABC=L.AB:equilateral()| & $(\overrightarrow{AB},\overrightarrow{AC})>0$ or $<0$ with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.}; [\ref{ssub:object_rotation}] \\
+\Imeth{line}{isosceles (an<,swap>)}&|T.ABC=L.AB:isosceles(math.pi/6)|& [\ref{ssub:method_imeth_line_isosceles}]\\
+\Imeth{line}{two\_angles (an,an)} &|T.ABC=L.AB:two_angles(an,an)|&note \footnote{The given side is between the two angles} [\ref{ssub:triangle_with_two__angles}] \\
\Imeth{line}{school ()} & 30°,60°, 90° & \\
-\Imeth{line}{sss (r,r)} & $AC=r$ $BC=r$ & \\
-\Imeth{line}{as (r,an)} & $AC =r$ $\widehat{BAC} = an$& \\
-\Imeth{line}{sa (r,an)} & $AC =r$ $\widehat{ABC} = an$& \\
-\midrule
-\textbf{Sacred triangles}&&\\
-\midrule
-\Imeth{line}{gold (<swap>)} &|T.ABC=L.AB:gold()| & right in $B$ and $AC = \varphi \times AB $ \\
-\Imeth{line}{euclide (<swap>)} &|T.ABC=L.AB:euclide()| &$AB=AC$ ; $(\overrightarrow{AB},\overrightarrow{AC}) = \pi/5$ \\
-\Imeth{line}{golden (<swap>)} &|T.ABC=L.AB:golden()| &
- $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ \\
-\Imeth{line}{divine ()} & & \\
-\Imeth{line}{egyptian ()} & & \\
-\Imeth{line}{cheops ()} & & \\
+\Imeth{line}{sss (r,r)} & $AC=r$ $BC=r$ & [\ref{ssub:triangle_with_three_given_sides}] \\
+\Imeth{line}{sas (r,an)} & $AC =r$ $\widehat{BAC} = an$ & [\ref{ssub:triangle_with_three_given_sides}] \\
+\Imeth{line}{ssa (r,an)} & $AC =r$ $\widehat{ABC} = an$& [\ref{ssub:triangle_with_three_given_sides}]\\
\midrule
\textbf{Squares}&&\\
\midrule
-\Imeth{line}{square ()} &|S.AB=L.AB : square () | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}\\
+\Imeth{line}{square ()} &|S.AB=L.AB : square () | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}; [\ref{ssub:object_rotation}] \\
\bottomrule
\end{tabular}
\egroup
\end{minipage}
+
\begin{minipage}{\textwidth}
\bgroup
\catcode`_=12
@@ -226,23 +222,33 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\toprule
\textbf{Methods} & \textbf{Comments} & \\
\midrule
+\textbf{Sacred triangles}&&\\
+\midrule
+\Imeth{line}{gold (<swap>)} &|T.ABC=L.AB:gold()| & right in $B$ and $AC = \varphi \times AB $; [\ref{line:met}] \\
+\Imeth{line}{euclide (<swap>)} &|T.ABC=L.AB:euclide()| &$AB=AC$ ; $(\overrightarrow{AB},\overrightarrow{AC}) = \pi/5$; [\ref{line:met}] \\
+\Imeth{line}{golden (<swap>)} &|T.ABC=L.AB:golden()| &
+ $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ ; [\ref{line:met}] \\
+\Imeth{line}{divine ()} & & [\ref{line:met}] \\
+\Imeth{line}{egyptian ()} & & [\ref{line:met}] \\
+\Imeth{line}{cheops ()} & & [\ref{line:met}] \\
+\midrule
\textbf{Circles} &&\\
\midrule
\Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\
-\Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle_swap ()|& center pb through pa \\
-\Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Set of points tq. |MA/MB = 2| \\
+\Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Set of points tq. |MA/MB = 2|; [\ref{ssub:apollonius_circle_ma_mb_k}] \\
\midrule
\textbf{Transformations} &&\\
\midrule
-\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|&\\
-\Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|&\\
-\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$\\
+\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|& [\ref{ssub:reflection_of_object}] \\
+\Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|& [\ref{ssub:example_translation}] \\
+\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$; [\ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\
+... & & [ \ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\
\midrule
\textbf{Miscellaneous} &&\\
\midrule
-\Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| & Refer to \ref{ssub:example_distance_and_projection}\\
-\Imeth{line}{in\_out (pt)} & |b = L.AB: in_out(z.C)| & b=true if $C\in (AB)$ \\
-\Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope \\
+\Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| & [\ref{ssub:example_distance_and_projection}] \\
+\Imeth{line}{in\_out (pt)} & |b = L.AB: in_out(z.C)| & b=true if $C\in (AB)$ ; [\ref{ssub:in_out_for_a_line}] \\
+\Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope; [\ref{ssub:example_class_line}]\\
\Imeth{line}{in\_out\_segment (pt)} & |b = L.AB : in_out_segment(z.C)| & b=true if $C\in [AB$] \\
\bottomrule
\end{tabular}
@@ -309,7 +315,11 @@ The angles are on either side of the given segment
\tkzDrawPolygons(A,B,C)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(A,B)
- \tkzLabelPoints[above](C)
+ \tkzLabelPoints[above](C)
+ \tkzMarkAngle[red](C,B,A)
+ \tkzMarkAngle[red](B,A,C)
+ \tkzLabelAngle[red,pos=1.3](C,B,A){$\pi/2$}
+ \tkzLabelAngle[red,pos=1.3](B,A,C){$\pi/6$}
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
@@ -321,57 +331,130 @@ The angles are on either side of the given segment
T.ABC= L.AB : two_angles (math.pi/6,math.pi/2)
z.C = T.ABC.pc
\end{tkzelements}
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C)
- \tkzDrawPoints(A,B,C)
- \tkzLabelPoints(A,B)
- \tkzLabelPoints[above](C)
- \end{tikzpicture}
- \hspace*{\fill}
+
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C)
+ \tkzMarkAngle[red](C,B,A)
+ \tkzMarkAngle[red](B,A,C)
+ \tkzLabelAngle[red,pos=1.3](C,B,A){$\pi/2$}
+ \tkzLabelAngle[red,pos=1.3](B,A,C){$\pi/6$}
+ \end{tikzpicture}
+ \end{center}
+
\end{minipage}
% subsubsection triangle_with_two__angles (end)
-\subsubsection{Method \Imeth{line}{sss}} % (fold)
+\subsubsection{Method \Imeth{line}{isosceles}} % (fold)
+\label{ssub:method_imeth_line_isosceles}
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+\begin{tkzelements}
+ scale = 2
+ z.a = point : new (1,2)
+ z.b = point : new (5,1)
+ L.ab = line : new (z.a,z.b)
+ T.abc = L.ab : isosceles (math.pi/6,indirect)
+ z.c = T.abc.pc
+ z.L = T.abc : lemoine_point ()
+ T.SY = T.abc : symmedian ()
+ z.Ka,z.Kb,z.Kc = get_points (T.SY)
+ L.Kb = T.abc : symmedian_line (1)
+ _,z.Kb = get_points(L.Kb)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygons(a,b,c Ka,Kb,Kc)
+\tkzDrawPoints(a,b,c,L,Ka,Kb,Kc)
+\tkzLabelPoints(c,L,Ka,Kb)
+\tkzLabelPoints[above](a,b,Kc)
+\tkzDrawSegments[cyan](a,Ka b,Kb c,Kc)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 2
+ z.a = point : new (1,2)
+ z.b = point : new (5,1)
+ L.ab = line : new (z.a,z.b)
+ T.abc = L.ab : isosceles (math.pi/6,indirect)
+ z.c = T.abc.pc
+ z.L = T.abc : lemoine_point ()
+ T.SY = T.abc : symmedian ()
+ z.Ka,z.Kb,
+ z.Kc = get_points (T.SY)
+ L.Kb = T.abc : symmedian_line (1)
+ _,z.Kb = get_points(L.Kb)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygons(a,b,c Ka,Kb,Kc)
+\tkzDrawPoints(a,b,c,L,Ka,Kb,Kc)
+\tkzLabelPoints(c,L,Ka,Kb)
+\tkzLabelPoints[above](a,b,Kc)
+\tkzDrawSegments[cyan](a,Ka b,Kb c,Kc)
+\end{tikzpicture}
+\end{minipage}
+
+% subsubsection method_imeth_line_isosceles (end)
+
+\subsubsection{Methods \Imeth{line}{sss}, \Imeth{line}{sas}, \Imeth{line}{ssa}} % (fold)
\label{ssub:triangle_with_three_given_sides}
In the following example, a small difficulty arises. The given lengths are not affected by scaling, so it's necessary to use the \Igfct{math}{value (r) } function, which will modify the lengths according to the scale.
+\vspace{6pt}
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 5 , 0 )
- L.AB = line : new ( z.A , z.B )
- T.ABC = L.AB : sss (value(3),value(4))
- z.C = T.ABC.pc
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 5 , 0 )
+ L.AB = line : new ( z.A , z.B )
+ T.ABC = L.AB : sss (value(3),value(4))
+ T.ABD = L.AB : sas (value(3),math.pi/2)
+ T.ABE = L.AB : ssa (value(7),math.pi/2)
+ z.C = T.ABC.pc
+ z.D = T.ABD.pc
+ z.E = T.ABE.pc
\end{tkzelements}
+\hspace{\fill}
\begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C)
- \tkzDrawPoints(A,B,C)
- \tkzLabelPoints(A,B)
- \tkzLabelPoints[above](C)
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A,B,D A,B,E)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.6\textwidth}
- \begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 5 , 0 )
- L.AB = line : new ( z.A , z.B )
- T.ABC = L.AB : sss (value(3),value(4))
- z.C = T.ABC.pc
- \end{tkzelements}
-\hspace{\fill}
- \begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C)
- \tkzDrawPoints(A,B,C)
- \tkzLabelPoints(A,B)
- \tkzLabelPoints[above](C)
- \end{tikzpicture}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 5 , 0 )
+ L.AB = line : new ( z.A , z.B )
+ T.ABC = L.AB : sss (value(3),value(4))
+ T.ABD = L.AB : sas (value(3),math.pi/2)
+ T.ABE = L.AB : ssa (value(7),math.pi/2)
+ z.C = T.ABC.pc
+ z.D = T.ABD.pc
+ z.E = T.ABE.pc
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A,B,D A,B,E)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection triangle_with_three_given_sides (end)
@@ -413,16 +496,20 @@ In some cases, two solutions are possible.
z.C = T.ABC.pc
z.D = T.ABD.pc
\end{tkzelements}
- \hspace{\fill} \begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C A,B,D)
- \tkzDrawPoints(A,B,C,D)
- \tkzLabelPoints(A,B)
- \tkzLabelPoints[above](C,D)
- \tkzLabelAngle[teal](C,B,A){$\pi/6$}
- \tkzLabelSegment[below left](A,C){$7$}
- \tkzLabelSegment[below left](A,D){$7$}
- \end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A,B,D)
+ \tkzDrawPoints(A,B,C,D)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D)
+ \tkzLabelAngle[teal](C,B,A){$\pi/6$}
+ \tkzLabelSegment[below left](A,C){$7$}
+ \tkzLabelSegment[below left](A,D){$7$}
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection triangle_with_side_between_side_and_angle (end)
@@ -536,12 +623,15 @@ This method exists for all objects except quadrilaterals.
z.J = L.AB : point (-0.5)
z.K = L.AB : point (2)
\end{tkzelements}
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
- \tkzDrawLine(J,K)
- \tkzDrawPoints(A,B,I,J,K)
- \tkzLabelPoints(A,B,I,J,K)
- \end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawLine(J,K)
+ \tkzDrawPoints(A,B,I,J,K)
+ \tkzLabelPoints(A,B,I,J,K)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection method_point (end)
@@ -576,12 +666,15 @@ If the coefficient is missing then it defaults to $1$ and in the following examp
z.D = L.AB : colinear_at (z.C,.5)
z.E = L.AB : colinear_at (z.C)
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(A,B C,E)
- \tkzDrawPoints(A,B,C,D,E)
- \tkzLabelPoints(A,B,C,D,E)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments(A,B C,E)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B,C,D,E)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection method_imeth_line_colinear__at (end)
@@ -615,15 +708,17 @@ If the coefficient is missing then it defaults to $1$ and in the following examp
L.ab = line : new (z.a,z.b)
z.c = L.ab : normalize ()
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
-\tkzDrawSegments(a,b)
-\tkzDrawCircle(a,c)
-\tkzDrawPoints(a,b,c)
-\tkzLabelPoints(a,b,c)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawSegments(a,b)
+ \tkzDrawCircle(a,c)
+ \tkzDrawPoints(a,b,c)
+ \tkzLabelPoints(a,b,c)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection normalize (end)
@@ -654,16 +749,19 @@ If the coefficient is missing then it defaults to $1$ and in the following examp
L.AB = line : new ( z.A , z.B )
z.G = L.AB : barycenter (1,2)
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLine(A,B)
- \tkzDrawPoints(A,B,G)
- \tkzLabelPoints(A,B,G)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLine(A,B)
+ \tkzDrawPoints(A,B,G)
+ \tkzLabelPoints(A,B,G)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection barycenter_with_a_line (end)
-\subsubsection{method \Imeth{line}{ll\_from}} % (fold)
+\subsubsection{Method \Imeth{line}{ll\_from}} % (fold)
\label{ssub:new_line_from_a_defined_line}
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -700,20 +798,162 @@ L.CD = line : new (z.C,z.D)
_,z.E = get_points ( L.CD: ll_from (z.B))
-- or z.E = L2.pb with |L2 = L.CD: ll_from (z.B)|
\end{tkzelements}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,D B,E)
+ \tkzDrawPoints(A,...,E)
+ \tkzLabelPoints(A,...,E)
+ \tkzMarkRightAngle(B,A,C)
+ \tkzMarkSegments(A,C A,B A,D)
+ \end{tikzpicture}
+\end{center}
+
+
+\end{minipage}
+ % \caption{New line from defined line}
+% subsubsection new_line_from_a_defined_line (end)
+
+\subsubsection{Method \Imeth{line}{ortho\_from}} % (fold)
+\label{ssub:newline_ortho_from}
+\begin{minipage}{0.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new (1,1)
+ z.B = point : new (3,2)
+ L.AB = line : new (z.A,z.B)
+ z.C = point : new (1,3)
+ L.CD = L.AB : ortho_from(z.C)
+ z.D = L.CD.pb
+\end{tkzelements}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B C,D B,E)
-\tkzDrawPoints(A,...,E)
-\tkzLabelPoints(A,...,E)
-\tkzMarkRightAngle(B,A,C)
-\tkzMarkSegments(A,C A,B A,D)
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,D)
+ \tkzDrawPoints(A,...,D)
+ \tkzLabelPoints(A,...,D)
\end{tikzpicture}
-\hspace*{\fill}
+\end{Verbatim}
\end{minipage}
- % \caption{New line from defined line}
+\begin{minipage}{0.5\textwidth}
+\begin{tkzelements}
+ z.A = point : new (1,1)
+ z.B = point : new (3,2)
+ L.AB = line : new (z.A,z.B)
+ z.C = point : new (1,3)
+ L.CD = L.AB : ortho_from(z.C)
+ z.D = L.CD.pb
+\end{tkzelements}
+
+\begin{center}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,D)
+ \tkzDrawPoints(A,...,D)
+ \tkzLabelPoints(A,...,D)
+\end{tikzpicture}
+\end{center}
+
+
+\end{minipage}
+
% subsubsection new_line_from_a_defined_line (end)
+\subsubsection{Method \Imeth{line}{mediator}} % (fold)
+\label{ssub:method_imeth_line_mediator}
+
+In Mathworld, the mediator is the plane through the midpoint of a line segment and perpendicular to that segment, also called a mediating plane. The term "mediator" was introduced by J. Neuberg (Altshiller-Court 1979, p. 298). Here, I have adopted the French term and the mediator or
+the perpendicular bisector of a line segment, is a line segment perpendicular to the segment and passing through the midpoint of this segment.
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ L.AB = line: new (z.A,z.B)
+ L.med = L.AB : mediator ()
+ z.M = L.AB.mid
+ z.x,z.y= get_points(L.med)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLine(A,B)
+\tkzDrawSegments(x,y)
+\tkzDrawPoints(A,B,M)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[below left](x,y,M)
+\tkzMarkSegments(A,M M,B)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ L.AB = line: new (z.A,z.B)
+ L.med = L.AB : mediator ()
+ z.M = L.AB.mid
+ z.x,z.y= get_points(L.med)
+\end{tkzelements}
+\begin{center}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLine(A,B)
+\tkzDrawSegments(x,y)
+\tkzDrawPoints(A,B,M)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[below left](x,y,M)
+\tkzMarkSegments(A,M M,B)
+\end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_line_mediator (end)
+
+\subsubsection{Method \Imeth{line}{equilateral}} % (fold)
+\label{ssub:method_imeth_line_equilateral}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ L.AB = line: new (z.A,z.B)
+ T.ABC = L.AB : equilateral ()
+ z.C = T.ABC.pc
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLine(A,B)
+\tkzDrawPolygon(A,B,C)
+\tkzMarkSegments(A,B B,C C,A)
+\tkzDrawPoints(A,B,C)
+\tkzMarkAngles(B,A,C C,B,A A,C,B)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ L.AB = line: new (z.A,z.B)
+ T.ABC = L.AB : equilateral ()
+ z.C = T.ABC.pc
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLine(A,B)
+ \tkzDrawPolygon(A,B,C)
+ \tkzMarkSegments(A,B B,C C,A)
+ \tkzDrawPoints(A,B,C)
+ \tkzMarkAngles(B,A,C C,B,A A,C,B)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_line_equilateral (end)
\subsubsection{Method \Imeth{line}{projection}} % (fold)
\label{ssub:example_projection_of_several_points}
@@ -746,14 +986,16 @@ z.d = point: new (5, 2)
L.ab = line: new (z.a,z.b)
z.cp,z.dp = L.ab : projection(z.c,z.d)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(a,b c,c' d,d')
-\tkzDrawPoints(a,...,d,c',d')
-\tkzLabelPoints(a,...,d,c',d')
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(a,b c,c' d,d')
+ \tkzDrawPoints(a,...,d,c',d')
+ \tkzLabelPoints(a,...,d,c',d')
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% \caption{Projection of several points}
@@ -809,23 +1051,26 @@ L.ab = C.OA : tangent_at (z.A)
z.a,z.b = L.ab.pa,L.ab.pb
-- or z.a,z.b = get_points (L.ab)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawCircle(O,A)
-\tkzDrawSegments[purple](O,A O,B O,H)
-\tkzDrawArc[red](O,A)(B)
-\tkzDrawArc[blue](O,B)(A)
-\tkzDrawLine[add = 2 and 1](A,a)
-\tkzFillAngles[teal!30,opacity=.4,,size=.5](A,C,B b,A,B A,O,H)
-\tkzMarkAngles[mark=|,size=.5](A,C,B b,A,B A,O,H H,O,B)
-\tkzDrawPoints(A,B,C,H,O)
-\tkzLabelPoints(B,H)
-\tkzLabelPoints[above](O,C)
-\tkzLabelPoints[left](A)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircle(O,A)
+ \tkzDrawSegments[purple](O,A O,B O,H)
+ \tkzDrawArc[red](O,A)(B)
+ \tkzDrawArc[blue](O,B)(A)
+ \tkzDrawLine[add = 2 and 1](A,a)
+ \tkzFillAngles[teal!30,opacity=.4,,size=.5](A,C,B b,A,B A,O,H)
+ \tkzMarkAngles[mark=|,size=.5](A,C,B b,A,B A,O,H H,O,B)
+ \tkzDrawPoints(A,B,C,H,O)
+ \tkzLabelPoints(B,H)
+ \tkzLabelPoints[above](O,C)
+ \tkzLabelPoints[left](A)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsubsection example_combination_of_methods (end)
@@ -860,63 +1105,21 @@ z.a,z.b = L.ab.pa,L.ab.pb
L.AB = line : new (z.A,z.B)
z.E,z.F = L.AB : translation (z.C,z.D)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints(A,...,F)
-\tkzLabelPoints(A,...,F)
-\tkzDrawSegments[->,red,> =latex](C,E D,F A,B) )
-\end{tikzpicture}
-\hspace*{\fill}
-\end{minipage}
-% subsubsection example_translation (end)
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,...,F)
+ \tkzLabelPoints(A,...,F)
+ \tkzDrawSegments[->,red,> =latex](C,E D,F A,B) )
+ \end{tikzpicture}
+\end{center}
-\subsubsection{Method \Imeth{line}{distance}} % (fold)
-\label{ssub:example_distance_and_projection}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\begin{tkzelements}
- z.A = point : new (0 , 0)
- z.B = point : new (5 , -2)
- z.C = point : new (3 , 3)
- L.AB = line : new (z.A,z.B)
- d = L.AB : distance (z.C)
- z.H = L.AB : projection (z.C)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(A,B C,H)
- \tkzDrawPoints(A,B,C,H)
- \tkzLabelPoints(A,B,C,H)
- \tkzLabelSegment[above left,
- draw](C,H){$CH = \tkzUseLua{d}$}
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\begin{tkzelements}
- z.A = point : new (0 , 0)
- z.B = point : new (5 , -2)
- z.C = point : new (3 , 3)
- L.AB = line : new (z.A,z.B)
- d = L.AB : distance (z.C)
- z.H = L.AB : projection (z.C)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B C,H)
-\tkzDrawPoints(A,B,C,H)
-\tkzLabelPoints(A,B,C,H)
-\tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
-\end{tikzpicture}
-\hspace*{\fill}
\end{minipage}
-% \caption{Method distance with line object}
-% subsubsection example_distance_and_projection (end)
+% subsubsection example_translation (end)
+
\subsubsection{Method \Imeth{line}{reflection} of an object} % (fold)
\label{ssub:reflection_of_object}
@@ -955,19 +1158,72 @@ z.a,z.b = L.ab.pa,L.ab.pb
T.new = L.AB : reflection (T.EFG)
z.Ep,z.Fp,z.Gp = get_points(T.new)
\end{tkzelements}
-\hspace{\fill}\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLine(A,B)
- \tkzDrawPolygon(E,F,G)
- \tkzDrawPolygon[new](E',F',G')
- \tkzDrawSegment[red,dashed](E,E')
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLine(A,B)
+ \tkzDrawPolygon(E,F,G)
+ \tkzDrawPolygon[new](E',F',G')
+ \tkzDrawSegment[red,dashed](E,E')
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection reflection_of_object (end)
+\subsubsection{Method \Imeth{line}{distance}} % (fold)
+\label{ssub:example_distance_and_projection}
+
+\begin{minipage}{0.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (5 , -2)
+ z.C = point : new (3 , 3)
+ L.AB = line : new (z.A,z.B)
+ d = L.AB : distance (z.C)
+ z.H = L.AB : projection (z.C)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,H)
+ \tkzDrawPoints(A,B,C,H)
+ \tkzLabelPoints(A,B,C,H)
+ \tkzLabelSegment[above left,
+ draw](C,H){$CH = \tkzUseLua{d}$}
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{0.5\textwidth}
+\begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (5 , -2)
+ z.C = point : new (3 , 3)
+ L.AB = line : new (z.A,z.B)
+ d = L.AB : distance (z.C)
+ z.H = L.AB : projection (z.C)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,H)
+ \tkzDrawPoints(A,B,C,H)
+ \tkzLabelPoints(A,B,C,H)
+ \tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
+ \end{tikzpicture}
+\end{center}
-\subsection{Method \Imeth{line}{apollonius} Apollonius circle MA/MB = k} % (fold)
-\label{sub:apollonius_circle_ma_mb_k}
+
+\end{minipage}
+
+% \caption{Method distance with line object}
+% subsubsection example_distance_and_projection (end)
+
+
+\subsubsection{Method \Imeth{line}{apollonius} (Apollonius circle MA/MB = k)} % (fold)
+\label{ssub:apollonius_circle_ma_mb_k}
\begin{Verbatim}
\begin{tkzelements}
@@ -984,14 +1240,15 @@ z.a,z.b = L.ab.pa,L.ab.pb
\tkzFillCircle[blue!20,opacity=.2](O,C)
\tkzDrawCircle[blue!50!black](O,C)
\tkzDrawPoints(A,B,O,C,D,P)
- \tkzLabelPoints[below right](A,B,O,C,D,P)
\tkzDrawSegments[orange](P,A P,B P,D B,D P,C)
\tkzDrawSegments[red](A,C)
\tkzDrawPoints(A,B)
\tkzLabelCircle[draw,fill=green!10,%
text width=3cm,text centered,left=24pt](O,D)(60)%
{$CA/CB=2$\\$PA/PB=2$\\$DA/DB=2$}
- \tkzMarkRightAngle[opacity=.3,fill=lightgray](O,P,C)
+ \tkzLabelPoints[below right](A,B,O,C,D)
+ \tkzLabelPoints[above](P)
+ \tkzMarkRightAngle[opacity=.3,fill=lightgray](D,P,C)
\tkzMarkAngles[mark=||](A,P,D D,P,B)
\end{tikzpicture}
\end{Verbatim}
@@ -1006,24 +1263,28 @@ z.D = C.apo : antipode (z.C)
z.P = C.apo : point (0.30)
\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzFillCircle[blue!20,opacity=.2](O,C)
-\tkzDrawCircle[blue!50!black](O,C)
-\tkzDrawPoints(A,B,O,C,D,P)
-\tkzLabelPoints[below right](A,B,O,C,D,P)
-\tkzDrawSegments[orange](P,A P,B P,D B,D P,C)
-\tkzDrawSegments[red](A,C)
-\tkzDrawPoints(A,B)
-\tkzLabelCircle[draw,fill=green!10,%
- text width=3cm,text centered,left=24pt](O,D)(60)%
- {$CA/CB=2$\\$PA/PB=2$\\$DA/DB=2$}
-\tkzMarkRightAngle[opacity=.3,fill=lightgray](O,P,C)
-\tkzMarkAngles[mark=||](A,P,D D,P,B)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzFillCircle[blue!20,opacity=.2](O,C)
+ \tkzDrawCircle[blue!50!black](O,C)
+ \tkzDrawPoints(A,B,O,C,D,P)
+ \tkzDrawSegments[orange](P,A P,B P,D B,D P,C)
+ \tkzDrawSegments[red](A,C)
+ \tkzDrawPoints(A,B)
+ \tkzLabelCircle[draw,fill=green!10,%
+ text width=3cm,text centered,left=24pt](O,D)(60)%
+ {$CA/CB=2$\\$PA/PB=2$\\$DA/DB=2$}
+ \tkzLabelPoints[below right](A,B,O,C,D)
+ \tkzLabelPoints[above](P)
+ \tkzMarkRightAngle[opacity=.3,fill=lightgray](D,P,C)
+ \tkzMarkAngles[mark=||](A,P,D D,P,B)
+ \end{tikzpicture}
+\end{center}
+
Remark: |\tkzUseLua{length(z.P,z.A)/length(z.P,z.B)}| = \tkzUseLua{length(z.P,z.A)/length(z.P,z.B)}
-% subsection apollonius_circle_ma_mb_k (end)
+% subsubsection apollonius_circle_ma_mb_k (end)
% subsection methods_from_class_line (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-matrices.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-matrices.tex
index 04b874532d..d533511fbe 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-matrices.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-matrices.tex
@@ -15,7 +15,7 @@ This \code{matrix} class has been created to avoid the need for an external libr
\begin{itemize}
-\item The first method is: (Refer to \ref{ssub:method_new})
+\item The first method is: [\ref{ssub:method_new}]
\begin{minipage}{.5\textwidth}
\begin{mybox}
@@ -33,13 +33,13 @@ This \code{matrix} class has been created to avoid the need for an external libr
\end{minipage}
-\item It is also possible to obtain a square matrix with: (Refer to \ref{ssub:method_square})
+\item It is also possible to obtain a square matrix with: [\ref{ssub:method_square}]
\begin{mybox}
|M = matrix : square (2,a,b,c,d)|
\end{mybox}
-\item In the case of a column vector: (Refer to \ref{ssub:method_vector})
+\item In the case of a column vector: [\ref{ssub:method_vector}]
\begin{minipage}{.5\textwidth}
\begin{mybox}
@@ -52,7 +52,7 @@ This \code{matrix} class has been created to avoid the need for an external libr
\end{tkzelements}
\end{minipage}
-\item Homogeneous transformation matrix (Refer to \ref{ssub:method_htm})
+\item Homogeneous transformation matrix [\ref{ssub:method_htm}]
The objective is to generate a matrix with homogeneous coordinates capable of transforming a coordinate system through rotation, translation, and scaling. To achieve this, it is necessary to define both the rotation angle, the coordinates of the new origin ans the scaling factors.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
index c8c5cccd8f..e80a292858 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
@@ -17,11 +17,11 @@
%tkzround( num, idp ) & \\
% Cramer33(a1,a2,a3,b1,b2,b3,c1,c2,c3) & \\
% Cramer22(a1,a2,b1,b2) & \\
-\Igfct{math}{length (a,b) } & point.abs(a-b) Refer to (\ref{ssub:report_de_distance}) \\
+\Igfct{math}{length (a,b) } & point.abs(a-b) [\ref{sub:report_de_distance}] \\
\Igfct{math}{islinear (z1,z2,z3) } & Are the points aligned? (z2-z1) $\parallel$ (z3-z1) ? \\
\Igfct{math}{isortho (z1,z2,z3)} & (z2-z1) $\perp$ (z3-z1) ? boolean\\
-\Igfct{math}{get\_angle (z1,z2,z3)} & the vertex is z1 Refer to (\ref{sub:get_angle}) \\
-\Igfct{math}{bisector (z1,z2,z3)} & L.Aa = bisector (z.A,z.B,z.C) from A (\ref{sub:get_angle})\\
+\Igfct{math}{get\_angle (z1,z2,z3)} & the vertex is z1 [\ref{sub:get_angle}] \\
+\Igfct{math}{bisector (z1,z2,z3)} & L.Aa = bisector (z.A,z.B,z.C) from A [\ref{sub:get_angle}] \\
\Igfct{math}{bisector\_ext (z1,z2,z3)} & L.Aa = bisector_ext (z.A,z.B,z.C) from A \\
\Igfct{math}{altitude (z1,z2,z3)} & altitude from z1 \\
\Igfct{package}{set\_lua\_to\_tex (list)} & set\_lua\_to\_tex('a','n') defines |\a| and |\n| \\
@@ -31,7 +31,7 @@
\Igfct{math}{real (v) } & apply | value /scale | \\
\Igfct{math}{angle\_normalize (an) } & to get a value between 0 and $2\pi$ \\
\Igfct{misc}{barycenter (\{z1,n1\},\{z2,n2\}, ...)} & barycenter of list of points \\
-\Igfct{math}{solve\_quadratic (a,b,c) } & gives the solution of $ax^2+bx+c =0$ a,b,c real or complex (Refer to \ref{ssub:function_solve__quadratic})\\
+\Igfct{math}{solve\_quadratic (a,b,c) } & gives the solution of $ax^2+bx+c =0$ a,b,c real or complex [\ref{ssub:function_solve__quadratic}] \\
\bottomrule
\end{tabular}
\egroup
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
index e404dc763b..0da8f16b78 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
@@ -92,7 +92,6 @@ The creation of a point is done using the following method, but there are other
This is the creation of a fixed point with coordinates 1 and 2 and which is named $A$. The notation |z.A| indicates that the coordinates will be stored in a table denoted as |z| (reference to the notation of the affixes of the complex numbers) that $A$ is the name of the point and the key allowing access to the values.
-
\begin{center}
\bgroup
\small
@@ -101,21 +100,18 @@ This is the creation of a fixed point with coordinates 1 and 2 and which is name
\begin{tabular}{lll}
\toprule
\textbf{Attributes} & \textbf{Application}& \textbf{Example}\\
- \Iattr{point}{re} & |z.A.re = 1| & Refer to (\ref{ssub:methods}) \\
- \Iattr{point}{im} & |z.A.im = 2| & Refer to (\ref{ssub:methods}) \\
+ \Iattr{point}{re} & |z.A.re = 1| & [\ref{ssub:methods}] \\
+ \Iattr{point}{im} & |z.A.im = 2| & [\ref{ssub:methods}] \\
\Iattr{point}{type} & |z.A.type = 'point'| & \\
- \Iattr{point}{argument} & |z.A.argument $\approx$ 0.78539816339745| & Refer to (\ref{ssub:example_point_attributes})\\
- \Iattr{point}{modulus} & |z.A.modulus| $\approx$ |2.2360...| =$\sqrt{5}$ & Refer to (\ref{ssub:example_point_attributes})\\
+ \Iattr{point}{argument} & |z.A.argument $\approx$ 0.78539816339745| & [\ref{ssub:example_point_attributes}] \\
+ \Iattr{point}{modulus} & |z.A.modulus| $\approx$ |2.2360...| =$\sqrt{5}$ & [\ref{ssub:example_point_attributes}] \\
\bottomrule
\end{tabular}
\egroup
\end{center}
-
-
-
\newpage
-\subsubsection{Example:point attributes} % (fold)
+\subsubsection{Example: point attributes} % (fold)
\label{ssub:example_point_attributes}
\begin{tkzelements}
@@ -189,7 +185,7 @@ Attributes of \texttt{z.M}
\end{center}
\MakeShortVerb{\|}
- \hspace*{\fill}
+
% \caption{Class Point}
% subsubsection example_point_attributes (end)
% subsection attributes_of_a_point (end)
@@ -225,19 +221,20 @@ Attributes of \texttt{z.M}
z.O = point : new ( 0 , 0 )
z.I = point : new ( 1 , 0 )
\end{tkzelements}
- \hspace{\fill}\begin{tikzpicture}
- \tkzGetNodes
- \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
- \tkzDrawCircle[dashed,red](O,A)
- \tkzPointShowCoord(A)
- \tkzDrawPoint(A)
- \tkzLabelPoint[above right](A){\normalsize $a+ib$}
- \tkzDrawX\tkzDrawY
- \tkzDrawSegment(O,A)
- \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
- \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
- \end{tikzpicture}
- \hspace{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
+ \tkzDrawCircle[dashed,red](O,A)
+ \tkzPointShowCoord(A)
+ \tkzDrawPoint(A)
+ \tkzLabelPoint[above right](A){\normalsize $a+ib$}
+ \tkzDrawX\tkzDrawY
+ \tkzDrawSegment(O,A)
+ \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
+ \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
+ \end{tikzpicture}
+\end{center}
\end{minipage}
@@ -257,37 +254,37 @@ The methods described in the following table are standard and can be found in mo
\toprule
\textbf{Functions} & \textbf{Application}& \\
\midrule
-\Igfct{point}{new(r,r)} & |z.A = point : new(1,2)| & Refer to (\ref{ssub:method_normalize}) \\
-\Igfct{point}{polar (d,an)} & |z.A = point : polar(1,math.pi/3)| & Refer to (\ref{sub:archimedes} )\\
+\Igfct{point}{new(r,r)} & |z.A = point : new(1,2)| & [\ref{ssub:method_normalize}] \\
+\Igfct{point}{polar (d,an)} & |z.A = point : polar(1,math.pi/3)| & [\ref{sub:archimedes}] \\
\Igfct{point}{polar\_deg (d,an)} & an in deg & polar coordinates an deg \\
\midrule
\textbf{Methods} & \textbf{Application}& \\
\midrule
\textbf{Points} &&\\
\midrule
-\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) & Refer to (\ref{sub:power_v2}) ; \ref{ssub:methods}) \\
+\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) & [\ref{par:power_v2} ; \ref{ssub:methods}] \\
\Imeth{point}{south(r)} & & \\
\Imeth{point}{east(r)} & & \\
\Imeth{point}{west(r)} & & \\
-\Imeth{point}{normalize()} & |z.b = z.a: normalize ()| & Refer to (\ref{ssub:method_normalize}) \\
-\Imeth{point}{get\_points (obj)} & retrieves points from the object & \\
-\Imeth{point}{orthogonal (d)} & |z.B=z.A:orthogonal(d)| & $\overrightarrow{OB}\perp \overrightarrow{OA}$ and $OB=d$\\
-\Imeth{point}{at ()} & |z.X = z.B : at (z.A)| & $\overrightarrow{OB}= \overrightarrow{AX}$ and $OB=d$\\
+\Imeth{point}{normalize()} & |z.b = z.a: normalize ()| & [\ref{ssub:method_normalize}] \\
+\Imeth{point}{get\_points (obj)} & retrieves points from the object & [\ref{ssub:object_rotation}; \ref{ssub:apollonius_circle_ma_mb_k} ] \\
+\Imeth{point}{orthogonal (d)} & |z.B=z.A:orthogonal(d)| & $\overrightarrow{OB}\perp \overrightarrow{OA}$ and $OB=d$. [\ref{ssub:orthogonal_method}]\\
+\Imeth{point}{at ()} & |z.X = z.B : at (z.A)| & $\overrightarrow{OB}= \overrightarrow{AX}$ and $OB=d$. [\ref{ssub:_imeth_point_at_method}] \\
\midrule
\textbf{Transformations} &&\\
\midrule
- \Imeth{point}{symmetry(obj)} & obj : point, line, etc. & Refer to (\ref{ssub:object_symmetry}) \\
- \Imeth{point}{rotation(an , obj)} & point, line, etc. & Refer to (\ref{ssub:object_rotation})\\
- \Imeth{point}{homothety(r,obj)} & |z.c = z.a : homothety (2,z.b)| & Refer to (\ref{sub:homothety}) \\
+ \Imeth{point}{symmetry(obj)} & obj : point, line, etc. & [\ref{ssub:object_symmetry}] \\
+ \Imeth{point}{rotation(an , obj)} & point, line, etc. & [\ref{ssub:object_rotation}] \\
+ \Imeth{point}{homothety(r,obj)} & |z.c = z.a : homothety (2,z.b)| & [\ref{sub:homothety}] \\
\midrule
\textbf{Misc.} &&\\
\midrule
- \Imeth{point}{print()} & displays the affix of the point & Refer to (\ref{ssub:object_symmetry}) \\
+ \Imeth{point}{print()} & displays the affix of the point & [\ref{ssub:object_symmetry} ]\\
\bottomrule %
\end{tabular}
\egroup
-\subsubsection{Example: method \Imeth{point}{north (d)} } % (fold)
+\subsubsection{Method \Imeth{point}{north (d)} } % (fold)
\label{ssub:example_method_imeth_point_north_d}
This function defines a point located on a vertical line passing through the given point. This function is useful if you want to report a certain distance (Refer to the following example).
@@ -320,71 +317,21 @@ If |d| is absent then it is considered equal to 1.
z.C = z.O : west ()
z.D = z.O : south ()
\end{tkzelements}
-\hspace{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C,D)
- \tkzDrawPoints(A,B,C,D,O,A')
- \tkzLabelPoints(A,B,C,D,O,A')
-\end{tikzpicture}
-\end{minipage}
-% subsubsection example_method_imeth_point_north_d (end)
-
-\subsubsection{Length transfer} % (fold)
-\label{ssub:report_de_distance}
-
-Use of |north and east| functions linked to points, to transfer lengths, Refer to (\ref{sub:length_of_a_segment})
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawPoints(A,B,C,D,O,A')
+ \tkzLabelPoints(A,B,C,D,O,A')
+ \end{tikzpicture}
+\end{center}
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 3 , 0 )
- L.AB = line : new ( z.A , z.B )
- T.ABC = L.AB : sublime ()
- z.C = T.ABC.pc
- z.D = z.B: north (length(z.B,z.C))
- z.E = z.B: east (L.AB.length)
- z.M = L.AB.mid
- z.F = z.E : north (length(z.C,z.M))
-\end{tkzelements}
-\begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C)
- \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M)
- \tkzDrawPoints(A,...,F)
- \tkzLabelPoints(A,B,E,M)
- \tkzLabelPoints[above right](C,D,F)
-\end{tikzpicture}
-\end{Verbatim}
\end{minipage}
-\begin{minipage}{.6\textwidth}
-\begin{tkzelements}
- z.A = point : new ( 0 , 0 )
- z.B = point : new ( 3 , 0 )
- L.AB = line : new ( z.A , z.B )
- T.ABC = L.AB : sublime ()
- z.C = T.ABC.pc
- z.D = z.B: north (length(z.B,z.C))
- z.E = z.B: east (L.AB.length)
- z.M = L.AB.mid
- z.F = z.E : north (length(z.C,z.M))
-\end{tkzelements}
-\hspace{\fill}
-\begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawPolygons(A,B,C)
- \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M)
- \tkzDrawPoints(A,...,F)
- \tkzLabelPoints(A,B,E,M)
- \tkzLabelPoints[above right](C,D,F)
-\end{tikzpicture}
-\end{minipage}
-% subsubsection report_de_distance (end)
+% subsubsection example_method_imeth_point_north_d (end)
-\subsubsection{Example: method \Imeth{point}{polar} } % (fold)
+\subsubsection{Method \Imeth{point}{polar} } % (fold)
\label{ssub:example_polar_method}
This involves defining a point using its modulus and argument.
@@ -402,7 +349,8 @@ This involves defining a point using its modulus and argument.
\tkzDrawSegments[new](O,A)
\tkzDrawSegments[purple](O,F)
\tkzDrawPoints(A,O,F)
- \tkzLabelPoints[below right=6pt](A,O,F)
+ \tkzLabelPoints[below right=6pt](A,O)
+ \tkzLabelPoints[above](F)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
@@ -413,16 +361,20 @@ This involves defining a point using its modulus and argument.
z.A = point: new (3, 0)
z.F = point: polar (3, math.pi/3)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(O,A)
-\tkzDrawSegments[new](O,A)
-\tkzDrawSegments[purple](O,F)
-\tkzDrawPoints(A,O,F)
-\tkzLabelPoints(A,O,F)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzDrawSegments[new](O,A)
+ \tkzDrawSegments[purple](O,F)
+ \tkzDrawPoints(A,O,F)
+ \tkzLabelPoints[below right=6pt](A,O)
+ \tkzLabelPoints[above](F)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsubsection example_polar_method (end)
@@ -431,7 +383,26 @@ This involves defining a point using its modulus and argument.
The result is a point located between the origin and the initial point at a distance of $1$ from the origin.
-\begin{minipage}{.4\textwidth}
+\begin{tkzelements}
+scale = 1.5
+z.O = point : new (0,0)
+z.A = point : new (2,1)
+z.B = z.A : normalize ()
+z.I = point : new (1,0)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegment(O,A)
+ \tkzDrawCircle(O,B)
+ \tkzDrawPoints(O,A,B,I)
+ \tkzLabelPoints(O,A)
+ \tkzLabelPoints[above](B)
+ \tkzLabelPoint[below right](I){$1$}
+ \end{tikzpicture}
+\end{center}
+
\begin{Verbatim}
\begin{tkzelements}
scale = 1.5
@@ -449,29 +420,11 @@ The result is a point located between the origin and the initial point at a dist
\tkzLabelPoint[below right](I){$1$}
\end{tikzpicture}
\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-\begin{tkzelements}
-scale = 1.5
-z.O = point : new (0,0)
-z.A = point : new (1,2)
-z.B = z.A : normalize ()
-z.I = point : new (1,0)
-\end{tkzelements}
- \hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawSegment(O,A)
-\tkzDrawCircle(O,B)
-\tkzDrawPoints(O,A,B,I)
-\tkzLabelPoints(O,A,B)
-\tkzLabelPoint[below right](I){$1$}
-\end{tikzpicture}
- \hspace*{\fill}
-\end{minipage}
+
+
% subsubsection method_normalize (end)
-\subsubsection{\Imeth{point}{Orthogonal (d)} method} % (fold)
+\subsubsection{Method \Imeth{point}{orthogonal (d)}} % (fold)
\label{ssub:orthogonal_method}
Let $O$ be the origin of the plane. The "orthogonal (d)" method is used to obtain a point $B$ from a point $A$ such that $\overrightarrow{OB}\perp \overrightarrow{OA}$ with $OB=OA$ if $d$ is empty, otherwise $OB = d$.
@@ -499,16 +452,19 @@ Let $O$ be the origin of the plane. The "orthogonal (d)" method is used to obtai
z.O = point : new ( 0,0 )
z.C = z.A : orthogonal ()
\end{tkzelements}
-\begin{tikzpicture}[gridded]
- \tkzGetNodes
- \tkzDrawSegments(O,A O,C)
- \tkzDrawPoints(O,A,B,C)
- \tkzLabelPoints[below right](O,A,B,C)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawSegments(O,A O,C)
+ \tkzDrawPoints(O,A,B,C)
+ \tkzLabelPoints[below right](O,A,B,C)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection orthogonal_method (end)
-\subsubsection{\Imeth{point}{at} method} % (fold)
+\subsubsection{Method \Imeth{point}{at}} % (fold)
\label{ssub:_imeth_point_at_method}
This method is complementary to the previous one, so you may not wish to have $\overrightarrow{OB}\perp \overrightarrow{OA}$ but $\overrightarrow{AB}\perp \overrightarrow{OA}$.
@@ -521,14 +477,16 @@ This method is complementary to the previous one, so you may not wish to have $\
z.O = point : new ( 0,0 )
-- z.B = z.B : at (z.A) -- or
z.B = z.A : orthogonal (1) : at (z.A)
+ z.E = z.A : orthogonal (1)
z.C = z.A+z.B
z.D =(z.C-z.A):orthogonal(2) : at (z.C)
\end{tkzelements}
\begin{tikzpicture}[gridded]
\tkzGetNodes
- \tkzLabelPoints[below right](O,A,B,C,D)
- \tkzDrawSegments(O,A A,B A,C C,D)
- \tkzDrawPoints(O,A,B,C,D)
+ \tkzLabelPoints[below right](O,A,C)
+ \tkzLabelPoints[above](B,D,E)
+ \tkzDrawSegments(O,A A,B A,C C,D O,E)
+ \tkzDrawPoints(O,A,B,C,D,E)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
@@ -539,20 +497,24 @@ z.B = z.A : orthogonal (1)
z.O = point : new ( 0,0 )
-- z.B = z.B : at (z.A) -- or
z.B = z.A : orthogonal (1) : at (z.A)
+z.E = z.A : orthogonal (1)
z.C = z.A+z.B
z.D =(z.C-z.A):orthogonal(2) : at (z.C)
\end{tkzelements}
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
-\tkzLabelPoints[below right](O,A,B,C,D)
-\tkzDrawSegments(O,A A,B A,C C,D)
-\tkzDrawPoints(O,A,B,C,D)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzLabelPoints[below right](O,A,C)
+ \tkzLabelPoints[above](B,D,E)
+ \tkzDrawSegments(O,A A,B A,C C,D O,E)
+ \tkzDrawPoints(O,A,B,C,D,E)
+ \end{tikzpicture}
+\end{center}
\end{minipage}
% subsubsection _imeth_point_at_method (end)
-\subsubsection{Example: \Imeth{point}{rotation of points}} % (fold)
+\subsubsection{Method \Imeth{point}{rotation} first example} % (fold)
\label{ssub:example_rotation_of_points}
The arguments are the angle of rotation in radians, and here a list of points.
@@ -565,26 +527,27 @@ The arguments are the angle of rotation in radians, and here a list of points.
z.o = point: new(6, -2)
z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
\end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(o,a o,a' o,b o,b')
- \tkzDrawPoints(a,a',b,b',o)
- \tkzLabelPoints(b,b',o)
- \tkzLabelPoints[below left](a,a')
- \tkzDrawArc(o,a)(a')
- \tkzDrawArc(o,b)(b')
- \end{tikzpicture}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(o,a o,a' o,b o,b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(b,b',o)
+ \tkzLabelPoints[below left](a,a')
+ \tkzDrawArc(o,a)(a')
+ \tkzDrawArc(o,b)(b')
+ \end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.4\textwidth}
\begin{tkzelements}
- scale = .5
+ scale = .5
z.a = point: new(0, -1)
z.b = point: new(4, 0)
z.o = point: new(6, -2)
z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
\end{tkzelements}
-\hspace*{\fill}
+
+\begin{center}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawLines(o,a o,a' o,b o,b')
@@ -594,16 +557,16 @@ The arguments are the angle of rotation in radians, and here a list of points.
\tkzDrawArc(o,a)(a')
\tkzDrawArc(o,b)(b')
\end{tikzpicture}
-\hspace*{\fill}
+\end{center}
\end{minipage}
% subsubsection example_rotation_of_points (end)
-\subsubsection{Object \Imeth{point}{rotation}} % (fold)
+\subsubsection{Method \Imeth{point}{rotation} second example} % (fold)
\label{ssub:object_rotation}
Rotate a triangle by an angle of $\pi/6$ around $O$.
\begin{minipage}{.5\textwidth}
- \begin{Verbatim}
+\begin{Verbatim}
\begin{tkzelements}
scale = .75
z.O = point : new ( -1 , -1 )
@@ -619,13 +582,12 @@ Rotate a triangle by an angle of $\pi/6$ around $O$.
T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
\end{tkzelements}
-
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
\tkzDrawPoints (A,B,C,A',B',C',O)
- \tkzLabelPoints (A,B,C,A',B',C',O)
- \tkzDrawArc[delta=0,->](O,A)(A')
+ \tkzLabelPoints (A,B,C,A',B',C',O)
+ \tkzDrawArc[delta=0,->](O,A)(A')
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
@@ -645,61 +607,68 @@ T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
\end{tkzelements}
-\hspace{\fill}\begin{tikzpicture}
+\begin{center}
+\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
\tkzDrawPoints (A,B,C,A',B',C',O)
- \tkzLabelPoints (A,B,C,A',B',C',O)
+ \tkzLabelPoints (A,B,C,A',B',C',O)
\begin{scope}
\tkzDrawArc[delta=0,->,dashed,red](O,A)(A')
\tkzDrawSegments[dashed,red](O,A O,A')
\end{scope}
-
\end{tikzpicture}
+\end{center}
\end{minipage}
% subsubsection object_rotation (end)
-\subsubsection{Object \Imeth{point}{symmetry}} % (fold)
+\subsubsection{Method \Imeth{point}{symmetry}} % (fold)
\label{ssub:object_symmetry}
+
+Example of the symmetry of an object
+
+
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- z.a = point: new(0,-1)
- z.b = point: new(2, 0)
- L.ab = line : new (z.a,z.b)
- C.ab = circle : new (z.a,z.b)
- z.o = point: new(1,1)
- z.ap,z.bp = get_points (z.o: symmetry (C.ab))
+ z.a = point: new(0,-1)
+ z.b = point: new(2, 0)
+ L.ab = line : new (z.a,z.b)
+ C.ab = circle : new (z.a,z.b)
+ z.o = point: new(1,1)
+ z.ap,z.bp = get_points (z.o: symmetry (C.ab))
\end{tkzelements}
-
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(a,b a',b')
-\tkzDrawLines(a,a' b,b')
-\tkzDrawLines[red](a,b a',b')
-\tkzDrawPoints(a,a',b,b',o)
-\tkzLabelPoints(a,a',b,b',o)
+ \tkzGetNodes
+ \tkzDrawCircles(a,b a',b')
+ \tkzDrawLines(a,a' b,b')
+ \tkzDrawLines[red](a,b a',b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(a,a',b,b',o)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\begin{tkzelements}
- z.a = point: new(0, -1)
- z.b = point: new(2, 0)
- L.ab = line : new (z.a,z.b)
- C.ab = circle : new (z.a,z.b)
- z.o = point: new(1, 1)
- z.ap,z.bp = get_points (z.o: symmetry (C.ab))
+ z.a = point: new(0, -1)
+ z.b = point: new(2, 0)
+ L.ab = line : new (z.a,z.b)
+ C.ab = circle : new (z.a,z.b)
+ z.o = point: new(1, 1)
+ z.ap,z.bp = get_points (z.o: symmetry (C.ab))
\end{tkzelements}
-\hspace{\fill}\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(a,b a',b')
-\tkzDrawLines(a,a' b,b')
-\tkzDrawLines[red](a,b a',b')
-\tkzDrawPoints(a,a',b,b',o)
-\tkzLabelPoints(a,a',b,b',o)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(a,b a',b')
+ \tkzDrawLines(a,a' b,b')
+ \tkzDrawLines[red](a,b a',b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(a,a',b,b',o)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection object_symmetry (end)
% subsection methods_of_the_class_point (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
index 3ec9e777a6..98b6ac3610 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
@@ -94,7 +94,7 @@ z.H = RP.five.proj
\midrule
\textbf{Points} &\\
\midrule
-\Imeth{regular\_polygon}{name (string)} & Refer to\ref{ssub:pentagon} \\
+\Imeth{regular\_polygon}{name (string)} & [\ref{ssub:pentagon}] \\
\bottomrule %
\end{tabular}
\egroup
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
index 80b711e46f..b144ed3e01 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
@@ -21,12 +21,13 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
\Iattr{triangle}{pb} &T.ABC.pb \\
\Iattr{triangle}{pc} &T.ABC.pc \\
\Iattr{triangle}{type} & 'triangle' \\
-\Iattr{triangle}{circumcenter} & T.ABC.circumcenter\\
+\Iattr{triangle}{circumcenter} & T.ABC.circumcenter; [\ref{ssub:example_triangle_attributes}
+]\\
\Iattr{triangle}{centroid} &T.ABC.centroid\\
\Iattr{triangle}{incenter} &T.ABC.incenter\\
\Iattr{triangle}{orthocenter} &T.ABC.orthocenter\\
\Iattr{triangle}{eulercenter} &T.ABC.eulercenter \\
-\Iattr{triangle}{spiekercenter} &T.ABC.spiekercenter \\
+\Iattr{triangle}{spiekercenter} &T.ABC.spiekercenter; [\ref{ssub:example_apollonius_circle}] \\
\Iattr{triangle}{a}& It's the length of the side opposite the first vertex \\
\Iattr{triangle}{b}& It's the length of the side opposite the second verte\\
\Iattr{triangle}{c}& It's the length of the side opposite the third vertex \\
@@ -116,7 +117,7 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (4 , 0)
- z.C = point: new (0 , 3)
+ z.C = point: new (1 , 3)
T.ABC = triangle : new (z.A,z.B,z.C)
z.O = T.ABC.circumcenter
z.I = T.ABC.incenter
@@ -129,18 +130,22 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
beta = T.ABC.beta
gamma = T.ABC.gamma
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C)
- \tkzDrawPoints(A,B,C,O,G,I,H)
- \tkzLabelPoints[below](A,B,O,G,I)
- \tkzLabelPoints[above right](H,C)
- \tkzDrawCircles(O,A)
- \tkzLabelSegment[sloped](A,B){\tkzUseLua{c}}
- \tkzLabelSegment[sloped,above](B,C){\tkzUseLua{a}}
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPoints(A,B,C,O,G,I,H)
+ \tkzDrawCircles(O,A)
+ \tkzLabelPoints[below](A,B,O,G,I)
+ \tkzLabelPoints[above right](H)
+ \tkzLabelPoints[above](C)
+ \tkzLabelSegment[sloped](A,B){\tkzUseLua{c}}
+ \tkzLabelSegment[sloped,above](B,C){\tkzUseLua{a}}
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsubsection example_triangle_attributes (end)
@@ -155,64 +160,95 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
\small
\begin{minipage}{\textwidth}
\captionof{table}{triangle methods.}\label{triangle:met}
-\begin{tabular}{ll}
+\begin{tabular}{lll}
\toprule
-\textbf{Methods} & \textbf{Comments} \\
+\textbf{Methods} & \textbf{Comments} & \\
\midrule
-\Imeth{triangle}{new} (a, b ,c) & |T.ABC = triangle : new (z.A,z.B,z.C)| \\
- ... & |T| or |T.name| with what you want for name, is possible.\\
+\Imeth{triangle}{new} (a, b ,c) & |T.ABC = triangle : new (z.A,z.B,z.C)|& [\ref{sub:triangle_attributes_angles}] \footnote{|T| or |T.name| with what you want for name, is possible.} \\
\midrule
- \textbf{Points} &\\
+ \textbf{Points} &&\\
\midrule
-\Imeth{triangle}{lemoine\_point ()} & |T.ABC : lemoine_point ()| intersection os the symmedians\\
-\Imeth{triangle}{symmedian\_point ()} & Lemoine point or the Grebe point \\
-\Imeth{triangle}{bevan\_point ()} & Circumcenter of the excentral triangle\\
-\Imeth{triangle}{mittenpunkt\_point ()} & Symmedian point of the excentral triangle\\
-\Imeth{triangle}{gergonne\_point ()} & Intersection of the three cevians that lead to the contact points \\
-\Imeth{triangle}{nagel\_point () } & Intersection of the three cevians that lead to the extouch points\\
-\Imeth{triangle}{feuerbach\_point () } & The point at which the incircle and euler circle are tangent. \\
-\Imeth{triangle}{spieker\_center ()} & Incenter of the medial triangle \\
-\Imeth{triangle}{barycenter (ka,kb,kc)} & |T.ABC: barycenter (2,1,1)| barycenter of |({A,2},{B,1},{C,1}) |\\
-\Imeth{triangle}{base (u,v) } & |z.D = T.ABC: base(1,1)| \tkzar ABDC is a parallelogram \\
-\Imeth{triangle}{projection (p) } & Projection of a point on the sides \\
-\Imeth{triangle}{euler\_points () } & Euler points of euler circle \\
-\Imeth{triangle}{nine\_points () } & 9 Points of the euler circle \\
-\Imeth{triangle}{parallelogram ()} & |z.D = T.ABC : parallelogram ()| \tkzar ABCD is a parallelogram\\
+\Imeth{triangle}{lemoine\_point ()} & |T.ABC : lemoine_point ()| intersection of the symmedians & [\ref{ssub:method_imeth_line_isosceles}]\\
+
+\Imeth{triangle}{symmedian\_point ()} & Lemoine point or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
+
+\Imeth{triangle}{lemoine\_point ()} & symmedian point or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
+
+\Imeth{triangle}{bevan\_point ()} & Circumcenter of the excentral triangle& [\ref{ssub:methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point}
+]\\
+
+\Imeth{triangle}{mittenpunkt\_point ()} & Symmedian point of the excentral triangle& [\ref{ssub:method_imeth_triangle_mittenpunkt}]\\
+
+\Imeth{triangle}{gergonne\_point ()} & Intersection of the three cevians that lead to the contact points& [\ref{ssub:gergonne_point}]\\
+
+\Imeth{triangle}{nagel\_point () } & Intersection of the three cevians that lead to the extouch points& [\ref{ssub:method_imeth_triangle_nagel__point}]\\
+
+\Imeth{triangle}{feuerbach\_point () } & The point at which the incircle and euler circle are tangent.& [\ref{ssub:method_imeth_triangle_feuerbach}]\\
+
+\Imeth{triangle}{spieker\_center ()} & Incenter of the medial triangle& [\ref{sub:apollonius_circle_v1_with_inversion}]\\
+
+\Imeth{triangle}{barycentric (ka,kb,kc)} & |T.ABC: barycentric (2,1,1)| barycenter of |({A,2},{B,1},{C,1}) |&Remark \footnote{The function \code{barycenter} is used to obtain the barycentre for any number of points }\\
+
+\Imeth{triangle}{base (u,v) } & |z.D = T.ABC: base(1,1)| \tkzar ABDC is a parallelogram & [\ref{ssub:method_imeth_triangle_base}] \\
+\Imeth{triangle}{trilinear (u,v,w) } & |z.D = T.ABC: trilinear(1,1,1)| \tkzar ABDC parallelogram & [\ref{ssub:method_imeth_triangle_trilinear}] \\
+
+\Imeth{triangle}{projection (p) } & Projection of a point on the sides &[\ref{sub:euler_relation}; \ref{ssub:method_imeth_triangle_projection}]\\
+
+\Imeth{triangle}{euler\_points () } & Euler points of euler circle & [\ref{ssub:method_imeth_triangle_euler__points}] \\
+
+\Imeth{triangle}{nine\_points () } & 9 Points of the euler circle & [\ref{ssub:method_imeth_triangle_nine__points}] \\
+
+\Imeth{triangle}{parallelogram ()} & |z.D = T.ABC : parallelogram ()| \tkzar ABCD parallelogram& [\ref{sub:director_circle}]\\
\midrule
- \textbf{Lines} &\\
+ \textbf{Lines} &&\\
\midrule
\Imeth{triangle}{altitude (n) } & |L.AHa = T.ABC : altitude () | n empty or 0 line from $A$
-\footnote{|z.Ha = L.AHa.pb| recovers the common point of the opposite side and altitude. The method |orthic| is usefull.}\\
-\Imeth{triangle}{bisector (n) } & |L.Bb = T.ABC : bisector (1) | n = 1 line from $B$ \footnote{|_,z.b = get_points(L.Bb)| recovers the common point of the opposite side and bisector. }\\
-\Imeth{triangle}{bisector\_ext(n) } & n=2 line from the third vertex.\\
-\Imeth{triangle}{symmedian\_line (n)} & Cevian with respect to Lemoine point. \\
+\footnote{|z.Ha = L.AHa.pb| recovers the common point of the opposite side and altitude. The method |orthic| is usefull. If you don't need to use the triangle object several times, you can obtain a bisector or a altitude with the function |altitude (z.A,z.B,z.C)| ; [ \ref{misc}]}& [\ref{ssub:method_imeth_triangle_altitude} ]\\
+
+\Imeth{triangle}{bisector (n) } & |L.Bb = T.ABC : bisector (1) | n = 1 line from $B$ \footnote{|_,z.b = get_points(L.Bb)| recovers the common point of the opposite side and bisector. If you don't need to use the triangle object several times, you can obtain a bisector with the function |bisector (z.A,z.B,z.C)| [\ref{misc}]}& [\ref{ssub:method_imeth_triangle_bisector}]\\
+
+\Imeth{triangle}{bisector\_ext(n) } & n=2 line from the third vertex.& [\ref{sub:harmonic_division_and_bisector}]\\
+
+\Imeth{triangle}{symmedian\_line (n)} & Cevian with respect to Lemoine point.& [\ref{ssub:method_imeth_triangle_symmedial} ; \ref{ssub:method_imeth_line_isosceles}]\\
+
\Imeth{triangle}{euler\_line () } & the line through $N$ ,$G$, $H$ and $O$ if the triangle is not equilateral
-\footnote{N center of nine points circle, G centroid, H orthocenter , O circum center } \\
-\Imeth{triangle}{antiparallel(pt,n)} & n=0 antiparallel through pt to $(BC)$, n=1 to $(AC)$ etc.\\
+\footnote{N center of nine points circle, G centroid, H orthocenter , O circum center } & [\ref{sub:hexagram}]\\
+
+\Imeth{triangle}{antiparallel(pt,n)} & n=0 antiparallel through pt to $(BC)$, n=1 to $(AC)$ etc.& [\ref{sub:antiparallel_through_lemoine_point}]\\
\midrule
- \textbf{Circles} &\\
+ \textbf{Circles} &&\\
\midrule
\Imeth{triangle}{euler\_circle ()} & C.|NP = T.ABC : euler_circle ()| \tkzar $N$ euler point
- \footnote{ The midpoint of each side of the triangle, the foot of each altitude, the midpoint of the line segment from each vertex of the triangle to the orthocenter.} \\
-\Imeth{triangle}{circum\_circle ()} & |C.OA = T.ABC : circum ()| Triangle's circumscribed circle \\
-\Imeth{triangle}{in\_circle ()} & Inscribed circle of the triangle\\
-\Imeth{triangle}{ex\_circle (n)} & Circle tangent to the three sides of the triangle ; n =1 swap ; n=2 2 swap \\
-\Imeth{triangle}{first\_lemoine\_circle ()} & The center is the midpoint between Lemoine point and the circumcenter.\footnote{
-Through the Lemoine point draw lines parallel to the triangle's sides. The points where the parallel lines intersect the sides of ABC
- then lie on a circle known as the first Lemoine circle. } \\
-\Imeth{triangle}{second\_lemoine\_circle ()} & Refer to example \ref{sub:antiparallel_through_lemoine_point}\\
-\Imeth{triangle}{spieker\_circle ()} & The incircle of the medial triangle\\
-\Imeth{triangle}{cevian\_circle ()} & Circumscribed circle of a Cevian triangle Refer to (\ref{ssub:method_imeth_triangle_cevian})\\
-\Imeth{triangle}{pedal\_circle ()} & Circumscribed circle of the podar triangle Refer to (\ref{ssub:method_imeth_triangle_pedal})\\
-\Imeth{triangle}{conway\_circle ()} & Circumscribed circle of Conway points Refer to (\ref{ssub:method_imeth_triangle_conway})\\
+ \footnote{ The midpoint of each side of the triangle, the foot of each altitude, the midpoint of the line segment from each vertex of the triangle to the orthocenter.} & [\ref{ssub:method_imeth_triangle_euler_circle}]\\
+
+\Imeth{triangle}{circum\_circle ()} & |C.OA = T.ABC : circum ()| Triangle's circumscribed circle & [\ref{ssub:method_imeth_triangle_circum_circle}] \\
+
+\Imeth{triangle}{in\_circle ()} & Inscribed circle of the triangle&
+[\ref{ssub:method_imeth_triangle_in_circle}]\\
+
+\Imeth{triangle}{ex\_circle (n)} & Circle tangent to the three sides of the triangle ; n =1 swap ; n=2 2 swap & [\ref{ssub:method_imeth_triangle_ex__circle}]\\
+
+\Imeth{triangle}{first\_lemoine\_circle ()} & The center is the midpoint between Lemoine point and the circumcenter.\footnote{Through the Lemoine point draw lines parallel to the triangle's sides. The points where the parallel lines intersect the sides of ABC then lie on a circle known as the first Lemoine circle. }& [\ref{sub:first_and_second_lemoine_circles}
+] \\
+
+\Imeth{triangle}{second\_lemoine\_circle ()} & & \ref{sub:antiparallel_through_lemoine_point}] \\
+
+\Imeth{triangle}{spieker\_circle ()} & The incircle of the medial triangle& [\ref{ssub:method_imeth_triangle_spieker__circle}]\\
+
+\Imeth{triangle}{bevan\_circle ()} & Circumscribed circle of a excentral triangle & [\ref{ssub:methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point}]\\
+
+\Imeth{triangle}{cevian\_circle ()} & Circumscribed circle of a Cevian triangle & [\ref{ssub:method_imeth_triangle_cevian}]\\
+
+\Imeth{triangle}{symmedial\_circle ()} & Circumscribed circle of a symmedial triangle & [\ref{ssub:method_imeth_triangle_symmedial}]\\
+
+\Imeth{triangle}{pedal\_circle ()} & Circumscribed circle of the podar triangle & [\ref{ssub:method_imeth_triangle_pedal}]\\
+
+\Imeth{triangle}{conway\_circle ()} & Circumscribed circle of Conway points & [\ref{ssub:method_imeth_triangle_conway}]\\
\bottomrule
\end{tabular}
\end{minipage}
\egroup
-Remark: If you don't need to use the triangle object several times, you can obtain a bisector or a altitude with the next functions
-
-|bisector (z.A,z.B,z.C)| and |altitude (z.A,z.B,z.C)| Refer to (\ref{misc})
\clearpage\newpage
\bgroup
@@ -227,29 +263,48 @@ Remark: If you don't need to use the triangle object several times, you can obta
\midrule
\textbf{Triangles} &\\
\midrule
-\Imeth{triangle}{orthic ()} & |T = T.ABC : orthic ()| triangle joining the feet of the altitudes \\
-\Imeth{triangle}{medial ()} & |T = T.ABC : medial ()| triangle with vertices at the midpoints\\
-\Imeth{triangle}{incentral ()} & Cevian triangle of the triangle with respect to its incenter \\
-\Imeth{triangle}{excentral () } & Triangle with vertices corresponding to the excenters \\
-\Imeth{triangle}{extouch ()} & Triangle formed by the points of tangency with the excircles \\
-\Imeth{triangle}{intouch () } & Contact triangle formed by the points of tangency of the incircle \\
-\Imeth{triangle}{tangential ()} & Triangle formed by the lines tangent to the circumcircle at the vertices\\
-\Imeth{triangle}{feuerbach ()} & Triangle formed by the points of tangency of the euler circle with the excircles\\
-\Imeth{triangle}{anti () }& Anticomplementary Triangle The given triangle is its medial triangle. \\
-\Imeth{triangle}{cevian (pt)} & Triangle formed with the endpoints of the three cevians with respect to |pt|. refer to (\ref{ssub:method_imeth_triangle_cevian})\\
-\Imeth{triangle}{pedal (pt)} & Triangle formed by projections onto the sides of |pt| Refer to \ref{ssub:method_imeth_triangle_pedal}\\
-\Imeth{triangle}{symmedian ()} & Triangle formed with the intersection points of the symmedians. \\
-\Imeth{triangle}{euler ()} & Triangle formed with the euler points \\
+\Imeth{triangle}{orthic ()} & |T = T.ABC : orthic ()| triangle joining the feet of the altitudes ; [\ref{ssub:method_imeth_triangle_altitude}] \\
+
+\Imeth{triangle}{medial ()} & |T = T.ABC : medial ()| triangle with vertices at the midpoints; [\ref{ssub:method_imeth_triangle_medial} ; \ref{sub:nine_points} ; \ref{ssub:method_imeth_triangle_symmedial}]\\
+
+\Imeth{triangle}{incentral ()}& Cevian triangle of the triangle with respect to its incenter. [\ref{ssub:method_incentral}] \\
+
+\Imeth{triangle}{excentral ()} & Triangle with vertices corresponding to the excenters. [\ref{ssub:method_imeth_triangle_feuerbach} ] \\
+
+\Imeth{triangle}{extouch ()} & Triangle formed by the points of tangency with the excircles. [\ref{sub:excircles} ] \\
+
+\Imeth{triangle}{intouch () } & Contact triangle formed by the points of tangency of the incircle [\ref{ssub:gergonne_point}]\\
+
+\Imeth{triangle}{contact () } & contact = intouch ; [
+\ref{ssub:gergonne_point}] \\
+
+\Imeth{triangle}{tangential ()} & Triangle formed by the lines tangent to the circumcircle at the vertices; [\ref{ssub:method_imeth_triangle_tangential}]\\
+
+\Imeth{triangle}{feuerbach ()} & Triangle formed by the points of tangency of the euler circle with the excircles; [\ref{ssub:method_imeth_triangle_feuerbach}]\\
+
+\Imeth{triangle}{anti () }& Anticomplementary Triangle The given triangle is its medial triangle.\footnote{You can use \tkzname{similar} instead of \tkzname{anti}.} ; [\ref{ssub:method_imeth_triangle_anti}] \\
+
+\Imeth{triangle}{cevian (pt)} & Triangle formed with the endpoints of the three cevians with respect to |pt|; [\ref{ssub:method_imeth_triangle_cevian}] \\
+
+\Imeth{triangle}{pedal (pt)} & Triangle formed by projections onto the sides of |pt| [\ref{ssub:method_imeth_triangle_pedal}]\\
+
+\Imeth{triangle}{symmedial ()} & Triangle formed with the intersection points of the symmedians ; [\ref{ssub:method_imeth_triangle_symmedial}] \\
+
+\Imeth{triangle}{euler ()} & Triangle formed with the euler points ; [\ref{ssub:method_imeth_triangle_euler__points}] \\
+
+\Imeth{triangle}{similar ()} & Triangle formed with straight lines parallel to the sides [\ref{ssub:method_imeth_triangle_similar}] \\
\midrule
\textbf{Ellipses} &\\
-\Imeth{triangle}{steiner\_inellipse ()} & Refer to ex. (\ref{ssub:steiner_inellipse_and_circumellipse})\\
-\Imeth{triangle}{steiner\_circumellipse ()} & Refer to ex. (\ref{ssub:steiner_inellipse_and_circumellipse})\\
-\Imeth{triangle}{euler\_ellipse ()} & Refer to ex. (\ref{sub:euler_ellipse})\\
+\Imeth{triangle}{steiner\_inellipse ()} & [ex. \ref{ssub:steiner_inellipse_and_circumellipse}] \\
+
+\Imeth{triangle}{steiner\_circumellipse ()} & [ex. \ref{ssub:steiner_inellipse_and_circumellipse}] \\
+
+\Imeth{triangle}{euler\_ellipse ()} & [ex. (\ref{sub:euler_ellipse}]\\
\midrule
\textbf{Miscellaneous} &\\
\midrule
\Imeth{triangle}{area ()} & $ \mathcal{A}$| = T.ABC: area ()|\\
-\Imeth{triangle}{barycentric\_coordinates (pt)} & Triples of numbers corresponding to masses placed at the vertices\\
+\Imeth{triangle}{barycentric\_coordinates(pt)}& Triples of numbers corresponding to masses placed at the vertices\\
\Imeth{triangle}{in\_out (pt)} & Boolean. Test if |pt| is inside the triangle\\
\Imeth{triangle}{check\_equilateral ()} & Boolean. Test if the triangle is equilateral\\
\bottomrule
@@ -259,68 +314,1146 @@ Remark: If you don't need to use the triangle object several times, you can obta
\egroup
% subsubsection methods_of_the_class_triangle (end)
+\subsubsection{Gergonne point} % (fold)
+\label{ssub:gergonne_point}
+
+In this example, some usefull methods are applied like \Imeth{triangle}{intouch} or \Imeth{triangle}{contact}.
+The points of contact of the inscribed circle (incircle) with the triangle in question are obtained.
+
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{Verbatim}
+\begin{tkzelements}
+z.a = point: new(1,0)
+z.b = point: new(6,2)
+z.c = point: new(2,5)
+T = triangle : new (z.a,z.b,z.c)
+z.g = T : gergonne_point ()
+z.i = T.incenter
+z.ta,z.tb,z.tc = get_points (T : intouch ())
+\end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c)
+ \tkzDrawSegments (a,ta b,tb c,tc)
+ \tkzDrawCircle(i,ta)
+ \tkzDrawPoints(a,b,c,g,ta,tb,tc)
+ \tkzLabelPoints(a,b,tc)
+ \tkzLabelPoints[above](c,ta)
+ \tkzLabelPoints[above left](tb)
+ \end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{tkzelements}
+z.a = point: new(1,0)
+z.b = point: new(6,2)
+z.c = point: new(2,5)
+T = triangle : new (z.a,z.b,z.c)
+z.g = T : gergonne_point ()
+z.i = T.incenter
+z.ta,z.tb,z.tc = get_points (T : intouch ())
+\end{tkzelements}
+
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c)
+ \tkzDrawSegments (a,ta b,tb c,tc)
+ \tkzDrawCircle(i,ta)
+ \tkzDrawPoints(a,b,c,g,ta,tb,tc)
+ \tkzLabelPoints(a,b,tc)
+ \tkzLabelPoints[above](c,ta)
+ \tkzLabelPoints[above left](tb)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection gergonne_point (end)
+
+\subsubsection{Method \Imeth{triangle}{Nagel\_point}} % (fold)
+\label{ssub:method_imeth_triangle_nagel__point}
+
+Let $E_a$ be the point at which the $J_a$-excircle meets the side $(BC)$ of a triangle $ABC$, and define $E_b$ and $E_c$ similarly. Then the lines $A,E_a$, $B,E_b$ and $C,E_c$ concur in the Nagel point $Na$.
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .7
+ z.A = point : new (0,0)
+ z.B = point : new (3.6,0)
+ z.C = point : new (2.8,4)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.Na = T.ABC : nagel_point ()
+ z.J_a,z.J_b,
+ z.J_c = get_points (T.ABC : excentral ())
+ z.E_a,z.E_b,
+ z.E_c = get_points (T.ABC : extouch ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,B,C)
+ \tkzDrawPoints[red,size=2](J_a,J_b,J_c)
+ \tkzClipBB
+ \tkzDrawLines[add=1.75 and 1.75,teal](A,B A,C B,C)
+ \tkzDrawCircles(J_a,E_a J_b,E_b J_c,E_c)
+ \tkzDrawSegments[dashed,gray](J_a,E_a J_b,E_b J_c,E_c)
+ \tkzDrawSegments[orange](A,E_a B,E_b C,E_c)
+ \tkzDrawPoints[red,size=2](Na,E_a,E_b,E_c)
+ \tkzLabelPoints(A,B,Na)
+ \tkzLabelPoints(E_c,J_a,J_b,J_c)
+ \tkzLabelPoints[above](E_a,E_b,C)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .7
+ z.A = point : new (0,0)
+ z.B = point : new (3.6,0)
+ z.C = point : new (2.8,4)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.Na = T.ABC : nagel_point ()
+ z.J_a,z.J_b,
+ z.J_c = get_points (T.ABC : excentral ())
+ z.E_a,z.E_b,
+ z.E_c = get_points (T.ABC : extouch ())
+\end{tkzelements}
+
+\begin{center}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,B,C)
+ \tkzDrawPoints[red,size=2](J_a,J_b,J_c)
+ \tkzClipBB
+ \tkzDrawLines[add=1.75 and 1.75,teal](A,B A,C B,C)
+ \tkzDrawCircles(J_a,E_a J_b,E_b J_c,E_c)
+ \tkzDrawSegments[dashed,gray](J_a,E_a J_b,E_b J_c,E_c)
+ \tkzDrawSegments[orange](A,E_a B,E_b C,E_c)
+ \tkzDrawPoints[red,size=2](Na,E_a,E_b,E_c)
+ \tkzLabelPoints(A,B,Na)
+ \tkzLabelPoints(E_c,J_a,J_b,J_c)
+ \tkzLabelPoints[above](E_a,E_b,C)
+\end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection method_imeth_triangle_nagel__point (end)
+
+
+\subsubsection{Method \Imeth{triangle}{mittenpunkt}} % (fold)
+\label{ssub:method_imeth_triangle_mittenpunkt}
+
+The Mittenpunkt is the symmedian point of the excentral triangle. The mittenpunkt (also called the middlespoint) of a triangle is the symmedian point of the excentral triangle, i.e., the point of concurrence of the lines from the excenters through the corresponding triangle side midpoints.
+[ \href{https://mathworld.wolfram.com/Mittenpunkt.html}{Weisstein, Eric W. "Mittenpunkt." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 1
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 6 , 0 )
+ z.C = point : new ( 4 , 6 )
+ T = triangle : new (z.A,z.B,z.C)
+ z.Ma,
+ z.Mb,
+ z.Mc = get_points (T : medial ())
+ z.Ia,z.Ib,z.Ic = get_points(T : excentral ())
+ z.Mi = T : mittenpunkt_point ()
+ T.int = T : extouch ()
+ z.Ta,z.Tb,z.Tc = get_points(T.int)
+\end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 1
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 6 , 0 )
+ z.C = point : new ( 4 , 6 )
+ T = triangle : new (z.A,z.B,z.C)
+ z.Ma,
+ z.Mb,
+ z.Mc = get_points (T : medial ())
+ z.Ia,z.Ib,z.Ic = get_points(T : excentral ())
+ z.Mi = T : mittenpunkt_point ()
+ T.int = T : extouch ()
+ z.Ta,z.Tb,z.Tc = get_points(T.int)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}[scale=.5]
+ \tkzGetNodes
+ \tkzDrawPolygons[](A,B,C Ma,Mb,Mc)
+ \tkzDrawPoints(Ma,Mb,Mc,Ia,Ib,Ic)
+ \tkzDrawPoints[red](Ta,Tb,Tc)
+ \tkzLabelPoints[below](Ib)
+ \tkzLabelPoints[above left](Ia,Ic)
+ \tkzClipBB
+ \tkzDrawLines[add=0 and 1](Ia,Ma Ib,Mb Ic,Mc)
+ \tkzDrawLines[add=1 and 1](A,B A,C B,C)
+ \tkzDrawCircles[red](Ia,Ta Ib,Tb Ic,Tc)
+ \tkzDrawPoints(B,C,A,Mi) %
+ \tkzLabelPoints(B,A)
+ \tkzLabelPoints[above](C,Mi)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tikzpicture}[scale=.5]
+ \tkzGetNodes
+ \tkzDrawPolygons[](A,B,C Ma,Mb,Mc)
+ \tkzDrawPoints(Ma,Mb,Mc,Ia,Ib,Ic)
+ \tkzDrawPoints[red](Ta,Tb,Tc)
+ \tkzLabelPoints[below](Ib)
+ \tkzLabelPoints[above left](Ia,Ic)
+ \tkzClipBB
+ \tkzDrawLines[add=0 and 1](Ia,Ma Ib,Mb Ic,Mc)
+ \tkzDrawLines[add=1 and 1](A,B A,C B,C)
+ \tkzDrawCircles[red](Ia,Ta Ib,Tb Ic,Tc)
+ \tkzDrawPoints(B,C,A,Mi)
+ \tkzLabelPoints(B,A)
+ \tkzLabelPoints[above](C,Mi)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+
+% subsubsection method_imeth_triangle_mittenpunkt (end)
+
+\subsubsection{Method \Imeth{triangle}{projection}} % (fold)
+\label{ssub:method_imeth_triangle_projection}
+
+This involves obtaining the projections of a point onto the sides of a triangle. In the following example, we are going to find the projections of a centre of an exinscribed circle.
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point: new (0 , 0)
+z.B = point: new (5 , 0)
+z.C = point: new (-.4 , 4)
+T.ABC = triangle: new (z.A,z.B,z.C)
+z.J,_ = get_points(T.ABC: ex_circle (2))
+z.X ,
+z.Y,
+z.Z = T.ABC : projection (z.J)
+\end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point: new (0 , 0)
+z.B = point: new (5 , 0)
+z.C = point: new (-.4 , 4)
+T.ABC = triangle: new (z.A,z.B,z.C)
+z.J,_ = get_points(T.ABC: ex_circle (2))
+z.X ,
+z.Y,
+z.Z = T.ABC : projection (z.J)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawArc(J,X)(Y)
+ \tkzDrawSegments[blue](J,X J,Y J,Z C,Y C,X)
+ \tkzDrawPoints(A,B,C,J,X,Y,Z)
+ \tkzLabelPoints(J,X,Y)
+ \tkzLabelPoints[above](C,B,Z)
+ \tkzLabelPoints[left](A)
+ \tkzMarkRightAngles[fill=gray!20,opacity=.4](A,Z,J A,Y,J J,X,B)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawArc(J,X)(Y)
+ \tkzDrawSegments[blue](J,X J,Y J,Z C,Y C,X)
+ \tkzDrawPoints(A,B,C,J,X,Y,Z)
+ \tkzLabelPoints(J,X,Y)
+ \tkzLabelPoints[above](C,B,Z)
+ \tkzLabelPoints[left](A)
+ \tkzMarkRightAngles[fill=gray!20,opacity=.4](A,Z,J A,Y,J J,X,B)
+ \end{tikzpicture}
+\end{center}
+\end{Verbatim}
+\end{minipage}
+
+% subsubsection method_imeth_triangle_projection (end)
+
+\subsubsection{Method \Imeth{triangle}{trilinear}} % (fold)
+\label{ssub:method_imeth_triangle_trilinear}
+
+Given a reference triangle $ABC$, the trilinear coordinates of a point $P$ with respect to $ABC$ are an ordered triple of numbers, each of which is proportional to the directed distance from $P$ to one of the side lines. Trilinear coordinates are denoted alpha:beta:gamma or (alpha,beta,gamma) and also are known as homogeneous coordinates or "trilinears." Trilinear coordinates were introduced by Plücker in 1835.
+[\href{https://mathworld.wolfram.com/TrilinearCoordinates.html}{Weisstein, Eric W. "Trilinear Coordinates." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 3 )
+T.ABC = triangle : new ( z.A , z.B , z.C )
+a = T.ABC.a
+b = T.ABC.b
+c = T.ABC.c
+z.Gp = T.ABC : trilinear (b*c,a*c,a*b)
+z.G = T.ABC : barycentric (1,1,1)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C)
+\tkzDrawPoints(A,B,C,G',G)
+\tkzLabelPoints(A,B,G')
+\tkzLabelPoints[above](C,G)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 3 )
+T.ABC = triangle : new ( z.A , z.B , z.C )
+a = T.ABC.a
+b = T.ABC.b
+c = T.ABC.c
+z.Gp = T.ABC : trilinear (b*c,a*c,a*b)
+z.G = T.ABC : barycentric (1,1,1)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPoints(A,B,C,G',G)
+ \tkzLabelPoints(A,B,G')
+ \tkzLabelPoints[above](C,G)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection method_imeth_triangle_trilinear (end)
+
+\subsubsection{Method \Imeth{triangle}{barycentric\_coordinates}} % (fold)
+\label{ssub:method_imeth_triangle_barycentric__coordinates}
+
+This method produces a triplet of coordinates which are the barycentric coordinates of a point as a function of the three points of a given triangle.
+
+\vspace{6pt}
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (1,1)
+ z.B = point: new (8,0)
+ z.C = point: new (2,5)
+ T = triangle: new(z.A,z.B,z.C)
+ z.G = T.centroid
+ ca,cb,cc = T : barycentric_coordinates (z.G)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,G)
+ \tkzLabelPoints(A,B,C,G)
+ \tkzLabelPoint(G){\pmpn{\tkzUseLua{ca}}:\pmpn{\tkzUseLua{cb}}:\pmpn{\tkzUseLua{cc}}}
+\end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = .75
+ z.A = point: new (1,1)
+ z.B = point: new (8,0)
+ z.C = point: new (2,5)
+ T = triangle: new(z.A,z.B,z.C)
+ z.G = T.centroid
+ ca,cb,cc = T : barycentric_coordinates (z.G)
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,G)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C) \tkzLabelPoint(G){\pmpn{\tkzUseLua{ca}}:\pmpn{\tkzUseLua{cb}}:\pmpn{\tkzUseLua{cc}}}
+ \end{tikzpicture}
+ \end{center}
+\end{minipage}
+
+% subsubsection method_imeth_triangle_barycentric__coordinates (end)
+
+\subsubsection{Method \Imeth{triangle}{base}} % (fold)
+\label{ssub:method_imeth_triangle_base}
+
+In the next example, the point $D$ is defined by $\overrightarrow{AD} = 1\cdot \overrightarrow{AB}+1\cdot \overrightarrow{AC}$.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .75
+ z.A = point: new (1,1)
+ z.B = point: new (8,0)
+ z.C = point: new (0,5)
+ z.X = point: new (2,2)
+ T = triangle: new(z.A,z.B,z.C)
+ z.D = T : base (1,1)
+ z.E = T : base (.5,1)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,D,C A,B,E,C)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = .75
+ z.A = point: new (1,1)
+ z.B = point: new (8,0)
+ z.C = point: new (0,5)
+ z.X = point: new (2,2)
+ T = triangle: new(z.A,z.B,z.C)
+ z.D = T : base (1,1)
+ z.E = T : base (.5,1)
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,D,C A,B,E,C)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
+ \end{tikzpicture}
+ \end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_base (end)
+
+
+\subsubsection{Method \Imeth{triangle}{euler\_points}} % (fold)
+\label{ssub:method_imeth_triangle_euler__points}
+
+The points $a$, $b$ and $c$ are the Euler points. They are the midpoints of the segments $AH$, $BH$ and $CH$.
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.N = T.eulercenter
+ z.a,
+ z.b,
+ z.c = get_points (T : euler ())
+ z.H = T.orthocenter
+ T.orthic = T: orthic()
+ z.Ha,
+ z.Hb,
+ z.Hc = get_points (T.orthic)
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawPolygons[cyan](a,b,c)
+ \tkzDrawCircle[purple](N,a)
+ \tkzDrawPoints(a,b,B,C,A,c,H)
+ \tkzDrawSegments[red](C,Hc B,Hb A,Ha)
+ \tkzLabelPoints(A,B,a,b,H)
+ \tkzLabelPoints[above](c,C)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.N = T.eulercenter
+ z.a,
+ z.b,
+ z.c = get_points (T : euler ())
+ z.H = T.orthocenter
+ T.orthic = T: orthic()
+ z.Ha,
+ z.Hb,
+ z.Hc = get_points (T.orthic)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawPolygons[cyan](a,b,c)
+ \tkzDrawCircle[purple](N,a)
+ \tkzDrawPoints(a,b,B,C,A,c,H)
+ \tkzDrawSegments[red](C,Hc B,Hb A,Ha)
+ \tkzLabelPoints(A,B,a,b,H)
+ \tkzLabelPoints[above](c,C)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+% subsubsection method_imeth_triangle_euler__points (end)
+
+\subsubsection{Method \Imeth{triangle}{nine\_points}} % (fold)
+\label{ssub:method_imeth_triangle_nine__points}
+
+This method gives the nine main points belonging to the Euler circle: in order, first the midpoints of the sides of the triangle, then the feet of the altitudes and finally the three Euler points. Refer to the last example.
+In the next example, we look for the centre of gravity in two different ways: the first uses the \code{trilinear} method, the second the \code{barycentric} method.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 1.5
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.N = T.eulercenter
+ z.e1,
+ z.e2,
+ z.e3,
+ z.e4,
+ z.e5,
+ z.e6,
+ z.e7,
+ z.e8,
+ z.e9 = T : nine_points ()
+\end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 1.5
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.N = T.eulercenter
+ z.e1,
+ z.e2,
+ z.e3,
+ z.e4,
+ z.e5,
+ z.e6,
+ z.e7,
+ z.e8,
+ z.e9 = T : nine_points ()
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle[purple](N,e1)
+ \tkzDrawPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9)
+ \tkzLabelPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9)
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle[purple](N,e1)
+ \tkzDrawPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9)
+ \tkzLabelPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+% subsubsection method_imeth_triangle_nine__points (end)
+
+\subsubsection{Method \Imeth{triangle}{altitude}} % (fold)
+\label{ssub:method_imeth_triangle_altitude}
+
+There are several methods to obtain one or more altitudes of a triangle. One possible method is the \Imeth{triangle}{orthic} method. This method allows for defining the \code{orthic} triangle whose vertices are the feet of the altitudes from each vertex. If only one altitude is needed, one can use the \code{altitude(n)} method. The numeric value $n$ can be $0$, $1$, or $2$. By default, if it is absent, it is considered to be $0$. Considering the triangle $ABC$, $n=0$ means no cyclic permutation of the vertices, and the altitude will be from the first point, here $A$. If $n=1$, the point trio $BCA$ is considered, and the altitude will be from $B$. For $n=2$, the altitude will be from $C$.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.H = T.orthocenter
+ L.HA = T : altitude ()
+ L.HC = T :altitude (2)
+ z.Hc = L.HC.pb
+ z.Ha = L.HA.pb
+ z.a,z.b,z.c = get_points (T : orthic ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](a,b,c)
+ \tkzDrawPoints(A,B,C,H)
+ \tkzDrawSegments[red](C,Hc A,Ha)
+ \tkzLabelPoints(A,B,H)
+ \tkzLabelPoints[font=\small](Hc)
+ \tkzLabelPoints[font=\small,above](Ha,C)
+ \tkzMarkRightAngles[fill = gray!30,opacity=.4](B,Hc,C A,Ha,C)
+ \end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ z.H = T.orthocenter
+ L.HA = T : altitude ()
+ L.HC = T : altitude (2)
+ z.Hc = L.HC.pb
+ z.Ha = L.HA.pb
+ z.a,z.b,z.c = get_points (T : orthic ())
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](a,b,c)
+ \tkzDrawPoints(A,B,C,H)
+ \tkzDrawSegments[red](C,Hc A,Ha)
+ \tkzLabelPoints(A,B,H)
+ \tkzLabelPoints[font=\small](Hc)
+ \tkzLabelPoints[font=\small,above](Ha,C)
+ \tkzMarkRightAngles[fill = gray!30,opacity=.4](B,Hc,C A,Ha,C)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsubsection method_imeth_triangle_altitude (end)
+
+\subsubsection{Method \Imeth{triangle}{bisector}} % (fold)
+\label{ssub:method_imeth_triangle_bisector}
+
+There are several methods to obtain one or more bisectors of a triangle. One possible method is the \Imeth{triangle}{incentral} method. This method allows for defining the \code{incentral} triangle whose vertices are the feet of the bisectors from each vertex. If only one bisector is needed, one can use the \code{bisector(n)} method. The numeric value $n$ can be $0$, $1$, or $2$. By default, if it is absent, it is considered to be $0$. Considering the triangle $ABC$, $n=0$ means no cyclic permutation of the vertices, and the bisector will be from the first point, here $A$. If $n=1$, the point trio $BCA$ is considered, and the bisector will be from $B$. For $n=2$, the bisector will be from $C$.
+
+\vspace{6pt}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (3 , 2)
+ z.C = point : new (2 , 5)
+ T.ABC = triangle : new ( z.A , z.B , z.C )
+ L.AE = T.ABC : bisector ()
+ z.E = L.AE.pb
+ z.F = T.ABC : bisector (1).pb
+ z.a,z.b,z.c = get_points (T.ABC : incentral ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](a,b,c)
+ \tkzDrawLines(A,B A,C A,E B,F)
+ \tkzDrawPoints(A,B,C,a,b,c)
+ \tkzLabelPoints(A,B,c)
+ \tkzLabelPoints[above](C,b,a)
+ \tkzMarkAngles[mark=|](B,A,a a,A,C)
+ \tkzMarkAngles[mark=||](C,B,b b,B,A)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (3 , 2)
+ z.C = point : new (2 , 5)
+ T.ABC = triangle : new ( z.A , z.B , z.C )
+ L.AE = T.ABC : bisector ()
+ z.E = L.AE.pb
+ z.F = T.ABC : bisector (1).pb
+ z.a,z.b,z.c = get_points (T.ABC : incentral ())
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](a,b,c)
+ \tkzDrawLines(A,B A,C A,E B,F)
+ \tkzDrawPoints(A,B,C,a,b,c)
+ \tkzLabelPoints(A,B,c)
+ \tkzLabelPoints[above](C,b,a)
+ \tkzMarkAngles[cyan,mark=|,size=.75](B,A,a a,A,C)
+ \tkzMarkAngles[mark=||,size=.5](C,B,b b,B,A)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_bisector (end)
+
+%%%%%% Circles %%%%%%
+
+\subsubsection{Method \Imeth{triangle}{euler\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_euler_circle}
+
+The nine-point circle, also called Euler's circle or the Feuerbach circle, is the circle that passes through the perpendicular feet $H_A, H_B, and H_C$ dropped from the vertices of any reference triangle DeltaABC on the sides opposite them. Euler showed in 1765 that it also passes through the midpoints$ M_A, M_B, M_C$ of the sides of DeltaABC. By Feuerbach's theorem, the nine-point circle also passes through the midpoints $E_A, E_B, and E_C$ of the segments that join the vertices and the orthocenter $H$. These points are commonly referred to as the Euler points.
+\href{https://mathworld.wolfram.com/Nine-PointCircle.html}{Weisstein, Eric W. "Nine-Point Circle." From MathWorld--A Wolfram Web Resource.}
+
+\vspace{6pt}
+There are several ways of obtaining the Euler circle. The first would be to use an attribute of the triangle to determine the centre. This centre is defined by |z.N = T.eulercenter|. Next, the circle passes through the midpoint of one of the sides. IF this circle is useful later on, it is best to define it using the \code{euler\_circle} method.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.euler = T : euler_circle ()
+ z.N,z.K = get_points (C.euler)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle(N,K)
+ \tkzDrawPoints(A,B,C,N,K)
+ \tkzLabelPoints(A,B,N)
+ \tkzLabelPoints[above](C,K)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.euler = T : euler_circle ()
+ z.N,z.K = get_points (C.euler)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle(N,K)
+ \tkzDrawPoints(A,B,C,N,K)
+ \tkzLabelPoints(A,B,N)
+ \tkzLabelPoints[above](C,K)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_euler_circle (end)
+
+\subsubsection{Method \Imeth{triangle}{circum\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_circum_circle}
+
+To obtain the circumscribed circle, simply use the \code{T.circumcenter} attribute, but if it is necessary to determine the circle then the method is \code{circum\_circle}.
-\subsubsection{Méthodes \Imeth{triangle}{cevian} et \Imeth{triangle}{cevian\_circle}} % (fold)
-\label{ssub:method_imeth_triangle_cevian}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 2
- z.a = point: new (1,2)
- z.b = point: new (5,1)
- z.c = point: new (3,5)
- T = triangle: new (z.a,z.b,z.c)
- z.i = T.orthocenter
- T.cevian = T : cevian (z.i)
- z.ta,z.tb,z.tc = get_points (T.cevian)
- C.cev = T : cevian_circle (z.i)
- z.w = C.cev.center
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.circum = T : circum_circle ()
+ z.O,z.K = get_points (C.circum)
\end{tkzelements}
\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle(O,K)
+ \tkzDrawPoints(A,B,C,O,K)
+ \tkzLabelPoints(A,B,O)
+ \tkzLabelPoints[above](C,K)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.circum = T : circum_circle ()
+ z.O,z.K = get_points (C.circum)
+\end{tkzelements}
+
+\begin{center}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawCircle(O,K)
+ \tkzDrawPoints(A,B,C,O,K)
+ \tkzLabelPoints(A,B,O)
+ \tkzLabelPoints[above](C,K)
+\end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_circum_circle (end)
+
+\subsubsection{Method \Imeth{triangle}{in\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_in_circle}
+
+An incircle is an inscribed circle of a polygon, i.e., a circle that is tangent to each of the polygon's sides. The center $I$ of the incircle is called the incenter, and the radius $r$ of the circle is called the inradius.
+
+The incenter is the point of concurrence of the triangle's angle bisectors. In addition, the points $M_A, M_B, and M_C$ of intersection of the incircle with the sides of $ABC$ are the polygon vertices of the pedal triangle [\ref{ssub:method_imeth_triangle_pedal}] taking the incenter as the pedal point (c.f. tangential triangle [\ref{ssub:method_imeth_triangle_medial}]). This triangle is called the contact triangle.
+
+[\href{https://mathworld.wolfram.com/Incircle.html}{Weisstein, Eric W. "Incircle." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+
+\begin{tkzelements}
+ scale = 2
+ z.A = point : new (0 , 0)
+ z.B = point : new (5 , 0)
+ z.C = point : new (1 , 3)
+ T.ABC = triangle : new ( z.A , z.B , z.C )
+ z.E = T.ABC : bisector ().pb
+ z.F = T.ABC : bisector (1).pb
+ z.G = T.ABC : bisector (2).pb
+ C.IH = T.ABC : in_circle ()
+ z.I,z.H = get_points (C.IH)
+\end{tkzelements}
+\begin{tikzpicture}%
+ [ new/.style ={ color = orange },
+ one/.style = { new,/tkzmkangle/size=.5 },
+ two/.style = { new,/tkzmkangle/size=.6 },
+ l/.style = { /tkzmkangle/arc=l },
+ ll/.style = { /tkzmkangle/arc=ll },
+ lll/.style = { /tkzmkangle/arc=lll }]
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C)
+\tkzDrawSegments[new](A,E B,F C,G)
+ \tkzDrawSegments[dashed,add=0 and .5](I,H)
+ \tkzDrawPoints(A,B,C,E,F,G,I)
+ \tkzDrawCircle(I,H)
+ \tkzDrawPoints(I,A,B,C,H)
+\begin{scope}[one]
+ \tkzMarkAngles[l](B,A,E)
+ \tkzMarkAngles[ll](C,B,F)
+ \tkzMarkAngles[lll](A,C,G)
+\end{scope}
+\begin{scope}[two]
+ \tkzMarkAngles[l](E,A,C)
+ \tkzMarkAngles[ll](F,B,A)
+ \tkzMarkAngles[lll](G,C,B)
+\end{scope}
+\tkzLabelPoints(A,B,I)
+\tkzLabelPoints[above](C,H)
+\end{tikzpicture}
+
+
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (5 , 0)
+ z.C = point : new (1 , 3)
+ T.ABC = triangle : new(z.A,z.B,z.C)
+ z.E = T.ABC : bisector ().pb
+ z.F = T.ABC : bisector (1).pb
+ z.G = T.ABC : bisector (2).pb
+ C.IH = T.ABC : in_circle ()
+ z.I,z.H = get_points (C.IH)
+\end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tikzpicture}%
+ [ new/.style ={color = orange },
+ one/.style = { new,/tkzmkangle/size=.5 },
+ two/.style = { new,/tkzmkangle/size=.6 },
+ l/.style = { /tkzmkangle/arc=l },
+ ll/.style = { /tkzmkangle/arc=ll },
+ lll/.style = { /tkzmkangle/arc=lll }]
\tkzGetNodes
-\tkzDrawPolygons(a,b,c ta,tb,tc)
-\tkzDrawSegments(a,ta b,tb c,tc)
-\tkzDrawPoints(a,b,c,i,ta,tb,tc)
-\tkzLabelPoints(a,b,c,i)
-\tkzDrawCircles(w,ta)
+\tkzDrawPolygon(A,B,C)
+\tkzDrawSegments[new](A,E B,F C,G)
+\tkzDrawSegments[dashed,add=0 and .5](I,H)
+\tkzDrawPoints(A,B,C,E,F,G,I)
+\tkzDrawCircle(I,H)
+\tkzDrawPoints(I,A,B,C,H)
+\begin{scope}[one]
+ \tkzMarkAngles[l](B,A,E)
+ \tkzMarkAngles[ll](C,B,F)
+ \tkzMarkAngles[lll](A,C,G)
+\end{scope}
+\begin{scope}[two]
+ \tkzMarkAngles[l](E,A,C)
+ \tkzMarkAngles[ll](F,B,A)
+ \tkzMarkAngles[lll](G,C,B)
+\end{scope}
+\tkzLabelPoints(A,B,I)
+\tkzLabelPoints[above](C,H)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
+
+
+% subsubsection method_imeth_triangle_in_circle (end)
+
+\subsubsection{Method \Imeth{triangle}{ex\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_ex__circle}
+
+Given a triangle, extend two sides in the direction opposite their common vertex. The circle tangent to these two lines and to the other side of the triangle is called an excircle, or sometimes an escribed circle. The center of the excircle is called the excenter and lies on the external angle bisector of the opposite angle.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+z.A = point: new (0 , 0)
+z.B = point: new (5 , 0)
+z.C = point: new (-.4 , 4)
+T.ABC = triangle: new (z.A,z.B,z.C)
+z.I,_ = get_points(T.ABC: ex_circle ())
+z.J,_ = get_points(T.ABC: ex_circle (1))
+z.K,_ = get_points(T.ABC: ex_circle (2))
+z.Xk ,
+z.Yk,
+z.Zk = T.ABC : projection (z.K)
+z.Xi ,
+z.Yi,
+z.Zi = T.ABC : projection (z.I)
+z.Xj ,
+z.Yj,
+z.Zj = T.ABC : projection (z.J)
+\end{tkzelements}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .5
+z.A = point: new (0 , 0)
+z.B = point: new (5 , 0)
+z.C = point: new (-.4 , 4)
+T.ABC = triangle: new (z.A,z.B,z.C)
+z.I,_ = get_points(T.ABC: ex_circle ())
+z.J,_ = get_points(T.ABC: ex_circle (1))
+z.K,_ = get_points(T.ABC: ex_circle (2))
+z.Xk ,
+z.Yk,
+z.Zk = T.ABC : projection (z.K)
+z.Xi ,
+z.Yi,
+z.Zi = T.ABC : projection (z.I)
+z.Xj ,
+z.Yj,
+z.Zj = T.ABC : projection (z.J)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawArc(K,Xk)(Yk)
+ \tkzDrawArc(I,Yi)(Zi)
+ \tkzDrawArc(J,Zj)(Yj)
+ \tkzDrawSegments[blue](K,Xk K,Yk K,Zk C,Yk C,Xk I,Xi J,Yj)
+ \tkzDrawPoints(A,B,C,I,J,K,Xk,Yk,Zk,Xi,Yj)
+ \tkzLabelPoints(K,Xk,Yk)
+ \tkzLabelPoints[above](C,B,Zk,I,J)
+ \tkzLabelPoints[left](A)
+ \tkzMarkRightAngles[fill=gray!20,opacity=.4](A,Zk,K A,Yk,K K,Xk,B)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawArc(K,Xk)(Yk)
+ \tkzDrawArc(I,Yi)(Zi)
+ \tkzDrawArc(J,Zj)(Yj)
+ \tkzDrawSegments[blue](K,Xk K,Yk K,Zk C,Yk C,Xk I,Xi J,Yj)
+ \tkzDrawPoints(A,B,C,I,J,K,Xk,Yk,Zk,Xi,Yj)
+ \tkzLabelPoints(K,Xk,Yk)
+ \tkzLabelPoints[above](C,B,Zk,I,J)
+ \tkzLabelPoints[left](A)
+ \tkzMarkRightAngles[fill=gray!20,opacity=.4](A,Zk,K A,Yk,K K,Xk,B)
+ \end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+% subsubsection method_imeth_triangle_ex__circle (end)
+
+\subsubsection{Method \Imeth{triangle}{spieker\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_spieker__circle}
+
+In geometry, the incircle of the medial triangle of a triangle is the Spieker circle. Its center is the Spieker center.
+
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 1.5
+ z.A = point: new (1,1)
+ z.B = point: new (5,1)
+ z.C = point: new (2.2,4)
+ T = triangle: new (z.A,z.B,z.C)
+ C.first_lemoine = T:spieker_circle()
+ z.S,z.w = get_points( C.first_lemoine )
+ z.Ma,z.Mb,z.Mc = get_points(T : medial ())
+ z.N = T : nagel_point ()
+ z.Qa = midpoint(z.A,z.N)
+ z.Qb = midpoint(z.B,z.N)
+ z.Qc = midpoint(z.C,z.N)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C Qa,Qb,Qc)
+ \tkzDrawPolygons[red](Ma,Mb,Mc)
+ \tkzDrawCircles[red](S,w)
+ \tkzDrawSegments[dashed](N,A N,B N,C)
+ \tkzDrawPoints(A,B,C,S,w,Ma,Mb,Mc,Qa,Qb,Qc,N)
+ \tkzLabelPoints(A,B,S,w,Mc,N)
+ \tkzLabelPoints[above](C,Ma,Mb,Qa,Qb,Qc)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
\begin{tkzelements}
-scale = 2
-z.a = point: new (1,2)
-z.b = point: new (5,1)
-z.c = point: new (3,5)
-T = triangle: new (z.a,z.b,z.c)
-z.i = T.orthocenter
-T.cevian = T : cevian (z.i)
-z.ta,z.tb,z.tc = get_points (T.cevian)
-C.cev = T : cevian_circle (z.i)
-z.w = C.cev.center
+ z.A = point: new (1,1)
+ z.B = point: new (5,1)
+ z.C = point: new (2.2,4)
+ T = triangle: new (z.A,z.B,z.C)
+ C.first_lemoine = T:spieker_circle()
+ z.S,z.w = get_points( C.first_lemoine )
+ z.Ma,z.Mb,z.Mc = get_points(T : medial ())
+ z.N = T : nagel_point ()
+ z.Qa = midpoint(z.A,z.N)
+ z.Qb = midpoint(z.B,z.N)
+ z.Qc = midpoint(z.C,z.N)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C Qa,Qb,Qc)
+ \tkzDrawPolygons[red](Ma,Mb,Mc)
+ \tkzDrawCircles[red](S,w)
+ \tkzDrawSegments[dashed](N,A N,B N,C)
+ \tkzDrawPoints(A,B,C,S,w,Ma,Mb,Mc,Qa,Qb,Qc,N)
+ \tkzLabelPoints(A,B,S,w,Mc,N)
+ \tkzLabelPoints[above](C,Ma,Mb,Qa,Qb,Qc)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+
+% subsubsection method_imeth_triangle_spieker__circle (end)
+
+\subsubsection{Methods \Imeth{triangle}{cevian} and \Imeth{triangle}{cevian\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_cevian}
+
+A Cevian is a line segment which joins a vertex of a triangle with a point on the opposite side (or its extension). The condition for three general Cevians from the three vertices of a triangle to concur is known as Ceva's theorem.
+
+Picking a Cevian point $P$ in the interior of a triangle $ABC$ and drawing Cevians from each vertex through $P$ to the opposite side produces a set of three intersecting Cevians $APa$, $BPb$, and $CPc$ with respect to that point. The triangle $PaPbPc$ is known as the Cevian triangle of $ABC$ with respect to $P$, and the circumcircle of $PaPbPc$ is similarly known as the Cevian circle. [\href{https://mathworld.wolfram.com/CevianTriangle.html}{Weisstein, Eric W. "Cevian Triangle." From MathWorld--A Wolfram Web Resource.}]
+
+
+\vspace{6pt}
+
+\begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (0,0)
+ z.B = point: new (4,0)
+ z.C = point: new (1.8,3)
+ T.ABC = triangle: new(z.A,z.B,z.C)
+ z.Q = point : new (1,-0.4)
+ z.P = point : new (2,1)
+ T.cevian = T.ABC : cevian (z.Q)
+ z.Qa,z.Qb,z.Qc = get_points (T.cevian)
+ T.cevian = T.ABC : cevian (z.P)
+ z.Pa,z.Pb,z.Pc = get_points (T.cevian)
+ C.cev = T.ABC : cevian_circle (z.P)
+ z.w = C.cev.center
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[cyan](A,B,C)
+ \tkzDrawSegments[cyan](A,Qb B,Qa)
+ \tkzDrawSegments[red](A,Qa B,Qb C,Q)
+ \tkzDrawSegments[blue](A,Pa B,Pb C,Pc)
+ \tkzDrawCircles(w,Pa)
+ \tkzDrawPoints(A,B,C,Qa,Qb,Qc,P,Q,Pa,Pb,Pc)
+ \tkzLabelPoints(A,B,P,Q,Pc)
+ \tkzLabelPoints[above](C,Qc)
+ \tkzLabelPoints[left](Qb,Pb)
+ \tkzLabelPoints[right](Qa,Pa)
+ \end{tikzpicture}
+\end{center}
+
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (0,0)
+ z.B = point: new (4,0)
+ z.C = point: new (1.8,3)
+ T.ABC = triangle: new(z.A,z.B,z.C)
+ z.Q = point : new (1,-0.4)
+ z.P = point : new (2,1)
+ T.cevian = T.ABC : cevian (z.Q)
+ z.Qa,z.Qb,z.Qc = get_points (T.cevian)
+ T.cevian = T.ABC : cevian (z.P)
+ z.Pa,z.Pb,z.Pc = get_points (T.cevian)
+ C.cev = T.ABC : cevian_circle (z.P)
+ z.w = C.cev.center
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
-\tkzDrawPolygons(a,b,c ta,tb,tc)
-\tkzDrawSegments(a,ta b,tb c,tc)
-\tkzDrawPoints(a,b,c,i,ta,tb,tc)
-\tkzLabelPoints(a,b,c,i)
-\tkzDrawCircles(w,ta)
+\tkzDrawPolygons[cyan](A,B,C)
+\tkzDrawSegments[cyan](A,Qb B,Qa)
+\tkzDrawSegments[red](A,Qa B,Qb C,Q)
+\tkzDrawSegments[blue](A,Pa B,Pb C,Pc)
+\tkzDrawCircles(w,Pa)
+\tkzDrawPoints(A,B,C,Qa,Qb,Qc,P,Q,Pa,Pb,Pc)
+\tkzLabelPoints(A,B,P,Q,Pc)
+\tkzLabelPoints[above](C,Qc)
+\tkzLabelPoints[left](Qb,Pb)
+\tkzLabelPoints[right](Qa,Pa)
\end{tikzpicture}
+\end{Verbatim}
\end{minipage}
+
% subsubsection method_imeth_triangle_cevian (end)
-\subsubsection{Méthodes \Imeth{triangle}{pedal} et \Imeth{triangle}{pedal\_circle}} % (fold)
+\subsubsection{Methods \Imeth{triangle}{pedal} and \Imeth{triangle}{pedal\_circle}} % (fold)
\label{ssub:method_imeth_triangle_pedal}
+Given a point $P$, the pedal triangle of $P$ is the triangle whose polygon vertices are the feet of the perpendiculars from $P$ to the side lines.
+
+\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
z.A = point: new(0,0)
z.B = point: new(5,0)
z.C = point: new(1.5,3)
- z.O = point: new (2,1)
+ z.O = point: new (2,1)
T.ABC = triangle: new (z.A,z.B,z.C)
T.pedal = T.ABC : pedal (z.O)
z.E,z.F,z.G = get_points(T.pedal)
@@ -334,7 +1467,8 @@ z.w = C.cev.center
\tkzDrawPolygon[red](E,F,G)
\tkzDrawCircle(w,T)
\tkzDrawPoints(A,B,C,E,F,G,O)
- \tkzLabelPoints(A,B,C,E,F,G)
+ \tkzLabelPoints(A,B,G)
+ \tkzLabelPoints[above](C,E,F)
\tkzDrawSegments(O,E O,F O,G)
\end{tikzpicture}
\end{Verbatim}
@@ -344,7 +1478,7 @@ z.w = C.cev.center
z.A = point: new(0,0)
z.B = point: new(5,0)
z.C = point: new(1.5,3)
- z.O = point: new (2,1)
+ z.O = point: new (2,1)
T.ABC = triangle: new (z.A,z.B,z.C)
T.pedal = T.ABC : pedal (z.O)
z.E,z.F,z.G = get_points(T.pedal)
@@ -352,23 +1486,28 @@ z.w = C.cev.center
z.w = C.pedal.center
z.T = C.pedal.through
\end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C)
- \tkzDrawPolygon[red](E,F,G)
- \tkzDrawCircle(w,T)
- \tkzDrawPoints(A,B,C,E,F,G,O)
- \tkzLabelPoints(A,B,C,E,F,G)
- \tkzDrawSegments(O,E O,F O,G)
- \end{tikzpicture}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](E,F,G)
+ \tkzDrawCircle(w,T)
+ \tkzDrawPoints(A,B,C,E,F,G,O)
+ \tkzLabelPoints(A,B,G)
+ \tkzLabelPoints[above](C,E,F)
+ \tkzDrawSegments(O,E O,F O,G)
+ \end{tikzpicture}
+ \end{center}
+
\end{minipage}
% subsubsection method_imeth_triangle_pedal (end)
-\subsubsection{Méthodes \Imeth{triangle}{conway\_points} et \Imeth{triangle}{conway\_circle}} % (fold)
+\subsubsection{Methods \Imeth{triangle}{conway\_points} and \Imeth{triangle}{conway\_circle}} % (fold)
\label{ssub:method_imeth_triangle_conway}
-En géométrie plane, le théorème du cercle de Conway stipule que lorsque les côtés se rencontrant à chaque sommet d'un triangle sont prolongés par la longueur du côté opposé, les six points d'extrémité des trois segments de droite résultants se trouvent sur un cercle dont le centre est le centre d'incidence du triangle.
+In plane geometry, Conway's circle theorem states that when the sides meeting at each vertex of a triangle are extended by the length of the opposite side, the six endpoints of the three resulting line segments lie on a circle whose centre is the centre of incidence of the triangle.
+\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
@@ -424,9 +1563,557 @@ En géométrie plane, le théorème du cercle de Conway stipule que lorsque les
% subsubsection methode_imeth_triangle_conway (end)
+\subsubsection{Methods \Imeth{triangle}{bevan\_circle} and \Imeth{triangle}{bevan\_point} } % (fold)
+\label{ssub:methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .5
+ z.A = point: new (1,1)
+ z.B = point: new (6,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.bevan = T : bevan_circle ()
+ z.c,z.t = get_points (C.bevan)
+ -- or z.c = T : bevan_point ()
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawCircle(c,t)
+ \tkzDrawPoints(A,B,C,c,t)
+ \tkzLabelPoints(A,B,c,t)
+ \tkzLabelPoints[above](C)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =.5
+ z.A = point: new (1,1)
+ z.B = point: new (6,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ C.bevan = T : bevan_circle ()
+ z.c,z.t = get_points (C.bevan)
+ -- or z.c = T : bevan_point ()
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawCircle(c,t)
+ \tkzDrawPoints(A,B,C,c,t)
+ \tkzLabelPoints(A,B,c,t)
+ \tkzLabelPoints[above](C)
+ \end{tikzpicture}
+ \end{center}
+
+\end{minipage}
+
+% subsubsection methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point (end)
+
+
+
+%%%%%% Triangles %%%%%
+
+
+
+\subsubsection{Method \Imeth{triangle}{feuerbach} and method \Imeth{triangle}{feuerbach\_point}} % (fold)
+\label{ssub:method_imeth_triangle_feuerbach}
+
+The Feuerbach triangle is the triangle formed by the three points of tangency of the nine-point circle with the excircles. (The fact that the excircles touch the nine-point circle is known as Feuerbach's theorem.)
+Refer to \href{https://mathworld.wolfram.com/FeuerbachTriangle.html}{Weisstein, Eric W. "Feuerbach Triangle." From MathWorld--A Wolfram Web Resource.}.
+
+The exinscribed circles of a triangle are tangent to the circle of the nine points of a triangle at points which form the \code{Feuerbach} triangle ($FaFbFc$). The inscribed circle and the circle of nine points are tangent at a point called the Feurerbach point $F$.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+\begin{tkzelements}
+ scale = .8
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ z.N = T.ABC.eulercenter
+ z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () )
+ z.F = T.ABC : feuerbach_point ()
+ z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () )
+ z.I = T.ABC.incenter
+ z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ())
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPoints(Ja,Jb,Jc)
+\tkzClipBB
+\tkzFillCircles[green!30,,opacity=.5](N,Fa)
+\tkzFillCircles[lightgray,,opacity=.5](I,F)
+\tkzDrawLines[add=3 and 3](A,B A,C B,C)
+\tkzDrawCircles(Ja,Fa Jb,Fb Jc,Fc N,Fa N,F I,F)
+\tkzDrawPoints(A,B,C,F,Fa,Fb,Fc,N,I,Ia,Ib,Ic)
+\tkzLabelPoints(N,A,B,Ia,Ib,Ic)
+\tkzLabelPoints[above](Fa,Fb,Fc,F,I,C)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+
+\begin{tkzelements}
+ scale = .7
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ z.N = T.ABC.eulercenter
+ z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () )
+ z.F = T.ABC : feuerbach_point ()
+ z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () )
+ z.I = T.ABC.incenter
+ z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ())
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(Ja,Jb,Jc)
+ \tkzClipBB
+ \tkzFillCircles[green!30,,opacity=.5](N,Fa)
+ \tkzFillCircles[lightgray,,opacity=.5](I,F)
+ \tkzDrawLines[add=3 and 3](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Fa Jb,Fb Jc,Fc N,Fa N,F I,F)
+ \tkzDrawPoints(A,B,C,F,Fa,Fb,Fc,N,I,Ia,Ib,Ic)
+ \tkzLabelPoints(N,A,B,Ia,Ib,Ic)
+ \tkzLabelPoints[above](Fa,Fb,Fc,F,I,C)
+ \end{tikzpicture}
+\end{center}
+
+%subsubsection method_imeth_triangle_feuerbach (end)
+
+
+\subsubsection{Method \Imeth{triangle}{similar}} % (fold)
+\label{ssub:method_imeth_triangle_similar}
+
+The \code{similar} method creates a new triangle whose sides are parallel to the sides of the original triangle and pass through its vertices.
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ scale =.5
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1.5 , 3.5)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.X,z.Y,z.Z = get_points ( T.ABC : similar ())
+ z.H_a,z.H_b,
+ z.H_c = get_points (T.ABC : orthic ())
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C X,Y,Z)
+ \tkzDrawLines(A,H_a B,H_b C,H_c)
+ \tkzDrawPoints(A,B,C,X,Y,Z)
+ \tkzLabelPoints(A,B,Z)
+ \tkzLabelPoints[above](X,Y,C)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =.5
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1.5 , 3.5)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.X,z.Y,z.Z = get_points ( T.ABC : similar ())
+ z.H_a,z.H_b,
+ z.H_c = get_points (T.ABC : orthic ())
+ \end{tkzelements}
+\hspace*{\fill}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C X,Y,Z)
+ \tkzDrawLines(A,H_a B,H_b C,H_c)
+ \tkzDrawPoints(A,B,C,X,Y,Z)
+ \tkzLabelPoints(A,B,Z)
+ \tkzLabelPoints[above](X,Y,C)
+ \end{tikzpicture}
+\end{minipage}
+
+
+% subsubsection method_imeth_triangle_similar (end)
+
+\subsubsection{Method \Imeth{triangle}{medial}} % (fold)
+\label{ssub:method_imeth_triangle_medial}
+
+The triangle $MaMbMc$ formed by joining the midpoints of the sides of a triangle $ABC$. The medial triangle is sometimes also called the auxiliary triangle (Dixon 1991).
+[\href{https://mathworld.wolfram.com/MedialTriangle.html}{Weisstein, Eric W. "Medial Triangle." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (0,1)
+ z.B = point: new (6,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ T.med = T : medial ()
+ z.Ma,z.Mb,z.Mc= get_points (T.med)
+ z.G = T.centroid
+ z.O = T.circumcenter
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPolygons[red](Ma,Mb,Mc)
+ \tkzDrawSegments(A,Ma B,Mb C,Mc)
+ \tkzDrawSegments[dashed,cyan](O,Ma O,Mb O,Mc)
+ \tkzDrawPoints(A,B,C,Ma,Mb,Mc,O,G)
+ \tkzLabelPoints(A,B,Mc,O)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints[left](Mb)
+ \tkzLabelPoints[right](Ma,G)
+ \tkzMarkRightAngles[fill=cyan!20,
+ opacity=.4](O,Ma,B O,Mb,A O,Mc,A)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (0,1)
+ z.B = point: new (6,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ T.med = T : medial ()
+ z.Ma,z.Mb,z.Mc= get_points (T.med)
+ z.G = T.centroid
+ z.O = T.circumcenter
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPolygons[red](Ma,Mb,Mc)
+ \tkzDrawSegments(A,Ma B,Mb C,Mc)
+ \tkzDrawSegments[dashed,cyan](O,Ma O,Mb O,Mc)
+ \tkzDrawPoints(A,B,C,Ma,Mb,Mc,O,G)
+ \tkzLabelPoints(A,B,Mc,O)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints[left](Mb)
+ \tkzLabelPoints[right](Ma,G)
+ \tkzMarkRightAngles[fill=cyan!20,
+ opacity=.4](O,Ma,B O,Mb,A O,Mc,A)
+ \end{tikzpicture}
+ \end{center}
+\end{minipage}
+
+
+% subsubsection method_imeth_triangle_medial (end)
+
+\subsubsection{Method \Imeth{triangle}{incentral} } % (fold)
+\label{ssub:method_incentral}
+
+The incentral triangle $IaIbIc$ is the Cevian triangle of a triangle $ABC$ with respect to its incenter $I$. It is therefore also the triangle whose vertices are determined by the intersections of the reference triangle's angle bisectors with the respective opposite sides.
+[ \href{https://mathworld.wolfram.com/IncentralTriangle.html}{Weisstein, Eric W. "Incentral Triangle." From MathWorld--A Wolfram Web Resource.}
+]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1 , 4)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.I = T.ABC.incenter
+ z.Ia,z.Ib,
+ z.Ic = get_points (T.ABC : incentral ())
+ z.Ta,z.Tb,
+ z.Tc = get_points (T.ABC : intouch ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[dashed,red](Ia,Ib,Ic)
+ \tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic)
+ \tkzDrawCircle(I,Ta)
+ \tkzDrawPoints(A,B,C,Ia,Ib,Ic,I,Ta,Tb,Tc)
+ \tkzLabelPoints(A,B,Ic,I,Tc)
+ \tkzLabelPoints[above](Ia,Ta,C)
+ \tkzLabelPoints[above left](Ib,Tb)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1 , 4)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.I = T.ABC.incenter
+ z.Ia,z.Ib,
+ z.Ic = get_points (T.ABC : incentral ())
+ z.Ta,z.Tb,
+ z.Tc = get_points (T.ABC : intouch ())
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[dashed,red](Ia,Ib,Ic)
+ \tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic)
+ \tkzDrawCircle(I,Ta)
+ \tkzDrawPoints(A,B,C,Ia,Ib,Ic,I,Ta,Tb,Tc)
+ \tkzLabelPoints(A,B,Ic,I,Tc)
+ \tkzLabelPoints[above](Ia,Ta,C)
+ \tkzLabelPoints[above left](Ib,Tb)
+ \end{tikzpicture}
+ \end{center}
+
+\end{minipage}
+
+% subsubsection method_incentral (end)
+
+
+\subsubsection{Method \Imeth{triangle}{tangential}} % (fold)
+\label{ssub:method_imeth_triangle_tangential}
+
+The tangential triangle is the triangle $TaTbTc$ formed by the lines tangent to the circumcircle of a given triangle DeltaABC at its vertices. It is therefore antipedal triangle of $ABC$ with respect to the circumcenter $O$. It is also anticevian triangle of $ABC$ with the symmedian point $K$ as the anticevian point (Kimberling 1998, p. 156). Furthermore, the symmedian point $K$ of $ABC$ is the Gergonne point of $TaTbTc$.
+
+The sides of an orthic triangle are parallel to the tangents to the circumcircle at the vertices (Johnson 1929, p. 172). This is equivalent to the statement that each line from a triangle's circumcenter to a vertex is always perpendicular to the corresponding side of the orthic triangle (Honsberger 1995, p. 22), and to the fact that the orthic and tangential triangles are homothetic.
+[ \href{https://mathworld.wolfram.com/TangentialTriangle.html}{Weisstein, Eric W. "Tangential Triangle." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .75
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,3)
+ T = triangle: new(z.A,z.B,z.C)
+ z.H = T.orthocenter
+ z.O = T.circumcenter
+ z.L = T : symmedian_point ()
+ T.orthic = T: orthic()
+ z.Ha,
+ z.Hb,
+ z.Hc = get_points (T.orthic)
+ z.Ta,
+ z.Tb,
+ z.Tc = get_points (T : tangential ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C Ta,Tb,Tc)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(A,B,C,O,H,Ta,Tb,Tc,L)
+ \tkzDrawSegments[red](C,Hc B,Hb A,Ha)
+ \tkzDrawSegments[green](C,Tc B,Tb A,Ta)
+ \tkzDrawPolygon[blue](Ha,Hb,Hc)
+ \tkzLabelPoints(A,B,O,Tc)
+ \tkzLabelPoints[above](C,Tb,Ta)
+ \tkzLabelPoints[font=\small](Hc)
+ \tkzLabelPoints[font=\small,above](Ha,Hb)
+ \tkzMarkRightAngles(A,Ha,C B,Hb,A C,Hc,B)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .75
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (1,3)
+ T = triangle: new(z.A,z.B,z.C)
+ z.H = T.orthocenter
+ z.O = T.circumcenter
+ z.L = T : symmedian_point ()
+ T.orthic = T: orthic()
+ z.Ha,
+ z.Hb,
+ z.Hc = get_points (T.orthic)
+ z.Ta,
+ z.Tb,
+ z.Tc = get_points (T : tangential ())
+\end{tkzelements}
+
+ \begin{center}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C Ta,Tb,Tc)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(A,B,C,O,H,Ta,Tb,Tc,L)
+ \tkzDrawSegments[red](C,Hc B,Hb A,Ha)
+ \tkzDrawSegments[green](C,Tc B,Tb A,Ta)
+ \tkzDrawPolygon[blue](Ha,Hb,Hc)
+ \tkzLabelPoints(A,B,O,Tc)
+ \tkzLabelPoints[above](C,Tb,Ta)
+ \tkzLabelPoints[font=\small](Hc)
+ \tkzLabelPoints[font=\small,above](Ha,Hb)
+ \tkzMarkRightAngles(A,Ha,C B,Hb,A C,Hc,B)
+\end{tikzpicture}
+ \end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_tangential (end)
+
+
+\subsubsection{Method \Imeth{triangle}{symmedial}} % (fold)
+\label{ssub:method_imeth_triangle_symmedial}
+
+The symmedial triangle $LaLbLc$ is the triangle whose vertices are the intersection points of the symmedians with the reference triangle $ABC$.
+
+The symmedial circle is the circumcircle of the symmedial triangle.
+
+The following example groups several concepts around the symmedian. As a reminder, a symmedian of a triangle is the reflection of the median with respect to the angle bisector.
+
+The points of contact of the symmedians with the sides of the triangle are obtained using the \code{symmedian} method.
+The intersection of the symmedians is the point known as the \code{Lemoine} or \code{Symmedian} point.
+You can use the triangle methods \code{lemoine\_point} or \code{symmedian\_point}. If you only need one of the lines, you can use the method \code{symmedian\_line(n)}. \(n=0\) corresponds to the line coming from the first vertex of the triangle, \(n=1\) to the second, and so on.
+
+In the next example, $L$ is the \code{Lemoine point} or the \code{Symmedian point}. $LaLbLc$ is the symmedian triangle.[\href{https://mathworld.wolfram.com/SymmedianPoint.html}{Weisstein, Eric W. "Symmedian Point." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 2
+ z.A = point : new (0,0)
+ z.B = point : new (7,0)
+ z.C = point : new (2,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ z.L = T.ABC : lemoine_point ()
+ T.SY = T.ABC : symmedian ()
+ T.med = T.ABC : medial ()
+ z.Ka,z.Kb,z.Kc = get_points (T.SY)
+ z.Ma,z.Mb,z.Mc = get_points (T.med)
+ L.Kb = T.ABC : symmedian_line (1)
+ _,z.Kb = get_points(L.Kb)
+ z.G = T.ABC.centroid
+ z.Ia,z.Ib,z.Ic = get_points ( T.ABC : incentral ())
+ -- z.T = T.ABC : trilinear (0,1,1)
+ z.I = T.ABC.incenter
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygons(A,B,C)
+\tkzDrawPoints(A,B,C,L,Ka,Kb,Kc,G,Ma,Mb,Mc,Ia,Ib,Ic,I)
+\tkzDrawSegments[cyan](A,Ka B,Kb C,Kc)
+\tkzDrawSegments[green](A,Ma B,Mb C,Mc)
+\tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic)
+\tkzLabelPoints[above](C,Ka,Ia,Ma)
+\tkzLabelPoints[above left](Kb,Ib,Mb)
+\tkzLabelPoints(A,B,L,Kc,I,Ic,Mc,G)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 2
+ z.A = point : new (0,0)
+ z.B = point : new (7,0)
+ z.C = point : new (2,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ z.L = T.ABC : lemoine_point ()
+ T.SY = T.ABC : symmedian ()
+ T.med = T.ABC : medial ()
+ z.Ka,z.Kb,z.Kc = get_points (T.SY)
+ z.Ma,z.Mb,z.Mc = get_points (T.med)
+ L.Kb = T.ABC : symmedian_line (1)
+ _,z.Kb = get_points(L.Kb)
+ z.G = T.ABC.centroid
+ z.Ia,z.Ib,z.Ic = get_points ( T.ABC : incentral ())
+ -- z.T = T.ABC : trilinear (0,1,1)
+ z.I = T.ABC.incenter
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,L,Ka,Kb,Kc,G,Ma,Mb,Mc,Ia,Ib,Ic,I)
+ \tkzDrawSegments[cyan](A,Ka B,Kb C,Kc)
+ \tkzDrawSegments[green](A,Ma B,Mb C,Mc)
+ \tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic)
+ \tkzLabelPoints[above](C,Ka,Ia,Ma)
+ \tkzLabelPoints[above left](Kb,Ib,Mb)
+ \tkzLabelPoints(A,B,L,Kc,I,Ic,Mc,G)
+ \end{tikzpicture}
+\end{center}
+
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_symmedial (end)
+
+\subsubsection{Method \Imeth{triangle}{anti}} % (fold)
+\label{ssub:method_imeth_triangle_anti}
+
+The anticomplementary triangle is the triangle $TaTbTc$ which has a given triangle $ABC$ as its medial triangle. It is therefore the anticevian triangle with respect to the triangle centroid G (Kimberling 1998, p. 156). [\href{https://mathworld.wolfram.com/AnticomplementaryTriangle.html}{Weisstein, Eric W. "Anticomplementary Triangle." From MathWorld--A Wolfram Web Resource.}]
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .6
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ T.similar = T: anti()
+ z.Ta,
+ z.Tb,
+ z.Tc = get_points (T.similar)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawPolygon[blue](Ta,Tb,Tc)
+ \tkzDrawPoints(A,B,C,Ta,Tb,Tc)
+ \tkzLabelPoints(A,B,Tc)
+ \tkzLabelPoints[above](Ta,Tb,C)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .6
+ z.A = point: new (0,0)
+ z.B = point: new (5,0)
+ z.C = point: new (2,4)
+ T = triangle: new(z.A,z.B,z.C)
+ T.similar = T: anti()
+ z.Ta,
+ z.Tb,
+ z.Tc = get_points (T.similar)
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons[red](A,B,C)
+ \tkzDrawPolygon[blue](Ta,Tb,Tc)
+ \tkzDrawPoints(A,B,C,Ta,Tb,Tc)
+ \tkzLabelPoints(A,B,Tc)
+ \tkzLabelPoints[above](Ta,Tb,C)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+
+% subsubsection method_imeth_triangle_anti (end)
+
+
\subsubsection{Euler line} % (fold)
\label{ssub:euler_line}
+The line on which the orthocenter $H$, triangle centroid $G$, circumcenter $O$, nine-point center $N$, and a number of other important triangle centers lie.
+[ \href{https://mathworld.wolfram.com/EulerLine.html}{Weisstein, Eric W. "Euler Line." From MathWorld--A Wolfram Web Resource.}]
+
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
@@ -468,33 +2155,38 @@ En géométrie plane, le théorème du cercle de Conway stipule que lorsque les
z.P,z.Q,z.R = get_points (T.ABC: orthic())
z.K,z.I,z.J = get_points (T.ABC: medial ())
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines[blue](O,H)
-\tkzDrawCircle[red](N,I)
-\tkzDrawCircles[teal](O,A)
-\tkzDrawSegments(A,P B,Q C,R)
-\tkzDrawSegments[red](A,I B,J C,K)
-\tkzDrawPolygons(A,B,C)
-\tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
-\tkzLabelPoints(A,B,C,I,J,K,P,Q,R)
-\tkzLabelPoints[below](N,O,G,H)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines[blue](O,H)
+ \tkzDrawCircle[red](N,I)
+ \tkzDrawCircles[teal](O,A)
+ \tkzDrawSegments(A,P B,Q C,R)
+ \tkzDrawSegments[red](A,I B,J C,K)
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
+ \tkzLabelPoints(A,B,J,P,R)
+ \tkzLabelPoints[above](C,I,Q,K)
+ \tkzLabelPoints[below](N,O,G,H)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsubsection euler_line (end)
\subsection{Euler ellipse} % (fold)
\label{sub:euler_ellipse}
+The Euler ellipse is a conic, tangent to the three sides of a triangle, with the orthocentre and the centre of the circumscribed circle as foci.
Example of obtaining the Euler circle as well as the Euler ellipse.
+\vspace{6pt}
\begin{tkzelements}
z.A = point: new (2,3.8)
z.B = point: new (0 ,0)
z.C = point: new (6.2 ,0)
L.AB = line : new ( z.A , z.B )
T.ABC = triangle: new (z.A,z.B,z.C)
-z.K = midpoint (z.B,z.C)
+z.K = midpoint (z.B,z.C)
E.euler = T.ABC : euler_ellipse ()
z.N = T.ABC.eulercenter
C.euler = circle : new (z.N,z.K)
@@ -512,7 +2204,7 @@ z.B = point: new (0 ,0)
z.C = point: new (6.2 ,0)
L.AB = line : new ( z.A , z.B )
T.ABC = triangle: new (z.A,z.B,z.C)
-z.K = midpoint (z.B,z.C)
+z.K = midpoint (z.B,z.C)
E.euler = T.ABC : euler_ellipse ()
z.N = T.ABC.eulercenter
C.euler = circle : new (z.N,z.K)
@@ -554,21 +2246,22 @@ z.H = T.ABC.orthocenter
\subsubsection{Steiner inellipse and circumellipse} % (fold)
\label{ssub:steiner_inellipse_and_circumellipse}
-In this example, the inner and outer Steiner ellipses, referred to as the "inellipse" and "circumellipse" (Mathworld.com), respectively, along with the orthoptic circle, are depicted.. The triangle must be acutangle.
+In this example, the inner and outer Steiner ellipses, referred to as the "inellipse" and "circumellipse" [\href{https://mathworld.wolfram.com/SteinerInellipse.html}{Weisstein, Eric W. "Steiner Inellipse." From MathWorld--A Wolfram Web Resource.} and \href{https://mathworld.wolfram.com/SteinerCircumellipse.html}{Weisstein, Eric W. "Steiner Circumellipse." From MathWorld--A Wolfram Web Resource.}], respectively, along with the orthoptic circle, are depicted.. The triangle must be acutangle.
+\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
scale = .5
z.A = point: new (1 , 4)
z.B = point: new (11 , 1)
- z.C = point: new (5 , 12)
+ z.C = point: new (5 , 12)
T.ABC = triangle: new(z.A,z.B,z.C)
E = T.ABC: steiner_inellipse ()
z.G = E.center
ang = math.deg(E.slope)
z.F = E.Fa
- z.E = E.Fb
+ z.E = E.Fb
C = E: orthoptic_circle ()
z.w = C.center
z.o = C.through
@@ -584,13 +2277,13 @@ In this example, the inner and outer Steiner ellipses, referred to as the "inell
scale = .5
z.A = point: new (1 , 4)
z.B = point: new (11 , 1)
-z.C = point: new (5 , 12)
+z.C = point: new (5 , 12)
T.ABC = triangle: new(z.A,z.B,z.C)
E = T.ABC: steiner_inellipse ()
z.G = E.center
ang = math.deg(E.slope)
z.F = E.Fa
-z.E = E.Fb
+z.E = E.Fb
C = E: orthoptic_circle ()
z.w = C.center
z.o = C.through
@@ -611,7 +2304,7 @@ z.T2 = L.T2.pb
\tkzUseLua{EE.Ry},\tkzUseLua{ang})
\tkzDrawLines(F,E M,T1 M,T2) %
\tkzDrawPoints(A,B,C,F,E,G,M,T1,T2)
-\tkzLabelPoints[above](C,M,T1)
+\tkzLabelPoints[above](C,M,T1)
\tkzLabelPoints[right](T2,B)
\tkzLabelPoints[below left](A,F,E,G)
\end{tikzpicture}
@@ -628,7 +2321,7 @@ z.T2 = L.T2.pb
\tkzUseLua{EE.Ry},\tkzUseLua{ang})
\tkzDrawLines(F,E M,T1 M,T2) %
\tkzDrawPoints(A,B,C,F,E,G,M,T1,T2)
-\tkzLabelPoints[above](C,M,T1)
+\tkzLabelPoints[above](C,M,T1)
\tkzLabelPoints[right](T2,B)
\tkzLabelPoints[below left](A,F,E,G)
\end{tikzpicture}
@@ -639,9 +2332,17 @@ z.T2 = L.T2.pb
\subsection{Harmonic division and bisector} % (fold)
\label{sub:harmonic_division_and_bisector}
+Let four points $A$, $C$, $B$ and $D$, in this order, lying on the straight line $(d)$ and $M$ un point pris hors de $(d)$. Then, if two of the following three propositions are true, then the third is also true:
+ \begin{enumerate}
+ \item The division (A,B;C,D) is harmonic. ($CA/CB = DA/DB$)
+ \item $(MC)$ is the internal angle bisector of $\widehat{AMB}$.
+ \item $(MD) \perp (MC)$.
+ \end{enumerate}
+
+ \vspace{6pt}
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
-\begin{tkzelements}
+\begin{tkzelements}
scale = .4
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -664,7 +2365,7 @@ z.T2 = L.T2.pb
\end{Verbatim}
\end{minipage}
\begin{minipage}{.6\textwidth}
-\begin{tkzelements}
+\begin{tkzelements}
scale =.4
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -684,7 +2385,7 @@ z.T2 = L.T2.pb
z.E = intersection (L.LL,L.MC)
z.F = intersection (L.LL,L.MD)
\end{tkzelements}
-\hspace{\fill}
+\hspace{\fill}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygon(A,B,M)
@@ -719,59 +2420,8 @@ z.T2 = L.T2.pb
\end{Verbatim}
% subsection harmonic_division_and_bisector (end)
-\subsubsection{Method \Imeth{triangle}{cevan}} % (fold)
-\label{ssub:method_imeth_triangle_cevan}
-
-\begin{minipage}{.5\textwidth}
- \begin{Verbatim}
- \begin{tkzelements}
- scale = 2
- z.a = point: new (1,2)
- z.b = point: new (5,1)
- z.c = point: new (3,5)
- T = triangle: new (z.a,z.b,z.c)
- z.i = T.orthocenter
- T.cevian = T : cevian (z.i)
- z.ta,z.tb,z.tc = get_points (T.cevian)
- C.cev = T : cevian_circle (z.i)
- z.w = C.cev.center
- \end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygons(a,b,c ta,tb,tc)
- \tkzDrawSegments(a,ta b,tb c,tc)
- \tkzDrawPoints(a,b,c,i,ta,tb,tc)
- \tkzLabelPoints(a,b,c,i)
- \tkzDrawCircles(w,ta)
- \end{tikzpicture}
- \end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
- \begin{tkzelements}
- scale = 2
- z.a = point: new (1,2)
- z.b = point: new (5,1)
- z.c = point: new (3,5)
- T = triangle: new (z.a,z.b,z.c)
- z.i = T.orthocenter
- T.cevian = T : cevian (z.i)
- z.ta,z.tb,z.tc = get_points (T.cevian)
- C.cev = T : cevian_circle (z.i)
- z.w = C.cev.center
- \end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygons(a,b,c ta,tb,tc)
- \tkzDrawSegments(a,ta b,tb c,tc)
- \tkzDrawPoints(a,b,c,i,ta,tb,tc)
- \tkzLabelPoints(a,b,c,i)
- \tkzDrawCircles(w,ta)
- \end{tikzpicture}
-\end{minipage}
-
-
-% subsubsection method_imeth_triangle_cevan (end)
-% subsection methods_of_the_class_triangle (end)
-% section class_triangle (end)
+%
+% % subsection methods_of_the_class_triangle (end)
+% % section class_triangle (end)
\endinput
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-vectors.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-vectors.tex
index b981ef555a..ed1ea77183 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-vectors.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-vectors.tex
@@ -41,11 +41,11 @@ z.E = V.AE.head -- we recover the final point (head)
\begin{tabular}{lll}
\toprule
\textbf{Attributes} & \textbf{Application}& \textbf{Example}\\
-\Iattr{vector}{tail} & |V.AB.t = z.A| & Refer to (\ref{ssub:methods}) \\
-\Iattr{vector}{head} & |V.AB.head = z.B| & Refer to (\ref{ssub:methods}) \\
+\Iattr{vector}{tail} & |V.AB.t = z.A| & [\ref{ssub:methods}]\\
+\Iattr{vector}{head} & |V.AB.head = z.B| & [\ref{ssub:methods}] \\
\Iattr{vector}{type} & |V.AB.type = 'vector'| & \\
-\Iattr{vector}{slope} & |V.AB.slope| & Refer to (\ref{ssub:example_vector_attributes})\\
-\Iattr{vector}{length} & |V.AB.norm|& Refer to (\ref{ssub:example_vector_attributes})\\
+\Iattr{vector}{slope} & |V.AB.slope| & [\ref{ssub:example_vector_attributes}] \\
+\Iattr{vector}{length} & |V.AB.norm|& [\ref{ssub:example_vector_attributes} ]\\
\Iattr{vector}{mtx} & |V.AB.mtx| & The result is a column matrix |{{V.AB.t},{V.AB.h}}|\\
\bottomrule
\end{tabular}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
index 4f46d4a127..284ecca8eb 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
@@ -2,7 +2,65 @@
\section{Examples} % (fold)
\label{sec:examples}
-
+
+\subsection{Length transfer} % (fold)
+\label{sub:report_de_distance}
+
+Use of |north and east| functions linked to points, to transfer lengths, Refer to (\ref{sub:length_of_a_segment})
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = .75
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 3 , 0 )
+ L.AB = line : new ( z.A , z.B )
+ T.ABC = L.AB : sublime ()
+ z.C = T.ABC.pc
+ z.D = z.B: north (length(z.B,z.C))
+ z.E = z.B: east (L.AB.length)
+ z.M = L.AB.mid
+ z.F = z.E : north (length(z.C,z.M))
+\end{tkzelements}
+\begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M)
+ \tkzDrawPoints(A,...,F)
+ \tkzLabelPoints(A,B,E,M)
+ \tkzLabelPoints[above right](C,D,F)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = .75
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 3 , 0 )
+ L.AB = line : new ( z.A , z.B )
+ T.ABC = L.AB : sublime ()
+ z.C = T.ABC.pc
+ z.D = z.B: north (length(z.B,z.C))
+ z.E = z.B: east (L.AB.length)
+ z.M = L.AB.mid
+ z.F = z.E : north (length(z.C,z.M))
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M)
+ \tkzDrawPoints(A,...,F)
+ \tkzLabelPoints(A,B,E,M)
+ \tkzLabelPoints[above right](C,D,F)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsection report_de_distance (end)
+
+
\subsection{D'Alembert 1} % (fold)
\label{sub:d_alembert_1}
@@ -54,15 +112,18 @@ z.Ip = C.Aa : internal_similitude (C.Bb)
z.Jp = C.Aa : internal_similitude (C.Cc)
z.Kp = C.Cc : internal_similitude (C.Bb)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[rotate=30]
- \tkzGetNodes
- \tkzDrawCircles(A,a B,b C,c)
- \tkzDrawPoints(A,B,C,I,J,K,I',J',K')
- \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K)
- \tkzDrawSegments[purple](I,J' I',J I',K)
- \tkzLabelPoints(I,J,K,I',J',K')
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}[rotate=30]
+ \tkzGetNodes
+ \tkzDrawCircles(A,a B,b C,c)
+ \tkzDrawPoints(A,B,C,I,J,K,I',J',K')
+ \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K)
+ \tkzDrawSegments[purple](I,J' I',J I',K)
+ \tkzLabelPoints(I,J,K,I',J',K')
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection d_alembert_1 (end)
@@ -110,14 +171,148 @@ z.Kp = C.Cc : internal_similitude (C.Bb)
z.m,z.n = get_points (C.Bb : radical_axis (C.Cc))
\end{tkzelements}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,a B,b C,c)
+ \tkzDrawLines[new](i,j k,l m,n)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+% subsection d_alembert_2 (end)
+
+\subsection{Altshiller} % (fold)
+\label{sub:altshiller}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.P = point : new (0,0)
+ z.Q = point : new (5,0)
+ z.I = point : new (3,2)
+ C.QI = circle : new (z.Q,z.I)
+ C.PE = C.QI : orthogonal_from (z.P)
+ z.E = C.PE.through
+ C.QE = circle : new (z.Q,z.E)
+ _,z.F = intersection (C.PE,C.QE)
+ z.A = C.PE: point (1/9)
+ L.AE = line : new (z.A,z.E)
+ _,z.C = intersection (L.AE,C.QE)
+ L.AF = line : new (z.A,z.F)
+ L.CQ = line : new (z.C,z.Q)
+ z.D = intersection (L.AF,L.CQ)
+\end{tkzelements}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(A,a B,b C,c)
-\tkzDrawLines[new](i,j k,l m,n)
+ \tkzGetNodes
+ \tkzDrawCircles(P,E Q,E)
+ \tkzDrawLines[add=0 and 1](P,Q)
+ \tkzDrawLines[add=0 and 2](A,E)
+ \tkzDrawSegments(P,E E,F F,C A,F C,D)
+ \tkzDrawPoints(P,Q,E,F,A,C,D)
+ \tkzLabelPoints(P,Q,E,F,A,C,D)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =.5
+ z.P = point : new (0,0)
+ z.Q = point : new (5,0)
+ z.I = point : new (3,2)
+ C.QI = circle : new (z.Q,z.I)
+ C.PE = C.QI : orthogonal_from (z.P)
+ z.E = C.PE.through
+ C.QE = circle : new (z.Q,z.E)
+ _,z.F = intersection (C.PE,C.QE)
+ z.A = C.PE: point (1/9)
+ L.AE = line : new (z.A,z.E)
+ _,z.C = intersection (L.AE,C.QE)
+ L.AF = line : new (z.A,z.F)
+ L.CQ = line : new (z.C,z.Q)
+ z.D = intersection (L.AF,L.CQ)
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(P,E Q,E)
+ \tkzDrawLines[add=0 and 1](P,Q)
+ \tkzDrawLines[add=0 and 2](A,E)
+ \tkzDrawSegments(P,E E,F F,C A,F C,D)
+ \tkzDrawPoints(P,Q,E,F,A,C,D)
+ \tkzLabelPoints(P,Q,E,F,A,C,D)
+ \end{tikzpicture}
+ \end{center}
+\end{minipage}
+%subsection altshiller (end)
+
+\subsection{Lemoine} % (fold)
+\label{sub:lemoine}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 1.25
+ z.A = point: new (1,0)
+ z.B = point: new (5,2)
+ z.C = point: new (1.2,2)
+ T = triangle: new(z.A,z.B,z.C)
+ z.O = T.circumcenter
+ C.OA = circle: new (z.O,z.A)
+ L.tA = C.OA: tangent_at (z.A)
+ L.tB = C.OA: tangent_at (z.B)
+ L.tC = C.OA: tangent_at (z.C)
+ z.P = intersection (L.tA,T.bc)
+ z.Q = intersection (L.tB,T.ca)
+ z.R = intersection (L.tC,T.ab)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon[teal](A,B,C)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(A,B,C,P,Q,R)
+ \tkzLabelPoints(A,B,C,P,Q,R)
+ \tkzDrawLine[blue](Q,R)
+ \tkzDrawLines[red](A,P B,Q R,C)
+ \tkzDrawSegments(A,R C,P C,Q)
\end{tikzpicture}
+\end{Verbatim}
+
\end{minipage}
-% subsection d_alembert_2 (end)
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+scale = .75
+z.A = point: new (1,0)
+z.B = point: new (5,2)
+z.C = point: new (1.2,2)
+T = triangle: new(z.A,z.B,z.C)
+z.O = T.circumcenter
+C.OA = circle: new (z.O,z.A)
+L.tA = C.OA: tangent_at (z.A)
+L.tB = C.OA: tangent_at (z.B)
+L.tC = C.OA: tangent_at (z.C)
+z.R = intersection (L.tC,T.ab)
+z.P = intersection (L.tA,T.bc)
+z.Q = intersection (L.tB,T.ca)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}[rotate=90]
+ \tkzGetNodes
+ \tkzDrawPolygon[teal](A,B,C)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(A,B,C,P,Q,R)
+ \tkzLabelPoints(A,B,C,P,Q,R)
+ \tkzDrawLine[blue](Q,R)
+ \tkzDrawLines[red](A,P B,Q R,C)
+ \tkzDrawSegments(A,R C,P C,Q)
+ \end{tikzpicture}
+\end{center}
+
+\end{minipage}
+%\caption{Lemoine line}
+% subsection lemoine (end)
+
\subsection{Alternate} % (fold)
\label{sub:alternate}
@@ -148,7 +343,7 @@ z.Kp = C.Cc : internal_similitude (C.Bb)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
-\hspace*{\fill}
+
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.A = point: new (0 , 0)
@@ -161,21 +356,94 @@ z.D = intersection (L.AI,T.bc)
L.LLC = T.ab: ll_from (z.C)
z.E = intersection (L.AI,L.LLC)
\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawLine[purple](C,E)
-\tkzDrawSegment[purple](A,E)
-\tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D)
-\tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D)
-\tkzDrawPoints(A,...,E)
-\tkzLabelPoints(A,B)
-\tkzLabelPoints[above](C,D,E)
-\tkzMarkSegments(A,C C,E)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawLine[purple](C,E)
+ \tkzDrawSegment[purple](A,E)
+ \tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D)
+ \tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D)
+ \tkzDrawPoints(A,...,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
+ \tkzMarkSegments(A,C C,E)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection alternate (end)
+\subsection{Method \Imeth{circle}{common tangent}: orthogonality} % (fold)
+\label{sub:common_tangent_orthogonality}
+For two circles to be orthogonal, it is necessary and sufficient for a secant passing through one of their common points to be seen from the other common point at a right angle.
+
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 2 )
+ L.AB = line : new ( z.A , z.B )
+ z.a = point : new ( 1 , 2 )
+ C.Aa = circle : new (z.A,z.a)
+ C.BC = C.Aa : orthogonal_from (z.B)
+ z.C,z.D = intersection (C.Aa,C.BC)
+ C.AC = circle : new (z.A,z.C)
+ z.T,z.Tp = C.AC : common_tangent (C.BC)
+ L.TTp = line : new (z.T,z.Tp)
+ z.M = C.AC : point (0.45)
+ L.MC =line : new (z.M,z.C)
+ z.Mp = intersection (L.MC, C.BC)
+ L.mm = L.TTp : ll_from (z.C)
+ _,z.M = intersection (L.mm, C.AC)
+ z.Mp = intersection (L.mm, C.BC)
+\end{tkzelements}
+
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,C B,C)
+ \tkzDrawSegments(M,M' A,C B,C A,B)
+ \tkzDrawSegments[gray](D,M D,M' T,T')
+ \tkzDrawPoints(A,B,C,D,M,M',T,T')
+ \tkzLabelPoints(A,B,D,M)
+ \tkzLabelPoints[above](C,M',T,T')
+ \tkzMarkRightAngles(M',D,M A,C,B)
+\end{tikzpicture}
+\end{Verbatim}
+
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 2 )
+L.AB = line : new ( z.A , z.B )
+z.a = point : new ( 1 , 2 )
+C.Aa = circle : new (z.A,z.a)
+C.BC = C.Aa : orthogonal_from (z.B)
+z.C,z.D = intersection (C.Aa,C.BC)
+C.AC = circle : new (z.A,z.C)
+z.T,z.Tp = C.AC : common_tangent (C.BC)
+L.TTp = line : new (z.T,z.Tp)
+z.M = C.AC : point (0.45)
+L.MC =line : new (z.M,z.C)
+z.Mp = intersection (L.MC, C.BC)
+L.mm = L.TTp : ll_from (z.C)
+_,z.M = intersection (L.mm, C.AC)
+z.Mp = intersection (L.mm, C.BC)
+\end{tkzelements}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,C B,C)
+ \tkzDrawSegments(M,M' A,C B,C A,B)
+ \tkzDrawSegments[gray](D,M D,M' T,T')
+ \tkzDrawPoints(A,B,C,D,M,M',T,T')
+ \tkzLabelPoints(A,B,D,M)
+ \tkzLabelPoints[above](C,M',T,T')
+ \tkzMarkRightAngles(M',D,M A,C,B)
+ \end{tikzpicture}
+\end{center}
+% subsection common_tangent_orthogonality (end)
+
+
\subsection{Apollonius circle} % (fold)
\label{sub:apollonius_circle}
@@ -215,23 +483,26 @@ scale=.75
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
- \hspace*{\fill}
- \begin{tikzpicture}[scale=.8]
- \tkzGetNodes
- \tkzDrawSegment[add=0 and 1](A,M)
- \tkzDrawSegments[purple](M,C M,D)
- \tkzDrawCircle[purple](O,C)
- \tkzDrawSegments(A,B B,M D,B)
- \tkzDrawPoints(A,B,M,C,D)
- \tkzLabelPoints[below right](A,B,C,D)
- \tkzLabelPoints[above](M)
- \tkzFillAngles[opacity=.4,cyan!20](A,M,B)
- \tkzFillAngles[opacity=.4,purple!20](B,M,E)
- \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
- \tkzMarkAngles[mark=|](A,M,C C,M,B)
- \tkzMarkAngles[mark=||](B,M,D D,M,E)
- \end{tikzpicture}
- \hspace*{\fill}
+
+ \begin{center}
+ \begin{tikzpicture}[scale=.8]
+ \tkzGetNodes
+ \tkzDrawSegment[add=0 and 1](A,M)
+ \tkzDrawSegments[purple](M,C M,D)
+ \tkzDrawCircle[purple](O,C)
+ \tkzDrawSegments(A,B B,M D,B)
+ \tkzDrawPoints(A,B,M,C,D)
+ \tkzLabelPoints[below right](A,B,C,D)
+ \tkzLabelPoints[above](M)
+ \tkzFillAngles[opacity=.4,cyan!20](A,M,B)
+ \tkzFillAngles[opacity=.4,purple!20](B,M,E)
+ \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
+ \tkzMarkAngles[mark=|](A,M,C C,M,B)
+ \tkzMarkAngles[mark=||](B,M,D D,M,E)
+ \end{tikzpicture}
+ \end{center}
+
+
\end{minipage}
@@ -319,20 +590,23 @@ Remark : The circle can be obtained with:
_,z.N = intersection (C.GA , C.OC)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,M)
-\tkzDrawCircles[purple](O,C G,A)
-\tkzDrawSegments[purple](M,D)
-\tkzDrawSegments(D,B O,G M,C)
-\tkzDrawSegments[red,dashed](M,N M,O M,G)
-\tkzDrawPoints(A,B,M,C,D,N,O,G)
-\tkzLabelPoints[below right](A,B,C,D,N,O,G)
-\tkzLabelPoints[above](M)
-\tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,M)
+ \tkzDrawCircles[purple](O,C G,A)
+ \tkzDrawSegments[purple](M,D)
+ \tkzDrawSegments(D,B O,G M,C)
+ \tkzDrawSegments[red,dashed](M,N M,O M,G)
+ \tkzDrawPoints(A,B,M,C,D,N,O,G)
+ \tkzLabelPoints[below right](A,B,C,D,N,O,G)
+ \tkzLabelPoints[above](M)
+ \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection apollonius_and_circle_circumscribed (end)
\subsection{Apollonius circles in a triangle} % (fold)
@@ -414,19 +688,22 @@ L.Bpt = line: new (z.Bp,z.T)
z.O3 = L.Bpt.mid
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles[blue!50!black](O1,C' O2,A' O3,B')
-\tkzDrawSegments[new](B,S C,T A,R)
-\tkzDrawPolygon(A,B,C)
-\tkzDrawPoints(A,B,C,A',B',C',O,I,R,S,T,O1,O2,O3)
-\tkzLabelPoints(A,B,C,A',B',C',O,I)
-\tkzLabelPoints(O1,O2,O3)
-\tkzDrawCircle[purple](O,A)
-\tkzDrawLine(O1,O2)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[blue!50!black](O1,C' O2,A' O3,B')
+ \tkzDrawSegments[new](B,S C,T A,R)
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPoints(A,B,C,A',B',C',O,I,R,S,T,O1,O2,O3)
+ \tkzLabelPoints(A,B,C,A',B',C',O,I)
+ \tkzLabelPoints(O1,O2,O3)
+ \tkzDrawCircle[purple](O,A)
+ \tkzDrawLine(O1,O2)
+ \end{tikzpicture}
+\end{center}
+
+
Same result using the function |T.ABC.ab : apollonius (k) |
@@ -493,15 +770,18 @@ Same result using the function |T.ABC.ab : apollonius (k) |
C = circle: new (z.O_2,z.A)
z.C,z.D = intersection (L ,C)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O_1,A O_2,A)
-\tkzDrawSegments[new](O_1,A E,F C,D)
-\tkzDrawSegments[purple](A,E A,F)
-\tkzDrawPoints(A,O_1,O_2,E,F,C,D)
-\tkzLabelPoints(A,O_1,O_2,E,F,C,D)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O_1,A O_2,A)
+ \tkzDrawSegments[new](O_1,A E,F C,D)
+ \tkzDrawSegments[purple](A,E A,F)
+ \tkzDrawPoints(A,O_1,O_2,E,F,C,D)
+ \tkzLabelPoints(A,O_1,O_2,E,F,C,D)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection archimedes (end)
@@ -615,30 +895,156 @@ Same result using the function |T.ABC.ab : apollonius (k) |
z.O_5 = T.CP1P2.circumcenter
\end{tkzelements}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSemiCircles[teal](O_0,B)
+ \tkzDrawSemiCircles[teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
+ \tkzDrawCircle[fill=green!10](O_4,P_0)
+ \tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
+ \tkzDrawSegments(A,B O_0,P' B,P A,Q)
+ \tkzDrawSegments(P,B Q,O_2 P,O_1)
+ \tkzDrawSegments[purple](O_5,P_2 O_5,P_1 O_5,C)
+ \tkzDrawPoints(A,B,C,P_0,P_2,P_1,O_0,O_1,O_2,O_4,O_5,Q,P,P',S)
+ \tkzLabelPoints[below](A,B,C,O_0,O_1,O_2,P')
+ \tkzLabelPoints[above](Q,P)
+ \tkzLabelPoints[above right](P_0,P_2,P_1,O_5,O_4,S)
+ \begin{scope}[font=\scriptsize]
+ \tkzLabelCircle[above](O_1,C)(120){$(\beta)$}
+ \tkzLabelCircle[above](O_2,B)(70){$(\gamma)$}
+ \tkzLabelCircle[above](O_0,B)(110){$(\alpha)$}
+ \tkzLabelCircle[left](O_4,P_2)(60){$(\delta)$}
+ \tkzLabelCircle[left](O_5,C)(140){$(\epsilon)$}
+ \end{scope}
+ \end{tikzpicture}
+\end{center}
+
+% subsection bankoff_circle (end)
+
+\subsection{Symmedian property} % (fold)
+\label{sub:example_symmedian_property}
+
+$L$ is the symmedian point or lemoine point. $\dfrac{CL}{CLc} = \dfrac{a^2+b^2}{a^2+b^2+c^2}$
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ scale = 1.5
+ z.A = point : new (1,2)
+ z.B = point : new (5,1)
+ z.C = point : new (3,5)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ T.SY = T.ABC : symmedian ()
+ z.La,z.Lb,z.Lc = get_points (T.SY)
+ k = (T.ABC.a*T.ABC.a +
+ T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a +
+ T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c)
+ L.SY = line : new (z.C,z.Lc)
+ z.L = L.SY : point (k)
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,L,Lc)
+ \tkzDrawPoints[red](L)
+ \tkzDrawSegments[cyan](C,Lc)
+ \tkzLabelPoints(A,B,Lc)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints[left](L)
+ \tkzLabelSegment(B,C){$a$}
+ \tkzLabelSegment(A,C){$b$}
+ \tkzLabelSegment(A,B){$ca$}
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = 1.5
+ z.A = point : new (1,2)
+ z.B = point : new (5,1)
+ z.C = point : new (3,5)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ T.SY = T.ABC : symmedian ()
+ z.La,z.Lb,z.Lc = get_points (T.SY)
+ k = (T.ABC.a*T.ABC.a +
+ T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a +
+ T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c)
+ L.SY = line : new (z.C,z.Lc)
+ z.L = L.SY : point (k)
+ \end{tkzelements}
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,L,Lc)
+ \tkzDrawPoints[red](L)
+ \tkzDrawSegments[cyan](C,Lc)
+ \tkzLabelPoints(A,B,Lc)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints[left](L)
+ \tkzLabelSegment(B,C){$a$}
+ \tkzLabelSegment(A,C){$b$}
+ \tkzLabelSegment(A,B){$ca$}
+ \end{tikzpicture}
+ \end{center}
+\end{minipage}
+
+
+% subsection example_symmedian_property (end)
+
+\subsection{Example: Cevian with orthocenter} % (fold)
+\label{sub:example_cevian_with_orthocenter}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 1.5
+ z.a = point: new (1,2)
+ z.b = point: new (5,1)
+ z.c = point: new (3,5)
+ T = triangle: new (z.a,z.b,z.c)
+ z.i = T.orthocenter
+ T.cevian = T : cevian (z.i)
+ z.ta,z.tb,z.tc = get_points (T.cevian)
+ C.cev = T : cevian_circle (z.i)
+ z.w = C.cev.center
+\end{tkzelements}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawSemiCircles[teal](O_0,B)
-\tkzDrawSemiCircles[teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
-\tkzDrawCircle[fill=green!10](O_4,P_0)
-\tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
-\tkzDrawSegments(A,B O_0,P' B,P A,Q)
-\tkzDrawSegments(P,B Q,O_2 P,O_1)
-\tkzDrawSegments[purple](O_5,P_2 O_5,P_1 O_5,C)
-\tkzDrawPoints(A,B,C,P_0,P_2,P_1,O_0,O_1,O_2,O_4,O_5,Q,P,P',S)
-\tkzLabelPoints[below](A,B,C,O_0,O_1,O_2,P')
-\tkzLabelPoints[above](Q,P)
-\tkzLabelPoints[above right](P_0,P_2,P_1,O_5,O_4,S)
-\begin{scope}[font=\scriptsize]
- \tkzLabelCircle[above](O_1,C)(120){$(\beta)$}
- \tkzLabelCircle[above](O_2,B)(70){$(\gamma)$}
- \tkzLabelCircle[above](O_0,B)(110){$(\alpha)$}
- \tkzLabelCircle[left](O_4,P_2)(60){$(\delta)$}
- \tkzLabelCircle[left](O_5,C)(140){$(\epsilon)$}
-\end{scope}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c ta,tb,tc)
+ \tkzDrawSegments(a,ta b,tb c,tc)
+ \tkzDrawPoints(a,b,c,i,ta,tb,tc)
+ \tkzLabelPoints(a,b,c,i)
+ \tkzDrawCircles(w,ta)
\end{tikzpicture}
-\hspace*{\fill}
-% subsection bankoff_circle (end)
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+scale = 1.5
+z.a = point: new (1,2)
+z.b = point: new (5,1)
+z.c = point: new (3,5)
+T = triangle: new (z.a,z.b,z.c)
+z.i = T.orthocenter
+T.cevian = T : cevian (z.i)
+z.ta,z.tb,z.tc = get_points (T.cevian)
+C.cev = T : cevian_circle (z.i)
+z.w = C.cev.center
+\end{tkzelements}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c ta,tb,tc)
+ \tkzDrawSegments(a,ta b,tb c,tc)
+ \tkzDrawPoints(a,b,c,i,ta,tb,tc)
+ \tkzLabelPoints(a,b,c,i)
+ \tkzDrawCircles(w,ta)
+ \end{tikzpicture}
+\end{center}
+\end{minipage}
+
+% subsection example_cevian_with_orthocenter (end)
\subsection{Excircles} % (fold)
\label{sub:excircles}
@@ -693,73 +1099,33 @@ Same result using the function |T.ABC.ab : apollonius (k) |
z.G = intersection (la,lb)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints[new](J_a,J_b,J_c)
-\tkzClipBB
-\tkzDrawCircles[gray](J_a,T_a J_b,T_b J_c,T_c)
-\tkzDrawLines[add=1 and 1](A,B B,C C,A)
-\tkzDrawSegments[new](A,T_a B,T_b C,T_c)
-\tkzDrawSegments[new](J_a,T_a J_b,T_b J_c,T_c)
-\tkzDrawPolygon(A,B,C)
-\tkzDrawPolygon[new](T_a,T_b,T_c)
-\tkzDrawPoints(A,B,C,K)
-\tkzDrawPoints[new](T_a,T_b,T_c)
-\tkzLabelPoints[below left](A)
-\tkzLabelPoints[below](B)
-\tkzLabelPoints[above](C)
-\tkzLabelPoints[new,below left](T_b)
-\tkzLabelPoints[new,below right](T_c)
-\tkzLabelPoints[new,right=6pt](T_a)
-\tkzMarkRightAngles[fill=gray!15](J_a,T_a,B J_b,T_b,C J_c,T_c,A)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection excircles (end)
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints[new](J_a,J_b,J_c)
+ \tkzClipBB
+ \tkzDrawCircles[gray](J_a,T_a J_b,T_b J_c,T_c)
+ \tkzDrawLines[add=1 and 1](A,B B,C C,A)
+ \tkzDrawSegments[new](A,T_a B,T_b C,T_c)
+ \tkzDrawSegments[new](J_a,T_a J_b,T_b J_c,T_c)
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[new](T_a,T_b,T_c)
+ \tkzDrawPoints(A,B,C,K)
+ \tkzDrawPoints[new](T_a,T_b,T_c)
+ \tkzLabelPoints[below left](A)
+ \tkzLabelPoints[below](B)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints[new,below left](T_b)
+ \tkzLabelPoints[new,below right](T_c)
+ \tkzLabelPoints[new,right=6pt](T_a)
+ \tkzMarkRightAngles[fill=gray!15](J_a,T_a,B J_b,T_b,C J_c,T_c,A)
+ \end{tikzpicture}
+\end{center}
+
+
+% subsection excircles (end)
-\subsection{Orthogonal circle through} % (fold)
-\label{sub:orthogonal_circle_through}
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\begin{tkzelements}
- z.O = point: new (0,1)
- z.A = point: new (1,0)
- z.z1 = point: new (-1.5,-1.5)
- z.z2 = point: new (2.5,-1.25)
- C.OA = circle: new (z.O,z.A)
- C = C.OA: orthogonal_through (z.z1,z.z2)
- z.c = C.center
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(O,A)
- \tkzDrawCircle[new](c,z1)
- \tkzDrawPoints[new](O,A,z1,z2,c)
- \tkzLabelPoints[right](O,A,z1,z2,c)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}\begin{tkzelements}
- z.O = point: new (0,1)
- z.A = point: new (1,0)
- z.z1 = point: new (-1.5,-1.5)
- z.z2 = point: new (2.5,-1.25)
- C.OA = circle: new (z.O,z.A)
- C = C.OA: orthogonal_through (z.z1,z.z2)
- z.c = C.center
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(O,A)
-\tkzDrawCircle[orange](c,z1)
-\tkzDrawPoints[orange](O,A,z1,z2,c)
-\tkzLabelPoints[right](O,A,z1,z2,c)
-\end{tikzpicture}
-\hspace*{\fill}
-\end{minipage}
-% subsection orthogonal_circle_through (end)
\subsection{Divine ratio} % (fold)
\label{sub:divine_ratio}
@@ -826,16 +1192,19 @@ L.BG = line: new (z.B,z.G)
z.L = intersection (L.AR,L.BG)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygons(A,C,E,F A,B,G,H)
-\tkzDrawCircles(O_1,C O_2,B O_0,B)
-\tkzDrawSegments(H,C B,K A,L)
-\tkzDrawPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L)
-\tkzLabelPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,C,E,F A,B,G,H)
+ \tkzDrawCircles(O_1,C O_2,B O_0,B)
+ \tkzDrawSegments(H,C B,K A,L)
+ \tkzDrawPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L)
+ \tkzLabelPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection divine_ratio (end)
\subsection{Director circle} % (fold)
@@ -893,19 +1262,22 @@ z.J = L.J.pb
z.K = L.K.pb
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints(F1,F2,O)
-\tkzDrawCircles[teal](O,P)
-\tkzDrawPolygon(H,O,A,P)
-\tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0)
-\tkzDrawSegments[orange](O,P O,L L,J L,K)
-\tkzDrawPoints(F1,F2,O,H,A,P,L,J,K)
-\tkzLabelPoints(F1,F2,O,H,A,P,L,J,K)
-\tkzLabelPoints[above](L)
-\tkzMarkRightAngles(A,P,H J,L,K)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(F1,F2,O)
+ \tkzDrawCircles[teal](O,P)
+ \tkzDrawPolygon(H,O,A,P)
+ \tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0)
+ \tkzDrawSegments[orange](O,P O,L L,J L,K)
+ \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K)
+ \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K)
+ \tkzLabelPoints[above](L)
+ \tkzMarkRightAngles(A,P,H J,L,K)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection director_circle (end)
@@ -961,18 +1333,21 @@ z.C = intersection (L.EG,L.AB)
z.O = C.AB: antipode (z.B)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawArc[delta=5](O,B)(G)
- \tkzDrawCircles(A,B B,A)
- \tkzDrawSegments(A,E B,E O,I)
- \tkzDrawSegments[purple](J,E A,G G,I K,G E,G)
- \tkzMarkSegments[mark=s||](A,E B,E O,A)
- \tkzDrawPoints(A,B,C,E,I,J,G,O,K)
- \tkzLabelPoints(A,B,C,E,I,J,G,O,K)
-\end{tikzpicture}
- \hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawArc[delta=5](O,B)(G)
+ \tkzDrawCircles(A,B B,A)
+ \tkzDrawSegments(A,E B,E O,I)
+ \tkzDrawSegments[purple](J,E A,G G,I K,G E,G)
+ \tkzMarkSegments[mark=s||](A,E B,E O,A)
+ \tkzDrawPoints(A,B,C,E,I,J,G,O,K)
+ \tkzLabelPoints(A,B,C,E,I,J,G,O,K)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection gold_division (end)
\subsection{Ellipse} % (fold)
@@ -1014,15 +1389,17 @@ b = E.Ry
slope = math.deg(E.slope)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles[teal](C,A)
-\tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
-\tkzDrawPoints(C,A,B,b)
-\tkzLabelPoints(C,A,B)
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[teal](C,A)
+ \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
+ \tkzDrawPoints(C,A,B,b)
+ \tkzLabelPoints(C,A,B)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsection ellipse (end)
@@ -1060,12 +1437,15 @@ z.V = E : point (0)
z.CoV = E : point (math.pi/2)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
-\tkzDrawEllipse[blue](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
-\tkzDrawPoints(C,V,CoV)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}[gridded]
+ \tkzGetNodes
+ \tkzDrawEllipse[blue](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \tkzDrawPoints(C,V,CoV)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection ellipse_with_radii (end)
@@ -1122,15 +1502,18 @@ z.F = L.ta.pb
z.G = L.tb.pb
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPoints(A,B,C,K,F,G,V,cV)
- \tkzLabelPoints(A,B,C,K,F,G,V,cV)
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,B,C,K,F,G,V,cV)
+ \tkzLabelPoints(A,B,C,K,F,G,V,cV)
\tkzDrawEllipse[teal](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
- \tkzDrawLines(K,F K,G)
-\end{tikzpicture}
- \hspace*{\fill}
+ \tkzDrawLines(K,F K,G)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsection ellipse_with_foci (end)
@@ -1184,19 +1567,21 @@ L.Ow = line : new (z.O,z.w)
_,z.E = intersection (L.Ow, C.OA)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawArc(J,X)(Y)
-\tkzDrawCircles(I,H O,A)
-\tkzDrawCircle[red](w,I)
-\tkzDrawLines(Y,C A,B X,C E,w E,B)
-\tkzDrawSegments[blue](J,C J,K I,H I,O w,B)
-\tkzDrawPoints(A,B,C,I,J,E,w,H,K,O)
-\tkzLabelPoints(A,B,C,J,I,w,H,K,E,O)
-\tkzMarkRightAngles[fill=gray!20,opacity=.4](C,H,I A,K,J)
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawArc(J,X)(Y)
+ \tkzDrawCircles(I,H O,A)
+ \tkzDrawCircle[red](w,I)
+ \tkzDrawLines(Y,C A,B X,C E,w E,B)
+ \tkzDrawSegments[blue](J,C J,K I,H I,O w,B)
+ \tkzDrawPoints(A,B,C,I,J,E,w,H,K,O)
+ \tkzLabelPoints(A,B,C,J,I,w,H,K,E,O)
+ \tkzMarkRightAngles[fill=gray!20,opacity=.4](C,H,I A,K,J)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsection euler_relation (end)
@@ -1242,20 +1627,23 @@ z.D = intersection (T.ext.ab,T.ABC.ab)
z.E = z.C: symmetry (z.B)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawLine[purple,add=0 and .5](B,C)
-\tkzDrawSegment[purple](A,D)
-\tkzDrawSegment[orange](C,D)
-\tkzFillAngles[purple!30,opacity=.2](D,C,A E,C,D)
-\tkzMarkAngles[mark=|](D,C,A E,C,D)
-\tkzDrawPoints(A,...,D)
-\tkzLabelPoints[above](C)
-\tkzLabelPoints(A,B,D)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawLine[purple,add=0 and .5](B,C)
+ \tkzDrawSegment[purple](A,D)
+ \tkzDrawSegment[orange](C,D)
+ \tkzFillAngles[purple!30,opacity=.2](D,C,A E,C,D)
+ \tkzMarkAngles[mark=|](D,C,A E,C,D)
+ \tkzDrawPoints(A,...,D)
+ \tkzLabelPoints[above](C)
+ \tkzLabelPoints(A,B,D)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
% subsection external_angle (end)
@@ -1304,19 +1692,22 @@ L.LL = T.ab: ll_from (z.C)
L.AD = line: new (z.A,z.D)
z.E = intersection (L.LL,L.AD)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawLine[purple](C,E)
-\tkzDrawSegment[purple](A,E)
-\tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D)
-\tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D)
-\tkzDrawPoints(A,...,E)
-\tkzLabelPoints(A,B)
-\tkzLabelPoints[above](C,D,E)
-\tkzMarkSegments(A,C C,E)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawLine[purple](C,E)
+ \tkzDrawSegment[purple](A,E)
+ \tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D)
+ \tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D)
+ \tkzDrawPoints(A,...,E)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D,E)
+ \tkzMarkSegments(A,C C,E)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
%subsection internal_angle (end)
@@ -1392,18 +1783,20 @@ L.LH = line: new (z.L,z.H)
z.F = intersection (L.LH,C.IH) -- feuerbach
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[rotate=90]
-\tkzGetNodes
-\tkzDrawLine(L,F)
-\tkzDrawCircle[red](N,A')
-\tkzDrawCircle[blue](I,H)
-\tkzDrawCircles[teal](O,A L,C')
-\tkzDrawSegments(M,L B,U Q,C C,X A,P B,Q)
-\tkzDrawPolygons(A,B,C A',B',C')
-\tkzDrawPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
-\tkzLabelPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}[rotate=90]
+ \tkzGetNodes
+ \tkzDrawLine(L,F)
+ \tkzDrawCircle[red](N,A')
+ \tkzDrawCircle[blue](I,H)
+ \tkzDrawCircles[teal](O,A L,C')
+ \tkzDrawSegments(M,L B,U Q,C C,X A,P B,Q)
+ \tkzDrawPolygons(A,B,C A',B',C')
+ \tkzDrawPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
+ \tkzLabelPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection nine_points (end)
@@ -1448,15 +1841,17 @@ L.AK = line: new (z.Y,z.K)
z.C = intersection (L.AK,L.AB)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B X,K)
-\tkzDrawLine[teal](Y,K)
-\tkzDrawPoints(A,B,C,X,Y,M,K)
-\tkzDrawArc[delta=20](M,A)(K)
-\tkzLabelPoints(A,B,C)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B X,K)
+ \tkzDrawLine[teal](Y,K)
+ \tkzDrawPoints(A,B,C,X,Y,M,K)
+ \tkzDrawArc[delta=20](M,A)(K)
+ \tkzLabelPoints(A,B,C)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
%subsection gold_ratio_with_segment (end)
@@ -1502,13 +1897,15 @@ L.AB = line: new (z.A,z.B)
z.O_0 = L.AB.mid
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O_1,C O_2,B O_0,B O_1,x)
-\tkzDrawPoints(A,C,B,O_1,O_2,O_0,x)
-\tkzLabelPoints[below right](A,C,B)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O_1,C O_2,B O_0,B O_1,x)
+ \tkzDrawPoints(A,C,B,O_1,O_2,O_0,x)
+ \tkzLabelPoints[below right](A,C,B)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection gold_arbelos (end)
@@ -1554,15 +1951,16 @@ z.O_0 = L.AB.mid
L.GF = line :new (z.G,z.F)
z.C = intersection (L.GF,L.AB)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D)
- \tkzDrawPoints(A,B,G,E,F,C,D)
- \tkzLabelPoints(A,B,G,E,F,C,D)
- \tkzMarkSegments(F,B B,E)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D)
+ \tkzDrawPoints(A,B,G,E,F,C,D)
+ \tkzLabelPoints(A,B,G,E,F,C,D)
+ \tkzMarkSegments(F,B B,E)
+ \end{tikzpicture}
+\end{center}
\end{minipage}
% subsection harmonic_division_v1 (end)
@@ -1616,13 +2014,15 @@ L.GX = line: new (z.G,z.X)
z.C = intersection (L.GX,L.AB)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,D A,E B,F D,F X,A X,B X,C)
-\tkzDrawPoints(A,...,G,X)
-\tkzLabelPoints(A,...,G,X)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,D A,E B,F D,F X,A X,B X,C)
+ \tkzDrawPoints(A,...,G,X)
+ \tkzLabelPoints(A,...,G,X)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection harmonic_division_v2 (end)
@@ -1666,390 +2066,21 @@ z.Q = intersection (L.AC,L.PX)
z.R = intersection (L.BC,L.PX)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawLine[new](P,R)
-\tkzDrawLines(P,B A,C B,C)
-\tkzDrawPoints(P,Q,R,A,B,C)
-\tkzLabelPoints(A,B,C,P,Q,R)
-\end{tikzpicture}
-\hspace*{\fill}
-\end{minipage}
-% subsection menelaus (end)
-
-\subsection{Radical axis v1} % (fold)
-\label{sub:radical_axis_v1}
-
-\begin{Verbatim}
-\begin{tkzelements}
-scale = .75
-z.X = point : new (0,0)
-z.B = point : new (2,2)
-z.Y = point : new (7,1)
-z.Ap = point : new (8,-1)
-L.XY = line : new (z.X,z.Y)
-C.XB = circle : new (z.X,z.B)
-C.YAp = circle : new (z.Y,z.Ap)
-z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
-z.A = C.XB : point (0.4)
-T.ABAp = triangle: new (z.A,z.B,z.Ap)
-z.O = T.ABAp.circumcenter
-C.OAp = circle : new (z.O,z.Ap)
-_,z.Bp = intersection (C.OAp,C.YAp)
-L.AB = line : new (z.A,z.B)
-L.ApBp = line : new (z.Ap,z.Bp)
-z.M = intersection (L.AB,L.ApBp)
-z.H = L.XY : projection (z.M)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(X,B Y,A')
- \tkzDrawArc[dashed,delta=30](O,A')(A)
- \tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F)
- \tkzDrawLines[red](A,M A',M X,Y E,F)
- \tkzDrawLines[red,add=1 and 3](M,H)
-\end{tikzpicture}
-\end{Verbatim}
-
-\begin{tkzelements}
-scale = .75
-z.X = point : new (0,0)
-z.B = point : new (2,2)
-z.Y = point : new (7,1)
-z.Ap = point : new (8,-1)
-L.XY = line : new (z.X,z.Y)
-C.XB = circle : new (z.X,z.B)
-C.YAp = circle : new (z.Y,z.Ap)
-z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
-z.A = C.XB : point (0.4)
-T.ABAp = triangle: new (z.A,z.B,z.Ap)
-z.O = T.ABAp.circumcenter
-C.OAp = circle : new (z.O,z.Ap)
-_,z.Bp = intersection (C.OAp,C.YAp)
-L.AB = line : new (z.A,z.B)
-L.ApBp = line : new (z.Ap,z.Bp)
-z.M = intersection (L.AB,L.ApBp)
-z.H = L.XY : projection (z.M)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(X,B Y,A')
-\tkzDrawArc[dashed,delta=30](O,A')(A)
-\tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F)
-\tkzDrawLines[red](A,M A',M X,Y E,F)
-\tkzDrawLines[red,add=1 and 3](M,H)
-\end{tikzpicture}
-% subsection radical_axis_v1 (end)
-
-\subsection{Radical axis v2} % (fold)
-\label{sub:radical_axis_v2}
-
-\begin{Verbatim}
-\begin{tkzelements}
-scale = 1.25
-z.O = point : new (-1,0)
-z.Op = point : new (4,-1)
-z.B = point : new (0,2)
-z.D = point : new (4,0)
-C.OB = circle : new (z.O,z.B)
-C.OpD = circle : new (z.Op,z.D)
-L.EF = C.OB : radical_axis (C.OpD)
-z.E,z.F = get_points (L.EF)
-z.M = L.EF : point (.75)
-L.MT,L.MTp = C.OB : tangent_from (z.M)
-_,z.T = get_points (L.MT)
-_,z.Tp = get_points (L.MTp)
-L.MK,L.MKp = C.OpD : tangent_from (z.M)
-_,z.K = get_points (L.MK)
-_,z.Kp = get_points (L.MKp)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,B O',D)
- \tkzDrawLine(E,F)
- \tkzDrawLine[add=.5 and .5](O,O')
- \tkzDrawLines[add = 0 and .5](M,T M,T' M,K M,K')
- \tkzDrawCircle(M,T)
- \tkzDrawPoints(O,O',T,M,T',K,K')
- \tkzLabelPoints(O,O',T,T',K,K',M)
-\end{tikzpicture}
-\end{Verbatim}
-
-\begin{tkzelements}
-scale =1.25
-z.O = point : new (-1,0)
-z.Op = point : new (4,-1)
-z.B = point : new (0,2)
-z.D = point : new (4,0)
-C.OB = circle : new (z.O,z.B)
-C.OpD = circle : new (z.Op,z.D)
-L.EF = C.OB : radical_axis (C.OpD)
-z.E,z.F = get_points (L.EF)
-z.M = L.EF : point (.75)
-L.MT,L.MTp = C.OB : tangent_from (z.M)
-_,z.T = get_points (L.MT)
-_,z.Tp = get_points (L.MTp)
-L.MK,L.MKp = C.OpD : tangent_from (z.M)
-_,z.K = get_points (L.MK)
-_,z.Kp = get_points (L.MKp)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O,B O',D)
-\tkzDrawLine(E,F)
-\tkzDrawLine[add=.5 and .5](O,O')
-\tkzDrawLines[add = 0 and .5](M,T M,T' M,K M,K')
-\tkzDrawCircle(M,T)
-\tkzDrawPoints(O,O',T,M,T',K,K')
-\tkzLabelPoints(O,O',T,T',K,K',M)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection radical_axis_v2 (end)
-
-\subsection{Radical axis v3} % (fold)
-\label{sub:radical_axis_v3}
-
-\begin{Verbatim}
- \begin{tkzelements}
- z.O = point : new (0,0)
- z.B = point : new (4,0)
- z.Op = point : new (6,0)
- C.OB = circle : new (z.O,z.B)
- C.OpB = circle : new (z.Op,z.B)
- L.EF = C.OB : radical_axis (C.OpB)
- z.E,z.F = get_points(L.EF)
- z.M = L.EF : point (0.2)
- L = C.OB : tangent_from (z.M)
- _,z.T = get_points (L)
- L = C.OpB : tangent_from (z.M)
- _,z.Tp = get_points (L)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,B O',B)
- \tkzDrawSegments(M,T M,T')
- \tkzDrawSegments(E,F)
- \tkzDrawLine[add=.5 and .5](O,O')
- \tkzDrawPoints(O,B,O',E,F,M,T,T')
- \tkzLabelPoints(O,O',B,E,F,T,T')
- \tkzDrawArc(M,T')(T)
-\end{tikzpicture}
-\end{Verbatim}
-
-\begin{tkzelements}
-z.O = point : new (0,0)
-z.B = point : new (4,0)
-z.Op = point : new (6,0)
-C.OB = circle : new (z.O,z.B)
-C.OpB = circle : new (z.Op,z.B)
-L.EF = C.OB : radical_axis (C.OpB)
-z.E,z.F = get_points(L.EF)
-z.M = L.EF : point (0.2)
-L = C.OB : tangent_from (z.M)
-_,z.T = get_points (L)
-L = C.OpB : tangent_from (z.M)
-_,z.Tp = get_points (L)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O,B O',B)
-\tkzDrawSegments(M,T M,T')
-\tkzDrawSegments(E,F)
-\tkzDrawLine[add=.5 and .5](O,O')
-\tkzDrawPoints(O,B,O',E,F,M,T,T')
-\tkzLabelPoints(O,O',B,E,F,T,T')
-\tkzDrawArc(M,T')(T)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection radical_axis_v3 (end)
-
-\subsection{Radical axis v4} % (fold)
-\label{sub:radical_axis_v4}
-\begin{Verbatim}
-\begin{tkzelements}
- z.O = point : new (0,0)
- z.B = point : new (5,0)
- z.Op = point : new (3,0)
- C.OB = circle : new (z.O,z.B)
- C.OpB = circle : new (z.Op,z.B)
- L.EF = C.OB : radical_axis (C.OpB)
- z.E,z.F = get_points(L.EF)
- z.H = L.EF.mid
- z.M = L.EF : point (.8)
- _,L = C.OB : tangent_from (z.M)
- _,z.T = get_points (L)
- _,L = C.OpB : tangent_from (z.M)
- _,z.Tp = get_points (L)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,B O',B)
- \tkzDrawSegments(M,T M,T')
- \tkzDrawSegments(E,F)
- \tkzDrawLine[add=.3 and .3](O,H)
- \tkzDrawPoints(O,O',B,E,H,M)
- \tkzLabelPoints[below right](O,O',E,F,M,T,T')
- \tkzDrawArc(M,B)(T)
-\end{tikzpicture}
-\end{Verbatim}
-
-
-\begin{tkzelements}
- z.O = point : new (0,0)
- z.B = point : new (5,0)
- z.Op = point : new (3,0)
- C.OB = circle : new (z.O,z.B)
- C.OpB = circle : new (z.Op,z.B)
- L.EF = C.OB : radical_axis (C.OpB)
- z.E,z.F = get_points(L.EF)
- z.H = L.EF.mid
- z.M = L.EF : point (.8)
- _,L = C.OB : tangent_from (z.M)
- _,z.T = get_points (L)
- _,L = C.OpB : tangent_from (z.M)
- _,z.Tp = get_points (L)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,B O',B)
- \tkzDrawSegments(M,T M,T')
- \tkzDrawSegments(E,F)
- \tkzDrawLine[add=.3 and .3](O,H)
- \tkzDrawPoints(O,O',B,E,H,M)
- \tkzLabelPoints[below right](O,O',E,F,M,T,T')
- \tkzDrawArc(M,B)(T)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection radical_axis_v4 (end)
-
-\subsection{Radical center} % (fold)
-\label{sub:radical_center}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
-\begin{tkzelements}
- z.O = point : new (0,0)
- z.x = point : new (1,0)
- z.y = point : new (4,0)
- z.z = point : new (2,0)
- z.Op = point : new (4,2)
- z.P = point : new (2,2.5)
- C.Ox = circle : new (z.O,z.x)
- C.Pz = circle : new (z.P,z.z)
- C.Opy = circle : new (z.Op,z.y)
- z.ap,z.a = intersection (C.Ox,C.Pz)
- z.bp,z.b = intersection (C.Opy,C.Pz)
- L.aap = line : new (z.a,z.ap)
- L.bbp = line : new (z.b,z.bp)
- z.X = intersection (L.aap,L.bbp)
--- or z.X = radical_center(C.Ox,C.Pz,C.Opy)
- L.OOp = line : new (z.O,z.Op)
- z.H = L.OOp : projection (z.X)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,a O',b P,z)
- \tkzDrawLines[red](a,X b',X H,X O,O')
- \tkzDrawPoints(O,O',P,a,a',b,b',X,H)
- \tkzLabelPoints[below right](O,O',P,H)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{tkzelements}
-z.O = point : new (0,0)
-z.x = point : new (1,0)
-z.y = point : new (4,0)
-z.z = point : new (2,0)
-z.Op = point : new (4,2)
-z.P = point : new (2,2.5)
-C.Ox = circle : new (z.O,z.x)
-C.Pz = circle : new (z.P,z.z)
-C.Opy = circle : new (z.Op,z.y)
-z.ap,z.a = intersection (C.Ox,C.Pz)
-z.bp,z.b = intersection (C.Opy,C.Pz)
-L.aap = line : new (z.a,z.ap)
-L.bbp = line : new (z.b,z.bp)
-z.X = intersection (L.aap,L.bbp)
-L.OOp = line : new (z.O,z.Op)
-z.H = L.OOp : projection (z.X)
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O,a O',b P,z)
-\tkzDrawLines[red](a,X b',X H,X O,O')
-\tkzDrawPoints(O,O',P,a,a',b,b',X,H)
-\tkzLabelPoints[below right](O,O',P,H)
-\end{tikzpicture}
-\end{minipage}
-% subsection radical_center (end)
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawLine[new](P,R)
+ \tkzDrawLines(P,B A,C B,C)
+ \tkzDrawPoints(P,Q,R,A,B,C)
+ \tkzLabelPoints(A,B,C,P,Q,R)
+ \end{tikzpicture}
+\end{center}
-\subsection{Radical circle} % (fold)
-\label{sub:radical_circle}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
-\begin{tkzelements}
- scale = .5
- z.A = point: new (0,0)
- z.B = point: new (6,0)
- z.C = point: new (0.8,4)
- T.ABC = triangle : new ( z.A,z.B,z.C )
- C.exa = T.ABC : ex_circle ()
- z.I_a,z.Xa = get_points (C.exa)
- C.exb = T.ABC : ex_circle (1)
- z.I_b,z.Xb = get_points (C.exb)
- C.exc = T.ABC : ex_circle (2)
- z.I_c,z.Xc = get_points (C.exc)
- C.ortho = C.exa : radical_circle (C.exb,C.exc)
- z.w,z.a = get_points (C.ortho)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C)
- \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc)
- \tkzDrawCircles[red,thick](w,a)
- \tkzDrawPoints(A,B,C)
- \tkzLabelPoints(A,B,C)
-\end{tikzpicture}
-\end{Verbatim}
\end{minipage}
+% subsection menelaus (end)
-\begin{tkzelements}
- scale = .5
- z.A = point: new (0,0)
- z.B = point: new (6,0)
- z.C = point: new (0.8,4)
- T.ABC = triangle : new ( z.A,z.B,z.C )
- C.exa = T.ABC : ex_circle ()
- z.I_a,z.Xa = get_points (C.exa)
- C.exb = T.ABC : ex_circle (1)
- z.I_b,z.Xb = get_points (C.exb)
- C.exc = T.ABC : ex_circle (2)
- z.I_c,z.Xc = get_points (C.exc)
- C.ortho = C.exa : radical_circle (C.exb,C.exc)
- z.w,z.a = get_points (C.ortho)
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,C)
- \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc)
- \tkzDrawCircles[red,thick](w,a)
- \tkzDrawPoints(A,B,C)
- \tkzLabelPoints(A,B,C)
-\end{tikzpicture}
-\hspace*{\fill}
-
-% subsection radical_circle (end)
\subsection{Euler ellipse} % (fold)
\label{sub:hexagram}
@@ -2136,21 +2167,22 @@ _,z.W = intersection (L.ZO,E)
\end{Verbatim}
\end{minipage}
\begin{minipage}{.6\textwidth}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawCircles[red](N,Ma O,A)
-\tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O)
-\tkzDrawPolygon[red](U,V,W)
-\tkzLabelPoints[red](U,V,W)
-\tkzLabelPoints(A,B,C,X,Y,Z)
-\tkzDrawLine[blue](I,J)
-\tkzLabelPoints[blue,right](O,N,G,H,I,J)
-\tkzDrawPoints(I,J,U,V,W)
-\tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc)
-\tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles[red](N,Ma O,A)
+ \tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O)
+ \tkzDrawPolygon[red](U,V,W)
+ \tkzLabelPoints[red](U,V,W)
+ \tkzLabelPoints(A,B,C,X,Y,Z)
+ \tkzDrawLine[blue](I,J)
+ \tkzLabelPoints[blue,right](O,N,G,H,I,J)
+ \tkzDrawPoints(I,J,U,V,W)
+ \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc)
+ \tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \end{tikzpicture}
+\end{center}
\end{minipage}
\begin{Verbatim}
@@ -2165,8 +2197,8 @@ _,z.W = intersection (L.ZO,E)
\tkzDrawLine[blue](I,J)
\tkzLabelPoints[blue,right](O,N,G,H,I,J)
\tkzDrawPoints(I,J,U,V,W)
- \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc)
- \tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc)
+ \tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
\end{tikzpicture}
\end{Verbatim}
@@ -2256,36 +2288,39 @@ z.O = C.DC : inversion (z.W)
\end{Verbatim}
\end{minipage}
\begin{minipage}{.6\textwidth}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles[teal](O_1,B)
-\tkzDrawSemiCircles[thin,teal](O_2,C O_3,B)
-\tkzDrawArc[purple,delta=0](D,V)(U)
-\tkzDrawCircle[new](O_7,C)
-\tkzDrawSegments[thin,purple](A,D D,B C,R C,S C,D U,V)
-\tkzDrawSegments[thin,red](O,D A,O O,B)
-\tkzDrawPoints(A,B,C,D,O_7) %,
-\tkzDrawPoints(O_1,O_2,O_3,U,V,R,S,W,O)
-\tkzDrawSegments[cyan](O_3,S O_2,R)
-\tkzDrawSegments[very thin](A,B)
-\tkzDrawSegments[cyan,thin](C,U U,D)
-\tkzMarkRightAngles[size=.2,fill=gray!40,opacity=.4](D,C,A A,D,B
- D,S,C D,W,V O_3,S,U O_2,R,U)
-\tkzFillAngles[cyan!40,opacity=.4](B,A,D A,D,O_1
- C,D,B D,C,R B,C,S A,R,O_2)
-\tkzFillAngles[green!40,opacity=.4](S,C,D W,R,D
- D,B,C R,C,A O_3,S,B)
-\tkzLabelPoints[below](C,O_2,O_3,O_1)
-\tkzLabelPoints[above](D)
-\tkzLabelPoints[below](O)
-\tkzLabelPoints[below left](A)
-\tkzLabelPoints[above left](R)
-\tkzLabelPoints[above right](S)
-\tkzLabelPoints[left](V)
-\tkzLabelPoints[below right](B,U,W,O_7)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[teal](O_1,B)
+ \tkzDrawSemiCircles[thin,teal](O_2,C O_3,B)
+ \tkzDrawArc[purple,delta=0](D,V)(U)
+ \tkzDrawCircle[new](O_7,C)
+ \tkzDrawSegments[thin,purple](A,D D,B C,R C,S C,D U,V)
+ \tkzDrawSegments[thin,red](O,D A,O O,B)
+ \tkzDrawPoints(A,B,C,D,O_7) %,
+ \tkzDrawPoints(O_1,O_2,O_3,U,V,R,S,W,O)
+ \tkzDrawSegments[cyan](O_3,S O_2,R)
+ \tkzDrawSegments[very thin](A,B)
+ \tkzDrawSegments[cyan,thin](C,U U,D)
+ \tkzMarkRightAngles[size=.2,fill=gray!40,opacity=.4](D,C,A A,D,B
+ D,S,C D,W,V O_3,S,U O_2,R,U)
+ \tkzFillAngles[cyan!40,opacity=.4](B,A,D A,D,O_1
+ C,D,B D,C,R B,C,S A,R,O_2)
+ \tkzFillAngles[green!40,opacity=.4](S,C,D W,R,D
+ D,B,C R,C,A O_3,S,B)
+ \tkzLabelPoints[below](C,O_2,O_3,O_1)
+ \tkzLabelPoints[above](D)
+ \tkzLabelPoints[below](O)
+ \tkzLabelPoints[below left](A)
+ \tkzLabelPoints[above left](R)
+ \tkzLabelPoints[above right](S)
+ \tkzLabelPoints[left](V)
+ \tkzLabelPoints[below right](B,U,W,O_7)
+ \end{tikzpicture}
+\end{center}
+
+
\end{minipage}
\begin{Verbatim}
@@ -2379,25 +2414,27 @@ z.O = C.DC : inversion (z.W)
z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
-\tkzDrawCircles[red](O,xa N,Ea)
-\tkzFillCircles[green!30!black,opacity=.3](O,xa)
-\tkzFillCircles[yellow!30,opacity=.7](Ja,Ea Jb,Eb Jc,Ec)
-\tkzFillCircles[teal!30!black,opacity=.3](S,a)
-\tkzFillCircles[green!30,opacity=.3](N,Ea)
-\tkzDrawPoints[red](Ea,Eb,Ec,xa,xb,xc,N)
-\tkzClipCircle(O,xa)
-\tkzDrawLines[add=3 and 3](A,B A,C B,C)
-\tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec)
-\tkzFillCircles[lightgray!30,opacity=.7](Ja,Ea Jb,Eb Jc,Ec)
-\tkzDrawCircles[teal](S,a)
-\tkzDrawPoints(A,B,C,O)
-\tkzDrawPoints[teal](S)
-\tkzLabelPoints(A,B,C,O,S,N)
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[red](O,xa N,Ea)
+ \tkzFillCircles[green!30!black,opacity=.3](O,xa)
+ \tkzFillCircles[yellow!30,opacity=.7](Ja,Ea Jb,Eb Jc,Ec)
+ \tkzFillCircles[teal!30!black,opacity=.3](S,a)
+ \tkzFillCircles[green!30,opacity=.3](N,Ea)
+ \tkzDrawPoints[red](Ea,Eb,Ec,xa,xb,xc,N)
+ \tkzClipCircle(O,xa)
+ \tkzDrawLines[add=3 and 3](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec)
+ \tkzFillCircles[lightgray!30,opacity=.7](Ja,Ea Jb,Eb Jc,Ec)
+ \tkzDrawCircles[teal](S,a)
+ \tkzDrawPoints(A,B,C,O)
+ \tkzDrawPoints[teal](S)
+ \tkzLabelPoints(A,B,C,O,S,N)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection apollonius_circle_v1_with_inversion (end)
\subsection{Apollonius circle v2} % (fold)
@@ -2472,82 +2509,24 @@ L.MaS = line: new (z.Ma,z.S)
z.t = intersection (L.ox,L.MaS) -- through
\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines[add=1 and 1](A,B A,C B,C)
-\tkzDrawCircles(Ja,Xa Jb,Xb Jc,Xc o,t N,Ma) %
-\tkzClipCircle(o,t)
-\tkzDrawLines[red](o,L N,o Ma,t)
-\tkzDrawLines[cyan,add=4 and 4](Ma,N o,t)
-\tkzDrawPoints(A,B,C,Ma,Ja,Jb,Jc)
-\tkzDrawPoints[red](N,O,L,S,o,t)
-\tkzLabelPoints[right,font=\tiny](A,B,C,Ja,Jb,Jc,O,N,L,S,Ma,o)
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines[add=1 and 1](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Xa Jb,Xb Jc,Xc o,t N,Ma) %
+ \tkzClipCircle(o,t)
+ \tkzDrawLines[red](o,L N,o Ma,t)
+ \tkzDrawLines[cyan,add=4 and 4](Ma,N o,t)
+ \tkzDrawPoints(A,B,C,Ma,Ja,Jb,Jc)
+ \tkzDrawPoints[red](N,O,L,S,o,t)
+ \tkzLabelPoints[right,font=\tiny](A,B,C,Ja,Jb,Jc,O,N,L,S,Ma,o)
+ \end{tikzpicture}
+\end{center}
% subsection apollonius_circle_v2 (end)
-\subsection{Orthogonal circles v1} % (fold)
-\label{sub:orthogonal_circles_v1}
-
-\begin{Verbatim}
-\begin{tkzelements}
- scale = .6
- z.C_1 = point: new (0,0)
- z.C_2 = point: new (8,0)
- z.A = point: new (5,0)
- C = circle: new (z.C_1,z.A)
- z.S,z.T = get_points (C: orthogonal_from (z.C_2))
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(C_1,T C_2,T)
- \tkzDrawSegments(C_1,T C_2,T)
- \tkzDrawLine(C_1,C_2)
- \tkzMarkRightAngle[fill=teal,%
- opacity=.2,size=1](C_1,T,C_2)
- \tkzDrawPoints(C_1,C_2,T)
- \tkzLabelPoints(C_1,C_2)
- \tkzLabelPoints[above](T)
- \tkzLabelSegment[left](C_1,T){r}
- \tkzLabelSegments[right](C_2,T){$\gamma$}
- \tkzLabelSegment[below](C_1,C_2){d}
- \tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1}
- \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2}
-\end{tikzpicture}
-\end{Verbatim}
-
-\begin{tkzelements}
-scale = .6
-z.C_1 = point: new (0,0)
-z.C_2 = point: new (8,0)
-z.A = point: new (5,0)
-C = circle: new (z.C_1,z.A)
-z.S,z.T = get_points (C: orthogonal_from (z.C_2))
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(C_1,T C_2,T)
-\tkzDrawSegments(C_1,T C_2,T)
-\tkzDrawLine(C_1,C_2)
-\tkzMarkRightAngle[fill=teal,opacity=.2,size=.5](C_1,T,C_2)
-\tkzDrawPoints(C_1,C_2,T)
-\tkzLabelPoints(C_1,C_2)
-\tkzLabelPoints[above](T)
-\tkzLabelSegment[left](C_1,T){r}
-\tkzLabelSegments[right](C_2,T){$\gamma$}
-\tkzLabelSegment[below](C_1,C_2){d}
-\tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1}
-\tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2}
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection orthogonal_circles_v1 (end)
-
-\subsection{Orthogonal circles v2} % (fold)
+\subsection{Orthogonal circles} % (fold)
\label{sub:orthogonal_circles_v2}
\begin{Verbatim}
@@ -2602,24 +2581,26 @@ L.OOp = line : new (z.O,z.Op)
z.M = L.OOp.mid
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle[red](O,P)
-\tkzDrawCircle[purple](O',z1)
-\tkzDrawCircle[cyan](M,T)
-\tkzDrawSegments(O',T O,T' O',T')
-\tkzDrawSegment[purple](O',T)
-\tkzDrawSegments[red](O,T O,O')
-\tkzDrawPoints(O,O',T,T',M)
-\tkzMarkRightAngle[fill=gray!10](O',T,O)
-\tkzLabelPoint[below](O){$O$}
-\tkzLabelPoint[above](T){$T$}
-\tkzLabelPoint[above](M){$M$}
-\tkzLabelPoint[below](T'){$T'$}
-\tkzLabelPoint[above left](O'){$O'$}
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle[red](O,P)
+ \tkzDrawCircle[purple](O',z1)
+ \tkzDrawCircle[cyan](M,T)
+ \tkzDrawSegments(O',T O,T' O',T')
+ \tkzDrawSegment[purple](O',T)
+ \tkzDrawSegments[red](O,T O,O')
+ \tkzDrawPoints(O,O',T,T',M)
+ \tkzMarkRightAngle[fill=gray!10](O',T,O)
+ \tkzLabelPoint[below](O){$O$}
+ \tkzLabelPoint[above](T){$T$}
+ \tkzLabelPoint[above](M){$M$}
+ \tkzLabelPoint[below](T'){$T'$}
+ \tkzLabelPoint[above left](O'){$O'$}
+ \end{tikzpicture}
+\end{center}
+
+
% subsection orthogonal_circles_v2 (end)
%
\subsection{Orthogonal circle to two circles} % (fold)
@@ -2674,19 +2655,22 @@ z.Tp = L.Tp.pb
z.Kp = L.Kp.pb
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(O,B O',D)
-\tkzDrawLine[cyan](E,F)
-\tkzDrawLines[add=.5 and .5,orange](O,O' O,T O,T')
-\tkzDrawSegments[cyan](M,T M,T' M,K M,K')
-\tkzDrawCircle(M,T)
-\tkzDrawPoints(O,O',T,M,T',K,K')
-\tkzLabelPoints(O,O',T,T',M,K,K')
-\end{tikzpicture}
-\hspace*{\fill}
-% \subsection{Orthogonal to two circles} % (fold)
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B O',D)
+ \tkzDrawLine[cyan](E,F)
+ \tkzDrawLines[add=.5 and .5,orange](O,O' O,T O,T')
+ \tkzDrawSegments[cyan](M,T M,T' M,K M,K')
+ \tkzDrawCircle(M,T)
+ \tkzDrawPoints(O,O',T,M,T',K,K')
+ \tkzLabelPoints(O,O',T,T',M,K,K')
+ \end{tikzpicture}
+\end{center}
+
+
+% subsection Orthogonal to two circles (fold)
\subsection{Midcircles} % (fold)
\label{sub:midcircles}
@@ -2738,36 +2722,39 @@ z.Ap = z.M_1: symmetry (z.A)
z.H_4,z.F,z.E,z.H_0 = L.AB : projection (z.O_4,z.G,z.H,z.P_0)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle[thin,fill=green!10](O_4,P_0)
-\tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
-\tkzDrawSemiCircles[teal](O_0,B)
-\tkzDrawSemiCircles[thin,teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
-\tkzDrawSemiCircles[color = orange](M_2,B)
-\tkzDrawSemiCircles[color = orange](M_1,A')
-\tkzDrawArc[purple,delta=0](M_0,P_0)(C)
-\tkzDrawSegments[very thin](A,B A,P B,Q)
-\tkzDrawSegments[color=cyan](O_0,P_0 B,J G,J G,O_0 H,O_2)
-\tkzDrawSegments[ultra thin,purple](M_1,P_0 M_2,P_0 M_1,M_0 M_0,P_1 M_0,P_0 M_1,J)
-\tkzDrawPoints(A,B,C,P_0,P_2,P_1,M_0,M_1,M_2,J,P,Q,S)
-\tkzDrawPoints(O_0,O_1,O_2,O_4,O_5,G,H)
-\tkzMarkRightAngle[size=.2,fill=gray!20,opacity=.4](O_0,P_0,M_0)
-\tkzLabelPoints[below](A,B,C,M_0,M_1,M_2,O_1,O_2,O_0)
-\tkzLabelPoints[above](P_0,O_5,O_4)
-\tkzLabelPoints[above](P_1,J)
-\tkzLabelPoints[above](P_2,P,Q,S)
-\tkzLabelPoints[above right](H,E)
-\tkzLabelPoints[above left](F,G)
-\tkzLabelPoints[below right](H_0)
-\tkzLabelCircle[below=4pt,font=\scriptsize](O_1,C)(80){$(\beta)$}
-\tkzLabelCircle[below=4pt,font=\scriptsize](O_2,B)(80){$(\gamma)$}
-\tkzLabelCircle[below=4pt,font=\scriptsize](O_0,B)(110){$(\alpha)$}
-\tkzLabelCircle[left,font=\scriptsize](O_4,P_2)(60){$(\delta)$}
-\tkzLabelCircle[above left,font=\scriptsize](O_5,C)(40){$(\epsilon)$}
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle[thin,fill=green!10](O_4,P_0)
+ \tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
+ \tkzDrawSemiCircles[teal](O_0,B)
+ \tkzDrawSemiCircles[thin,teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
+ \tkzDrawSemiCircles[color = orange](M_2,B)
+ \tkzDrawSemiCircles[color = orange](M_1,A')
+ \tkzDrawArc[purple,delta=0](M_0,P_0)(C)
+ \tkzDrawSegments[very thin](A,B A,P B,Q)
+ \tkzDrawSegments[color=cyan](O_0,P_0 B,J G,J G,O_0 H,O_2)
+ \tkzDrawSegments[ultra thin,purple](M_1,P_0 M_2,P_0 M_1,M_0 M_0,P_1 M_0,P_0 M_1,J)
+ \tkzDrawPoints(A,B,C,P_0,P_2,P_1,M_0,M_1,M_2,J,P,Q,S)
+ \tkzDrawPoints(O_0,O_1,O_2,O_4,O_5,G,H)
+ \tkzMarkRightAngle[size=.2,fill=gray!20,opacity=.4](O_0,P_0,M_0)
+ \tkzLabelPoints[below](A,B,C,M_0,M_1,M_2,O_1,O_2,O_0)
+ \tkzLabelPoints[above](P_0,O_5,O_4)
+ \tkzLabelPoints[above](P_1,J)
+ \tkzLabelPoints[above](P_2,P,Q,S)
+ \tkzLabelPoints[above right](H,E)
+ \tkzLabelPoints[above left](F,G)
+ \tkzLabelPoints[below right](H_0)
+ \tkzLabelCircle[below=4pt,font=\scriptsize](O_1,C)(80){$(\beta)$}
+ \tkzLabelCircle[below=4pt,font=\scriptsize](O_2,B)(80){$(\gamma)$}
+ \tkzLabelCircle[below=4pt,font=\scriptsize](O_0,B)(110){$(\alpha)$}
+ \tkzLabelCircle[left,font=\scriptsize](O_4,P_2)(60){$(\delta)$}
+ \tkzLabelCircle[above left,font=\scriptsize](O_5,C)(40){$(\epsilon)$}
+ \end{tikzpicture}
+\end{center}
+
+
\begin{Verbatim}
\begin{tkzelements}
@@ -2900,18 +2887,20 @@ z.xp,z.yp = get_points (C.C0A : orthogonal_from (z.M_1))
z.O = L.BA.mid
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(C_0,A C_1,A C_3,A C_5,A)
-\tkzDrawCircles[thick,color=red](M_0,x M_1,x')
-\tkzDrawCircles[thick,color=blue](O,A)
-\tkzDrawLines(C_0,C_1 B,M_1)
-\tkzDrawPoints(A,B,C_0,C_1,M_0,M_1,x,y)
-\tkzLabelPoints[below right](A,B,C_0,C_1,M_0,M_1,x,y)
-\tkzLabelLine[pos=1.25,right]( M_0,M_1){$(\Delta)$}
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(C_0,A C_1,A C_3,A C_5,A)
+ \tkzDrawCircles[thick,color=red](M_0,x M_1,x')
+ \tkzDrawCircles[thick,color=blue](O,A)
+ \tkzDrawLines(C_0,C_1 B,M_1)
+ \tkzDrawPoints(A,B,C_0,C_1,M_0,M_1,x,y)
+ \tkzLabelPoints[below right](A,B,C_0,C_1,M_0,M_1,x,y)
+ \tkzLabelLine[pos=1.25,right]( M_0,M_1){$(\Delta)$}
+ \end{tikzpicture}
+\end{center}
+
+
% subsection pencil_v1 (end)
\subsection{Pencil v2} % (fold)
@@ -2967,123 +2956,20 @@ z.O = L.BA.mid
z.t = C.orth2.through
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(C_0,A C_1,B)
-\tkzDrawCircles[thick,color=red](M_0,u M_1,v M_2,t)
-\tkzDrawLines[add= .75 and .75](C_0,C_1 M_0,M_1)
-\tkzDrawPoints(A,B,C_0,C_1,M_0,M_1,M_2)
-\tkzLabelPoints[below right](A,B,C_0,C_1,M_0,M_1,M_2)
-\tkzLabelLine[pos=2,right]( M_0,M_1){$(\Delta)$}
-\end{tikzpicture}
-\hspace*{\fill}
-%subsection pencil_v2 (end)
-
-\subsection{Power v1} % (fold)
-\label{sub:power_v1}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
-\begin{tkzelements}
- z.O = point : new (0,0)
- z.A = point : new (2,-2)
- z.M = point : new (-6,0)
- L.AM = line : new (z.A,z.M)
- C.OA = circle : new (z.O,z.A)
- z.Ap = C.OA : antipode (z.A)
- z.B = intersection (L.AM, C.OA)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(O,A)
- \tkzMarkRightAngle[fill=gray!10](A',B,M)
- \tkzDrawSegments(M,O A,A' A',B)
- \tkzDrawPoints(O,A,A',M,B)
- \tkzLabelPoints(O,A,A',M,B)
- \tkzDrawSegments[-Triangle](M,A M,A')
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{tkzelements}
-scale = 1
-z.O = point : new (0,0)
-z.A = point : new (2,-2)
-z.M = point : new (-6,0)
-L.AM = line : new (z.A,z.M)
-C.OA = circle : new (z.O,z.A)
-z.Ap = C.OA : antipode (z.A)
-z.B = intersection (L.AM, C.OA)
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(O,A)
-\tkzMarkRightAngle[fill=gray!10](A',B,M)
-\tkzDrawSegments(M,O A,A' A',B)
-\tkzDrawPoints(O,A,A',M,B)
-\tkzLabelPoints(O,A,A',M,B)
-\tkzDrawSegments[-Triangle](M,A M,A')
-\end{tikzpicture}
-\end{minipage}
-% subsection power_v1 (end)
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(C_0,A C_1,B)
+ \tkzDrawCircles[thick,color=red](M_0,u M_1,v M_2,t)
+ \tkzDrawLines[add= .75 and .75](C_0,C_1 M_0,M_1)
+ \tkzDrawPoints(A,B,C_0,C_1,M_0,M_1,M_2)
+ \tkzLabelPoints[below right](A,B,C_0,C_1,M_0,M_1,M_2)
+ \tkzLabelLine[pos=2,right]( M_0,M_1){$(\Delta)$}
+ \end{tikzpicture}
+\end{center}
-\subsection{Power v2} % (fold)
-\label{sub:power_v2}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
-\begin{tkzelements}
- z.O = point : new (0,0)
- z.A = point : new (2,2)
- z.M = point : new (-1.5,0)
- L.AM = line : new (z.A,z.M)
- C.OA = circle : new (z.O,z.A)
- z.Ap = C.OA : antipode (z.A)
- _,z.B = intersection (L.AM, C.OA)
- z.m = z.M : north(1)
- L.mM = line : new (z.m,z.M)
- z.U,z.V = intersection (L.mM,C.OA)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(O,A)
- \tkzMarkRightAngle[fill=gray!10](A',B,M)
- \tkzDrawSegments(M,O A,A' A',B A,B U,V)
- \tkzDrawPoints(O,A,A',M,B,U,V,m)
- \tkzLabelPoints(O,A,M,U,V,m)
- \tkzLabelPoints[below left](A',B)
- \tkzDrawSegments(M,A M,A')
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{tkzelements}
-scale = 1
-z.O = point : new (0,0)
-z.A = point : new (2,2)
-z.M = point : new (-1.5,0)
-L.AM = line : new (z.A,z.M)
-C.OA = circle : new (z.O,z.A)
-z.Ap = C.OA : antipode (z.A)
-_,z.B = intersection (L.AM, C.OA)
-z.m = z.M : north(1)
-L.mM = line : new (z.m,z.M)
-z.U,z.V = intersection (L.mM,C.OA)
-\end{tkzelements}
+%subsection pencil_v2 (end)
-\hspace*{\fill}\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(O,A)
-\tkzMarkRightAngle[fill=gray!10](A',B,M)
-\tkzDrawSegments(M,O A,A' A',B A,B U,V)
-\tkzDrawPoints(O,A,A',M,B,U,V,m)
-\tkzLabelPoints(O,A,M,U,V,m)
-\tkzLabelPoints[below left](A',B)
-\tkzDrawSegments(M,A M,A')
-\end{tikzpicture}
-\end{minipage}
-% subsection power_v2 (end)
\subsection{Reim v1} % (fold)
\label{sub:reim_v1}
@@ -3137,22 +3023,25 @@ z.U,z.V = intersection (L.mM,C.OA)
z.O = intersection (L.EC,L.FD)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(A,E B,H)
-\tkzDrawSegments(E,D C,F)
-\tkzDrawLines(E,O F,O)
-\tkzDrawLines[red](E,F H,G)
-\tkzDrawPoints(A,...,H,O)
-\tkzLabelPoints(A,B,D,F,G,O)
-\tkzLabelPoints[above](E,C,H)
-\tkzMarkAngles[size=.5](E,C,F E,D,F)
-\tkzFillAngles[green!40,opacity=.4,size=.5](E,C,F E,D,F)
-\tkzMarkAngles[size=.5](F,C,H G,D,E)
-\tkzFillAngles[red!40,opacity=.4,size=.5](F,C,H G,D,E)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,E B,H)
+ \tkzDrawSegments(E,D C,F)
+ \tkzDrawLines(E,O F,O)
+ \tkzDrawLines[red](E,F H,G)
+ \tkzDrawPoints(A,...,H,O)
+ \tkzLabelPoints(A,B,D,F,G,O)
+ \tkzLabelPoints[above](E,C,H)
+ \tkzMarkAngles[size=.5](E,C,F E,D,F)
+ \tkzFillAngles[green!40,opacity=.4,size=.5](E,C,F E,D,F)
+ \tkzMarkAngles[size=.5](F,C,H G,D,E)
+ \tkzFillAngles[red!40,opacity=.4,size=.5](F,C,H G,D,E)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection reim_v1 (end)
\subsection{Reim v2} % (fold)
@@ -3200,19 +3089,22 @@ z.m,z.mp = get_points (C.AC: tangent_at (z.M))
z.n,z.np = get_points (C.BC: tangent_at (z.N))
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(A,C B,C)
-\tkzDrawLines[new,add=1 and 1](M,m N,n C,c)
-\tkzDrawSegment(M,N)
-\tkzDrawPoints(A,B,C,M,N)
-\tkzLabelPoints[below right](A,B,C,M,N)
-\tkzFillAngles[blue!30,opacity=.3](m',M,C N,C,c' M,C,c n',N,C)
-\tkzLabelCircle[below=4pt,font=\scriptsize](A,C)(90){$(\alpha)$}
-\tkzLabelCircle[left=4pt,font=\scriptsize](B,C)(-90){$(\beta)$}
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,C B,C)
+ \tkzDrawLines[new,add=1 and 1](M,m N,n C,c)
+ \tkzDrawSegment(M,N)
+ \tkzDrawPoints(A,B,C,M,N)
+ \tkzLabelPoints[below right](A,B,C,M,N)
+ \tkzFillAngles[blue!30,opacity=.3](m',M,C N,C,c' M,C,c n',N,C)
+ \tkzLabelCircle[below=4pt,font=\scriptsize](A,C)(90){$(\alpha)$}
+ \tkzLabelCircle[left=4pt,font=\scriptsize](B,C)(-90){$(\beta)$}
+ \end{tikzpicture}
+\end{center}
+
+
% subsection reim_v2 (end)
\subsection{Reim v3} % (fold)
@@ -3282,21 +3174,23 @@ z.n,z.np = get_points (C.BC: tangent_at (z.N))
z.D = intersection (L.KO,C.zO)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawSegments(K,D D,C)
-\tkzDrawPolygon[teal](A,B,C)
-\tkzDrawCircles[orange](x,A y,B z,C)
-\tkzDrawPoints[fill=white](A,B,C,I,J,K,D)
-\tkzLabelPoints[below](A,B,J,K,O)
-\tkzLabelPoints[above](C,D,I)
-\tkzDrawPoints[fill=black](O)
-\tkzLabelCircle[below=4pt,font=\scriptsize](x,A)(20){$(\alpha)$}
-\tkzLabelCircle[left=4pt,font=\scriptsize](y,B)(60){$(\beta)$}
-\tkzLabelCircle[below=4pt,font=\scriptsize](z,C)(60){$(\gamma)$}
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments(K,D D,C)
+ \tkzDrawPolygon[teal](A,B,C)
+ \tkzDrawCircles[orange](x,A y,B z,C)
+ \tkzDrawPoints[fill=white](A,B,C,I,J,K,D)
+ \tkzLabelPoints[below](A,B,J,K,O)
+ \tkzLabelPoints[above](C,D,I)
+ \tkzDrawPoints[fill=black](O)
+ \tkzLabelCircle[below=4pt,font=\scriptsize](x,A)(20){$(\alpha)$}
+ \tkzLabelCircle[left=4pt,font=\scriptsize](y,B)(60){$(\beta)$}
+ \tkzLabelCircle[below=4pt,font=\scriptsize](z,C)(60){$(\gamma)$}
+ \end{tikzpicture}
+\end{center}
+
+
% subsection reim_v3 (end)
\subsection{Tangent and circle} % (fold)
@@ -3339,14 +3233,17 @@ z.i = L.Ti.pb
z.j = L.Tj.pb
z.k,z.l = get_points (C.AB: tangent_at (z.B))
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(A,B M,A)
-\tkzDrawPoints(A,B,E,i,j,M,S)
-\tkzDrawLines(E,i E,j k,l)
-\tkzLabelPoints[right,font=\small](A,B,E,S,M)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,B M,A)
+ \tkzDrawPoints(A,B,E,i,j,M,S)
+ \tkzDrawLines(E,i E,j k,l)
+ \tkzLabelPoints[right,font=\small](A,B,E,S,M)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection tangent_and_circle (end)
@@ -3377,13 +3274,16 @@ z.B = point: new (1,2)
z.E = point: new (-3,2)
z.C,z.D = z.E : homothety(2,z.A,z.B)
\end{tkzelements}
-\hspace*{\fill}\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints(A,B,C,E,D)
-\tkzLabelPoints(A,B,C,E)
-\tkzDrawCircles(A,B C,D)
-\tkzDrawLines(E,C E,D)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,B,C,E,D)
+ \tkzLabelPoints(A,B,C,E)
+ \tkzDrawCircles(A,B C,D)
+ \tkzDrawLines(E,C E,D)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection homothety (end)
@@ -3436,18 +3336,21 @@ z.b1,z.b2 = get_points (C.OA: tangent_at (z.B))
z.H = L.AB: projection (z.O)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircle(O,A)
-\tkzDrawPolygon(A,B,C)
-\tkzDrawSegments[new](A,O B,O O,H A,D D,B)
-\tkzDrawLine(b1,b2)
-\tkzDrawPoints(A,B,C,D,H,O)
-\tkzFillAngles[green!20,opacity=.3](H,O,B A,C,B A,B,b1)
-\tkzFillAngles[teal!20,opacity=.3](A,D,B b2,B,A)
-\tkzLabelPoints(A,B,C,D,H,O)
-\end{tikzpicture}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawSegments[new](A,O B,O O,H A,D D,B)
+ \tkzDrawLine(b1,b2)
+ \tkzDrawPoints(A,B,C,D,H,O)
+ \tkzFillAngles[green!20,opacity=.3](H,O,B A,C,B A,B,b1)
+ \tkzFillAngles[teal!20,opacity=.3](A,D,B b2,B,A)
+ \tkzLabelPoints(A,B,C,D,H,O)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection tangent_and_chord (end)
@@ -3541,26 +3444,26 @@ z.Cp,_ = intersection (L.GD,C.xD)
\end{Verbatim}
\end{minipage}
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\hspace*{\fill}
-\begin{tikzpicture}[scale=.75]
-\tkzGetNodes
-\tkzDrawCircles(O,B)
-\tkzDrawCircles[cyan](P,B)
-\tkzDrawCircles[red](w,E)
-\tkzDrawCircles[new](x,F)
-\tkzDrawSegments(A,G E,G C,G)
-\tkzDrawPolygons[new](A,E,C A',E',C')
-\tkzDrawPoints(A,...,G,A',E',C',O,P)
-\begin{scope}[font=\scriptsize]
- \tkzLabelPoints(A,...,F)
- \tkzLabelPoints[above left](G,A',E',C')
- \tkzLabelCircle[left](O,B)(30){$(\beta)$}
- \tkzLabelCircle[below](P,A)(40){$(\gamma)$}
- \tkzLabelCircle[right](w,C)(90){$(\alpha)$}
- \tkzLabelCircle[left](x,B)(-230){$((\delta))$}
-\end{scope}
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{center}
+ \begin{tikzpicture}[scale=.75]
+ \tkzGetNodes
+ \tkzDrawCircles(O,B)
+ \tkzDrawCircles[cyan](P,B)
+ \tkzDrawCircles[red](w,E)
+ \tkzDrawCircles[new](x,F)
+ \tkzDrawSegments(A,G E,G C,G)
+ \tkzDrawPolygons[new](A,E,C A',E',C')
+ \tkzDrawPoints(A,...,G,A',E',C',O,P)
+ \begin{scope}[font=\scriptsize]
+ \tkzLabelPoints(A,...,F)
+ \tkzLabelPoints[above left](G,A',E',C')
+ \tkzLabelCircle[left](O,B)(30){$(\beta)$}
+ \tkzLabelCircle[below](P,A)(40){$(\gamma)$}
+ \tkzLabelCircle[right](w,C)(90){$(\alpha)$}
+ \tkzLabelCircle[left](x,B)(-230){$((\delta))$}
+ \end{scope}
+ \end{tikzpicture}
+\end{center}
\end{minipage}
% subsection three_chords (end)
@@ -3620,19 +3523,20 @@ L.TA = C.wE : tangent_at (z.A)
L.TC = C.xE : tangent_at (z.C)
z.I = intersection (L.TA,L.TC)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(w,E)
-\tkzDrawCircles[cyan](x,E)
-\tkzDrawCircles[red](G,A)
-\tkzDrawLines(A,I C,I F,I)
-\tkzDrawPoints(A,C,E,F)
-\tkzLabelPoints[right](A)
-\tkzLabelPoints[above right](E,F)
-\tkzLabelPoints[below](C)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(w,E)
+ \tkzDrawCircles[cyan](x,E)
+ \tkzDrawCircles[red](G,A)
+ \tkzDrawLines(A,I C,I F,I)
+ \tkzDrawPoints(A,C,E,F)
+ \tkzLabelPoints[right](A)
+ \tkzLabelPoints[above right](E,F)
+ \tkzLabelPoints[below](C)
+ \end{tikzpicture}
+\end{center}
\end{minipage}
% subsection three_tangents (end)
@@ -3665,15 +3569,16 @@ C.AB = circle: new (z.A,z.B)
z.C = z.A: rotation (math.pi/3,z.B)
z.D = C.AB: midarc (z.B,z.C)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints(A,B,C)
-\tkzDrawCircles(A,B)
-\tkzDrawPoints(A,...,D)
-\tkzLabelPoints(A,...,D)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(A,B,C)
+ \tkzDrawCircles(A,B)
+ \tkzDrawPoints(A,...,D)
+ \tkzLabelPoints(A,...,D)
+ \end{tikzpicture}
+\end{center}
\end{minipage}
% subsection midarc (end)
@@ -3738,68 +3643,92 @@ z.Q = intersection (L.tB,L.AC)
z.R = intersection (L.tC,L.AB)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon[teal](A,B,C)
-\tkzDrawCircle(O,A)
-\tkzDrawPoints(A,B,C,P,Q,R)
-\tkzLabelPoints(A,B,C,P,Q,R)
-\tkzDrawLine[blue](Q,R)
-\tkzDrawLines[red](Ar,Al Br,Q Cr,Cl)
-\tkzDrawSegments(A,R C,P C,Q)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon[teal](A,B,C)
+ \tkzDrawCircle(O,A)
+ \tkzDrawPoints(A,B,C,P,Q,R)
+ \tkzLabelPoints(A,B,C,P,Q,R)
+ \tkzDrawLine[blue](Q,R)
+ \tkzDrawLines[red](Ar,Al Br,Q Cr,Cl)
+ \tkzDrawSegments(A,R C,P C,Q)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection lemoine_line_without_macro (end)
\subsection{First Lemoine circle} % (fold)
\label{sub:first_lemoine_circle}
+Draw lines through the symmedian point $L$ and parallel to the sides of the triangle. The points where the parallel lines intersect the sides of the triangle then lie on a circle known as the first Lemoine circle. It has center at the Brocard midpoint, i.e., the midpoint of $[OL]$, where $O$ is the circumcenter and $K$ is the symmedian point
+
+[\href{https://mathworld.wolfram.com/FirstLemoineCircle.html}{Weisstein, Eric W. "First Lemoine Circle." From MathWorld--A Wolfram Web Resource.}]
+
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
\begin{tkzelements}
z.A = point: new (1,1)
z.B = point: new (5,1)
- z.C = point: new (2,3)
- T = triangle: new (z.A,z.B,z.C)
- z.O = T.circumcenter
- z.o,z.w = get_points (T : first_lemoine_circle ())
+ z.C = point: new (2.2,4)
+ T = triangle: new (z.A,z.B,z.C)
+ z.O = T.circumcenter
+ C.first_lemoine = T:first_lemoine_circle()
+ z.o,z.w = get_points( C.first_lemoine )
+ z.y1,z.y2 = intersection (T.ab,C.first_lemoine)
+ z.y5,z.y6 = intersection (T.bc,C.first_lemoine)
+ z.y3,z.y4 = intersection (T.ca,C.first_lemoine)
z.L = T : lemoine_point ()
\end{tkzelements}
+\begin{center}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygons(A,B,C)
- \tkzDrawPoints(A,B,C,o,w,O,L)
- \tkzLabelPoints(A,B,C,o,w,O,L)
- \tkzDrawCircles(o,w O,A)
+ \tkzDrawPoints(A,B,C,o,O,L,y1,y2,y3,y4,y5,y6)
+ \tkzLabelPoints(A,B,C,o,O,L,y1,y2,y3,y4,y5,y6)
+ \tkzDrawCircles(o,w)
+ \tkzDrawLines(y1,y6 y5,y4 y2,y3 O,L)
\end{tikzpicture}
-\end{Verbatim}
+\end{center}
\end{minipage}
+
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{Verbatim}
\begin{tkzelements}
-z.A = point: new (1,1)
-z.B = point: new (5,1)
-z.C = point: new (2,3)
-T = triangle: new (z.A,z.B,z.C)
-z.O = T.circumcenter
-z.o,z.w = get_points(T:first_lemoine_circle())
-z.L = T : lemoine_point ()
+ z.A = point: new (1,1)
+ z.B = point: new (5,1)
+ z.C = point: new (2.2,4)
+ T = triangle: new (z.A,z.B,z.C)
+ z.O = T.circumcenter
+ C.first_lemoine = T:first_lemoine_circle()
+ z.o,z.w = get_points( C.first_lemoine )
+ z.y1,z.y2 = intersection (T.ab,C.first_lemoine)
+ z.y5,z.y6 = intersection (T.bc,C.first_lemoine)
+ z.y3,z.y4 = intersection (T.ca,C.first_lemoine)
+ z.L = T : lemoine_point ()
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[scale = 1.25]
-\tkzGetNodes
-\tkzDrawPolygons(A,B,C)
-\tkzDrawPoints(A,B,C,o,w,O,L)
-\tkzLabelPoints(A,B,C,o,w,O,L)
-\tkzDrawCircles(o,w O,A)
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,o,O,L,y1,y2,y3,y4,y5,y6)
+ \tkzLabelPoints(A,B,C,o,O,L,y1,y2,y3,y4,y5,y6)
+ \tkzDrawCircles(o,w)
+ \tkzDrawLines(y1,y6 y5,y4 y2,y3 O,L)
\end{tikzpicture}
+\end{Verbatim}
\end{minipage}
+
% subsection first_lemoine_circle (end)
\subsection{First and second Lemoine circles} % (fold)
\label{sub:first_and_second_lemoine_circles}
+Draw antiparallels through the symmedian point $L$. The points where these lines intersect the sides then lie on a circle, known as the cosine circle (or sometimes the second Lemoine circle). Refer to [\ref{sub:antiparallel_through_lemoine_point}]
+
+[\href{https://mathworld.wolfram.com/CosineCircle.html}{Weisstein, Eric W. "Cosine Circle." From MathWorld--A Wolfram Web Resource.}]
+
+
\begin{Verbatim}
\begin{tkzelements}
scale = 2
@@ -3863,19 +3792,22 @@ L.y4y5 = line : new (z.y4,z.y5)
L.y2y3 = line : new (z.y2,z.y3)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}[scale = .75]
-\tkzGetNodes
-\tkzDrawPolygons(a,b,c y1,y2,y3,y4,y5,y6)
-\tkzDrawPoints(x1,x2,x3,x4,x5,x6,L)
-\tkzDrawPoints(a,b,c,o,O,y1,y2,y3,y4,y5,y6)
-\tkzLabelPoints[below right](a,b,c,o,O,y1,y2,y3,y4,y5,y6)
-\tkzLabelPoints[below left](x1,x2,x3,x4,x5,x6)
-\tkzLabelPoints[above](L)
-\tkzDrawCircles(L,x o,p O,a)
-\tkzDrawSegments(L,O x1,x4 x2,x5 x3,x6)
-\end{tikzpicture}
-\hspace*{\fill}
+
+\begin{center}
+ \begin{tikzpicture}[scale = .75]
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c y1,y2,y3,y4,y5,y6)
+ \tkzDrawPoints(x1,x2,x3,x4,x5,x6,L)
+ \tkzDrawPoints(a,b,c,o,O,y1,y2,y3,y4,y5,y6)
+ \tkzLabelPoints[below right](a,b,c,o,O,y1,y2,y3,y4,y5,y6)
+ \tkzLabelPoints[below left](x1,x2,x3,x4,x5,x6)
+ \tkzLabelPoints[above](L)
+ \tkzDrawCircles(L,x o,p O,a)
+ \tkzDrawSegments(L,O x1,x4 x2,x5 x3,x6)
+ \end{tikzpicture}
+\end{center}
+
+
% subsection first_and_second_lemoine_circles (end)
\subsection{Inversion} % (fold)
@@ -3942,52 +3874,6 @@ z.Cp = C.AC: inversion ( z.B, z.E, z.C )
\end{minipage}
% subsection inversion (end)
-\subsection{Gergonne point} % (fold)
-\label{sub:gergonne_point}
-
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{Verbatim}
-\begin{tkzelements}
-z.a = point: new(1,0)
-z.b = point: new(6,2)
-z.c = point: new(2,5)
-T = triangle : new (z.a,z.b,z.c)
-z.g = T : gergonne_point ()
-z.i = T.incenter
-z.ta,z.tb,z.tc = get_points (T : intouch ())
-\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygons(a,b,c)
-\tkzDrawPoints(a,b,c,g)
-\tkzLabelPoints(a,b,c)
-\tkzDrawSegments (a,ta b,tb c,tc)
-\tkzDrawCircle(i,ta)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
-\begin{tkzelements}
-z.a = point: new(1,0)
-z.b = point: new(6,2)
-z.c = point: new(2,5)
-T = triangle : new (z.a,z.b,z.c)
-z.g = T : gergonne_point ()
-z.i = T.incenter
-z.ta,z.tb,z.tc = get_points (T : intouch ())
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygons(a,b,c)
-\tkzDrawPoints(a,b,c,g)
-\tkzLabelPoints(a,b,c)
-\tkzDrawSegments (a,ta b,tb c,tc)
-\tkzDrawCircle(i,ta)
-\end{tikzpicture}
-\end{minipage}
-% subsection gergonne_point (end)
\subsection{Antiparallel through Lemoine point} % (fold)
\label{sub:antiparallel_through_lemoine_point}
@@ -4035,16 +3921,18 @@ L.anti = T : antiparallel (z.L,2)
z.z_0,z.z_1 = get_points (L.anti)
\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygons(a,b,c)
-\tkzDrawPoints(a,b,c,L,x_0,x_1,y_0,y_1,z_0,z_1)
-\tkzLabelPoints(a,b)
-\tkzLabelPoints[above](L,c)
-\tkzDrawSegments(x_0,x_1 y_0,y_1 z_0,z_1)
-\tkzDrawCircle(L,x_0)
-\end{tikzpicture}
+\begin{center}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c)
+ \tkzDrawPoints(a,b,c,L,x_0,x_1,y_0,y_1,z_0,z_1)
+ \tkzLabelPoints(a,b)
+ \tkzLabelPoints[above](L,c)
+ \tkzDrawSegments(x_0,x_1 y_0,y_1 z_0,z_1)
+ \tkzDrawCircle(L,x_0)
+ \end{tikzpicture}
+\end{center}
+
\end{minipage}
% subsection antiparallel_through_lemoine_point (end)
@@ -4362,7 +4250,8 @@ end
\end{minipage}
% subsection three_circles (end)
-\subsection{pentagons in a golden arbelos} % (fold)
+\subsection{p
+Pentagons in a golden arbelos} % (fold)
\label{sub:golden_arbelos}
\begin{tkzelements}
@@ -4499,6 +4388,5 @@ z.D_2,z.E_2,z.F_2,z.G_2 = z.M_0 : homothety (kk,z.D_1,z.E_1,z.F_1,z.G_1)
\end{tikzpicture}
\end{Verbatim}
-
-
-% subsection golden_arbelos (end) \ No newline at end of file
+% subsection golden_arbelos (end)
+% section examples (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
index 6f58cbec5c..140063f928 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
@@ -282,7 +282,7 @@ Then |z.B = z.A * za| describes a rotation of point A by an angle |a|.
\end{minipage}
% subsubsection example_of_complex_use (end)
-\subsubsection{Point operations(complex)} % (fold)
+\subsubsection{Point operations (complex)} % (fold)
\label{ssub:point_operations_complex}
\begin{minipage}{.5\textwidth}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
index cc842aba53..1ba8fd0981 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
@@ -61,7 +61,7 @@ end
\end{tikzpicture}
\end{minipage}
-Other examples: \ref{ssub:altshiller}, \ref{ssub:lemoine}, \ref{sub:alternate}
+Other examples: \ref{sub:altshiller}, \ref{sub:lemoine}, \ref{sub:alternate}
% subsection line_line (end)
\newpage
@@ -117,7 +117,7 @@ _,z.K = intersection (C.OD,L.AE)
\end{tikzpicture}
\end{minipage}
-Other examples: \ref{ssub:altshiller}
+Other examples: \ref{sub:altshiller}
% subsection line_circle (end)
\newpage
@@ -168,7 +168,7 @@ C.DC = circle : new (z.D,z.C)
\end{tikzpicture}
\end{minipage}
-Other examples: \ref{ssub:altshiller}, \ref{sub:the_figure_pappus_circle}
+Other examples: \ref{sub:altshiller}, \ref{sub:the_figure_pappus_circle}
% subsection circle_circle (end)
\newpage
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
index 55608bb26b..10998bb7f5 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
@@ -1,6 +1,6 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-elements v2.25c
+% Documentation of tkz-elements v2.30c
% Copyright 2024 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -21,10 +21,10 @@
headings = small
]{tkz-doc}
\gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{2.25c}
+\gdef\tkzversionofpack{2.30c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{2.25c}
+\gdef\tkzversionofdoc{2.30c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -170,10 +170,8 @@ sharp corners
\AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
-
-
\begin{document}
-\LuaCodeDebugOn
+%\LuaCodeDebugOn
\parindent=0pt
\tkzTitleFrame{tkz-elements \tkzversionofpack\\Euclidean Geometry}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
index d42a3a109b..edb5864f4f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
index 0a11787d21..597a050850 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
@@ -1,5 +1,5 @@
% encoding : utf8
-% tkz-elements.sty v2.25c
+% tkz-elements.sty v2.30c
% Copyright 2024 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -11,7 +11,7 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\ProvidesPackage{tkz-elements}[2024/04/27 v2.25c Graphic Object Library]
+\ProvidesPackage{tkz-elements}[2024/07/16 version 2.30c Graphic Object Library]
\RequirePackage{luacode}
\directlua{require "tkz_elements_main"}
@@ -34,20 +34,19 @@
V={}}
\luacode}
{\endluacode}
-
+ % new version of the next macro proposed by Sanskar Singh
\def\tkzGetNodes{\directlua{%
- for K,V in pairs(z) do
- local n,sd,ft
- n = string.len(K)
- if n >1 then
- _,_,ft, sd = string.find( K , "(.+)(.)" )
- if sd == "p" then K=ft.."'" end
- _,_,xft, xsd = string.find( ft , "(.+)(.)" )
- if xsd == "p" then K=xft.."'".."'" end
- end
- tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
-end}
-}
+ for K,V in pairs(z) do
+ local n,sd,ft
+ n = string.len(K)
+ if n >1 then
+ _,_,ft, sd = string.find( K , "(.+)(.)" )
+ if sd == "p" then K=ft.."'" end
+ _,_,xft, xsd = string.find( ft , "(.+)(.)" )
+ if xsd == "p" then K=xft.."'".."'" end
+ end
+ tex.sprint("\string\\coordinate ("..K..") at ("..V.re..","..V.im..") ; \string\r")
+end}}
\def\tkzUseLua#1{\directlua{tex.print(tostring(#1))}}
\makeatletter
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
index 1999b8a073..e17ccb2ebb 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-circles.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
index b6a1bf7a5a..3ded691d53 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
@@ -1,6 +1,6 @@
-- tkz_elements_class.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- from class.lua (Simple Lua Classes from Lua-users wiki)
-- Compatible with Lua 5.1 (not 5.0).
-- http://lua-users.org/wiki/SimpleLuaClasses DavidManura
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
index a98cf40a63..7581c19d7a 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
@@ -1,6 +1,6 @@
-- tkz_elements-ellipses.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
index 40f2a4ebbf..88f9040b7f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_circles.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
index 69dcd6ace3..fe253e9aa2 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
@@ -1,6 +1,6 @@
-- tkz_elements_intersections.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
index 401ad46dda..a5504593c0 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_lines.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
index a71c0f7c27..c3f7e54ffd 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
index 4371214047..c80420090f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_matrices.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
index f1c4dc5d41..e2366e25e3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_points.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
index 5e92b4d598..0f74d28fe9 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_regular.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
index d4523d1826..02d3058a16 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_triangles.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -259,6 +259,15 @@ function feuerbach_tr_ (a,b,c)
intersection_cc_ (e,m,jb,hb),
intersection_cc_ (e,m,jc,hc)
end
+
+function similar_ (a,b,c)
+ local x,y,z,g
+ g = centroid_ (a,b,c)
+ x = homothety_ (g,-2,a)
+ y = homothety_ (g,-2,b)
+ z = homothety_ (g,-2,c)
+ return x,y,z
+end
--------------------
-- ellipse --
--------------------
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
index 9304768f31..797365f33f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
@@ -1,6 +1,6 @@
-- tkz_elements_lines.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -324,11 +324,25 @@ function line: mediator ()
m = midpoint_ (self.pa,self.pb)
return line : new (rotation_ (m,-math.pi/2,self.pb),rotation_ (m,math.pi/2,self.pb))
end
+
+function line : perpendicular_bisector ()
+ local m
+ m = midpoint_ (self.pa,self.pb)
+ return line : new (rotation_ (m,-math.pi/2,self.pb),rotation_ (m,math.pi/2,self.pb))
+end
+
-------------------
-- Result -> circle
-------------------
-function line: circle ()
+function line: circle (swap)
+ if swap == nil then
+ swap = false
+ end
+ if swap then
+ return circle : new (self.pb,self.pa)
+ else
return circle : new (self.pa,self.pb)
+ end
end
function line: circle_swap ()
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
index 10ee219519..142f00c8ed 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
@@ -1,6 +1,6 @@
-- tkz_elements-main.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
index 981ac68094..035e8a0a33 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
@@ -1,6 +1,6 @@
-- tkz_elements_matrices.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
index 94c9c555c0..daa3e21872 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
index fd0a3533a3..d471976d06 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
@@ -1,6 +1,6 @@
-- tkz_elements_parallelogram.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
index 4eb4b549d1..e29779ef79 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
@@ -1,6 +1,6 @@
-- tkz_elements_point.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
index e77e0af561..6625b9d789 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
@@ -1,6 +1,6 @@
-- tkz_elements_quadrilateral.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
index 2c07f78399..fdc3084501 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-rectangle.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
index 0641a858de..a4527c779b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_regular.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
index 1852c0ded4..93860b825c 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
@@ -1,6 +1,6 @@
-- tkz_elements-square.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
index c6dd2c3757..84b10273da 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements_triangles.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -57,19 +57,19 @@ end
-- points --
-----------------------
function triangle: trilinear (a,b,c)
- return barycenter_ ( {self.pa,a*self.a },{self.pb,b*self.b},{self.pc,c*self.c} )
+ return barycenter_ ({self.pa,a*self.a},{self.pb,b*self.b},{self.pc,c*self.c})
end
function triangle: barycentric (a,b,c)
- return barycenter_ ( {self.pa,a },{self.pb,b},{self.pc,c} )
+ return barycenter_ ({self.pa,a},{self.pb,b},{self.pc,c})
end
function triangle: bevan_point ()
- return circum_center_ ( self : excentral_tr())
+ return circum_center_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
end
function triangle: mittenpunkt_point ()
- return lemoine_point_ ( self : excentral_tr())
+ return lemoine_point_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
end
function triangle: gergonne_point ()
@@ -322,13 +322,20 @@ function triangle : cevian_circle (p)
pta,ptb,ptc = cevian_ (self.pa,self.pb,self.pc,p)
return circle : new (circum_circle_ (pta,ptb,ptc),pta)
end
+
+function triangle : symmedial_circle ()
+ local pta,ptb,ptc,p
+ p = lemoine_point_ ( self.pa , self.pb , self.pc)
+ pta,ptb,ptc = cevian_ (self.pa,self.pb,self.pc,p)
+ return circle : new (circum_circle_ (pta,ptb,ptc),pta)
+end
- function triangle : conway_circle ()
- local i,t
- i = in_center_ (self.pa,self.pb,self.pc)
- t = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
- return circle : new (i,t)
- end
+function triangle : conway_circle ()
+ local i,t
+ i = in_center_ (self.pa,self.pb,self.pc)
+ t = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
+ return circle : new (i,t)
+end
function triangle : pedal_circle (pt)
local x,y,z,c
@@ -338,7 +345,13 @@ function triangle : pedal_circle (pt)
c = circum_center_ (x,y,z)
return circle : new (c,x)
end
-
+
+function triangle: bevan_circle ()
+ local o,r,s,t
+ o = circum_center_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
+ r,s,t = excentral_tr_ ( self.pa , self.pb , self.pc)
+return circle : new (o, r)
+end
-------------------
-- Result -> triangle
-------------------
@@ -392,6 +405,12 @@ function triangle: symmedian ()
return triangle : new (cevian_ (self.pa,self.pb,self.pc,p))
end
+function triangle: symmedial ()
+ local p
+ p = lemoine_point_ ( self.pa , self.pb , self.pc)
+ return triangle : new (cevian_ (self.pa,self.pb,self.pc,p))
+end
+
function triangle: euler ()
return triangle : new (euler_points_ (self.pa,self.pb,self.pc) )
end
@@ -403,6 +422,10 @@ function triangle: pedal (pt)
z = projection_ (self.pa,self.pb,pt)
return triangle : new (x,y,z)
end
+
+function triangle: similar ()
+ return triangle : new (similar_ (self.pa,self.pb,self.pc) )
+end
-------------------
-- Result -> ellipse
-------------------
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
index 8b26fe4bd3..0dcbbfde61 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
@@ -1,6 +1,6 @@
-- tkz_elements_vectors.lua
--- date 2024/04/27
--- version 2.25c
+-- date 2024/07/16
+-- version 2.30c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tramlines/README b/macros/latex/contrib/tramlines/README
index b252d9323a..0dcd98c4a0 100644
--- a/macros/latex/contrib/tramlines/README
+++ b/macros/latex/contrib/tramlines/README
@@ -1,6 +1,6 @@
tramlines - make tramlines
-version: 1.1.0
+version: 1.1.1
This package automatically creates tramlines (lines above and below a title used by lawyers in the UK and the Commonwealth).
@@ -12,6 +12,9 @@ For suggestions, feature requests, and bug reports, please use the project's
GitHub site: https://github.com/ezgranet/tramlines
Version history:
+18/07/2024: Change erroneous left alignment to centre alignment
+
+
29/01/2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user niruvt
diff --git a/macros/latex/contrib/tramlines/tramlines-documentation.pdf b/macros/latex/contrib/tramlines/tramlines-documentation.pdf
index e9d9c9d6d9..1ccb2be965 100644
--- a/macros/latex/contrib/tramlines/tramlines-documentation.pdf
+++ b/macros/latex/contrib/tramlines/tramlines-documentation.pdf
Binary files differ
diff --git a/macros/latex/contrib/tramlines/tramlines-documentation.tex b/macros/latex/contrib/tramlines/tramlines-documentation.tex
index f39e7ba70c..ba56009346 100644
--- a/macros/latex/contrib/tramlines/tramlines-documentation.tex
+++ b/macros/latex/contrib/tramlines/tramlines-documentation.tex
@@ -74,9 +74,9 @@ breaklines,
firstnumber=last
]
{latex}
-\def\tramlinesversionnumber{1.1.0}
+\def\tramlinesversionnumber{1.1.1}
\ProvidesPackage{tramlines}
-[2023/01/29\tramlinesversionnumber\
+[2024/07/18\tramlinesversionnumber\
Tramlines]
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -112,7 +112,7 @@ firstnumber=last
\centering
{%notglobal
\setlength\doublerulesep{\tramlinesep}% <-- set distance between double rule
-\begin{tabular}[t]{l c c }
+\begin{tabular}[t]{c c c }
\toprule\toprule
& #1 & \\
\bottomrule\bottomrule
@@ -129,8 +129,19 @@ firstnumber=last
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%\end{minted}
+\section{Version History}
+\subsection*{\ttfamily 1.1.1}
+\ttfamily 18 July 2024: Change erroneous left alignment to centre alignment
+\subsection*{\ttfamily 1.1.0}
+
+\ttfamily 29 October 2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user `niruvt'
+
+\ttfamily 29/01/2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user niruvt
+
+
\subsection*{\texttt{1.0.0}}
+
\ttfamily 27 January 2023: Package creation
diff --git a/macros/latex/contrib/tramlines/tramlines.sty b/macros/latex/contrib/tramlines/tramlines.sty
index f3288a8d1f..72878c423e 100644
--- a/macros/latex/contrib/tramlines/tramlines.sty
+++ b/macros/latex/contrib/tramlines/tramlines.sty
@@ -1,6 +1,6 @@
-\def\tramlinesversionnumber{1.1.0}
+\def\tramlinesversionnumber{1.1.1}
\ProvidesPackage{tramlines}
-[2023/01/29\tramlinesversionnumber\
+[2024/07/18\tramlinesversionnumber\
Tramlines]
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -36,7 +36,7 @@
\centering
{%notglobal
\setlength\doublerulesep{\tramlinesep}% <-- set distance between double rule
-\begin{tabular}[t]{l c c }
+\begin{tabular}[b]{c c c }
\toprule\toprule
& #1 & \\
\bottomrule\bottomrule
diff --git a/macros/latex/contrib/typog/LICENSE b/macros/latex/contrib/typog/LICENSE
new file mode 100644
index 0000000000..888d9e68e7
--- /dev/null
+++ b/macros/latex/contrib/typog/LICENSE
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3c
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % https://www.latex-project.org/lppl.txt
+ % and version 1.3c or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/latex/contrib/typog/Makefile b/macros/latex/contrib/typog/Makefile
index bb3c83ab24..1b7e0b21a3 100644
--- a/macros/latex/contrib/typog/Makefile
+++ b/macros/latex/contrib/typog/Makefile
@@ -7,8 +7,9 @@
SHELL := /bin/sh
-LATEX := /usr/bin/env max_print_line=2147483647 pdflatex
-LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode
+LATEX_PROPER := pdflatex
+LATEX := /usr/bin/env max_print_line=2147483647 $(LATEX_PROPER)
+LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode -output-directory=.
LATEX_RERUN_TRIGGER := '^Package rerunfilecheck Warning: File [^ ]* has changed'
LATEX_WARNING := '^LaTeX (|[A-Za-z0-9_]* )Warning:'
@@ -16,6 +17,10 @@ MAKEINDEX := makeindex
MAKEINDEX_FLAGS := -q
+MAKEINFO := makeinfo
+MAKEINFO_FLAGS := --no-split
+
+
METAPOST := mpost
METAPOST_FLAGS := -file-line-error -interaction=nonstopmode -tex=latex
@@ -24,8 +29,12 @@ PODCHECKER := podchecker
PODCHECKER_FLAGS := -warnings
+define SED_VERSION_REGEXP
+^\( *\|\\ProvidesPackage{[^}]*} *\)\[\([0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*\) *v\([^ ]*\) *\([^]]*\)].*$$
+endef
+
POD2MAN := pod2man
-POD2MAN_FLAGS := $$(sed -ne 's,\\ProvidesPackage{typog}\[\([0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*\) *v\([^ ]*\) .*$$,--date=\1 --release=\2,p' < typog.sty)
+POD2MAN_FLAGS := $$(sed -ne 's,$(SED_VERSION_REGEXP),--date=\2 --release=\3,p' < typog.sty)
POD2TEXI := pod2texi
@@ -33,31 +42,32 @@ POD2TEXI_FLAGS :=
GROFF := groff
-## Codes of serif fonts that work for PDF output
+## Codes of fonts that work for PDF output as by the contents
+## of "/usr/share/groff/current/font/devpdf".
+##
+## Serif
## BM: URW Bookman L
## N: URW Century Schoolbook L
## P: URW Palladio L
## T: URW Nimbus Roman No9 L
+##
+## Sans Serif
+## A: Avantgarde
+## H: Helvetica
+##
+## Monospace
+## C: Courier
GROFF_FLAGS := -Tpdf -dpaper=a4 -fP -man -wall
-SPELLCHECK := aspell
-SPELLCHECK_FLAGS := \
- --add-tex-command='citenum p' --add-tex-command='code p' \
- --add-tex-command='Cref p' --add-tex-command='cref p' \
- --add-tex-command='cs p' \
- --add-tex-command='DescribeEnv p' --add-tex-command='DescribeMacro p' \
- --add-tex-command='marg p' --add-tex-command='meta p' \
- --add-tex-command='oarg p' \
- --lang=en_US --mode=tex
-
-
-SOURCE_FILES := LICENSE Makefile typog.dtx typog.ins
+PROJECT_NAME := typog
+SOURCE_FILES := LICENSE Makefile README.md typog.dtx typog.ins
+DOCUMENTATION_FILES := typog-example.pdf typog-grep.1.pdf typog.pdf
.PHONY: all
-all: sty pdf man
+all: sty pdf bin man
.PHONY: sty
@@ -65,7 +75,7 @@ sty: typog.sty
.PHONY: pdf
-pdf: doc ex nomt
+pdf: doc ex test
.PHONY: doc
@@ -76,69 +86,88 @@ doc: typog.pdf
ex: typog-example.pdf
-.PHONY: nomt
-nomt: typog-nomt.pdf
+.PHONY: test
+test: typog-minimal-test.pdf typog-without-microtype-test.pdf
+
+
+.PHONY: bin
+bin: typog-grep
.PHONY: man
man: typog-grep.1
-.PHONY: cpio
-cpio:
- cd ..; \
- echo $(addprefix typog/,$(SOURCE_FILES)) | \
- cpio -o | \
- gzip > "typog-$$(date +%Y-%m-%d).cpio.gz"
+export TEMPORARY_DIRECTORY
+
+
+.PHONY: dist
+dist:
+ $(eval TEMPORARY_DIRECTORY := $(shell mktemp -d))
+ trap '$(RM) -r $(TEMPORARY_DIRECTORY); exit 1' HUP INT QUIT TERM; $(MAKE) __dist
+ $(RM) -r $(TEMPORARY_DIRECTORY)
+
+
+.PHONY: __dist
+__dist: LATEX_FLAGS += -interaction=batchmode
+__dist: $(DOCUMENTATION_FILES)
+ test -d '$(TEMPORARY_DIRECTORY)'
+ test -w '$(TEMPORARY_DIRECTORY)'
+ mkdir $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)
+ cp $(SOURCE_FILES) $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)
+ mkdir $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)/docs
+ cp $(DOCUMENTATION_FILES) $(TEMPORARY_DIRECTORY)/$(PROJECT_NAME)/docs
+ tar czf $(PROJECT_NAME).tar.gz -C $(TEMPORARY_DIRECTORY) $(PROJECT_NAME)
-.PHONY: tar
-tar:
- cd ..; \
- tar czf "typog-$$(date +%Y-%m-%d).tar.gz" $(addprefix typog/,$(SOURCE_FILES))
+.PHONY: distcheck
+distcheck: LATEX_FLAGS += -interaction=batchmode
+distcheck: dist
+ $(eval TEMPORARY_DIRECTORY := $(shell mktemp -d))
+ test -d '$(TEMPORARY_DIRECTORY)'
+ test -w '$(TEMPORARY_DIRECTORY)'
+ tar xzf $(PROJECT_NAME).tar.gz -C $(TEMPORARY_DIRECTORY)
+ $(MAKE) --directory=$(TEMPORARY_DIRECTORY)/$(PROJECT_NAME) LATEX_FLAGS='$(LATEX_FLAGS)' all
+ $(RM) -r $(TEMPORARY_DIRECTORY)
+ @printf '\n\ndistcheck passed.\n'
.PHONY: clean
clean:
- $(RM) ./*.1 ./*.aux ./*.brf ./*.glg ./*.glo ./*.gls
- $(RM) ./*.hd ./*.idx ./*.ilg ./*.ind ./*.loe ./*.lof ./*.log ./*.lot
- $(RM) ./*.mps ./*.mpx ./*.out ./*.pdf ./*.toc
+ $(RM) ./*.1 ./*.aux ./*.brf ./*.dvi ./*.glg ./*.glo ./*.gls
+ $(RM) ./*.hd ./*.idx ./*.ilg ./*.ind ./*.info ./*.loe ./*.lof ./*.log ./*.lot
+ $(RM) ./*.mps ./*.mpx ./*.out ./*.pdf ./*.pl.in ./*.toc
$(RM) mptextmp.* mpxerr.tex
$(RM) README README.html RELEASE-HOWTO RELEASE-HOWTO.html
+ $(RM) typog-grep typog-grep.version.sed
+ $(RM) $(PROJECT_NAME).tar.gz
.PHONY: mostlyclean
mostlyclean: clean
+ $(RM) ./*.texi
.PHONY: maintainer-clean
maintainer-clean: mostlyclean
- $(RM) ./*.ist ./*.mp ./*.pl ./*.pod ./*.sed ./*.sty ./*.tex
+ $(RM) ./*.gst ./*.ist ./*.mp ./*.pl ./*.pod ./*.sed ./*.sty ./*.tex
.PHONY: tool-check
tool-check:
- @printf '*** LATEX = "%s"\n' '$(LATEX)'
- $(LATEX) --version
+ @printf '*** LATEX_PROPER = "%s"\n' '$(LATEX_PROPER)'
+ $(LATEX_PROPER) --version
+ @printf '\n\n*** BibTeX\n'
+ bibtex --version
@printf '\n\n*** MAKEINDEX = "%s"\n' '$(MAKEINDEX)'
- $(MAKEINDEX) < /dev/null
+ $(MAKEINDEX) < /dev/null
@printf '\n\n*** METAPOST = "%s"\n' '$(METAPOST)'
$(METAPOST) --version
@printf '\n*** POD2MAN = "%s"\n' '$(POD2MAN)'
$(POD2MAN) --help > /dev/null
@printf '\n\n*** POD2TEXI = "%s"\n' '$(POD2TEXI)'
$(POD2TEXI) --version
- @printf '\n\nTool check passed.\n'
-
-
-.PHONY: spell-check
-spell-check:
- @sed -e '\#<DISABLE-SPELL-CHECK/>#d' \
- -e '\#<DISABLE-SPELL-CHECK>#,\#</DISABLE-SPELL-CHECK>#d' < typog.dtx | \
- sed -e 's/^ *%%*//' | \
- sed -e 's/\\-//g' -e 's/|[^|]*|/ /g' | \
- $(SPELLCHECK) $(SPELLCHECK_FLAGS) list | \
- sort | uniq | fmt | sed -e 's/ / /g'
+ @printf '\n\ntool check passed.\n'
.PHONY: update-docs
@@ -151,10 +180,16 @@ Selected Phony Targets
----------------------
all: Make everything there is to make. This is the .DEFAULT_GOAL.
+bin: Build typog-grep (which is not a binary, but executable).
+
clean: Remove some products.
-cpio: In the parent directory create a cpio(1) archive of the
- project source files whose name is time-stamped.
+dist: Create a tar file of the project source files and the PDF
+ documentation files. The archive is in the form and has a
+ name that CTAN prefers.
+
+distcheck: Create a tar file of the project source files, unpack it in
+ a different location and build all targets.
doc: Build "typog.pdf" the Typog documentation.
@@ -170,12 +205,14 @@ pdf: Build doc: and gauge:.
sty: Only extract "typog.sty" from "typog.dtx". This
operation requires LaTeX (-> $(LATEX)) and nothing else.
-tar: In the parent directory create a tar(1) file of the project
- source files whose name is time-stamped.
+test: Run some tests.
tool-check: Check whether some of the required tools to build the
project are available.
+update-docs: Copy the documentation files into the "docs"
+ sub-directory.
+
Selected Implicit Rules
-----------------------
@@ -206,6 +243,7 @@ README: Convert "README.html" to plain text. Requires w3m(1).
endef
+
.PHONY: help
help:
$(info $(HELP_SCREEN))
@@ -217,10 +255,10 @@ help:
define MAKE_INDEX_AND_GLOSSARY
-sed -e '/@/d' -e 's/{\\ttfamily /{\\ttfamily\\hskip0pt\\relax /' < $*.idx > ,$*.idx; \
+sed -e '/@/d' -e 's/{\\ttfamily /{\\ttfamily\\hskip0pt\\relax /' < $*.idx > ,$*.idx; \
mv ,$*.idx $*.idx; \
-$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s typog.ist -t $*.ilg -o $*.ind $*.idx; \
-$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s gglo.ist -t $*.glg -o $*.gls $*.glo
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s $*.ist -t $*.ilg -o $*.ind $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s $*.gst -t $*.glg -o $*.gls $*.glo
endef
define GREP_LATEX_WARNINGS
@@ -253,7 +291,13 @@ endef
%-1.mps %-2.mps %-3.mps %-4.mps: %.mp
- $(METAPOST) -s 'outputtemplate="%j-%c.mps"' $(METAPOST_FLAGS) $<
+ $(METAPOST) -s 'outputtemplate="%j-%c.mps"' $(METAPOST_FLAGS) $< || { \
+ printf '=== $*.log ===\n'; \
+ cat $*.log; \
+ printf '\n\n=== mpxerr.log ===\n'; \
+ cat mpxerr.log; \
+ false; \
+ } 1>&2
%.1: %.pod
@@ -263,6 +307,15 @@ endef
%.1.pdf: %.1
$(GROFF) $(GROFF_FLAGS) ./$< > $@
+%.texi: %.pod
+ $(POD2TEXI) $(POD2TEXI_FLAGS) --output=$@ ./$<
+
+%.info: %.texi
+ $(MAKEINFO) $(MAKEINFO_FLAGS) --output=$@ $<
+
+%.info.pdf: %.texi
+ $(MAKEINFO) $(MAKEINFO_FLAGS) --pdf --output=$@ $<
+
%.tex: %.pod | teximan2latex.sed
$(POD2TEXI) $(POD2TEXI_FLAGS) ./$< | sed -f teximan2latex.sed > $@
@@ -276,12 +329,11 @@ endef
crooked-paragraphs.mp slant-angle.mp smooth-parshapes.mp title.mp \
teximan2latex.sed \
-typog-grep.pl typog-grep typog-grep.pod \
-typog.sty typog.ist typog-example.tex typog-nomt.tex: \
+typog-grep.pl.in typog-grep.pod \
+typog.sty typog.ist typog-example.tex \
+typog-minimal-test.tex typog-without-microtype-test.tex: \
typog.ins typog.dtx
$(LATEX) $(LATEX_FLAGS) $<
- chmod 755 typog-grep.pl
- ln -sf typog-grep.pl typog-grep
crooked-paragraphs-1.mps crooked-paragraphs-2.mps \
@@ -300,3 +352,14 @@ typog.pdf: typog.dtx \
smooth-parshapes-1.mps smooth-parshapes-2.mps smooth-parshapes-3.mps \
typog-grep.tex \
| typog.sty
+
+
+typog-grep.pl: typog-grep.pl.in typog.sty
+ sed -ne 's,$(SED_VERSION_REGEXP),s#@DATE@#\2#g\ns#@RELEASE@#\3#g\ns#@TITLE@#\4#g,p' \
+ < typog.sty \
+ > typog-grep.version.sed
+ sed -f typog-grep.version.sed < $< > $@
+ chmod 755 $@
+
+typog-grep: typog-grep.pl
+ ln -sf $< $@
diff --git a/macros/latex/contrib/typog/README.md b/macros/latex/contrib/typog/README.md
index fb55ccb1e1..c67519bffc 100644
--- a/macros/latex/contrib/typog/README.md
+++ b/macros/latex/contrib/typog/README.md
@@ -1,3 +1,6 @@
+![distcheck status](https://github.com/cspiel/typog/actions/workflows/distcheck.yml/badge.svg)
+
+
# TypoG &ndash; Typographic Fine-Tuning for LaTeX
LaTeX package `typog` provides macros for (micro-)typographic enhancements;
@@ -8,6 +11,7 @@ it covers a variety of topics:
* Manual italic correction
* Extra kerning for slash and hyphen
* Raising selected characters (e.g. hyphen, en-dash, and em-dash)
+* Adjusting the vertical position of `itemize`'s labels
* Aligning of the last line of a paragraph
* Filling of the last line last line of a paragraph
* Word spacing control
diff --git a/macros/latex/contrib/typog/RELEASE-HOWTO.md b/macros/latex/contrib/typog/RELEASE-HOWTO.md
deleted file mode 100644
index 13435ef66d..0000000000
--- a/macros/latex/contrib/typog/RELEASE-HOWTO.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# How to prepare a new release
-
-... and not make too many mistakes.
-
-
-1. Check that the work-area is clean with respect to **git**-tracked
- files.
-
- ``` git status ```
-
-1. Update the date stamp of `\ProvidesPackage`.
-
-1. (Temporarily) Zero the `\overfullrule`s of the documentation and
- the example files.
-
-1. Thoroughly clean the work-area:
-
- ```make maintainer-clean```
-
-1. Rebuild:
-
- ```make```
-
-1. Check that all _*.sty_ and _*.pdf_ files are in good shape.
-
-1. Push the documentation files created in the previous step down into
- the *docs* directory:
-
- ```make update-docs```
-
-1. Undo the `\overfullrule` change.
-
-1. Commit the changes:
-
- ```
- git add .
- ```
-
- and finally
-
- ```
- git commit
- ```
-
-1. Tag the commit with the version string of `\ProvidesPackage`:
-
- ```git tag v1.23```
-
-1. Push the changes to the public repository:
-
- ```git push origin master --tags```
diff --git a/macros/latex/contrib/typog/docs/index.md b/macros/latex/contrib/typog/docs/index.md
deleted file mode 100644
index f4dc2e8bd9..0000000000
--- a/macros/latex/contrib/typog/docs/index.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### Package Documentation
-
-- Comprehensive `typog` documentation: [typog.pdf](https://cspiel.github.io/typog/typog.pdf)
-- `typog` examples and tests: [typog-example.pdf](https://cspiel.github.io/typog/typog-example.pdf)
-- **typog-grep** manual page: [typog-grep.1](https://cspiel.github.io/typog/typog-grep.1) and as PDF: [typog-grep.1.pdf](https://cspiel.github.io/typog/typog-grep.1.pdf)
diff --git a/macros/latex/contrib/typog/docs/typog-example.pdf b/macros/latex/contrib/typog/docs/typog-example.pdf
index 621ac319d2..48a8a506e1 100644
--- a/macros/latex/contrib/typog/docs/typog-example.pdf
+++ b/macros/latex/contrib/typog/docs/typog-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/docs/typog-grep.1 b/macros/latex/contrib/typog/docs/typog-grep.1
deleted file mode 100644
index 372c87bc5f..0000000000
--- a/macros/latex/contrib/typog/docs/typog-grep.1
+++ /dev/null
@@ -1,428 +0,0 @@
-.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43)
-.\"
-.\" Standard preamble:
-.\" ========================================================================
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. \*(C+ will
-.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
-.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
-.\" nothing in troff, for use with C<>.
-.tr \(*W-
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` ""
-. ds C' ""
-'br\}
-.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
-. ds C`
-. ds C'
-'br\}
-.\"
-.\" Escape single quotes in literal strings from groff's Unicode transform.
-.ie \n(.g .ds Aq \(aq
-.el .ds Aq '
-.\"
-.\" If the F register is >0, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
-.\" entries marked with X<> in POD. Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.\"
-.\" Avoid warning from groff about undefined register 'F'.
-.de IX
-..
-.nr rF 0
-.if \n(.g .if rF .nr rF 1
-.if (\n(rF:(\n(.g==0)) \{\
-. if \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. if !\nF==2 \{\
-. nr % 0
-. nr F 2
-. \}
-. \}
-.\}
-.rr rF
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "TYPOG-GREP 1"
-.TH TYPOG-GREP 1 "2024-05-07" "perl v5.36.0" "User Contributed Perl Documentation"
-.\" For nroff, turn off justification. Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.if n .ad l
-.nh
-.\" Turn off justification.
-.na
-.SH "NAME"
-typog\-grep \- grep for typog\-inspect elements in LaTeX log files
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-.IP "\fBtypog-grep\fR \-a|\-\-all|\-\-any [\fI\s-1OPTION\s0\fR...] \fILOG-FILE\fR..." 4
-.IX Item "typog-grep -a|--all|--any [OPTION...] LOG-FILE..."
-.PD 0
-.IP "\fBtypog-grep\fR [\fI\s-1OPTION\s0\fR...] \fI\s-1REGEXP\s0\fR \fILOG-FILE\fR..." 4
-.IX Item "typog-grep [OPTION...] REGEXP LOG-FILE..."
-.PD
-.PP
-The first form shows all \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR elements in \fILOG-FILE\fR.
-.PP
-The second form shows the contents of \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR elements
-whose \fI\s-1ID\s0\fRs match \fI\s-1REGEXP\s0\fR in \fILOG-FILE\fR.
-.PP
-If no \fILOG-FILE\fR is given read from \fIstdin\fR.
-The filename\ \f(CW\*(C`\-\*(C'\fR is synonymous to \fIstdin\fR.
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBtypog-grep\fR is a tailored post-processor for LaTeX log files
-and the \f(CW\*(C`typoginspect\*(C'\fR environment as provided by package\ typog.
-It shares more with the venerable
-\&\fBsgrep\fR <https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html>
-than with \s-1POSIX\s0\ \fBgrep\fR <https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html>.
-.PP
-The LaTeX user brackets her text in
-.PP
-.Vb 3
-\& \ebegin{typoginspect}{ID}
-\& Text and code to investigate
-\& \eend{typoginspect}
-.Ve
-.PP
-where \fI\s-1ID\s0\fR is used to identify one or more bracketed snippets.
-\&\fI\s-1ID\s0\fR does not have to be unique.
-The \fI\s-1REGEXP\s0\fR mechanism makes it easy to select groups of related \fI\s-1ID\s0\fRs
-if they are named accordingly.
-.PP
-In \fILOG-FILE\fR the environment shows up, packed with tracing information, as
-.PP
-.Vb 3
-\& <typog\-inspect id="ID" job="JOB\-NAME" line="LINE\-NUMBER" page="PAGE\-NUMBER">
-\& Trace Data
-\& </typog\-inspect>
-.Ve
-.PP
-where all the capital-letter sequences are meta-variables
-and in particular
-\&\fIJOB-NAME\fR is the expansion of \f(CW\*(C`\ejobname\*(C'\fR,
-\&\fILINE-NUMBER\fR is the LaTeX source file line number
-of the beginning of the \f(CW\*(C`typoginspect\*(C'\fR environment,
-and \fIPAGE-NUMBER\fR is the page where
-the output of \f(CW\*(C`Text\ and\ code\ to\ investigate\*(C'\fR occurs.
-.PP
-\&\fBtypog-grep\fR reveals the contents of \fILOG-FILE\fR
-between \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR
-and \f(CW\*(C`</typog\-inspect>\*(C'\fR excluding the XML-tags.
-Access the \fIJOB-NAME\fR, \fILINE-NUMBER\fR, and \fIPAGE-NUMBER\fR
-with the commandline options
-\&\fB\-\-job\-name\fR, \fB\-\-line\-number\fR, and \fB\-\-page\-number\fR, respectively.
-Use \fB\-\-id\fR to show the name of the IDs that matched \fI\s-1REGEXP\s0\fR.
-.PP
-\&\f(CW\*(C`typoginspect\*(C'\fR environments can be nested.
-\&\fBtypog-grep\fR respects the nesting,
-i.e., if the \fI\s-1ID\s0\fR of the nested environment does not match \fI\s-1REGEXP\s0\fR
-it will not be included in the program's output.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The list of options is sorted by the names of the long options.
-.IP "\fB\-a\fR, \fB\-\-all\fR, \fB\-\-any\fR" 4
-.IX Item "-a, --all, --any"
-ID-discovery mode:
-Show all \f(CW\*(C`typog\-inspect\*(C'\fR elements independent of any matching patterns.
-.IP "\fB\-\-color\fR, \fBcolour\fR \fI\s-1WHEN\s0\fR" 4
-.IX Item "--color, colour WHEN"
-Colorize specific log contents for the matching ids.
-The argument\ \fI\s-1WHEN\s0\fR determines when to apply color:
-\&\f(CW\*(C`always\*(C'\fR, \f(CW\*(C`never\*(C'\fR, or\ \f(CW\*(C`auto\*(C'\fR.
-The setting \f(CW\*(C`auto\*(C'\fR checks whether standard output has been redirected.
-This is the default.
-.IP "\fB\-C\fR, \fB\-\-config\fR \fI\s-1KEY\s0\fR=\fI\s-1VALUE\s0\fR[:\fI\s-1KEY\s0\fR=\fI\s-1VALUE\s0\fR[:...]]" 4
-.IX Item "-C, --config KEY=VALUE[:KEY=VALUE[:...]]"
-Set one or more configuration \fI\s-1KEY\s0\fR to \fI\s-1VALUE\s0\fR pairs.
-See Sec.\ \s-1CONFIGURATION\s0 below for a description of all available configuration items.
-Use option \fB\-\-show\-config\fR to display the default configuration.
-.IP "\fB\-\-debug\fR" 4
-.IX Item "--debug"
-Turn on debug output on \fIstderr\fR.
-.IP "\fB\-h\fR, \fB\-\-help\fR" 4
-.IX Item "-h, --help"
-Display brief help then exit.
-.IP "\fB\-i\fR, \fB\-\-[no\-]id\fR" 4
-.IX Item "-i, --[no-]id"
-Print the actual id name that matched \fI\s-1REGEXP\s0\fR.
-Control the appearance of the matching id with configuration item\ \f(CW\*(C`id\-heading\*(C'\fR.
-.IP "\fB\-y\fR, \fB\-\-[no\-]ignore\-case\fR" 4
-.IX Item "-y, --[no-]ignore-case"
-Match ids while ignoring case distinctions in patterns and data.
-.IP "\fB\-j\fR, \fB\-\-[no\-]job\-name\fR" 4
-.IX Item "-j, --[no-]job-name"
-Print the \f(CW\*(C`\ejobname\*(C'\fR that \fBtex\fR associated with the input file.
-.IP "\fB\-n\fR, \fB\-\-[no\-]line\-number\fR" 4
-.IX Item "-n, --[no-]line-number"
-Print the line number where the \f(CW\*(C`typoginspect\*(C'\fR\ environment
-was encountered in the LaTeX source file.
-.IP "\fB\-N\fR, \fB\-\-[no\-]log\-line\-number\fR" 4
-.IX Item "-N, --[no-]log-line-number"
-Print the line number of the \fIlog\fR\-file where the current line was encountered.
-.IP "\fB\-p\fR, \fB\-\-[no\-]page\-number\fR" 4
-.IX Item "-p, --[no-]page-number"
-Print page number where the contents of the \f(CW\*(C`typoginspect\*(C'\fR\ environment
-starts in the typeset document.
-.IP "\fB\-P\fR, \fB\-\-[no\-]pager\fR" 4
-.IX Item "-P, --[no-]pager"
-Redirect output from \fIstdout\fR to the configured pager.
-.IP "\fB\-\-show\-config\fR" 4
-.IX Item "--show-config"
-Show the default configuration and exit.
-.IP "\fB\-V\fR, \fB\-\-version\fR" 4
-.IX Item "-V, --version"
-Show version information and exit.
-.IP "\fB\-w\fR, \fB\-\-[no\-]word\-regexp\fR" 4
-.IX Item "-w, --[no-]word-regexp"
-Match only whole words.
-.SH "CONFIGURATION"
-.IX Header "CONFIGURATION"
-.ie n .IP """id\-format""=\fI\s-1FORMAT\s0\fR" 4
-.el .IP "\f(CWid\-format\fR=\fI\s-1FORMAT\s0\fR" 4
-.IX Item "id-format=FORMAT"
-Control the \fI\s-1FORMAT\s0\fR for printing matching ids in inline-mode,
-where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
-Default:\ \f(CW%s:\fR.
-.ie n .IP """id\-heading""=0|1" 4
-.el .IP "\f(CWid\-heading\fR=\f(CW0\fR|\f(CW1\fR" 4
-.IX Item "id-heading=0|1"
-Choose between printing the matching ids with option\ \fB\-\-id\fR:
-Inline\ (\f(CW0\fR) or heading before the matching data (\f(CW1\fR).
-Default:\ \f(CW0\fR.
-.ie n .IP """id\-heading\-format""=\fI\s-1FORMAT\s0\fR" 4
-.el .IP "\f(CWid\-heading\-format\fR=\fI\s-1FORMAT\s0\fR" 4
-.IX Item "id-heading-format=FORMAT"
-Control the \fI\s-1FORMAT\s0\fR for printing matching ids in heading-mode,
-where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
-Default:\ \f(CW\*(C`\-\->\ %s\ <\-\-\*(C'\fR.
-.ie n .IP """id\-indent""=\fI\s-1INDENT\s0\fR" 4
-.el .IP "\f(CWid\-indent\fR=\fI\s-1INDENT\s0\fR" 4
-.IX Item "id-indent=INDENT"
-Indentation of nested typog-inspect tags.
-Only used in ``discovery'' mode (first form), i.e., if \fB\-\-all\fR is active.
-Default:\ 8.
-.ie n .IP """id\-max\-length""=\fIMAXIMUM-LENGTH\fR" 4
-.el .IP "\f(CWid\-max\-length\fR=\fIMAXIMUM-LENGTH\fR" 4
-.IX Item "id-max-length=MAXIMUM-LENGTH"
-Set the maximum length of a matching id for printing.
-It a matching id exceeds this length it will be truncated
-and the last three characters (short of \fIMAXIMUM-LENGTH\fR) will be replaced by dots.
-Default:\ 40.
-.ie n .IP """line\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
-.el .IP "\f(CWline\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
-.IX Item "line-number-format=FORMAT"
-Control the \fI\s-1FORMAT\s0\fR for printing TeX source line numbers,
-where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
-Default:\ \f(CW%5d\fR.
-.ie n .IP """log\-line\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
-.el .IP "\f(CWlog\-line\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
-.IX Item "log-line-number-format=FORMAT"
-Control the \fI\s-1FORMAT\s0\fR for printing log line numbers,
-where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
-Default:\ \f(CW%6d\fR.
-.ie n .IP """page\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
-.el .IP "\f(CWpage\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
-.IX Item "page-number-format=FORMAT"
-Control the \fI\s-1FORMAT\s0\fR for printing page numbers,
-where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
-Default:\ \f(CW\*(C`[%3d]\*(C'\fR.
-.ie n .IP """pager""=\fI\s-1PAGER\s0\fR" 4
-.el .IP "\f(CWpager\fR=\fI\s-1PAGER\s0\fR" 4
-.IX Item "pager=PAGER"
-Name of pager application to pipe output into
-if run with option\ \fB\-\-pager\fR.
-Default:\ \f(CW\*(C`less\*(C'\fR.
-.ie n .IP """pager\-flags""=\fI\s-1FLAGS\s0\fR" 4
-.el .IP "\f(CWpager\-flags\fR=\fI\s-1FLAGS\s0\fR" 4
-.IX Item "pager-flags=FLAGS"
-Pass \fI\s-1FLAGS\s0\fR to \fI\s-1PAGER\s0\fR.
-Default:\ \f(CW\*(C`\-\-quit\-if\-one\-screen\*(C'\fR.
-.IP "Color Configuration" 4
-.IX Item "Color Configuration"
-For the syntax of the color specifications consult
-the manual page of Term::ANSIColor(pm).
-.RS 4
-.ie n .IP """file\-header\-color""" 4
-.el .IP "\f(CWfile\-header\-color\fR" 4
-.IX Item "file-header-color"
-Color of the filename header.
-.ie n .IP """fill\-state\-color""" 4
-.el .IP "\f(CWfill\-state\-color\fR" 4
-.IX Item "fill-state-color"
-Color of the messages that report ``Underfull hbox'' or ``Overfull hbox''.
-.ie n .IP """first\-vbox\-color""" 4
-.el .IP "\f(CWfirst\-vbox\-color\fR" 4
-.IX Item "first-vbox-color"
-Color of the first vbox on a page.
-.ie n .IP """font\-spec\-color""" 4
-.el .IP "\f(CWfont\-spec\-color\fR" 4
-.IX Item "font-spec-color"
-Color of font specifications.
-.ie n .IP """horizontal\-break\-candidate\-color""" 4
-.el .IP "\f(CWhorizontal\-break\-candidate\-color\fR" 4
-.IX Item "horizontal-break-candidate-color"
-Color of lines with horizontal-breakpoint candidates\ \f(CW\*(C`@\*(C'\fR.
-.ie n .IP """horizontal\-breakpoint\-color""" 4
-.el .IP "\f(CWhorizontal\-breakpoint\-color\fR" 4
-.IX Item "horizontal-breakpoint-color"
-Color of lines with horizontal breakpoints\ \f(CW\*(C`@@\*(C'\fR.
-.ie n .IP """id\-color""" 4
-.el .IP "\f(CWid\-color\fR" 4
-.IX Item "id-color"
-Color of matching ids when printed inline.
-.ie n .IP """id\-heading\-color""" 4
-.el .IP "\f(CWid\-heading\-color\fR" 4
-.IX Item "id-heading-color"
-Color of matching ids when printed in heading form.
-.ie n .IP """line\-break\-pass\-color""" 4
-.el .IP "\f(CWline\-break\-pass\-color\fR" 4
-.IX Item "line-break-pass-color"
-Color of the lines showing which pass (e.g., \f(CW@firstpass\fR)
-of the line-breaking algorithm is active.
-.ie n .IP """line\-number\-color""" 4
-.el .IP "\f(CWline\-number\-color\fR" 4
-.IX Item "line-number-color"
-Color of TeX-source-file line numbers.
-.ie n .IP """log\-line\-number\-color""" 4
-.el .IP "\f(CWlog\-line\-number\-color\fR" 4
-.IX Item "log-line-number-color"
-Color of log-file line numbers.
-.ie n .IP """math\-color""" 4
-.el .IP "\f(CWmath\-color\fR" 4
-.IX Item "math-color"
-Color used for math expressions including their font specs.
-.ie n .IP """page\-number\-color""" 4
-.el .IP "\f(CWpage\-number\-color\fR" 4
-.IX Item "page-number-color"
-Color of page numbers of the final output.
-.ie n .IP """tightness\-color""" 4
-.el .IP "\f(CWtightness\-color\fR" 4
-.IX Item "tightness-color"
-Color of lines with Tight/Loose hbox reports.
-.ie n .IP """vertical\-breakpoint\-color""" 4
-.el .IP "\f(CWvertical\-breakpoint\-color\fR" 4
-.IX Item "vertical-breakpoint-color"
-Color of possible vertical breakpoints.
-.RE
-.RS 4
-.RE
-.SS "Brief summary of colors and attributes"
-.IX Subsection "Brief summary of colors and attributes"
-.IP "Foreground Color" 4
-.IX Item "Foreground Color"
-\&\f(CW\*(C`black\*(C'\fR, \f(CW\*(C`red\*(C'\fR, \f(CW\*(C`green\*(C'\fR, \f(CW\*(C`yellow\*(C'\fR,
-\&\f(CW\*(C`blue\*(C'\fR, \f(CW\*(C`magenta\*(C'\fR, \f(CW\*(C`cyan\*(C'\fR, \f(CW\*(C`white\*(C'\fR,
-.Sp
-Prefix with \f(CW\*(C`bright_\*(C'\fR for high-intensity or bold foreground.
-.IP "Foreground Grey" 4
-.IX Item "Foreground Grey"
-\&\f(CW\*(C`grey0\*(C'\fR, ..., \f(CW\*(C`grey23\*(C'\fR
-.IP "Background Color" 4
-.IX Item "Background Color"
-\&\f(CW\*(C`on_black\*(C'\fR, \f(CW\*(C`on_red\*(C'\fR, \f(CW\*(C`on_green\*(C'\fR, \f(CW\*(C`on_yellow\*(C'\fR,
-\&\f(CW\*(C`on_blue\*(C'\fR, \f(CW\*(C`on_magenta\*(C'\fR, \f(CW\*(C`on_cyan\*(C'\fR, \f(CW\*(C`on_white\*(C'\fR
-.Sp
-Replace \f(CW\*(C`on_\*(C'\fR with \f(CW\*(C`on_bright_\*(C'\fR for high-intensity or bold background.
-.IP "Background Grey" 4
-.IX Item "Background Grey"
-\&\f(CW\*(C`on_grey0\*(C'\fR, ..., \f(CW\*(C`on_grey23\*(C'\fR
-.IP "Text Attribute" 4
-.IX Item "Text Attribute"
-\&\f(CW\*(C`bold\*(C'\fR, \f(CW\*(C`dark\*(C'\fR, \f(CW\*(C`italic\*(C'\fR, \f(CW\*(C`underline\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR
-.SH "EXIT STATUS"
-.IX Header "EXIT STATUS"
-The exit status is 0 if at least one \fI\s-1ID\s0\fR matched \fI\s-1REGEXP\s0\fR,
-1 if no \fI\s-1ID\s0\fR matched \fI\s-1REGEXP\s0\fR, and 2 if an error occurred.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fBgrep\fR(1), \fBprintf\fR(3), \fBTerm::ANSIColor\fR(pm)
diff --git a/macros/latex/contrib/typog/docs/typog-grep.1.pdf b/macros/latex/contrib/typog/docs/typog-grep.1.pdf
index 09647860d5..9a43008508 100644
--- a/macros/latex/contrib/typog/docs/typog-grep.1.pdf
+++ b/macros/latex/contrib/typog/docs/typog-grep.1.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/docs/typog.pdf b/macros/latex/contrib/typog/docs/typog.pdf
index 9d00685045..fa0fe74e4c 100644
--- a/macros/latex/contrib/typog/docs/typog.pdf
+++ b/macros/latex/contrib/typog/docs/typog.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/typog.dtx b/macros/latex/contrib/typog/typog.dtx
index 0f2176206a..3037f502fa 100644
--- a/macros/latex/contrib/typog/typog.dtx
+++ b/macros/latex/contrib/typog/typog.dtx
@@ -3,11 +3,11 @@
% Copyright (C) 2024 by Ch. L. Spiel
%
% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3 of this
+% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
% version 2003/12/01 or later.
%
% \fi
@@ -26,7 +26,6 @@
\PassOptionsToClass{a4paper}{article}
\PassOptionsToPackage{hyperfootnotes=false}{hyperref}
-\PassOptionsToPackage{charter, scale=1.06}{newtxmath}
\PassOptionsToPackage{dvipsnames}{xcolor}
\usepackage{amsmath}
@@ -42,40 +41,43 @@
\usepackage{fullwidth}
\usepackage{hypdoc}
\usepackage{hyphenat}
-\usepackage[shrink=10, stretch=10]{microtype}
+\usepackage[kerning=true, shrink=10, stretch=10, verbose=true]{microtype}
\usepackage{multirow}
\usepackage{needspace}
-\usepackage{placeins}
+\usepackage[section]{placeins}
\usepackage{ragged2e}
\usepackage{setspace}
\usepackage{sidecap}
\usepackage{tabularx}
\usepackage{tcolorbox}
\usepackage{titlesec}\renewcommand*{\bottomtitlespace}{.15\textheight}%nobottomtitles*
-\usepackage[debug, raise*=.05em]{typog}
+\usepackage[debug, raise*=.05em,
+ uppercaselabelitemadjustments={.0125em, .075em, -.1em, .0125em},
+ lowercaselabelitemadjustments={-.075em, 0pt, -.2em, -.075em}]{typog}
\usepackage{xcolor}
\usepackage[default, lining, proportional, regular, semibold]{sourceserifpro}
\usepackage[lining, proportional, regular, semibold]{sourcesanspro}
\usepackage[lining, regular]{sourcecodepro}
-\usepackage[xcharter]{newtxmath}
+\usepackage[scaled=1.08, uprightscript, xcharter]{newtxmath}
\setbaselineskip{12.5pt}
+
\makeatletter
\def\@get@fontclan#1-#2\relax{#1}
\newcommand*{\fontclan}{\expandafter\@get@fontclan\f@family\relax}
\makeatother
-\newcommand*{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
-\newcommand*{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
-\newcommand*{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
-\newcommand*{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
+\DeclareRobustCommand{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
+\DeclareRobustCommand{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
+\DeclareRobustCommand{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
+\DeclareRobustCommand{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
-\newcommand*{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
-\newcommand*{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
-\newcommand*{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
-\newcommand*{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
+\DeclareRobustCommand{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
+\DeclareRobustCommand{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
+\DeclareRobustCommand{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
+\DeclareRobustCommand{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
\newcommand*{\nativetextfraction}[2]
{\mbox{\textnumerator{#1}\textfractionsolidus\textdenominator{#2}}}
@@ -85,21 +87,23 @@
\newenvironment*{tabfigures}
{\edef\rmdefault{\fontclan-T\sourceserifpro@figurestyle}\rm\ignorespaces}
{\ignorespacesafterend}
-
-\newcommand*{\elseries}{\def\mdseries@rm{el}\def\mdseries@sf{el}\def\mdseries@tt{el}}
-\newcommand*{\textel}[1]{{\elseries\textmd{#1}}}
-\newcommand*{\lseries}{\def\mdseries@rm{l}\def\mdseries@sf{l}\def\mdseries@tt{l}}
-\newcommand*{\textl}[1]{{\lseries\textmd{#1}}}
-%%--\newcommand*{\mdseries}{\def\mdseries@rm{m}\def\mdseries@sf{m}\def\mdseries@tt{m}}
-%%--\newcommand*{\textmd}[1]{{\mdseries\textmd{#1}}}
-\newcommand*{\sbseries}{\def\bfseries@rm{sb}\def\bfseries@sf{sb}\def\bfseries@tt{sb}}
-\newcommand*{\textsb}[1]{{\sbseries\textbf{#1}}}
-\newcommand*{\bseries}{\def\bfseries@rm{b}\def\bfseries@sf{b}\def\bfseries@tt{b}}
-\newcommand*{\textb}[1]{{\bseries\textbf{#1}}}
-\newcommand*{\ebseries}{\def\bfseries@rm{k}\def\bfseries@sf{eb}\def\bfseries@tt{k}}
-\newcommand*{\texteb}[1]{{\ebseries\textbf{#1}}}
\makeatother
+\DeclareRobustCommand{\elseries}{\fontseries{el}\selectfont}
+\DeclareTextFontCommand{\textel}{\elseries}
+\DeclareRobustCommand{\lseries}{\fontseries{l}\selectfont}
+\DeclareTextFontCommand{\textl}{\lseries}
+%%--\DeclareRobustCommand{\mdseries}{\fontseries{m}\selectfont}
+%%--\DeclareTextFontCommand{\textmd}{\mdseries}
+\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
+\DeclareTextFontCommand{\textsb}{\sbseries}
+\DeclareRobustCommand{\bseries}{\fontseries{b}\selectfont}
+\DeclareTextFontCommand{\textb}{\bseries}
+\DeclareRobustCommand{\ebseries}{\fontseries{eb}\selectfont}
+\DeclareTextFontCommand{\texteb}{\ebseries}
+\DeclareRobustCommand{\ubseries}{\fontseries{k}\selectfont}
+\DeclareTextFontCommand{\textub}{\ubseries}
+
\usepackage{cleveref}
@@ -112,7 +116,7 @@
citecolor = blue,
colorlinks = true,
linkcolor = blue,
- linktocpage = false,
+ linktocpage = true,
pdfauthor={Dr. Christoph L. Spiel},
pdfcreationdate={\pdffiledate},
pdfkeywords={LaTeX, typography, ligature, italic-correction, paragraph justification, baselineskip, sloppy, ragged},
@@ -124,9 +128,94 @@
}
+\SetExtraKerning[context=drop-left-sidebearing, name=source-code-normal, unit=space]
+ {font={T1/SourceCodePro-LF/m/n/44, T1/SourceCodePro-TLF/m/n/44}}
+ {
+ 1={-150,},
+ 2={-120,},
+ 3={-120,},
+ 4={-40,},
+ A={-100,},
+ B={-170,}
+ }
+
+\newlength{\sectiontocindent}
+\newlength{\sectionnumberwidth}
+\newlength{\subsectiontocindent}
+\newlength{\subsectionnumberwidth}
+\newlength{\subsubsectiontocindent}
+\newlength{\subsubsectionnumberwidth}
+
+\setlength{\sectiontocindent}{0pt}
+\setlength{\sectionnumberwidth}{40pt}
+\setlength{\subsectiontocindent}{40pt}
+\setlength{\subsectionnumberwidth}{25pt}
+\setlength{\subsubsectiontocindent}{65pt}
+\setlength{\subsubsectionnumberwidth}{30pt}
+
\makeatletter
-\renewcommand*{\@dotsep}{10000} % suppress leaders
-\patchcmd{\@dottedtocline}{\normalfont}{\bfseries}{\relax}{\PatchingFailed}
+\renewcommand*{\l@section}[2]
+ {\ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength{\@tempdima}{\sectionnumberwidth}%
+ \begingroup
+ \def\numberline##1{\hb@xt@\@tempdima{%
+ \tt\lseries
+ \fontsize{44}{0}\selectfont
+ \microtypecontext{kerning=drop-left-sidebearing}%
+ \iffalse\raisebox{-30pt}[0pt][0pt]{\rule{0.1pt}{40pt}}\fi
+ \textcolor{customred3}{##1}%
+ \hfil}}%
+ \parindent \z@
+ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ \bfseries
+ \iffalse
+ \nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss #2\kern-\p@\kern\p@}%
+ \else
+ {\sffamily\large #1}\quad
+ {#2}\hfil\hbox{}
+ \fi
+ \par
+ \endgroup
+ \fi}
+
+\renewcommand*{\@dottedtocline}[5]
+ {\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ \@plus.2\p@
+ \begingroup
+ \leftskip #2\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima
+ \null\nobreak
+ \hskip -\leftskip
+ {#4}\nobreak
+ \iffalse
+ \leaders\hbox{$\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill
+ \nobreak\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5\kern-\p@\kern\p@}%
+ \else
+ \hbox{\quad\normalfont\bfseries #5}\nobreak\hfill\hbox{}%
+ \fi
+ \par
+ \endgroup
+ \fi}
+
+\renewcommand*{\l@subsection}{\@dottedtocline{2}{\subsectiontocindent}{\subsectionnumberwidth}}
+\renewcommand*{\l@subsubsection}{\@dottedtocline{3}{\subsubsectiontocindent}{\subsubsectionnumberwidth}}
+\newrobustcmd*{\tocsquashedsubsections}
+ {\def\l@subsection{\@dottedtocline{2}{0pt}{\subsectionnumberwidth}}%
+ \def\l@subsubsection{\@dottedtocline{3}{0pt}{\subsubsectionnumberwidth}}}
\makeatother
@@ -171,7 +260,6 @@
leftmargin=!
}
-
\SetEnumitemKey{nestedinspecialsection}{
leftmargin=10pt
}
@@ -191,13 +279,15 @@
\fancypagestyle{pagenumberonly}{
+ \fancyhf{}
\fancyhead[L]{}
\fancyhead[R]{\thepage}
}
-\pagestyle{fancy}
-\fancyhf{}
-\fancyhead[L]{\rightmark}
-\fancyhead[R]{\thepage}
+\fancypagestyle{fancy}{
+ \fancyhf{}
+ \fancyhead[L]{\rightmark}
+ \fancyhead[R]{\thepage}
+}
\newcommand*{\resetfancyhead}
{\fancyhead[L]{\textsf{\textsc{\textls[20]{\nouppercase\rightmark}}}}}
@@ -239,8 +329,8 @@
\setlength{\skip\footins}{25pt}
-\setlength{\overfullrule}{3pt}
-\renewcommand*{\sidecaptionsep}{16pt}
+\setlength{\overfullrule}{0pt}
+\renewcommand*{\sidecaptionsep}{25pt}
@@ -272,13 +362,17 @@
\newcommand*{\citenum}[1]{\@nameuse{b@#1}}
\makeatother
-\def\code#1{\texttt{#1}}
+\renewcommand*{\code}[1]{\texttt{#1}}
+
+\newcommand*{\codelineindicator}{\mbox{\small$\mathscr{l}$}}
\newrobustcmd*{\command}[1]{\mbox{\textbf{#1}}}
+\newcommand*{\detoxindex}[1]{\index{\detokenize{#1}}}
+
\newcommand*{\doublequotes}[1]{\doubleguillemetright\kern-.03333em #1\doubleguillemetleft}
-\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}}}
+\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}\unskip}}
\newcommand*{\filesystem}[1]{\mbox{\textit{#1\/}}}
@@ -287,6 +381,12 @@
\newcommand*{\foreignphrase}[1]{\textsl{#1}}
+\makeatletter
+\newcommand*{\formatdimen}{\@ifstar{\@typog@rem@pt}{\@typog@strip@pt}}
+\newcommand*{\@typog@rem@pt}[1]{\dimen0=\dimexpr#1\relax\strip@pt\dimen0\,pt}
+\newcommand*{\@typog@strip@pt}[1]{\expandafter\strip@pt#1\relax\,pt}
+\makeatother
+
\newcommand*{\formatskip}[3]{#1\genfrac{}{}{0pt}{}{{+}#2}{{-}#3}}
\makeatletter
@@ -294,19 +394,46 @@
\renewcommand*{\fps@table}{htbp}
\makeatother
+\apptocmd{\GlossaryParms}
+ {\RaggedRight\normalsize}
+ {\relax}
+ {\AppendingFailed}
+
+\let\oldhdpindex=\hdpindex
+\renewcommand*{\hdpindex}[2]{\textbf{\oldhdpindex{#1}{#2}}}
+
+\let\oldhdclindex=\hdclindex
+\renewcommand*{\hdclindex}[2]
+ {\ifstrequal{#2}{code}
+ {\oldhdclindex{#1}{codeidx}}
+ {\oldhdclindex{#1}{#2}}}
+
\newcommand*{\hollowrectangle}[2]
{\setlength{\fboxrule}{.5pt}%
\setlength{\fboxsep}{0pt}%
\framebox{\rule{#1}{0pt}\rule{0pt}{#2}}}
\newcommand*{\hollowsquare}[1]{\hollowrectangle{#1}{#1}}
+\apptocmd{\IndexParms}
+ {\RaggedRight\small}
+ {\relax}
+ {\AppendingFailed}
\makeatletter
+\ExplSyntaxOn
\apptocmd{\index@prologue}
- {\marginnote{In the Index page ranges are stuck together with
- \hyperref[syn:figuredash]{\cs{figuredash*}}.}}
+ {\legacy_if:nTF {codeline@index}
+ {We\space prefix\space all\space references\space
+ to\space code\space lines\space with~\singlequotes{\codelineindicator}.}
+ {}}
{\relax}
{\AppendingFailed}
+
+\newcommand*{\linenumberdecoration}
+ {\legacy_if:nTF {codeline@index}
+ {\codelineindicator}
+ {}}
+\ExplSyntaxOff
\makeatother
\newcommand*{\logmacro}[1]
@@ -348,11 +475,27 @@
\AtBeginDocument{\setlength{\emreference}{\fontdimen6\font}}
\newrobustcmd*{\milliem}[1]
{\ifdim #1=0pt
- #1%
+ 0\,pt%
\else
\nativetextfraction{\the\numexpr\dimexpr (#1) * 1000 / \emreference}{1000}\:em%
\fi}
+\let\originalmulticols=\multicols
+\let\endoriginalmulticols=\endmulticols
+\RenewDocumentEnvironment{multicols}{m o o}
+ {\ifnum #1=1
+ \IfNoValueTF{#2}{\relax}{#2}%
+ \else
+ \IfNoValueTF{#2}
+ {\originalmulticols{#1}}
+ {\originalmulticols{#1}[#2]}%
+ \fi}
+ {\ifnum #1=1
+ \relax
+ \else
+ \endoriginalmulticols
+ \fi}
+
\newcommand*{\needtocspace}[1][3]
{\addtocontents{toc}{\protect\needspace{#1\baselineskip}}}
@@ -455,7 +598,7 @@
\newenvironment*{specialcodesection}[1]
{\Needspace{4\baselineskip}%
\begin{tcolorbox}[colback=white, colframe=\markercolor,
- bottomrule=0pt, leftrule=5pt, rightrule=0pt, toprule=0pt]
+ bottomrule=.5pt, leftrule=5pt, rightrule=.5pt, toprule=.5pt]
\sf\typogsetupsf
\begin{list}
{\specialcodesectionheading{#1}}
@@ -498,11 +641,37 @@
\begin{minipage}{\floatcaptionwidth}}
{\end{minipage}}
\newcommand*{\tablenotemark}[1]{\smash{\textsuperscript{#1}}}
+\newcommand*{\tablenotesymbol}[1]{% Bringhurst's "traditional order" (p69) from 1 to 6
+ \ifcase#1\relax
+ #1% 0
+ \or \textasteriskcentered% 1
+ \or \textdagger% 2
+ \or \textdaggerdbl% 3
+ \or \textsection% 4
+ \or \textbardbl% 5
+ \or \textsection% 6
+ \or \textasteriskcentered\textasteriskcentered%7
+ \or \textdagger\textdagger%8
+ \or \textdaggerdbl\textdaggerdbl%9
+ \else
+ #1
+ \fi
+}
\newcommand*{\termparbox}[1]{\parbox[t]{\linewidth}{#1\bottomstrut}}
\newcommand*{\thousandsseparator}{\mbox{,}}
+\ExplSyntaxOn
+\newcommand*{\titlecase}[1]{\text_titlecase:n {#1}}
+\ExplSyntaxOff
+
+\newcommand*{\toccontinuesonnextpage}
+ {\addtocontents{toc}{\par
+ \bigskip
+ \hfill\textit{Table of Contents continued on next page.}\par
+ \protect\clearpage}}
+
\newcommand*{\topstrut}{\rule{0pt}{1.3em}}
\newcommand*{\typogsetuprm}
@@ -514,11 +683,16 @@
{\typogsetup{raise*=.06667em,
raiseguillemets=.05em}}
+\newcommand*{\unmarkedfntext}[1]
+ {{\def\thefootnote{}\footnote{#1}%
+ \addtocounter{footnote}{-1}}}
+
+\newcommand*{\userman}[1]{\textbf{\hyperpage{#1}}}%%-- https://github.com/ho-tex/hypdoc/issues/11
+
\newcommand*{\visualpar}{\textcolor{\markercolor}{\P}\linebreak[1]\enspace}
\newenvironment*{whittyquote}
{\begin{flushright}
- \renewcommand*{\propername}[1]{\mbox{##1}}%
\sf\typogsetupsf}
{\end{flushright}}
@@ -532,7 +706,6 @@
\end{minipage}
\end{maxipage}}
-
\NewDocElement[macrolike = true,
idxtype = dim.,
idxgroup = dimensions,
@@ -547,6 +720,20 @@
{EnumItemKey}{enumitemkey}
\pretocmd{\DescribeEnumItemKey}{\needspace{25pt}}{\relax}{\PrependingFailed}
+\NewDocElement[macrolike = true,
+ idxtype = skip,
+ idxgroup = \LaTeX{} length (skip),
+ printtype = \textit{skip}]
+ {LaTeXSkip}{lskip}
+\pretocmd{\DescribeLaTeXSkip}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
+\NewDocElement[macrolike = true,
+ idxtype = counter,
+ idxgroup = \protect\TeX{} counters,
+ printtype = \textit{counter}]
+ {TeXCounter}{tcounter}
+\pretocmd{\DescribeTeXCounter}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
\hyphenation{% https://hyphenateit.com/en-us
Double-guillemet-left
@@ -585,6 +772,8 @@
line-width
loose-ness
loose-spacing
+ lower-case-adjust-label-items
+ lower-case-label-item-adjustments
make-at-letter
make-at-other
mar-gin-al
@@ -612,6 +801,7 @@
set-leading
set-leading-percentage
short-inter-text
+ shrink-limits
single-guillemet-left
single-guillemet-right
single-quotes
@@ -625,6 +815,7 @@
smooth-ragged-right-shape-septuplet
smooth-ragged-right-shape-triplet
space-skip
+ stretch-limits
text-italics-correction
tight-spacing
tracing-boxes
@@ -632,6 +823,8 @@
tracking-tt-spacing
typog-get
typog-setup
+ upper-case-adjust-label-items
+ upper-case-label-item-adjustments
vtie-bot
vtie-bot-disp
vtie-bot-disp-par
@@ -648,29 +841,52 @@
\begin{document}
\typogsetuprm
+ \uppercaseadjustlabelitems{*}
\DocInput{typog.dtx}
\end{document}
%</driver>
%<*index-style>
actual '='
+delim_0 "\\nobreak\\enspace"
+delim_1 "\\nobreak\\enspace"
+delim_2 "\\nobreak\\enspace"
delim_r "\\figuredash*"
heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
heading_suffix "}\\nopagebreak\n"
headings_flag 1
level '>'
+line_max 65536
quote '!'
%</index-style>
+%<*changes-style>
+actual '='
+delim_0 "\\nobreak\\enspace"
+delim_1 "\\nobreak\\enspace"
+delim_2 "\\nobreak\\enspace"
+heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
+heading_suffix "}\\nopagebreak\n"
+headings_flag 0
+item_x1 "\\efill\n\\subitem "
+item_x2 "\\ "
+keyword "\\glossaryentry"
+level '>'
+line_max 65536
+postamble "\n\\end{theglossary}\n"
+preamble "\\begin{theglossary}\n \\makeatletter\\scan@allowedfalse"
+quote '!'
+%</changes-style>
% \fi
%
%
% \DoNotIndex{\,}
-% \DoNotIndex{\addtolength,\advance,\aftergroup,\allowdisplaybreaks,\arabic}
-% \DoNotIndex{\AtBeginDocument,\autotransfer}
-% \DoNotIndex{\baselineskip}
-% \DoNotIndex{\c,\char,\clubpenalties,\clubpenalty,\count,\cs,\csname}
+% \DoNotIndex{\\}
+% \DoNotIndex{\addtocounter,\addtolength,\advance,\aftergroup,\allowdisplaybreaks,\arabic,\arraystretch}
+% \DoNotIndex{\AfterEndPreamble,\AfterPreamble,\AtBeginDocument,\autotransfer}
+% \DoNotIndex{\baselineskip,\begin,\begingroup,\booltrue,\box}
+% \DoNotIndex{\c,\char,\clist,\clubpenalties,\clubpenalty,\count,\cs,\csname}
% \DoNotIndex{\DeclareRobustCommand,\def,\define@choicekey,\define@key,\detokenize}
% \DoNotIndex{\dim,\dimen,\dimexpr,\discretionary,\displaywidowpenalties,\displaywidowpenalty}
-% \DoNotIndex{\edef,\else,\emergencystretch,\empty,\endcsname}
+% \DoNotIndex{\edef,\else,\emergencystretch,\empty,\end,\endcsname,\endgroup}
% \DoNotIndex{\endlastlineflushrightpar}
% \DoNotIndex{\endlastlineraggedleftpar}
% \DoNotIndex{\endnofontexpand,\endnofontexpansion}
@@ -679,33 +895,37 @@ quote '!'
% \DoNotIndex{\endsmoothraggedrightshapetriplet}
% \DoNotIndex{\endtypoginspect}
% \DoNotIndex{\exhyphenpenalty,\expandafter,\ExplSyntaxOff,\ExplSyntaxOn}
-% \DoNotIndex{\fi,\finalhyphendemerits,\font,\fontdimen,\fp,\fussy,\futurelet}
+% \DoNotIndex{\fi,\finalhyphendemerits,\font,\fontdimen,\forcsvlist,\fp,\fpeval,\fussy,\futurelet}
% \DoNotIndex{\gdef,\global,\glueexpr,\@gobble}
% \DoNotIndex{\guillemotleft,\guillemotright,\guilsinglleft,\guilsinglright}
-% \DoNotIndex{\hbadness,\hfuzz,\hskip,\hspace}
+% \DoNotIndex{\hbadness,\hbox,\hfuzz,\hskip,\hspace,\ht}
% \DoNotIndex{\ignorespaces,\ignorespacesafterend}
-% \DoNotIndex{\if,\IfBooleanT,\IfBooleanTF,\ifcase,\ifdefined,\ifdim,\iffalse,\ifmmode,\ifMT@expansion}
-% \DoNotIndex{\@ifnextchar,\IfNoValueF,\IfNoValueTF,\ifnum}
+% \DoNotIndex{\if,\ifblank,\ifbool,\IfBooleanT,\IfBooleanTF,\ifcase,\ifdefined,\ifdim,\iffalse,\ifmmode}
+% \DoNotIndex{\ifMT@expansion,\@ifnextchar,\IfNoValueF,\IfNoValueTF,\ifnum,\ifodd,\ifstrequal}
% \DoNotIndex{\iftypog@microtype@loadedfalse}
% \DoNotIndex{\iftypog@microtype@preloadedfalse}
-% \DoNotIndex{\ifvmode,\ifx,\ignorespaces,\inputlineno,\int,\interlinepenalty}
+% \DoNotIndex{\ifvmode,\ifx,\ignorespaces,\inputlineno,\int,\interlinepenalty,\itemize}
% \DoNotIndex{\jobname}
% \DoNotIndex{\kern}
-% \DoNotIndex{\l,\lastlinefit,\lastlineflushrightpar,\lastlineraggedleftpar,\leftmargin,\leftskip,\let}
-% \DoNotIndex{\linepenalty,\linewidth,\@listdepth,\looseness,\lsstyle}
-% \DoNotIndex{\@M,\m@th,\mathbin,\mathord,\maxdimen,\message,\microtypecontext,\microtypesetup}
+% \DoNotIndex{\l,\labelitemi,\labelitemii,\labelitemiii,\labelitemiv}
+% \DoNotIndex{\lastlinefit,\lastlineflushrightpar,\lastlineraggedleftpar}
+% \DoNotIndex{\lefthyphenmin,\leftmargin,\leftskip,\let,\letcs}
+% \DoNotIndex{\linepenalty,\linewidth,\@listdepth,\loop,\looseness,\lsstyle}
+% \DoNotIndex{\@M,\m@th,\mathbin,\mathord,\maxdimen,\mbox,\message,\microtypecontext,\microtypesetup}
% \DoNotIndex{\@minus,\mkern,\m@ne,\mspace,\MT@letterspace@,\MT@MT,\muexpr}
-% \DoNotIndex{\@ne,\NeedsTeXFormat,\NewDocumentCommand,\NewDocumentEnvironment,\newcommand,\newenvironment}
-% \DoNotIndex{\newcounter,\newdimen,\newif,\newlength,\newmuskip}
+% \DoNotIndex{\@ne,\NeedsTeXFormat,\newbool,\NewDocumentCommand,\NewDocumentEnvironment}
+% \DoNotIndex{\newcommand,\newenvironment}
+% \DoNotIndex{\newcounter,\newdimen,\newif,\newlength,\newline,\newmuskip}
% \DoNotIndex{\nobreak,\nofontexpand,\nofontexpansion,\nr,\numexpr}
% \DoNotIndex{\or,\optarg}
% \DoNotIndex{\p@,\PackageError,\PackageWarning}
-% \DoNotIndex{\par,\parfillskip,\parindent,\parshape,\pdf@strcmp}
+% \DoNotIndex{\par,\parfillskip,\parindent,\parshape,\patchcmd,\pdf@strcmp}
% \DoNotIndex{\pdfstringdefDisableCommands}
% \DoNotIndex{\penalty,\@plus,\PopPostHook,\postdisplaypenalty,\predisplaypenalty,\prg}
% \DoNotIndex{\pretolerance,\protected,\ProvidesPackage,\PushPostHook}
-% \DoNotIndex{\raisebox,\refstepcounter,\relax,\RenewExpandableDocumentCommand,\RequirePackage,\rightskip}
-% \DoNotIndex{\setcounter,\SetEnumitemKey,\SetExpansion,\setkeys,\setlength,\setstretch}
+% \DoNotIndex{\raisebox,\refstepcounter,\relax,\RenewExpandableDocumentCommand,\repeat,\RequirePackage}
+% \DoNotIndex{\righthyphenmin,\rightskip,\rlap,\romannumeral,\rule}
+% \DoNotIndex{\setbox,\setcounter,\SetEnumitemKey,\SetExpansion,\setkeys,\setlength,\setstretch}
% \DoNotIndex{\showboxbreadth,\showboxdepth,\skip,\sloppy}
% \DoNotIndex{\smoothraggedrightpar}
% \DoNotIndex{\smoothraggedrightshapequintuplet}
@@ -715,9 +935,9 @@ quote '!'
% \DoNotIndex{\textemdash,\textendash,\textsf,\textsl,\texttimes,\textwidth,\the,\times,\tl,\tolerance}
% \DoNotIndex{\tracingnone,\tracingpages,\tracingparagraphs}
% \DoNotIndex{\typeout,\typoginspect,\typoglogo}
-% \DoNotIndex{\unless}
+% \DoNotIndex{\unhbox,\unless}
% \DoNotIndex{\val,\value,\vbadness,\vfuzz}
-% \DoNotIndex{\widowpenalties,\widowpenalty}
+% \DoNotIndex{\wd,\widowpenalties,\widowpenalty}
% \DoNotIndex{\z@,\z@skip}
%
%
@@ -828,7 +1048,8 @@ end
% \footnotesize
% \noindent
% This package is copyright \textcopyright~2024 Ch.~L.~Spiel. It may be distributed
-% and\kernedslash*or modified under the conditions of the \LaTeX{} Project Public License
+% and\kernedslash*or modified under the conditions of the
+% \href{https://www.latex-project.org/lppl.txt}{\LaTeX{} Project Public License}
% \acronym{(LPPL)}, either version~1.3c of this license or --~at your option~-- any later
% version. This work has the \acronym{LPPL} maintenance status
% \doublequotes{author-maintained}.
@@ -836,30 +1057,36 @@ end
%
%
% \clearpage
-% \thispagestyle{pagenumberonly}
-% \tableofcontents
-% \vspace{\fill}
+% \pagestyle{pagenumberonly}
%
+% \unmarkedfntext{The font sample on the title page was generated with the help of \MP{} using
+% \doublequotes{\acronym{URW}~Palladio}%
+% \detoxindex{font>typeface>URW Palladio=\acronym{URW} Palladio|userman}.}
%
-% \thispagestyle{pagenumberonly}
-% \listoftables
-% \phantomsection
-% \addcontentsline{toc}{subsection}{List of Tables}
-% \vspace{\fill}
+% \begin{nofontexpansion}
+% \begin{nocharprotrusion}
+% \tableofcontents
+% \end{nocharprotrusion}
+% \end{nofontexpansion}
%
+% \addtocontents{toc}{%
+% \protect\begin{whittyquote}
+% Hoffentlich wird es nicht so schlimm, wie es schon ist! \\
+% \capitalemdash*~\propername{Karl Valentin}
+% \protect\end{whittyquote}\par}
%
-% \begingroup
-% \footnotesize
-% \singlespacing
-% \noindent
-% The font sample on the title page was generated with the help of \MP{} using
-% \doublequotes{\acronym{URW} Palladio~L}\index{font>URW Palladio L=\acronym{URW} Palladio
-% L}.
-% \endgroup
+% \vspace{\fill}
+%
+% \begin{nofontexpansion}
+% \begin{nocharprotrusion}
+% \listoftables
+% \end{nocharprotrusion}
+% \end{nofontexpansion}
%
%
% \clearpage
% \pagenumbering{arabic}
+% \pagestyle{fancy}
% \section{Introduction}\label{sec:introduction}
%
% \begin{whittyquote}
@@ -892,7 +1119,10 @@ end
% \Cref{sec:latex-hyphenation} expands the hyphenation facilities of \LaTeX.
%
% \Cref{sec:break-ligatures,sec:manual-italic-correction,sec:extra-kerning,sec:raise-characters}
-% deal with vertically positioning glyphs in a more pleasant way.
+% deal with vertically positioning glyphs in a more pleasant way. Also in the realm of
+% vertical alignments is \cref{sec:adjust-label-items} that explains how to height-adjust the
+% labels in |itemize|~lists to perfection whether the items are followed by uppercase or by
+% lowercase letters.
%
% \Cref{sec:align-last-line,sec:fill-last-line} discuss dearly missed macros for better control
% of the last line of a paragraph.
@@ -950,15 +1180,17 @@ end
% \end{tabbing}
% \end{synopsis}
%
-% \index{package options|(}
-% The package \meta{OPTIONs} serve as configuration \meta{key}s, too. This means they can be
-% set with \hyperref[syn:typogsetup]{\code{typogsetup}} and their values can be retrieved with
-% \hyperref[syn:typogget]{\cs{typogget}}. Options that rely on package~\packagename{microtype}
-% are indicated with \doublequotes{\microtyperequiredmarker}.
+% \index{package options|(userman}
+% The package \meta{OPTIONs} also serve as configuration \meta{key}s (unless noted otherwise).
+% This means they can be set with \hyperref[syn:typogsetup]{\code{typogsetup}} and their values
+% can be retrieved with \hyperref[syn:typogget]{\cs{typogget}}. Options that rely on
+% package~\packagename{microtype} are indicated with \doublequotes{\microtyperequiredmarker}.
%
% \begin{typogsetup}{}
% \newcommand*{\indexpackageoption}[1]
-% {\index{package option>#1=\code{#1}}\index{#1=\code{#1}~(option)}\ignorespaces}
+% {\detoxindex{package option>#1=\code{#1}|userman}%
+% \detoxindex{#1=\code{#1}~(option)|userman}%
+% \ignorespaces}
% \begin{description}
% [before={\let\oldmakelabel=\makelabel
% \renewcommand{\makelabel}[1]
@@ -978,17 +1210,44 @@ end
% \item[|debug|, |nodebug|]\label{item:debug}
% \indexpackageoption{debug}
% \indexpackageoption{nodebug}
-% Write package-specific debug information to the log file. Opposite: |nodebug|. The
-% default is not to log debug information.
+% Write some package-specific debug information to the \filesystem{log}~file. Opposite:
+% |nodebug|. The default is not to record debug information.
+%
+% These two options neither can be used with \hyperref[syn:typogsetup]{\code{typogsetup}}
+% nor with \hyperref[syn:typogget]{\cs{typogget}}.
%
% \item[|ligaturekern=|\meta{dim}]\label{item:ligaturekern}
% \indexpackageoption{ligaturekern}
% Set \meta{dim} of the kern that is inserted to split a ligature in
% macro\hyperref[syn:nolig]{\cs{nolig}}. See
-% \cref{sec:break-ligatures}.\shiftedmarginnote{We access the configuration values with
-% \hyperref[syn:typogget]{\cs{typogget}}.} Default
+% \cref{sec:break-ligatures}.\shiftedmarginnote{We access all the (default) configuration
+% values with \hyperref[syn:typogget]{\cs{typogget}}.} Default
% value:~\milliem{\typogget{ligaturekern}}.
%
+% \item[|lowercaselabelitemadjustments=\{|\meta{dim1}, \meta{dim2}, \meta{dim3}, \meta{dim4}|\}|]%
+% \label{item:lowercaselabelitemadjustments}
+% \indexpackageoption{lowercaselabelitemadjustments}
+% \sinceversion{Since v0.4}
+% Vertical shifts \meta{dimN} to apply to \cs{labelitem}\meta{N}, where \meta{N} is the
+% nesting level of the |itemize|~list starting at one. An empty \meta{dimN} is equivalent
+% to~\formatdimen*{0pt}. The adjustments apply to the lowercase setting
+% (\hyperref[syn:lowercaseadjustlabelitems]{\code{\string\lowercaseadjustlabelitems}}).
+% See \cref{sec:adjust-label-items} (in particular subsection~\singlequotes{Setup} and
+% \cref{tab:labelitemadjustvalues} on \cpageref{tab:labelitemadjustvalues}) and also
+% configuration option
+% \hyperref[item:uppercaselabelitemadjustments]{\code{uppercaseadjustlabelitem}}.
+%
+% All four lengths default to~\formatdimen*{0pt}.
+%
+% \begin{important}
+% \slightlysloppy
+% \noindent
+% Configuring \code{lowercaselabelitemadjustments} (or
+% \code{uppercaselabelitemadjustments}) does \emph{not} activate the correction
+% mechanism. Use one of the macros \code{\string\lowercaseadjustlabelitems} or
+% \code{\string\uppercaseadjustlabelitems} for that purpose.
+% \end{important}
+%
% \item[|mathitalicscorrection=|\meta{dim}]\label{item:mathitalicscorrection}
% \indexpackageoption{mathitalicscorrection}
% Italics correction in math mode. See \cref{sec:manual-italic-correction} and also the
@@ -1000,10 +1259,14 @@ end
% \item[|raise*=|\meta{dim}]\label{item:raise}
% \indexpackageoption{raise*}
% Set the length by which selected characters (dash, hyphen, times, and number dash) are
-% raised. Default value:~0pt.
+% raised. Default value:~\formatdimen*{0pt}.
%
% Only the raise amounts for guillemets are unaffected by this option.
%
+% This option neither can be used with \hyperref[syn:typogsetup]{\code{typogsetup}} nor
+% with \hyperref[syn:typogget]{\cs{typogget}}, however, the specific options influenced by
+% it can.
+%
% \item[|raisecapitaldash=|\meta{dim}]\label{item:raisecapitaldash}
% \indexpackageoption{raisecapitaldash}
% Set the length that the \cs{textendash} is raised in
@@ -1093,6 +1356,30 @@ end
% \emph{not} in the document body.
%
% By default this option is unset.
+%
+% \item[|uppercaselabelitemadjustments=\{|\meta{dim1}, \meta{dim2}, \meta{dim3}, \meta{dim4}|\}|]%
+% \label{item:uppercaselabelitemadjustments}
+% \indexpackageoption{uppercaselabelitemadjustments}
+% \sinceversion{Since v0.4}
+% Vertical shifts \meta{dimN} to apply to \cs{labelitem}\meta{N}, where \meta{N} is the
+% nesting level of the |itemize|~list starting at one. An empty \meta{dimN} is equivalent
+% to~\formatdimen*{0pt}. The adjustments apply to the uppercase setting
+% (\hyperref[syn:uppercaseadjustlabelitems]{\code{\string\uppercaseadjustlabelitems}}).
+% See \cref{sec:adjust-label-items} (in particular subsection~\singlequotes{Setup} and
+% \cref{tab:labelitemadjustvalues} on \cpageref{tab:labelitemadjustvalues}) and also
+% configuration option
+% \hyperref[item:lowercaselabelitemadjustments]{\code{lowercaseadjustlabelitem}}.
+%
+% All four lengths default to~\formatdimen*{0pt}.
+%
+% \begin{important}
+% \slightlysloppy
+% \noindent
+% Configuring \code{uppercaselabelitemadjustments} (or
+% \code{lowercaselabelitemadjustments}) does \emph{not} activate the correction
+% mechanism. Use one of the macros \code{\string\uppercaseadjustlabelitems} or
+% \code{\string\lowercaseadjustlabelitems} for that purpose.
+% \end{important}
% \end{description}
% \end{typogsetup}
% \index{package options|)}
@@ -1116,12 +1403,13 @@ end
% issues a \cs{par} at its end. Environments with different name suffixes never close
% with~\cs{par}.
%
-% \bigskip
%
-% \noindent
+% \subsection{Setup and Reconfiguration}\label{sec:setup}
+%
% \DescribeEnv{typogsetup}
-% Configure\index{configuration}\index{setup} the package with the given \meta{keys}. An empty
-% argument of \code{typogsetup} resets all \meta{keys} to their default values.
+% Configure\index{configuration|userman}\index{setup|userman} the package with the given
+% \meta{keys}. An empty argument of \code{typogsetup} resets all \meta{keys} to their default
+% values.
%
% \begin{synopsis}\label{syn:typogsetup}
% \cs{begin}|{typogsetup}|\marg{keys}
@@ -1129,7 +1417,7 @@ end
% \cs{end}|{typogsetup}|
% \end{synopsis}
%
-% The package can be (re-)configured\index{reconfigure} at any point with
+% The package can be (re-)configured\index{reconfigure|userman} at any point with
% \cs{typogsetup}\marg{keys}, or --~for localized changes~-- as
%
% \begin{codeexample}
@@ -1143,6 +1431,12 @@ end
% where \meta{keys} have the same format as the package options described in
% \cref{sec:package-options}.
%
+% \begin{note}
+% Use \code{\string\PassOptionsToPackage\{\meta{keys}\}\{typog\}} to pass \meta{keys} to
+% \packagename{typog} before loading it and \code{\string\typogsetup\{\meta{keys}\}} after
+% \code{\string\usepackage\{typog\}}.
+% \end{note}
+%
% \begin{usecases}
% \cs{typogsetup} can substitute configuring the package at load-time or serve as an
% addition.~\visualpar Using the |typogsetup|~environment allows to fine-tune the parameters
@@ -1154,9 +1448,9 @@ end
%
% \noindent
% \DescribeMacro{\typogget}
-% Sometimes the user needs to access internal configuration values of
-% package~\packagename{typog}. This can be done in a safe way without resorting to code that
-% is bracketed by \cs{makeatletter}/\cs{makeatother} with the help of the following macro.
+% Sometimes the user needs to access configuration values of package~\packagename{typog}. This
+% can be done in a safe way without resorting to code that is bracketed by \cs{makeatletter}
+% and \cs{makeatother} with the help of the following macro.
%
% \begin{synopsis}\label{syn:typogget}
% \cs{typogget}\marg{key}
@@ -1177,15 +1471,47 @@ end
% \> \{\cs{raisebox}\= \{\cs{typogget}\{raisecapitaldash\}\}\{\cs{cdot}\}\}
% \end{codeexample}
%
-% The latter only is useful inside of an \code{itemize}~environment of course.
+% The latter only is useful inside of an \code{itemize}~environment of course. Compare with
+% the solution in \cref{sec:adjust-label-items} offered by \packagename{typog} since v0.4.
% \end{usecase}
%
+% \DescribeMacro{\typoggetnth}
+% \sinceversion{Since v0.4}
+% If a configuration item is associated with a list as
+% \hyperref[item:lowercaselabelitemadjustments]{\code{lowercaselabelitemadjustments}},
+% \hyperref[item:shrinklimits]{\code{shrinklimits}},
+% \hyperref[item:stretchlimits]{\code{stretchlimits}},
+% \hyperref[item:trackingttspacing]{\code{trackingttspacing}}, and
+% \hyperref[item:uppercaselabelitemadjustments]{\code{uppercaselabelitemadjustments}} are, it
+% may be convenient to fetch a particular list element of it.
+%
+% \begin{synopsis}\label{syn:typoggetnth}
+% \cs{typoggetnth}\marg{csname}\marg{key}\marg{index} \\
+% \cs{typoggetnth}\marg{dimen-register}\marg{key}\marg{index}
+% \end{synopsis}
+%
+% Retrieve the configuration value --~which is a comma-separated list~-- that is associated
+% with~\meta{key} and store the item having position~\meta{index} in \meta{dimen-register} or
+% the parameter-less, global macro~\meta{csname}. The destination \meta{dimen-register} may be
+% predefined like, e.\,g., \cs{dimen0} or user-defined. Dimensions can also be stored in a
+% macro by using the \meta{csname}~form of \cs{typoggetnth} but not \foreignphrase{vice versa}.
+%
+% Index into the list either from left-to-right with positive indices starting at~\(1\) up to
+% the length of the list, or from right-to-left with negative indices starting at~\(-1\) down
+% to the negative length.
+%
+% \begin{note}
+% Macro~\cs{typoggetnth} \emph{only} works with \meta{key}s that are associated with a list
+% of values.
+% \end{note}
+%
%
-% \subsection{Information}\label{sec:information}\index{information}
+% \subsection{Information}\label{sec:information}
+% \index{information|userman}
%
% \begin{whittyquote}
% Never forget: The visual output counts; \\
-% it must always be checked, [\dots]. \\
+% it must always be checked, [\dots\itcorr{-4}]. \\
% \marginnote{The em-dash at then end of the quote is height-adjusted with
% \hyperref[syn:capitalemdash]{\cs{capitalemdash*}}.}%
% \capitalemdash*~\propername{Udo Wermuth}~\cite{wermuth:2017a}
@@ -1196,14 +1522,14 @@ end
%
%
% \subsubsection{Font Information}\label{sec:font-information}
-% \index{font>information}
+% \index{font>information|userman}
%
% \DescribeMacro{\fontsizeinfo}
% Capture the font~size\footnote{We use \cs{fontdimen6}, the em-height as the font
-% size.}\index{font>size} and line~spacing\footnote{The line~spacing simply is
-% \cs{baselineskip}.}\index{line spacing} at the point where \cs{fontsizeinfo} \emph{is called}
-% in macro~\meta{cs-name}. Both dimensions are measured in points~(pt) and the results are
-% rounded to tenths.
+% size.}\index{font>size|userman} and line~spacing\footnote{The line~spacing simply is
+% \cs{baselineskip}.}\index{line spacing|userman} at the point where \cs{fontsizeinfo} \emph{is
+% called} in macro~\meta{cs-name}. Both dimensions are measured in points~(pt) and the results
+% are rounded to tenths.
%
% \begin{synopsis}\label{syn:fontsizeinfo}
% \cs{fontsizeinfo}\marg{cs-name}
@@ -1259,9 +1585,8 @@ end
%
% \begin{caution}
% The end-of-trace marker sometimes gets placed too early and the trace seems truncated.
-% \LaTeX{} reliably logs the requested the trace information, but the write operations for
-% trace data and \cs{immediate}\cs{write} which is used to print the end-tag are not
-% synchronized.
+% \LaTeX{} reliably logs the requested trace information, but the write operations for trace
+% data and \cs{immediate}\cs{write} which is used to print the end-tag are not synchronized.
% \end{caution}
%
%
@@ -1287,7 +1612,8 @@ end
%
% \begin{itemize}[noindent]
% \item Any text tool can be used to ferret out the tags. \propername{Emacs} users will find
-% \mbox{\code{(occur \meta{regexp})}} to be useful.
+% \mbox{\code{(occur \meta{regexp})}} to be useful.\shiftedmarginnote{This \code{itemize}
+% list demonstrates vertically adjusted label items (\cref{sec:adjust-label-items}).}
%
% \item As long as the tags are not nested \programname{sed} or \programname{perl}
% extract the information gathered by~|typoginspect|, for example:
@@ -1338,13 +1664,20 @@ end
%
% \item If more trace information is needed just add \cs{tracing\dots} calls right after
% \code{\string\begin\{typoginspect\}}
-% or~\code{\string\begin\{typoginspectpar\}}.\specialsectionendhere
+% or~\code{\string\begin\{typoginspectpar\}}.
+%
+% \item As the overhead of \cs{typoginspect} is relatively low, hairy parts of a document can
+% permanently be furnished with them, for example, the Index.
+%
+% \item Any labeled part can treat their ids to \meta{id}. Think of \cs{caption}s or any
+% theorem-like environment and their associated, unique \cs{label}s.\specialsectionendhere
% \end{itemize}
% \end{tips}
%
%
% \phantomsection
-% \paragraph{Investigating the badness of a paragraph.}\label{sec:investigating-paragraph-badness}\index{paragraph>badness}
+% \paragraph{Investigating the badness of a paragraph.}\label{sec:investigating-paragraph-badness}
+% \index{paragraph>badness|userman}
%
% It is generally unnecessary to determine the \emph{exact} classification of a paragraph's
% badness~\cite[p.~97n]{knuth:1986}, though the curious user can switch on logging of
@@ -1386,9 +1719,9 @@ end
% \begin{enumerate}[beginpenalty=10000, nosep]
% \item The shortfall~\sample{s} and
% \item glue~\sample{a} or~\sample{g}.\footnote{The author is unaware of any descriptions
-% of \code{s}, \code{a}, or~\code{g}. The interested reader is referred to the source
-% code, e.\,g., \filesystem{pdftex.web}; search for \code{print("\textvisiblespace s=")}.
-% In the weaved documentation the first relevant section is~\S1851.}
+% of \sample{s}, \sample{a}, or~\sample{g} and the interested reader is referred to the
+% source code, e.\,g., \filesystem{pdftex.web}; search for \code{print("\textvisiblespace
+% s=")}. In the weaved documentation the first relevant section is~\S1851.}
% \end{enumerate}
% \item The best\footnote{\singlequotes{Best} means the minimum-demerits path in the graph of
% the feasible breakpoints, which has been constructed for the paragraph.} way to get
@@ -1404,13 +1737,13 @@ end
% as parenthesized values (units are thousandths of the current font's~em) like, e.\,g.,
%
% \begin{codeexample}
-% \textbackslash T1/erewhon-LF/m/n/9/@/@ (-13) \dots
+% \textbackslash T1/erewhon-LF/m/n/9/@/@ (-13) \dots
% \end{codeexample}
%
% or
%
% \begin{codeexample}
-% \textbackslash T1/erewhon-LF/m/n/9/@/@/10ls (+7) \dots
+% \textbackslash T1/erewhon-LF/m/n/9/@/@/10ls (+7) \dots
% \end{codeexample}
%
% An \sample{ls} appended to the font name specification indicates that
@@ -1419,7 +1752,9 @@ end
% \end{note}
%
%
-% \paragraph{Investigating page-breaks.}\index{page break}
+% \phantomsection
+% \paragraph{Investigating page-breaks.}
+% \index{page break|userman}
%
% Use \code{\cs{tracingpages}=1} or the \hyperref[syn:typoginspect]{typoginspect}~environment
% to switch on tracing of \TeX's page-break
@@ -1486,7 +1821,7 @@ end
%
%
% \subsection{Hyphenation}\label{sec:latex-hyphenation}
-% \index{hyphenation}
+% \index{hyphenation|userman}
%
% \TeX's and thus \LaTeX's hyphenation algorithm is highly sophisticated, yet the document
% author sometimes lacks convenient macros to solve seemingly trivial typographic tasks. For
@@ -1500,8 +1835,8 @@ end
% \cs{allowhyphenation}
% \end{synopsis}
%
-% Macro~\cs{allowhyphenation}\index{hyphenation>re-enable automatic} re-enables automatic
-% hyphenation after \TeX{} has turned it off, for example, in the innocuous case of a
+% Macro~\cs{allowhyphenation}\index{hyphenation>re-enable automatic|userman} re-enables
+% automatic hyphenation after \TeX{} has turned it off, for example, in the innocuous case of a
% hyphenated compound.
%
% The admittedly simple rules when \TeX{} auto-hyphenates and when not give rise to so many
@@ -1636,7 +1971,7 @@ end
% Whenever using \cs{-}, the short-hand form of \cs{discretionary\{-\}\{\}\{\}}, authors
% writing in a foreign language should reconsider whether it really beats \cs{hyphenation} or
% \cs{babelhyphenation}\footnote{\cs{babelhyphenation} is the multi-lingual extension of \TeX's
-% \cs{hyphenation} and it is defined in package~\packagename{babel}~\cite{package:babel}}. in
+% \cs{hyphenation} and it is defined in package~\packagename{babel}~\cite{package:babel}.} in
% the particular situation. However, sometimes \cs{-} actually \emph{is} the way to go.
%
% Let us assume we mark up proper names with
@@ -1662,6 +1997,12 @@ end
% which are impossible to encode with \cs{hyphenation} or~\cs{babelhyphenation} as these expect
% only letters and dashes as their arguments with spaces separating the words.
%
+% \index{hyphenation>first word|userman}
+% \index{hyphenation>hskip=\cs{hskip}|userman}
+% \TeX{} never hyphenates the initial word in a paragraph and \cs{allowhyphenation} cannot help
+% in this case. Start the paragraph with \cs{hskip~0pt} to enable hyphenation even for the
+% first word.
+%
% \begin{tip}[Typewriter Fonts]
% Sometimes it is desired to get a hyphenatable typewriter font. \LaTeX{} suppresses any
% hyphenation for fonts in \cs{ttfamily} by un-defining their \cs{hyphenchar}s. If these are
@@ -1686,8 +2027,8 @@ end
% \cs{breakpoint*}
% \end{synopsis}
%
-% The starred form inserts an empty discretionary,\index{hyphenation>empty discretionary} which
-% disables automatic hyphenation. The unstarred form inserts an empty discretionary and
+% The starred form inserts an empty discretionary,\index{hyphenation>empty discretionary|userman}
+% which disables automatic hyphenation. The unstarred form inserts an empty discretionary and
% immediately re-enables automatic hyphenation.
%
% The difference between \cs{breakpoint} and the \LaTeX{} macro~\cs{allowbreak} is not only
@@ -1729,7 +2070,7 @@ end
%
%
% \subsection{Disable\kernedslash Break Ligatures}\label{sec:break-ligatures}
-% \index{ligature}
+% \index{ligature|userman}
%
% \DescribeMacro{\nolig*}
% Break a ligature without introducing a hyphenation opportunity.
@@ -1739,8 +2080,8 @@ end
% \end{synopsis}
%
% Inserting \cs{nolig*} disables a ligature at the given point by a kern. Set the size of the
-% kern\index{kerning>ligature} with \hyperref[item:ligaturekern]{|ligaturekern|} or override
-% this value with \meta{kerning} as thousandths of the current font's~em.
+% kern\index{kerning>ligature|userman} with \hyperref[item:ligaturekern]{\code{ligaturekern}} or
+% override this value with \meta{kerning} as thousandths of the current font's~em.
%
% \begin{usecases}
% \cs{nolig*} can be useful in headings, where additional hyphenation points are
@@ -1762,12 +2103,12 @@ end
% introduces a hyphenation opportunity with
% penalty~\hyperref[item:breakpenalty]{|breakpenalty|}.
%
-% \begin{important}[\packagename{hyperref} bookmarks]\index{hyperref=\packagename{hyperref} (package)}
+% \begin{important}[\packagename{hyperref} bookmarks]\index{hyperref=\packagename{hyperref} (package)|userman}
% If a \cs{nolig} --~whether starred or un-starred~-- occurs in an argument that is processed
% with package~\packagename{hyperref} for inclusion into the document's
-% \acronym{PDF}-bookmarks\index{PDF=\acronym{PDF}}\index{bookmark} an additional argument is
-% necessary to parse the macro. This argument either is \cs{relax} or~the empty
-% group~(\code{\{\}}).
+% \acronym{PDF}-bookmarks\index{PDF=\acronym{PDF}|userman}\index{bookmark|userman} an
+% additional argument is necessary to parse the macro. This argument either is \cs{relax}
+% or~the empty group~(\code{\{\}}).
%
% \begin{synopsis}
% \begin{tabbing}
@@ -1944,14 +2285,14 @@ end
%
%
% \subsection{Apply Extra Kerning}\label{sec:extra-kerning}
-% \index{kerning>extra}
+% \index{kerning>extra|userman}
%
% Package \packagename{typog} supplies two sets of macros to kern some of the punctuation
% symbols. One is for forward slashes the other, more extensive one, for hyphens.
%
%
% \subsubsection{Slash}\label{sec:slash-with-kern}
-% \index{kerning>forward slash}
+% \index{kerning>forward slash|userman}
%
% \DescribeMacro{\kernedslash}
% \DescribeMacro{\kernedslash*}
@@ -1980,7 +2321,7 @@ end
%
%
% \subsubsection{Hyphen}\label{sec:hyphen-with-kern}
-% \index{kerning>hyphen}
+% \index{kerning>hyphen|userman}
%
% \DescribeMacro{\kernedhyphen}
% \DescribeMacro{\kernedhyphen*}
@@ -2027,7 +2368,7 @@ end
%
%
% \subsection{Raise Selected Characters}\label{sec:raise-characters}
-% \index{raised character}
+% \index{raised character|userman}
%
% Usually all hyphens and dashes of a font are designed to join lowercase letters. This holds
% also true for most of our \cs{labelitem}\meta{N} markers, bullets, stars, and even fancy
@@ -2036,10 +2377,10 @@ end
% arises if |itemize|~list markers precede an uppercase letter, a lining numeral, or a big
% mathematical operator.
%
-% We introduce a set of macros for the most common cases that allow typsetting these characters
-% at a user definable, adjusted height above the baseline. Users can base their own
-% definitions of raised characters on their associated dimensions.\footnote{Also compare with
-% Ex.~12 in Ref.~\citenum{wermuth:2023} for an attempt to automate vertical alignment.}
+% We introduce a set of macros for the most common cases that typeset these characters at a
+% user definable, adjusted height above the baseline. Users can base their own definitions of
+% raised characters on their associated dimensions.\footnote{Also compare with Ex.~12 in
+% Ref.~\citenum{wermuth:2023} for an attempt to automate vertical alignment.}
%
% \begin{caution}
% The height adjustment disables a font's built-in kerning.
@@ -2051,7 +2392,7 @@ end
%
%
% \subsubsection{Capital Hyphen}\label{sec:capital-hyphen}
-% \index{raised character>hyphen}
+% \index{raised character>hyphen|userman}
%
% \DescribeMacro{\capitalhyphen}
% \DescribeMacro{\capitalhyphen*}
@@ -2081,7 +2422,7 @@ end
%
%
% \subsubsection{Capital Dash}\label{sec:capital-dash}
-% \index{raised character>en-dash}
+% \index{raised character>en-dash|userman}
%
% \DescribeMacro{\capitalendash}
% \DescribeMacro{\capitalendash*}
@@ -2127,7 +2468,7 @@ end
%
%
% \subsubsection{Number Dash (Figure Dash)}\label{sec:number-dash}
-% \index{raised character>number dash}
+% \index{raised character>number dash|userman}
%
% \DescribeMacro{\figuredash}
% \DescribeMacro{\figuredash*}
@@ -2152,49 +2493,63 @@ end
% The actual amount the en-dash gets raised in \cs{figuredash} is determined by
% \hyperref[item:raisefiguredash]{|raisefiguredash|}.
%
-% Values of .05em to .1em are typical for fonts that need this kind of correction and~.1em is a
-% good starting point. \Cref{tab:raisefiguredash} summarizes some findings.
+% Values of .05\,em to .1\,em are typical for fonts that need this kind of correction
+% and~.1\,em is a good starting point. \Cref{tab:raisefiguredash} summarizes some findings.
%
% \begin{table}
% \centering
% \caption[Suggested raise amounts for \cs{figuredash}]%
-% {Suggested values for raising the en-dash between lining numerals of some selected
-% fonts.}
+% {Suggested values for raising \cs{figuredash}, which actually is an en-dash,
+% between lining numerals of some selected fonts in multiples of~1\,em.}
% \label{tab:raisefiguredash}
%
+% \newcommand*{\fbbmark}{\tablenotemark{\tablenotesymbol{1}}}
+%
% \begin{tabfigures}
-% \begin{tabular}{@{}l>{\RaggedRight}p{20em}@{}}
+% \begin{tabularx}{\linewidth}{@{}>{\RaggedRight}Xl@{}}
% \toprule
-% Raise & Font Name \\
-% em & \\
+% Font & Raise \\
% \midrule
-% 0 & Alegreya\index{font>Alegreya}, Arvo\index{font>Arvo},
-% Bitter\index{font>Bitter}, Clara\index{font>Clara},
-% \acronym{EB}~Garamond\index{font>EB Garamond=\acronym{EB} Garamond},
-% Gentium\index{font>Gentium},
-% Ibarra Real Nova\index{font>Ibarra Real Nova},
-% \acronym{Inria}~Serif\index{font>Inria Serif=\acronym{Inria} Serif},
-% Libertine\index{font>Libertine}, Libertinus\index{font>Libertinus},
-% Merriweather\index{font>Merriweather},
-% \acronym{PT}~Serif\index{font>PT Serif=\acronym{PT} Serif},
-% Roboto Slab\index{font>Roboto Slab}, Spectral\index{font>Spectral},
-% \acronym{STIX}\index{font>STIX=\acronym{STIX}}, and many more \\
-% .05 & fbb\index{font>fbb}, Source Serif Pro\index{font>Source Serif Pro} \\
-% .0667 & Libre Baskerville\index{font>Libre Baskerville},
-% Crimson Pro\index{font>Crimson Pro},
-% Erewhon\index{font>Erewhon}, Droid Serif\index{font>Droid Serif} \\
-% .1 & \acronym{GFS}~Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia},
-% Libre Caslon\index{font>Libre Caslon},
-% Coelacanth\index{font>Coelacanth}, Crimson Pro\index{font>Crimson Pro},
-% Crimson Text\index{font>Crimson Text},
-% \TeX{} Gyre~Pagella\index{font>TeX Gyre Pagella=\TeX{} Gyre Pagella},
-% Quattrocento\index{font>},
-% \acronym{TX}~Fonts\index{font>TX Fonts=\acronym{TX} Fonts},
-% \acronym{ADF}~Venturis\index{font>ADF Venturis=\acronym{ADF} Venturis},
-% and many more \\
+% Alegreya\detoxindex{font>typeface>Alegreya|userman}, Arvo\detoxindex{font>typeface>Arvo|userman},
+% Bitter\detoxindex{font>typeface>Bitter|userman}, Clara\detoxindex{font>typeface>Clara|userman},
+% \acronym{EB}~Garamond\detoxindex{font>typeface>EB Garamond=\acronym{EB} Garamond|userman},
+% Gentium\detoxindex{font>typeface>Gentium|userman},
+% Ibarra Real Nova\detoxindex{font>typeface>Ibarra Real Nova|userman},
+% \acronym{Inria}~Serif\detoxindex{font>typeface>Inria Serif=\acronym{Inria} Serif|userman},
+% Libertine\detoxindex{font>typeface>Libertine|userman},
+% Libertinus\detoxindex{font>typeface>Libertinus Serif|userman},
+% Merriweather\detoxindex{font>typeface>Merriweather|userman},
+% \acronym{PT}~Serif\detoxindex{font>typeface>PT Serif=\acronym{PT} Serif|userman},
+% Roboto Slab\detoxindex{font>typeface>Roboto Slab|userman},
+% Spectral\detoxindex{font>typeface>Spectral|userman},
+% \acronym{STIX}\detoxindex{font>typeface>STIX=\acronym{STIX}|userman}, and many more &
+% .0 \\
+% fbb\fbbmark\detoxindex{font>typeface>fbb|userman},
+% Source Serif Pro\detoxindex{font>typeface>Source Serif Pro|userman} &
+% .05 \\
+% Libre Baskerville\detoxindex{font>typeface>Libre Baskerville|userman},
+% Crimson Pro\detoxindex{font>typeface>Crimson Pro|userman},
+% Erewhon\detoxindex{font>typeface>Erewhon|userman},
+% Droid Serif\detoxindex{font>typeface>Droid Serif|userman} &
+% .0667 \\
+% \acronym{GFS}~Artemisia\detoxindex{font>typeface>GFS Artemisia=\acronym{GFS} Artemisia|userman},
+% Libre Caslon\detoxindex{font>typeface>Libre Caslon|userman},
+% Coelacanth\detoxindex{font>typeface>Coelacanth|userman},
+% Crimson Pro\detoxindex{font>typeface>Crimson Pro|userman},
+% Crimson Text\detoxindex{font>typeface>Crimson Text|userman},
+% \TeX{} Gyre~Pagella\detoxindex{font>typeface>TeX Gyre Pagella=\TeX{} Gyre Pagella|userman},
+% Quattrocento\detoxindex{font>typeface>Quattrocento|userman},
+% \acronym{TX}~Fonts\detoxindex{font>typeface>TX Fonts=\acronym{TX} Fonts|userman},
+% \acronym{ADF}~Venturis\detoxindex{font>typeface>ADF Venturis=\acronym{ADF} Venturis|userman},
+% and many more &
+% .1 \\
% \bottomrule
-% \end{tabular}
+% \end{tabularx}
% \end{tabfigures}
+%
+% \begin{tablenotes}
+% \fbbmark\enspace Free Bembo.
+% \end{tablenotes}
% \end{table}
%
% Other macros may be redefined with \cs{figuredash} for a consistent appearance of the copy,
@@ -2210,7 +2565,7 @@ end
%
% \subsubsection[Multiplication Sign]%
% {Multiplication Sign -- Times~\sample{\texttimes}}\label{sec:mult-sign}
-% \index{raised character>multiplication sign}
+% \index{raised character>multiplication sign|userman}
%
% \DescribeMacro{\capitaltimes}
% The \cs{capitaltimes}~macro is a variation of the
@@ -2232,17 +2587,19 @@ end
%
%
% \subsubsection{Guillemets}\label{sec:guillemets}
-% \index{raised character>guillemets}
+% \index{raised character>guillemets|userman}
%
% Another possible typographic problem this package addresses is that both sets --~single and
% double quotes~-- of guillemets may suffer from a too small distance to the baseline.
%
% For the implementation \packagename{typog} relies on the T1\footnote{Font
-% encoding~T1\index{font>encoding} can be forced via \cs{usepackage}|[T1]\{fontenc\}| in the
-% document preamble.}~font encoding not on package~\packagename{babel}.
+% encoding~T1\detoxindex{font>encoding|userman} can be forced via
+% \cs{usepackage}|[T1]\{fontenc\}| in the document preamble.}~font encoding not on
+% package~\packagename{babel}.
%
%
% \paragraph{Lowercase Versions.}
+%
% \DescribeMacro{\singleguillemetleft}
% \DescribeMacro{\singleguillemetright}
% \DescribeMacro{\doubleguillemetleft}
@@ -2280,33 +2637,34 @@ end
% or lining numerals is \cs{Singleguillemetleft} and \cs{Singleguillemetright} and
% \cs{Doubleguillemetleft} and \cs{doubleguillemetright}. Mnemonic: These macros start with an
% uppercase letter. Their height above the baseline is adjusted with
-% \hyperref[item:raisecapitalguillemets]{|raisecapitalguillemets|}. Values of .025em to .075em
-% are typical for fonts that need this kind of correction. \Cref{tab:raiseguillemets}
+% \hyperref[item:raisecapitalguillemets]{|raisecapitalguillemets|}. Values of .025\,em to
+% .075\,em are typical for fonts that need this kind of correction. \Cref{tab:raiseguillemets}
% summarizes some findings.
%
% \begin{table}
% \centering
% \caption[Suggested raise amounts for guillemets]%
-% {Suggested values for raising guillemets of some selected fonts.}
+% {Suggested values for raising guillemets of some selected fonts in multiples
+% of~1\,em.}
% \label{tab:raiseguillemets}
%
% \begin{tabfigures}
-% \begin{tabular}{@{}cc>{\RaggedRight}p{20em}@{}}
+% \def~{\hphantom{0}}
+% \begin{tabular}{@{}>{\RaggedRight}p{.5\textwidth}cc@{}}
% \toprule
-% \multicolumn{2}{@{}c}{Raise} & Font Name \\
-% Lowercase & Uppercase & \\
-% em & em & \\
+% Font & Uppercase & Lowercase \\
% \midrule
-% 0 & .05\hphantom{00} &
-% \acronym{EB}~Garamond\index{font>EB Garamond=\acronym{EB} Garamond},
-% Libertinus\index{font>Libertinus},
-% Merriweather\index{font>Merriweather}, and many more \\
-% .025 & .05\hphantom{00} & Gentium\index{font>Gentium} \\
-% .04\hphantom{0} & .0667 &
-% \acronym{ADF}~Baskervald\index{font>ADF Baskervald=\acronym{ADF} Baskervald} \\
-% .05\hphantom{0} & .0625 &
-% \acronym{GFS}~Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia},
-% \acronym{GFS}~Didot\index{font>GFS Didot=\acronym{GFS} Didot} \\
+% \acronym{EB} Garamond\detoxindex{font>typeface>EB Garamond=\acronym{EB} Garamond|userman},
+% Libertinus\index{font>typeface>Libertinus Serif|userman},
+% Merriweather\index{font>typeface>Merriweather|userman}, and many more &
+% .05~~ & .0~~ \\
+% Gentium\index{font>typeface>Gentium|userman} &
+% .05~~ & .025 \\
+% \acronym{GFS} Artemisia\detoxindex{font>typeface>GFS Artemisia=\acronym{GFS} Artemisia|userman},
+% \acronym{GFS} Didot\detoxindex{font>typeface>GFS Didot=\acronym{GFS} Didot|userman} &
+% .0625 & .05~ \\
+% \acronym{ADF} Baskervald\index{font>typeface>ADF Baskervald=\acronym{ADF} Baskervald|userman} &
+% .0667 & .04~ \\
% \bottomrule
% \end{tabular}
% \end{tabfigures}
@@ -2322,7 +2680,8 @@ end
% \cs{let}\cs{sq}=\cs{singlequotes}
% \end{codeexample}
%
-% and similar definitions for \cs{Singlequotes}, \cs{doublequotes}, and~\cs{Doublequotes}.
+% \noindent
+% and similar definitions for \cs{Singlequotes}, \cs{doublequotes}, and \cs{Doublequotes}.
%
% Users working according to the French typesetting conventions will want to add extra
% spacing between the guillemets and the macro argument already in these macros.
@@ -2334,7 +2693,7 @@ end
%
%
% \paragraph{Interaction with package~\packagename{csquotes}.}
-% \index{csquotes=\packagename{csquotes} (package)}
+% \index{csquotes=\packagename{csquotes} (package)|userman}
%
% The users of package~\packagename{csquotes}
% can hook up the guillemets as defined by \packagename{typog}
@@ -2367,21 +2726,374 @@ end
% \end{futuredirection}
%
%
+% \subsection[Vertically Adjust Label Items]
+% {Vertically Adjust Label Items of
+% Environment \code{itemize}}\label{sec:adjust-label-items}
+% \index{label items|userman}
+%
+% \begin{whittyquote}
+% Perfection of planned layout \\
+% is archieved only by institutions \\
+% on the point of collapse. \\
+% \capitalemdash*~\propername{Cyril Northcote Parkinson}
+% \end{whittyquote}
+%
+% \noindent
+% The symbols that \LaTeX{} uses to distinguish the items of |itemize|~lists do not always
+% align well in the vertical direction with the following text. Sometimes the label is too
+% low, especially if followed by an uppercase (initial) letter. In rare occasions the label is
+% placed too far above the baseline. If any label has been taken from a math-font vertical
+% alignment with the text font is almost purely accidental.\footnote{The exception being
+% mathematics typeset as text via package~\packagename{mathastext}~\cite{package:mathastext}.}
+%
+% \hangindent=2\parindent
+% \hangafter=-3
+% \noindent
+% \DescribeMacro{\uppercaseadjustlabelitems}
+% \DescribeMacro{\lowercaseadjustlabelitems}
+% \DescribeMacro{\noadjustlabelitems}
+% \sinceversion{All three since v0.4}
+% Package~\packagename{typog} lets the user vertically align the \code{itemize}~labels for
+% subsequent uppercase or lowercase letters, where the designations~\singlequotes{uppercase}
+% and \singlequotes{lowercase} are just names for two four-tuples of lengths (technically:
+% |dimen|s) to shift the labels up or down.
+%
+% \begin{synopsis}
+% \label{syn:lowercaseadjustlabelitems}
+% \label{syn:noadjustlabelitems}
+% \label{syn:uppercaseadjustlabelitems}
+% \cs{uppercaseadjustlabelitems}\marg{levels-to-adjust} \\
+% \cs{lowercaseadjustlabelitems}\marg{levels-to-adjust} \\
+% \cs{noadjustlabelitems}\marg{levels-to-adjust}
+% \end{synopsis}
+%
+% Apply uppercase adjustment, lowercase adjustment or no adjustment to the labels in
+% |itemize|~environments at the \meta{levels-to-adjust}. The adjustment values themselves,
+% this is the vertical shifts are configured with
+% options~\hyperref[item:uppercaselabelitemadjustments]{\code{uppercaselabelitemadjustments}}
+% and~\hyperref[item:lowercaselabelitemadjustments]{\code{lowercaselabelitemadjustments}}.
+% They are doubly font dependent: on the one hand the font where the label itself comes from
+% and on the other hand the font of the copy.
+%
+% The argument \meta{levels-to-adjust} is a --~possibly empty~-- comma separated list of the
+% levels the respective adjustments are to be applied to. The levels themselves are given as
+% \emph{decimal} numbers, this is, 1, 2, 3, 4 or the special value~\sample{*} which stands for
+% all four levels. An empty argument list also has a special meaning. Used within any
+% \code{itemize}~environment it automatically applies the adjustment to exactly this level.
+%
+% \begin{example}
+% \begin{typogsetup}{uppercaselabelitemadjustments={.1em}}
+% With the flexible syntax the following settings are possible.
+%
+% \renewcommand*{\labelitemi}{{\small$\rhd$}}%
+% \begin{itemize}\uppercaseadjustlabelitems{}
+% \item Correct all |itemize| labels for uppercase letters.
+%
+% \begin{codeexample}
+% \cs{uppercaseadjustlabelitems}\{*\}
+% \end{codeexample}
+%
+% \item Adjust nesting levels~1, 2, and~3 for uppercase letters and level~4 for lowercase.
+%
+% \begin{codeexample}
+% \cs{lowercaseadjustlabelitems}\{4\} \\
+% \cs{uppercaseadjustlabelitems}\{2,3,1\}
+% \end{codeexample}
+%
+% \item Within an |itemize|~environment just turn off any correction for this level whatever
+% it may be.
+%
+% \begin{codeexample}
+% \cs{begin}\{itemize\} \\
+% \cs{noadjustlabelitems}\{\} \\
+% \cs{item} \dots \\
+% \cs{end}\{itemize\}
+% \end{codeexample}
+%
+% \item Override \cs{labelitemi} with a right-pointing triangle and adjust its vertical
+% position inside of a \code{typogsetup}~environment.
+%
+% \begin{codeexample}
+% \cs{begin}\=\{typogsetup\} \\
+% \>\{uppercaselabelitemadjustments=\{.1em\}\} \\
+% 12\=34567890 \kill
+% \>\cs{renewcommand*}\{\cs{labelitemi}\}\{\{\cs{small}\$\cs{rhd}\$\}\} \\
+% \>\cs{begin}\{itemize\} \\
+% \>\cs{uppercaseadjustlabelitems}\{\} \\
+% \>\cs{item} \dots \\
+% \>\cs{end}\{itemize\} \\
+% \cs{end}\{typogsetup\}
+% \end{codeexample}
+% \end{itemize}
+%
+% The observant reader will have noticed that the itemized list in this emphasized section
+% uses the code of the last example.
+% \end{typogsetup}
+% \end{example}
+%
+%
+% \paragraph{Setup.}
+%
+% To assist the user in finding the desired adjustments of the labels of \packagename{typog}
+% provides macros that help setting up
+% \hyperref[item:lowercaselabelitemadjustments]{\code{lowercaselabelitemadjustments}} and
+% \hyperref[item:uppercaselabelitemadjustments]{\code{uppercaselabelitemadjustments}}. Their
+% intended uses are in the draft phase of a document or in non-printed sections of the text.
+%
+% The macros assume a \singlequotes{correct} height that they derive from the measured height
+% of a sample text scaled by a user-defined factor, which defaults
+% to~\nativetextfraction{1}{2}.\footnote{The default factor of~.5 hearkens back to
+% \propername{Strizver's} suggestion that \doublequotes{[b]ullets should be centered on either
+% the cap~height or x-height of the neighboring text, \dots.}~\cite[p.~220]{strizver:2014}.}
+% The then correct height gets indicated by a thin horizontal line parallel to the baseline.
+% Thus, at sufficiently high magnifications it is possible to judge whether a label gets
+% typeset too high or too low with respect to this reference line.
+%
+% \begin{note}
+% The macros use the actual height of a given sample~text. So, a lowercase~sample should not
+% contain any letters with ascenders.
+%
+% Swashes whether upper- or lowercase always need special attention.
+% \end{note}
+%
+% \DescribeMacro{\typogadjuststairs}
+% \sinceversion{Since v0.4}
+% To get a quick overview how the four \code{itemize}~labels align vertically
+% \cs{typogadjuststairs} draws them at user-defined steps, typically
+% \nativetextfraction{1}{4}\,pt, \nativetextfraction{1}{3}\,pt, or
+% \nativetextfraction{1}{2}\,pt. It ignores any existing adjustments and in that way can be
+% utilized as a first configuration step or, for a small \meta{step-size} and a high
+% \meta{number-of-steps}, for an easy refinement.
+%
+% \begin{synopsis}
+% \begin{tabbing}
+% \label{syn:typogadjuststairs}
+% \cs{typogadjuststairs}\=[\meta{scale-factor}=.5] \\
+% \>\marg{step-size}\marg{number-of-steps} \\
+% \>\marg{sample}
+% \end{tabbing}
+% \end{synopsis}
+%
+% Generate stairs of \meta{number-of-steps} vertically shifted label items; use the next odd
+% number, if \meta{number-of-steps} is even. Draw a reference hairline at \meta{scale-factor}
+% times the height of \meta{sample}, where \meta{scale-factor} defaults to~.5. The stairs
+% start at a vertical shift of
+% \begin{gather*}
+% -\frac{\text{\meta{number-of-steps}} - 1}{2} \times \text{\meta{step-size}} \\
+% \intertext{and repeat up}
+% \frac{\text{\meta{number-of-steps}} - 1}{2} \times \text{\meta{step-size}}.
+% \end{gather*}
+%
+% \noindent
+% The central step --~which is always surrounded by a bit more space~-- shows the neutral
+% alignment, this is~0\,pt. \cs{typogadjuststairs} never prints the contents of \meta{sample}.
+%
+% \begin{example}
+% Play ball!
+%
+% \begin{center}
+% \typogadjuststairs{.25pt}{9}{ABC}
+% \end{center}
+%
+% This is the result of \code{\string\typogadjuststairs\{.25pt\}\{9\}\{ABC\}} with the
+% document's definitions of \cs{labelitem}\meta{N}. The fifth label~item in each line is the
+% uncorrected one.
+% \end{example}
+%
+% \hangindent=2\parindent
+% \hangafter=-3
+% \noindent
+% \DescribeMacro{\typoguppercaseadjustcheck}
+% \DescribeMacro{\typoglowercaseadjustcheck}
+% \sinceversion{Both since v0.4}
+% For a quick and easy check how the four label items vertically align \emph{as configured} use
+% \code{\string\typoguppercaseadjustcheck} and \code{\string\typoglowercaseadjustcheck}.
+% Experienced users with a keen eye for type can apply these macros even in the initial setup.
+% An accurate determination of \code{uppercaselabelitemadjustments} and
+% \code{lowercaselabelitemadjustments} is preferably done at a high magnification (400\% to
+% 600\% on a 100\,dpi screen) with a representative sample of initial letters.
+%
+% \begin{synopsis}
+% \label{syn:typoguppercaseadjustcheck}
+% \label{syn:typoglowercaseadjustcheck}
+% \cs{typoguppercaseadjustcheck}[\meta{scale-factor}=.5]\marg{sample} \\
+% \cs{typoglowercaseadjustcheck}[\meta{scale-factor}=.5]\marg{sample}
+% \end{synopsis}
+%
+% Typeset all four label items adjusted for uppercase or for lowercase with an indicator line
+% at \meta{scale-factor} times the \meta{sample}'s actual height. The default
+% \meta{scale-factor} is~.5. Both macros refer to the currently configured values for the
+% uppercase or lowercase adjustments but they are independent of any settings done with
+% \cs{uppercaseadjustlabelitems}, \cs{lowercaseadjustlabelitems}, or \cs{noadjustlabelitems}.
+% Again, \meta{sample} does not get printed.
+%
+% \begin{example}
+% Uppercase check with \code{\string\typoguppercaseadjustcheck\{ABCXYZ\}}:
+%
+% \centering
+% ABGH\typoguppercaseadjustcheck{ABCXYZ}QWYZ,\enspace
+% 0123\typoguppercaseadjustcheck{ABCXYZ}4567
+%
+% \justifying
+% \noindent
+% and similarly for lowercase: \code{\string\typoglowercaseadjustcheck\{acexyz\}}:
+%
+% \centering
+% ace\typoglowercaseadjustcheck{acexyz}mno,\enspace
+% bdf\typoglowercaseadjustcheck{acexyz}gjy,\enspace
+% {\proportionaloldstylefigures 0123\typoglowercaseadjustcheck{acexyz}4567,}
+%
+% \justifying
+% \noindent
+% where we have bracketed the macro calls with selected uppercase and lowercase letters, or
+% suitable figures.
+% \end{example}
+%
+% In \Cref{tab:labelitemadjustvalues} on \cpageref{tab:labelitemadjustvalues} we collected some
+% suggestions for adjustment values in the \emph{default} case when the label items are not
+% redefined by the user and expand like
+%
+% \begin{center}
+% \def\arraystretch{1}
+% \begin{tabular}{@{}l@{\enspace\(\vdash\)\enspace}l@{}}
+% \cs{labelitemi} & \dumpmacro{\labelitemi}, \\
+% \cs{labelitemii} & \dumpmacro{\labelitemii}, \\
+% \cs{labelitemiii} & \dumpmacro{\labelitemiii}, and \\
+% \cs{labelitemiv} & \dumpmacro{\labelitemiv}.
+% \end{tabular}
+% \end{center}
+%
+% \noindent
+% They display as \sample{\labelitemi}, \sample{\labelitemii}, \sample{\labelitemiii}, and
+% \sample{\labelitemiv}, respectively.
+%
+% \begin{table}
+% \centering
+% \caption[Label item adjustment suggestions]%
+% {Some suggested values for the vertical adjustments of label items. The table
+% assumes that the default definitions (of class~\packagename{article}) for
+% \cs{labelitem}\meta{N} are in effect. The \code{itemize}-list levels~\code{i},
+% \code{ii}, \code{iii} and~\code{iv} are referred to with \(N = 1, 2, 3, 4\). All
+% lengths are given as printer points~(pt) and refer to a document font size of
+% \formatdimen*{10pt}.}
+% \label{tab:labelitemadjustvalues}
+%
+% \newcommand*{\etbbmark}{\tablenotemark{\tablenotesymbol{1}}}
+% \newcommand*{\xchartermark}{\tablenotemark{\tablenotesymbol{2}}}
+% \newcommand*{\kpmark}{\tablenotemark{\tablenotesymbol{3}}}
+% \newcommand*{\palladiomark}{\tablenotemark{\tablenotesymbol{4}}}
+% \newcommand*{\utopiamark}{\tablenotemark{\tablenotesymbol{5}}}
+%
+% \begin{tabfigures}
+% \def~{\hphantom{0}}
+% \def\mc#1{#1~~~}
+% \noindent
+% \makebox[0pt]{%
+% \begin{tabular}{@{}l*{4}{r}@{\qquad}*{4}{r}@{}}
+% \toprule
+% Font Name &
+% \multicolumn{4}{c}{Uppercase Adjustments} & \multicolumn{4}{c@{}}{Lowercase Adjustments} \\
+% {} &
+% \mc{1} & \mc{2} & \mc{3} & \mc{4} &
+% \mc{1} & \mc{2} & \mc{3} & \mc{4} \\
+% \midrule
+% \acronym{ADF} Accanthis\detoxindex{font>typeface>ADF Venturis=\acronym{ADF} Accanthis|userman} &
+% .5~~ & 1.5~~ & \textminus1.5~~ & 1.125 &
+% \textminus.75~ & .25~ & \textminus2.75~ & \textminus.125 \\
+% \acronym{ADF} Venturis\detoxindex{font>typeface>ADF Venturis=\acronym{ADF} Venturis|userman} &
+% .0~~ & 1.0~~ & .75~ & 1.0~~ &
+% \textminus.75~ & .0~~ & \textminus.25~ & .0~~ \\
+% \acronym{CM} Roman\detoxindex{font>typeface>CM Roman=\acronym{CM} Roman|userman} &
+% 1.0~~ & .75~ & 1.0~~ & 1.0~~ &
+% \textminus.25~ & \textminus.5~~ & \textminus.25~ & \textminus.25~ \\
+% Domitian\detoxindex{font>typeface>Domitian|userman} &
+% .25~ & 1.0~~ & .75~ & 1.0~~ &
+% \textminus1.0~~ & .0~~ & \textminus.325 & \textminus.25~ \\
+% Cochineal\detoxindex{font>typeface>Cochineal|userman} &
+% 1.0~~ & 1.0~~ & 1.0~~ & 1.0~~ &
+% \textminus.125 & \textminus.125 & \textminus.125 & \textminus.125 \\
+% \acronym{EB} Garamond\detoxindex{font>typeface>EB Garamond=\acronym{EB} Garamond|userman} &
+% .0~~ & 1.25~ & \textminus.875 & 1.325 &
+% \textminus1.5~~ & .0~~ & \textminus2.0~~ & 0.125 \\
+% etbb\etbbmark\detoxindex{font>typeface>etbb|userman} &
+% .25~ & 1.0~~ & 1.125 & .5~~ &
+% \textminus1.0~~ & \textminus.0~~ & \textminus.0~~ & \textminus.5~~ \\
+% Extended Charter\xchartermark\detoxindex{font>typeface>Extended Charter|userman} &
+% \textminus.25~ & 1.0~~ & 1.75 & .125 &
+% \textminus1.125 & .0~~ & .875 & \textminus.875 \\
+% Gentium\detoxindex{font>typeface>Gentium|userman} &
+% .0~~ & .75~ & .0~~ & .0~~ &
+% \textminus.5~~ & \textminus.25~ & \textminus.75~ & \textminus1.0~~ \\
+% \acronym{GFS} Bodoni\detoxindex{font>typeface>GFS Bodoni=\acronym{GFS} Bodoni|userman} &
+% \textminus.25~ & .625 & 1.0~~ & 1.125 &
+% \textminus1.25~ & \textminus.625 & \textminus.5~~ & \textminus.25~ \\
+% \acronym{GFS} Didot\detoxindex{font>typeface>GFS Didot=\acronym{GFS} Didot|userman} &
+% \textminus1.5~~ & .75~ & 1.0~~ & 1.25~ &
+% \textminus2.75~ & \textminus.25~ & \textminus.25~ & .25~ \\
+% \acronym{IBM} Plex Serif\detoxindex{font>typeface>IBM Plex Serif=\acronym{IBM} Plex Serif|userman} &
+% .5~~ & .5~~ & \textminus1.325 & .5~~ &
+% \textminus.25~ & \textminus.25~ & \textminus2.25~ & \textminus.25~ \\
+% \acronym{KP} Serif\kpmark\detoxindex{font>typeface>KP Serif=\acronym{KP} Serif|userman} &
+% .0~~ & 1.0~~ & 1.25~ & .75~ &
+% \textminus1.0~~ & .0~~ & .0~~ & \textminus.5~~ \\
+% Libertinus Serif\detoxindex{font>typeface>Libertinus Serif|userman} &
+% 1.0~~ & .75~ & 1.125 & .75~ &
+% .0~~ & \textminus.325 & .0~~ & \textminus.25~ \\
+% \acronym{ML} Modern\detoxindex{font>typeface>ML Modern=\acronym{ML} Modern|userman} &
+% 1.25~ & .75~ & 1.0~~ & .125 &
+% .0~~ & \textminus.5~~ & \textminus.25~ & \textminus.125 \\
+% Source Serif Pro\detoxindex{font>typeface>Source Serif Pro|userman} &
+% .125 & .75~ & \textminus1.0~~ & .125 &
+% \textminus.75~ & .0~~ & \textminus2.0~~ & \textminus.75~ \\
+% Spectral\detoxindex{font>typeface>Spectral|userman} &
+% .625 & .625 & \textminus1.5~~ & .625 &
+% \textminus.25~ & \textminus.25~ & \textminus2.5~~ & \textminus.25~ \\
+% \acronym{STIX}\detoxindex{font>typeface>STIX=\acronym{STIX}|userman} &
+% 1.0~~ & 1.0~~ & .75~ & 1.0~~ &
+% .0~~ & .0~~ & .0~~ & .0~~ \\
+% \acronym{URW} Palladio\palladiomark\detoxindex{font>typeface>URW Palladio=\acronym{URW} Palladio|userman} &
+% .25~ & 1.125 & 1.0~~ & 1.0~~ &
+% \textminus1.0~~ & \textminus.125 & \textminus.125 & \textminus.125 \\
+% Utopia Regular\utopiamark\detoxindex{font>typeface>Utopia Regular|userman} &
+% .0~~ & 1.0~~ & .75~ & 1.0~~ &
+% \textminus.75~ & .0~~ & \textminus.25~ & .0~~ \\
+% \bottomrule
+% \end{tabular}}
+% \end{tabfigures}
+%
+% \begin{tablenotes}
+% \etbbmark\enspace \propername{Edward Tufte}'s Bembo in package~\packagename{ETbb}. Note
+% the two initial capital letters in the filename.
+%
+% \xchartermark\enspace Found in package \packagename{XCharter}. Again note the two
+% initial capitals in the filename.
+%
+% \kpmark\enspace In package \packagename{kpfonts}.
+%
+% \palladiomark\enspace Contained in package~\packagename{mathpazo}.
+%
+% \utopiamark\enspace Utopia is available through package~\packagename{fourier} or
+% package~\packagename{mathdesign}. In the latter case pass option~\code{adobe-utopia} to
+% the package.
+% \end{tablenotes}
+% \end{table}
+%
+%
% \subsection[Align Last Line]
% {Align Last Line of a Paragraph}\label{sec:align-last-line}
-% \index{paragraph>align last line}
+% \index{paragraph>align last line|userman}
%
% The usual algorithms of \LaTeX{} typeset the last line of a paragraph flush with the left
% margin unless |center|, |raggedleft| or |Centering|, |FlushRight|
% (package~\packagename{ragged2e}~\cite{package:ragged2e}) are in effect. For an instructive
% discussion consult Ch.~17, \doublequotes{Paragraph End}, of Ref.~\citenum{eijkhout:2007}.
-% The following environments allow to adjust the last lines of paragraphs in different ways.
+% The following environments adjust the last lines of paragraphs in different ways.
%
% \DescribeEnv{lastlineraggedleftpar}
% \DescribeEnv{lastlineflushrightpar}
-% The environment |lastlineraggedleftpar|\index{paragraph>align last line>flush right} adjusts
-% the various skips such that the last lines of the paragraphs gets typeset flush with the
-% right margin.
+% The environment \code{lastlineraggedleftpar}\index{paragraph>align last line>flush right|userman}
+% adjusts the various skips such that the last lines of the paragraphs gets typeset flush with
+% the right margin.
%
% \begin{synopsis}\label{syn:lastlineraggedleftpar}\label{syn:lastlineflushrightpar}
% \cs{begin}|{lastlineraggedleftpar}| \\
@@ -2393,8 +3105,9 @@ end
% The name |lastlineflushrightpar| is an alias for~\code{lastlineraggedleftpar}.
%
% \DescribeEnv{lastlinecenteredpar}
-% Center\index{paragraph>align last line>centered} the last lines of the paragraphs enclosed by
-% this environment.\footnote{Also compare the approach taken in Ref.~\citenum{wermuth:2018}.}
+% Center\index{paragraph>align last line>centered|userman} the last lines of the paragraphs
+% enclosed by this environment.\footnote{Also compare the approach taken in
+% Ref.~\citenum{wermuth:2018}.}
%
% \begin{synopsis}\label{syn:lastlinecenteredpar}
% \cs{begin}|{lastlinecenteredpar}| \\
@@ -2412,7 +3125,7 @@ end
% \needtocspace
% \subsection[Fill Last Line]
% {Fill Last Line of a Paragraph}\label{sec:fill-last-line}
-% \index{paragraph>fill last line}
+% \index{paragraph>fill last line|userman}
%
% The problem of when and how to \singlequotes{fill} the last line of a paragraph is quite
% intricate. We first define the problem then we proceed to general purpose functions and we
@@ -2421,7 +3134,7 @@ end
%
% \subsubsection{Problem Definition}
%
-% Depending on the value of \cs{parindent}, either zero or nonzero, there may be the desire to
+% Depending on the value of \cs{parindent}, either zero or nonzero, there may be the need to
% control the length of the last line of a paragraph.
%
% \iffalse
@@ -2562,7 +3275,7 @@ end
% \includegraphics{crooked-paragraphs-3.mps}
% \end{center}
% \end{minipage}\footnotetext{Package~\packagename{parskip} defines \cs{parskip}
-% as \mbox{6pt plus 2pt} for a base size of~10pt.}
+% as \mbox{6\,pt plus 2\,pt} for a base size of~10\,pt.}
%
% \medskip
% \begin{minipage}{\linewidth}
@@ -2576,7 +3289,7 @@ end
%
% The suggestions for the gap-width vary from two~em to twice the width of a
% \singlequotes{typical} \cs{parindent}\footnote{% For example, \LaTeX's class
-% \packagename{article} uses a \cs{parindent} of~25pt.} for the gap~\cite{carlisle:1996}.
+% \packagename{article} uses a \cs{parindent} of~25\,pt.} for the gap~\cite{carlisle:1996}.
% \end{enumerate}
%
% \begin{tip}
@@ -2598,9 +3311,10 @@ end
% them should have certain advantageous properties.
%
% \begin{itemize}
-% \item Technically, the paragraphs need to contain enough glue (see
-% e.\,g.~\cref{sec:sloppy-paragraphs}) to achieve a low badness such that the desired
-% paragraph end is deemed feasible by \TeX.
+% \item Technically, the paragraphs need to contain enough glue (see for example
+% \cref{sec:sloppy-paragraphs}) to achieve a low badness such that the desired paragraph
+% end is deemed feasible by \TeX.\shiftedmarginnote{This \code{itemize} list demonstrates
+% vertically adjusted label items (\cref{sec:adjust-label-items}).}
%
% \item Aesthetically, the paragraphs must be long enough to absorb the change in last-line
% fill level otherwise their gray-values visibly deviate from the
@@ -2618,18 +3332,21 @@ end
% \item End-of-paragraph intervention.\label{enum:end-of-paragraph-intervention}
%
% \begin{enumerate}[notopsep]
-% \item Tie~\sample{\texttt{\char126}}\label{enum:tie-last-words}\index{paragraph>fill last line>tie}
+% \item Tie~\sample{\texttt{\char126}}\label{enum:tie-last-words}
+% \index{paragraph>fill last line>tie|userman}
%
% Tie the last words.
%
% The problem with the tie may be a hyphenation of one of the words that participates in
% the tie. The next item avoids this disadvantage.
%
-% \item \cs{mbox}\label{enum:mbox-last-words}\index{paragraph>fill last line>mbox=\cs{mbox}}
+% \item \cs{mbox}\label{enum:mbox-last-words}
+% \index{paragraph>fill last line>mbox=\cs{mbox}|userman}
%
% Join the last words or inline equation at the end of the paragraph with an~\cs{mbox}.
%
-% \item \cs{linebreak}\label{enum:linebreak}\index{paragraph>fill last line>linebreak=\cs{linebreak}}
+% \item \cs{linebreak}\label{enum:linebreak}
+% \index{paragraph>fill last line>linebreak=\cs{linebreak}|userman}
%
% Add a \cs{linebreak} to the back part of the paragraph (approximately where the
% \cs{mbox} of item~\ref{enum:mbox-last-words} would start) in a way that the last line
@@ -2646,7 +3363,8 @@ end
% \item Uniform paragraph change.\label{enum:uniform-paragraph-change}
%
% \begin{enumerate}[notopsep]
-% \item Vary spacing.\label{enum:vary-spacing}\index{font>spacing}
+% \item Vary spacing.\label{enum:vary-spacing}
+% \index{font>spacing|userman}
%
% Modify the inter-word spacing, for example, with the macros introduced in
% \cref{sec:looser-tighter-spacing}.
@@ -2655,13 +3373,15 @@ end
% or~\hyperref[syn:tightspacing]{|tightspacing|}.
% Increase the spacing~\meta{level} until the last line gets the desired length.
%
-% \item Vary font tracking.\label{enum:vary-font-tracking}\index{font>tracking}
+% \item Vary font tracking.\label{enum:vary-font-tracking}
+% \index{font>tracking|userman}
%
% Enclose the paragraph in a \hyperref[syn:setfonttracking]{\code{setfonttracking}}~group.
% See \cref{sec:tracking-control}. Increase or decrease the tracking in steps of
% \nativetextfraction{1}{1000}\,em until the last line looks good.
%
-% \item Vary font expansion.\label{enum:vary-font-expansion}\index{font>expansion}
+% \item Vary font expansion.\label{enum:vary-font-expansion}
+% \index{font>expansion|userman}
%
% Enclose the paragraph in a \hyperref[syn:setfontexpand]{\code{setfontexpand}}~group. See
% \cref{sec:font-expansion-control}.
@@ -2688,15 +3408,17 @@ end
%
% \DescribeEnv{shortenpar}
% \DescribeEnv{prolongpar}
-% The two environments |shortenpar|\index{paragraph>fill last
-% line>shortenpar=\code{shortenpar}} and |prolongpar|\index{paragraph>fill last
-% line>prolongpar=\code{prolongpar}} can be employed in quite general situations when a
+% The two environments
+% \code{shortenpar}\index{paragraph>fill last line>shortenpar=\code{shortenpar}|userman}
+% and \code{prolongpar}\index{paragraph>fill last line>prolongpar=\code{prolongpar}|userman}
+% can be employed in quite general situations when a
% paragraph should be typeset one line longer or shorter, e.\,g., to avoid a
-% widow~line\footnote{The last line of a paragraph becomes a \singlequotes{widow}\index{forlorn
-% line>widow} (ger.~\foreignphrase{Hurenkind}) if it starts the following page or column.} or
-% a club~line\footnote{The first line of a paragraph is called
-% \singlequotes{club}\index{forlorn line>club} or~\singlequotes{orphan}\index{forlorn
-% line>orphan} (ger.~\foreignphrase{Schusterjunge}) if it appears at the bottom of the page or
+% widow~line\footnote{The last line of a paragraph becomes a
+% \singlequotes{widow}\detoxindex{forlorn line>widow|userman} (ger.~\foreignphrase{Hurenkind}) if it
+% starts the following page or column.} or a club~line\footnote{The first line of a paragraph
+% is called \singlequotes{club}\detoxindex{forlorn line>club|userman}
+% or~\singlequotes{orphan}\detoxindex{forlorn line>orphan|userman}
+% (ger.~\foreignphrase{Schusterjunge}) if it appears at the bottom of the page or
% column.}~[\citenum{knuth:1986}, p.~104 and~\citenum{mittelbach:2018c}]. (See also
% \cref{sec:vtie-paragraph} for special functions to avoid clubs or widows.)
% \singlequotes{Accidentally}, they also change the length of the last line of the paragraph.
@@ -2730,7 +3452,8 @@ end
% parameter change.
%
% \DescribeEnv{covernextindentpar}
-% Environment |covernextindentpar|\index{paragraph>fill last line>covernextindentpar=\code{covernextindentpar}}
+% Environment \code{covernextindentpar}%
+% \index{paragraph>fill last line>covernextindentpar=\code{covernextindentpar}|userman}
% can be helpful for \hyperref[item:o1]{case~O1}, i.\,e., a too short last line.
%
% \begin{synopsis}\label{syn:covernextindentpar}
@@ -2747,9 +3470,10 @@ end
% (if \(\cs{parindent} = 0\)), or \meta{dim} if called with an optional argument.
%
% \DescribeEnv{openlastlinepar}
-% The next environment, |openlastlinepar|,\index{paragraph>fill last
-% line>openlastlinepar=\code{openlastlinepar}} takes care of \hyperref[item:o2]{case~O2},
-% i.\,e., a last line in a paragraph that is almost full or completely filled.
+% The next environment, \code{openlastlinepar},%
+% \index{paragraph>fill last line>openlastlinepar=\code{openlastlinepar}|userman}
+% takes care of \hyperref[item:o2]{case~O2}, i.\,e., a last line in a paragraph that is almost
+% full or completely filled.
%
% \begin{synopsis}\label{syn:openlastlinepar}
% \cs{begin}|{openlastlinepar}|\oarg{dim} \\
@@ -2769,13 +3493,15 @@ end
% last line is avoided, but the result may be of \hyperref[item:o1]{type~O1} nonetheless.
%
%
+% \toccontinuesonnextpage
% \needtocspace
% \Needspace{150pt}
-% \subsection{Spacing}\label{sec:spacing-control}\index{font>spacing}
+% \subsection{Spacing}\label{sec:spacing-control}
+% \index{font>spacing|userman}
%
% \begin{whittyquote}
-% 90~\% of design is typography. \\
-% And the other 90~\% is whitespace. \\
+% 90\% of design is typography. \\
+% And the other 90\% is whitespace. \\
% \capitalemdash*~\propername{Jeffrey Zeldman}
% \end{whittyquote}
%
@@ -2785,7 +3511,9 @@ end
% \cref{sec:microtype-frontend}.
%
%
-% \subsubsection[Looser\kernedslash Tighter]{Looser or Tighter Spacing}\label{sec:looser-tighter-spacing}\index{font>spacing>loose}\index{font>spacing>tight}
+% \subsubsection[Looser\kernedslash Tighter]{Looser or Tighter Spacing}\label{sec:looser-tighter-spacing}
+% \index{font>spacing>loose|userman}
+% \index{font>spacing>tight|userman}
%
%
% \begin{whittyquote}
@@ -2822,7 +3550,7 @@ end
%
% \begin{SCtable}[10]
% \caption[Spacing changes made by \code{loosespacing}]%
-% {Adjustments made by environment |loosespacing| to \cs{spaceskip}.
+% {Adjustments made by environment \code{loosespacing} to \cs{spaceskip}.
% The mapping of \meta{level} to the exact skip definitions are
% \(1 \mapsto \formatskip{1.05}{.5}{.1}\),
% \(2 \mapsto \formatskip{1.1}{.5}{.1}\),
@@ -2836,7 +3564,7 @@ end
% \def~{\hphantom{0}}%
% \begin{tabular}{@{}ccl@{}}
% \toprule
-% \meta{level} & Adjustment & Comment \\
+% \meta{level} & Adjustment & Note \\
% {} & \% & \\
% \midrule
% 0 & n/a & neutral \\
@@ -2861,29 +3589,29 @@ end
% \cref{tab:tightspacing}.
%
% \begin{SCtable}[10]
+% \def~{\hphantom{0}}
% \caption[Spacing changes made by \code{tightspacing}]%
-% {Adjustments made by environment |tightspacing| to \cs{spaceskip}.
+% {Adjustments made by environment \code{tightspacing} to \cs{spaceskip}.
% The mapping of \meta{level} to the exact skip definitions are
-% \(1 \mapsto \formatskip{.9875}{.0125}{.5\hphantom{000}}\)\!,
-% \(2 \mapsto \formatskip{.975}{.025}{.5\hphantom{00}}\)\!,
-% \(3 \mapsto \formatskip{.95}{.05}{.5\hphantom{0}}\)\!, and
+% \(1 \mapsto \formatskip{.9875}{.0125}{.5~~~}\)\!,
+% \(2 \mapsto \formatskip{.975}{.025}{.5~~}\)\!,
+% \(3 \mapsto \formatskip{.95}{.05}{.5~}\)\!, and
% \(\ge 4 \mapsto \formatskip{.9}{.1}{.5}\),
% where all factors scale with \cs{dimen2},
% the current font's space-width.}
% \label{tab:tightspacing}
%
% \begin{tabfigures}
-% \def~{\hphantom{0}}%
% \begin{tabular}{@{}ccl@{}}
% \toprule
-% \meta{level} & Adjustment & Comment \\
+% \meta{level} & Adjustment & Note \\
% {} & \% & \\
% \midrule
% 0 & n/a & neutral \\
-% 1 & ~{-}1.25 & default \\
-% 2 & ~{-}2.5~ & \\
-% 3 & ~{-}5\hphantom{.00} & \\
-% \(\ge\)\:4 & -10\hphantom{.00} & \\
+% 1 & ~\textminus 1.25 & default \\
+% 2 & ~\textminus 2.5~ & \\
+% 3 & ~\textminus 5\hphantom{.}~~ & \\
+% \(\ge\)\:4 & \textminus 10\hphantom{.}~~ & \\
% \bottomrule
% \end{tabular}
% \end{tabfigures}
@@ -2902,7 +3630,8 @@ end
% \end{usecases}
%
%
-% \subsubsection{Wide Space}\label{sec:wide-space}\index{wide space}
+% \subsubsection{Wide Space}\label{sec:wide-space}
+% \index{wide space|userman}
%
% The \cs{widespace} macro and its companion \cs{narrowspace} derive their appearances from
% several of the current font's \cs{fontdimen}\meta{number}s. \TeX{} addresses the latter by
@@ -2914,10 +3643,11 @@ end
%
% \begin{SCtable}
% \caption[\cs{fontdimen}\meta{number} parameters]
-% {The first column~\sample{\#} states the index of the \cs{fontdimen} parameter:
-% \meta{number}. Column~2 presents short descriptions of the
-% \cs{fontdimen}\meta{number} parameters. As examples, the values for the current
-% font are shown in column~3; they are normalized to the quad-size.\bottomstrut}
+% {All \TeX{} font parameters normalized to the font's quad-size. The first
+% column~\sample{\#} states the index of the \cs{fontdimen} parameter:
+% \meta{number}. Column~2 presents short descriptions of
+% \cs{fontdimen}\meta{number}. As examples, the values for the current font are
+% shown in column~3.\bottomstrut}
% \label{tab:fontdimen}
%
% \begin{tabfigures}
@@ -2931,7 +3661,6 @@ end
% \begin{tabular}{@{}lll@{}}
% \toprule
% \# & Description & Value \\
-% {} & & \multicolumn{1}{c}{\%} \\
% \midrule
% 1 & Slant per 1\,pt height & ~~\relativefontdimen1\topstrut \\
% 2 & Interword space width & ~\relativefontdimen2 \\
@@ -2990,7 +3719,8 @@ end
% \end{usecase}
%
%
-% \subsubsection{Narrow Space}\label{sec:narrow-space}\index{narrow space}
+% \subsubsection{Narrow Space}\label{sec:narrow-space}
+% \index{narrow space|userman}
%
% \DescribeMacro{\narrowspace}
% \DescribeMacro{\narrowspace*}
@@ -3033,25 +3763,25 @@ end
% \centering
% \caption[Comparison of some space sizes]
% {Exemplary comparison of standard \cs{space} versus \cs{narrowspace} and
-% \cs{widespace}. All values are relative to the size of the current font's quad
-% size. \cs{narrowspace} and \cs{widespace} use the package's defaults.~\visualpar
-% The upper values in the Width-column for \cs{narrowspace}, and \cs{widespace}
-% refer to the \(\cs{fontdimen7} \not= 0\) case and the lower ones to the
-% \(\cs{fontdimen7} = 0\) code-path.}
+% \cs{widespace}. All values are relative to the size of the current font's
+% quad-size and shown as a percentage of it. \cs{narrowspace} and \cs{widespace}
+% use the package's defaults.~\visualpar The upper values in the
+% \singlequotes{Width}~column for \cs{narrowspace} and \cs{widespace} refer to the
+% \(\cs{fontdimen7} \not= 0\) case and the lower ones to the \(\cs{fontdimen7} = 0\)
+% code-path.}
% \label{tab:space-sizes}
%
% \begin{tabfigures}
-% \def~{\hphantom{0}}%
+% \def~{\hphantom{0}}
% \ExplSyntaxOn
% \def\relativedimen#1{\fp_eval:n {round (1000 * (#1) / \the\fontdimen6\font) / 10}}
% \def\relativefontdimen#1{\relativedimen{\the\fontdimen#1\font}}
% \ExplSyntaxOff
% \def\nrows{1.75}
%
-% \begin{tabular}{@{}llll@{}}
+% \begin{tabular}{@{}l*{3}{r}@{}}
% \toprule
-% Name & Width & Stretch & Shrink \\
-% {} & \% & \% & \% \\
+% Macro & Width & Stretch & Shrink \\
% \midrule
% \multirow{\nrows}{*}{\cs{narrowspace}} &
% \relativedimen{\the\fontdimen2\font - \narrowspacestrength * \the\fontdimen7\font} &
@@ -3071,7 +3801,7 @@ end
%
%
% \subsection{\packagename{Microtype} Front\capitalhyphen End}\label{sec:microtype-frontend}
-% \index{microtype=\packagename{microtype} (package)}
+% \index{microtype=\packagename{microtype} (package)|userman}
%
% The functionalities are just front-ends of selected macros in
% package~\packagename{microtype} -- welcome syntactic sugar.
@@ -3091,7 +3821,8 @@ end
% \end{important}
%
%
-% \subsubsection{Tracking}\label{sec:tracking-control}\index{font>tracking}
+% \subsubsection{Tracking}\label{sec:tracking-control}
+% \index{font>tracking|userman}
%
% \begin{caution}
% The tracking changes may interfere with implicit changes of tracking declared with
@@ -3136,7 +3867,7 @@ end
% \end{codeexample}
%
% If the argument of option~\code{trackingttspacing} is omitted the outer spacing defaults to
-% \makeatletter\mbox{\typog@trackingttspacing}\makeatother.
+% \makeatletter\mbox{\typog@config@trackingttspacing}\makeatother.
%
% \begin{usecases}
% Nudge line breaks or hyphenation points.~\visualpar Avoid clashes of descenders and
@@ -3145,7 +3876,8 @@ end
% \end{usecases}
%
%
-% \subsubsection{Font Expansion}\label{sec:font-expansion-control}\index{font>expansion}
+% \subsubsection{Font Expansion}\label{sec:font-expansion-control}
+% \index{font>expansion|userman}
%
% \DescribeEnv{setfontshrink}
% \DescribeEnv{setfontstretch}
@@ -3153,10 +3885,10 @@ end
% component, i.\,e., shrinkability and stretchability, respectively.
%
% \begin{synopsis}\label{syn:setfontshrink}\label{syn:setfontstretch}
-% \cs{begin}|{setfontshrink}|\marg{level}
+% \cs{begin}|{setfontshrink}|\oarg{level}
% \dots{}
% \cs{end}|{setfontshrink}| \\
-% \cs{begin}|{setfontstretch}|\marg{level}
+% \cs{begin}|{setfontstretch}|\oarg{level}
% \dots{}
% \cs{end}|{setfontstretch}|
% \end{synopsis}
@@ -3165,20 +3897,20 @@ end
% summarize the values for |stretch| and |shrink| in these environments.
%
% \begin{SCtable}
-% \caption[Shrink values of \code{setfontshrink}]%
+% \caption[Shrink values of \code{setfontshrink}]
% {\slightlysloppy[2] Preconfigured values for |shrink| inside of
-% environment~\code{setfontshrink}. Note that all |stretch| values are zero, so the fonts
-% only can shrink.}
+% environment~\code{setfontshrink} as \nativetextfraction{1}{1000}\,em. Note that all
+% |stretch| values are zero, so the fonts only can shrink.}
% \label{tab:setfontshrink-values}
%
% \begin{tabfigures}
+% \def~{\hphantom{0}}
% \begin{tabular}{@{}cccl@{}}
% \toprule
-% \meta{level} & |stretch| & |shrink| & Comment \\
-% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
+% \meta{level} & |stretch| & |shrink| & Note \\
% \midrule
% 0 & n/a & n/a & no operation \\
-% 1 & 0 & \hphantom{0}\makeatletter\typog@shrink@i\makeatother & default \\
+% 1 & 0 & ~\makeatletter\typog@shrink@i\makeatother & default \\
% 2 & 0 & \makeatletter\typog@shrink@ii\makeatother & \\
% 3 & 0 & \makeatletter\typog@shrink@iii\makeatother & \\
% \bottomrule
@@ -3188,20 +3920,20 @@ end
%
% \begin{SCtable}
% \centering
-% \caption[Stretch values of \code{setfontstretch}]%
+% \caption[Stretch values of \code{setfontstretch}]
% {\slightlysloppy[2] Preconfigured values for |stretch| inside of
-% environment~\code{setfontstretch}. Note that all |shrink| values are zero, so the fonts
-% only can stretch.}
+% environment~\code{setfontstretch} as \nativetextfraction{1}{1000}\,em. Note that all
+% |shrink| values are zero, so the fonts only can stretch.}
% \label{tab:setfontstretch-values}
%
% \begin{tabfigures}
+% \def~{\hphantom{0}}
% \begin{tabular}{@{}cccl@{}}
% \toprule
% \meta{level} & |stretch| & |shrink| \\
-% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
% \midrule
% 0 & n/a & n/a & no operation \\
-% 1 & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & 0 & default \\
+% 1 & ~\makeatletter\typog@stretch@i\makeatother & 0 & default \\
% 2 & \makeatletter\typog@stretch@ii\makeatother & 0 & \\
% 3 & \makeatletter\typog@stretch@iii\makeatother & 0 & \\
% \bottomrule
@@ -3224,7 +3956,7 @@ end
% Manipulate both, |stretch| and |shrink|~values at the same time.
%
% \begin{synopsis}\label{syn:setfontexpand}
-% \cs{begin}|{setfontexpand}|\marg{level}
+% \cs{begin}|{setfontexpand}|\oarg{level}
% \dots{}
% \cs{end}|{setfontexpand}|
% \end{synopsis}
@@ -3232,20 +3964,20 @@ end
% \Cref{tab:setfontexpand-values} gives an overview of the values associated with \meta{level}.
%
% \begin{SCtable}
-% \caption[Shrink and stretch values of \code{setfontexpand}]%
+% \caption[Shrink and stretch values of \code{setfontexpand}]
% {\slightlysloppy[2] Preconfigured values for |shrink| and |stretch| inside of
-% environment~\code{setfontexpand}. Note that both |shrink| and |stretch| values are
-% nonzero, so the fonts can shrink or expand.}
+% environment~\code{setfontexpand} as \nativetextfraction{1}{1000}\,em. Note that both
+% |shrink| and |stretch| values are nonzero, so the fonts can shrink or expand.}
% \label{tab:setfontexpand-values}
%
% \begin{tabfigures}
+% \def~{\hphantom{0}}
% \begin{tabular}{@{}cccl@{}}
% \toprule
-% \meta{level} & |stretch| & |shrink| & Comment \\
-% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
+% \meta{level} & |stretch| & |shrink| & Note \\
% \midrule
% 0 & n/a & n/a & no operation \\
-% 1 & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & default \\
+% 1 & ~\makeatletter\typog@stretch@i\makeatother & ~\makeatletter\typog@stretch@i\makeatother & default \\
% 2 & \makeatletter\typog@stretch@ii\makeatother & \makeatletter\typog@stretch@ii\makeatother & \\
% 3 & \makeatletter\typog@stretch@iii\makeatother & \makeatletter\typog@stretch@iii\makeatother & \\
% \bottomrule
@@ -3302,7 +4034,8 @@ end
% \end{usecases}
%
%
-% \subsubsection{Character Protrusion}\label{sec:protrusion}\index{font>protrusion}
+% \subsubsection{Character Protrusion}\label{sec:protrusion}
+% \index{font>protrusion|userman}
%
% \DescribeEnv{nocharprotrusion}
% Disable the \packagename{microtype} feature~\singlequotes{protrusion} inside of the
@@ -3320,8 +4053,8 @@ end
% \end{usecases}
%
%
-% \FloatBarrier
-% \subsection{Sloppy Paragraphs}\label{sec:sloppy-paragraphs}\index{paragraph>sloppy}
+% \subsection{Sloppy Paragraphs}\label{sec:sloppy-paragraphs}
+% \index{paragraph>sloppy|userman}
%
% Experienced \LaTeX{} users know that \cs{sloppy} is more of a problem by itself and not
% really a viable solution of the \doublequotes{overfull~box} syndrome.
@@ -3357,21 +4090,22 @@ end
%
% \begin{suspendshortverb}
% \begin{tabfigures}
+% \def~{\hphantom{0}}
% \begin{tabular}{@{}ccccl@{}}
% \toprule
-% \meta{sloppiness} & \cs{toler-} & \cs{hfuzz} & \cs{emergency-} & Comment \\
+% \meta{sloppiness} & \cs{toler-} & \cs{hfuzz} & \cs{emergency-} & Note \\
% {} & \code{ance} & \cs{vfuzz} & \code{stretch}~\(G\) & \\
% {} & & pt & em & \\
% \midrule
-% 0 & \hphantom{0}200\hphantom{\tolerancemark} & .1\hphantom{0} & 0\hphantom{.000\scaledmark} & \TeX: \verb+\fussy+ \\
-% 1 & \hphantom{0}330\tolerancemark & .15 & \hphantom{0}.375\scaledmark & default \\
-% 2 & \hphantom{0}530\tolerancemark & .2\hphantom{0} & \hphantom{0}.75\scaledmark\hphantom{0} & \\
-% 3 & \hphantom{0}870\tolerancemark & .25 & 1.125\scaledmark & \\
-% 4 & 1410\tolerancemark & .3\hphantom{0} & 1.5\scaledmark\hphantom{00} & \\
+% 0 & ~200\hphantom{\tolerancemark} & .1~ & 0\hphantom{.000\scaledmark} & \TeX: \verb+\fussy+ \\
+% 1 & ~330\tolerancemark & .15 & ~.375\scaledmark & default \\
+% 2 & ~530\tolerancemark & .2~ & ~.75\scaledmark~ & \\
+% 3 & ~870\tolerancemark & .25 & 1.125\scaledmark & \\
+% 4 & 1410\tolerancemark & .3~ & 1.5\scaledmark~~ & \\
% 5 & 2310\tolerancemark & .35 & 1.875\scaledmark & \\
-% 6 & 3760\tolerancemark & .4\hphantom{0} & 2.25\scaledmark\hphantom{0} & \\
+% 6 & 3760\tolerancemark & .4~ & 2.25\scaledmark~ & \\
% 7 & 6130\tolerancemark & .45 & 2.625\scaledmark & \\
-% \(\ge\)\:8 & 9999\hphantom{\tolerancemark} & .5\hphantom{0} & 3\hphantom{.000\scaledmark} & \TeX: \verb+\sloppy+ \\
+% \(\ge\)\:8 & 9999\hphantom{\tolerancemark} & .5~ & 3\hphantom{.000\scaledmark} & \TeX: \verb+\sloppy+ \\
% \bottomrule
% \end{tabular}
% \end{tabfigures}
@@ -3403,8 +4137,8 @@ end
% \end{usecases}
%
%
-% \FloatBarrier
-% \subsection{Vertically Partially-Tied Paragraphs}\label{sec:vtie-paragraph}\index{paragraph>vertically tied}
+% \subsection{Vertically Partially-Tied Paragraphs}\label{sec:vtie-paragraph}
+% \index{paragraph>vertically tied|userman}
%
% \LaTeX{} provides several macros and environments to tie material vertically~-- most
% prominently |samepage| and |minipage|.\footnote{A valuable complement to these is
@@ -3421,7 +4155,7 @@ end
%
% \DescribeMacro{\vtietop}
% \DescribeEnv{vtietoppar}
-% Avoid a club\index{forlorn line>club} line in each partial paragraph.
+% Avoid a club\index{forlorn line>club|userman} line in each partial paragraph.
%
% \begin{synopsis}\label{syn:vtietop}\label{syn:vtietoppar}
% \cs{vtietop}\oarg{number-of-lines} \\[\smallskipamount]
@@ -3436,16 +4170,17 @@ end
%
% \begin{usecases}
% String together the first paragraph right after a sectioning command.~\visualpar Tie the
-% first line of an itemized, enumerated, or a description list\index{list} with the paragraph
-% following~\cs{item}.
+% first line of an itemized, enumerated, or a description list\index{list|userman} with the
+% paragraph following~\cs{item}.
% \end{usecases}
%
% \noindent
% \DescribeMacro{\splicevtietop}
-% Inside of a \code{list} a one-off solution simply concatenates \cs{item}[\dots]\cs{vtietop}
-% to fuse the line with the \code{item\#}, the representation of the \code{enum\#}, or the
-% description term with the first paragraph. For a systematic use prefer \cs{splicevtietop}
-% and apply it as the first thing in the \code{list}~body.
+% Inside of a \code{list} a one-off solution simply concatenates
+% \cs{item}[\dots\itcorr{-5}]\cs{vtietop} to fuse the line with the \code{item\#}, the
+% representation of the \code{enum\#}, or the description term with the first paragraph. For a
+% systematic use prefer \cs{splicevtietop} and apply it as the first thing in the
+% \code{list}~body.
%
% \begin{synopsis}\label{syn:splicevtietop}
% \cs{splicevtietop}\oarg{number-of-lines}
@@ -3492,7 +4227,7 @@ end
% \noindent
% \DescribeMacro{\vtiebot}
% \DescribeEnv{vtiebotpar}
-% Avoid a widow\index{forlorn line>widow} line in each partial paragraph.
+% Avoid a widow\index{forlorn line>widow|userman} line in each partial paragraph.
%
% \begin{synopsis}\label{syn:vtiebot}\label{syn:vtiebotpar}
% \cs{vtiebot}\oarg{number-of-lines} \\[\smallskipamount]
@@ -3507,7 +4242,8 @@ end
%
% \noindent
% \DescribeEnv{vtiebotdisp}
-% Avoid a display widow\index{forlorn line>display widow} line in each partial paragraph.
+% Avoid a display widow\index{forlorn line>display widow|userman} line in each partial
+% paragraph.
%
% \begin{synopsis}\label{syn:vtiebotdisp}\label{syn:vtiebotdisppar}
% \cs{begin}|vtiebotdisp|\oarg{before-disp-number-of-lines} \\
@@ -3579,15 +4315,16 @@ end
%
% \begin{typoginspectpar}{partial-paragraphs}
% \setlength{\smoothraggedrightragwidth}{8pt}
-% \paragraph{Partial Paragraphs And Counting Lines.} The top-of-paragraph ties, \cs{vtietop}
-% and \code{vtietoppar} count \meta{number\hyp{}of\hyp{}lines} from the beginning of every
-% partial paragraph. Each displayed math in the paragraph resets the count. The
-% bottom-paragraph ties, \cs{vtiebot}, \code{vtiebotpar}, \cs{vtiebotdisp}, and
-% \code{vtiebotdisppar} count backward from the end of each partial paragraph. Again, each
-% displayed math in the paragraph resets the count. According to \TeX's rules, a displayed
-% math formula always is counted as \emph{three} lines no matter its contents.
-% \Cref{tab:partial-paragraph-line-counts} summarizes these rules with the help of an
-% example.
+% \paragraph{Partial Paragraphs And Counting Lines.}
+%
+% The top-of-paragraph ties, \cs{vtietop} and \code{vtietoppar} count
+% \meta{number\hyp{}of\hyp{}lines} from the beginning of every partial paragraph. Each
+% displayed math in the paragraph resets the count. The bottom-paragraph ties, \cs{vtiebot},
+% \code{vtiebotpar}, \cs{vtiebotdisp}, and \code{vtiebotdisppar} count backward from the end
+% of each partial paragraph. Again, each displayed math in the paragraph resets the count.
+% According to \TeX's rules, a displayed math formula always is counted as \emph{three} lines
+% no matter its contents. \Cref{tab:partial-paragraph-line-counts} summarizes these rules
+% with the help of an example.
% \end{typoginspectpar}
%
% \begin{table}
@@ -3655,11 +4392,11 @@ end
% \end{usecases}
%
%
-% \FloatBarrier
-% \subsection{Breakable Displayed Equations}\label{sec:breakable-display}\index{page break}
+% \subsection{Breakable Displayed Equations}\label{sec:breakable-display}
+% \index{page break|userman}
%
% \DescribeEnv{breakabledisplay}
-% Package~\packagename{amsmath}\index{amsmath=\packagename{amsmath} (package)} offers
+% Package~\packagename{amsmath}\index{amsmath=\packagename{amsmath} (package)|userman} offers
% \cs{allowdisplaybreaks} to render displayed equations breakable at each of their lines.
% Environment~\cs{breakabledisplay} is a wrapper around it which limits the macro's influence
% to the environment. Furthermore, the default \meta{level} of \code{breakabledisplay} is~3
@@ -3688,16 +4425,17 @@ end
% \newcommand*{\clubmark}{\tablenotemark{\dag}}
%
% \begin{tabfigures}
+% \def~{\hphantom{0}}
% \begin{tabular}{@{}ccl@{}}
% \toprule
-% \meta{level} & \cs{interdisplay-} & Comment \\
+% \meta{level} & \cs{interdisplay-} & Note \\
% {} & \code{linepenalty} & \\
% \midrule
% 0 & 10000 & no operation \\
-% 1 & \hphantom{0}9999 & \\
-% 2 & \hphantom{0}6999 & \\
-% 3 & \hphantom{0}2999 & default \\
-% 4 & \hphantom{0000}0\rlap{\clubmark} & \\
+% 1 & ~9999 & \\
+% 2 & ~6999 & \\
+% 3 & ~2999 & default \\
+% 4 & ~~~~0\rlap{\clubmark} & \\
% \bottomrule
% \end{tabular}
% \end{tabfigures}
@@ -3738,7 +4476,6 @@ end
% \end{usecases}
%
%
-% \FloatBarrier
% \clearpage
% \subsection{\packagename{Setspace} Front-End}\label{sec:setspace-frontend}
%
@@ -3747,11 +4484,11 @@ end
% interface of \cs{setstretch} though is unintuitive as it asks for an obscure
% factor.\fontsizeinfo{setspacefontsizeinfo}\marginnote{In the copy of this document gets
% typeset with~\setspacefontsizeinfo*.} The \LaTeX{} user however prefers to keep her eyes on
-% the ball and set the line skip\index{baseline skip} directly (e.\,g.~12.5pt) or the lines'
-% leading\index{leading} to a length or percentage of the font's size.\footnote{To find out
-% about the current font's size and the \cs{baselineskip} in printable form check out
-% \cref{sec:font-information} on \cpageref{sec:font-information}.} This is where the following
-% macros go to bat.
+% the ball and set the line skip\index{baseline skip|userman} directly (e.\,g.~12.5\,pt) or the
+% lines' leading\index{leading|userman} to a length or percentage of the font's
+% size.\footnote{To find out about the current font's size and the \cs{baselineskip} in
+% printable form check out \cref{sec:font-information} on \cpageref{sec:font-information}.}
+% This is where the following macros go to bat.
%
% \begin{important}
% All macros that are introduced in this section rely on macro~\cs{setstretch}. So
@@ -3785,24 +4522,25 @@ end
% will be used in the computation.
%
% \begin{example}
-% Let us assume we want to lighten the gray value of the copy a tad with a \cs{baselineskip}
-% increased (from e.g.~12pt) to~12.5pt. To this end we say:
+% \begin{itemize}[notopsep]
+% \item Let us assume we want to lighten the gray value of the copy a tad with the
+% \cs{baselineskip} increased from 12\,pt to~12.5\,pt. To this end we say:
%
% \begin{codeexample}
-% \cs{setbaselineskip}\{12.5pt\}\specialsectionendhere
+% \cs{setbaselineskip}\{12.5\,pt\}
% \end{codeexample}
-% \end{example}
%
-% \begin{tip}
-% To set the \cs{baselineskip} relative to the current value use
+% \item In a generic part of the document, where the actual \cs{baselineskip} is not known,
+% we can refer to its current value and rescale it:
%
% \begin{codeexample}
-% \cs{setbaselineskip}\{\meta{factor}\cs{baselineskip}\}
+% \cs{setbaselineskip}\{\cs{baselineskip} * 12.5 / 12\}
% \end{codeexample}
%
-% \noindent
-% where \meta{factor} is a floating-point number.
-% \end{tip}
+% Care should be taken if code like the above is implicitly or explicitly
+% repeated, because it results in a geometric series.\specialsectionendhere
+% \end{itemize}
+% \end{example}
%
% \DescribeMacro{\resetbaselineskip}
% \sinceversion{Since v0.3}
@@ -3816,6 +4554,9 @@ end
% notion of what is a single-line \cs{baselineskip}.
%
%
+% \hangindent=2\parindent
+% \hangafter=-2
+% \noindent
% \DescribeMacro{\setbaselineskippercentage}
% \sinceversion{Since v0.3}
% Set the \cs{baselineskip} with a relative value calculated as a percentage of the current
@@ -3828,14 +4569,14 @@ end
% Set \cs{baselineskip} to \(\cs{typogfontsize} \times \meta{baselineskip-percentage} / 100\).
%
% \begin{example}
-% We modify the previous example and assume a font design size of 10pt, but now write
+% We modify the previous example and assume a font design size of 10\,pt, but now write
%
% \begin{codeexample}
% \cs{setbaselineskippercentage}\{125\}
% \end{codeexample}
%
% \noindent
-% which sets \cs{baselineskip} to \(10\text{pt} \times 125 / 100 = 12.5\text{pt}\).
+% which sets \cs{baselineskip} to \(10\text{\,pt} \times 125 / 100 = 12.5\text{\,pt}\).
% \end{example}
%
% \DescribeMacro{\setleading}
@@ -3850,7 +4591,7 @@ end
% \meta{leading} can be negative, e.\,g.~to set solid.
%
% \begin{example}
-% Another solution of the previous example, given a font design size of 10pt is to write
+% Another solution of the previous example, given a font design size of 10\,pt is to write
%
% \begin{codeexample}
% \cs{setleading}\{2.5pt\}
@@ -3872,14 +4613,14 @@ end
% Set \cs{baselineskip} to \(\cs{typogfontsize} \times (1 + \meta{leading-percentage} / 100)\).
%
% \begin{example}
-% We modify the previous example and again assume a font design size of 10pt, but now write
+% We modify the previous example and again assume a font design size of 10\,pt, but now write
%
% \begin{codeexample}
% \cs{setleadingpercentage}\{25\}
% \end{codeexample}
%
% \noindent
-% which sets \cs{baselineskip} to \(10\text{pt} \times (1 + 25 / 100) = 12.5\text{pt}\).
+% which sets \cs{baselineskip} to \(10\text{\,pt} \times (1 + 25 / 100) = 12.5\text{\,pt}\).
% \end{example}
%
% \smallskip
@@ -3949,9 +4690,9 @@ end
% \end{tip}
%
%
-% \FloatBarrier
% \clearpage
-% \subsection{Smooth Ragged}\label{sec:smooth-ragged}\index{ragged right}
+% \subsection{Smooth Ragged}\label{sec:smooth-ragged}
+% \index{ragged right|userman}
%
% \begin{whittyquote}
% The attention someone gives \\
@@ -3964,25 +4705,30 @@ end
% \noindent
% Package \packagename{typog} implements a novel approach to typeset ragged paragraphs.
% Instead of setting the glue inside of a paragraph to zero and letting the line-widths vary
-% accordingly~\cite{wermuth:2020} we prescribe the line-widths with the \cs{parshape}~primitive
-% and leave alone the stretchability or shrinkability of the glue.
+% accordingly~\cite{wermuth:2020} we prescribe the line-widths with \TeX's
+% \cs{parshape}~primitive and leave alone the stretchability or shrinkability of the glue.
%
-% \begin{slightlysloppypar}
-% \hangindent=5.5em\hangafter=-5
+% \begin{caution}
+% None of the following environments work inside of lists.
+% \end{caution}
+%
+% \begin{slightlysloppypar}[2]
+% \hangindent=3.5\parindent
+% \hangafter=-6
+% \noindent
% \DescribeEnv{smoothraggedrightshapetriplet}
% \DescribeEnv{smoothraggedrightshapequintuplet}
% \DescribeEnv{smoothraggedrightshapeseptuplet}
-% We introduce three environments that allow for setting three, five, or seven different
-% line-lengths: \code{smoothraggedrightshapetriplet},
-% \code{smoothraggedrightshapequintuplet}, and \code{smoothraggedrightshapeseptuplet}; they
-% work for paragraphs up to
+% We introduce three environments that set three, five, or seven different line-lengths
+% (which \TeX{} of course will repeat for paragraphs longer than three, five, or seven
+% lines): \code{smoothraggedrightshapetriplet}, \code{smoothraggedrightshapequintuplet}, and
+% \code{smoothraggedrightshapeseptuplet}; they work for paragraph lengths up to
% \makeatletter
-% \typog@triplet@max@lines, \typog@quintuplet@max@lines, or \typog@septuplet@max@lines~lines,
+% \typog@triplet@max@lines, \typog@quintuplet@max@lines, and \typog@septuplet@max@lines~lines,
% \makeatother
% respectively.
% \end{slightlysloppypar}
%
-%
% \begin{maxipage}
% \begin{synopsis}\label{syn:smoothraggedrightshapetriplet}\label{syn:smoothraggedrightshapequintuplet}\label{syn:smoothraggedrightshapeseptuplet}
% \cs{begin}|{smoothraggedrightshapetriplet}|\oarg{option\dots}\marg{width1}\marg{width2}\marg{width3} \\
@@ -4224,23 +4970,47 @@ end
% The default generator is |triplet|.
%
% \item[\cs{smoothraggedrightleftskip}=\meta{dim}]
-% Value for |leftskip| to pass to the generator. Default:~0pt.
+% Value for |leftskip| to pass to the generator. Default:~0\,pt.
%
% \item[\cs{smoothraggedrightparindent}=\meta{dim}]
-% Value for |parindent| to pass to the generator. Default:~0pt.
+% Value for |parindent| to pass to the generator. Default:~0\,pt.
%
% \item[\cs{smoothraggedrightragwidth}=\meta{dim}]
-% Value for the width of the ragged right margin. Default:~2em.
+% Value for the width of the ragged right margin. Default:~2\,em.
% \end{description}
%
+% \begin{samepage}
+% \def\smoothraggedrightgenerator{quintuplet}
+% \setlength{\smoothraggedrightragwidth}{7pt}
+% \begin{nocharprotrusion}\fussy
+% \begin{smoothraggedright}
+% Throughout this manual we have demonstrated how \code{smoothraggedright} environments
+% work for very narrow columns namely inside of the document's margins: all maginal notes
+% were typeset inside of \cs{smoothraggedright} environments (quintuplet generator,
+% 1.5\,em rag width, at footnote~size in addition using
+% environments~\code{slightlysloppy} and \code{loosespacing}). Here, we utilize it with
+% the \smoothraggedrightgenerator~generator and a rag-width of only
+% \the\smoothraggedrightragwidth{} in a paragraph that is \the\linewidth~wide and
+% averages around twelve words per line. There is much more glue to adapt to the
+% line-ends and thus the desired rag is archieved far easier. The sloppyness is minimal,
+% this is, \cs{fussy} is in effect and character protrusion into the margins is switched
+% off. A limitation of the current implementation is that it is ineffective inside of lists.
+% Therefore, this paragraph has not been wrapped inside of an \singlequotes{example}, because
+% all examples are coded as lists.
+% \end{smoothraggedright}
+% \end{nocharprotrusion}
+% \end{samepage}
+%
% \begin{usecases}
% Replacement for \cs{RaggedRight}~\cite{package:ragged2e}.~\visualpar Design alternative for
% fully justified paragraphs if used with a small rag-width.
% \end{usecases}
%
-%
-% \addtocontents{toc}{\par\bigskip\hfill\textit{Table of Contents continued on next page.}}
-% \addtocontents{toc}{\clearpage}
+% \begin{futuredirection}
+% Translate the code to \packagename{l3galley} which is part of the
+% \packagename{l3experimental}~package~\cite{package:l3experimental}. Galley~code is
+% supposed to work inside of lists, too.
+% \end{futuredirection}
%
%
% \sectionfinish
@@ -4250,7 +5020,7 @@ end
% Many other packages help with getting better output from \LaTeX. Here is a list --~in
% alphabetical order~-- of the ones the author considers particularly valuable.
%
-% \sbox{\listlabelbox}{\packagename{microtype}}
+% \sbox{\listlabelbox}{\packagename{enumitem}}
% \begin{description}[font=\normalfont, labelsep*=1em, labelwidth=\wd\listlabelbox, leftmargin=!]
% \item[\packagename{enumitem}]
% Flexible and consistent definition of all basic \LaTeX-list types plus inline
@@ -4268,6 +5038,9 @@ end
% Fine control of spacing, tracking, sidebearings, character protrusion into the margins,
% font expansion, and much more~\cite{package:microtype}.
%
+% See \Cref{sec:microtype-frontend} for a front-end to \packagename{microtype} offered by
+% this package.
+%
% See also \propername{Khirevich's} discussion~\cite{khirevich:2013}.
%
% \item[\packagename{ragged2e}]
@@ -4275,8 +5048,11 @@ end
% |center|~\cite{package:ragged2e}.
%
% \item[\packagename{setspace}]
-% Consistently set the document's line-spacing, i.\,e.,
+% Consistently set the line-spacing of a document, i.\,e., control
% \cs{baselineskip}~\cite{package:setspace}.
+%
+% See \Cref{sec:setspace-frontend} for a front-end to \packagename{setspace} offered by this
+% package.
% \end{description}
%
%
@@ -4291,26 +5067,34 @@ end
%
% The companion program \programname{typog-grep} for analyzing the output of
% \hyperref[syn:typoginspect]{\code{typoginspect}} and
-% \hyperref[syn:typoginspect]{\code{typoginspectpar}} has its own manual page. We reproduce
-% it here for completeness of the documentation.
+% \hyperref[syn:typoginspect]{\code{typoginspectpar}} has its own manual page. We
+% reproduce it here for completeness of the documentation.
%
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
% \begin{suspendshortverb}
% \setlength{\parindent}{0pt}
% \setlength{\parskip}{6.0pt plus 2.0pt minus .5pt}
-% \input typog-grep
+% \input{typog-grep.tex}
% \end{suspendshortverb}
+% \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
%
% \sectionfinish
% \clearpage
-% \phantomsection
-% \resetfancyhead
-% \addcontentsline{toc}{section}{Change History}
-% \PrintChanges
+% \begingroup
+% \setcounter{GlossaryColumns}{1}
+% \phantomsection
+% \label{sec:changes}
+% \resetfancyhead
+% \addtocontents{toc}{\bigskip}
+% \addcontentsline{toc}{section}{\numberline{}Change History}
+% \PrintChanges
+% \endgroup
%
% \sectionfinish
% \clearpage
% \phantomsection
-% \addcontentsline{toc}{section}{References}
+% \addtocontents{toc}{\medskip}
+% \addcontentsline{toc}{section}{\numberline{}References}
% \begin{RaggedRight}
% \begin{thebibliography}{88}
% \bibitem{abrahams:2020}
@@ -4354,6 +5138,12 @@ end
% 1998,
% \biburl{https://mirrors.ctan.org/systems/doc/etex/etex_man.pdf}.
%
+% \bibitem{package:mathastext}
+% \bibauthor{Burnol, Jean-François}.
+% \bibtitle{Package~\packagename{mathastext}}.
+% 2023,
+% \biburl{https://ctan.org/pkg/mathastext}.
+%
% \bibitem{carlisle:1996}
% \bibauthor{Carlisle, David}.
% \bibtitle{Russian Paragraph Shapes}.
@@ -4399,6 +5189,12 @@ end
% Addison Wesley, Reading\kernedslash MA,
% 1986.
%
+% \bibitem{package:l3experimental}
+% \bibauthor{The \LaTeX\ Project}.
+% \bibtitle{Package~\packagename{l3experimental}}.
+% 2024,
+% \biburl{https://ctan.org/pkg/l3experimental}.
+%
% \bibitem{package:layout}
% \bibauthor{McPherson, Kent}.
% \bibtitle{Package~\packagename{layout}}.
@@ -4450,6 +5246,13 @@ end
% TUGboat, 11(1), 69\figuredash85, 1990,
% \biburl{http://www.tug.org/TUGboat/Articles/tb11-1/tb27salomon.pdf}.
%
+% \bibitem{strizver:2014}
+% \bibauthor{Strizver, Ilene}.
+% \bibtitle{Type rules!: the designer's guide to professional typography},
+% 4\textsuperior{th}~ed.
+% John Wiley~\& Sons, Hoboken\kernedslash NJ,
+% 2014.
+%
% \bibitem{package:setspace}
% \bibauthor{Tobin, Geoffrey,} and \bibauthor{Robin Fairbairns}.
% \bibtitle{Package~\packagename{setspace}}.
@@ -4526,23 +5329,35 @@ end
% \end{RaggedRight}
%
% \sectionfinish
+%
+%
% \clearpage
-% \begin{RaggedRight}
+% \begingroup
% \setcounter{IndexColumns}{2}
% \setlength{\columnsep}{30pt}
% \label{sec:index}
% \phantomsection
-% \addcontentsline{toc}{section}{Index}
+% \addtocontents{toc}{\medskip}
+% \addcontentsline{toc}{section}{\numberline{}Index}
+% \raggedcolumns
+% \def\codeidx##1{\linenumberdecoration\textbf{##1}}
+% \def\main##1{\linenumberdecoration\underbar{\textbf{##1}}}
+% \def\usage##1{\textit{\textbf{##1}}}
% \PrintIndex
-% \end{RaggedRight}
+% \endgroup
% }
%
-%
% \sectionfinish
+%
+%
% \clearpage
% \appendix
% \section{Package Code}\label{sec:package-code}
-% \addtocontents{toc}{\begingroup\small}
+% \addtocontents{toc}{\protect\begin{list}{}{\leftmargin=\subsectiontocindent\parsep=0pt}}
+% \addtocontents{toc}{\protect\item}
+% \addtocontents{toc}{\RaggedRight}
+% \addtocontents{toc}{\small}
+% \addtocontents{toc}{\tocsquashedsubsections}
% \addtocontents{toc}{\protect\begin{multicols}{2}}
% \addtocontents{toc}{\protect\raggedcolumns}
%
@@ -4555,7 +5370,7 @@ end
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{typog}
- [2024/05/07 v0.3 TypoGraphic extensions]
+ [2024/07/08 v0.4 TypoGraphic extensions]
\RequirePackage{etoolbox}
\RequirePackage{everyhook}
@@ -4592,17 +5407,34 @@ end
% \end{macro}
%
% \begin{macro}{\typog@typeout}
+% Our information printer.
+% Just adds a prefix so that we can tease apart the \filesystem{log} later.
+%
+% \begin{macrocode}
+\newcommand*{\typog@typeout}[1]{\typeout{typog: #1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@typeout}
% Our debug information printer.
%
% \begin{macrocode}
-\newcommand*{\typog@typeout}[1]
- {\iftypog@debug
- \typeout{typog: #1}%
- \fi}
+\newcommand*{\typog@debug@typeout}[1]{\iftypog@debug\typog@typeout{#1}\fi}
% \end{macrocode}
% \end{macro}
%
+% \begin{tcounter}{typog@@iteration}
+% We want our own counter (currently for keeping track of iterations) that does not get
+% trampled underfoot too easily.
+%
+% \begin{macrocode}
+\newcounter{typog@@iteration}
+
+% \end{macrocode}
+% \end{tcounter}
+%
% \begin{macro}{\typog@trim@spaces}
% Pull \cs{tl\_trim\_spaces} into the \singlequotes{classic} namespace.
%
@@ -4693,69 +5525,149 @@ end
%
% Our own state\dots
%
-% \begin{macro}{\typog@mathitalicscorrection}
+% \begin{macro}{\typog@config@mathitalicscorrection}
% \begin{macrocode}
-\newmuskip\typog@mathitalicscorrection
+\newmuskip\typog@config@mathitalicscorrection
+
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@textitalicscorrection}
+% Actual \cs{labelitem}\meta{N} corrections.
+%
+% \begin{ldimen}{\typog@adjust@labelitemi}
+% \begin{macrocode}
+\newdimen{\typog@adjust@labelitemi}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@labelitemii}
+% \begin{macrocode}
+\newdimen{\typog@adjust@labelitemii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@labelitemiii}
+% \begin{macrocode}
+\newdimen{\typog@adjust@labelitemiii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@labelitemiv}
+% \begin{macrocode}
+\newdimen{\typog@adjust@labelitemiv}
+% \end{macrocode}
+% \end{ldimen}
+%
+% Configuration constants for \cs{labelitem}\meta{N} corrections.
+%
+% \begin{ldimen}{\typog@adjust@lowercase@labelitemi}
+% \begin{macrocode}
+\newdimen{\typog@adjust@lowercase@labelitemi}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@lowercase@labelitemii}
+% \begin{macrocode}
+\newdimen{\typog@adjust@lowercase@labelitemii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@lowercase@labelitemiii}
+% \begin{macrocode}
+\newdimen{\typog@adjust@lowercase@labelitemiii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@lowercase@labelitemiv}
+% \begin{macrocode}
+\newdimen{\typog@adjust@lowercase@labelitemiv}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@uppercase@labelitemi}
+% \begin{macrocode}
+\newdimen{\typog@adjust@uppercase@labelitemi}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@uppercase@labelitemii}
+% \begin{macrocode}
+\newdimen{\typog@adjust@uppercase@labelitemii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@uppercase@labelitemiii}
% \begin{macrocode}
-\newlength{\typog@textitalicscorrection}
+\newdimen{\typog@adjust@uppercase@labelitemiii}
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{ldimen}{\typog@adjust@uppercase@labelitemiv}
+% \begin{macrocode}
+\newdimen{\typog@adjust@uppercase@labelitemiv}
+
+% \end{macrocode}
+% \end{ldimen}
+%
+% Other lengths\dots
+%
+% \begin{macro}{\typog@config@textitalicscorrection}
+% \begin{macrocode}
+\newlength{\typog@config@textitalicscorrection}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@ligaturekern}
+% \begin{macro}{\typog@config@ligaturekern}
% \begin{macrocode}
-\newlength{\typog@ligaturekern}
+\newlength{\typog@config@ligaturekern}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raisecapitaldash}
+% \begin{macro}{\typog@config@raisecapitaldash}
% \begin{macrocode}
-\newlength{\typog@raisecapitaldash}
+\newlength{\typog@config@raisecapitaldash}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raisecapitalguillemets}
+% \begin{macro}{\typog@config@raisecapitalguillemets}
% \begin{macrocode}
-\newlength{\typog@raisecapitalguillemets}
+\newlength{\typog@config@raisecapitalguillemets}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raisecapitalhyphen}
+% \begin{macro}{\typog@config@raisecapitalhyphen}
% \begin{macrocode}
-\newlength{\typog@raisecapitalhyphen}
+\newlength{\typog@config@raisecapitalhyphen}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raisecapitaltimes}
+% \begin{macro}{\typog@config@raisecapitaltimes}
% \begin{macrocode}
-\newlength{\typog@raisecapitaltimes}
+\newlength{\typog@config@raisecapitaltimes}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raiseguillemets}
+% \begin{macro}{\typog@config@raiseguillemets}
% \begin{macrocode}
-\newlength{\typog@raiseguillemets}
+\newlength{\typog@config@raiseguillemets}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@raisefiguredash}
+% \begin{macro}{\typog@config@raisefiguredash}
% \begin{macrocode}
-\newlength{\typog@raisefiguredash}
+\newlength{\typog@config@raisefiguredash}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@slashkern}
+% \begin{macro}{\typog@config@slashkern}
% \begin{macrocode}
-\newlength{\typog@slashkern}
+\newlength{\typog@config@slashkern}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@breakpenalty}
+% \begin{macro}{\typog@config@breakpenalty}
% \begin{macrocode}
-\newcommand*{\typog@breakpenalty}{\exhyphenpenalty}
+\newcommand*{\typog@config@breakpenalty}{\exhyphenpenalty}
% \end{macrocode}
% \end{macro}
%
@@ -4771,9 +5683,9 @@ end
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\typog@trackingttspacing}
+% \begin{macro}{\typog@config@trackingttspacing}
% \begin{macrocode}
-\newcommand*{\typog@trackingttspacing}{300, 90, 60}
+\newcommand*{\typog@config@trackingttspacing}{300, 90, 60}
% \end{macrocode}
% \end{macro}
%
@@ -4871,77 +5783,99 @@ end
\newcommand*{\typog@set@shrink@limits}
{\edef\typog@@star{*}%
- \edef\typog@@limit{\typog@triple@get@i{\typog@shrinklimits}}%
+ \edef\typog@@limit{\typog@triple@get@i{\typog@config@shrinklimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@i{\number\typog@@limit}\fi
- \edef\typog@@limit{\typog@triple@get@ii{\typog@shrinklimits}}%
+ \edef\typog@@limit{\typog@triple@get@ii{\typog@config@shrinklimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@ii{\number\typog@@limit}\fi
- \edef\typog@@limit{\typog@triple@get@iii{\typog@shrinklimits}}%
+ \edef\typog@@limit{\typog@triple@get@iii{\typog@config@shrinklimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@iii{\number\typog@@limit}\fi}
\newcommand*{\typog@set@stretch@limits}
{\edef\typog@@star{*}%
- \edef\typog@@limit{\typog@triple@get@i{\typog@stretchlimits}}%
+ \edef\typog@@limit{\typog@triple@get@i{\typog@config@stretchlimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@i{\number\typog@@limit}\fi
- \edef\typog@@limit{\typog@triple@get@ii{\typog@stretchlimits}}%
+ \edef\typog@@limit{\typog@triple@get@ii{\typog@config@stretchlimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@ii{\number\typog@@limit}\fi
- \edef\typog@@limit{\typog@triple@get@iii{\typog@stretchlimits}}%
+ \edef\typog@@limit{\typog@triple@get@iii{\typog@config@stretchlimits}}%
\unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@iii{\number\typog@@limit}\fi}
\DeclareOptionX<typog>{breakpenalty}%
- {\renewcommand*{\typog@breakpenalty}{#1}}
+ {\renewcommand*{\typog@config@breakpenalty}{#1}}
\DeclareOptionX<typog>{debug}{\typog@debugtrue}
\DeclareOptionX<typog>{mathitalicscorrection}[.4mu]%
- {\typog@mathitalicscorrection=#1\relax}%
+ {\typog@config@mathitalicscorrection=#1\relax}%
\DeclareOptionX<typog>{nodebug}{\typog@debugfalse}
\DeclareOptionX<typog>{textitalicscorrection}[.02em]%
- {\setlength{\typog@textitalicscorrection}{#1}}
+ {\setlength{\typog@config@textitalicscorrection}{#1}}
\DeclareOptionX<typog>{ligaturekern}[.033333em]%
- {\setlength{\typog@ligaturekern}{#1}}
+ {\setlength{\typog@config@ligaturekern}{#1}}
+\DeclareOptionX<typog>{lowercaselabelitemadjustments}%
+ {\typog@debug@typeout{lowercaselabelitemadjustments={#1}}
+ \def\typog@@do##1{\addtocounter{typog@@iteration}{1}
+ \global\setlength{\csname typog@adjust@lowercase@labelitem\romannumeral\thetypog@@iteration\endcsname}{##1}}
+ \setcounter{typog@@iteration}{0}
+ \forcsvlist{\typog@@do}{#1}}
+\newcommand*{\typog@config@lowercaselabelitemadjustments}
+ {\the\typog@adjust@lowercase@labelitemi,\space
+ \the\typog@adjust@lowercase@labelitemii,\space
+ \the\typog@adjust@lowercase@labelitemiii,\space
+ \the\typog@adjust@lowercase@labelitemiv}
\DeclareOptionX<typog>{raisecapitaldash}[\z@]%
- {\setlength{\typog@raisecapitaldash}{#1}}
+ {\setlength{\typog@config@raisecapitaldash}{#1}}
\DeclareOptionX<typog>{raisecapitalguillemets}[\z@]%
- {\setlength{\typog@raisecapitalguillemets}{#1}}
+ {\setlength{\typog@config@raisecapitalguillemets}{#1}}
\DeclareOptionX<typog>{raisecapitalhyphen}[\z@]%
- {\setlength{\typog@raisecapitalhyphen}{#1}}
+ {\setlength{\typog@config@raisecapitalhyphen}{#1}}
\DeclareOptionX<typog>{raisecapitaltimes}[\z@]%
- {\setlength{\typog@raisecapitaltimes}{#1}}
+ {\setlength{\typog@config@raisecapitaltimes}{#1}}
\DeclareOptionX<typog>{raiseguillemets}[\z@]%
- {\setlength{\typog@raiseguillemets}{#1}}
+ {\setlength{\typog@config@raiseguillemets}{#1}}
\DeclareOptionX<typog>{raisefiguredash}[\z@]%
- {\setlength{\typog@raisefiguredash}{#1}}
+ {\setlength{\typog@config@raisefiguredash}{#1}}
\DeclareOptionX<typog>{raise*}[\z@]%
- {\setlength{\typog@raisecapitaldash}{#1}%
- \setlength{\typog@raisecapitalhyphen}{#1}%
- \setlength{\typog@raisecapitaltimes}{#1}%
- \setlength{\typog@raisefiguredash}{#1}}
+ {\setlength{\typog@config@raisecapitaldash}{#1}%
+ \setlength{\typog@config@raisecapitalhyphen}{#1}%
+ \setlength{\typog@config@raisecapitaltimes}{#1}%
+ \setlength{\typog@config@raisefiguredash}{#1}}
\DeclareOptionX<typog>{shrinklimits}%
[\typog@default@shrink@i, \typog@default@shrink@ii, \typog@default@shrink@iii]%
{\typog@require@preloaded@microtype
\ifx\@onlypreamble\@notprerr
\PackageWarning{typog}{option `shrinklimits' can only be used in the preamble}%
\else
- \edef\typog@shrinklimits{#1}%
+ \edef\typog@config@shrinklimits{#1}%
\typog@set@shrink@limits
\fi}
\DeclareOptionX<typog>{slashkern}[.05em]%
- {\setlength{\typog@slashkern}{#1}}
+ {\setlength{\typog@config@slashkern}{#1}}
\DeclareOptionX<typog>{stretchlimits}%
[\typog@default@stretch@i, \typog@default@stretch@ii, \typog@default@stretch@iii]%
{\typog@require@preloaded@microtype
\ifx\@onlypreamble\@notprerr
\PackageWarning{typog}{option `stretchlimits' can only be used in the preamble}%
\else
- \edef\typog@stretchlimits{#1}%
+ \edef\typog@config@stretchlimits{#1}%
\typog@set@stretch@limits
\fi}
-\DeclareOptionX<typog>{trackingttspacing}[\typog@trackingttspacing]%
+\DeclareOptionX<typog>{trackingttspacing}[\typog@config@trackingttspacing]%
{\typog@require@preloaded@microtype
\ifx\@onlypreamble\@notprerr
\PackageWarning{typog}{option `trackingttspacing' can only be used in the preamble}%
\else
- \typog@typeout{trackingttspacing=#1}%
+ \typog@debug@typeout{trackingttspacing=#1}%
\SetTracking[outer spacing={#1}]{encoding=*, family=tt*}{0}%
\fi}
+\DeclareOptionX<typog>{uppercaselabelitemadjustments}%
+ {\typog@debug@typeout{uppercaselabelitemadjustments={#1}}
+ \def\typog@@do##1{\addtocounter{typog@@iteration}{1}
+ \setlength{\csname typog@adjust@uppercase@labelitem\romannumeral\thetypog@@iteration\endcsname}{##1}}
+ \setcounter{typog@@iteration}{0}
+ \forcsvlist{\typog@@do}{#1}}
+\newcommand*{\typog@config@uppercaselabelitemadjustments}
+ {\the\typog@adjust@uppercase@labelitemi,\space
+ \the\typog@adjust@uppercase@labelitemii,\space
+ \the\typog@adjust@uppercase@labelitemiii,\space
+ \the\typog@adjust@uppercase@labelitemiv}
\newcommand*{\typog@initialize@options}
{\ExecuteOptionsX<typog>{
@@ -4963,7 +5897,7 @@ end
% \fi
%
%
-% \subsection*{Setup}
+% \subsection{Setup and Reconfiguration}
%
% \begin{environment}{typogsetup}
% An empty argument list resets all initialized values to their defaults.
@@ -4982,8 +5916,42 @@ end
% \end{environment}
%
% \begin{macro}{\typogget}
+% Access the package's configuration (name-)space.
+%
% \begin{macrocode}
-\NewDocumentCommand{\typogget}{m}{\csname typog@#1\endcsname}
+\NewDocumentCommand{\typogget}{m}{\csname typog@config@#1\endcsname}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typoggetnth}
+% \changes{v0.4}{2024-05-15}{New macro.}
+% Access the \(n\)\textsuperscript{th} element of a comma-separated, list-like configuration
+% item's value.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_generate_variant:Nn \seq_set_split:Nnn {Nne}
+\cs_new:Npn \typog_get_nth_csname:cnn #1#2#3
+ {
+ \seq_set_split:Nne \l_tmpa_seq {,} {\cs:w typog@config@#2 \cs_end:}
+ \cs_gset:cpn {#1} {\seq_item:Nn \l_tmpa_seq {#3}}
+ }
+\cs_new:Npn \typog_get_nth_dimen:nnn #1#2#3
+ {
+ \seq_set_split:Nne \l_tmpa_seq {,} {\cs:w typog@config@#2 \cs_end:}
+ \dim_set:Nn {#1} {\seq_item:Nn \l_tmpa_seq {#3}}
+ }
+\NewDocumentCommand{\typoggetnth}{m m m}{
+ \token_if_dim_register:NTF {#1}
+ {
+ \typog_get_nth_dimen:nnn {#1} {#2} {#3}
+ }
+ {
+ \typog_get_nth_csname:cnn {#1} {#2} {#3}
+ }
+}
+\ExplSyntaxOff
% \end{macrocode}
% \end{macro}
@@ -5065,6 +6033,7 @@ end
%
% \begin{macrocode}
\newcounter{typog@inspect@count}
+
% \end{macrocode}
% \end{macro}
%
@@ -5085,11 +6054,16 @@ end
\edef\typog@@arg{#2}%
\ifx\typog@@arg\empty
\stepcounter{typog@inspect@count}%
- \edef\typog@@id{\typog@default@inspect@id@prefix\arabic{typog@inspect@count}}%
+ \edef\typog@@id{\typog@default@inspect@id@prefix
+ \arabic{typog@inspect@count}}%
\else
\edef\typog@@id{\typog@trim@spaces{\typog@@arg}}%
\fi
- \typeout{<typog-inspect id="\typog@@id" job="\jobname" line="\the\inputlineno" page="\the\value{page}">}%
+ \typeout{<typog-inspect\space
+ id="\typog@@id"\space
+ job="\jobname"\space
+ line="\the\inputlineno"\space
+ page="\the\value{page}">}%
% \end{macrocode}
%
% Set both badness thresholds to absurdly low values as to activate \TeX's reports.
@@ -5210,7 +6184,7 @@ end
% \begin{macro}{\nolig}
% \begin{macrocode}
\NewDocumentCommand{\nolig}{s o}
- {\dimen0=\IfNoValueTF{#2}{\typog@ligaturekern}{#2\typog@dim@unit}%
+ {\dimen0=\IfNoValueTF{#2}{\typog@config@ligaturekern}{#2\typog@dim@unit}%
\IfBooleanTF{#1}%
{\kern\dimen0\ignorespaces}%
{\discretionary{\typog@hyphen}{}{\kern\dimen0}%
@@ -5249,7 +6223,7 @@ end
%
% \begin{macrocode}
\newcommand*{\typog@itcorr@text@unconditional}[1]
- {\kern#1\typog@textitalicscorrection}
+ {\kern#1\typog@config@textitalicscorrection}
% \end{macrocode}
% \end{macro}
%
@@ -5275,7 +6249,7 @@ end
%
% \begin{macrocode}
\newcommand*{\typog@itcorr@math}[1]
- {\mkern#1\typog@mathitalicscorrection}
+ {\mkern#1\typog@config@mathitalicscorrection}
% \end{macrocode}
% \end{macro}
%
@@ -5326,11 +6300,11 @@ end
%
% \begin{macrocode}
\NewDocumentCommand{\kernedslash}{s}
- {\hspace*{\typog@slashkern}%
+ {\hspace*{\typog@config@slashkern}%
\typog@forwardslash
\IfBooleanTF{#1}%
- {\hspace*{\typog@slashkern}\ignorespaces}%
- {\typog@breakpoint\typog@allowhyphenation\hspace*{\typog@slashkern}}}
+ {\hspace*{\typog@config@slashkern}\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation\hspace*{\typog@config@slashkern}}}
% \end{macrocode}
%
% \acronym{PDF}-substitute definition
@@ -5358,7 +6332,7 @@ end
\def\typog@@optarg{#2}%
\hspace*{#3\typog@dim@unit}%
\raisebox{\ifx\typog@@optarg\typog@@auto
- \typog@raisecapitalhyphen
+ \typog@config@raisecapitalhyphen
\else
\typog@@optarg\typog@dim@unit
\fi}{\typog@hyphen}%
@@ -5428,7 +6402,7 @@ end
%
% \begin{macrocode}
\newcommand*{\typog@breakpoint}
- {\penalty\typog@breakpenalty}
+ {\penalty\typog@config@breakpenalty}
% \end{macrocode}
% \end{macro}
%
@@ -5439,7 +6413,7 @@ end
%
% \begin{macrocode}
\NewDocumentCommand{\capitalhyphen}{s}
- {\raisebox{\typog@raisecapitalhyphen}{\typog@hyphen}%
+ {\raisebox{\typog@config@raisecapitalhyphen}{\typog@hyphen}%
\IfBooleanTF{#1}%
{\ignorespaces}%
{\typog@breakpoint\typog@allowhyphenation}}
@@ -5473,7 +6447,7 @@ end
%
% \begin{macrocode}
\NewDocumentCommand{\capitalendash}{s}
- {\raisebox{\typog@raisecapitaldash}{\textendash}%
+ {\raisebox{\typog@config@raisecapitaldash}{\textendash}%
\IfBooleanTF{#1}%
{\ignorespaces}%
{\typog@breakpoint\typog@allowhyphenation}}
@@ -5503,7 +6477,7 @@ end
%
% \begin{macrocode}
\NewDocumentCommand{\capitalemdash}{s}
- {\raisebox{\typog@raisecapitaldash}{\textemdash}%
+ {\raisebox{\typog@config@raisecapitaldash}{\textemdash}%
\IfBooleanTF{#1}%
{\ignorespaces}%
{\typog@breakpoint\typog@allowhyphenation}}
@@ -5531,7 +6505,7 @@ end
%
% \begin{macrocode}
\NewDocumentCommand{\figuredash}{s}
- {\raisebox{\typog@raisefiguredash}{\textendash}%
+ {\raisebox{\typog@config@raisefiguredash}{\textendash}%
\IfBooleanTF{#1}%
{\ignorespaces}%
{\typog@breakpoint\typog@allowhyphenation}}
@@ -5550,9 +6524,9 @@ end
% \begin{macrocode}
\NewDocumentCommand{\capitaltimes}{}
{\ifmmode
- \mathbin{\raisebox{\typog@raisecapitaltimes}{$\m@th\times$}}%
+ \mathbin{\raisebox{\typog@config@raisecapitaltimes}{$\m@th\times$}}%
\else
- \raisebox{\typog@raisecapitaltimes}{\texttimes}%
+ \raisebox{\typog@config@raisecapitaltimes}{\texttimes}%
\fi}
% \end{macrocode}
%
@@ -5571,7 +6545,7 @@ end
% \begin{macrocode}
\NewDocumentCommand{\singleguillemetleft}{}
{\typog@allowhyphenation
- \raisebox{\typog@raiseguillemets}{\guilsinglleft}}
+ \raisebox{\typog@config@raiseguillemets}{\guilsinglleft}}
% \end{macrocode}
%
% \acronym{PDF}-substitute definition
@@ -5584,7 +6558,7 @@ end
% \begin{macro}{\singleguillemetright}
% \begin{macrocode}
\NewDocumentCommand{\singleguillemetright}{}
- {\raisebox{\typog@raiseguillemets}{\guilsinglright}%
+ {\raisebox{\typog@config@raiseguillemets}{\guilsinglright}%
\typog@allowhyphenation}
% \end{macrocode}
%
@@ -5599,7 +6573,7 @@ end
% \begin{macrocode}
\NewDocumentCommand{\doubleguillemetleft}{}
{\typog@allowhyphenation
- \raisebox{\typog@raiseguillemets}{\guillemotleft}}
+ \raisebox{\typog@config@raiseguillemets}{\guillemotleft}}
% \end{macrocode}
%
% \acronym{PDF}-substitute definition
@@ -5612,7 +6586,7 @@ end
% \begin{macro}{\doubleguillemetright}
% \begin{macrocode}
\NewDocumentCommand{\doubleguillemetright}{}
- {\raisebox{\typog@raiseguillemets}{\guillemotright}%
+ {\raisebox{\typog@config@raiseguillemets}{\guillemotright}%
\typog@allowhyphenation}
% \end{macrocode}
%
@@ -5627,7 +6601,7 @@ end
% \begin{macrocode}
\NewDocumentCommand{\Singleguillemetleft}{}
{\typog@allowhyphenation
- \raisebox{\typog@raisecapitalguillemets}{\guilsinglleft}}
+ \raisebox{\typog@config@raisecapitalguillemets}{\guilsinglleft}}
% \end{macrocode}
%
% \acronym{PDF}-substitute definition
@@ -5640,7 +6614,7 @@ end
% \begin{macro}{\Singleguillemetright}
% \begin{macrocode}
\NewDocumentCommand{\Singleguillemetright}{}
- {\raisebox{\typog@raisecapitalguillemets}{\guilsinglright}%
+ {\raisebox{\typog@config@raisecapitalguillemets}{\guilsinglright}%
\typog@allowhyphenation}
% \end{macrocode}
%
@@ -5655,7 +6629,7 @@ end
% \begin{macrocode}
\NewDocumentCommand{\Doubleguillemetleft}{}
{\typog@allowhyphenation
- \raisebox{\typog@raisecapitalguillemets}{\guillemotleft}}
+ \raisebox{\typog@config@raisecapitalguillemets}{\guillemotleft}}
% \end{macrocode}
%
% \acronym{PDF}-substitute definition
@@ -5668,7 +6642,7 @@ end
% \begin{macro}{\Doubleguillemetright}
% \begin{macrocode}
\NewDocumentCommand{\Doubleguillemetright}{}
- {\raisebox{\typog@raisecapitalguillemets}{\guillemotright}%
+ {\raisebox{\typog@config@raisecapitalguillemets}{\guillemotright}%
\typog@allowhyphenation}
% \end{macrocode}
%
@@ -5681,6 +6655,457 @@ end
% \end{macro}
%
%
+% \subsection{Vert. Adjust Label Items}
+%
+% \begin{macro}{\@typog@uppercase@adjust@labelitem}
+% Handle all possible requests for uppercase label item correction.
+% Patch |itemize|~environments.
+%
+% \begin{macrocode}
+\newcommand*{\@typog@uppercase@adjust@labelitem}[1]
+ {\@typog@maybe@patch@itemize
+ \ifstrequal{#1}{*}
+ {\setlength{\typog@adjust@labelitemi}
+ {\typog@adjust@uppercase@labelitemi}
+ \setlength{\typog@adjust@labelitemii}
+ {\typog@adjust@uppercase@labelitemii}
+ \setlength{\typog@adjust@labelitemiii}
+ {\typog@adjust@uppercase@labelitemiii}
+ \setlength{\typog@adjust@labelitemiv}
+ {\typog@adjust@uppercase@labelitemiv}}
+ {\ifcase #1% 0
+ \relax % outside of any itemize environment
+ \or % 1
+ \setlength{\typog@adjust@labelitemi}
+ {\typog@adjust@uppercase@labelitemi}
+ \or % 2
+ \setlength{\typog@adjust@labelitemii}
+ {\typog@adjust@uppercase@labelitemii}
+ \or % 3
+ \setlength{\typog@adjust@labelitemiii}
+ {\typog@adjust@uppercase@labelitemiii}
+ \or % 4
+ \setlength{\typog@adjust@labelitemiv}
+ {\typog@adjust@uppercase@labelitemiv}
+ \else
+ \PackageError{typog}
+ {Itemize level out of range}
+ {Valid levels are 1, 2, 3, 4, and *}
+ \fi}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@typog@lowercase@adjust@labelitem}
+% Handle all possible requests for lowercase label item correction.
+% Patch |itemize|~environments.
+%
+% \begin{macrocode}
+\newcommand*{\@typog@lowercase@adjust@labelitem}[1]
+ {\@typog@maybe@patch@itemize
+ \ifstrequal{#1}{*}
+ {\setlength{\typog@adjust@labelitemi}
+ {\typog@adjust@lowercase@labelitemi}
+ \setlength{\typog@adjust@labelitemii}
+ {\typog@adjust@lowercase@labelitemii}
+ \setlength{\typog@adjust@labelitemiii}
+ {\typog@adjust@lowercase@labelitemiii}
+ \setlength{\typog@adjust@labelitemiv}
+ {\typog@adjust@lowercase@labelitemiv}}
+ {\ifcase #1% 0
+ \relax % outside of any itemize environment
+ \or % 1
+ \setlength{\typog@adjust@labelitemi}
+ {\typog@adjust@lowercase@labelitemi}
+ \or % 2
+ \setlength{\typog@adjust@labelitemii}
+ {\typog@adjust@lowercase@labelitemii}
+ \or % 3
+ \setlength{\typog@adjust@labelitemiii}
+ {\typog@adjust@lowercase@labelitemiii}
+ \or % 4
+ \setlength{\typog@adjust@labelitemiv}
+ {\typog@adjust@lowercase@labelitemiv}
+ \else
+ \PackageError{typog}
+ {Itemize level out of range}
+ {Valid levels are 1, 2, 3, 4, and *}
+ \fi}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@typog@noadjust@labelitem}
+% Neutralize all label item corrections.
+% This function \emph{does not} request patching any |itemize|~environment!
+%
+% \begin{macrocode}
+\newcommand*{\@typog@noadjust@labelitem}[1]
+ {\ifstrequal{#1}{*}
+ {\setlength{\typog@adjust@labelitemi}{\z@}
+ \setlength{\typog@adjust@labelitemii}{\z@}
+ \setlength{\typog@adjust@labelitemiii}{\z@}
+ \setlength{\typog@adjust@labelitemiv}{\z@}}
+ {\ifcase #1% 0
+ \relax % outside of any itemize environment
+ \or % 1
+ \setlength{\typog@adjust@labelitemi}{\z@}
+ \or % 2
+ \setlength{\typog@adjust@labelitemii}{\z@}
+ \or % 3
+ \setlength{\typog@adjust@labelitemiii}{\z@}
+ \or % 4
+ \setlength{\typog@adjust@labelitemiv}{\z@}
+ \else
+ \PackageError{typog}
+ {Itemize level out of range}
+ {Valid levels are 1, 2, 3, 4, and *}
+ \fi}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\uppercaseadjustlabelitems}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% User macro that handles lists and the treats the empty list specially. We wrap the code
+% into \cs{AfterPreamble} because it may be called in the document's preamble where we don't
+% know whether package~\packagename{enumitem} already has been loaded and we can patch its
+% variant of \code{itemize}.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\uppercaseadjustlabelitems}{m}
+ {\AfterPreamble{%
+ \ifblank{#1}
+ {\@typog@uppercase@adjust@labelitem{\@itemdepth}}
+ {\forcsvlist{\@typog@uppercase@adjust@labelitem}{#1}}%
+ \ignorespaces}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lowercaseadjustlabelitems}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% User macro that handles lists and the treats the empty list specially.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\lowercaseadjustlabelitems}{m}
+ {\AfterPreamble{%
+ \ifblank{#1}
+ {\@typog@lowercase@adjust@labelitem{\@itemdepth}}
+ {\forcsvlist{\@typog@lowercase@adjust@labelitem}{#1}}%
+ \ignorespaces}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\noadjustlabelitems}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% User macro that handles lists and the treats the empty list specially.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\noadjustlabelitems}{m}
+ {\ifblank{#1}
+ {\@typog@noadjust@labelitem{\@itemdepth}}
+ {\forcsvlist{\@typog@noadjust@labelitem}{#1}}%
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Now we get to the dirty part. All the above definitions do not get called until we hack the
+% existing |itemize|-environments, either the one of plain~\LaTeX{} or the one modified by
+% package~\packagename{enumitem}.
+%
+% Here comes the result of \code{latexdef -c article -s itemize}, which was used to derive the
+% patch code:
+%
+% \begin{verbatim}
+% \def\itemize{%
+% \ifnum \@itemdepth > \thr@@
+% \@toodeep
+% \else
+% \advance\@itemdepth\@ne
+% \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+% \expandafter
+% \list
+% \csname\@itemitem\endcsname
+% {\def\makelabel##1{\hss\llap{##1}}}%
+% \fi}\end{verbatim}
+%
+% \begin{macro}{\@typog@itemize@patch}
+% This is the additional code we inject into plain \LaTeX's or
+% package~\packagename{enumitem}'s \cs{itemize}.
+%
+% \begin{macrocode}
+\newcommand*{\@typog@itemize@patch}
+% \end{macrocode}
+%
+% Save the original definition of \cs{@itemitem} for chain-calling it later on.
+%
+% \begin{macrocode}
+ {\letcs{\@typog@old@itemitem}{\@itemitem}
+% \end{macrocode}
+%
+% Sneak in our own macro's name.
+%
+% \begin{macrocode}
+ \edef\@itemitem{@typog@labelitem\romannumeral\the\@itemdepth}
+% \end{macrocode}
+%
+% Redefine under the original macro's name so that our code gets called and the old code
+% (\cs{@typog@old@itemitem}) is expanded.
+%
+% \begin{macrocode}
+ \expandafter\def\csname\@itemitem\endcsname
+ {\raisebox{\csname typog@adjust@labelitem\romannumeral\the\@itemdepth\endcsname}
+ {\@typog@old@itemitem}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% If package~\packagename{enumitem} has been loaded, we use the \emph{same} patch. Here comes
+% the result of \code{latexdef -c article -p enumitem -s enit@itemize@i} that explains, why no
+% change is required:
+%
+% \begin{verbatim}
+% \def\enit@itemize@i#1#2#3#4{%
+% \ifnum #1 > #3 \relax
+% \enit@toodeep
+% \else
+% \enit@prelist\@ne{#1}{#2}%
+% \edef\@itemitem{label#2\romannumeral#1}%
+% \expandafter
+% \enit@list
+% \csname\@itemitem\endcsname
+% {\let\enit@calc\z@
+% \def\makelabel##1{\enit@align{\enit@format{##1}}}%
+% \enit@preset{#2}{#1}{#4}%
+% \enit@calcleft
+% \enit@before
+% \enit@negwidth}%
+% \enit@keyfirst
+% \fi}\end{verbatim}
+%
+% \begin{macro}{\@typog@patch@itemize}
+% Unconditionally apply the patches that are just \emph{single} macro calls to disturb the
+% original macros as little as possible. If we detect \packagename{enumitem} to be present
+% we modify its definition of \code{itemize} otherwise we wrestle \LaTeX's macro.
+%
+% \begin{macrocode}
+\newcommand*{\@typog@patch@itemize}
+ {\ifdefined\enit@itemize@i
+ \patchcmd{\enit@itemize@i}
+ {\expandafter}
+ {\@typog@itemize@patch\expandafter}
+ {\typog@debug@typeout{patching enumitem \string\enit@itemize@i\space succeeded}}
+ {\PackageError{typog}
+ {Patching enumitem macro \string\enit@itemize@i\space failed}
+ {}}
+ \else
+ \patchcmd{\itemize}
+ {\expandafter}
+ {\@typog@itemize@patch\expandafter}
+ {\typog@debug@typeout{patching \string\itemize\space succeeded}}
+ {\PackageError{typog}
+ {Patching plain LaTeX macro \string\itemize\space failed}
+ {}}
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@typog@maybe@patch@itemize}
+% Apply the patches only once.
+%
+% \begin{macrocode}
+\newbool{@typog@itemize@has@been@patched}
+\newcommand*{\@typog@maybe@patch@itemize}
+ {\ifbool{@typog@itemize@has@been@patched}
+ {\relax}
+ {\@typog@patch@itemize
+ \booltrue{@typog@itemize@has@been@patched}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Here come our convenience macros to simplify an accurate setup of the label adjustments.
+%
+% \begin{macro}{\typog@hairline@width}
+% Line width of the horizontal reference lines in our convenience macros.
+%
+% \begin{macrocode}
+\newcommand*{\typog@hairline@width}{.125pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typogadjuststairsfor}
+% The arguments are:
+% \#1: \meta{scale-factor},
+% \#2: \meta{step-size},
+% \#3: \meta{number-of-steps},
+% \#4: \meta{sample}, and
+% \#5: \cs{labelitem}\meta{N}.
+%
+% Generate an ascending stairs of argument~\#5.
+%
+% \begin{macrocode}
+\newcommand*{\typogadjuststairsfor}[5]
+% \end{macrocode}
+%
+% Store (half of) the space between two samples in \cs{dimen0}.
+%
+% \begin{macrocode}
+ {\dimen0=1pt%
+% \end{macrocode}
+%
+% Load the \meta{number-of-steps} and ensure that it is odd.
+%
+% \begin{macrocode}
+ \count0=#3\relax
+ \unless\ifodd\count0
+ \advance\count0 by 1%
+ \fi
+% \end{macrocode}
+%
+% Set the iteration counter.
+%
+% \begin{macrocode}
+ \setcounter{typog@@iteration}{1}%
+% \end{macrocode}
+%
+% Put the \meta{sample} into a box so that we can measure it with \cs{ht}.
+%
+% \begin{macrocode}
+ \setbox0=\hbox{#4}%
+% \end{macrocode}
+%
+% Box~1 is the accumulator for the raised samples.
+%
+% \begin{macrocode}
+ \setbox1=\hbox{}%
+% \end{macrocode}
+%
+% Build the stairs.
+%
+% \begin{macrocode}
+ \loop
+ \ifnum\thetypog@@iteration=\numexpr\count0 / 2\relax
+ \dimen1=2\dimen0
+ \else
+ \dimen1=\dimen0
+ \fi
+ \dimen2=\dimexpr#2 * (\thetypog@@iteration - \count0 / 2)\relax
+ \setbox1=\hbox{\unhbox1\raisebox{\dimen2}{\kern\dimen1 #5\kern\dimen1}}%
+ \addtocounter{typog@@iteration}{1}%
+ \unless\ifnum\thetypog@@iteration>\count0
+ \repeat
+% \end{macrocode}
+%
+% Merge the stairs with a hairline at \#1 times the height of \meta{sample}.
+% Answer just a single box.
+%
+% \begin{macrocode}
+ \mbox{\rlap{\raisebox{\fpeval{#1}\ht0}{\rule{\wd1}{\typog@hairline@width}}}\box1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typogadjuststairs}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% The arguments are:
+% \#1: \meta{scale-factor},
+% \#2: \meta{step-size},
+% \#3: \meta{number-of-steps}, and
+% \#4: \meta{sample}.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\typogadjuststairs}{O{.5} m m m}
+ {\begingroup
+ \unless\ifdim #2>\z@
+ \PackageError{typog}
+ {\string\typogadjuststairs\space non-positive step-size}
+ {step-size must be a positive dimension}%
+ \fi
+ \ifnum #3<1
+ \PackageError{typog}
+ {\string\typogadjuststairs\space too few number-of-steps}
+ {number-of-steps must at least be 1}%
+ \fi
+ \ifblank{#4}
+ {\PackageError{typog}
+ {sample must not be empty}
+ {supply either some uppercase or some lowercase letters}}
+ {}%
+ \def\arraystretch{1}%
+ \begin{tabular}{@{}c@{}}
+ \typogadjuststairsfor{#1}{#2}{#3}{#4}{\labelitemi} \\
+ \typogadjuststairsfor{#1}{#2}{#3}{#4}{\labelitemii} \\
+ \typogadjuststairsfor{#1}{#2}{#3}{#4}{\labelitemiii} \\
+ \typogadjuststairsfor{#1}{#2}{#3}{#4}{\labelitemiv}
+ \end{tabular}
+ \endgroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@uppercase@adjusted@labelitems}
+% Return all four labelitems in a horizontal box after they have been adjusted with the
+% uppercase-constants set.
+%
+% \begin{macrocode}
+\newcommand*{\typog@uppercase@adjusted@labelitems}
+ {\hbox{\raisebox{\typog@adjust@uppercase@labelitemi}{\labelitemi}%
+ \raisebox{\typog@adjust@uppercase@labelitemii}{\labelitemii}%
+ \raisebox{\typog@adjust@uppercase@labelitemiii}{\labelitemiii}%
+ \raisebox{\typog@adjust@uppercase@labelitemiv}{\labelitemiv}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typoguppercaseadjustcheck}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% We stuff the user's sample text into a box only to measure its height. We typeset all four
+% labels and draw a hairline at half the height of the sample right through it.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\typoguppercaseadjustcheck}{O{.5} m}
+ {\setbox0=\hbox{#2}%
+ \setbox1=\typog@uppercase@adjusted@labelitems
+ \mbox{\rlap{\raisebox{\fpeval{#1}\ht0}
+ {\rule{\wd1}{\typog@hairline@width}}}%
+ \box1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@lowercase@adjusted@labelitems}
+% Return all four labelitems in a horizontal box after they have been adjusted with the
+% lowercase-constants set.
+%
+% \begin{macrocode}
+\newcommand*{\typog@lowercase@adjusted@labelitems}
+ {\hbox{\raisebox{\typog@adjust@lowercase@labelitemi}{\labelitemi}%
+ \raisebox{\typog@adjust@lowercase@labelitemii}{\labelitemii}%
+ \raisebox{\typog@adjust@lowercase@labelitemiii}{\labelitemiii}%
+ \raisebox{\typog@adjust@lowercase@labelitemiv}{\labelitemiv}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typoglowercaseadjustcheck}
+% \changes{v0.4}{2024-05-14}{New macro.}
+% Same code as \cs{typoguppercaseadjustcheck} for lowercase.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\typoglowercaseadjustcheck}{O{.5} m}
+ {\setbox0=\hbox{#2}%
+ \setbox1=\typog@lowercase@adjusted@labelitems
+ \mbox{\rlap{\raisebox{\fpeval{#1}\ht0}
+ {\rule{\wd1}{\typog@hairline@width}}}%
+ \box1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
% \subsection[Align Last Line]{Align Last Line of a Paragraph}
%
% The code of environment |lastlineraggedleftpar|
@@ -5955,7 +7380,7 @@ end
% \end{environment}
%
%
-% \subsection{Microtype Front\capitalhyphen End}
+% \subsection{\packagename{Microtype} Front\capitalhyphen End}
%
% \subsubsection*{Tracking}
%
@@ -6296,7 +7721,7 @@ end
% \item[Initialize.] \code{load("list\_functions")\$}
% \item[\cs{tolerance}:] \code{logspace(log10(200), log10(9999), 9), numer;}
% \item[\cs{emergencystretch}:] \code{linspace(0, 3, 9), numer;}
-% \item[\cs{hfuzz}:] \code{linspace(0.1, 0.5, 9);}
+% \item[\cs{hfuzz}:] \code{linspace(.1, .5, 9);}
% \end{description}
% \end{implementationnote}
%
@@ -6338,7 +7763,7 @@ end
\NewDocumentCommand{\vtietop}{O{3}}
{\setcounter{typog@mean@penalty}
{\typog@geometric@mean{\@M}{\clubpenalty}}%
- \typog@typeout{vtietop: penalties \the\@M--\the\value{typog@mean@penalty}--\the\clubpenalty}%
+ \typog@debug@typeout{vtietop: penalties \the\@M--\the\value{typog@mean@penalty}--\the\clubpenalty}%
\unless\ifnum\clubpenalty<\@M
\PackageWarning{typog}{vtietop: clubpenalty=\the\clubpenalty\space>= 10000}%
\fi
@@ -6426,7 +7851,7 @@ end
\NewDocumentCommand{\vtiebot}{O{3}}
{\setcounter{typog@mean@penalty}
{\typog@geometric@mean{\@M}{\widowpenalty}}%
- \typog@typeout{vtiebot: penalties \the\@M--\the\value{typog@mean@penalty}--\the\widowpenalty}%
+ \typog@debug@typeout{vtiebot: penalties \the\@M--\the\value{typog@mean@penalty}--\the\widowpenalty}%
\unless\ifnum\widowpenalty<\@M
\PackageWarning{typog}{vtiebot: widowpenalty=\the\widowpenalty\space>= 10000}%
\fi
@@ -6494,7 +7919,7 @@ end
\NewDocumentCommand{\typog@vtiebotdisp}{m}
{\setcounter{typog@mean@penalty}
{\typog@geometric@mean{\@M}{\displaywidowpenalty}}%
- \typog@typeout{vtiebotdisp: penalties \the\@M--\the\value{typog@mean@penalty}--\the\displaywidowpenalty}%
+ \typog@debug@typeout{vtiebotdisp: penalties \the\@M--\the\value{typog@mean@penalty}--\the\displaywidowpenalty}%
\unless\ifnum\displaywidowpenalty<\@M
\PackageWarning{typog}{vtiebotdisp: displaywidowpenalty=\the\displaywidowpenalty\space>= 10000}%
\fi
@@ -6588,7 +8013,7 @@ end
% \end{environment}
%
%
-% \subsection{Setspace Front-End}
+% \subsection{\packagename{Setspace} Front-End}
%
% \begin{macro}{\typog@iter@limit}
% The maximum number of iterations we perform before bailing out with an error. Can be
@@ -6631,9 +8056,9 @@ end
% \begin{macrocode}
\dim_set:Nn \l_tmpa_dim {\glueexpr #1}
- \typog@typeout{\string\setbaselineskip:\space
+ \typog@debug@typeout{\string\setbaselineskip:\space
initial\space baselineskip:\space \the\baselineskip}
- \typog@typeout{\string\setbaselineskip:\space
+ \typog@debug@typeout{\string\setbaselineskip:\space
target\space baselineskip:\space \dim_use:N \l_tmpa_dim}
\dim_compare:nNnTF {\baselineskip} > {\c_zero_dim}
@@ -6686,10 +8111,10 @@ end
{}
}
- \typog@typeout{\string\setbaselineskip:\space
+ \typog@debug@typeout{\string\setbaselineskip:\space
final\space \string\setstretch\space argument:\space
\fp_use:N \l_tmpa_fp}
- \typog@typeout{\string\setbaselineskip:\space
+ \typog@debug@typeout{\string\setbaselineskip:\space
final\space baselineskip:\space \the\baselineskip}
}
@@ -6756,7 +8181,7 @@ end
% \begin{macrocode}
\AfterEndPreamble{
\dim_set:Nn \typogfontsize {\fontdimen6\font}
- \typog@typeout{\string\typogfontsize =
+ \typog@debug@typeout{\string\typogfontsize =
\dim_use:N \typogfontsize\space
(at\space begin\space of\space document)}
}
@@ -6892,13 +8317,13 @@ end
\skip1=#2\relax
\skip2=#3\relax
\skip3=#4\relax
- \typog@typeout{smoothraggedrightshapetriplet: skip0=\the\skip0}%
- \typog@typeout{smoothraggedrightshapetriplet: skip1=\the\skip1}%
- \typog@typeout{smoothraggedrightshapetriplet: skip2=\the\skip2}%
- \typog@typeout{smoothraggedrightshapetriplet: skip3=\the\skip3}%
+ \typog@debug@typeout{smoothraggedrightshapetriplet: skip0=\the\skip0}%
+ \typog@debug@typeout{smoothraggedrightshapetriplet: skip1=\the\skip1}%
+ \typog@debug@typeout{smoothraggedrightshapetriplet: skip2=\the\skip2}%
+ \typog@debug@typeout{smoothraggedrightshapetriplet: skip3=\the\skip3}%
\unless\ifnum\typog@mod{\typog@triplet@max@lines}{3}=0
\PackageError{typog}
- {Line number of triplet generator %
+ {Line number of triplet generator\space
(\typog@triplet@max@lines) not divisible by 3}
{}
\fi
@@ -6943,15 +8368,15 @@ end
\skip3=#4\relax
\skip4=#5\relax
\skip5=#6\relax
- \typog@typeout{smoothraggedrightshapequintuplet: skip0=\the\skip0}%
- \typog@typeout{smoothraggedrightshapequintuplet: skip1=\the\skip1}%
- \typog@typeout{smoothraggedrightshapequintuplet: skip2=\the\skip2}%
- \typog@typeout{smoothraggedrightshapequintuplet: skip3=\the\skip3}%
- \typog@typeout{smoothraggedrightshapequintuplet: skip4=\the\skip4}%
- \typog@typeout{smoothraggedrightshapequintuplet: skip5=\the\skip5}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip0=\the\skip0}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip1=\the\skip1}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip2=\the\skip2}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip3=\the\skip3}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip4=\the\skip4}%
+ \typog@debug@typeout{smoothraggedrightshapequintuplet: skip5=\the\skip5}%
\unless\ifnum\typog@mod{\typog@quintuplet@max@lines}{5}=0
\PackageError{typog}
- {Line number of quintuplet generator %
+ {Line number of quintuplet generator\space
(\typog@quintuplet@max@lines) not divisible by 5}
{}
\fi
@@ -6998,17 +8423,17 @@ end
\skip5=#6\relax
\skip6=#7\relax
\skip7=#8\relax
- \typog@typeout{smoothraggedrightshapeseptuplet: skip0=\the\skip0}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip1=\the\skip1}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip2=\the\skip2}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip3=\the\skip3}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip4=\the\skip4}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip5=\the\skip5}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip6=\the\skip6}%
- \typog@typeout{smoothraggedrightshapeseptuplet: skip7=\the\skip7}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip0=\the\skip0}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip1=\the\skip1}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip2=\the\skip2}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip3=\the\skip3}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip4=\the\skip4}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip5=\the\skip5}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip6=\the\skip6}%
+ \typog@debug@typeout{smoothraggedrightshapeseptuplet: skip7=\the\skip7}%
\unless\ifnum\typog@mod{\typog@septuplet@max@lines}{7}=0
\PackageError{typog}
- {Line number of septuplet generator %
+ {Line number of septuplet generator\space
(\typog@septuplet@max@lines) not divisible by 7}
{}
\fi
@@ -7115,7 +8540,7 @@ end
% |generator=triplet| produces a \doublequotes{short line -- long line -- middle length line}~sequence.
% \begin{macrocode}
\typog@fuzzwidth=.25\smoothraggedrightragwidth
- \typog@typeout{smoothraggedright: generator=triplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \typog@debug@typeout{smoothraggedright: generator=triplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
\smoothraggedrightshapetriplet[leftskip=\typog@@smoothraggedrightleftskip,
parindent=\glueexpr\smoothraggedrightparindent + \parindent,
#1]%
@@ -7130,7 +8555,7 @@ end
% |generator=quintuplet|.
% \begin{macrocode}
\typog@fuzzwidth=.125\smoothraggedrightragwidth
- \typog@typeout{smoothraggedright: generator=quintuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \typog@debug@typeout{smoothraggedright: generator=quintuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
\smoothraggedrightshapequintuplet[leftskip=\typog@@smoothraggedrightleftskip,
parindent=\glueexpr\smoothraggedrightparindent + \parindent,
#1]%
@@ -7153,7 +8578,7 @@ end
%
% \begin{macrocode}
\typog@fuzzwidth=.08333\smoothraggedrightragwidth
- \typog@typeout{smoothraggedright: generator=septuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \typog@debug@typeout{smoothraggedright: generator=septuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
\smoothraggedrightshapeseptuplet[leftskip=\typog@@smoothraggedrightleftskip,
parindent=\glueexpr\smoothraggedrightparindent + \parindent,
#1]%
@@ -7198,7 +8623,7 @@ end
%
%
% \addtocontents{toc}{\protect\end{multicols}}
-% \addtocontents{toc}{\endgroup}
+% \addtocontents{toc}{\protect\end{list}}
%
%
% \Finale
@@ -7220,10 +8645,14 @@ end
\usepackage{fullwidth}
\usepackage{hyphenat}
\usepackage{mathtools}
-\usepackage[activate=true, verbose=true]{microtype}
+\usepackage[activate=true, verbose=false]{microtype}
\usepackage{ragged2e}
\usepackage[nobottomtitles*]{titlesec}\renewcommand*{\bottomtitlespace}{.2\textheight}
-\usepackage[debug, trackingttspacing]{typog}
+\usepackage{trace}
+\usepackage[debug,
+ trackingttspacing,
+ uppercaselabelitemadjustments={0pt, .1em, .15em, .1em},
+ lowercaselabelitemadjustments={-.0667em, 0pt, .1em, 0pt}]{typog}
\usepackage{xcolor}
\usepackage[loosest, proportional, scaled=1.064]{erewhon}
@@ -7234,49 +8663,42 @@ end
\def\xsfdefault{\relax}
-{
- \def\examplefont{6}
-
- \ifcase\examplefont % 0 -- document's default sans-serif font (e.g., ecrm1000)
- \gdef\examplefontname{default}
- \global\let\xsf=\sf
- \global\let\xsfdefault=\sfdefault
- \or % 1 -- Nunito
- \gdef\examplefontname{Nunito}
- \usepackage{nunito}
- \xdef\xsfdefault{\rmdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \or % 2 -- OpenSans
- \gdef\examplefontname{OpenSans}
- \usepackage[defaultsans]{opensans}
- \xdef\xsfdefault{\sfdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \or % 3 -- Noto Sans
- \gdef\examplefontname{OpenSans}
- \usepackage[sfdefault]{noto}
- \xdef\xsfdefault{\sfdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \or % 4 -- Roboto
- \gdef\examplefontname{Roboto}
- \usepackage[sfdefault]{roboto}
- \xdef\xsfdefault{\sfdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \or % 5 -- Montserrat
- \gdef\examplefontname{Montserrat Alternate}
- \usepackage[alternates]{montserrat}
- \xdef\xsfdefault{\sfdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \or % 6 -- Inter
- \gdef\examplefontname{Inter}
- \usepackage[sfdefault]{inter}
- \xdef\xsfdefault{\sfdefault}
- \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
- \else
- \SelectedUnknownExampleFont
- \fi
- \typeout{typog-example: font for examples: `\xsfdefault'}%
-}
+\def\examplefont{6}
+
+\ifcase\examplefont % 0 -- document's default sans-serif font (e.g., ecrm1000)
+ \def\examplefontname{default}
+ \let\xsf=\sf
+ \let\xsfdefault=\sfdefault
+\or % 1 -- Nunito
+ \def\examplefontname{Nunito}
+ \def\xsfdefault{Nunito-TOsF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\or % 2 -- OpenSans
+ \def\examplefontname{OpenSans}
+ \def\xsfdefault{opensans-TLF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\or % 3 -- Noto Sans
+ \def\examplefontname{Noto Sans}
+ \def\xsfdefault{NotoSans-TLF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\or % 4 -- Roboto
+ \def\examplefontname{Roboto}
+ \def\xsfdefault{Roboto-LF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\or % 5 -- Montserrat
+ \def\examplefontname{Montserrat Alternates}
+ \def\xsfdefault{MontserratAlternates-LF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\or % 6 -- Inter
+ \def\examplefontname{Inter}
+ \def\xsfdefault{Inter-LF}
+ \def\xsf{\let\sfdefault=\xsfdefault\sf}
+\else
+ \SelectedUnknownExampleFont
+\fi
+
+\typeout{typog-example: font for examples: `\xsfdefault'}%
\usepackage{hyperref}
@@ -7388,7 +8810,6 @@ end
concentrate all the badness in one place, making one truly unsightly line instead of
two moderately bad ones, because a single ``write-off'' produces fewest total
demerits according to the rules.}
- %There is a much better way to get the desired effect:~[\dots]
\newcommand*{\texbooktolerancesamplecredits}
{\medskip\noindent
\textsl{The sample text was taken from The~\TeX{}book~\cite[p.~107]{knuth:1986}.}}
@@ -7396,7 +8817,7 @@ end
\newcommand*{\texbookparfillskipsample}
{We still haven't discussed the special trick that allows the final line of a paragraph
to be shorter than the others. Just before \TeX{} begins to choose breakpoints,
- it does two important things: [\dots]}
+ it does two important things: [\dots\itcorr{-4}]}
\newcommand*{\texbooklongparfillskipsample}
{We still haven't discussed the special trick that allows the final line of a paragraph
to be shorter than the others. Just before \TeX{} begins to choose breakpoints,
@@ -7404,7 +8825,7 @@ end
that glue is discarded. (The reason is that a blank space often gets into a token list just
before \code{\char92par} or just before \code{\char36\char36}, and this blank space should not be
part of the paragraph.) (2)~Three or more items are put at the end of the
- current horizontal list~[\dots]}
+ current horizontal list~[\dots\itcorr{-4}]}
\newcommand*{\texbookparfillskipsamplecredits}
{\medskip\noindent
\textsl{The sample text was taken from The~\TeX{}book~\cite[p.~99n]{knuth:1986}.}}
@@ -7458,7 +8879,7 @@ end
\setcounter{tocdepth}{1}
-\setlength{\overfullrule}{3pt}
+\setlength{\overfullrule}{0pt}
\hbadness=-1
@@ -7575,7 +8996,76 @@ in the official documentation of package~\packagename{typog}.
\noindent
Unless otherwise noted the font used in the examples is \singlequotes{\examplefontname}.
-\bigskip
+
+\section{Setup and Reconfiguration}
+
+\noindent
+\code{\char`\\ typogget}
+
+\begin{list}{}{}
+ \newcommand*{\expandsto}{$\mathbin{\mapsto}$}
+\item \code{breakpenalty} \expandsto{} \the\typogget{breakpenalty}
+\item \code{ligaturekern} \expandsto{} \milliem{\typogget{ligaturekern}}
+\item \code{lowercaselabelitemadjustments} \expandsto{} \typogget{lowercaselabelitemadjustments}
+\item \code{mathitalicscorrection} \expandsto{} \the\typogget{mathitalicscorrection}
+\item \code{raisecapitaldash} \expandsto{} \the\typogget{raisecapitaldash}
+\item \code{raisecapitalguillemets} \expandsto{} \the\typogget{raisecapitalguillemets}
+\item \code{raisecapitalhyphen} \expandsto{} \the\typogget{raisecapitalhyphen}
+\item \code{raisecapitaltimes} \expandsto{} \the\typogget{raisecapitaltimes}
+\item \code{raisefiguredash} \expandsto{} \the\typogget{raisefiguredash}
+\item \code{raiseguillemets} \expandsto{} \the\typogget{raiseguillemets}
+\item \code{shrinklimits} \expandsto{} \typogget{shrinklimits}
+\item \code{slashkern} \expandsto{} \the\typogget{slashkern}
+\item \code{stretchlimits} \expandsto{} \typogget{stretchlimits}
+\item \code{textitalicscorrection} \expandsto{} \the\typogget{textitalicscorrection}
+\item \code{trackingttspacing} \expandsto{} \typogget{trackingttspacing}
+\item \code{uppercaselabelitemadjustments} \expandsto{} \typogget{uppercaselabelitemadjustments}
+\end{list}
+
+\begingroup
+ \dimen0=\typogget{raisecapitaldash}%
+ \setbox0=\hbox to \typogget{ligaturekern} {}%
+\endgroup
+
+\noindent
+\code{\char`\\ typoggetnth}
+
+\begin{list}{}{}
+\item
+ Elements of \code{lowercaselabelitemadjustments}:
+ (1)~\typoggetnth{\dimen0}{lowercaselabelitemadjustments}{1}\the\dimen0,
+ (2)~\typoggetnth{\dimen0}{lowercaselabelitemadjustments}{2}\the\dimen0,
+ (3)~\typoggetnth{\dimen0}{lowercaselabelitemadjustments}{3}\the\dimen0, and
+ (4)~\typoggetnth{\dimen0}{lowercaselabelitemadjustments}{4}\the\dimen0.
+
+ Same elements now accessed from the right-hand-side, i.\,e.~with negative indices:
+ (\textminus4)~\typoggetnth{nth}{lowercaselabelitemadjustments}{-4}\nth,
+ (\textminus3)~\typoggetnth{nth}{lowercaselabelitemadjustments}{-3}\nth,
+ (\textminus2)~\typoggetnth{nth}{lowercaselabelitemadjustments}{-2}\nth, and
+ (\textminus1)~\typoggetnth{nth}{lowercaselabelitemadjustments}{-1}\nth.
+
+\item Elements of \code{shrinklimits}:
+ (1)~\typoggetnth{nth}{shrinklimits}{1}\nth,
+ (2)~\typoggetnth{nth}{shrinklimits}{2}\nth, and
+ (3)~\typoggetnth{nth}{shrinklimits}{3}\nth.
+
+\item Elements of \code{stretchlimits}:
+ (1)~\typoggetnth{nth}{stretchlimits}{1}\nth,
+ (2)~\typoggetnth{nth}{stretchlimits}{2}\nth, and
+ (3)~\typoggetnth{nth}{stretchlimits}{3}\nth.
+
+\item Elements of \code{trackingttspacing}:
+ (1)~\typoggetnth{nth}{trackingttspacing}{1}\nth,
+ (2)~\typoggetnth{nth}{trackingttspacing}{2}\nth, and
+ (3)~\typoggetnth{nth}{trackingttspacing}{3}\nth.
+
+\item Elements of \code{uppercaselabelitemadjustments}:
+ (1)~\typoggetnth{\dimen0}{uppercaselabelitemadjustments}{1}\the\dimen0,
+ (2)~\typoggetnth{\dimen0}{uppercaselabelitemadjustments}{2}\the\dimen0,
+ (3)~\typoggetnth{\dimen0}{uppercaselabelitemadjustments}{3}\the\dimen0, and
+ (4)~\typoggetnth{\dimen0}{uppercaselabelitemadjustments}{4}\the\dimen0.
+\end{list}
+
\section{Information}
@@ -8068,6 +9558,82 @@ We again compare the default implementation with the adjusted one.
\end{quote}
+\section{Label Items}
+
+The current configurations for the uppercase and lowercase adjustments are
+\{\typogget{uppercaselabelitemadjustments}\} and \{\typogget{lowercaselabelitemadjustments}\},
+respectively.
+
+\begin{center}
+ \makeatletter
+ \noindent
+ A\raisebox{\typog@adjust@uppercase@labelitemi}{\labelitemi}%
+ B\raisebox{\typog@adjust@uppercase@labelitemii}{\labelitemii}%
+ E\raisebox{\typog@adjust@uppercase@labelitemiii}{\labelitemiii}%
+ G\raisebox{\typog@adjust@uppercase@labelitemiv}{\labelitemiv}H \\
+ a\raisebox{\typog@adjust@lowercase@labelitemi}{\labelitemi}%
+ b\raisebox{\typog@adjust@lowercase@labelitemii}{\labelitemii}%
+ c\raisebox{\typog@adjust@lowercase@labelitemiii}{\labelitemiii}%
+ e\raisebox{\typog@adjust@lowercase@labelitemiv}{\labelitemiv}g
+ \makeatother
+\end{center}
+
+For the following nested lists we adjust levels one and three for uppercase and levels two and
+four for lowercase.
+
+\begingroup
+ \uppercaseadjustlabelitems{1,3}
+ \lowercaseadjustlabelitems{2,4}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{0pt}
+ \begin{itemize}
+ \item A
+ \item B
+ \item C
+ \begin{itemize}
+ \item d
+ \item e
+ \item f
+ \begin{itemize}
+ \item G
+ \item H
+ \item I
+ \begin{itemize}
+ \item j
+ \item k
+ \item l
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\endgroup
+\noadjustlabelitems{*}% not necessary, but we want to exercise the macro
+
+The left example shows the result of \code{\string\typogadjuststairs\{.25pt\}\{11\}\{ABC\}} and
+the one on the right hand side just uses the same parameters except for the sample~\sample{ace},
+this is, only lowercase letters.
+
+\begin{center}
+ \begin{minipage}[t]{12em}
+ \centering
+ \typogadjuststairs{.25pt}{11}{ABC}
+ \end{minipage}
+ \begin{minipage}[t]{12em}
+ \centering
+ \typogadjuststairs{.25pt}{11}{ace}
+ \end{minipage}
+\end{center}
+
+For this document the calls
+\code{\string\typoguppercaseadjustcheck\{ABC\-DEF\-GHI\-JKL\-MNO\-PQR\-STU\-VWX\-YZ\}} and
+\code{\string\typoglowercaseadjustcheck\{ace\-gmn\-opq\-rsu\-vwx\-yz\}} yield
+\sample{\typoguppercaseadjustcheck{ABCDEFGHIJKLMNOPQRSTUVWXYZ}} and
+\sample{\typoglowercaseadjustcheck{acegmnopqrsuvwxyz}}, where the adjustments in effect are
+\code{\{\typogget{uppercaselabelitemadjustments}\}} and
+\code{\{\typogget{lowercaselabelitemadjustments}\}}, respectively.
+
+
\clearpage
\section{Align Last Line}
@@ -8292,7 +9858,7 @@ consult \propername{David Carlisle's} excellent post on \propername{StackExchang
\begin{center}
\setlength{\overfullrule}{0pt}
- \newcommand*{\spacesampletext}[1]{some#1text#1with#1spaces\rule{0.1pt}{1em}}
+ \newcommand*{\spacesampletext}[1]{some#1text#1with#1spaces\rule{.1pt}{1em}}
\newsavebox{\narrowspacesample}
\sbox{\narrowspacesample}{\spacesampletext{\narrowspace}}
\newsavebox{\widespacesample}
@@ -8707,7 +10273,7 @@ New settings: \baselinesetsize.
\newcommand*{\relbls}{130}
\paragraph{\code{\string\setbaselineskippercentage\{\relbls\}}}
-\setbaselineskippercentage{1 + 2 + .3333 * 100 + 100 * 0.6667}% float expression
+\setbaselineskippercentage{1 + 2 + .3333 * 100 + 100 * .6667}% float expression
\setbaselineskippercentage{\relbls}
\fontsizeinfo{baselinesetsize}
New settings: \baselinesetsize.
@@ -8840,7 +10406,7 @@ visually: \rule{.1pt}{.8em}\kern\parindent\rule{.1pt}{.8em};
%
%
% \iffalse
-%<*nomicrotype>
+%<*without-microtype>
\documentclass[]{article}
@@ -8853,7 +10419,9 @@ visually: \rule{.1pt}{.8em}\kern\parindent\rule{.1pt}{.8em};
{\singleguillemetright}
{\singleguillemetleft}
-\usepackage[]{typog}
+\usepackage[uppercaselabelitemadjustments={.1em, .075em, .1em, .1em},
+ lowercaselabelitemadjustments={-.025em, -.05em, -.025em, -.025em}]
+ {typog}
\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
@@ -8868,7 +10436,9 @@ visually: \rule{.1pt}{.8em}\kern\parindent\rule{.1pt}{.8em};
\bigskip
-\noindent
+
+\section*{No Microtype}
+
This example \LaTeX-document uses package~\packagename{typog}
\emph{without} package~\packagename{microtype}.
@@ -8876,6 +10446,38 @@ We want \packagename{typog} to be as usable as possible even without
the nice features that \packagename{microtype} offers.
After all \packagename{typog} is just a front-end for it.
+
+\section*{No EnumItem}
+
+We intentionally do not load package~\packagename{enumitem}, either.
+So, we can test whether \packagename{typog} correctly patches the
+plain \LaTeX{} definition if environment~\texttt{itemize}.
+
+The vertical alignment of the label items was setup for
+uppercase (ABC\typoguppercaseadjustcheck{ABCXYZ}XYZ) and for
+lowercase (ace\typoglowercaseadjustcheck{acexyz}xyz), though
+this is not necessary for the test.
+
+\uppercaseadjustlabelitems{*}
+\begin{itemize}
+\item Level i
+\item Sublist \dots
+ \begin{itemize}
+ \item Level ii
+ \item Sublist \dots
+ \begin{itemize}
+ \item Level iii
+ \item Sublist \dots
+ \begin{itemize}
+ \item Level iv
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+
+
+\section*{CSQuotes}
+
As we are testing a special configuration here anyhow,
we hook up our quotes with package~csquotes
to check whether they interact ok.
@@ -8883,7 +10485,28 @@ to check whether they interact ok.
\enquote{This is the outer part of the phrase
which contains the \enquote{inner part}.}}
\end{document}
-%</nomicrotype>
+%</without-microtype>
+% \fi
+%
+%
+%
+% \iffalse
+%<*minimal-test>
+\documentclass{minimal}
+
+\usepackage{typog}
+
+\newcommand*{\raiseamount}{0.5pt}
+
+\begin{document}
+\begin{typogsetup}{raise*=\raiseamount}
+ Em-dash raised by \the\typogget{raisecapitaldash} (expected: \raiseamount).
+\end{typogsetup}
+
+\fontsizeinfo{typoinfo}
+Document class ``minimal'' sets up font size and line spacing as~\typoinfo.
+\end{document}
+%</minimal-test>
% \fi
%
%
@@ -8902,35 +10525,49 @@ to check whether they interact ok.
/@menu/,/@end menu/d
## Convert sectioning macros to our own hierarchy.
-s/^@chapter \(.*\)$/\\subsection*{\\textls[40]{\1}}/
-s/^@section \(.*\)$/\\subsubsection*{\1}/
+s/^@chapter \(.*\)$/\\subsection{\\titlecase{\1}\\label{\1}}/
+s/^@section \(.*\)$/\\subsubsection{\\titlecase{\1}}\\label{\1}/
## Make `@asis' list resemble the Texinfo format.
s/@table @asis/\\begin{list}{}{\\itemindent=-20pt\\leftmargin=20pt}/
s/@end table/\\end{list}/
+## We substitute our maxipage environment for @display.
+s/@display/\\begin{maxipage}/
+s/@end display/\\end{maxipage}/
+
+## Translate `@example' environments.
+s/@example/\\begin{quote}\\tt\\obeylines/
+s/@end example/\\end{quote}\n\n/
+
## Indenting by four spaces generates a `verbatim' environment.
s/@verbatim/\\begin{verbatim}/
s/@end verbatim/\\end{verbatim}/
-## We substitute @display for our maxipage environment.
-s/@display/\\begin{maxipage}/
-s/@end display/\\end{maxipage}/
-
## The argument format of the URL macro is different.
s/@url{\([^,]*\), \([^}]*\)}/\\href{\1}{\2}/g
## Use our own markup.
s/\.\.\./\\dots{}/g
s/LaTeX/\\LaTeX{}/g
-s/@file/\\textit/g
+s/@file/\\emph/g
s/@strong/\\textbf/g
+s/@var/\\emph/g
s/[w]{/mbox{/g
+## Translate some Texinfo macros.
+s/@backslashchar/\\char`\\\\/g
+s/@lbracechar/\\{/g
+s/@noindent/\\noindent/g
+s/@rbracechar/\\}/g
+
## Quote some special characters.
s/%/\\%/g
s/_/\\_/g
+## Add space around alternative-indicators.
+s/[|]/\\,|\\,/g
+
## Adapt to how a man-page is typeset.
## En-dashes in front of long options really suck!
s/--/-\\nolig*-/g
@@ -8944,7 +10581,7 @@ s/@@/@/g
s/\\jobname/\\textbackslash jobname/g
## Make qualified Perl names breakable.
-s/::/::\\discretionary{}{}{}/g
+s/::/::\\breakpoint*/g
%</teximan2latex>
% \fi
%
@@ -8960,6 +10597,7 @@ use strict;
use warnings;
use Data::Dumper ();
+use Encode ();
use English;
use File::Basename ();
use Getopt::Long;
@@ -9011,32 +10649,32 @@ sub limit_string_length {
## We set all colors to `undef' and fill them later with the values
## of the actual configuration.
my $highlight_patterns = {
- PARTIAL_LINE => {
- FONT_SPEC => [qr#
- \\
- (?: OMS | OMX | OT1 | T1 | TS1 | U )
- (?: /[^/]+ ){5} / \S+ \s
- (?: \([+-]\d+\) )?
- #x, undef],
- MATH => [qr#
- \$
- \\
- (?: LMS | OML )
- (?: /[^/]+ ){5} / \S+ \s
- (?: \([+-]\d+\) )?
- .*?
- \$
- #x, undef]
- },
- WHOLE_LINE => {
- FILL_STATE => [qr#^(?:Under|Over)full \\hbox .*$#, undef],
- FIRST_VBOX => [qr#^%%#, undef],
- HORIZONTAL_BREAKPOINT => [qr#^@@\d+:.*$#, undef],
- HORIZONTAL_BREAK_CANDIDATE => [qr#^@[\\ ].*$#, undef],
- LINE_BREAK_PASS => [qr#^@[a-z]+?pass#, undef],
- TIGHTNESS => [qr#^(?:Loose|Tight) \\hbox .*$#, undef],
- VERTICAL_BREAKPOINT => [qr#^% t=\d+.*$#, undef]
- }
+ PARTIAL_LINE => {
+ FONT_SPEC => [qr#
+ \\
+ (?: OMS | OMX | OT1 | T1 | TS1 | U )
+ (?: /[^/]+ ){5} / \S+ \s
+ (?: \([+-]\d+\) )?
+ #x, undef],
+ MATH => [qr#
+ \$
+ \\
+ (?: LMS | OML )
+ (?: /[^/]+ ){5} / \S+ \s
+ (?: \([+-]\d+\) )?
+ .*?
+ \$
+ #x, undef]
+ },
+ WHOLE_LINE => {
+ FILL_STATE => [qr#^(?:Under|Over)full \\hbox .*$#, undef],
+ FIRST_VBOX => [qr#^%%#, undef],
+ HORIZONTAL_BREAKPOINT => [qr#^@@\d+:.*$#, undef],
+ HORIZONTAL_BREAK_CANDIDATE => [qr#^@[\\ ].*$#, undef],
+ LINE_BREAK_PASS => [qr#^@[a-z]+?pass#, undef],
+ TIGHTNESS => [qr#^(?:Loose|Tight) \\hbox .*$#, undef],
+ VERTICAL_BREAKPOINT => [qr#^% t=\d+.*$#, undef]
+ }
};
@@ -9048,7 +10686,7 @@ sub colorize_line {
return Term::ANSIColor::colored($line, $pattern_color_pair->[1])
if $line =~ $pattern_color_pair->[0];
}
- return $line if $line =~ m#^\.#; # we do not paint box contents yet
+ return $line if $line =~ m#^\.#; # we do not paint box contents yet
$line =~ s#$highlight_patterns->{PARTIAL_LINE}->{MATH}->[0]
#Term::ANSIColor::colored($MATCH, $highlight_patterns->{PARTIAL_LINE}->{MATH}->[1])
@@ -9074,13 +10712,30 @@ my $open_tag_regexp =
>#x;
+sub find_encoder {
+ my $encoding = shift;
+
+ my $encoder;
+
+ if ($encoding) {
+ $encoder = Encode::find_encoding($encoding);
+ if (!$encoder) {
+ issue_warning("encoding @{[quote_literal($encoding)]} unknown; proceeding without decoder");
+ }
+ }
+
+ return $encoder;
+}
+
+
sub grep_log_file {
my ($options, $configuration, $file, $filename, $id_regexp) = @_;
+ my $encoder = find_encoder($options->{ENCODING});
my $job_name;
- my $line_number = 0; # line number in the log file we are inspecting, i.e., $filename
+ my $line_number = 0; # line number in the log file we are inspecting, i.e., $filename
my $match_count = 0;
- my $source_line_number; # line number in TeX file the log refers to, i.e., "$job_name.tex"
+ my $source_line_number; # line number in TeX file the log refers to, i.e., "$job_name.tex"
my $page_number;
my $regexp_modifier = $options->{IGNORE_CASE} ? 'i' : '';
my $id_value;
@@ -9094,6 +10749,8 @@ sub grep_log_file {
chomp $line;
$line_number++;
+ $line = Encode::encode_utf8($encoder->decode($line, Encode::FB_CROAK)) if $encoder;
+
if ($line =~ $close_tag_regexp) {
fail_with_error("$filename: $line_number: mismatched open/close tags") unless @nesting_levels;
pop @nesting_levels;
@@ -9175,19 +10832,25 @@ sub grep_log_file {
}
}
}
+
+ return $match_count;
}
sub show_ids_in_file {
my ($options, $configuration, $file, $filename, $id_regexp) = @_;
+ my $encoder = find_encoder($options->{ENCODING});
my $line_number = 0;
+ my $match_count = 0;
my @nesting_levels;
while (my $line = readline $file) {
chomp $line;
$line_number++;
+ $line = Encode::encode_utf8($encoder->decode($line, Encode::FB_CROAK)) if $encoder;
+
if ($line =~ $close_tag_regexp) {
fail_with_error("$filename: $line_number: mismatched open/close tags") unless @nesting_levels;
pop @nesting_levels;
@@ -9200,6 +10863,7 @@ sub show_ids_in_file {
my $page_number = $+{page_match};
++$MATCH_COUNT;
+ ++$match_count;
push @nesting_levels, 1;
if ($options->{LOG_LINE_NUMBER}) {
@@ -9239,6 +10903,8 @@ sub show_ids_in_file {
print ' ' x $indent, $id_value, "\n";
}
}
+
+ return $match_count;
}
@@ -9256,7 +10922,7 @@ sub open_file_for_reading {
fail_with_error("cannot open @{[quote_filesystem($filename)]}: $OS_ERROR");
}
- $file;
+ return $file;
}
@@ -9272,9 +10938,9 @@ sub grep_or_show {
my ($options, $configuration, $file, $filename, $id_regexp) = @_;
if ($options->{SHOW_ALL_IDS}) {
- show_ids_in_file($options, $configuration, $file, $filename, $id_regexp);
+ return show_ids_in_file($options, $configuration, $file, $filename, $id_regexp);
} else {
- grep_log_file($options, $configuration, $file, $filename, $id_regexp);
+ return grep_log_file($options, $configuration, $file, $filename, $id_regexp);
}
}
@@ -9282,6 +10948,8 @@ sub grep_or_show {
sub scan_files {
my ($options, $configuration, $id_regexp, $log_filenames) = @_;
+ my $match_count = 0;
+
if (@$log_filenames) {
foreach my $log_filename (@$log_filenames) {
$log_filename = 'stdin' if $log_filename eq '-';
@@ -9294,15 +10962,17 @@ sub scan_files {
print $filename_header;
}
my $file = open_file_for_reading($log_filename);
- grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
+ $match_count += grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
close_file($file, $log_filename);
}
} else {
my $log_filename = 'stdin';
my $file = open_file_for_reading($log_filename);
- grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
+ $match_count = grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
close_file($file, $log_filename);
}
+
+ return $match_count;
}
@@ -9319,10 +10989,12 @@ sub redirect_and_scan_files {
my $stdout = select $pager;
$pager->autoflush;
- scan_files($options, $configuration, $id_regexp, $log_filenames);
+ my $match_count = scan_files($options, $configuration, $id_regexp, $log_filenames);
close $pager or issue_warning "error occurred while closing the pager (pid: $pid) pipe: $OS_ERROR";
select $stdout;
+
+ return $match_count;
}
@@ -9431,6 +11103,7 @@ sub setup_configuation {
my $default_options = {
COLORIZE_MODE => 'auto',
DEBUG => 0,
+ ENCODING => undef,
ID => 0,
IGNORE_CASE => 0,
JOB_NAME => 0,
@@ -9452,6 +11125,7 @@ Options
--colour [WHEN] use color to highlight specific log contents
WHEN is 'always', 'never', or 'auto'
-C, --config KEY=VALUE set configuration KEY to VALUE
+ -E, --encoding ENCODING set character ENCODING of LOG-FILE
-i, --[no-]id print matching id with output lines
-y, --[no-]ignore-case ignore case distinctions in patterns and data
-j, --[no-]job-name print \\jobname with output lines
@@ -9461,10 +11135,12 @@ Options
-P, --[no-]pager redirect output to pager
-w, --[no-]word-regexp match only whole words
- -a, --all, --any show all IDs in LOG-FILE
+ -a, --all, --any discover all IDs in LOG-FILE
+
--debug turn on debug output
-h, --help display this help and exit
--show-config show default configuration and exit
+ --show-encodings show all known encodings and exit
-V, --version show version information and exit
HELP_TEXT
@@ -9473,6 +11149,17 @@ HELP_TEXT
}
+sub show_encodings {
+ my @all_encodings = Encode->encodings(':all');
+
+ foreach my $encoding (@all_encodings) {
+ print "$encoding\n";
+ }
+
+ exit 0;
+}
+
+
sub show_configuration {
my $format_string_value = sub {quote_literal($default_configuration->{$_[0]})};
@@ -9508,10 +11195,10 @@ FIXED_CONFIGURATION_TEXT
sub show_version {
print <<VERSION_TEXT;
-typog-grep 0.1
+typog-grep @RELEASE@
Copyright (C) 2024 by Ch. L. Spiel
-License LPPL: LaTeX Project Public License version 1.3 or later
+License LPPL: LaTeX Project Public License version 1.3c or later
VERSION_TEXT
exit 0;
@@ -9527,6 +11214,7 @@ sub get_options {
'color|colour=s' => \$options->{COLORIZE_MODE},
'C|configuration=s' => sub{setup_configuation($_[1], $configuration)},
'debug+' => \$DEBUG,
+ 'E|encoding=s' => \$options->{ENCODING},
'h|help' => \&show_help,
'i|id!' => \$options->{ID},
'y|ignore-case!' => \$options->{IGNORE_CASE},
@@ -9535,13 +11223,18 @@ sub get_options {
'N|log-line-number!' => \$options->{LOG_LINE_NUMBER},
'p|page-number!' => \$options->{PAGE_NUMBER},
'P|pager!' => \$options->{REQUEST_PAGER},
+ 'show-encodings' => \&show_encodings,
'show-config' => \&show_configuration,
'V|version' => \&show_version,
'w|word-regexp!' => \$options->{WORD_REGEXP}) or
- fail_with_error('problems while parsing options');
+ fail_with_error('problems while parsing options');
- fail_with_error("unknown colorize mode @{[quote_literal($options->{COLORIZE_MODE})]}")
- unless $options->{COLORIZE_MODE} =~ m/^(?:always|auto|never)$/i
+ if ($options->{COLORIZE_MODE}) {
+ fail_with_error("unknown colorize mode @{[quote_literal($options->{COLORIZE_MODE})]}")
+ unless $options->{COLORIZE_MODE} =~ m/^(?:always|auto|never)$/i;
+ } else {
+ $options->{COLORIZE_MODE} = 'auto';
+ }
}
@@ -9565,14 +11258,27 @@ sub do_colorize {
sub main {
$OUTPUT_IS_REDIRECTED = -t STDOUT ? 0 : 1;
- my $options = {%$default_options};
my $configuration = {%$default_configuration};
+ my $options = {%$default_options};
+ debug_print(Data::Dumper::Dumper(['Default Configuration', $configuration]));
+ debug_print(Data::Dumper::Dumper(['Default Options', $options]));
+
+ my $user_options = {};
+ my $user_configuration = {};
+ get_options($user_options, $user_configuration);
+ debug_print(Data::Dumper::Dumper(['User Configuration', $user_configuration]));
+ debug_print(Data::Dumper::Dumper(['User Options', $user_options]));
+ while (my ($key, $value) = each %$user_options) {
+ $options->{$key} = $value if $value;
+ }
+ while (my ($key, $value) = each %$user_configuration) {
+ $configuration->{$key} = $value if $value;
+ }
+ debug_print(Data::Dumper::Dumper(['Final Configuration', $configuration]));
+ debug_print(Data::Dumper::Dumper(['Final Options', $options]));
- get_options($options, $configuration);
$options->{COLORIZE_OUTPUT} = do_colorize($options->{COLORIZE_MODE});
initialize_highlighting_from_configuration($configuration);
- debug_print(Data::Dumper::Dumper($configuration));
- debug_print(Data::Dumper::Dumper($options));
my $id_regexp;
if ($options->{SHOW_ALL_IDS}) {
@@ -9584,17 +11290,18 @@ sub main {
$id_regexp = shift @ARGV;
}
- if ($options->{REQUEST_PAGER} && $OUTPUT_IS_REDIRECTED) {
+ if ($user_options->{REQUEST_PAGER} && $OUTPUT_IS_REDIRECTED) {
issue_warning("option @{[quote_literal('--pager')]} ignored because output is redirected");
}
my $use_pager = $options->{REQUEST_PAGER} && !$OUTPUT_IS_REDIRECTED;
+ my $match_count;
if ($use_pager) {
- redirect_and_scan_files($options, $configuration, $id_regexp, \@ARGV);
+ $match_count = redirect_and_scan_files($options, $configuration, $id_regexp, \@ARGV);
} else {
- scan_files($options, $configuration, $id_regexp, \@ARGV);
+ $match_count = scan_files($options, $configuration, $id_regexp, \@ARGV);
}
- exit ($MATCH_COUNT == 0);
+ exit ($match_count == 0);
}
@@ -9615,7 +11322,7 @@ main();
=head1 NAME
-typog-grep - grep for typog-inspect elements in LaTeX log files
+typog-grep - specialized grep for typog-inspect elements in LaTeX log files
=head1 SYNOPSIS
@@ -9628,9 +11335,70 @@ typog-grep - grep for typog-inspect elements in LaTeX log files
=back
-The first form shows all C<E<lt>typog-inspect id="I<ID>" ...E<gt>> elements in F<LOG-FILE>.
+The first form, ``discovery mode'', shows all I<ID>s of
+
+=begin text
+
+<typog-inspect id="ID" ...>
+
+=end text
+
+=begin man
+
+.RS
+.EX
+<typog-inspect id="\fI\,ID\/\fP" ...>
+.EE
+.RE
+
+=end man
+
+=begin texinfo
+
+@example
+<typog-inspect id="@var{ID}" ...>
+@end example
+@noindent
+
+=end texinfo
+
+Z<>
+elements in F<LOG-FILE>.
+
+The second form shows the contents, I<LOG-DATA>, of the elements
-The second form shows the contents of C<E<lt>typog-inspect id="I<ID>" ...E<gt>> elements
+=begin text
+
+<typog-inspect id="ID" ...>
+LOG-DATA
+</typog-inspect>
+
+=end text
+
+=begin man
+
+.RS
+.EX
+<typog-inspect id="\fI\,ID\/\fP" ...>
+\fILOG-DATA\fP
+</typog-inspect>
+.EE
+.RE
+
+=end man
+
+=begin texinfo
+
+@example
+<typog-inspect id="@var{ID}" ...>
+@var{LOG-DATA}
+</typog-inspect>
+@end example
+@noindent
+
+=end texinfo
+
+Z<>
whose I<ID>s match I<REGEXP> in F<LOG-FILE>.
If no F<LOG-FILE> is given read from F<stdin>.
@@ -9639,57 +11407,101 @@ The S<filename C<->> is synonymous to F<stdin>.
=head1 DESCRIPTION
-B<typog-grep> is a tailored post-processor for LaTeX log files
-and the C<typoginspect> environment as provided by S<package typog>.
+B<typog-grep> is a tailored post-processor for LaTeX S<F<log> files>
+and the C<typoginspect> environment as provided by the S<LaTeX package typog>.
It shares more with the venerable
L<B<sgrep>|https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html>
than with S<POSIX L<B<grep>|https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html>>.
-The LaTeX user brackets her text in
+In the LaTeX source file the user brackets her text or code
+in a C<typoginspect> environment:
+
+=begin text
+
+\begin{typoginspect}{ID}
+ TEXT-OR-CODE-TO-INVESTIGATE
+\end{typoginspect}
+
+=end text
+
+=begin man
+
+.RS
+.EX
+\ebegin{typoginspect}{\fI\,ID\/\fP}
+\fITEXT-OR-CODE-TO-INVESTIGATE\fP
+\eend{typoginspect}
+.EE
+.RE
- \begin{typoginspect}{ID}
- Text and code to investigate
- \end{typoginspect}
+=end man
+
+=begin texinfo
+
+@example
+@backslashchar{}begin@lbracechar{}typoginspect@rbracechar{}@lbracechar{}@var{ID}@rbracechar{}
+@var{TEXT-OR-CODE-TO-INVESTIGATE}
+@backslashchar{}end@lbracechar{}typoginspect@rbracechar{}
+@end example
+@noindent
+
+=end texinfo
+Z<>
where I<ID> is used to identify one or more bracketed snippets.
I<ID> does not have to be unique.
The I<REGEXP> mechanism makes it easy to select groups of related I<ID>s
if they are named accordingly.
-In F<LOG-FILE> the environment shows up, packed with tracing information, as
+In F<LOG-FILE> the result of the environment shows up,
+packed with tracing information, as
-=begin texinfo
+=begin text
-@display
-@relax
+<typog-inspect id="ID" job="JOB-NAME" line="LINE-NUMBER" page="PAGE-NUMBER">
+ LOG-DATA
+</typog-inspect>
-=end texinfo
+=end text
+
+=begin man
- <typog-inspect id="ID" job="JOB-NAME" line="LINE-NUMBER" page="PAGE-NUMBER">
- Trace Data
- </typog-inspect>
+.RS
+.EX
+<typog-inspect id="\fI\,ID\/\fP" job="\fI\,JOB-NAME\/\fP" line="\fI\,LINE-NUMBER\/\fP" page="\fI\,PAGE-NUMBER\/\fP">
+\fILOG-DATA\fP
+</typog-inspect>
+.EE
+.RE
+
+=end man
=begin texinfo
-@end display
-@relax
+@example
+<typog-inspect id="@var{ID}" job="@var{JOB-NAME}" line="@var{LINE-NUMBER}" page="@var{PAGE-NUMBER}">
+@var{LOG-DATA}
+</typog-inspect>
+@end example
+@noindent
=end texinfo
+Z<>
where all the capital-letter sequences are meta-variables
and in particular
I<JOB-NAME> is the expansion of C<\jobname>,
I<LINE-NUMBER> is the LaTeX source file line number
of the beginning of the C<typoginspect> environment,
and I<PAGE-NUMBER> is the page where
-the output of S<C<Text and code to investigate>> occurs.
+the output of S<C<TEXT-OR-CODE-TO-INVESTIGATE>> occurs.
B<typog-grep> reveals the contents of F<LOG-FILE>
between C<E<lt>typog-inspect id="I<ID>" ...E<gt>>
-and C<E<lt>/typog-inspectE<gt>> excluding the XML-tags.
+and C<E<lt>/typog-inspectE<gt>> excluding the XML-tags themselves.
Access the I<JOB-NAME>, I<LINE-NUMBER>, and I<PAGE-NUMBER>
with the commandline options
-B<--job-name>, B<--line-number>, and B<--page-number>, respectively.
+B<--job-name>, B<--line-number>, and B<--page-number>, respectively.
Use B<--id> to show the name of the IDs that matched I<REGEXP>.
C<typoginspect> environments can be nested.
@@ -9707,11 +11519,18 @@ The list of options is sorted by the names of the long options.
=item B<-a>, B<--all>, B<--any>
ID-discovery mode:
-Show all C<typog-inspect> elements independent of any matching patterns.
+Discover all C<typog-inspect> elements independent of any matching patterns
+and print their I<ID>s.
+The results are printed in their order of occurrence in the respective F<LOG-FILE>s.
+Pipe the output into B<sort> to get alphabetically ordered I<ID>s.
+
+Augment with options
+B<--job-name>, B<--line-number>, B<--log-line-number>, or S<B<--page-number>>
+for more information.
=item B<--color>, B<colour> I<WHEN>
-Colorize specific log contents for the matching ids.
+Colorize specific log contents for the matching I<ID>s.
The S<argument I<WHEN>> determines when to apply color:
C<always>, C<never>, S<or C<auto>>.
The setting C<auto> checks whether standard output has been redirected.
@@ -9720,29 +11539,45 @@ This is the default.
=item B<-C>, B<--config> I<KEY>=I<VALUE>[:I<KEY>=I<VALUE>[:...]]
Set one or more configuration I<KEY> to I<VALUE> pairs.
-See S<Sec. CONFIGURATION> below for a description of all available configuration items.
-Use option B<--show-config> to display the default configuration.
+See section L</CONFIGURATION> for a description
+of all available configuration items.
+Use S<option B<--show-config>> to display the default configuration.
=item B<--debug>
Turn on debug output on F<stderr>.
+=item B<-E>, B<--encoding> I<ENCODING>
+
+Set the I<ENCODING> of F<LOG-FILE> for the translation to UTF-8.
+The default is unset.
+
+Use this option to get rid of pesky
+S<"E<lt>I<HEX-DIGITS>E<gt>" escapes> on UTF-8 terminals.
+See S<option B<--show-encodings>> for the known encodings and
+Encode::Supported for a summary of all encodings.
+See also S<section L</Some Common Encodings>>.
+
+Apply L<B<iconv>|https://pubs.opengroup.org/onlinepubs/9699919799/utilities/iconv.html>
+(POSIX) or L<B<recode>|https://github.com/rrthomas/recode/> (GNU) on F<LOG-FILE>
+before this tool to avoid having to use S<option B<--encoding>>.
+
=item B<-h>, B<--help>
Display brief help then exit.
=item B<-i>, B<--[no-]id>
-Print the actual id name that matched I<REGEXP>.
-Control the appearance of the matching id with configuration S<item C<id-heading>>.
+Print the actual ID-name that matched I<REGEXP>.
+Control the appearance of the matching I<ID> with configuration S<item C<id-heading>>.
=item B<-y>, B<--[no-]ignore-case>
-Match ids while ignoring case distinctions in patterns and data.
+Match I<ID>s while ignoring case distinctions in patterns and data.
=item B<-j>, B<--[no-]job-name>
-Print the C<\jobname> that B<tex> associated with the input file.
+Print the C<\jobname> that B<latex> associated with the input file.
=item B<-n>, B<--[no-]line-number>
@@ -9766,6 +11601,10 @@ Redirect output from F<stdout> to the configured pager.
Show the default configuration and exit.
+=item B<--show-encodings>
+
+Show all known encodings and exit.
+
=item B<-V>, B<--version>
Show version information and exit.
@@ -9789,26 +11628,26 @@ S<Default: C<%s:>.>
=item C<id-heading>=C<0>E<verbar>C<1>
-Choose between printing the matching ids with S<option B<--id>>:
+Choose between printing the matching I<ID>s with S<option B<--id>>:
S<Inline (C<0>)> or heading before the matching data (C<1>).
S<Default: C<0>.>
=item C<id-heading-format>=I<FORMAT>
-Control the I<FORMAT> for printing matching ids in heading-mode,
+Control the I<FORMAT> for printing matching I<ID>s in heading-mode,
where I<FORMAT> is passed to Perl's C<printf>.
S<Default: C<--E<gt> %s E<lt>-->.>
=item C<id-indent>=I<INDENT>
Indentation of nested typog-inspect tags.
-Only used in ``discovery'' mode (first form), i.e., if B<--all> is active.
+Only used in ``discovery mode'' (first form), i.e., if S<B<--all>> is active.
S<Default: 8.>
=item C<id-max-length>=I<MAXIMUM-LENGTH>
-Set the maximum length of a matching id for printing.
-It a matching id exceeds this length it will be truncated
+Set the maximum length of a matching I<ID> for printing.
+It a matching I<ID> exceeds this length it will be truncated
and the last three characters (short of I<MAXIMUM-LENGTH>) will be replaced by dots.
S<Default: 40.>
@@ -9874,11 +11713,11 @@ Color of lines with horizontal S<breakpoints C<@@>>.
=item C<id-color>
-Color of matching ids when printed inline.
+Color of matching I<ID>s when printed inline.
=item C<id-heading-color>
-Color of matching ids when printed in heading form.
+Color of matching I<ID>s when printed in heading form.
=item C<line-break-pass-color>
@@ -9947,15 +11786,93 @@ C<bold>, C<dark>, C<italic>, C<underline>, C<reverse>
=back
+=head2 Some Common Encodings
+
+The following list shows some encodings
+that are suitable for S<option B<--encoding>>.
+
+=over 4
+
+=item Latin-1, Western European
+
+C<iso-8859-1>, C<cp850>, C<cp860>, C<cp1252>
+
+=item Latin-2, Central European
+
+C<iso-8859-2>, C<cp852>, C<cp1250>
+
+=item Latin-3, South European (Esperanto, Maltese)
+
+C<iso-8859-3>
+
+=item Latin-4, North European (Baltics)
+
+C<iso-8859-4>
+
+=item Cyrillics
+
+C<iso-8859-5>, C<cp855>, C<cp866> (Ukrainian), C<cp1251>
+
+=item Arabic
+
+C<iso-8859-6>, C<cp864>, C<cp1006> (Farsi), C<cp1256>
+
+=item Greek
+
+C<iso-8859-7>, C<cp737>, C<cp1253>
+
+=item Hebrew
+
+C<iso-8859-8>, C<cp862>, C<cp1255>
+
+=item Turkish
+
+C<iso-8859-9>, C<cp857>, C<cp1254>
+
+=item Nordic
+
+C<iso-8859-10>, C<cp865>, C<cp861> (Icelandic)
+
+=item Thai
+
+C<iso-8859-11>, C<cp874>
+
+=item Baltic
+
+C<iso-8859-13>, C<cp775>, C<cp1257>
+
+=item Celtic
+
+C<iso-8859-14>
+
+=item Latin-9 (sometimes called Latin0)
+
+C<iso-8859-15>
+
+=item Latin-10
+
+C<iso-8859-16>
+
+=back
+
+
=head1 EXIT STATUS
The exit status is 0 if at least one I<ID> matched I<REGEXP>,
1 if no I<ID> matched I<REGEXP>, and 2 if an error occurred.
+=head1 CAVEATS
+
+The end tag C<< </typog-inspect> >> sometimes gets placed too early in the output and the trace
+I<seems> truncated. However, LaTeX reliably logs the requested the trace information, but the
+write operations for trace data and the code which is used to print the S<end tag> are not
+synchronized.
+
+
=head1 SEE ALSO
-B<grep>(1), B<printf>(3), B<Term::ANSIColor>(pm)
+B<grep>(1), B<printf>(3), B<Encode::Supported>(pm), B<Term::ANSIColor>(pm)
=cut
diff --git a/macros/latex/contrib/typog/typog.ins b/macros/latex/contrib/typog/typog.ins
index 06378d86bb..23c8b33366 100644
--- a/macros/latex/contrib/typog/typog.ins
+++ b/macros/latex/contrib/typog/typog.ins
@@ -1,11 +1,11 @@
%% Copyright (C) 2024 by Ch. L. Spiel
%%
%% This work may be distributed and/or modified under the conditions
-%% of the LaTeX Project Public License, either version 1.3 of this
+%% of the LaTeX Project Public License, either version 1.3c of this
%% license or (at your option) any later version. The latest version
%% of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2003/12/01 or later.
@@ -23,11 +23,11 @@ This is a generated file.
Copyright (C) 2024 by Ch. L. Spiel
This work may be distributed and/or modified under the conditions
-of the LaTeX Project Public License, either version 1.3 of this
+of the LaTeX Project Public License, either version 1.3c of this
license or (at your option) any later version. The latest version
of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
version 2003/12/01 or later.
This work has the LPPL maintenance status `maintained'.
@@ -37,7 +37,9 @@ The Current Maintainer of this work is Ch. L. Spiel.
This work consists of the files typog.dtx and typog.ins
and the derived files typog.sty, slant-angle.mp,
crooked-paragraphs.mp, smooth-parshapes.mp, title.mp,
-typog-example.tex, typog-nomt.tex, typog-grep.pl,
+typog-example.tex, typog-minimal-test.tex,
+typog-without-microtype-test.tex
+typog-grep.pl.in, typog-grep.pl,
typog-grep.pod, and teximan2latex.sed.
@@ -48,20 +50,22 @@ typog-grep.pod, and teximan2latex.sed.
\generate{\file{typog.sty}{\from{\source}{package}}
\file{typog-example.tex}{\from{\source}{example}}
- \file{typog-nomt.tex}{\from{\source}{nomicrotype}}
- \file{typog.ist}{\from{\source}{index-style}}}
+ \file{typog-minimal-test.tex}{\from{\source}{minimal-test}}
+ \file{typog-without-microtype-test.tex}{\from{\source}{without-microtype}}}
\nopostamble
-\generate{\file{title.mp}{\from{\source}{title}}
+\generate{\file{crooked-paragraphs.mp}{\from{\source}{crookedparagraphs}}
\file{slant-angle.mp}{\from{\source}{slantangle}}
- \file{crooked-paragraphs.mp}{\from{\source}{crookedparagraphs}}
- \file{smooth-parshapes.mp}{\from{\source}{smoothparshapes}}}
+ \file{smooth-parshapes.mp}{\from{\source}{smoothparshapes}}
+ \file{title.mp}{\from{\source}{title}}
+ \file{typog.gst}{\from{\source}{changes-style}}
+ \file{typog.ist}{\from{\source}{index-style}}}
\nopreamble
\generate{\file{teximan2latex.sed}{\from{\source}{teximan2latex}}
- \file{typog-grep.pl}{\from{\source}{typog-grep}}
+ \file{typog-grep.pl.in}{\from{\source}{typog-grep}}
\file{typog-grep.pod}{\from{\source}{typog-grep-documentation}}}
diff --git a/macros/latex/contrib/univie-ling/README b/macros/latex/contrib/univie-ling/README
index b90c86e8cc..c73460f0b4 100644
--- a/macros/latex/contrib/univie-ling/README
+++ b/macros/latex/contrib/univie-ling/README
@@ -97,6 +97,19 @@ also have a look at the example files.
== CHANGES ==
+V. 2.7 (2024-07-23):
+ - univie-ling-wlg: Use proper spacing with covington's
+ reflist environment.
+ - univie-ling-poster: add smallmargins option.
+ - univie-ling-thesis: fix running headers in twoside mode.
+ - univie-ling-handout:
+ - univie-ling-expose:
+ - univie-ling-paper:
+ - univie-ling-thesis:
+ - univie-ling-wlg:
+ * Fix empty argument check in \weblink.
+ * Fix spacing after \weblink.
+
V. 2.6 (2024-06-27):
- univie-ling-poster: add smallmargins option.
- univie-ling-thesis: fix running headers in twoside mode.
diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
index 43b942d15c..985dc19f98 100644
--- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
+++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
@@ -38,7 +38,7 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesFile{univie-ling.bbx}[2024/06/27 v.2.6 biblatex bibliography style]
+\ProvidesFile{univie-ling.bbx}[2024/07/23 v.2.7 biblatex bibliography style]
% Load base style (authoryear-comp)
\RequireBibliographyStyle{authoryear-comp}
diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
index 30064c8f91..7600056940 100644
--- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
+++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
@@ -36,7 +36,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesFile{univie-ling.cbx}[2024/06/27 v.2.6 biblatex citation style]
+\ProvidesFile{univie-ling.cbx}[2024/07/23 v.2.7 biblatex citation style]
\RequireCitationStyle{authoryear-comp}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
index 1773af1838..8652b32a5b 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
index 2f632ebda3..a8ac59e821 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
index 484e4365b5..48b41cac87 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
index b61d77074d..608e203154 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
index 37e2bc3e00..5ac9aba1d1 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
index d4885d0743..49efca45fa 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
index 76ab0629d5..f2260ffeb4 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
index 0b9643c0bd..b16ccfe334 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
index 34ac74afc7..9673abfdb0 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex
index 527f8d0498..7b01c0a88f 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex
@@ -2,9 +2,7 @@
% Übersetzen mit pdflatex -- biber -- pdflatex
% Verwende den vom Hochschulschriftenservice verlangten Standard PDF/A1-b
% (siehe http://e-theses.univie.ac.at/elektronische_einreichung.html)
-% pdfx is currently broken
-%\documentclass[naustrian,pdfa]{univie-ling-thesis}
-\documentclass[naustrian]{univie-ling-thesis}
+\documentclass[naustrian,pdfa]{univie-ling-thesis}
\usepackage{babel}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
index 800946d7c8..0d550fa286 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex
index c2f7c5f4a0..0be7edb600 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex
@@ -2,9 +2,7 @@
% Run pdflatex -- biber -- pdflatex
% Use the PDF/A1-b standard as required by the Hochschulschriften-Service
% (see http://e-theses.univie.ac.at/elektronische_einreichung.html)
-% pdfx is currently broken
-%\documentclass[naustrian,english,pdfa]{univie-ling-thesis}
-\documentclass[naustrian,english]{univie-ling-thesis}
+\documentclass[naustrian,english,pdfa]{univie-ling-thesis}
\usepackage{babel}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
index b65b92ef1b..8a1d9155c6 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
index 2e8562ef5d..f811c049e4 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
index d47fcaaa0b..7efd2c2f36 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
index fcb89d9727..c3d1c66805 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -370,6 +370,11 @@ Templates are provided as well:
\section{Release History}
\begin{itemize}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
index bb7dfd5c25..a253d4003e 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
index 8fbb627024..bdd72da44e 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -415,6 +415,11 @@ Templates are provided as well:
\section{Release History}
\begin{description}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
index 9f7f328fbb..e04efcd52f 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
index 6ade5e4b72..d6f5293a89 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -411,6 +411,11 @@ Templates are provided as well:
\section{Release History}
\begin{itemize}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
index 204245e59f..06d64c7638 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
index c8580538c3..1985658b78 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
@@ -65,7 +65,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -577,6 +577,11 @@ Templates are provided as well:
\section{Release History}
\begin{description}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
index 4c9fb2a37c..b77ad97265 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
index 92d06ea952..2feb157bce 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
@@ -59,7 +59,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -433,6 +433,11 @@ Templates are provided as well:
\section{Release History}
\begin{itemize}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
index 6276518546..f2a5a48dc2 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
index a12fccdeac..6ca75cc0ed 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
@@ -59,7 +59,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
@@ -263,6 +263,10 @@ If the class option \joption{biblatex=true} is set, the \uvlt\ class loads a bib
\emph{Unified Style Sheet for Linguistics} of the LSA (\emph{Linguistic Society of America}).
In order to conform to this style, the \uvlt\ class uses the \textsf{biblatex} package with the \textsf{univie-ling} style that is included in the \textsf{univie-ling} bundle.
+If, for some reason, you do not want to use \textsf{biblatex} and prefer to have a manually constituted bibliography\footnote{A reason might be that you transform
+a paper submitted in a an office file format to \LaTeX.}, use the \texttt{reflist} environment
+and separate each entry by a blank line. Since this environment is provided by \textsf{covington}, the \joption{covington} options must not be \joption{false}.
+
\section{\LyX\ layouts and templates}
A layout for \LyX\footnote{See \url{https://www.lyx.org}.}\ can be retrieved from \url{https://github.com/jspitz/univie-ling/raw/master/lyx/layouts/univie-ling-wlg.layout}.
@@ -274,6 +278,12 @@ A template is provided as well: \url{https://github.com/jspitz/univie-ling/raw/m
\raggedright
\begin{itemize}
+ \item 2024/07/23 (v.\,2.7)
+ \begin{itemize}
+ \item Use proper spacing with \textsf{covington}'s \texttt{reflist} environment.
+ \item Fix spacing after \jfcsmacro{weblink}.
+ \item Fix empty argument check in \jfcsmacro{weblink}.
+ \end{itemize}
\item 2024/06/27 (v.\,2.6)
\begin{itemize}
\item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
index b0f3e13826..394cddb692 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.tex b/macros/latex/contrib/univie-ling/doc/univie-ling.tex
index 34435a3876..f88f1fcea4 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling.tex
@@ -42,7 +42,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.6, 2024/06/27}
+\date{Version 2.7, 2024/07/23}
\maketitle
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
index b31ae0a4f7..f7ff0916f4 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
@@ -33,7 +33,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesPackage{univie-ling-expose}[2024/06/27 v.2.6 Univie Linguistic Exposes (JSp)]
+\ProvidesPackage{univie-ling-expose}[2024/07/23 v.2.7 Univie Linguistic Exposes (JSp)]
%% ============================================================
@@ -274,10 +274,10 @@
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
index 01abf2e31c..73c5a325da 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
@@ -35,7 +35,7 @@
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesClass{univie-ling-handout}[2024/06/27 v.2.6 Univie Ling handout class (JSp)]
+\ProvidesClass{univie-ling-handout}[2024/07/23 v.2.7 Univie Ling handout class (JSp)]
%% ============================================================
%% CLASS OPTIONS
@@ -933,10 +933,10 @@
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
index 88ec71a6fa..eda1430345 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
@@ -32,7 +32,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesPackage{univie-ling-paper}[2024/06/27 v.2.6 Univie Linguistic Papers (JSp)]
+\ProvidesPackage{univie-ling-paper}[2024/07/23 v.2.7 Univie Linguistic Papers (JSp)]
%% ============================================================
@@ -296,10 +296,10 @@ This includes all drawings, sketches, graphics and internet sources.}
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
index 9a354e25c7..87f5092d4c 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
@@ -34,7 +34,7 @@
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesClass{univie-ling-poster}[2024/06/27 v.2.6 Univie Ling poster class (JSp)]
+\ProvidesClass{univie-ling-poster}[2024/07/23 v.2.7 Univie Ling poster class (JSp)]
%% ============================================================
%% CLASS OPTIONS
@@ -909,10 +909,10 @@
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
index 4813af3abc..91d34276a0 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
@@ -33,7 +33,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesPackage{univie-ling-thesis}[2024/06/27 v.2.6 Univie Linguistic Theses (JSp)]
+\ProvidesPackage{univie-ling-thesis}[2024/07/23 v.2.7 Univie Linguistic Theses (JSp)]
%% ============================================================
@@ -288,10 +288,10 @@ This includes all drawings, sketches, graphics and internet sources.}
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
index e85daaabe0..00deb089cc 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
@@ -34,7 +34,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\ProvidesPackage{univie-ling-wlg}[2024/06/27 v.2.6 Univie WLG journal layout (JSp)]
+\ProvidesPackage{univie-ling-wlg}[2024/07/23 v.2.7 Univie WLG journal layout (JSp)]
%% ============================================================
@@ -225,10 +225,10 @@
\NewDocumentCommand\weblink{mo}{%
\url{#1}%
\IfNoValueTF{#2}%
- {\ifthenelse{\isempty{\wlg@urldate}}{}{%
+ {\ifx\wlg@urldate\empty\else%
\ \urldate{\wlg@urldate}%
- }}%
- {\ \urldate{#2}}
+ \fi}%
+ {\ \urldate{#2}}%
}
}
@@ -1043,6 +1043,8 @@
\if@wlg@covington
\RequirePackage{covington}
\renewcommand{\p@equation}[1]{(#1)}
+ \setlength\reflistindent{\parindent}
+ \setlength\reflistparsep{0pt}
\fi
diff --git a/macros/latex/contrib/ut-thesis/README b/macros/latex/contrib/ut-thesis/README
index 785d74c606..ed1db06b9d 100644
--- a/macros/latex/contrib/ut-thesis/README
+++ b/macros/latex/contrib/ut-thesis/README
@@ -5,8 +5,8 @@ as of Fall 2020:
[https://www.sgs.utoronto.ca/academic-progress/program-completion/formatting]
Copyright (c) 1998-2013 Francois Pitt <fpitt@cs.utoronto.ca>,
- 2020-2023 Jesse Knight <jesse.knight@mail.utoronto.ca>
-last updated at 13:00 (EST) on Wed 08 Feb 2023
+ 2020-2024 Jesse Knight <jesse.x.knight@protonmail.com>
+last updated at 09:00 (BST) on Fri 26 July 2024
This work may be distributed and/or modified under the conditions of
the LaTeX Project Public Licence, either version 1.3c of this licence
@@ -22,7 +22,7 @@ and is not covered by the licence.
This work has the LPPL maintenance status "maintained".
The Current Maintainer of this work is
-Jesse Knight <jesse.knight@mail.utoronto.ca>.
+Jesse Knight <jesse.x.knight@protonmail.com>.
This work consists of the files:
- README
@@ -31,12 +31,13 @@ This work consists of the files:
- ut-thesis.pdf (derived user manual)
- ut-thesis.cls (derived class file)
-To generate ut-thesis.cls (class file), run: pdflatex ut-thesis.ins
-To generate ut-thesis.pdf (documentation), run: pdflatex ut-thesis.dtx
-To use the class, make ut-thesis.cls visible to your LaTeX distribution,
-by placing ut-thesis.cls either in your working directory,
-or in your texmf tree, perhaps: $texmf/tex/latex/ut-thesis/ut-thesis.cls
-and the documentation: $texmf/doc/latex/ut-thesis/ut-thesis.pdf
+Install ut-thesis from your favourite LaTeX distribution.
+Alternatively, or to use the latest version:
+- generate ut-thesis.cls (class file) using: pdflatex ut-thesis.ins
+ and copy to: $texmf/tex/latex/ut-thesis/ut-thesis.cls
+- generate ut-thesis.pdf (documentation) using: pdflatex ut-thesis.dtx
+ and copy to: $texmf/doc/latex/ut-thesis/ut-thesis.pdf
+or simply copy ut-thesis.cls to your working directory.
See version history on GitHub:
-[https://github.com/jessexknight/ut-thesis] \ No newline at end of file
+[https://github.com/jessexknight/ut-thesis]
diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.dtx b/macros/latex/contrib/ut-thesis/ut-thesis.dtx
index 873f0bd2c5..9d6a704148 100644
--- a/macros/latex/contrib/ut-thesis/ut-thesis.dtx
+++ b/macros/latex/contrib/ut-thesis/ut-thesis.dtx
@@ -5,7 +5,7 @@
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{ut-thesis}
%<*class>
-[2023/02/08 v3.1.7 University of Toronto thesis class]
+[2024/07/26 v3.1.8 University of Toronto thesis class]
%</class>
%
%<*driver>
@@ -33,15 +33,15 @@
% \GetFileInfo{ut-thesis.dtx}
%
% \title{The \textit{ut-thesis} class
-% \thanks{\fileversion~[\filedate] CTAN repository:
-% \href{https://ctan.org/pkg/ut-thesis}
-% {\texttt{https://ctan.org/pkg/ut-thesis}}}}
+% \thanks{\fileversion~[\filedate]\hfill
+% \href{https://ctan.org/pkg/ut-thesis}{\texttt{https://ctan.org/pkg/ut-thesis}}\hfill
+% \href{https://github.com/jessexknight/ut-thesis}{\texttt{github.com/jessexknight/ut-thesis}}}}
% \author{
% Francois Pitt,
% Jesse Knight
% \thanks{maintainer, contact:
-% \href{mailto:jesse.knight@mail.utoronto.ca}
-% {\texttt{jesse.knight@mail.utoronto.ca}}}
+% \href{mailto:jesse.x.knight@protonmail.com}
+% {\texttt{jesse.x.knight@protonmail.com}}}
% }
%
% \maketitle
@@ -79,7 +79,7 @@
%
% The default options produce a final copy, ready for submission to
% the University of Toronto School of Graduate Studies (SGS).
-% Some examples are available on
+% There is some example code on
% \href{https://github.com/jessexknight/ut-thesis/tree/master/test}{GitHub}.
%
% \subsection{Options}\label{use:opt}
@@ -616,4 +616,4 @@
\setlength\belowcaptionskip{1ex}
% \end{macrocode}
%
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.ins b/macros/latex/contrib/ut-thesis/ut-thesis.ins
index db35055115..80df67d81e 100644
--- a/macros/latex/contrib/ut-thesis/ut-thesis.ins
+++ b/macros/latex/contrib/ut-thesis/ut-thesis.ins
@@ -11,8 +11,8 @@ as of Fall 2020:
[https://www.sgs.utoronto.ca/academic-progress/program-completion/formatting]
Copyright (c) 1998-2013 Francois Pitt <fpitt@cs.utoronto.ca>,
- 2020-2021 Jesse Knight <jesse.knight@mail.utoronto.ca>
-last updated at 23:30 (EST) on Tue 20 July 2021
+ 2020-2024 Jesse Knight <jesse.x.knight@protonmail.com>
+last updated at 09:00 (BST) on Fri 26 July 2024
This work may be distributed and/or modified under the conditions of
the LaTeX Project Public Licence, either version 1.3c of this licence
@@ -28,7 +28,7 @@ and is not covered by the licence.
This work has the LPPL maintenance status "maintained".
The Current Maintainer of this work is
-Jesse Knight <jesse.knight@mail.utoronto.ca>.
+Jesse Knight <jesse.x.knight@protonmail.com>.
This work consists of the files:
- README
@@ -37,12 +37,13 @@ This work consists of the files:
- ut-thesis.pdf (derived user manual)
- ut-thesis.cls (derived class file)
-To generate ut-thesis.cls (class file), run: pdflatex ut-thesis.ins
-To generate ut-thesis.pdf (documentation), run: pdflatex ut-thesis.dtx
-To use the class, make ut-thesis.cls visible to your LaTeX distribution,
-by placing ut-thesis.cls either in your working directory,
-or in your texmf tree, perhaps: $texmf/tex/latex/ut-thesis/ut-thesis.cls
-and the documentation: $texmf/doc/latex/ut-thesis/ut-thesis.pdf
+Install ut-thesis from your favourite LaTeX distribution.
+Alternatively, or to use the latest version:
+- generate ut-thesis.cls (class file) using: pdflatex ut-thesis.ins
+ and copy to: $texmf/tex/latex/ut-thesis/ut-thesis.cls
+- generate ut-thesis.pdf (documentation) using: pdflatex ut-thesis.dtx
+ and copy to: $texmf/doc/latex/ut-thesis/ut-thesis.pdf
+or simply copy ut-thesis.cls to your working directory.
See version history on GitHub:
[https://github.com/jessexknight/ut-thesis]
@@ -51,4 +52,4 @@ See version history on GitHub:
\generate{\file{ut-thesis.cls}{\from{ut-thesis.dtx}{class}}}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.pdf b/macros/latex/contrib/ut-thesis/ut-thesis.pdf
index 8f055d54d0..fdf74d5a9a 100644
--- a/macros/latex/contrib/ut-thesis/ut-thesis.pdf
+++ b/macros/latex/contrib/ut-thesis/ut-thesis.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/CHANGELOG.md b/macros/latex/required/l3kernel/CHANGELOG.md
index c58c1a6188..76ee35a0f1 100644
--- a/macros/latex/required/l3kernel/CHANGELOG.md
+++ b/macros/latex/required/l3kernel/CHANGELOG.md
@@ -7,6 +7,17 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-07-20]
+
+### Fixed
+- Implementation of deprecated `\tl_mixed_case:n(n)`
+- Redo the fix for LaTeX2e key properties (issue latex3/latex2e\#1415)
+
+## [2024-06-19]
+
+### Fixed
+- Avoid a low-level error when LaTeX2e key properties are given without a value
+
## [2024-05-27]
### Added
@@ -1742,7 +1753,9 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-05-27...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-07-20...HEAD
+[2024-07-20]: https://github.com/latex3/latex3/compare/2024-06-19...2024-07-20
+[2024-06-19]: https://github.com/latex3/latex3/compare/2024-05-27...2024-06-19
[2024-05-27]: https://github.com/latex3/latex3/compare/2024-05-08...2024-05-27
[2024-05-08]: https://github.com/latex3/latex3/compare/2024-04-11...2024-05-08
[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
diff --git a/macros/latex/required/l3kernel/README.md b/macros/latex/required/l3kernel/README.md
index 8946af1293..0afb38a9ba 100644
--- a/macros/latex/required/l3kernel/README.md
+++ b/macros/latex/required/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-05-27
+Release 2024-07-20
Overview
--------
diff --git a/macros/latex/required/l3kernel/expl3.dtx b/macros/latex/required/l3kernel/expl3.dtx
index 4b4e61d3c8..64c65d0ff7 100644
--- a/macros/latex/required/l3kernel/expl3.dtx
+++ b/macros/latex/required/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-05-27}%
+\def\ExplFileDate{2024-07-20}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/expl3.pdf b/macros/latex/required/l3kernel/expl3.pdf
index a6eca24ce4..650e6999f9 100644
--- a/macros/latex/required/l3kernel/expl3.pdf
+++ b/macros/latex/required/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/interface3.pdf b/macros/latex/required/l3kernel/interface3.pdf
index 5c72322e35..1b89f2f257 100644
--- a/macros/latex/required/l3kernel/interface3.pdf
+++ b/macros/latex/required/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/interface3.tex b/macros/latex/required/l3kernel/interface3.tex
index 62501cfa53..0219809dab 100644
--- a/macros/latex/required/l3kernel/interface3.tex
+++ b/macros/latex/required/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-27}
+\date{Released 2024-07-20}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/required/l3kernel/l3basics.dtx b/macros/latex/required/l3kernel/l3basics.dtx
index 69e4441580..ad15d79653 100644
--- a/macros/latex/required/l3kernel/l3basics.dtx
+++ b/macros/latex/required/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3bitset.dtx b/macros/latex/required/l3kernel/l3bitset.dtx
index 4559b56fd3..2b62c68b4a 100644
--- a/macros/latex/required/l3kernel/l3bitset.dtx
+++ b/macros/latex/required/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3bootstrap.dtx b/macros/latex/required/l3kernel/l3bootstrap.dtx
index 861f0bb5a6..7f4eba752b 100644
--- a/macros/latex/required/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/required/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3box.dtx b/macros/latex/required/l3kernel/l3box.dtx
index 808d22da23..532ec6a7d8 100644
--- a/macros/latex/required/l3kernel/l3box.dtx
+++ b/macros/latex/required/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -906,9 +906,9 @@
% \begin{syntax}
% \cs{box_set_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top}
% \end{syntax}
-% Adjusts the bounding box of the \meta{box} \meta{left} is removed from
+% Adjusts the bounding box of the \meta{box}: \meta{left} is removed from
% the left-hand edge of the bounding box, \meta{right} from the right-hand
-% edge and so fourth. All adjustments are \meta{dim exprs}.
+% edge, and so forth. All adjustments are \meta{dim exprs}.
% Material outside of the bounding box is still displayed in the output
% unless \cs{box_set_clipped:N} is subsequently applied.
% The updated \meta{box} is an
diff --git a/macros/latex/required/l3kernel/l3cctab.dtx b/macros/latex/required/l3kernel/l3cctab.dtx
index 4bf8db41a6..92f134aa93 100644
--- a/macros/latex/required/l3kernel/l3cctab.dtx
+++ b/macros/latex/required/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3clist.dtx b/macros/latex/required/l3kernel/l3clist.dtx
index 5adb01cffb..f8d1eeaea8 100644
--- a/macros/latex/required/l3kernel/l3clist.dtx
+++ b/macros/latex/required/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -324,8 +324,10 @@
% {
% \clist_remove_all:Nn, \clist_remove_all:cn,
% \clist_remove_all:NV, \clist_remove_all:cV,
+% \clist_remove_all:Ne, \clist_remove_all:ce,
% \clist_gremove_all:Nn, \clist_gremove_all:cn,
% \clist_gremove_all:NV, \clist_gremove_all:cV
+% \clist_gremove_all:Ne, \clist_gremove_all:ce
% }
% \begin{syntax}
% \cs{clist_remove_all:Nn} \meta{clist~var} \Arg{item}
@@ -1429,13 +1431,15 @@
% \begin{macro}
% {
% \clist_remove_all:Nn, \clist_remove_all:cn,
-% \clist_remove_all:NV, \clist_remove_all:cV
+% \clist_remove_all:NV, \clist_remove_all:cV,
+% \clist_remove_all:Ne, \clist_remove_all:ce
% }
% \UnitTested
% \begin{macro}
% {
% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_gremove_all:cV
+% \clist_gremove_all:NV, \clist_gremove_all:cV,
+% \clist_gremove_all:Ne, \clist_gremove_all:ce
% }
% \UnitTested
% \begin{macro}{\@@_remove_all:NNNn}
@@ -1509,8 +1513,8 @@
\cs_new:Npn \@@_remove_all:
{ \exp_after:wN \@@_remove_all:w \@@_tmp:w , }
\cs_new:Npn \@@_remove_all:w #1 , \s_@@_mark , #2 , { \exp_not:n {#1} }
-\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV }
-\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV }
+\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV , Ne , ce }
+\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV , Ne , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/required/l3kernel/l3coffins.dtx b/macros/latex/required/l3kernel/l3coffins.dtx
index 62dc5f92ad..afbd1bd394 100644
--- a/macros/latex/required/l3kernel/l3coffins.dtx
+++ b/macros/latex/required/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3color.dtx b/macros/latex/required/l3kernel/l3color.dtx
index b56fb9e0ac..117a468d21 100644
--- a/macros/latex/required/l3kernel/l3color.dtx
+++ b/macros/latex/required/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -103,7 +103,7 @@
% \begin{itemize}
% \item \texttt{Gray} Grayscale color, with a single axis running from
% $0$ (fully black) to $15$ (fully white)
-% \item \texttt{hsb} Hue-saturation-brightness color, with three axes,all
+% \item \texttt{hsb} Hue-saturation-brightness color, with three axes, all
% real values in the range $[0,1]$ for hue saturation and brightness
% \item \texttt{Hsb} Hue-saturation-brightness color, with three axes, integer
% in the range $[0,360]$ for hue, real values in the range $[0,1]$ for
@@ -406,20 +406,20 @@
%
% \begin{function}{\color_export:nnN}
% \begin{syntax}
-% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \Arg{tl}
+% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \meta{tl var}
% \end{syntax}
% Parses the \meta{color expression} as described earlier,
% then converts to the \meta{format} specified and assigns the data to the
-% \meta{tl}.
+% \meta{tl var}.
% \end{function}
%
% \begin{function}{\color_export:nnnN}
% \begin{syntax}
-% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \Arg{tl}
+% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \meta{tl var}
% \end{syntax}
% Expresses the combination of \meta{model} and \meta{value(s)} in an
% internal representation, then converts to the \meta{format} specified and
-% assigns the data to the \meta{tl}.
+% assigns the data to the \meta{tl var}.
% \end{function}
%
% \section{Creating new color models}
@@ -495,7 +495,7 @@
%
% Color profiles are used to ensure color accuracy by linking to collaboration.
% Applying a profile can be used to standardise color which is otherwise
-% device-dependence.
+% device-dependent.
%
% \begin{function}[added = 2021-02-23]{\color_profile_apply:nn}
% \begin{syntax}
@@ -697,14 +697,14 @@
% \begin{macro}{\@@_convert:nnnN, \@@_convert:nVnN, \@@_convert:nnVN}
% \begin{macro}[EXP]
% {
-% \@@_convert_gray_gray:w
-% \@@_convert_gray_rgb:w
-% \@@_convert_gray_cmyk:w
-% \@@_convert_cmyk_gray:w
-% \@@_convert_cmyk_rgb:w
-% \@@_convert_cmyk_cmyk:w
-% \@@_convert_rgb_gray:w
-% \@@_convert_rgb_rgb:w
+% \@@_convert_gray_gray:w,
+% \@@_convert_gray_rgb:w,
+% \@@_convert_gray_cmyk:w,
+% \@@_convert_cmyk_gray:w,
+% \@@_convert_cmyk_rgb:w,
+% \@@_convert_cmyk_cmyk:w,
+% \@@_convert_rgb_gray:w,
+% \@@_convert_rgb_rgb:w,
% \@@_convert_rgb_cmyk:w
% }
% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnn}
diff --git a/macros/latex/required/l3kernel/l3debug.dtx b/macros/latex/required/l3kernel/l3debug.dtx
index 21e6747a84..4e578ee9b6 100644
--- a/macros/latex/required/l3kernel/l3debug.dtx
+++ b/macros/latex/required/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-05-27}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-07-20}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
diff --git a/macros/latex/required/l3kernel/l3deprecation.dtx b/macros/latex/required/l3kernel/l3deprecation.dtx
index 5852205ddc..697f235311 100644
--- a/macros/latex/required/l3kernel/l3deprecation.dtx
+++ b/macros/latex/required/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -505,10 +505,10 @@
{ \text_uppercase:nn {#1} {#2} }
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n }
\cs_new:Npn \tl_mixed_case:n #1
- { \text_titlecase_first:n {#1} }
+ { \text_titlecase_first:n { \text_lowercase:n {#1} } }
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:nn }
\cs_new:Npn \tl_mixed_case:nn #1#2
- { \text_titlecase_first:nn {#1} {#2} }
+ { \text_titlecase_first:nn {#1} { \text_lowercase:n {#2} } }
% \end{macrocode}
% \end{macro}
%
@@ -571,7 +571,7 @@
% \char_lower_case:N, \char_upper_case:N,
% \char_mixed_case:Nn, \char_fold_case:N,
% \char_str_lower_case:N, \char_str_upper_case:N,
-% \char_str_mixed_case:Nn, \char_str_fold_case:N,
+% \char_str_mixed_case:N, \char_str_fold_case:N,
% }
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n }
diff --git a/macros/latex/required/l3kernel/l3doc.dtx b/macros/latex/required/l3kernel/l3doc.dtx
index 43b719ce59..751d4f4e14 100644
--- a/macros/latex/required/l3kernel/l3doc.dtx
+++ b/macros/latex/required/l3kernel/l3doc.dtx
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-05-27}{}
+\ProvidesExplClass{l3doc}{2024-07-20}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/required/l3kernel/l3doc.pdf b/macros/latex/required/l3kernel/l3doc.pdf
index 42960f5e6f..0d5a3494c0 100644
--- a/macros/latex/required/l3kernel/l3doc.pdf
+++ b/macros/latex/required/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3docstrip.dtx b/macros/latex/required/l3kernel/l3docstrip.dtx
index fecb228324..199801ff3b 100644
--- a/macros/latex/required/l3kernel/l3docstrip.dtx
+++ b/macros/latex/required/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3docstrip.pdf b/macros/latex/required/l3kernel/l3docstrip.pdf
index efc8882c36..07f24848e3 100644
--- a/macros/latex/required/l3kernel/l3docstrip.pdf
+++ b/macros/latex/required/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3expan.dtx b/macros/latex/required/l3kernel/l3expan.dtx
index d13578bde1..499c94587e 100644
--- a/macros/latex/required/l3kernel/l3expan.dtx
+++ b/macros/latex/required/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3file.dtx b/macros/latex/required/l3kernel/l3file.dtx
index 546222711e..039c4eecb8 100644
--- a/macros/latex/required/l3kernel/l3file.dtx
+++ b/macros/latex/required/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3flag.dtx b/macros/latex/required/l3kernel/l3flag.dtx
index 88e726df35..690347426f 100644
--- a/macros/latex/required/l3kernel/l3flag.dtx
+++ b/macros/latex/required/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-assign.dtx b/macros/latex/required/l3kernel/l3fp-assign.dtx
index e6fa97423e..e1b3bc788b 100644
--- a/macros/latex/required/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/required/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/required/l3kernel/l3fp-aux.dtx b/macros/latex/required/l3kernel/l3fp-aux.dtx
index 1ad33e235e..4c39e81f46 100644
--- a/macros/latex/required/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/required/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-basics.dtx b/macros/latex/required/l3kernel/l3fp-basics.dtx
index e2d93219b0..a93ff90291 100644
--- a/macros/latex/required/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/required/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-convert.dtx b/macros/latex/required/l3kernel/l3fp-convert.dtx
index 4983a3dd1f..9b5b66f815 100644
--- a/macros/latex/required/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/required/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-expo.dtx b/macros/latex/required/l3kernel/l3fp-expo.dtx
index 7577f640d4..e9dcdf6646 100644
--- a/macros/latex/required/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/required/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-extended.dtx b/macros/latex/required/l3kernel/l3fp-extended.dtx
index 596dc86ef2..24f1e5c127 100644
--- a/macros/latex/required/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/required/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-functions.dtx b/macros/latex/required/l3kernel/l3fp-functions.dtx
index b9e269b988..2c5eb9602f 100644
--- a/macros/latex/required/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/required/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-logic.dtx b/macros/latex/required/l3kernel/l3fp-logic.dtx
index 486a3bc579..9d39f4f67e 100644
--- a/macros/latex/required/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-parse.dtx b/macros/latex/required/l3kernel/l3fp-parse.dtx
index 7853c40132..191ab2755c 100644
--- a/macros/latex/required/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/required/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-random.dtx b/macros/latex/required/l3kernel/l3fp-random.dtx
index ff999926ab..dd40704719 100644
--- a/macros/latex/required/l3kernel/l3fp-random.dtx
+++ b/macros/latex/required/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-round.dtx b/macros/latex/required/l3kernel/l3fp-round.dtx
index 0d39b8a26a..ad20934215 100644
--- a/macros/latex/required/l3kernel/l3fp-round.dtx
+++ b/macros/latex/required/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-symbolic.dtx b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
index 88e214f49e..8223419f66 100644
--- a/macros/latex/required/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-traps.dtx b/macros/latex/required/l3kernel/l3fp-traps.dtx
index fec48bc163..7f22a2d137 100644
--- a/macros/latex/required/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/required/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/required/l3kernel/l3fp-trig.dtx b/macros/latex/required/l3kernel/l3fp-trig.dtx
index 7c40c6198f..b7b67c9445 100644
--- a/macros/latex/required/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/required/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-types.dtx b/macros/latex/required/l3kernel/l3fp-types.dtx
index e9269e1f03..d969f76bdc 100644
--- a/macros/latex/required/l3kernel/l3fp-types.dtx
+++ b/macros/latex/required/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp.dtx b/macros/latex/required/l3kernel/l3fp.dtx
index d273b057ea..8e37a55799 100644
--- a/macros/latex/required/l3kernel/l3fp.dtx
+++ b/macros/latex/required/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -773,7 +773,7 @@
% The result may contain other functions, which are
% then replaced by their results if they have any. For instance,
% \begin{quote}
-% \cs{fp_new_function:n} |{ foo }| \\
+% \cs{fp_new_function:n} |{ npow }| \\
% \cs{fp_set_function:nnn} |{ npow } { a,b } { a**b }| \\
% \cs{fp_show:n} |{ npow(16,0.25) } }|
% \end{quote}
diff --git a/macros/latex/required/l3kernel/l3fparray.dtx b/macros/latex/required/l3kernel/l3fparray.dtx
index f48de27af3..9592671ae3 100644
--- a/macros/latex/required/l3kernel/l3fparray.dtx
+++ b/macros/latex/required/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3int.dtx b/macros/latex/required/l3kernel/l3int.dtx
index 45050964de..4b0d251cab 100644
--- a/macros/latex/required/l3kernel/l3int.dtx
+++ b/macros/latex/required/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -100,21 +100,6 @@
% restricted-expandable functions can both be used, and \cs{exp_not:n}
% and its variants have no effect while \cs{exp_not:N} may incorrectly
% interrupt the expression.
-% \begin{texnote}
-% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
-% The result is \emph{not} an \meta{internal integer}, and therefore
-% should be terminated by a space if used in \cs{int_value:w} or in
-% a \TeX{}-style integer assignment.
-%
-% As all \TeX{} integers, integer operands can also be:
-% \tn{value}\Arg{\LaTeXe{} counter}; dimension or skip variables,
-% converted to integers in~\texttt{sp}; the character code of some
-% character given as \texttt{`}\meta{char} or
-% \texttt{`\textbackslash}\meta{char}; octal numbers given as
-% \texttt{'} followed by digits from \texttt{0} to \texttt{7}; or
-% hexadecimal numbers given as |"| followed by digits and upper case
-% letters from \texttt{A} to~\texttt{F}.
-% \end{texnote}
%
% \begin{function}[EXP]{\int_eval:n}
% \begin{syntax}
diff --git a/macros/latex/required/l3kernel/l3intarray.dtx b/macros/latex/required/l3kernel/l3intarray.dtx
index aa49275e78..4be0ca6be6 100644
--- a/macros/latex/required/l3kernel/l3intarray.dtx
+++ b/macros/latex/required/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3kernel-functions.dtx b/macros/latex/required/l3kernel/l3kernel-functions.dtx
index c3bb838acf..5d5758a6af 100644
--- a/macros/latex/required/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/required/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3keys.dtx b/macros/latex/required/l3kernel/l3keys.dtx
index 13772d1781..db580c525c 100644
--- a/macros/latex/required/l3kernel/l3keys.dtx
+++ b/macros/latex/required/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -649,15 +649,13 @@
% { key } % Name of choice key
% { choice-a , choice-b , choice-c } % Valid choices
% { \exp_not:n {#1} } % Invalid choice given
-% %
-% %
% }
% \end{verbatim}
%
% Multiple choices are created in a very similar manner to mutually-exclusive
% choices, using the properties \texttt{.multichoice:} and
% \texttt{.multichoices:nn}. As with mutually exclusive choices, multiple
-% choices are define as sub-keys. Thus both
+% choices are defined as sub-keys. Thus both
% \begin{verbatim}
% \keys_define:nn { mymodule }
% {
@@ -1926,19 +1924,21 @@
% \end{macro}
%
% \begin{macro}{\@@_define_code:n}
+% \begin{macro}[EXP]{\@@_define_code:nnn}
% \begin{macro}[EXP]{\@@_define_code:w}
% Two possible cases. If there is a value for the key, then just use
% the function. If not, then a check to make sure there is no need for
% a value with the property. If there should be one then complain,
-% otherwise execute it. There is no need to check for a |:| as if it
-% was missing the earlier tests would have failed.
+% otherwise execute it. For a \LaTeXe{} property like |.code| which
+% doesn't contain a |:|, treat it as having arity 1 and pass the
+% (empty) value to it.
% \begin{macrocode}
\cs_new_protected:Npn \@@_define_code:n #1
{
\bool_if:NTF \l_@@_no_value_bool
{
- \exp_after:wN \@@_define_code:w
- \l_@@_property_str \s_@@_stop
+ \@@_define_code:nnn
+ { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
{ \use:c { \c_@@_props_root_str \l_@@_property_str } }
{
\msg_error:nnee { keys } { property-requires-value }
@@ -1947,12 +1947,31 @@
}
{ \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
}
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \s_@@_stop
- { \tl_if_empty:nTF {#2} }
+\cs_new:Npe \@@_define_code:nnn
+ {
+ \exp_not:N \exp_after:wN \exp_not:N \@@_define_code:w
+ \exp_not:N \l_@@_property_str
+ \c_colon_str \c_colon_str
+ \exp_not:N \s_@@_stop
+ }
+\use:e
+ {
+ \cs_new:Npn \exp_not:N \@@_define_code:w
+ #1 \c_colon_str #2 \c_colon_str #3 \exp_not:N \s_@@_stop
+ }
+ {
+ \tl_if_empty:nTF {#3}
+ { \use_i:nnn }
+ {
+ \tl_if_empty:nTF {#2}
+ { \use_ii:nnn }
+ { \use_iii:nnn }
+ }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Turning properties into actions}
%
diff --git a/macros/latex/required/l3kernel/l3legacy.dtx b/macros/latex/required/l3kernel/l3legacy.dtx
index 4cfce5c5f1..b5ef896827 100644
--- a/macros/latex/required/l3kernel/l3legacy.dtx
+++ b/macros/latex/required/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3luatex.dtx b/macros/latex/required/l3kernel/l3luatex.dtx
index eb10d5aecc..aa7724a8ce 100644
--- a/macros/latex/required/l3kernel/l3luatex.dtx
+++ b/macros/latex/required/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3msg.dtx b/macros/latex/required/l3kernel/l3msg.dtx
index e901b07c06..66e7ac8282 100644
--- a/macros/latex/required/l3kernel/l3msg.dtx
+++ b/macros/latex/required/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3names.dtx b/macros/latex/required/l3kernel/l3names.dtx
index 5cdd1361e3..1cb0d132ae 100644
--- a/macros/latex/required/l3kernel/l3names.dtx
+++ b/macros/latex/required/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3news.pdf b/macros/latex/required/l3kernel/l3news.pdf
index 4b57ef41c8..eb4c42d8c5 100644
--- a/macros/latex/required/l3kernel/l3news.pdf
+++ b/macros/latex/required/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news01.pdf b/macros/latex/required/l3kernel/l3news01.pdf
index b5f45059d3..21997cf980 100644
--- a/macros/latex/required/l3kernel/l3news01.pdf
+++ b/macros/latex/required/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news02.pdf b/macros/latex/required/l3kernel/l3news02.pdf
index 0ee8ffaf96..db1ac5b85b 100644
--- a/macros/latex/required/l3kernel/l3news02.pdf
+++ b/macros/latex/required/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news03.pdf b/macros/latex/required/l3kernel/l3news03.pdf
index fef9bf3a7b..6630201b1f 100644
--- a/macros/latex/required/l3kernel/l3news03.pdf
+++ b/macros/latex/required/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news04.pdf b/macros/latex/required/l3kernel/l3news04.pdf
index 0afbb9591e..c74f9f0a7c 100644
--- a/macros/latex/required/l3kernel/l3news04.pdf
+++ b/macros/latex/required/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news05.pdf b/macros/latex/required/l3kernel/l3news05.pdf
index 0a44ce6811..18d4df3290 100644
--- a/macros/latex/required/l3kernel/l3news05.pdf
+++ b/macros/latex/required/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news06.pdf b/macros/latex/required/l3kernel/l3news06.pdf
index 10cec7c17f..643b8f1f68 100644
--- a/macros/latex/required/l3kernel/l3news06.pdf
+++ b/macros/latex/required/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news07.pdf b/macros/latex/required/l3kernel/l3news07.pdf
index 6bfbab4d96..b457fd6033 100644
--- a/macros/latex/required/l3kernel/l3news07.pdf
+++ b/macros/latex/required/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news08.pdf b/macros/latex/required/l3kernel/l3news08.pdf
index a0130195cc..a5b4744d28 100644
--- a/macros/latex/required/l3kernel/l3news08.pdf
+++ b/macros/latex/required/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news09.pdf b/macros/latex/required/l3kernel/l3news09.pdf
index 3616cc20ca..a2242937d2 100644
--- a/macros/latex/required/l3kernel/l3news09.pdf
+++ b/macros/latex/required/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news10.pdf b/macros/latex/required/l3kernel/l3news10.pdf
index 00ec553d1c..1775167008 100644
--- a/macros/latex/required/l3kernel/l3news10.pdf
+++ b/macros/latex/required/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news11.pdf b/macros/latex/required/l3kernel/l3news11.pdf
index 59a672d339..8e14906f03 100644
--- a/macros/latex/required/l3kernel/l3news11.pdf
+++ b/macros/latex/required/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news12.pdf b/macros/latex/required/l3kernel/l3news12.pdf
index 9c4f937b00..15a8332f07 100644
--- a/macros/latex/required/l3kernel/l3news12.pdf
+++ b/macros/latex/required/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3pdf.dtx b/macros/latex/required/l3kernel/l3pdf.dtx
index 55f49476e3..34118c371a 100644
--- a/macros/latex/required/l3kernel/l3pdf.dtx
+++ b/macros/latex/required/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -70,8 +70,8 @@
% \cs{pdf_object_write:nnn} \Arg{object} \Arg{type} \Arg{content}
% \end{syntax}
% Writes the \meta{content} as content of the \meta{object}. Depending on the
-% \meta{type} declared for the object, the format required for the
-% \meta{data} will vary
+% \meta{type} declared for the object, the format required for
+% \meta{content} will vary:
% \begin{itemize}
% \item[\texttt{array}] A space-separated list of values
% \item[\texttt{dict}] Key--value pairs in the form
@@ -159,7 +159,7 @@
% \cs{pdf_object_unnamed_write:nn} \Arg{type} \Arg{content}
% \end{syntax}
% Writes the \meta{content} as content of an anonymous object. Depending on the
-% \meta{type}, the format required for the \meta{data} will vary
+% \meta{type}, the format required for \meta{content} will vary:
% \begin{itemize}
% \item[\texttt{array}] A space-separated list of values
% \item[\texttt{dict}] Key--value pairs in the form
@@ -251,9 +251,9 @@
%
% \section{Destinations}
%
-% Destinations are the places a link jumped too.
-% Unlike the name may suggest they don't described
-% an exact location in the PDF. Instead a destination contains a reference to
+% Destinations are the places a link jumped to.
+% Unlike the name may suggest, they don't describe
+% an exact location in the PDF. Instead, a destination contains a reference to
% a page along with an instruction how to display this page.
% The normally used \enquote{XYZ \textit{top left zoom}} for example instructs
% the viewer to show the page with the given \textit{zoom} and
diff --git a/macros/latex/required/l3kernel/l3prefixes.csv b/macros/latex/required/l3kernel/l3prefixes.csv
index e85412b9d8..339f6625fd 100644
--- a/macros/latex/required/l3kernel/l3prefixes.csv
+++ b/macros/latex/required/l3kernel/l3prefixes.csv
@@ -26,6 +26,7 @@ block,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https:
bool,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
box,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02,
+cal,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21,
catcode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
cctab,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
@@ -135,6 +136,7 @@ keys,"l3kernel,l3keys2e,ltkeys",The LaTeX Project,https://www.latex-project.org/
keyval,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16,
kivitendo,"kiviletter, kivitables",Marei Peischl for Kivitendo,https://www.kivitendo.de/,https://github.com/kivitendo/kivitendo-erp,https://forum.kivitendo.de/,2021-05-28,2021-05-28,
+knot,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
langsci,langscibook,Language Science Press,https://langsci-press.org,https://github.com/langsci/langscibook,https://github.com/langsci/langscibook/issues,2021-07-20,2021-07-21,
left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
liftarm,liftarm,Matthias Floré,,,,2024-05-25,2024-05-25,
@@ -210,6 +212,7 @@ property,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,htt
pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24,
ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
ptxcd,ptxcd,Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates
+ptxtools,"depp, ptxtools",Marei Peischl,https://gitlab.com/islandoftex/texmf/depp,https://gitlab.com/islandoftex/texmf/depp.git,https://gitlab.com/islandoftex/texmf/depp,2024-07-09,2024-07-09,
qrbill,qrbill,Marei Peischl,https://github.com/peiTeX/qrbill,https://github.com/peiTeX/qrbill.git,https://github.com/peiTeX/qrbill/issues,2020-06-27,2020-06-27,
quark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
rainbow,beamertheme-rainbow,samcarter,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow/issues,2023-07-04,2023-07-04,
@@ -239,6 +242,7 @@ slcd,se2thesis,Stephan Lukasczyk,https://github.com/se2p/se2thesis,https://githu
socket,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17,
sort,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
space,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+spath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
starray,starray,Alceu Frigeri,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray/issues,2023-05-15,2023-05-15,
statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,2018-06-25,2018-06-25,
stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,2014-02-26,2014-02-26,
@@ -258,6 +262,7 @@ tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:/
text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15,
tikzfill,tikzfill,Thomas F. Sturm,https://github.com/T-F-S/tikzfill,https://github.com/T-F-S/tikzfill.git,https://github.com/T-F-S/tikzfill/issues,2022-07-19,2022-07-19,
tikzlings,tikzlings,samcarter,https://github.com/samcarter/tikzlings,git@github.com:samcarter/tikzlings.git,https://github.com/samcarter/tikzlings/issues,2023-02-17,2023-02-17,
+tikzspath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,2018-09-26,2018-09-26,
tilde,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
tl,"l3kernel,l3tl-build",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -288,6 +293,7 @@ xmarks,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https
xparse,xparse,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,2013-03-16,2013-03-16,
xpeek,xpeek,Joel C. Salomon,,,,2013-03-16,2013-03-16,
+xpg,polyglossia,Jürgen Spitzmüller,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/issues,2024-07-02,2024-07-02,
xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
xsb,xsavebox,Alexander Grahn,,https://gitlab.com/agrahn/xsavebox,https://gitlab.com/agrahn/xsavebox/issues,2016-02-26,2020-04-15,
xsim,xsim,Clemens Niederberger,https://github.com/cgnieder/xsim/,https://github.com/cgnieder/xsim.git,https://github.com/cgnieder/xsim/issues,2020-04-14,2020-04-14,
@@ -299,4 +305,5 @@ zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/
zrefcheck,zref-check,gusbrs,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05,
zrefclever,zref-clever,gusbrs,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29,
zrefvario,zref-vario,gusbrs,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02,
+zugferd,zugferd,Marei Peischl,https://github.com/TeXhackse/LaTeX-ZUGFeRD,https://github.com/TeXhackse/LaTeX-ZUGFeRD.git,https://github.com/TeXhackse/LaTeX-ZUGFeRD/issues,2024-07-09,2024-07-09,
zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16,
diff --git a/macros/latex/required/l3kernel/l3prefixes.pdf b/macros/latex/required/l3kernel/l3prefixes.pdf
index 602ccaaa59..ab4d18e916 100644
--- a/macros/latex/required/l3kernel/l3prefixes.pdf
+++ b/macros/latex/required/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3prg.dtx b/macros/latex/required/l3kernel/l3prg.dtx
index bec4e3a712..ac6131d6ff 100644
--- a/macros/latex/required/l3kernel/l3prg.dtx
+++ b/macros/latex/required/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3prop.dtx b/macros/latex/required/l3kernel/l3prop.dtx
index 21b8d03dd6..fd0d8e167d 100644
--- a/macros/latex/required/l3kernel/l3prop.dtx
+++ b/macros/latex/required/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -181,11 +181,11 @@
% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
% }
% \begin{syntax}
-% \cs{prop_set_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_set_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Sets \meta{property list} to contain key--value pairs given in the second
% argument. If duplicate keys appear only the last of the values is kept.
@@ -205,11 +205,11 @@
% \begin{function}[added = 2017-11-28, updated = 2021-11-07]
% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
% \begin{syntax}
-% \cs{prop_const_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_const_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Creates a new constant \enquote{flat} \meta{property list} or raises
% an error if the
@@ -224,11 +224,11 @@
% \begin{function}[added = 2024-02-12]
% {\prop_const_linked_from_keyval:Nn, \prop_const_linked_from_keyval:cn}
% \begin{syntax}
-% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Creates a new constant \enquote{linked} \meta{prop~var} or raises an
% error if the
@@ -347,11 +347,11 @@
% \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn,
% }
% \begin{syntax}
-% \cs{prop_put_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_put_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Updates the \meta{property list} by adding entries for each key--value
% pair given in the second argument. The addition is done through
diff --git a/macros/latex/required/l3kernel/l3quark.dtx b/macros/latex/required/l3kernel/l3quark.dtx
index 136596a3fe..ad78a12bd2 100644
--- a/macros/latex/required/l3kernel/l3quark.dtx
+++ b/macros/latex/required/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3regex.dtx b/macros/latex/required/l3kernel/l3regex.dtx
index 6ca9c8eeed..c3d5de27cb 100644
--- a/macros/latex/required/l3kernel/l3regex.dtx
+++ b/macros/latex/required/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3seq.dtx b/macros/latex/required/l3kernel/l3seq.dtx
index 38fc9471a9..413e20f8ca 100644
--- a/macros/latex/required/l3kernel/l3seq.dtx
+++ b/macros/latex/required/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3skip.dtx b/macros/latex/required/l3kernel/l3skip.dtx
index 6e96b41326..9bea4c7b14 100644
--- a/macros/latex/required/l3kernel/l3skip.dtx
+++ b/macros/latex/required/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3sort.dtx b/macros/latex/required/l3kernel/l3sort.dtx
index 47cebcad25..a86f916d24 100644
--- a/macros/latex/required/l3kernel/l3sort.dtx
+++ b/macros/latex/required/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3str-convert.dtx b/macros/latex/required/l3kernel/l3str-convert.dtx
index baf705fe0c..4061895896 100644
--- a/macros/latex/required/l3kernel/l3str-convert.dtx
+++ b/macros/latex/required/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3str.dtx b/macros/latex/required/l3kernel/l3str.dtx
index f4f7b94b88..2be2b105ce 100644
--- a/macros/latex/required/l3kernel/l3str.dtx
+++ b/macros/latex/required/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -757,7 +757,7 @@
% \item Case changing text for typesetting: see the
% \cs[index=text_lowercase:n]{text_lowercase:n(n)},
% \cs[index=text_uppercase:n]{text_uppercase:n(n)} and
-% \cs[index=text_titlecase_all:n]{text_titlecase_(all|once):n(n)} functions which
+% \cs[index=text_titlecase_all:n]{text_titlecase_(all|first):n(n)} functions which
% correctly deal with context-dependence and other factors appropriate
% to text case changing.
% \end{itemize}
diff --git a/macros/latex/required/l3kernel/l3styleguide.pdf b/macros/latex/required/l3kernel/l3styleguide.pdf
index 0113bac571..31ff7889ff 100644
--- a/macros/latex/required/l3kernel/l3styleguide.pdf
+++ b/macros/latex/required/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3styleguide.tex b/macros/latex/required/l3kernel/l3styleguide.tex
index bcea3de06e..985f20a68c 100644
--- a/macros/latex/required/l3kernel/l3styleguide.tex
+++ b/macros/latex/required/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-27}
+\date{Released 2024-07-20}
\begin{document}
diff --git a/macros/latex/required/l3kernel/l3syntax-changes.pdf b/macros/latex/required/l3kernel/l3syntax-changes.pdf
index 99e93c2ccc..515a9eb803 100644
--- a/macros/latex/required/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/required/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex
index 30d8d47747..b9ffcb011a 100644
--- a/macros/latex/required/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/required/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-27}
+\date{Released 2024-07-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/required/l3kernel/l3sys.dtx b/macros/latex/required/l3kernel/l3sys.dtx
index b2228c7fd9..1db09f9550 100644
--- a/macros/latex/required/l3kernel/l3sys.dtx
+++ b/macros/latex/required/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3term-glossary.pdf b/macros/latex/required/l3kernel/l3term-glossary.pdf
index 01598ca79a..d1a2058e9f 100644
--- a/macros/latex/required/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/required/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3term-glossary.tex b/macros/latex/required/l3kernel/l3term-glossary.tex
index 141749aa6b..fca2886337 100644
--- a/macros/latex/required/l3kernel/l3term-glossary.tex
+++ b/macros/latex/required/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-27}
+\date{Released 2024-07-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/required/l3kernel/l3text-case.dtx b/macros/latex/required/l3kernel/l3text-case.dtx
index 89cdb9e2b1..134e2508b7 100644
--- a/macros/latex/required/l3kernel/l3text-case.dtx
+++ b/macros/latex/required/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text-map.dtx b/macros/latex/required/l3kernel/l3text-map.dtx
index 3573002244..e3586164c5 100644
--- a/macros/latex/required/l3kernel/l3text-map.dtx
+++ b/macros/latex/required/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text-purify.dtx b/macros/latex/required/l3kernel/l3text-purify.dtx
index 35390811aa..d22ee1bc3e 100644
--- a/macros/latex/required/l3kernel/l3text-purify.dtx
+++ b/macros/latex/required/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text.dtx b/macros/latex/required/l3kernel/l3text.dtx
index bcfd15cb62..9a4c4f244e 100644
--- a/macros/latex/required/l3kernel/l3text.dtx
+++ b/macros/latex/required/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -65,11 +65,11 @@
% \end{syntax}
% Takes user input \meta{text} and expands the content.
% Protected commands (typically
-% formatting) are left in place, and no processing takes place of
+% formatting) are left in place, and no processing of
% math mode material (as delimited by pairs given in
% \cs{l_text_math_delims_tl} or as the argument to commands listed
-% in \cs{l_text_math_arg_tl}). Commands which are neither engine-
-% nor \LaTeX{} protected are expanded exhaustively.
+% in \cs{l_text_math_arg_tl}) takes place. Commands which are neither engine-
+% nor \LaTeX{}-protected are expanded exhaustively.
% Any commands listed in \cs{l_text_expand_exclude_tl} are excluded from
% expansion, as are those in \cs{l_text_case_exclude_arg_tl} and
% \cs{l_text_math_arg_tl}.
@@ -114,8 +114,8 @@
% \end{function}
%
% Upper- and lowercase have the obvious meanings. Titlecasing may be regarded
-% informally as converting the first character of the \meta{tokens} to
-% uppercase. However, the process is more complex
+% informally as converting the first \emph{non-space} character of the
+% \meta{tokens} to uppercase. However, the process is more complex
% than this as there are some situations where a single lowercase character
% maps to a special form, for example \texttt{ij} in Dutch which becomes
% \texttt{IJ}. There are two functions available for titlecasing: one which
@@ -214,8 +214,8 @@
% \text_declare_uppercase_mapping:nnn
% }
% \begin{syntax}
-% \cs{text_declare_lowercase_mapping:nn} \Arg{codeppoint} \Arg{replacement}
-% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codeppoint} \Arg{replacement}
+% \cs{text_declare_lowercase_mapping:nn} \Arg{codepoint} \Arg{replacement}
+% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codepoint} \Arg{replacement}
% \end{syntax}
% Declares that the \meta{replacement} tokens should be used when case mapping
% the \meta{codepoint}, rather than the standard mapping given in the
diff --git a/macros/latex/required/l3kernel/l3tl-analysis.dtx b/macros/latex/required/l3kernel/l3tl-analysis.dtx
index 4df9ee68a3..600da3985d 100644
--- a/macros/latex/required/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/required/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3tl-build.dtx b/macros/latex/required/l3kernel/l3tl-build.dtx
index 6cd9822ad2..e484c5b1c5 100644
--- a/macros/latex/required/l3kernel/l3tl-build.dtx
+++ b/macros/latex/required/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3tl.dtx b/macros/latex/required/l3kernel/l3tl.dtx
index 71d68d532c..84f2c36798 100644
--- a/macros/latex/required/l3kernel/l3tl.dtx
+++ b/macros/latex/required/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3token.dtx b/macros/latex/required/l3kernel/l3token.dtx
index 03bf46b101..c028310326 100644
--- a/macros/latex/required/l3kernel/l3token.dtx
+++ b/macros/latex/required/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3unicode.dtx b/macros/latex/required/l3kernel/l3unicode.dtx
index 179817d490..532eb315d3 100644
--- a/macros/latex/required/l3kernel/l3unicode.dtx
+++ b/macros/latex/required/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-27}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/source3.pdf b/macros/latex/required/l3kernel/source3.pdf
index 34279f9e00..26c62e620d 100644
--- a/macros/latex/required/l3kernel/source3.pdf
+++ b/macros/latex/required/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/source3.tex b/macros/latex/required/l3kernel/source3.tex
index 00095ad319..228d3ca93c 100644
--- a/macros/latex/required/l3kernel/source3.tex
+++ b/macros/latex/required/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-27}
+\date{Released 2024-07-20}
\pagenumbering{roman}
\maketitle