summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/context/contrib/context-chat/LICENSE232
-rw-r--r--macros/context/contrib/context-chat/README.md72
-rw-r--r--macros/context/contrib/context-chat/VERSION1
-rw-r--r--macros/context/contrib/context-chat/tex/context/third/chat/t-chat.mkiv220
-rw-r--r--macros/generic/markdown/CHANGES.md35
-rw-r--r--macros/generic/markdown/DEPENDS.txt21
-rw-r--r--macros/generic/markdown/README.md2
-rw-r--r--macros/generic/markdown/VERSION2
-rw-r--r--macros/generic/markdown/docstrip.cfg4
-rw-r--r--macros/generic/markdown/libraries/markdown-tinyyaml.lua4
-rw-r--r--macros/generic/markdown/markdown.dtx330
-rw-r--r--macros/generic/markdown/markdown.html57
-rw-r--r--macros/generic/markdown/markdown.ins1
-rw-r--r--macros/generic/markdown/markdown.pdfbin1124699 -> 1114115 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/CHANGELOG.md9
-rw-r--r--macros/latex-dev/required/l3kernel/README.md2
-rw-r--r--macros/latex-dev/required/l3kernel/expl3.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/expl3.pdfbin610536 -> 610110 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/interface3.pdfbin1800816 -> 1790077 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/interface3.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3bitset.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3box.dtx6
-rw-r--r--macros/latex-dev/required/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3color.dtx30
-rw-r--r--macros/latex-dev/required/l3kernel/l3debug.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3deprecation.dtx8
-rw-r--r--macros/latex-dev/required/l3kernel/l3doc.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3doc.pdfbin565819 -> 565298 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3docstrip.pdfbin151530 -> 151011 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3file.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-functions.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-types.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3int.dtx17
-rw-r--r--macros/latex-dev/required/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3keys.dtx28
-rw-r--r--macros/latex-dev/required/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3names.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3news.pdfbin396223 -> 396223 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news09.pdfbin250161 -> 250161 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3pdf.dtx14
-rw-r--r--macros/latex-dev/required/l3kernel/l3prefixes.csv7
-rw-r--r--macros/latex-dev/required/l3kernel/l3prefixes.pdfbin82843 -> 83064 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3prop.dtx42
-rw-r--r--macros/latex-dev/required/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3str.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3styleguide.pdfbin296736 -> 296298 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3syntax-changes.pdfbin231569 -> 231148 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3term-glossary.pdfbin242363 -> 241946 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text.dtx16
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl-build.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3token.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/source3.pdfbin7619159 -> 7610534 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/source3.tex2
-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.dtx365
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin622160 -> 627499 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex87
-rw-r--r--macros/latex/contrib/esami/README6
-rw-r--r--macros/latex/contrib/esami/VERSION2
-rw-r--r--macros/latex/contrib/esami/doc/esami-doc-en.pdfbin483307 -> 500412 bytes
-rw-r--r--macros/latex/contrib/esami/doc/esami-doc-en.tex4
-rw-r--r--macros/latex/contrib/esami/doc/esami-doc-it.pdfbin492308 -> 508695 bytes
-rw-r--r--macros/latex/contrib/esami/doc/esami-doc-it.tex4
-rw-r--r--macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie1.parametri.tex4
-rw-r--r--macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie2.parametri.tex4
-rw-r--r--macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie3.parametri.tex4
-rw-r--r--macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie4.parametri.tex4
-rw-r--r--macros/latex/contrib/esami/doc/examples/testA-xetex-sol.sol.tex84
-rw-r--r--macros/latex/contrib/esami/esami.sty1
-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/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/lastpage/README2
-rw-r--r--macros/latex/contrib/lastpage/lastpage-example.pdfbin130556 -> 130263 bytes
-rw-r--r--macros/latex/contrib/lastpage/lastpage.dtx89
-rw-r--r--macros/latex/contrib/lastpage/lastpage.pdfbin464581 -> 465434 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/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/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/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/luatex/generic/luamplib/Makefile1
-rw-r--r--macros/luatex/generic/luamplib/NEWS44
-rw-r--r--macros/luatex/generic/luamplib/luamplib.dtx2160
-rw-r--r--macros/luatex/generic/luamplib/luamplib.pdfbin214279 -> 254658 bytes
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-latex.tex108
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-plain.tex68
-rw-r--r--macros/luatex/generic/luatexja/README6
-rw-r--r--macros/luatex/generic/luatexja/doc/luatexja-en.pdfbin699725 -> 700023 bytes
-rw-r--r--macros/luatex/generic/luatexja/doc/luatexja-ja.pdfbin1143479 -> 1143849 bytes
-rw-r--r--macros/luatex/generic/luatexja/doc/luatexja.dtx30
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty16
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty16
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty16
-rw-r--r--macros/luatex/generic/luatexja/src/lltjext.sty8
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-latex.sty103
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-pretreat.lua7
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua4
-rw-r--r--macros/luatex/generic/luatexja/src/luatexja.sty2
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjdefs.sty51
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjfont.sty319
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-array.sty11
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty24
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty113
-rw-r--r--macros/luatex/generic/luaxml/README2
-rw-r--r--macros/luatex/generic/luaxml/luaxml-cssquery.lua14
-rw-r--r--macros/luatex/generic/luaxml/luaxml-domobject.lua95
-rw-r--r--macros/luatex/generic/luaxml/luaxml-encodings.lua88
-rw-r--r--macros/luatex/generic/luaxml/luaxml-mod-html.lua221
-rw-r--r--macros/luatex/generic/luaxml/luaxml-namedentities.lua4167
-rw-r--r--macros/luatex/generic/luaxml/luaxml-transform.lua13
-rw-r--r--macros/luatex/generic/luaxml/luaxml.pdfbin119150 -> 124725 bytes
-rw-r--r--macros/luatex/generic/luaxml/luaxml.tex92
-rw-r--r--macros/luatex/latex/piton/piton-french.pdf3196
-rw-r--r--macros/luatex/latex/piton/piton-french.tex1384
-rw-r--r--macros/luatex/latex/piton/piton.dtx367
-rw-r--r--macros/luatex/latex/piton/piton.pdf22114
-rw-r--r--macros/luatex/latex/tango/README42
-rw-r--r--macros/luatex/latex/tango/doc/tango-en.pdfbin0 -> 160307 bytes
-rw-r--r--macros/luatex/latex/tango/doc/tango-en.tex753
-rw-r--r--macros/luatex/latex/tango/doc/tango-fr.pdfbin0 -> 169741 bytes
-rw-r--r--macros/luatex/latex/tango/doc/tango-fr.tex786
-rw-r--r--macros/luatex/latex/tango/examples/Ch-1-15.tex1312
-rw-r--r--macros/luatex/latex/tango/examples/Ch-16-30.tex2061
-rw-r--r--macros/luatex/latex/tango/examples/book-mathematics.tex44
-rw-r--r--macros/luatex/latex/tango/examples/candide.tex61
-rw-r--r--macros/luatex/latex/tango/examples/euler.tex512
-rw-r--r--macros/luatex/latex/tango/examples/handout-euler.tex29
-rw-r--r--macros/luatex/latex/tango/examples/handout-polynomes-deg2.tex27
-rw-r--r--macros/luatex/latex/tango/examples/polynome-deg2.tex557
-rw-r--r--macros/luatex/latex/tango/examples/puissance-cercle.tex713
-rw-r--r--macros/luatex/latex/tango/examples/recurrence.tex189
-rw-r--r--macros/luatex/latex/tango/examples/rel-bin.tex443
-rw-r--r--macros/luatex/latex/tango/examples/schoolwork.tex238
-rw-r--r--macros/luatex/latex/tango/lualatex/tango.cls2182
-rw-r--r--macros/texinfo/latest/htmlxref.cnf7
-rw-r--r--macros/unicodetex/latex/polyglossia/README.md2
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.dtx8728
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.pdfbin381269 -> 386065 bytes
799 files changed, 63477 insertions, 32948 deletions
diff --git a/macros/context/contrib/context-chat/LICENSE b/macros/context/contrib/context-chat/LICENSE
new file mode 100644
index 0000000000..c729003181
--- /dev/null
+++ b/macros/context/contrib/context-chat/LICENSE
@@ -0,0 +1,232 @@
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+
+“This License” refers to version 3 of the GNU General Public License.
+
+“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
+
+To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
+
+A “covered work” means either the unmodified Program or a work based on the Program.
+
+To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
+
+A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
+
+A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “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 PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
+
+ context-chat
+ Copyright (C) 2024 fiee
+
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ This program 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. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ context-chat Copyright (C) 2024 fiee
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/macros/context/contrib/context-chat/README.md b/macros/context/contrib/context-chat/README.md
new file mode 100644
index 0000000000..ca1c5ec7e2
--- /dev/null
+++ b/macros/context/contrib/context-chat/README.md
@@ -0,0 +1,72 @@
+# ConTeXt Chat
+
+Typeset messenger chats with ConTeXt
+
+2024 by Henning Hraban Ramm
+
+## Introduction
+
+In a youth novel that I’m writing, the actors frequently use a messenger app on
+their smartphones to chat. I wanted to depict that accordingly, but simplified:
+no need for a sophisticated user interface, for replies, reactions, images,
+attachments etc.
+
+## Usage
+
+ \usemodule[chat]
+ \setupChat[
+ recipient=A,
+ ]
+
+ \starttext
+ \startChat{A} Do you wanna chat?\stopChat
+ \startChat{B} Maybe. What about?\stopChat
+ \startChat{A} How about cats?\stopChat
+ \startChat{A} or squirrels?\stopChat
+ \stoptext
+
+There’s no general environment around the messages. If you need to adapt the spacing or want a background, use ConTeXt’s usual possibilities.
+
+The parameter of `\startChat` is the sender of that message, i.e. their avatar. I’m using emoji for that but I’m planning to add more options.
+
+Every first message of a person shows their avatar and a speech bubble tail.
+Follow-up messages by the same person have no avatar and no tail.
+You can use `\resetChat` to reset this “memory”.
+
+Each conversation has one recipient, that’s the person reading it. Their messages (also avatar and tail) are displayed on the right-hand side, all others on the left.
+
+In my novel, the recipient is fixed by section, so I set it in a setup that is called like `\setuphead[section][before=\setup{section:before}]`.
+
+I suggest using Roboto (Condensed) as base font. You must also setup a fallback font for emojis.
+
+## Options
+
+* `recipient`: Name of the person reading the conversation.
+* `style`: text style; default: `\ss`
+* `senderstyle`: style of the avatar text; default: `\ss\bf`
+* `width`: maximum width of speech bubbles; default: `.8\textwidth`
+* `distance`: vertical distance of speech bubbles, unreliable; default: `.25em`
+* colors: You can change ChatColorI, ChatColorII, ChatNameColor and ChatFrameColor (switching to a palet soon).
+
+Options regarding the bubble, frame and tail are still missing.
+
+## Limitations
+
+Configuration options are limited. I might enhance the possibilities on request.
+
+* Avatars: I’m using emoji as avatars of the participants; I’m planning to make it work with initials (two characters) or graphics.
+* Other planned features: status messages like “Admin added Person”
+* Not currently planned features: images, emoji reactions, replies with quotes, read markers, date & time.
+* Background: Since I’m going for a printed version, I’m not planning to include a general background or a dark mode.
+* There are slightly different bubble forms for “solo”, “first”, “middle” and “last”, but ATM just “solo” and “middle” are used (automatically), since there’s no lookahead, i.e. the module can’t know what will come next. I’ll probably add an option to set the version manually.
+* Only one frame color for all messages.
+* No further documentation.
+
+## Contributors
+
+* Aditya Mahajan wrote a first draft of speech bubbles for me in 2022. His MetaPost code was more elegant than mine, but I didn’t manage to adapt it to my needs.
+* Hans Hagen gave me some valuable hints when I showed him my first working version.
+
+## License
+
+[GPL 3.0+](LICENSE)
diff --git a/macros/context/contrib/context-chat/VERSION b/macros/context/contrib/context-chat/VERSION
new file mode 100644
index 0000000000..50af9173a9
--- /dev/null
+++ b/macros/context/contrib/context-chat/VERSION
@@ -0,0 +1 @@
+2024.07.20
diff --git a/macros/context/contrib/context-chat/tex/context/third/chat/t-chat.mkiv b/macros/context/contrib/context-chat/tex/context/third/chat/t-chat.mkiv
new file mode 100644
index 0000000000..75a8acaa26
--- /dev/null
+++ b/macros/context/contrib/context-chat/tex/context/third/chat/t-chat.mkiv
@@ -0,0 +1,220 @@
+%D \module
+%D [ file=t-chat,
+%D version=2024.07.20,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Chat,
+%D author=Henning Hraban Ramm,
+%D date=\currentdate,
+%D copyright={fiëé visuëlle, H. Ramm},
+%D license={GPL 3.0+}]
+
+\unprotect
+
+% TODO: color palet
+\definecolor[ChatColorI][c=0,m=.03,y=.15,k=0]
+\definecolor[ChatColorII][c=.1,m=0,y=0,k=0]
+\definecolor[ChatNameColor][c=0,m=0,y=0,k=.1]
+\definecolor[ChatColor][ChatColorI]
+\definecolor[ChatFrameColor][ChatNameColor]
+
+\installcorenamespace {chat}
+
+\installsimplecommandhandler \??chat {Chat} \??chat
+
+\setupChat[
+ recipient=,
+ person=,
+ \c!distance=.25em,
+ \c!style={\ss},
+ \c!width=.8\textwidth,
+ senderstyle={\ss\bf},
+]
+
+% \Chatparameter
+
+\startuniqueMPgraphic{ChatBubble}
+% side: 0=right, 1=left
+% pos: 0 solo, 1 top, 2 middle, 3 bottom
+
+ numeric side, pos ;
+ string bgcol ;
+
+ if "\getvariable{Chat}{Person}" = "\Chatparameter{recipient}" :
+ side := 0;
+ bgcol := "ChatColorI";
+ ; else :
+ side := 1;
+ bgcol := "ChatColorII";
+ ; fi ;
+
+ if "\getvariable{Chat}{Person}" = "\getvariable{Chat}{PrevPerson}" :
+ % same as previous person: omit tail
+ pos := 3;
+ ; else :
+ % since we can’t know what’s next, go with "solo"
+ pos := 0;
+ ; fi ;
+
+ cradius := .125cm;
+ tailoffset := .125cm;
+ tailsize := .25cm;
+ h := OverlayHeight;
+ w := OverlayWidth;
+
+ if h < (2*cradius + 2*tailsize):
+ % if the box is too small, reduce radius and tail size
+ cradius := h/3;
+ tailsize := h/3;
+ tailoffset := 0;
+ fi;
+
+ pair ll[],lr[],tl[],tr[],s[];
+
+ % corners
+ ll1 := (0,cradius);
+ ll2 := (cradius,0);
+ lr1 := (w,cradius);
+ lr2 := (w-cradius,0);
+ % tail points
+ tl1 := (0,h-cradius);
+ tl2 := (cradius,h);
+ tr1 := (w,h-cradius);
+ tr2 := (w-cradius,h);
+
+ s1 := (w,h-cradius-tailoffset);
+ s2 := (w+tailsize,h-cradius-tailoffset);
+ s3 := (w,h-cradius-tailoffset-tailsize);
+
+ if pos > 1: % disable tail on middle/bottom
+ %s1 := (w,h-cradius-tailoffset);
+ s2 := (w,h-cradius-tailoffset);
+ %s3 := (w,h-cradius-tailoffset-tailsize);
+ fi;
+ if (pos = 1) or (pos = 2): % top/middle
+ lr1 := (w,cradius/3);
+ lr2 := (w-cradius/3,0);
+ fi;
+ if (pos = 2) or (pos = 3): % middle/bottom
+ tr1 := (w,h-cradius/3);
+ tr2 := (w-cradius/3,h);
+ fi;
+
+ path p ;
+ p := (ll1 ... ll2 --- lr2 ... lr1 -- s3 -- s2 -- s1 -- tr1 ... tr2 --- tl2 ... tl1 --- cycle);
+
+ % mirror the bubble for left side
+ if side = 1:
+ p := p reflectedabout ((w/2,0),(w/2,h));
+ fi;
+
+ fill p withcolor bgcol ;
+ draw p withpen pencircle scaled 0.75 withcolor "ChatFrameColor";
+
+ setbounds currentpicture to OverlayBox ;
+\stopuniqueMPgraphic
+
+\defineframedtext[ChatBubbleFrame][
+ style=\Chatparameter\s!style,
+ align=flushleft,
+ frame=off,
+ width=\Chatparameter\s!width,
+ autowidth=force,
+ offset=0pt,
+ loffset=2pt,
+ roffset=3pt,
+ before={\vskip\dimexpr-1em+\Chatparameter\c!distance\relax},
+ after={\vskip\dimexpr-\Chatparameter\c!distance\relax},
+]
+
+% Receive text (left-facing).
+\defineoverlay[ChatGetOverlay][\uniqueMPgraphic{ChatBubble}]
+\defineframedtext[ChatGetFrame][ChatBubbleFrame][
+ background=ChatGetOverlay,
+ location=left,
+]
+
+% Send text (right-facing).
+\defineoverlay[ChatSendOverlay][\uniqueMPgraphic{ChatBubble}]
+\defineframedtext[ChatSendFrame][ChatBubbleFrame][
+ background=ChatSendOverlay,
+ location=right,
+]
+
+% This should become an avatar
+% or simply initials in a circle
+\defineframed[ChatSenderFramed][
+ width=1em,
+ offset=overlay,
+ frame=off,
+ style=\Chatparameter{senderstyle},
+ %offset=0pt,
+ %loffset=0.25em,
+ %roffset=0.25em,
+ %corner=rounded,
+ %frameradius=.5em,
+ %background=color,
+ %backgroundcolor=ChatFrameColor,
+]
+
+% Only show names (avatars) if person is different from last one
+% Sender name: #1 x-offset
+\define[1]\ChatSender{\offset[x=#1]{%
+ \doifnot{\getvariable{Chat}{Person}}{\getvariable{Chat}{PrevPerson}}{
+ % TODO: style \ss\tfx if more than 2 chars
+ \ChatSenderFramed{\style[style=\Chatparameter{senderstyle}]{\getvariable{Chat}{Person}}}}%
+ }%
+}
+
+\define[1]\startChat{%
+ \setevariable{Chat}{PrevPerson}{\getvariable{Chat}{Person}}
+ \setevariable{Chat}{Person}{#1}
+ \testpage[1]
+ \doifelse{\getvariable{Chat}{Person}}{\Chatparameter{recipient}}{
+ % recipient
+ \ChatSender{\dimexpr\textwidth-1.25em\relax}
+ \startnarrow[left=.5em]\startChatSendFrame
+ }{
+ % other sender
+ \ChatSender{-0.25em}
+ \startnarrow[right=.5em]\startChatGetFrame
+ }
+}
+
+\def\resetChat{%
+ \setevariable{Chat}{Recipient}{}%
+ \setevariable{Chat}{Person}{}%
+ \setevariable{Chat}{PrevPerson}{0}%
+}
+
+\def\stopChat{
+\doifelse{\getvariable{Chat}{Person}}{\Chatparameter{recipient}}{
+ % recipient
+ \stopChatSendFrame%
+}{
+ % other sender
+ \stopChatGetFrame%
+}
+\stopnarrow%
+}
+
+\resetChat
+
+\protect
+
+\continueifinputfile{t-chat.mkiv}
+
+\starttext
+
+\setupChat[
+ recipient=A,
+]
+
+\starttext
+\startChat{A} Do you wanna chat?\stopChat
+\startChat{B} Maybe. What about?\stopChat
+\startChat{A} How about cats?\stopChat
+\startChat{A} or squirrels?\stopChat
+\stoptext
+
+
+\stoptext
diff --git a/macros/generic/markdown/CHANGES.md b/macros/generic/markdown/CHANGES.md
index 550989a936..922aadff91 100644
--- a/macros/generic/markdown/CHANGES.md
+++ b/macros/generic/markdown/CHANGES.md
@@ -1,5 +1,34 @@
# Changes
+## 3.6.2 (2024-07-14)
+
+Fixes:
+
+- Fix the interplay between inline notes and square brackets.
+ (#453, #456, reported by @nopria, contributed by @lostenderman)
+- Fix the interplay between lists and citations.
+ (witiko/expltools#3, #460, #461, contributed by @lostenderman)
+- Do not override the `outputDir` option if if has been defined
+ before loading the package and pass it to lt3luabridge library.
+ (#457, #459)
+
+Documentation:
+
+- Fix various typos. (#454, contributed by @mbertucci47)
+- Add file `DEPENDS.txt`. (#462, #463, 93bb7e18)
+
+Continuous Integration:
+
+- Only test latest TeX Live in pull requests. (81927ca1)
+
+Unit Tests:
+
+- Test the `outputDir` plain TeX option. (#457, #459)
+
+Libraries:
+
+- Update `tinyyaml` to v0.4.4-1-g197632c. (1e83ac94)
+
## 3.6.1 (2024-06-20)
Fixes:
@@ -704,7 +733,7 @@ Development:
- Add support for strike-throughs, fenced divs, subscripts, superscripts,
and fancy lists. (#149, #160, #162, #168, #170)
-- Add facade in front of expl3 inferface for YAML metadata. (#118, #175)
+- Add facade in front of expl3 interface for YAML metadata. (#118, #175)
- Add `\setupmarkdown` and `\inputmarkdown` commands to ConTeXt. (#17, #176)
Fixes:
@@ -784,7 +813,7 @@ Docker:
Documentation:
-- Remove disfunctional badges for Docker from `README.md`. (ad00b58, 707cad9)
+- Remove dysfunctional badges for Docker from `README.md`. (ad00b58, 707cad9)
- Link to TUG's version of the TUG 2021 video in `README.md`. (1462411)
Miscellaneous:
@@ -1045,7 +1074,7 @@ Fixes:
Fixes:
- String text and parenthetical citations. (e6026c1)
-- Escape autolink labels even when hybrid mode is enabled. (repored by @iwelch,
+- Escape autolink labels even when hybrid mode is enabled. (reported by @iwelch,
693e134)
- Protect LaTeX strong emphasis renderer prototype and make it detect font.
(reported by @iwelch, 89a031a)
diff --git a/macros/generic/markdown/DEPENDS.txt b/macros/generic/markdown/DEPENDS.txt
new file mode 100644
index 0000000000..3f73ad3431
--- /dev/null
+++ b/macros/generic/markdown/DEPENDS.txt
@@ -0,0 +1,21 @@
+hard l3kernel
+hard lt3luabridge
+hard lua-uni-algos
+soft amsfonts
+soft amsmath
+soft catchfile
+soft csvsimple
+soft epstopdf-pkg
+soft etoolbox
+soft fancyvrb
+soft gobble
+soft graphics
+soft grffile
+soft latex
+soft ltxcmds
+soft paralist
+soft pgf
+soft soul
+soft tools
+soft url
+soft verse
diff --git a/macros/generic/markdown/README.md b/macros/generic/markdown/README.md
index 1aaa42ed9e..2a02ee9736 100644
--- a/macros/generic/markdown/README.md
+++ b/macros/generic/markdown/README.md
@@ -18,7 +18,7 @@ Markdown
The Markdown package converts [CommonMark][] markup to TeX commands. The
functionality is provided both as a Lua module, and as plain TeX, LaTeX, and
ConTeXt macro packages that can be used to directly typeset TeX documents
-containing markdown markup. Unlike other convertors, the Markdown package does
+containing markdown markup. Unlike other converters, the Markdown package does
not require any external programs, and makes it easy to redefine how each and
every markdown element is rendered. Creative abuse of the markdown syntax is
encouraged. 😉
diff --git a/macros/generic/markdown/VERSION b/macros/generic/markdown/VERSION
index e15dd6a469..c2b2c7e0ab 100644
--- a/macros/generic/markdown/VERSION
+++ b/macros/generic/markdown/VERSION
@@ -1 +1 @@
-3.6.1-0-g5a45a922 (2024-06-20)
+3.6.2-0-g6c30af7e (2024-07-14)
diff --git a/macros/generic/markdown/docstrip.cfg b/macros/generic/markdown/docstrip.cfg
index 9dc5f65230..959a3a21c3 100644
--- a/macros/generic/markdown/docstrip.cfg
+++ b/macros/generic/markdown/docstrip.cfg
@@ -22,7 +22,7 @@
-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE^^J%
-- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.^^J%
--^^J%
--- Copyright (C) 2016-2024 Vít Starý Novotný^^J%
+-- Copyright (C) 2016-2024 Vít Starý Novotný, Andrej Genčur^^J%
--^^J%
-- This work may be distributed and/or modified under the^^J%
-- conditions of the LaTeX Project Public License, either version 1.3^^J%
@@ -62,7 +62,7 @@
\let\luapostamble\empty
\declarepreamble\texpreamble
-Copyright (C) 2016-2024 Vít Starý Novotný
+Copyright (C) 2016-2024 Vít Starý Novotný, Andrej Genčur
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
diff --git a/macros/generic/markdown/libraries/markdown-tinyyaml.lua b/macros/generic/markdown/libraries/markdown-tinyyaml.lua
index 36cef293ed..25b351f7e4 100644
--- a/macros/generic/markdown/libraries/markdown-tinyyaml.lua
+++ b/macros/generic/markdown/libraries/markdown-tinyyaml.lua
@@ -253,7 +253,9 @@ function Parser:parsestring(line, stopper)
end
line = ssub(line, 2)
end
- return rtrim(buf), line
+ buf = rtrim(buf)
+ local val = tonumber(buf) or buf
+ return val, line
end
local function isemptyline(line)
diff --git a/macros/generic/markdown/markdown.dtx b/macros/generic/markdown/markdown.dtx
index 4685ed3ee6..97fa8d6b56 100644
--- a/macros/generic/markdown/markdown.dtx
+++ b/macros/generic/markdown/markdown.dtx
@@ -122,7 +122,7 @@
---
title: A Markdown Interpreter for \TeX
url: https://github.com/witiko/markdown
-authors: [Vít Starý Novotný]
+authors: [Vít Starý Novotný, Andrej Genčur]
email: witiko@mail.muni.cz
revision: \markdownVersion
date: \markdownLastModified
@@ -796,6 +796,7 @@ abbr {
%<*themes-witiko-markdown-techdoc>
\ProvidesPackage{markdownthemewitiko_markdown_techdoc}[2022/12/13]
\RequirePackage{etoolbox}
+\gdef\ltd@title@author{\@gobble}%
\markdownSetup{
renderers = {
head*Four = {\paragraph{#1}\leavevmode},
@@ -804,6 +805,7 @@ abbr {
codeSpan = {\inline{#1}},
jekyllData(End) = {%
\AfterEndPreamble{%
+ \hypersetup{pdfauthor=\ltd@title@author}%
\printtitlepage
\tableofcontents
{\def\addcontentsline##1##2##3{}\listoffigures}%
@@ -812,8 +814,7 @@ abbr {
},
jekyllDataRenderers = {
/authors/* = {%
- \gdef\ltd@title@author{#1}%
- \hypersetup{pdfauthor={#1}}%
+ \expandafter\gdef\expandafter\ltd@title@author\expandafter{\ltd@title@author, #1}%
},
title = {%
\gdef\ltd@title@title{#1}%
@@ -875,7 +876,7 @@ abbr {
---
title: Markdown Package User Manual
-author: Vít Starý Novotný
+author: Vít Starý Novotný, Andrej Genčur
date: \markdownVersion{} \markdownLastModified{}
---
@@ -890,7 +891,7 @@ Introduction
The [Markdown package][pkg] converts [CommonMark][] markup to \TeX{} commands. The
functionality is provided both as a Lua module and as plain \TeX{}, \LaTeX{}, and
\Hologo{ConTeXt} macro packages that can be used to directly typeset \TeX{} documents
-containing markdown markup. Unlike other convertors, the Markdown package
+containing markdown markup. Unlike other converters, the Markdown package
does not require any external programs, and makes it easy to redefine how each
and every markdown element is rendered. Creative abuse of the markdown
syntax is encouraged. 😉
@@ -928,9 +929,9 @@ documentation][techdoc].
local metadata = {
version = "(((VERSION)))",
comment = "A module for the conversion from markdown to plain TeX",
- author = "John MacFarlane, Hans Hagen, Vít Starý Novotný",
+ author = "John MacFarlane, Hans Hagen, Vít Starý Novotný, Andrej Genčur",
copyright = {"2009-2016 John MacFarlane, Hans Hagen",
- "2016-2023 Vít Starý Novotný"},
+ "2016-2024 Vít Starý Novotný, Andrej Genčur"},
license = "LPPL 1.3c"
}
@@ -1148,6 +1149,17 @@ end)()
%: A package that implements Unicode case-folding in \TeX{} Live${}\geq{}2020$.
%
% \end{markdown}
+% \iffalse
+%</lua>
+%<*depends>
+% \fi
+% \begin{macrocode}
+hard lua-uni-algos
+% \end{macrocode}
+% \iffalse
+%</depends>
+%<*lua>
+% \fi
% \begin{macrocode}
local uni_algos = require("lua-uni-algos")
% \end{macrocode}
@@ -1166,6 +1178,13 @@ local uni_algos = require("lua-uni-algos")
% \end{markdown}
% \iffalse
%</lua>
+%<*depends>
+% \fi
+% \begin{macrocode}
+# hard lua-tinyyaml # TODO: Uncomment after TeX Live 2022 has been deprecated.
+% \end{macrocode}
+% \iffalse
+%</depends>
%<*tex>
% \fi
% \par
@@ -1185,18 +1204,33 @@ local uni_algos = require("lua-uni-algos")
% such as options, renderers, and renderer prototypes.
%
% \end{markdown}
-% \begin{macrocode}
+% \iffalse
%</tex>
+%<*depends>
+% \fi
+% \begin{macrocode}
+hard l3kernel
+% \end{macrocode}
+% \iffalse
+%</depends>
%<*context>
+% \fi
+% \begin{macrocode}
\unprotect
+% \end{macrocode}
+% \iffalse
%</context>
%<*context,tex>
+% \fi
+% \begin{macrocode}
\ifx\ExplSyntaxOn\undefined
\input expl3-generic
\fi
+% \end{macrocode}
+% \iffalse
%</context,tex>
%<*tex>
-% \end{macrocode}
+% \fi
% \begin{markdown}
%
% \pkg{lt3luabridge}
@@ -1205,6 +1239,20 @@ local uni_algos = require("lua-uni-algos")
% with other TeX engines that provide the *shell escape* capability,
% which allows them to execute code with the system's shell.
%
+% \end{markdown}
+% \iffalse
+%</tex>
+%<*depends>
+% \fi
+% \begin{macrocode}
+hard lt3luabridge
+% \end{macrocode}
+% \iffalse
+%</depends>
+%<*tex>
+% \fi
+% \begin{markdown}
+%
% The plain \TeX{} part of the package also requires the following Lua module:
%
% \pkg{Lua File System}
@@ -1249,10 +1297,13 @@ local uni_algos = require("lua-uni-algos")
%<*themes-witiko-dot,latex-themes-witiko-graphicx-http>
% \fi
% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
% \end{macrocode}
% \iffalse
%</themes-witiko-dot,latex-themes-witiko-graphicx-http>
+%</latex>
+%<*depends>
% \fi
% \begin{markdown}
% a \TeX{} engine that extends \Hologo{eTeX}, and all the plain \TeX{}
@@ -1269,10 +1320,23 @@ local uni_algos = require("lua-uni-algos")
%
%: A package that provides the `\url` macro for the typesetting of links.
%
+% \end{markdown}
+% \begin{macrocode}
+soft url
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{graphicx}
%
%: A package that provides the `\includegraphics` macro for the typesetting
-% of images.
+% of images.Furthermore, it also provides a key-value interface that is
+% used in the default renderer prototypes for image attribute contexts.
+%
+% \end{markdown}
+% \begin{macrocode}
+soft graphics
+% \end{macrocode}
+% \begin{markdown}
%
% \pkg{paralist}
%
@@ -1281,45 +1345,85 @@ local uni_algos = require("lua-uni-algos")
% ordered lists, and definition lists as well as the rendering of
% fancy lists.
%
+% \end{markdown}
+% \begin{macrocode}
+soft paralist
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{ifthen}
%
%: A package that provides a concise syntax for the inspection of macro
% values. It is used in the `witiko/dot` \LaTeX{} theme (see Section
% <#sec:latexthemes>).
%
+% \end{markdown}
+% \begin{macrocode}
+soft latex
+soft epstopdf-pkg # required by `latex`
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{fancyvrb}
%
%: A package that provides the `\VerbatimInput` macros for the verbatim
% inclusion of files containing code.
%
+% \end{markdown}
+% \begin{macrocode}
+soft fancyvrb
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{csvsimple}
%
%: A package that provides the `\csvautotabular` macro for typesetting
% \acro{csv} files in the default renderer prototypes for iA\\,Writer
% content blocks.
%
+% \end{markdown}
+% \begin{macrocode}
+soft csvsimple
+soft pgf # required by `csvsimple`, which loads `pgfkeys.sty`
+soft tools # required by `csvsimple`, which loads `shellesc.sty`
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{gobble}
%
%: A package that provides the `\@gobblethree` \TeX{} command that
% is used in the default renderer prototype for citations. The package
% is included in \TeX Live${}\geq{}2016$.
%
+% \end{markdown}
+% \begin{macrocode}
+soft gobble
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{amsmath} and \pkg{amssymb}
%
%: Packages that provide symbols used for drawing ticked and unticked
% boxes.
%
+% \end{markdown}
+% \begin{macrocode}
+soft amsmath
+soft amsfonts
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{catchfile}
%
%: A package that catches the contents of a file and puts it in a macro. It
% is used in the `witiko/graphicx/http` \LaTeX{} theme, see Section
% <#sec:latexthemes>.
%
-% \pkg{graphicx}
-%
-%: A package that builds upon the \pkg{graphics} package, which is part of
-% the \LaTeXe{} kernel. It provides a key-value interface that is used in
-% the default renderer prototypes for image attribute contexts.
+% \end{markdown}
+% \begin{macrocode}
+soft catchfile
+% \end{macrocode}
+% \begin{markdown}
%
% \pkg{grffile}
%
@@ -1330,6 +1434,12 @@ local uni_algos = require("lua-uni-algos")
% the `witiko/dot` and `witiko/graphicx/http` \LaTeX{} themes, see Section
% <#sec:latexthemes>.
%
+% \end{markdown}
+% \begin{macrocode}
+soft grffile
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{etoolbox}
%
%: A package that is used to polyfill the general hook management system in
@@ -1337,10 +1447,23 @@ local uni_algos = require("lua-uni-algos")
% <#sec:latex-yaml-metadata>, and also in the default renderer prototype
% for identifier attributes.
%
+% \end{markdown}
+% \begin{macrocode}
+soft etoolbox
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{soulutf8}
%
%: A package that is used in the default renderer prototype for
% strike-throughs and marked text.
+% <!-- TODO: 1,$s/soulutf8/soul/g in TeX Live 2023. -->
+%
+% \end{markdown}
+% \begin{macrocode}
+soft soul
+% \end{macrocode}
+% \begin{markdown}
%
% \pkg{ltxcmds}
%
@@ -1348,6 +1471,12 @@ local uni_algos = require("lua-uni-algos")
% \pkg{listings} packages are loaded in the default renderer prototype
% for fenced code blocks.
%
+% \end{markdown}
+% \begin{macrocode}
+soft ltxcmds
+% \end{macrocode}
+% \begin{markdown}
+%
% \pkg{verse}
%
%: A package that is used in the default renderer prototypes for
@@ -1355,10 +1484,13 @@ local uni_algos = require("lua-uni-algos")
%
% \end{markdown}
% \begin{macrocode}
-\RequirePackage{expl3}
+soft verse
% \end{macrocode}
+% \begin{markdown}
+%
+% \end{markdown}
% \iffalse
-%</latex>
+%</depends>
%<*context>
% \fi
% \par
@@ -7237,7 +7369,7 @@ defaultOptions.html = true
: false
: Enable the escaping of special plain \TeX{} characters outside verbatim
- environments, so that they are not interpretted by \TeX{}. This is
+ environments, so that they are not interpreted by \TeX{}. This is
encouraged when typesetting automatically generated content or
markdown documents that were not prepared with this package in mind.
@@ -11322,7 +11454,7 @@ for i = 1, #arg do
end
% \end{macrocode}
% \begin{markdown}
-% The first argument that matches none of the above patters is assumed to be
+% The first argument that matches none of the above patterns is assumed to be
% the input filename. The input filename should correspond to the Markdown
% document that is going to be converted to a \TeX{} document.
% \end{markdown}
@@ -11331,7 +11463,7 @@ for i = 1, #arg do
input_filename = arg[i]
% \end{macrocode}
% \begin{markdown}
-% The first argument that matches none of the above patters is assumed to be
+% The first argument that matches none of the above patterns is assumed to be
% the output filename. The output filename should correspond to the \TeX{}
% document that will result from the conversion.
% \end{markdown}
@@ -11856,47 +11988,10 @@ For more information, see the examples for the \Opt{finalizeCache} option.
%
% \end{markdown}
% \begin{macrocode}
-\cs_generate_variant:Nn
- \@@_add_plain_tex_option:nnn
- { nnV }
-% \end{macrocode}
-% \begin{markdown}
-%
-% Use the \pkg{lt3luabridge} library to determine the default value of the
-% \mref{markdownOptionOutputDir} macro by using the environmental variable
-% `TEXMF_OUTPUT_DIRECTORY` that is available since TeX~Live 2024.
-%
-% \end{markdown}
-% \begin{macrocode}
-\ExplSyntaxOff
-\input lt3luabridge.tex
-\ExplSyntaxOn
-\bool_if:nTF
- {
- \cs_if_exist_p:N
- \luabridge_tl_set:Nn &&
- (
- \int_compare_p:nNn
- { \g_luabridge_method_int }
- =
- { \c_luabridge_method_directlua_int } ||
- \sys_if_shell_unrestricted_p:
- )
- }
- {
- \luabridge_tl_set:Nn
- \l_tmpa_tl
- { print(os.getenv("TEXMF_OUTPUT_DIRECTORY") or ".") }
- }
- {
- \tl_set:Nn
- \l_tmpa_tl
- { . }
- }
-\@@_add_plain_tex_option:nnV
+\@@_add_plain_tex_option:nnn
{ outputDir }
{ path }
- \l_tmpa_tl
+ { . }
% \end{macrocode}
% \iffalse
%</tex>
@@ -12172,22 +12267,73 @@ A PDF document named `document.pdf` should be produced and contain the text
% \end{macrocode}
% \begin{markdown}
%
-% Do not override options defined before loading the package.
+% Use the \pkg{lt3luabridge} library to determine the default value of the
+% \mref{markdownOptionOutputDir} macro by using the environmental variable
+% `TEXMF_OUTPUT_DIRECTORY` that is available since TeX~Live 2024.
%
% \end{markdown}
% \begin{macrocode}
- \@@_option_tl_to_csname:nN
+ \str_if_eq:nnTF
{ #1 }
- \l_tmpa_tl
- \cs_if_exist:cF
- { \l_tmpa_tl }
+ { outputDir }
+ { \@@_define_option_command_output_dir: }
{
- \@@_get_default_option_value:nN
- { #1 }
- \l_tmpa_tl
- \@@_set_option_value:nV
+% \end{macrocode}
+% \begin{markdown}
+%
+% Do not override options defined before loading the package.
+%
+% \end{markdown}
+% \begin{macrocode}
+ \@@_option_tl_to_csname:nN
{ #1 }
\l_tmpa_tl
+ \cs_if_exist:cF
+ { \l_tmpa_tl }
+ {
+ \@@_get_default_option_value:nN
+ { #1 }
+ \l_tmpa_tl
+ \@@_set_option_value:nV
+ { #1 }
+ \l_tmpa_tl
+ }
+ }
+ }
+\ExplSyntaxOff
+\input lt3luabridge.tex
+\ExplSyntaxOn
+\cs_new:Nn
+ \@@_define_option_command_output_dir:
+ {
+ \cs_if_free:NT
+ \markdownOptionOutputDir
+ {
+ \bool_if:nTF
+ {
+ \cs_if_exist_p:N
+ \luabridge_tl_set:Nn &&
+ (
+ \int_compare_p:nNn
+ { \g_luabridge_method_int }
+ =
+ { \c_luabridge_method_directlua_int } ||
+ \sys_if_shell_unrestricted_p:
+ )
+ }
+ {
+ \luabridge_tl_set:Nn
+ \l_tmpa_tl
+ { print(os.getenv("TEXMF_OUTPUT_DIRECTORY") or ".") }
+ \tl_gset:NV
+ \markdownOptionOutputDir
+ \l_tmpa_tl
+ }
+ {
+ \tl_gset:Nn
+ \markdownOptionOutputDir
+ { . }
+ }
}
}
\cs_new:Nn
@@ -14039,7 +14185,7 @@ following text:
#### Code Block Renderers
The \mdef{markdownRendererInputVerbatim} macro represents a code
block. The macro receives a single argument that corresponds to the
-filename of a file contaning the code block contents.
+filename of a file containing the code block contents.
% \end{markdown}
%
@@ -14073,7 +14219,7 @@ filename of a file contaning the code block contents.
The \mdef{markdownRendererInputFencedCode} macro represents a fenced code
block. This macro will only be produced, when the \Opt{fencedCode} option is
enabled. The macro receives three arguments that correspond to the filename of
-a file contaning the code block contents, the fully escaped code fence infostring
+a file containing the code block contents, the fully escaped code fence infostring
that can be directly typeset, and the raw code fence infostring that can be used
outside typesetting.
@@ -15289,7 +15435,7 @@ following text:
% \begin{markdown}
#### Ellipsis Renderer
-The \mdef{markdownRendererEllipsis} macro replaces any occurance of ASCII
+The \mdef{markdownRendererEllipsis} macro replaces any occurrence of ASCII
ellipses in the input text. This macro will only be produced, when the
\Opt{smartEllipses} option is enabled. The macro receives no arguments.
@@ -18435,7 +18581,7 @@ following text:
#### Raw Content Renderers
The \mdef{markdownRendererInputRawInline} macro represents an inline raw span.
-The macro receives two arguments: the filename of a file contaning the inline
+The macro receives two arguments: the filename of a file containing the inline
raw span contents and the raw attribute that designates the format of the
inline raw span. This macro will only be produced, when the \Opt{rawAttribute}
option is enabled.
@@ -18470,7 +18616,7 @@ option is enabled.
% \begin{markdown}
The \mdef{markdownRendererInputRawBlock} macro represents a raw block. The
-macro receives two arguments: the filename of a file contaning the raw block
+macro receives two arguments: the filename of a file containing the raw block
and the raw attribute that designates the format of the raw block. This macro
will only be produced, when the \Opt{rawAttribute} and \Opt{fencedCode} options
are enabled.
@@ -19368,7 +19514,7 @@ following content:
\markdownSetup{
renderers = {
table = {%
- This is a table with caption \emph{#1} that is #3 colums wide
+ This is a table with caption \emph{#1} that is #3 columns wide
and #2 rows long.
\rowCounter=0%
\def\rowTotal{#2}%
@@ -19397,7 +19543,7 @@ A PDF document named `document.pdf` should be produced and contain the
following text:
> This is a table with caption *Demonstration of pipe table syntax* that is 4
-> colums wide and 4 rows long. As for the alignment, column number 1 is
+> columns wide and 4 rows long. As for the alignment, column number 1 is
> right-aligned, column number 2 is left-aligned, column number 3 has default
> alignment, and column number 4 is centered. In row 1, column number 1 says
> *Right*, column number 2 says *Left*, column number 3 says *Default*, and
@@ -20256,7 +20402,7 @@ following text:
%#### Generating Plain \TeX{} Token Renderer Macros and Key-Values {#plain-tex-renderers}
%
% We define the command \mdef{@@_define_renderers:} that defines plain \TeX{}
-% macros for token renderers. Futhermore, the `\markdownSetup` macro also accepts
+% macros for token renderers. Furthermore, the `\markdownSetup` macro also accepts
% the `renderers` key, whose value must be a list of key-values, where the keys
% correspond to the markdown token renderer macros and the values are new
% definitions of these token renderers.
@@ -20974,7 +21120,7 @@ following text:
%#### Generating Plain \TeX{} Token Renderer Prototype Macros and Key-Values {#plain-tex-renderer-prototypes}
%
% We define the command \mdef{@@_define_renderer_prototypes:} that defines plain \TeX{}
-% macros for token renderer prototypes. Futhermore, the `\markdownSetup` macro also accepts
+% macros for token renderer prototypes. Furthermore, the `\markdownSetup` macro also accepts
% the `rendererPrototype` key, whose value must be a list of key-values, where the keys
% correspond to the markdown token renderer prototype macros and the values are new
% definitions of these token renderer prototypes.
@@ -21600,7 +21746,7 @@ following code in our \LaTeX{} document:
We can also set all plain \TeX{} options directly from \LaTeX{}. For example,
to set the `\markdownOptionInputTempFileName` plain \TeX{} option to
-`helper-script.lua`, we would inclde the following code in our \LaTeX{}
+`helper-script.lua`, we would include the following code in our \LaTeX{}
document:
``` tex
@@ -22559,7 +22705,7 @@ end
% Given a table `char_escapes` mapping escapable characters to escaped
% strings and optionally a table `string_escapes` mapping escapable strings
% to escaped strings, the \luamdef{util.escaper} method returns an escaper
-% function that escapes all occurances of escapable strings and characters (in
+% function that escapes all occurrences of escapable strings and characters (in
% this order).
%
% The method uses \pkg{LPeg}, which is faster than the Lua `string.gsub`
@@ -22588,7 +22734,7 @@ function util.escaper(char_escapes, string_escapes)
% \begin{markdown}
% If `string_escapes` is provided, turn `escapable` into the
% $$\sum^^B{(`k`, `v`)\in`string_escapes`}`P(k) / v` + `escapable`$$
-% capture that replaces any occurance of the string `k` with the string
+% capture that replaces any occurrence of the string `k` with the string
% `v` for each $(`k`, `v`)\in`string_escapes`$. Note that the pattern
% summation is not commutative and its operands are inspected in the
% summation order during the matching. As a corrolary, the strings always
@@ -28687,7 +28833,7 @@ function M.reader.new(writer, options)
+ #parsers.link_text
* Cg(Cc("link_text"), "link_type")
- parsers.note_opening = #(parsers.circumflex * parsers.shortcut_link)
+ parsers.note_opening = #(parsers.circumflex * parsers.link_text)
* Cg(Cc("note_inline"), "link_type")
parsers.raw_note_opening = #( parsers.lbracket
@@ -29137,9 +29283,10 @@ function M.reader.new(writer, options)
end
for i,value in ipairs(t) do
- if not value.is_closing or
- value.type ~= "delimiter" or
- not (value.element == "link" or value.element == "image" or value.element == "note") then
+ if not value.is_closing
+ or value.type ~= "delimiter"
+ or not (value.element == "link" or value.element == "image" or value.element == "note")
+ or value.removed then
goto continue
end
@@ -30446,7 +30593,7 @@ M.extensions.citations = function(citation_nbsps)
)
* citation_name
* (parsers.internal_punctuation - parsers.semicolon)^-1
- * ( parsers.spnlc
+ * ( parsers.spnlc / function(_) return end
* citation_body_postnote
+ Cc("")
* parsers.spnlc
@@ -33217,7 +33364,7 @@ end
%### Themes {#themes-implementation}
%
% This section implements the theme-loading mechanism and the built-in themes
-% provided with the Markdown package. Futhermore, this section also implements
+% provided with the Markdown package. Furthermore, this section also implements
% the built-in plain \TeX{} themes provided with the Markdown package.
%
% \end{markdown}
@@ -34161,6 +34308,9 @@ end
}
}
}
+ \str_gset:NV
+ \g_luabridge_output_dirname_str
+ \markdownOptionOutputDir
\luabridge_now:e
{ #1 }
}
@@ -34456,7 +34606,7 @@ end
% \LaTeX{} Implementation {#lateximplementation}
%-------------------------
%
-% The \LaTeX{} implemenation makes use of the fact that, apart from some subtle
+% The \LaTeX{} implementation makes use of the fact that, apart from some subtle
% differences, \LaTeX{} implements the majority of the plain \TeX{}
% format~[@latex17, Section 9]. As a consequence, we can directly reuse the
% existing plain \TeX{} implementation.
@@ -34685,7 +34835,7 @@ end
%### Themes {#latex-themes-implementation}
%
% This section overrides the plain \TeX{} implementation of the theme-loading
-% mechanism from Section <#sec:themes-implementation>. Futhermore, this section
+% mechanism from Section <#sec:themes-implementation>. Furthermore, this section
% also implements the built-in \LaTeX{} themes provided with the Markdown package.
%
% \end{markdown}
@@ -36412,7 +36562,7 @@ end
%### Themes {#context-themes-implementation}
%
% This section overrides the plain \TeX{} implementation of the theme-loading
-% mechanism from Section <#sec:themes-implementation>. Futhermore, this section
+% mechanism from Section <#sec:themes-implementation>. Furthermore, this section
% also implements the built-in \Hologo{ConTeXt} themes provided with the
% Markdown package.
%
diff --git a/macros/generic/markdown/markdown.html b/macros/generic/markdown/markdown.html
index f16477d948..81e62b2044 100644
--- a/macros/generic/markdown/markdown.html
+++ b/macros/generic/markdown/markdown.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <meta name="author" content="Vít Starý Novotný" />
+ <meta name="author" content="Vít Starý Novotný, Andrej Genčur" />
<title>Markdown Package User Manual</title>
<style>
code{white-space: pre-wrap;}
@@ -92,8 +92,8 @@
<body>
<header id="title-block-header">
<h1 class="title">Markdown Package User Manual</h1>
-<p class="author">Vít Starý Novotný</p>
-<p class="date">3.6.1-0-g5a45a922 2024-06-20</p>
+<p class="author">Vít Starý Novotný, Andrej Genčur</p>
+<p class="date">3.6.2-0-g6c30af7e 2024-07-14</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
@@ -191,7 +191,7 @@ class="tex">T<sub>e</sub>X</span>, <span
class="latex">L<sup>a</sup>T<sub>e</sub>X</span>, and Con<span
class="tex">T<sub>e</sub>X</span>t macro packages that can be used to
directly typeset <span class="tex">T<sub>e</sub>X</span> documents
-containing markdown markup. Unlike other convertors, the Markdown
+containing markdown markup. Unlike other converters, the Markdown
package does not require any external programs, and makes it easy to
redefine how each and every markdown element is rendered. Creative abuse
of the markdown syntax is encouraged. <i class="em em-wink"></i></p>
@@ -227,10 +227,10 @@ class="tex">T<sub>e</sub>X</span> distribution, you will need to install
it.</p>
<p>From <a href="https://github.com/witiko/markdown/releases"
title="Releases - witiko/markdown">Releases</a>, download <a
-href="https://github.com/witiko/markdown/releases/download/3.6.1/markdown.zip"
-title="Release 3.6.1 - witiko/markdown">an archive
+href="https://github.com/witiko/markdown/releases/download/3.6.2/markdown.zip"
+title="Release 3.6.2 - witiko/markdown">an archive
<code>markdown.zip</code> for this version of the Markdown package
-(3.6.1)</a> or a different version that you wish to install. Then, unzip
+(3.6.2)</a> or a different version that you wish to install. Then, unzip
the archive. If you downloaded an archive for a different version of the
Markdown package, you should now locate a file named
<code>markdown.html</code> with the user manual for that version, open
@@ -4720,7 +4720,7 @@ markdown markup freely.</p>
<dd>
<p>Enable the escaping of special plain <span
class="tex">T<sub>e</sub>X</span> characters outside verbatim
-environments, so that they are not interpretted by <span
+environments, so that they are not interpreted by <span
class="tex">T<sub>e</sub>X</span>. This is encouraged when typesetting
automatically generated content or markdown documents that were not
prepared with this package in mind.</p>
@@ -8288,7 +8288,7 @@ options directly from <span
class="latex">L<sup>a</sup>T<sub>e</sub>X</span>. For example, to set
the <code>\markdownOptionInputTempFileName</code> plain <span
class="tex">T<sub>e</sub>X</span> option to
-<code>helper-script.lua</code>, we would inclde the following code in
+<code>helper-script.lua</code>, we would include the following code in
our <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document:</p>
<div class="sourceCode" id="cb477"><pre
class="sourceCode tex"><code class="sourceCode latex"><span id="cb477-1"><a href="#cb477-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span>
@@ -9077,12 +9077,12 @@ contain the following text:</p>
class="header-section-number">2.3.1.6</span> Code Block Renderers</h4>
<p>The <code>\markdownRendererInputVerbatim</code> macro represents a
code block. The macro receives a single argument that corresponds to the
-filename of a file contaning the code block contents.</p>
+filename of a file containing the code block contents.</p>
<p>The <code>\markdownRendererInputFencedCode</code> macro represents a
fenced code block. This macro will only be produced, when the
<strong><code>fencedCode</code></strong> option is enabled. The macro
receives three arguments that correspond to the filename of a file
-contaning the code block contents, the fully escaped code fence
+containing the code block contents, the fully escaped code fence
infostring that can be directly typeset, and the raw code fence
infostring that can be used outside typesetting.</p>
<h5 class="unnumbered" id="latex-example-62"><span
@@ -9841,7 +9841,7 @@ nutrient-rich, and produced on an industrial scale.</p>
<h4 data-number="2.3.1.11" id="ellipsis-renderer"><span
class="header-section-number">2.3.1.11</span> Ellipsis Renderer</h4>
<p>The <code>\markdownRendererEllipsis</code> macro replaces any
-occurance of ASCII ellipses in the input text. This macro will only be
+occurrence of ASCII ellipses in the input text. This macro will only be
produced, when the <strong><code>smartEllipses</code></strong> option is
enabled. The macro receives no arguments.</p>
<h5 class="unnumbered" id="plain-tex-example-30">Plain <span
@@ -11581,14 +11581,14 @@ item).</p>
class="header-section-number">2.3.1.31</span> Raw Content Renderers</h4>
<p>The <code>\markdownRendererInputRawInline</code> macro represents an
inline raw span. The macro receives two arguments: the filename of a
-file contaning the inline raw span contents and the raw attribute that
+file containing the inline raw span contents and the raw attribute that
designates the format of the inline raw span. This macro will only be
produced, when the <strong><code>rawAttribute</code></strong> option is
enabled.</p>
<p>The <code>\markdownRendererInputRawBlock</code> macro represents a
raw block. The macro receives two arguments: the filename of a file
-contaning the raw block and the raw attribute that designates the format
-of the raw block. This macro will only be produced, when the
+containing the raw block and the raw attribute that designates the
+format of the raw block. This macro will only be produced, when the
<strong><code>rawAttribute</code></strong> and
<strong><code>fencedCode</code></strong> options are enabled.</p>
<h5 class="unnumbered" id="latex-example-89"><span
@@ -12140,7 +12140,7 @@ class="sourceCode tex"><code class="sourceCode latex"><span id="cb646-1"><a href
<span id="cb646-35"><a href="#cb646-35" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span>
<span id="cb646-36"><a href="#cb646-36" aria-hidden="true" tabindex="-1"></a> renderers = {</span>
<span id="cb646-37"><a href="#cb646-37" aria-hidden="true" tabindex="-1"></a> table = {<span class="co">%</span></span>
-<span id="cb646-38"><a href="#cb646-38" aria-hidden="true" tabindex="-1"></a> This is a table with caption <span class="fu">\emph</span>{#1} that is #3 colums wide</span>
+<span id="cb646-38"><a href="#cb646-38" aria-hidden="true" tabindex="-1"></a> This is a table with caption <span class="fu">\emph</span>{#1} that is #3 columns wide</span>
<span id="cb646-39"><a href="#cb646-39" aria-hidden="true" tabindex="-1"></a> and #2 rows long.</span>
<span id="cb646-40"><a href="#cb646-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\rowCounter</span>=0<span class="co">%</span></span>
<span id="cb646-41"><a href="#cb646-41" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\rowTotal</span>{#2}<span class="co">%</span></span>
@@ -12167,18 +12167,19 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb647-1"><a href="
contain the following text:</p>
<blockquote>
<p>This is a table with caption <em>Demonstration of pipe table
-syntax</em> that is 4 colums wide and 4 rows long. As for the alignment,
-column number 1 is right-aligned, column number 2 is left-aligned,
-column number 3 has default alignment, and column number 4 is centered.
-In row 1, column number 1 says <em>Right</em>, column number 2 says
-<em>Left</em>, column number 3 says <em>Default</em>, and column number
-4 says <em>Center</em>. In row 2, column number 1 says <em>12</em>,
-column number 2 says <em>12</em>, column number 3 says <em>12</em>, and
-column number 4 says <em>12</em>. In row 3, column number 1 says
-<em>123</em>, column number 2 says <em>123</em>, column number 3 says
-<em>123</em>, and column number 4 says <em>123</em>. In row 4, column
-number 1 says <em>1</em>, column number 2 says <em>1</em>, column number
-3 says <em>1</em>, and column number 4 says <em>1</em>.</p>
+syntax</em> that is 4 columns wide and 4 rows long. As for the
+alignment, column number 1 is right-aligned, column number 2 is
+left-aligned, column number 3 has default alignment, and column number 4
+is centered. In row 1, column number 1 says <em>Right</em>, column
+number 2 says <em>Left</em>, column number 3 says <em>Default</em>, and
+column number 4 says <em>Center</em>. In row 2, column number 1 says
+<em>12</em>, column number 2 says <em>12</em>, column number 3 says
+<em>12</em>, and column number 4 says <em>12</em>. In row 3, column
+number 1 says <em>123</em>, column number 2 says <em>123</em>, column
+number 3 says <em>123</em>, and column number 4 says <em>123</em>. In
+row 4, column number 1 says <em>1</em>, column number 2 says <em>1</em>,
+column number 3 says <em>1</em>, and column number 4 says
+<em>1</em>.</p>
</blockquote>
<h4 data-number="2.3.1.40" id="tex-math-renderers"><span
class="header-section-number">2.3.1.40</span> <span
diff --git a/macros/generic/markdown/markdown.ins b/macros/generic/markdown/markdown.ins
index 8e777f4217..4261ddfdd4 100644
--- a/macros/generic/markdown/markdown.ins
+++ b/macros/generic/markdown/markdown.ins
@@ -25,5 +25,6 @@
\file{markdown.css}{\from{markdown.dtx}{manual-css}}
\file{markdown-figure-block-diagram.tex}{\from{markdown.dtx}{techdoc-block-diagram}}
\file{markdown.bib}{\from{markdown.dtx}{techdoc-bibliography}}
+ \file{DEPENDS.txt}{\from{markdown.dtx}{depends}}
}
\endbatchfile
diff --git a/macros/generic/markdown/markdown.pdf b/macros/generic/markdown/markdown.pdf
index 40adf14658..3787cdbe80 100644
--- a/macros/generic/markdown/markdown.pdf
+++ b/macros/generic/markdown/markdown.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/CHANGELOG.md b/macros/latex-dev/required/l3kernel/CHANGELOG.md
index 3696c567d1..76ee35a0f1 100644
--- a/macros/latex-dev/required/l3kernel/CHANGELOG.md
+++ b/macros/latex-dev/required/l3kernel/CHANGELOG.md
@@ -7,6 +7,12 @@ 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
@@ -1747,7 +1753,8 @@ 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-06-19...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
diff --git a/macros/latex-dev/required/l3kernel/README.md b/macros/latex-dev/required/l3kernel/README.md
index 2c0b2a0477..0afb38a9ba 100644
--- a/macros/latex-dev/required/l3kernel/README.md
+++ b/macros/latex-dev/required/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-06-19
+Release 2024-07-20
Overview
--------
diff --git a/macros/latex-dev/required/l3kernel/expl3.dtx b/macros/latex-dev/required/l3kernel/expl3.dtx
index 8387c0c44e..64c65d0ff7 100644
--- a/macros/latex-dev/required/l3kernel/expl3.dtx
+++ b/macros/latex-dev/required/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-06-19}%
+\def\ExplFileDate{2024-07-20}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/expl3.pdf b/macros/latex-dev/required/l3kernel/expl3.pdf
index e2e48dedf7..cf3f79416b 100644
--- a/macros/latex-dev/required/l3kernel/expl3.pdf
+++ b/macros/latex-dev/required/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/interface3.pdf b/macros/latex-dev/required/l3kernel/interface3.pdf
index 959d7187ab..6c4ea0a544 100644
--- a/macros/latex-dev/required/l3kernel/interface3.pdf
+++ b/macros/latex-dev/required/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/interface3.tex b/macros/latex-dev/required/l3kernel/interface3.tex
index 9e36aa8fe8..0219809dab 100644
--- a/macros/latex-dev/required/l3kernel/interface3.tex
+++ b/macros/latex-dev/required/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-06-19}
+\date{Released 2024-07-20}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex-dev/required/l3kernel/l3basics.dtx b/macros/latex-dev/required/l3kernel/l3basics.dtx
index 26265f5625..ad15d79653 100644
--- a/macros/latex-dev/required/l3kernel/l3basics.dtx
+++ b/macros/latex-dev/required/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3bitset.dtx b/macros/latex-dev/required/l3kernel/l3bitset.dtx
index 0cc8b996e2..2b62c68b4a 100644
--- a/macros/latex-dev/required/l3kernel/l3bitset.dtx
+++ b/macros/latex-dev/required/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3bootstrap.dtx b/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
index 1eaab88c97..7f4eba752b 100644
--- a/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
+++ b/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3box.dtx b/macros/latex-dev/required/l3kernel/l3box.dtx
index 871ed5f2ce..532ec6a7d8 100644
--- a/macros/latex-dev/required/l3kernel/l3box.dtx
+++ b/macros/latex-dev/required/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3cctab.dtx b/macros/latex-dev/required/l3kernel/l3cctab.dtx
index 3b756ac739..92f134aa93 100644
--- a/macros/latex-dev/required/l3kernel/l3cctab.dtx
+++ b/macros/latex-dev/required/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3clist.dtx b/macros/latex-dev/required/l3kernel/l3clist.dtx
index 175dba141d..f8d1eeaea8 100644
--- a/macros/latex-dev/required/l3kernel/l3clist.dtx
+++ b/macros/latex-dev/required/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3coffins.dtx b/macros/latex-dev/required/l3kernel/l3coffins.dtx
index 76ef5c6906..afbd1bd394 100644
--- a/macros/latex-dev/required/l3kernel/l3coffins.dtx
+++ b/macros/latex-dev/required/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3color.dtx b/macros/latex-dev/required/l3kernel/l3color.dtx
index ca29c87bae..117a468d21 100644
--- a/macros/latex-dev/required/l3kernel/l3color.dtx
+++ b/macros/latex-dev/required/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3debug.dtx b/macros/latex-dev/required/l3kernel/l3debug.dtx
index 777dce794d..4e578ee9b6 100644
--- a/macros/latex-dev/required/l3kernel/l3debug.dtx
+++ b/macros/latex-dev/required/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-06-19}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-07-20}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
diff --git a/macros/latex-dev/required/l3kernel/l3deprecation.dtx b/macros/latex-dev/required/l3kernel/l3deprecation.dtx
index 3374bf451f..697f235311 100644
--- a/macros/latex-dev/required/l3kernel/l3deprecation.dtx
+++ b/macros/latex-dev/required/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3doc.dtx b/macros/latex-dev/required/l3kernel/l3doc.dtx
index 65250e78a4..751d4f4e14 100644
--- a/macros/latex-dev/required/l3kernel/l3doc.dtx
+++ b/macros/latex-dev/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-06-19}{}
+\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-06-19}
+% \date{Released 2024-07-20}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex-dev/required/l3kernel/l3doc.pdf b/macros/latex-dev/required/l3kernel/l3doc.pdf
index f417c92811..554a61ad50 100644
--- a/macros/latex-dev/required/l3kernel/l3doc.pdf
+++ b/macros/latex-dev/required/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3docstrip.dtx b/macros/latex-dev/required/l3kernel/l3docstrip.dtx
index af95384850..199801ff3b 100644
--- a/macros/latex-dev/required/l3kernel/l3docstrip.dtx
+++ b/macros/latex-dev/required/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3docstrip.pdf b/macros/latex-dev/required/l3kernel/l3docstrip.pdf
index 2c97de0d5f..1ec928d673 100644
--- a/macros/latex-dev/required/l3kernel/l3docstrip.pdf
+++ b/macros/latex-dev/required/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3expan.dtx b/macros/latex-dev/required/l3kernel/l3expan.dtx
index 09ef3306ac..499c94587e 100644
--- a/macros/latex-dev/required/l3kernel/l3expan.dtx
+++ b/macros/latex-dev/required/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3file.dtx b/macros/latex-dev/required/l3kernel/l3file.dtx
index 6b1f21c00c..039c4eecb8 100644
--- a/macros/latex-dev/required/l3kernel/l3file.dtx
+++ b/macros/latex-dev/required/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3flag.dtx b/macros/latex-dev/required/l3kernel/l3flag.dtx
index e9733bff57..690347426f 100644
--- a/macros/latex-dev/required/l3kernel/l3flag.dtx
+++ b/macros/latex-dev/required/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-assign.dtx b/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
index 98b71f34aa..e1b3bc788b 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex-dev/required/l3kernel/l3fp-aux.dtx b/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
index e05cc1e439..4c39e81f46 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-basics.dtx b/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
index d72a54eace..a93ff90291 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-convert.dtx b/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
index 435c4ac38e..9b5b66f815 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-expo.dtx b/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
index 83af683de1..e9dcdf6646 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-extended.dtx b/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
index 5f5bd618f4..24f1e5c127 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-functions.dtx b/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
index da79f1f556..2c5eb9602f 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-logic.dtx b/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
index 96efa4b757..9d39f4f67e 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-parse.dtx b/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
index 00244bc2fb..191ab2755c 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-random.dtx b/macros/latex-dev/required/l3kernel/l3fp-random.dtx
index 9722b5eea0..dd40704719 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-random.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-round.dtx b/macros/latex-dev/required/l3kernel/l3fp-round.dtx
index 1a407cfcfa..ad20934215 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-round.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx b/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
index eb8b3cc212..8223419f66 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-traps.dtx b/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
index 358bbc6382..7f22a2d137 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex-dev/required/l3kernel/l3fp-trig.dtx b/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
index 75731af7ef..b7b67c9445 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-types.dtx b/macros/latex-dev/required/l3kernel/l3fp-types.dtx
index e19c8b8fda..d969f76bdc 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-types.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp.dtx b/macros/latex-dev/required/l3kernel/l3fp.dtx
index 3095b53b7e..8e37a55799 100644
--- a/macros/latex-dev/required/l3kernel/l3fp.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3fparray.dtx b/macros/latex-dev/required/l3kernel/l3fparray.dtx
index 696bf2befa..9592671ae3 100644
--- a/macros/latex-dev/required/l3kernel/l3fparray.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3int.dtx b/macros/latex-dev/required/l3kernel/l3int.dtx
index 6dc750369d..4b0d251cab 100644
--- a/macros/latex-dev/required/l3kernel/l3int.dtx
+++ b/macros/latex-dev/required/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3intarray.dtx b/macros/latex-dev/required/l3kernel/l3intarray.dtx
index 2a8a5240b3..4be0ca6be6 100644
--- a/macros/latex-dev/required/l3kernel/l3intarray.dtx
+++ b/macros/latex-dev/required/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx b/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
index 89abe0ae6c..5d5758a6af 100644
--- a/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3keys.dtx b/macros/latex-dev/required/l3kernel/l3keys.dtx
index 3291f086e2..db580c525c 100644
--- a/macros/latex-dev/required/l3kernel/l3keys.dtx
+++ b/macros/latex-dev/required/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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:TF}
+% \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
{
- \@@_define_code:TF
+ \@@_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,7 +1947,7 @@
}
{ \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
}
-\cs_new:Npe \@@_define_code:TF
+\cs_new:Npe \@@_define_code:nnn
{
\exp_not:N \exp_after:wN \exp_not:N \@@_define_code:w
\exp_not:N \l_@@_property_str
@@ -1959,7 +1959,15 @@
\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 {#2} }
+ {
+ \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}
diff --git a/macros/latex-dev/required/l3kernel/l3legacy.dtx b/macros/latex-dev/required/l3kernel/l3legacy.dtx
index 3ff5c60c72..b5ef896827 100644
--- a/macros/latex-dev/required/l3kernel/l3legacy.dtx
+++ b/macros/latex-dev/required/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3luatex.dtx b/macros/latex-dev/required/l3kernel/l3luatex.dtx
index 3df2c8015a..aa7724a8ce 100644
--- a/macros/latex-dev/required/l3kernel/l3luatex.dtx
+++ b/macros/latex-dev/required/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3msg.dtx b/macros/latex-dev/required/l3kernel/l3msg.dtx
index d4ce94ea01..66e7ac8282 100644
--- a/macros/latex-dev/required/l3kernel/l3msg.dtx
+++ b/macros/latex-dev/required/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3names.dtx b/macros/latex-dev/required/l3kernel/l3names.dtx
index 12e881781b..1cb0d132ae 100644
--- a/macros/latex-dev/required/l3kernel/l3names.dtx
+++ b/macros/latex-dev/required/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3news.pdf b/macros/latex-dev/required/l3kernel/l3news.pdf
index 80a88e47cd..e9e7149b0d 100644
--- a/macros/latex-dev/required/l3kernel/l3news.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news01.pdf b/macros/latex-dev/required/l3kernel/l3news01.pdf
index 99aebce94c..d85dfd045e 100644
--- a/macros/latex-dev/required/l3kernel/l3news01.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news02.pdf b/macros/latex-dev/required/l3kernel/l3news02.pdf
index 8724ffc776..7bd350172e 100644
--- a/macros/latex-dev/required/l3kernel/l3news02.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news03.pdf b/macros/latex-dev/required/l3kernel/l3news03.pdf
index 6e02927db4..f1f3afb726 100644
--- a/macros/latex-dev/required/l3kernel/l3news03.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news04.pdf b/macros/latex-dev/required/l3kernel/l3news04.pdf
index ce24a41b64..4093837a05 100644
--- a/macros/latex-dev/required/l3kernel/l3news04.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news05.pdf b/macros/latex-dev/required/l3kernel/l3news05.pdf
index b4e1a4fb63..c8000e8f0f 100644
--- a/macros/latex-dev/required/l3kernel/l3news05.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news06.pdf b/macros/latex-dev/required/l3kernel/l3news06.pdf
index 1d675540ec..1bd0875ea7 100644
--- a/macros/latex-dev/required/l3kernel/l3news06.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news07.pdf b/macros/latex-dev/required/l3kernel/l3news07.pdf
index a1c228a441..452e18749b 100644
--- a/macros/latex-dev/required/l3kernel/l3news07.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news08.pdf b/macros/latex-dev/required/l3kernel/l3news08.pdf
index 004c269c5e..f985db2b44 100644
--- a/macros/latex-dev/required/l3kernel/l3news08.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news09.pdf b/macros/latex-dev/required/l3kernel/l3news09.pdf
index 33a6bde2a9..50924df70c 100644
--- a/macros/latex-dev/required/l3kernel/l3news09.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news10.pdf b/macros/latex-dev/required/l3kernel/l3news10.pdf
index ab6903d917..4fb21174bd 100644
--- a/macros/latex-dev/required/l3kernel/l3news10.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news11.pdf b/macros/latex-dev/required/l3kernel/l3news11.pdf
index e5d326a453..a06c363913 100644
--- a/macros/latex-dev/required/l3kernel/l3news11.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news12.pdf b/macros/latex-dev/required/l3kernel/l3news12.pdf
index 83cd26364b..09a1a6955c 100644
--- a/macros/latex-dev/required/l3kernel/l3news12.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3pdf.dtx b/macros/latex-dev/required/l3kernel/l3pdf.dtx
index aed2fa02e2..34118c371a 100644
--- a/macros/latex-dev/required/l3kernel/l3pdf.dtx
+++ b/macros/latex-dev/required/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3prefixes.csv b/macros/latex-dev/required/l3kernel/l3prefixes.csv
index e85412b9d8..339f6625fd 100644
--- a/macros/latex-dev/required/l3kernel/l3prefixes.csv
+++ b/macros/latex-dev/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-dev/required/l3kernel/l3prefixes.pdf b/macros/latex-dev/required/l3kernel/l3prefixes.pdf
index e9633dee24..908809cda4 100644
--- a/macros/latex-dev/required/l3kernel/l3prefixes.pdf
+++ b/macros/latex-dev/required/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3prg.dtx b/macros/latex-dev/required/l3kernel/l3prg.dtx
index 92bcf69e60..ac6131d6ff 100644
--- a/macros/latex-dev/required/l3kernel/l3prg.dtx
+++ b/macros/latex-dev/required/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3prop.dtx b/macros/latex-dev/required/l3kernel/l3prop.dtx
index 70bd8bcf1c..fd0d8e167d 100644
--- a/macros/latex-dev/required/l3kernel/l3prop.dtx
+++ b/macros/latex-dev/required/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3quark.dtx b/macros/latex-dev/required/l3kernel/l3quark.dtx
index ae2e5b2ace..ad78a12bd2 100644
--- a/macros/latex-dev/required/l3kernel/l3quark.dtx
+++ b/macros/latex-dev/required/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3regex.dtx b/macros/latex-dev/required/l3kernel/l3regex.dtx
index f5557a0bdc..c3d5de27cb 100644
--- a/macros/latex-dev/required/l3kernel/l3regex.dtx
+++ b/macros/latex-dev/required/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3seq.dtx b/macros/latex-dev/required/l3kernel/l3seq.dtx
index 8771429150..413e20f8ca 100644
--- a/macros/latex-dev/required/l3kernel/l3seq.dtx
+++ b/macros/latex-dev/required/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3skip.dtx b/macros/latex-dev/required/l3kernel/l3skip.dtx
index c53e3c82f0..9bea4c7b14 100644
--- a/macros/latex-dev/required/l3kernel/l3skip.dtx
+++ b/macros/latex-dev/required/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3sort.dtx b/macros/latex-dev/required/l3kernel/l3sort.dtx
index aabf913745..a86f916d24 100644
--- a/macros/latex-dev/required/l3kernel/l3sort.dtx
+++ b/macros/latex-dev/required/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3str-convert.dtx b/macros/latex-dev/required/l3kernel/l3str-convert.dtx
index 579deac4fc..4061895896 100644
--- a/macros/latex-dev/required/l3kernel/l3str-convert.dtx
+++ b/macros/latex-dev/required/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3str.dtx b/macros/latex-dev/required/l3kernel/l3str.dtx
index 211769877c..2be2b105ce 100644
--- a/macros/latex-dev/required/l3kernel/l3str.dtx
+++ b/macros/latex-dev/required/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3styleguide.pdf b/macros/latex-dev/required/l3kernel/l3styleguide.pdf
index 80dabed626..6d9065124d 100644
--- a/macros/latex-dev/required/l3kernel/l3styleguide.pdf
+++ b/macros/latex-dev/required/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3styleguide.tex b/macros/latex-dev/required/l3kernel/l3styleguide.tex
index 1caf698e9b..985f20a68c 100644
--- a/macros/latex-dev/required/l3kernel/l3styleguide.tex
+++ b/macros/latex-dev/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-06-19}
+\date{Released 2024-07-20}
\begin{document}
diff --git a/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf b/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
index ef84d78a9f..f7b4cf0d3d 100644
--- a/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3syntax-changes.tex b/macros/latex-dev/required/l3kernel/l3syntax-changes.tex
index 5ed2fba867..b9ffcb011a 100644
--- a/macros/latex-dev/required/l3kernel/l3syntax-changes.tex
+++ b/macros/latex-dev/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-06-19}
+\date{Released 2024-07-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex-dev/required/l3kernel/l3sys.dtx b/macros/latex-dev/required/l3kernel/l3sys.dtx
index 699e348097..1db09f9550 100644
--- a/macros/latex-dev/required/l3kernel/l3sys.dtx
+++ b/macros/latex-dev/required/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3term-glossary.pdf b/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
index 5705a81599..bb77c0a4c2 100644
--- a/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
+++ b/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3term-glossary.tex b/macros/latex-dev/required/l3kernel/l3term-glossary.tex
index 3221b10280..fca2886337 100644
--- a/macros/latex-dev/required/l3kernel/l3term-glossary.tex
+++ b/macros/latex-dev/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-06-19}
+\date{Released 2024-07-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex-dev/required/l3kernel/l3text-case.dtx b/macros/latex-dev/required/l3kernel/l3text-case.dtx
index 915b8e1cd9..134e2508b7 100644
--- a/macros/latex-dev/required/l3kernel/l3text-case.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text-map.dtx b/macros/latex-dev/required/l3kernel/l3text-map.dtx
index b29dbbf0ca..e3586164c5 100644
--- a/macros/latex-dev/required/l3kernel/l3text-map.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text-purify.dtx b/macros/latex-dev/required/l3kernel/l3text-purify.dtx
index 2fe35a21e7..d22ee1bc3e 100644
--- a/macros/latex-dev/required/l3kernel/l3text-purify.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text.dtx b/macros/latex-dev/required/l3kernel/l3text.dtx
index 472fc7d9bc..9a4c4f244e 100644
--- a/macros/latex-dev/required/l3kernel/l3text.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \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-dev/required/l3kernel/l3tl-analysis.dtx b/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
index 53a8842b6f..600da3985d 100644
--- a/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3tl-build.dtx b/macros/latex-dev/required/l3kernel/l3tl-build.dtx
index abd6f97193..e484c5b1c5 100644
--- a/macros/latex-dev/required/l3kernel/l3tl-build.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3tl.dtx b/macros/latex-dev/required/l3kernel/l3tl.dtx
index da498dcf9c..84f2c36798 100644
--- a/macros/latex-dev/required/l3kernel/l3tl.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3token.dtx b/macros/latex-dev/required/l3kernel/l3token.dtx
index 34387ca6b0..c028310326 100644
--- a/macros/latex-dev/required/l3kernel/l3token.dtx
+++ b/macros/latex-dev/required/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3unicode.dtx b/macros/latex-dev/required/l3kernel/l3unicode.dtx
index 5ca6ffbf41..532eb315d3 100644
--- a/macros/latex-dev/required/l3kernel/l3unicode.dtx
+++ b/macros/latex-dev/required/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-06-19}
+% \date{Released 2024-07-20}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/source3.pdf b/macros/latex-dev/required/l3kernel/source3.pdf
index c61b5e0ade..6ccc2109c2 100644
--- a/macros/latex-dev/required/l3kernel/source3.pdf
+++ b/macros/latex-dev/required/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/source3.tex b/macros/latex-dev/required/l3kernel/source3.tex
index 4297476aab..228d3ca93c 100644
--- a/macros/latex-dev/required/l3kernel/source3.tex
+++ b/macros/latex-dev/required/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-06-19}
+\date{Released 2024-07-20}
\pagenumbering{roman}
\maketitle
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 c4d3db2acc..e99e7e590a 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 (v2024cn)
+Easily typesetting Chinese theses or books (v2024da)
## 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 1f3f65eac1..ad8b2fe843 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/03}{2024cn}
+\ProvidesExplClass{easybook}{2024/07/29}{2024da}
{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/03}{2024cn}
+\ProvidesExplPackage{easybase}{2024/07/29}{2024da}
{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 }
}
}
@@ -1422,47 +1478,73 @@
\bool_new:N \l__eb_toc_notitle_bool
\newbool{bitoc}
\cs_new:Npn \ebifbitoc { \ifbool{bitoc} }
+\seq_new:N \l__eb_level_tmpa_seq
+\tl_new:N \l__eb_level_tmpa_tl
+\cs_generate_variant:Nn \regex_extract_all:nnN { no }
+\cs_generate_variant:Nn \keys_define:nn { nx }
+\cs_generate_variant:Nn \ctex_set:nn { ox }
+\cs_new_protected:Npn \eb_toc_extract_level:
+ {
+ \regex_extract_all:noN { \cC. } { \eb@toc@title@level }
+ \l__eb_level_tmpa_seq
+ \seq_get_right:NN \l__eb_level_tmpa_seq \l__eb_level_tmpa_tl
+ \tl_set:Nx \l__eb_level_tmpa_tl
+ {
+ \exp_last_unbraced:No
+ \cs_to_str:N { \l__eb_level_tmpa_tl }
+ }
+ \regex_replace_case_once:nN
+ {
+ { ^bi(.*) } { \1 }
+ { .* } { \0 }
+ }
+ \l__eb_level_tmpa_tl
+ }
\keys_define:nn { eb/tocouter }
{
- level .tl_set:N = \eb@toc@title@level,
- level .initial:n =
+ level .code:n =
+ {
+ \tl_set:Nn \eb@toc@title@level {#1}
+ \eb_toc_extract_level:
+ },
+ level .initial:x =
{
\bool_if:NTF \l__eb_class_mode_book_bool
- { \bichapter* }
- { \bisection* }
+ { \exp_not:N \bichapter* }
+ { \exp_not:N \bisection* }
},
- section .meta:n = { level = \bisection* },
- chapter .meta:n = { level = \bichapter* },
- none .code:n =
+ section .meta:n = { level = \bisection* },
+ chapter .meta:n = { level = \bichapter* },
+ none .code:n =
{
\tl_set:Nn \eb@toc@title@level
{ \par\use_none:nn }
\bool_set_true:N \l__eb_toc_notitle_bool
},
- multoc .int_set:N = \l__eb_toc_columns_int,
- multoc .default:n = 2,
- multoc .initial:n = 1,
+ multoc .int_set:N = \l__eb_toc_columns_int,
+ multoc .default:n = 2,
+ multoc .initial:n = 1,
plan .choice:,
plan .value_required:n = true,
- plan/cn .code:n =
+ plan/cn .code:n =
{
\bool_set_true:N \l__eb_toc_plan_cn_bool
\bool_set_false:N \l__eb_toc_plan_bi_bool
},
- plan/bi .code:n =
+ plan/bi .code:n =
{
\bool_set_false:N \l__eb_toc_plan_cn_bool
\bool_set_true:N \l__eb_toc_plan_bi_bool
},
- plan/both .code:n =
+ plan/both .code:n =
{
\bool_set_true:N \l__eb_toc_plan_cn_bool
\bool_set_true:N \l__eb_toc_plan_bi_bool
},
- plan .initial:n = cn,
- columns .meta:n = { multoc = {#1} },
- title .code:n = \eb_assign_toc_title:n {#1},
- bilist .code:n =
+ plan .initial:n = cn,
+ columns .meta:n = { multoc = {#1} },
+ title .code:n = \eb_assign_toc_title:n {#1},
+ bilist .code:n =
{
\tl_gset:Nn \g__eb_bilist_permute_value_tl {#1}
\str_if_eq:nnTF {#1} { mix }
@@ -1480,12 +1562,16 @@
}
}
},
- name .tl_set:N = \l__eb_print_index_name_tl,
- name .initial:n = \imki@jobname
+ name .tl_set:N = \l__eb_print_index_name_tl,
+ name .initial:n = \imki@jobname,
+ unknown .code:n =
+ {
+ \ctex_set:ox { \l__eb_level_tmpa_tl }
+ { \eb_unknown_kv_handle: }
+ },
+ unknown .default:V = \c_novalue_tl
}
-\bool_if:NTF \l__eb_class_mode_book_bool
- { \keys_define:nn { } { eb/tocouter .inherit:n = ctex/chapter } }
- { \keys_define:nn { } { eb/tocouter .inherit:n = ctex/section } }
+
\NewDocumentCommand{\eb_assign_toc_title:n}
{>{\SplitArgument{1}{,}}m}
{\eb_toc_assign_title_judge:nn #1}
@@ -1564,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,
@@ -1763,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 }
}
@@ -1791,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} }
@@ -1804,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
{
@@ -1875,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 }
@@ -1938,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
{
@@ -1960,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} }
@@ -1995,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},
@@ -2036,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}
{
@@ -2054,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}
@@ -2228,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 }
{
@@ -2248,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:
@@ -2634,7 +2731,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/07/03}{2024cn}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/07/29}{2024da}
{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 638c3e05b6..20b35311a4 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 43d4afb635..55136ae02c 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 = v2024cn,
- date = 2024/07/03,
+ version = v2024da,
+ date = 2024/07/29,
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,
@@ -232,13 +230,13 @@
\end{frameverb}
\subsection{编译方式}
-假设您的 \TeX 源文件名为 \code{easybook.tex},需要使用参考文献和索引功能,并使用 \hologo{XeLaTeX} 和 \hologo{BibTeX} 引擎编译文档,那么需要在命令行中执行:
+假设您的 \TeX 源文件名为 \code{easybook-demo.tex},需要使用参考文献和索引功能,并使用 \hologo{XeLaTeX} 和 \hologo{BibTeX} 引擎编译文档,那么需要在命令行中执行:
\begin{frameverb}
- xelatex -shell-escape easybook
- bibtex easybook
- makeindex easybook
- xelatex -shell-escape easybook
- xelatex -shell-escape easybook
+ xelatex -shell-escape easybook-demo
+ bibtex easybook-demo
+ makeindex easybook-demo
+ xelatex -shell-escape easybook-demo
+ xelatex -shell-escape easybook-demo
\end{frameverb}
当然也可以使用 \code{latexmk} 及一些软件自带的编译工具,这里就不做介绍。 \\
$\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-shell-escape} 命令行选项。
@@ -406,12 +404,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 +474,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}}
同时设置图片、表格和代码题注的字体命令。
@@ -510,9 +510,9 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\keyval{prenote}{参考文献前注}
该选项选择由 \cs{defbibnote} 所定义的前注,缺省状态下不打印任何前注。
\keyval{section}{整数}\Default{0}
- 只打印在指定文节中引用的条目。该参考文献节从1开始编号,所有在 \env*{refsection} 环境外给出的引用标记为第零节。
+ 只打印第 \meta{整数} 文节中引用的条目。该参考文献节从1开始编号,所有在 \env*{refsection} 环境外给出的引用标记为第零节。
\keyval{type}{条目类型}
- 指定条目的打印类型。
+ 只打印名为 \meta{条目类型} 的文献条目。
\keyval{filter}{过滤器名}
使用由 \cs{defbibfilter} 定义的 \option*{filter} 来过滤条目。
@@ -598,7 +598,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 +710,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 +871,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 +917,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}{刚性长度}
@@ -990,16 +994,24 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she
\UseTocStyle{section}{fancy}{toc}
\tableofcontents[bilist = mix]
\end{ctexexam}
+
+ 除了上述选项还支持 \CTeX 键值列表所有路径的章节标题样式选项,下面仅列举几个选项例子。需要注意的是标题样式选项根据 \option{level} 选项中的\textbf{最后}一个标题命令判断键路径,所以这个标题命令名必须存在于 \CTeX 键值列表路径中,或带有 \code{\textcolor{cs}{bi}} 前缀表示双语标题。
\keyval{format}{目录标题格式}
- 设置目录标题的格式,在标题级别为 \code{chapter} 或者 \cls*{article} 模式且标题级别为 \code{section} 时有效。
+ 设置目录标题的格式。
+ \begin{ctexexam}
+ \tableofcontents[
+ level = \clearpage\bisection*,
+ format = \centering\sffamily\Large
+ ]
+ \end{ctexexam}
\keyval{aftername}{标签后代码}
- 目录标题的标签与内容之间插入的代码,生效情形同上。
+ 目录标题的标签与内容之间插入的代码。
\keyval{aftertitle}{标题后代码}
- 目录标题内容之后插入的代码,生效情形同上。
+ 目录标题内容之后插入的代码。
\keyval{break}{格式命令}
- 控制章节标题与之前正文的分隔关系。一般用于设置是否在标题之前分页或者设置行间罚点,生效情形同上。
+ 控制章节标题与之前正文的分隔关系。一般用于设置是否在标题之前分页或者设置行间罚点。
\keyval{pagestyle}{页面风格}\Default{empty}
- 目录标题所在页的页面格式,仅当目录以 \code{chapter} 级别输出时有效。除了上述选项还支持 \CTeX 键值列表路径 \module*{chapter} 或 \module*{section} 所有的章节标题样式选项。
+ 目录标题所在页的页面格式,仅当目录以 \code{chapter} 级别输出时有效。
\end{cnltxlist}
\subsection{双语章节标题和新建标题}
@@ -1046,6 +1058,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[上标和下标]{上标和下标}
@@ -1417,7 +1435,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]
@@ -1429,7 +1447,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} 后缀的选项不对所有已注册条目有效的问题。
@@ -1437,8 +1455,19 @@ $\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}
+% \AddToHook{cmd/printindex/before}{\clearpage}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/esami/README b/macros/latex/contrib/esami/README
index 22f183f8d8..b1ef039c0e 100644
--- a/macros/latex/contrib/esami/README
+++ b/macros/latex/contrib/esami/README
@@ -1,6 +1,6 @@
-The esami package v. 2.8
+The esami package v. 2.9
For generation of texts and solutions of exams in LaTeX
-2023/07/21
+2024/07/01
File: README
Author: Grazia Messineo and Salvatore Vassallo
@@ -14,7 +14,7 @@ varying in random order, with closed or open answer, matching, problems, and so
of each group are randomly scrambled across the exam and variants of each exercise are chosen
randomly from a file which contains them all and.
-Copyright: (C) 2008--2023 Grazia Messineo & Salvatore Vassallo
+Copyright: (C) 2008--2024 Grazia Messineo & Salvatore Vassallo
Licence: LPPL
FILES IN DISTRIBUTION
diff --git a/macros/latex/contrib/esami/VERSION b/macros/latex/contrib/esami/VERSION
index 64fbb8d2f3..98dd005629 100644
--- a/macros/latex/contrib/esami/VERSION
+++ b/macros/latex/contrib/esami/VERSION
@@ -1 +1 @@
-VERSION 2.8 DATE=July 17, 2023
+VERSION 2.9 DATE=July 1, 2024
diff --git a/macros/latex/contrib/esami/doc/esami-doc-en.pdf b/macros/latex/contrib/esami/doc/esami-doc-en.pdf
index d2d96db33a..8f06ffc33b 100644
--- a/macros/latex/contrib/esami/doc/esami-doc-en.pdf
+++ b/macros/latex/contrib/esami/doc/esami-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/esami/doc/esami-doc-en.tex b/macros/latex/contrib/esami/doc/esami-doc-en.tex
index 44da55a481..8adc1c17a1 100644
--- a/macros/latex/contrib/esami/doc/esami-doc-en.tex
+++ b/macros/latex/contrib/esami/doc/esami-doc-en.tex
@@ -81,6 +81,7 @@
\changes{Version 2.6}{2021/10/11}{Improved the spacing in \cmd{\FPsignpol}. Corrected the code to avoid some spourios spaces. }
\changes{Version 2.7}{2022/01/11}{Improved the spacing in \cmd{\sempli} and \cmd{\FPsignpol}. Corrected a misprint in the code.}
\changes{Versione 2.8}{2023/07/21}{Documentation modified to solve a problem with the Spanish Language.}
+\changes{Versione 2.9}{2024/07/03}{Loaded the package tagpdf-base to avoid an error on the measures of the boxes.}
%\IndexPrologue{\section*{Index} Numbers written in italic refer to the page where the item is described; underlined numebers refer to the line of code in which the item is described; other references are to the line of code where the item is used.}
\GlossaryPrologue{\section*{Changelog}}
\def\MacroFont{\fontencoding\encodingdefault
@@ -798,7 +799,8 @@ Inside this file you should use only one command, \cmd{\def \textbackslash eserc
\item[Version 2.5 (2018/05/06)] Corrected a misprint in the code. Improved the selection of random exercises.
\item[Version 2.6 (2021/10/11)] Improved the spacing in \cmd{\FPsignpol}. Corrected the code to avoid some spourios spaces.
\item[Version 2.7 (2021/10/11)] Improved the spacing in \cmd{\sempli} and \cmd{\FPsignpol}. Corrected a misprint in the code
-\item[Versione 2.8 (2023/07/21)] Documentation modified to solve a problem with the spanish language.
+\item[Version 2.8 (2023/07/21)] Documentation modified to solve a problem with the spanish language.
+\item[Version 2.89 ( 2024/07/03)] Loaded the package tagpdf-base to avoid an error on the measures of the boxes.
\end{description}
\bibliographystyle{plain}
diff --git a/macros/latex/contrib/esami/doc/esami-doc-it.pdf b/macros/latex/contrib/esami/doc/esami-doc-it.pdf
index c4c9c5f20e..8b83d7bdf1 100644
--- a/macros/latex/contrib/esami/doc/esami-doc-it.pdf
+++ b/macros/latex/contrib/esami/doc/esami-doc-it.pdf
Binary files differ
diff --git a/macros/latex/contrib/esami/doc/esami-doc-it.tex b/macros/latex/contrib/esami/doc/esami-doc-it.tex
index 0a2b92414f..dae29f96fe 100644
--- a/macros/latex/contrib/esami/doc/esami-doc-it.tex
+++ b/macros/latex/contrib/esami/doc/esami-doc-it.tex
@@ -79,6 +79,8 @@
\changes{Versione 2.6}{2021/10/11}{Migliorata la spaziatura in \cmd{\FPsignpol}. Corretto il codice per eliminare alcuni spazi spuri.}
\changes{Versione 2.7}{2022/01/11}{Migliorata la spaziatura in \cmd{\sempli} e \cmd{\FPsignpol}. Corretto un errore nel codice}
\changes{Versione 2.8}{2023/07/21}{Modificata la documentazione per risolvere un problema con la lingua spagnola.}
+\changes{Versione 2.9}{2024/07/03}{Caricato il pacchetto tagpdf-base per evitare un errore sulle misure delle box.}
+
%\IndexPrologue{\section*{Indice} I numeri scritti in italico rimandano alla pagina dove è descritto l'item; i numeri sottolineati rimandano alla riga di codice in cui l'item è descritto; le altre referenze sono alla riga di codice dove l'item è usato.}
\GlossaryPrologue{\section*{Changelog}}
\def\MacroFont{\fontencoding\encodingdefault
@@ -800,7 +802,7 @@ Al suo interno si deve usare un solo comando, \cmd{\def \textbackslash esercizio
\item[Versione 2.6 (2021/10/11)] Migliorata la spaziatura in \cmd{\FPsignpol}. Corretto il codice per eliminare alcuni spazi spuri.
\item[Versione 2.7 (2022/01/11)] Migliorata la spaziatura in \cmd{\sempli} e \cmd{\FPsignpol}. Corretto un errore nel codice
\item[Versione 2.8 (2023/07/21)] Modificata la documentazione per risolvere un problema con la lingua spagnola.
-
+ \item[Versione 2.8 (2024/07/03)]Caricato il pacchetto tagpdf-base per evitare un errore sulle misure delle box.
\end{description}
diff --git a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie1.parametri.tex b/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie1.parametri.tex
deleted file mode 100644
index 107265dbc4..0000000000
--- a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie1.parametri.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\FPeval{a}{round(12:0)}
-\FPeval{b}{round(13:0)}
-\FPeval{c}{round(3:0)}
-\FPeval{k}{round(4:0)}
diff --git a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie2.parametri.tex b/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie2.parametri.tex
deleted file mode 100644
index e736caa6a0..0000000000
--- a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie2.parametri.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\FPeval{a}{round(14:0)}
-\FPeval{b}{round(15:0)}
-\FPeval{c}{round(2:0)}
-\FPeval{k}{round(5:0)}
diff --git a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie3.parametri.tex b/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie3.parametri.tex
deleted file mode 100644
index 98ef510098..0000000000
--- a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie3.parametri.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\FPeval{a}{round(12:0)}
-\FPeval{b}{round(15:0)}
-\FPeval{c}{round(2:0)}
-\FPeval{k}{round(4:0)}
diff --git a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie4.parametri.tex b/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie4.parametri.tex
deleted file mode 100644
index ab468d8a75..0000000000
--- a/macros/latex/contrib/esami/doc/examples/qftest5-fillinqiie4.parametri.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\FPeval{a}{round(13:0)}
-\FPeval{b}{round(14:0)}
-\FPeval{c}{round(2:0)}
-\FPeval{k}{round(4:0)}
diff --git a/macros/latex/contrib/esami/doc/examples/testA-xetex-sol.sol.tex b/macros/latex/contrib/esami/doc/examples/testA-xetex-sol.sol.tex
new file mode 100644
index 0000000000..00cc5e002c
--- /dev/null
+++ b/macros/latex/contrib/esami/doc/examples/testA-xetex-sol.sol.tex
@@ -0,0 +1,84 @@
+\begin{minipage}{.33\textwidth}{\large\textbf{Soluzione\ Versione\ n. 1}}
+\begin{enumerate}
+\item\ref{e:1-file:test2-q:i}
+\item\ref{e:1-file:test3-q:ii}
+\item\ref{e:1-file:test2-q:ii}
+\item\ref{e:1-file:test2-q:iii}
+\item\ref{e:1-file:test3-q:i}
+\item\ref{e:1-file:test1-q:i}
+\item\ref{e:1-file:test9-q:ii}
+\item\ref{e:1-file:test14-q:i}
+\item\ref{e:1-file:test4-q:v}
+\item \makeatletter \input{qftest5-fillinqiie1.parametri}\makeatother
+ \FPsv [2]{b/k}
+\item\ref{e:1-file:test11-q:i}
+\item\ref{e:1-file:test11-q:ii}
+\par\end{enumerate}\vspace{3ex}
+\begin{enumerate}
+\item\ref{e:1-file:test12-q:i}
+\item\ref{e:1-file:test13-q:ii}
+\par\end{enumerate}\vspace{3ex}
+\end{minipage}
+\begin{minipage}{.33\textwidth}{\large\textbf{Soluzione\ Versione\ n. 2}}
+\begin{enumerate}
+\item\ref{e:2-file:test2-q:iii}
+\item\ref{e:2-file:test3-q:i}
+\item\ref{e:2-file:test2-q:ii}
+\item\ref{e:2-file:test3-q:iv}
+\item\ref{e:2-file:test2-q:i}
+\item\ref{e:2-file:test1-q:ii}
+\item \makeatletter \input{qftest5-fillinqiie2.parametri}\makeatother
+ \FPsv [2]{a/c}
+\item\ref{e:2-file:test9-q:iii}
+\item\ref{e:2-file:test14-q:i}
+\item\ref{e:2-file:test4-q:ii}
+\item\ref{e:2-file:test11-q:i}
+\item\ref{e:2-file:test11-q:ii}
+\par\end{enumerate}\vspace{3ex}
+\begin{enumerate}
+\item\ref{e:2-file:test13-q:iii}
+\item\ref{e:2-file:test12-q:iii}
+\par\end{enumerate}\vspace{3ex}
+\end{minipage}
+\begin{minipage}{.33\textwidth}{\large\textbf{Soluzione\ Versione\ n. 3}}
+\begin{enumerate}
+\item\ref{e:3-file:test2-q:iii}
+\item\ref{e:3-file:test3-q:i}
+\item\ref{e:3-file:test2-q:i}
+\item\ref{e:3-file:test3-q:ii}
+\item\ref{e:3-file:test2-q:ii}
+\item\ref{e:3-file:test14-q:i}
+\item \makeatletter \input{qftest5-fillinqiie3.parametri}\makeatother
+ \FPsv [2]{b/k}
+\item\ref{e:3-file:test4-q:iii}
+\item\ref{e:3-file:test1-q:i}
+\item\ref{e:3-file:test9-q:iv}
+\item\ref{e:3-file:test11-q:i}
+\item\ref{e:3-file:test11-q:ii}
+\par\end{enumerate}\vspace{3ex}
+\begin{enumerate}
+\item\ref{e:3-file:test12-q:i}
+\item\ref{e:3-file:test13-q:iv}
+\par\end{enumerate}\vspace{3ex}
+\end{minipage}
+\begin{minipage}{.33\textwidth}{\large\textbf{Soluzione\ Versione\ n. 4}}
+\begin{enumerate}
+\item\ref{e:4-file:test2-q:ii}
+\item\ref{e:4-file:test2-q:i}
+\item\ref{e:4-file:test3-q:i}
+\item\ref{e:4-file:test3-q:ii}
+\item\ref{e:4-file:test2-q:iii}
+\item\ref{e:4-file:test4-q:v}
+\item\ref{e:4-file:test9-q:iii}
+\item\ref{e:4-file:test1-q:ii}
+\item\ref{e:4-file:test14-q:i}
+\item \makeatletter \input{qftest5-fillinqiie4.parametri}\makeatother
+ \FPsv [2]{a/c}
+\item\ref{e:4-file:test11-q:i}
+\item\ref{e:4-file:test11-q:ii}
+\par\end{enumerate}\vspace{3ex}
+\begin{enumerate}
+\item\ref{e:4-file:test13-q:iii}
+\item\ref{e:4-file:test12-q:iii}
+\par\end{enumerate}\vspace{3ex}
+\end{minipage}
diff --git a/macros/latex/contrib/esami/esami.sty b/macros/latex/contrib/esami/esami.sty
index 12bf761379..d1f8757d56 100644
--- a/macros/latex/contrib/esami/esami.sty
+++ b/macros/latex/contrib/esami/esami.sty
@@ -145,6 +145,7 @@
% | PACKAGES |
% +=============================+
+\usepackage{tagpdf-base}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage[nomessages]{fp}
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/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/lastpage/README b/macros/latex/contrib/lastpage/README
index d9c21d30e2..b7c3c78bb2 100644
--- a/macros/latex/contrib/lastpage/README
+++ b/macros/latex/contrib/lastpage/README
@@ -1,4 +1,4 @@
-README for lastpage package, 2024-07-03, v2.1b
+README for lastpage package, 2024-07-07, v2.1c
TABLE OF CONTENTS
diff --git a/macros/latex/contrib/lastpage/lastpage-example.pdf b/macros/latex/contrib/lastpage/lastpage-example.pdf
index 9752f36fd7..db990f6942 100644
--- a/macros/latex/contrib/lastpage/lastpage-example.pdf
+++ b/macros/latex/contrib/lastpage/lastpage-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/lastpage/lastpage.dtx b/macros/latex/contrib/lastpage/lastpage.dtx
index 171c7388de..c447d39cc6 100644
--- a/macros/latex/contrib/lastpage/lastpage.dtx
+++ b/macros/latex/contrib/lastpage/lastpage.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% File: lastpage.dtx
-% Version: 2024-07-03 v2.1b
+% Version: 2024-07-07 v2.1c
% Info: Refers to last page's name
%
% Copyright © 2010 - 2024 by
@@ -65,7 +65,7 @@
\input docstrip.tex
\Msg{**********************************************************************}
\Msg{* Installation *}
-\Msg{* Package: lastpage 2024-07-03 v2.1b Refers to last page's name (HMM)*}
+\Msg{* Package: lastpage 2024-07-07 v2.1c Refers to last page's name (HMM)*}
\Msg{**********************************************************************}
\keepsilent
@@ -77,7 +77,7 @@
This is a generated file.
Project: lastpage
-Version: 2024-07-03 v2.1b
+Version: 2024-07-07 v2.1c
Info: Refers to last page's name
Copyright (C) 2010 - 2024 by
@@ -184,7 +184,7 @@ In memoriam
%<*driver>
\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesFile{lastpage.drv}%
- [2024-07-03 v2.1b Refers to last page's name (HMM)]
+ [2024-07-07 v2.1c Refers to last page's name (HMM)]
\documentclass{ltxdoc}[2024/02/08]% v2.1j Standard LaTeX documentation class
\usepackage{holtxdoc}[2019/12/09]% v0.30 Private additional ltxdoc support (HO)
\hypersetup{%
@@ -233,23 +233,23 @@ In memoriam
% \DoNotIndex{\@auxout,\@evenfoot,\@firstofone,\@firstoftwo,\@ifl@t@r,\@ifpackagelater,\@ifpackageloaded}
% \DoNotIndex{\@ifundefined,\@kernel@reserved@label@data,\@mainaux,\@number,\@oddfoot}
% \DoNotIndex{\addtocounter,\AddToHook,\arabic,\begin}
-% \DoNotIndex{\bigskip,\clearpage,\csname,\documentclass,\EdefUnescapeString,\empty,\end,\endcsname}
-% \DoNotIndex{\enddocument,\ExplSyntaxOff,\ExplSyntaxOn,\fmtversion}
+% \DoNotIndex{\bigskip,\clearpage,\csname,\detokenize,\documentclass,\EdefUnescapeString,\empty,\end}
+% \DoNotIndex{\endcsname,\enddocument,\expanded,\ExplSyntaxOff,\ExplSyntaxOn,\fmtversion}
% \DoNotIndex{\g,\gdef,\here,\hfil,\Hy@temp,\Hy@unicodefalse}
-% \DoNotIndex{\hypersetup,\if@filesw,\if@nobreak,\ifHy@hypertexnames,\ifHy@pageanchor,\ifHy@plainpages}
+% \DoNotIndex{\hypersetup,\if,\if@filesw,\if@nobreak,\ifHy@hypertexnames,\ifHy@pageanchor,\ifHy@plainpages}
% \DoNotIndex{\ifdim,\ifnum,\IfPackageAtLeastTF,\IfPackageLoadedTF,\ifvmode,\ifx,\immediate,\input}
% \DoNotIndex{\label,\lastpage,\lastpage-example.tex,\lastpage.dtx,\lastpage.sty,\lastpagee.sty}
% \DoNotIndex{\lastpageclassic.sty,\lastpagemodern.sty,\LaTeX,\LaTeX-kernel,\listfiles}
-% \DoNotIndex{\makeatletter,\makeatother,\markboth,\mbox,\message,\MessageBreak}
+% \DoNotIndex{\makeatletter,\makeatother,\markboth,\meaning,\mbox,\message,\MessageBreak}
% \DoNotIndex{\NeedsTeXFormat,\newcommand,\newcounter,\newline,\newpage,\nobreak}
% \DoNotIndex{\noindent,\normalsize,\numexpr,\origenddocument,\PackageError,\PackageWarning}
% \DoNotIndex{\PackageWarningNoLine,\pagenumbering,\pageref,\pdfstringdef,\protect,\ProvidesPackage}
% \DoNotIndex{\qquad,\RequirePackage,\section,\ShowHook,\slshape,\smallskip,\space,\test,\textbf}
% \DoNotIndex{\textit,\textquotedblleft,\textquotedblright,\textsf,\texttt,\the,\thepage}
-% \DoNotIndex{\today,\upshape,\url,\usepackage,\value,\verb,\wd,\write}
+% \DoNotIndex{\today,\upshape,\url,\usepackage,\value,\verb,\wd,\write,\xlastpage@rmpage,\xxlastpage@rmpage}
%
% \title{The \xpackage{lastpage} package}
-% \date{2024-07-03 v2.1b}
+% \date{2024-07-07 v2.1c}
% \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}\\
% invented by Jeffrey P. Goldberg\\\xemail{jeffrey+news at goldmark.org}}
%
@@ -744,7 +744,7 @@ In memoriam
\usepackage[draft]{showkeys}[2024/05/23]% v3.21 Show cite and label keys (DPC, MH)
%% Use final instead of draft to hide the keys. %%
\usepackage[pdfpagelabels=true,hyperindex=false]{hyperref}[2024-01-20]% v7.01h
-%% Hypertext links for LaTeX
+\@ifpackageloaded{hyperref}{% Hypertext links for LaTeX
\hypersetup{extension=pdf,%
plainpages=false,%
pdflang={en},%
@@ -755,9 +755,8 @@ In memoriam
pdfview=Fit,%
pdfstartview=Fit,%
pdfpagelayout=SinglePage%
-}
-\@ifpackageloaded{hyperref}{}{\usepackage{url}[2013/09/16]}% v3.4
-\usepackage{lastpage}[2024/07/03]% v2.1b
+}}{\usepackage{url}[2013/09/16]}% v3.4
+\usepackage{lastpage}[2024/07/07]% v2.1c
\renewcommand{\@evenfoot}{%
\normalsize\slshape \today\hfil \upshape %
page \thepage{} of \pageref{LastPage}}
@@ -769,7 +768,7 @@ In memoriam
\section*{Example for lastpage}
\markboth{Example for lastpage}{Example for lastpage}
This example demonstrates the use of package\newline
-\textsf{lastpage}, v2.1b as of 2024-07-03 (HMM; JPG).\newline
+\textsf{lastpage}, v2.1c as of 2024-07-07 (HMM; JPG).\newline
The package takes no options.\newline
For more details please see the documentation!\newline
@@ -905,7 +904,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \DescribeMacro{lastpage.sty}
% We first need to determine whether we are on \TeX~2.09 or \LaTeX2e.\newline
% (That line, which is too long for the documentation, reads:\newline
-% |\def\loadlastpage{\ProvidesPackage{lastpage}[2024/07/03 v2.1b lastpage:|\linebreak
+% |\def\loadlastpage{\ProvidesPackage{lastpage}[2024/07/07 v2.1c lastpage:|\linebreak
% | 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}|.)
%
% \begin{macrocode}
@@ -913,7 +912,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%% Part of the "lastpage" package
%% loads either lastpage2.09.sty for TeX 2.09 or lastpage2e.sty for LaTeX 2e
%% with code from https://groups.google.com/g/comp.text.tex/c/-Qmhj1ZI4xM
-\def\loadlastpage{\ProvidesPackage{lastpage}[2024/07/03 v2.1b lastpage: 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}
+\def\loadlastpage{\ProvidesPackage{lastpage}[2024/07/07 v2.1c lastpage: 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}
\begingroup \expandafter \ifx \csname documentclass\endcsname\relax
\endgroup \expandafter \input{lastpage209.sty}
\else \endgroup \expandafter \loadlastpage
@@ -953,7 +952,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%<*lastpage2e>
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesPackage{lastpage2e}[2024/07/03 v2.1b %
+\ProvidesPackage{lastpage2e}[2024/07/07 v2.1c %
Decide which 2e lastpage version to use (HMM)]
\@ifl@t@r\fmtversion{2023/06/01}{\RequirePackage{lastpagemodern}}{%
\RequirePackage{lastpageclassic}}
@@ -968,7 +967,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%<*lastpageclassic>
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesPackage{lastpageclassic}[2024/07/03 v2.1b %
+\ProvidesPackage{lastpageclassic}[2024/07/07 v2.1c %
Refers to last page's name (HMM; JPG)]
%% allows for things like "Page \thepage{} of \pageref{LastPage}"
%% to get "Page 7 of 9"
@@ -1386,7 +1385,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%<*lastpagemodern>
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[2023-06-01]
-\ProvidesPackage{lastpagemodern}[2024-07-03 v2.1b %
+\ProvidesPackage{lastpagemodern}[2024-07-07 v2.1c %
Refers to last page's name (HMM; JPG)]
%% allows for things like "Page \thepage{} of \pageref{LastPage}"
%% to get "Page 7 of 9" or "Page VII of IX";
@@ -1500,9 +1499,19 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
\else%
% \end{macrocode}
% |\@currentHpage| should be |page.<some number>|, |\lastpage@rmpage| removes the
-% \mbox{\textquotedblleft |page.|\textquotedblright .}
+% \mbox{\textquotedblleft |page.|\textquotedblright .} Next compilation run,
+% |\lastpage@lastpageHy| gets defined via the \xfile{aux} file.
+% If we arrived at this place, but the definition is still empty,
+% then |\@currentHpage| has some unexpected content.
% \begin{macrocode}
\gdef\lastpage@Hy{\lastpage@rmpage{\@currentHpage}}%
+ \ifx\lastpage@lastpageHy\empty\relax%
+ \PackageWarningNoLine{lastpage}{%
+ \string\@currentHpage\space is\MessageBreak%
+ \meaning\@currentHpage\MessageBreak%
+ not beginning with "page.",\MessageBreak%
+ \string\lastpage@lastpageHy\space is now let empty.}%
+ \fi%
\fi%
\fi%
}%
@@ -1513,14 +1522,20 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{macrocode}
% \end{macro}
% \begin{macro}{\lastpage@rmpage}
-% |\lastpage@rmpage| removes the \mbox{\textquotedblleft |page.|\textquotedblright ,}
-% but just boldly assumes that |#1| is now |page.<some number>|.
+% |\lastpage@rmpage| removes the \mbox{\textquotedblleft |page.|\textquotedblright.}
+%
% \begin{macrocode}
-%% similar to https://tex.stackexchange.com/a/12811/6865
-\def\lastpage@rmpage#1{\expandafter\lastpage@currentH#1\relax}
-\def\lastpage@currentH#1.#2\relax{#2}
+%% Code provided by David Carlisle at https://tex.stackexchange.com/a/721877
+\def\lastpage@rmpage#1{%
+ \expandafter\xlastpage@rmpage\expanded{#1}\xlastpage@rmpage page.%
+ \xlastpage@rmpage\xxlastpage@rmpage{#1}}
+\def\xlastpage@rmpage #1page.#2\xlastpage@rmpage#3\xxlastpage@rmpage#4{%
+ \if$\detokenize{#1}$#2%\else#4
+ \fi}
% \end{macrocode}
+% |\else#4| means, that it did not start with |page.|, and whatever it is,
+% we cannot use this |#4| for |\lastpage@Hy|.
% \end{macro}
% \begin{macro}{\lastpage@putl@bel}
% \indent This command does the writing of the label.
@@ -1601,7 +1616,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{macrocode}
% \end{macro}
-%
+%\pagebreak
% \begin{macro}{\lastpage@fileswtest}
% \indent \hspace*{2em}Later it will be determined whether it is allowed to write
% to the \xfile{aux} file. If it was \emph{not} allowed, it is checked
@@ -1740,7 +1755,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{description}
% \item[-] \TeX, \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
%
@@ -1750,7 +1765,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{description}
% \item[-] \TeX-format \LaTeX{}, v2.09
%
-% \item[-] package \xpackage{lastpage209}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage209}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and does not work with \xpackage{hyperref}, which needs \LaTeX2e{}.\smallskip
@@ -1762,7 +1777,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item[-] \TeX-format \LaTeXe{} 1994/12/01 or newer,
% \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
%
@@ -1773,7 +1788,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item[-] \TeX-format \LaTeXe{} between 1994/12/01 and 2023-05-31,\newline
% \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and can use
@@ -1790,7 +1805,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item[-] \TeX-format \LaTeXe{} 2023-06-01 or newer,\newline
% \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and can use
@@ -1805,7 +1820,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% The |lastpage-example.tex| requires the same file as all
% documents using the \xpackage{lastpage} package, i.\,e.
% \begin{description}
-% \item[-] package \xpackage{lastpage}, 2024-07-03, v2.1b,
+% \item[-] package \xpackage{lastpage}, 2024-07-07, v2.1c,
% \url{https://ctan.org/pkg/lastpage}\newline
% (Well, it is the example file for this package, and because you are reading the
% documentation for the \xpackage{lastpage} package, it can be assumed that you already
@@ -2086,6 +2101,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% to update it. Further I would like to thank \textsc{Heiko Oberdiek}
% for providing a~lot~(!) of useful packages (from which I also learned everything
% I know about creating a file in \xfile{dtx} format, OK, say it: copying).
+% Thanks to \textsc{David Carlisle} for the new code for |\lastpage@rmpage|.
% Thanks for bug reports go to \textsc{Ulrike Fischer} (several times),
% \textsc{Sebastian Bank}, \textsc{James Hedges}, \textsc{Mikhail Titov},
% \textsc{Micha\l{} Herman}, \textsc{Matteo Gamboz}, and \textsc{James Small}.
@@ -2267,8 +2283,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item Replaced |\immediate\write| by a form of (pseudo-code!) |\immediate\protected@write|.
% (Thanks to \textsc{Ulrike Fischer} for the error report and solution!)
% \item Update of the |\lastpage@putl@bel| code to \pkg{hyperref} 2023-07-08, v7.01b,
-% which now allows fnsymbol as page numbering scheme (while links to, for example,
-% a page named $\|$ still do not work).
+% which now allows fnsymbol as page numbering scheme.
% \end{Version}
% \begin{Version}{2023-10-06 v2.0d}
% \item For plain arabic page numbers only, \pkg{lastpage} again writes the page number
@@ -2291,6 +2306,10 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% The defining operation for |\lastpage@Hy| has been changed to catch this
% and other different cases.
% \end{Version}
+% \begin{Version}{2024-07-07 v2.1c}
+% \item With help from \textsc{David Carlisle} |\lastpage@rmpage| no longer assumes
+% |\@currentHpage| to begin with |page.|.
+% \end{Version}
% \end{History}
% \bigskip
%
diff --git a/macros/latex/contrib/lastpage/lastpage.pdf b/macros/latex/contrib/lastpage/lastpage.pdf
index 70a678fe59..9d224e6772 100644
--- a/macros/latex/contrib/lastpage/lastpage.pdf
+++ b/macros/latex/contrib/lastpage/lastpage.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/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/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/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/luatex/generic/luamplib/Makefile b/macros/luatex/generic/luamplib/Makefile
index 87f04f727e..a0a2282675 100644
--- a/macros/luatex/generic/luamplib/Makefile
+++ b/macros/luatex/generic/luamplib/Makefile
@@ -40,6 +40,7 @@ world: all ctan
%.pdf: %.dtx
@$(DOLATEX)
@if( grep rerunfilecheck $(NAME).log |grep 'has changed' > /dev/null ); then $(DOLATEX); fi
+ @if( grep 'Rerun to get' $(NAME).log > /dev/null ); then $(DOLATEX); fi
$(UNPACKED): $(DTX)
luatex -interaction=batchmode $< >/dev/null
diff --git a/macros/luatex/generic/luamplib/NEWS b/macros/luatex/generic/luamplib/NEWS
index 50e7c625a9..aa75e98b1f 100644
--- a/macros/luatex/generic/luamplib/NEWS
+++ b/macros/luatex/generic/luamplib/NEWS
@@ -1,5 +1,49 @@
History of the luamplib package
+2024/07/31 2.34.4
+ * 'withpattern' operator accepts a <textual picture> as well as a <path>
+ for its operand. Thus users can give pattern effect to the result of btex
+ command or infont operator.
+
+ * fix regarding line width in mplibgraphictext
+
+2024/07/27 2.34.3
+ * in DVI mode, use LaTeX's shipout hooks to generate new XObjects
+ or to put resources to pageresources. (in plain, load atbegshi.sty)
+
+ * fix shading to allow the even-odd rule
+
+2024/07/24 2.34.2
+ * With the newly introduced macros, \mplibgroup ... \endmplibgroup, users
+ can define a transparency group or a normal form XObject from TeX side.
+ The LaTeX environment 'mplibgroup' is identical to this pair of macros.
+ See the document for details.
+
+ * document: be more precise about the color effect of a transparency group
+
+ * remove trailing zeros from numeric objects to get smaller PDF
+
+2024/07/19 2.34.1
+ * transparency group is available with plain format as well.
+ * transparency group once used is reusable in the TeX code or
+ in other MetaPost code chunks. see the document for details.
+
+2024/07/17 2.34.0
+ * support transparency group with metafun format
+ * fix regarding default value in circular fading mode
+ * fix regarging the scope of graphics state
+
+2024/07/14 2.33.1
+ * refactor the manual, including some minor items undocumented so far
+ * improve fading routine to get possibly smaller pdf file
+
+2024/07/08 2.33.0
+ * provide a new metapost operator 'withfademethod' and related macros,
+ which make the color of an object gradiently transparent. see luamplib
+ document for details.
+
+ * fix spot-color shading routine to support user-defined colorspace
+
2024/07/03 2.32.4
* make the variable 'patterns' local
* 'math.randomseed' on plain TeX
diff --git a/macros/luatex/generic/luamplib/luamplib.dtx b/macros/luatex/generic/luamplib/luamplib.dtx
index c050955a39..aa79cb3da7 100644
--- a/macros/luatex/generic/luamplib/luamplib.dtx
+++ b/macros/luatex/generic/luamplib/luamplib.dtx
@@ -2,8 +2,8 @@
%
% Copyright (C) 2008-2024 by Hans Hagen, Taco Hoekwater, Elie Roux,
% Manuel Pégourié-Gonnard, Philipp Gesang and Kim Dohyun.
-% Currently maintained by the LuaLaTeX development team.
-% Support: <lualatex-dev@tug.org>
+% Currently maintained by Kim Dohyun.
+% Support: <https://github.com/lualatex/luamplib>
%
% This work is under the GPL v2.0 license.
%
@@ -85,9 +85,9 @@ See source file '\inFileName' for licencing and contact information.
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{luamplib.drv}%
- [2024/07/03 v2.32.4 Interface for using the mplib library]%
+ [2024/07/31 v2.34.4 Interface for using the mplib library]%
\documentclass{ltxdoc}
-\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace}
+\usepackage{metalogo,multicol,xspace}
\usepackage[x11names]{xcolor}
%
\def\primarycolor{DodgerBlue4} %%-> rgb 16 78 139 | #104e8b
@@ -123,7 +123,9 @@ See source file '\inFileName' for licencing and contact information.
\newcommand*\email [1] {<\href{mailto:#1}{#1}>}
\newcommand \file {\nolinkurl}
-\newcommand \pk {\textsf}
+
+\newcommand*\metapost {\textsc{metapost}\xspace}
+\newcommand*\mplib {\pkg{mplib}\xspace}
\begin{document}
\DocInput{luamplib.dtx}%
@@ -149,125 +151,164 @@ See source file '\inFileName' for licencing and contact information.
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \title{The \textsf{luamplib} package}
+% \title{The \pkg{luamplib} package}
% \author{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang and Kim Dohyun\\
-% Maintainer: LuaLaTeX Maintainers ---
-% Support: \email{lualatex-dev@tug.org}}
-% \date{2024/07/03 v2.32.4}
+% Current Maintainer: Kim Dohyun\\
+% Support: \url{https://github.com/lualatex/luamplib}}
+% \date{2024/07/31 v2.34.4}
%
% \maketitle
%
% \begin{abstract}
-% Package to have metapost code typeset directly in a document with \LuaTeX.
+% Package to have \metapost code typeset directly in a document with \LuaTeX.
% \end{abstract}
%
% \section{Documentation}
%
-% This packages aims at providing a simple way to typeset directly metapost
-% code in a document with \LuaTeX. \LuaTeX\ is built with the lua
-% \texttt{mplib} library, that runs metapost code. This package is basically a
-% wrapper (in Lua) for the Lua \texttt{mplib} functions and some \TeX\
-% functions to have the output of the \texttt{mplib} functions in the pdf.
-%
-% In the past,
-% the package required PDF mode in order to output something.
-% Starting with version 2.7 it works in DVI mode as well, though
-% DVIPDFMx is the only DVI tool currently supported.
-%
-% The metapost figures are put in a \TeX\ \texttt{hbox} with dimensions
-% adjusted to the metapost code.
+% This package aims at providing a simple way to typeset directly \metapost
+% code in a document with \LuaTeX. \LuaTeX\ is built with the Lua
+% \mplib library, that runs \metapost code. This package is basically a
+% wrapper for the Lua \mplib functions and some \TeX\
+% functions to have the output of the \mplib functions in the pdf.
%
-% Using this package is easy: in Plain, type your metapost code between the
+% Using this package is easy: in Plain, type your \metapost code between the
% macros \cs{mplibcode} and \cs{endmplibcode}, and in \LaTeX\ in the
-% \texttt{mplibcode} environment.
+% |mplibcode| environment.
%
-% The code is from the \texttt{luatex-mplib.lua} and \texttt{luatex-mplib.tex} files
-% from \ConTeXt, they have been adapted to \LaTeX\ and Plain by Elie Roux and
-% Philipp Gesang, new functionalities have been added by Kim Dohyun.
-% The changes are:
+% The resulting \metapost figures are put in a \TeX\ |hbox| with dimensions
+% adjusted to the \metapost code.
+%
+% The code of luamplib is basically from the |luatex-mplib.lua| and |luatex-mplib.tex| files
+% from \ConTeXt. They have been adapted to \LaTeX\ and Plain by Elie Roux and
+% Philipp Gesang and new functionalities have been added by Kim Dohyun.
+% The most notable changes are:
%
% \begin{itemize}
-% \item a \LaTeX\ environment
-% \item all \TeX\ macros start by |mplib|
-% \item use of our own function for errors, warnings and informations
% \item possibility to use |btex ... etex| to typeset \TeX\ code.
-% |textext()| is a more versatile macro equivalent to |TEX()| from TEX.mp.
-% |TEX()| is also allowed and is a synomym of |textext()|.\par\smallskip
-% \textsc{n.b.} Since v2.5, |btex ... etex| input from external |mp| files
-% will also be processed by \textsf{luamplib}.\par\smallskip
-% \textsc{n.b.} Since v2.20, |verbatimtex ... etex| from external |mp| files
-% will be also processed by \textsf{luamplib}. Warning: This is a change
-% from previous version.
+% |textext()| is a more versatile macro equivalent to |TEX()| from \pkg{TEX.mp}.
+% |TEX()| is also allowed and is a synonym of |textext()|.
+% The argument of
+% \mplib's primitive |maketext| will also be processed by the same routine.
+%
+% \item possibility to use |verbatimtex ... etex|, though it's behavior cannot
+% be the same as the stand-alone \pkg{mpost}.
+% Of course you cannot include \cs{documentclass}, \cs{usepackage} etc.
+% When these \TeX\ commands are found in |verbatimtex ... etex|, the entire code will be
+% ignored.
+% The treatment of |verbatimtex| command has changed a lot since v2.20:
+% see \hyperlink{mpliblegacybehavior}{below \S\,1.1}.
+%
+% \item in the past,
+% the package required PDF mode in order to have some output.
+% Starting with version 2.7 it works in DVI mode as well, though
+% DVIPDFMx is the only DVI tool currently supported.
% \end{itemize}
%
-% Some more changes and cautions are:
+% It seems to be convenient to divide the explanations of some more changes and cautions
+% into three parts: \TeX, \textsc{MetaPost}, and Lua interfaces.
+%
+% \subsection{\TeX}
%
% \paragraph{\cs{mplibforcehmode}}
-% When this macro is declared, every mplibcode figure box will be
+% When this macro is declared, every \metapost figure box will be
% typeset in horizontal mode, so \cs{centering}, \cs{raggedleft} etc
-% will have effects. |\mplibnoforcehmode|, being default, reverts this
-% setting. (Actually these commands redefine |\prependtomplibbox|. You
-% can define this command with anything suitable before a box.)
+% will have effects. \cs{mplibnoforcehmode}, being default, reverts this
+% setting. (Actually these commands redefine \cs{prependtomplibbox}; you
+% can redefine this command with anything suitable before a box.)
%
-% \paragraph{\cs{mpfig} \ldots\ \cs{endmpfig}}
-% Since v2.29 we provide unexpandable \TeX\ macros |\mpfig ... \endmpfig| and its starred version
-% |\mpfig* ... \endmpfig| to save typing toil.
-% The first is roughly the same as follows:
-% \begin{verbatim}
-% \begin{mplibcode}[@mpfig]
-% beginfig(0)
-% token list declared by \everymplib[@mpfig]
-% ...
-% token list declared by \everyendmplib[@mpfig]
-% endfig;
-% \end{mplibcode}
-% \end{verbatim}
-% and the starred version is roughly the same as follows:
-% \begin{verbatim}
-% \begin{mplibcode}[@mpfig]
-% ...
+% \paragraph{\cs{everymplib\{...\}}, \cs{everyendmplib\{...\}}}
+% \cs{everymplib} and \cs{everyendmplib} redefine
+% the lua table containing \metapost code
+% which will
+% be automatically inserted at the beginning and ending of each \metapost code chunk.
+%\begin{verbatim}
+% \everymplib{ beginfig(0); }
+% \everyendmplib{ endfig; }
+% \begin{mplibcode}
+% % beginfig/endfig not needed
+% draw fullcircle scaled 1cm;
% \end{mplibcode}
-% \end{verbatim}
-% In these macros |\mpliblegacybehavior{disable}| (see below)
-% is forcibly declared.
-% And as both share the same instance name, metapost codes are inherited among them.
-% A simple example:
-% \begin{verbatim}
-% \mpfig* input boxes \endmpfig
-% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); }
-% \mpfig circleit.a(btex Box 1 etex); drawboxed(a); \endmpfig
-% \end{verbatim}
-% The instance name (default: |@mpfig|) can be changed by redefining
-% \cs{mpfiginstancename}, after which a new MPlib instance will start and
-% code inheritance too will begin anew. |\let\mpfiginstancename\empty| will
-% prevent code inheritance if |\mplibcodeinherit{true}| (see below) is not declared.\footnote{%
-% As for user setting values, |enable|, |true|, |yes| are identical, and
-% |disable|, |false|, |no| are identical.}
-%
-% \paragraph{\cs{mpliblegacybehavior\{enable\}}}
-% By default, |\mpliblegacybehavior{enable}| is already declared,
-% in which case
-% a |verbatimtex ... etex| that comes just before |beginfig()|
-% is not ignored, but the \TeX\ code will be inserted before the
-% following mplib hbox. Using this command,
-% each mplib box can be freely moved horizontally and/or vertically.
-% Also, a box number might be assigned to mplib box, allowing it to be
-% reused later (see test files).
-% \begin{verbatim}
+%\end{verbatim}
+%
+% \paragraph{\cs{mplibsetformat\{plain\textbar metafun\}}}
+% There are (basically) two formats for \metapost: \emph{plain} and
+% \emph{metafun}. By default, the \emph{plain} format is used, but you can set
+% the format to be used by future figures at any time using
+% \cs{mplibsetformat\{<format name>\}}.
+%
+% \textsc{n.b.} As \emph{metafun} is such a complicated format,
+% we cannot support all the functionalities producing special effects provided by \emph{metafun}.
+% At least, however, transparency (actually opacity), transparency group, and shading (gradient colors)
+% are fully supported,
+% and outlinetext is supported by our own alternative |mpliboutlinetext|
+% (see \hyperlink{mpliboutlinetext}{below \S\,1.2}).
+%
+% \leavevmode\llap{\textcolor{red}{☞}\kern1.2\parindent}\relax
+% Among these, transparency is so simple that you can apply it to an object,
+% even with the \emph{plain} format,
+% just by appending |withprescript| |"tr_transparency=<number>"| to the sentence.
+% ($0 \le \hbox{\emph{<number>}} \le 1$)
+%
+% \hypertarget{metafunformat}{}\relax
+% As for transparency group, the current \emph{metafun} document \S\,8.8 is not correct.
+% The true syntax is:
+%\begin{verbatim}
+% draw <picture>|<path> asgroup <string>
+%\end{verbatim}
+% where \emph{<string>} should be |""| (empty), |"isolated"|, |"knockout"|, or |"isolated,knockout"|.
+% Beware that currently many of the PDF rendering applications, except Adobe Acrobat Reader,
+% cannot properly render the isolated or knockout effect.
+% Transparency group is available with \emph{plain} format as well, with extended functionality.
+% See \hyperlink{transparencygroup}{below \S\,1.2}.
+%
+% One thing worth mentioning about shading is:
+% when a color expression is given in string type,
+% it is regarded by luamplib as
+% a color expression of \TeX\ side.
+% For instance, when |withshadecolors("orange", 2/3red)| is given, the first color |"orange"| will be
+% interpreted as a \pkg{color}, \pkg{xcolor} or \pkg{l3color}'s expression.
+%
+% \paragraph{\cs{mplibnumbersystem\{scaled\textbar double\textbar decimal\}}}
+% Users can choose |numbersystem| option.
+% The default value is |scaled|, which can be changed
+% by declaring \cs{mplibnumbersystem\{double\}} or
+% \cs{mplibnumbersystem\{decimal\}}.
+%
+% \paragraph{\cs{mplibshowlog\{enable\textbar disable\}}}
+% Default: |disable|.
+% When \cs{mplibshowlog\{enable\}}\footnote{As for user's setting,
+% |enable|, |true| and |yes| are identical;
+% |disable|, |false| and |no| are identical.} is declared, log messages returned by
+% the \metapost process will be printed to the |.log| file.
+% This is the \TeX{} side interface for |luamplib.showlog|.
+%
+% \paragraph{\cs{mpliblegacybehavior\{enable\textbar disable\}}}
+% \hypertarget{mpliblegacybehavior}{}\relax
+% By default, \cs{mpliblegacybehavior\{enable\}}
+% is already declared for backward compatibility,
+% in which case \TeX\ code in
+% |verbatimtex| |...| |etex| that comes just before |beginfig()|
+% will be inserted before the
+% following \metapost figure box. In this way,
+% each figure box can be freely moved horizontally or vertically.
+% Also, a box number can be assigned to a figure box, allowing it to be
+% reused later.
+%\begin{verbatim}
% \mplibcode
% verbatimtex \moveright 3cm etex; beginfig(0); ... endfig;
% verbatimtex \leavevmode etex; beginfig(1); ... endfig;
% verbatimtex \leavevmode\lower 1ex etex; beginfig(2); ... endfig;
% verbatimtex \endgraf\moveright 1cm etex; beginfig(3); ... endfig;
% \endmplibcode
-% \end{verbatim}
+%\end{verbatim}
% \textsc{n.b.} \cs{endgraf} should be used instead of \cs{par} inside
% |verbatimtex ... etex|.
%
-% By contrast, \TeX\ code in |VerbatimTeX(...)| or |verbatimtex ... etex|
+% On the other hand, \TeX\ code in |verbatimtex ... etex|
% between |beginfig()| and |endfig| will be inserted
-% after flushing out the mplib figure.
-% \begin{verbatim}
+% after flushing out the \metapost figure.
+% As shown in the example below, |VerbatimTeX()| is a synonym of |verbatimtex| |...| |etex|.
+%\begin{verbatim}
% \mplibcode
% D := sqrt(2)**7;
% beginfig(0);
@@ -276,15 +317,15 @@ See source file '\inFileName' for licencing and contact information.
% endfig;
% \endmplibcode
% diameter: \Dia bp.
-% \end{verbatim}
+%\end{verbatim}
%
-% \paragraph{\cs{mpliblegacybehavior\{disable\}}}
-% If |\mpliblegacybehavior{disabled}| is declared by user, any
-% |verbatimtex ... etex| will be executed, along with |btex ... etex|,
+% By contrast,
+% when \cs{mpliblegacybehavior\{disable\}} is declared, any
+% |verbatimtex| |...| |etex| will be executed, along with |btex| |...| |etex|,
% sequentially one by one.
% So, some \TeX\ code in |verbatimtex ... etex| will have effects on
-% |btex ... etex| codes that follows.
-% \begin{verbatim}
+% following |btex| |...| |etex| codes.
+%\begin{verbatim}
% \begin{mplibcode}
% beginfig(0);
% draw btex ABC etex;
@@ -293,114 +334,72 @@ See source file '\inFileName' for licencing and contact information.
% draw btex GHI etex shifted (2cm,0); % bold face
% endfig;
% \end{mplibcode}
-% \end{verbatim}
-%
-% \paragraph{\cs{everymplib}, \cs{everyendmplib}}
-% Since v2.3, new macros \cs{everymplib} and \cs{everyendmplib} redefine
-% the lua table containing MetaPost code
-% which will
-% be automatically inserted at the beginning and ending of each |mplibcode|.
-% \begin{verbatim}
-% \everymplib{ beginfig(0); }
-% \everyendmplib{ endfig; }
-% \mplibcode % beginfig/endfig not needed
-% draw fullcircle scaled 1cm;
-% \endmplibcode
-% \end{verbatim}
-%
-% \paragraph{\cs{mpdim}}
-% Since v2.3, \cs{mpdim} and other raw \TeX\ commands are allowed
-% inside mplib code. This feature is inpired by gmp.sty authored by
-% Enrico Gregorio. Please refer the manual of gmp package for details.
-% \begin{verbatim}
-% \begin{mplibcode}
-% draw origin--(.6\mpdim{\linewidth},0) withpen pencircle scaled 4
-% dashed evenly scaled 4 withcolor \mpcolor{orange};
-% \end{mplibcode}
-% \end{verbatim}
-% \textsc{n.b.} Users should not use the protected variant of
-% |btex ... etex| as provided by gmp package. As \textsf{luamplib}
-% automatically protects \TeX\ code inbetween, \cs{btex} is not supported
-% here.
+%\end{verbatim}
%
-% \paragraph{\cs{mpcolor}}
-% With \cs{mpcolor} command, color names or expressions of
-% \textsf{color}/\textsf{xcolor} packages can be used inside mplibcode
-% enviroment (after |withcolor| operator),
-% though \textsf{luamplib} does not automatically load these
-% packages. See the example code above. For spot colors,
-% \textsf{colorspace}, \textsf{spotcolor}
-% (in PDF mode) and \textsf{xespotcolor} (in DVI mode) packages are supported
-% as well.
-%
-% From v2.26.1, \textsf{l3color} is also supported by the command
-% \cs{mpcolor\{color expression\}}, including spot colors.
-%
-% \paragraph{\cs{mplibnumbersystem}}
-% Users can choose |numbersystem| option since v2.4.
-% The default value |scaled| can be changed to |double| or |decimal|
-% by declaring |\mplibnumbersystem{double}| or |\mplibnumbersystem{decimal}|.
-% For details see
-% \url{http://github.com/lualatex/luamplib/issues/21}.
-%
-% \paragraph{\cs{mplibtextextlabel}}
-% Starting with v2.6, |\mplibtextextlabel{enable}| enables
-% string labels typeset via |textext()| instead of |infont| operator.
+% \paragraph{\cs{mplibtextextlabel\{enable\textbar disable\}}}
+% Default: |disable|.
+% \cs{mplibtextextlabel\{enable\}} enables
+% the labels typeset via |textext| instead of |infont| operator.
% So, |label("my text",origin)| thereafter is exactly the same as
-% |label(textext("my text"),origin)|. \textsc{n.b.} In the background,
-% \textsf{luamplib} redefines |infont| operator so that the right side
-% argument (the font part) is totally ignored. Every string label
-% therefore will be typeset with current \TeX\ font.
+% |label(textext("my text"),origin)|.
+%
+% \textsc{n.b.} In the background,
+% luamplib redefines |infont| operator so that the right side
+% argument (the font part) is totally ignored. Therefore the left side arguemnt
+% will be typeset with the current \TeX\ font.
% Also take care of |char| operator in the left side argument,
% as this might bring unpermitted characters into \TeX.
%
-% \paragraph{\cs{mplibcodeinherit}}
-% Starting with v2.9, |\mplibcodeinherit{enable}| enables the inheritance
-% of variables, constants, and macros defined by previous |mplibcode| chunks.
-% On the contrary, the default value |\mplibcodeinherit{disable}| will make
-% each code chunks being treated as an independent instance, and never
+% \paragraph{\cs{mplibcodeinherit\{enable\textbar disable\}}}
+% Default: |disable|.
+% \cs{mplibcodeinherit\{enable\}} enables the inheritance
+% of variables, constants, and macros defined by previous \metapost code chunks.
+% On the contrary, \cs{mplibcodeinherit\{disable\}} will make
+% each code chunk being treated as an independent instance, never
% affected by previous code chunks.
%
-% \paragraph{Separate instances for \LaTeX{} and plain \TeX}
-% v2.22 has added the support for several named MetaPost instances
+% \paragraph{Separate \metapost instances}
+% luamplib v2.22 has added the support for several named \metapost instances
% in \LaTeX{} |mplibcode| environment.
-% (And since v2.29 plain \TeX\ users can use this functionality as well.)
-% Syntax is like so:
-% \begin{verbatim}
+% Plain \TeX\ users also can use this functionality.
+% The syntax for \LaTeX\ is:
+%\begin{verbatim}
% \begin{mplibcode}[instanceName]
% % some mp code
% \end{mplibcode}
-% \end{verbatim}
-% Behaviour is as follows.
+%\end{verbatim}
+% The behavior is as follows.
% \begin{itemize}
% \item All the variables and functions are shared
% only among all the environments belonging to the same instance.
-% \item |\mplibcodeinherit| only affects environments
+% \item \cs{mplibcodeinherit} only affects environments
% with no instance name set (since if a name is set,
% the code is intended to be reused at some point).
-% \item From v2.27, |btex ... etex| boxes are also shared and do not
-% require |\mplibglobaltextext|.
+% \item |btex ... etex| boxes are also shared and do not
+% require \cs{mplibglobaltextext}.
% \item When an instance names is set,
-% respective |\currentmpinstancename| is set.
+% respective \cs{currentmpinstancename} is set as well.
% \end{itemize}
-% In parellel with this functionality, v2.23 and after supports
+% In parellel with this functionality, we support
% optional argument of instance name for \cs{everymplib} and
% \cs{everyendmplib}, affecting only those |mplibcode| environments
% of the same name.
% Unnamed \cs{everymplib} affects not only those instances with no name,
% but also those with name but with no corresponding \cs{everymplib}.
-% Syntax is:
-% \begin{verbatim}
+% The syntax is:
+%\begin{verbatim}
% \everymplib[instanceName]{...}
% \everyendmplib[instanceName]{...}
-% \end{verbatim}
+%\end{verbatim}
%
-% \paragraph{\cs{mplibglobaltextext}}
-% Formerly, to inherit |btex ... etex| boxes as well as metapost variables,
+% \paragraph{\cs{mplibglobaltextext\{enable\textbar disable\}}}
+% Default: |disable|.
+% Formerly, to inherit |btex| |...| |etex| boxes as well as other \metapost macros, variables and constants,
% it was necessary to declare \cs{mplibglobaltextext\{enable\}} in advance.
% But from v2.27, this is implicitly enabled when \cs{mplibcodeinherit}
-% is |true|.
-% \begin{verbatim}
+% is enabled.
+% This optional command still remains mostly for backward compatibility.
+%\begin{verbatim}
% \mplibcodeinherit{enable}
% %\mplibglobaltextext{enable}
% \everymplib{ beginfig(0);} \everyendmplib{ endfig;}
@@ -412,38 +411,92 @@ See source file '\inFileName' for licencing and contact information.
% \mplibcode
% currentpicture := pic scaled 2;
% \endmplibcode
-% \end{verbatim}
-% Generally speaking, it is recommended to turn |mplibglobaltextext|
-% always on, because it has the advantage of reusing metapost pictures
-% among code chunks.
-% But everything has its downside: it will waste more memory resources.
-%
-% \paragraph{\cs{mplibverbatim}}
-% Starting with v2.11, users can issue |\mplibverbatim{enable}|, after which
+%\end{verbatim}
+%
+% \paragraph{\cs{mplibverbatim\{enable\textbar disable\}}}
+% Default: |disable|.
+% Users can issue \cs{mplibverbatim\{enable\}}, after which
% the contents of mplibcode environment will be read verbatim. As a result,
-% except for |\mpdim| and |\mpcolor|, all other \TeX\ commands outside
-% |btex ... etex| or |verbatimtex ... etex| are not expanded and will be fed
-% literally into the mplib process.
+% except for \cs{mpdim} and \cs{mpcolor} (see \hyperlink{mpdim}{below}),
+% all other \TeX\ commands outside of the
+% |btex| or |verbatimtex| |...| |etex| are not expanded and will be fed
+% literally to the \mplib library.
+%
+% \paragraph{\cs{mpdim\{...\}}}
+% \hypertarget{mpdim}{}\relax
+% Besides other \TeX\ commands, \cs{mpdim} is specially allowed
+% in the mplibcode environment. This feature is inpired by \pkg{gmp} package authored by
+% Enrico Gregorio. Please refer to the manual of \pkg{gmp} package for details.
+%\begin{verbatim}
+% \begin{mplibcode}
+% beginfig(1)
+% draw origin--(.6\mpdim{\linewidth},0) withpen pencircle scaled 4
+% dashed evenly scaled 4 withcolor \mpcolor{orange};
+% endfig;
+% \end{mplibcode}
+%\end{verbatim}
%
-% \paragraph{\cs{mplibshowlog}}
-% When |\mplibshowlog{enable}| is declared, log messages returned by
-% |mplib| instance will be printed into the |.log| file.
-% |\mplibshowlog{disable}| will revert this functionality.
-% This is a \TeX{} side interface for |luamplib.showlog|. (v2.20.8)
+% \paragraph{\cs{mpcolor[...]\{...\}}}
+% With \cs{mpcolor} command, color names or expressions of
+% \pkg{color}, \pkg{xcolor} and \pkg{l3color} module/packages can be used in the mplibcode
+% environment (after |withcolor| operator).
+% See the example \hyperlink{mpdim}{above}.
+% The optional |[...]| denotes the option of \pkg{xcolor}'s \cs{color} command.
+% For spot colors, \pkg{l3color} (in PDF/DVI mode),
+% \pkg{colorspace}, \pkg{spotcolor}
+% (in PDF mode) and \pkg{xespotcolor} (in DVI mode) packages are supported
+% as well.
+%
+% \paragraph{\cs{mpfig} \ldots\ \cs{endmpfig}}
+% Besides the |mplibcode| environment (for \LaTeX) and
+% \cs{mplibcode ...} \cs{endmplibcode} (for Plain),
+% we also provide unexpandable \TeX\ macros \cs{mpfig} |...| \cs{endmpfig} and its starred version
+% \cs{mpfig*} |...| \cs{endmpfig} to save typing toil.
+% The former is roughly the same as follows:
+%\begin{verbatim}
+% \begin{mplibcode}[@mpfig]
+% beginfig(0)
+% token list declared by \everymplib[@mpfig]
+% ...
+% token list declared by \everyendmplib[@mpfig]
+% endfig;
+% \end{mplibcode}
+%\end{verbatim}
+% and the starred version is roughly the same as follows:
+%\begin{verbatim}
+% \begin{mplibcode}[@mpfig]
+% ...
+% \end{mplibcode}
+%\end{verbatim}
+% In these macros \cs{mpliblegacybehavior\{disable\}}
+% is forcibly declared.
+% Again, as both share the same instance name, \metapost codes are inherited among them.
+% A simple example:
+%\begin{verbatim}
+% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); }
+% \mpfig* input boxes \endmpfig
+% \mpfig
+% circleit.a(btex Box 1 etex); drawboxed(a);
+% \endmpfig
+%\end{verbatim}
+% The instance name (default: |@mpfig|) can be changed by redefining
+% \cs{mpfiginstancename}, after which a new \mplib instance will start and
+% code inheritance too will begin anew. \cs{let}\cs{mpfiginstancename}\cs{empty} will
+% prevent code inheritance if \cs{mplibcodeinherit\{true\}} is not declared.
%
% \paragraph{About cache files}
-% To support |btex ... etex| in external |.mp| files, \textsf{luamplib}
-% inspects the content of each and every |.mp| input files and makes caches
-% if nececcsary, before returning their paths to \LuaTeX's mplib library.
-% This would make the compilation time longer wastefully, as most |.mp| files
-% do not contain |btex ... etex| command. So \textsf{luamplib} provides
-% macros as follows, so that users can give instruction about files
+% To support |btex ... etex| in external |.mp| files, luamplib
+% inspects the content of each and every |.mp| file and makes caches
+% if nececcsary, before returning their paths to \LuaTeX's \mplib library.
+% This could waste the compilation time, as most |.mp| files
+% do not contain |btex ... etex| commands. So luamplib provides
+% macros as follows, so that users can give instructions about files
% that do not require this functionality.
% \begin{itemize}
-% \item |\mplibmakenocache{<filename>[,<filename>,...]}|
-% \item |\mplibcancelnocache{<filename>[,<filename>,...]}|
+% \item \cs{mplibmakenocache\{<filename>[,<filename>,...]\}}
+% \item \cs{mplibcancelnocache\{<filename>[,<filename>,...]\}}
% \end{itemize}
-% where |<filename>| is a file name excluding |.mp| extension.
+% where |<filename>| is a filename excluding |.mp| extension.
% Note that |.mp| files under |$TEXMFMAIN/metapost/base| and
% |$TEXMFMAIN/metapost/context/base| are already registered by default.
%
@@ -451,64 +504,96 @@ See source file '\inFileName' for licencing and contact information.
% if it's not available (mostly not writable),
% in the directory where output files are saved:
% to be specific, |$TEXMF_OUTPUT_DIRECTORY/luamplib_cache|,
-% |./luamplib_cache|, |$TEXMFOUTPUT/luamplib_cache|, and |.| in this order.
-% (|$TEXMF_OUTPUT_DIRECTORY| is normally the value of |--output-directory|
-% command-line option.)
-% This behavior however can be changed by the command
-% |\mplibcachedir{<directory path>}|, where tilde (|~|) is interpreted
+% |./luamplib_cache|, |$TEXMFOUTPUT/luamplib_cache|, and |.|, in this order.
+% |$TEXMF_OUTPUT_DIRECTORY| is normally the value of |--output-directory|
+% command-line option.
+%
+% Users can change this behavior by the command
+% \cs{mplibcachedir\{<directory path>\}}, where tilde (|~|) is interpreted
% as the user's home directory (on a windows machine as well).
-% As backslashes (|\|) should be escaped by users, it would be easier to use
+% As backslashes (\cs{}) should be escaped by users, it would be easier to use
% slashes (|/|) instead.
%
-% \paragraph{\texttt{mplibtexcolor}, \texttt{mplibrgbtexcolor}}
-% |mplibtexcolor| is a metapost operator that converts a \TeX\ color expression
-% to a MetaPost color expression. For instance:
-% \begin{verbatim}
+% \paragraph{About figure box metric}
+% Notice that, after each figure is processed, the macro \cs{MPwidth} stores
+% the width value of the latest figure; \cs{MPheight}, the height value.
+% Incidentally, also note that \cs{MPllx}, \cs{MPlly}, \cs{MPurx}, and
+% \cs{MPury} store the bounding box information of the latest figure
+% without the unit |bp|.
+%
+% \paragraph{luamplib.cfg}
+% At the end of package loading, luamplib searches
+% |luamplib.cfg| and, if found, reads the file in automatically.
+% Frequently used settings such as \cs{everymplib}, \cs{mplibforcehmode}
+% or \cs{mplibcodeinherit} are suitable for going into this file.
+%
+% \subsection{\textsc{MetaPost}}
+%
+% \paragraph{\texttt{mplibdimen(...)}, \texttt{mplibcolor(...)}}
+% These are \metapost interfaces for the \TeX\ commands
+% \cs{mpdim} and \cs{mpcolor} (see \hyperlink{mpdim}{above}). For example,
+% |mplibdimen("\linewidth")| is basically the same as \cs{mpdim\{\cs{linewidth}\}}, and
+% |mplibcolor("red!50")| is basically the same as \cs{mpcolor\{red!50\}}.
+% The difference is that these \metapost operators can also be used in external |.mp| files,
+% which cannot have \TeX\ commands outside of the |btex| or |verbatimtex| |...| |etex|.
+%
+% \paragraph{\texttt{mplibtexcolor ...}, \texttt{mplibrgbtexcolor ...}}
+% |mplibtexcolor|, which accepts a string argument, is a \metapost operator that converts a \TeX\ color expression
+% to a \metapost color expression, that can be used anywhere color expression is expected
+% as well as after the |withcolor| operator.
+% For instance:
+%\begin{verbatim}
% color col;
% col := mplibtexcolor "olive!50";
-% \end{verbatim}
-% The result may vary in its color model (gray/rgb/cmyk)
+%\end{verbatim}
+% But the result may vary in its color model (gray/rgb/cmyk)
% according to the given \TeX\ color. (Spot colors are forced to
% cmyk model, so this operator is not recommended for spot colors.)
-% Therefore the example shown above would raise a metapost error:
+% Therefore the example shown above would raise a \metapost error:
% |cmykcolor col;| should have been declared.
-% By contrast, |mplibrgbtexcolor| always returns rgb model expressions.
-%
-% \paragraph{\texttt{mplibgraphictext}}
-% For some amusement, luamplib provides its own metapost operator
-% |mplibgraphictext|, the effect of which is similar to that of
-% \ConTeXt's |graphictext|. However syntax is somewhat different.
-% \begin{verbatim}
+% By contrast, |mplibrgbtexcolor| \emph{<string>} always returns rgb model expressions.
+%
+% \paragraph{\texttt{mplibgraphictext ...}}
+% |mplibgraphictext| is a \metapost operator, the effect of which is similar to that of
+% \ConTeXt's |graphictext| or our own |mpliboutlinetext|
+% (see \hyperlink{mpliboutlinetext}{below}).
+% However the syntax is somewhat different.
+%\begin{verbatim}
% mplibgraphictext "Funny"
% fakebold 2.3 % fontspec option
% drawcolor .7blue fillcolor "red!50" % color expressions
-% \end{verbatim}
+%\end{verbatim}
% |fakebold|, |drawcolor| and |fillcolor| are optional;
% default values are |2|, |"black"| and |"white"| respectively.
-% When color expressions are given as string, they are regarded as
-% xcolor's or l3color's expressions (this is the same with shading colors).
-% From v2.30, |scale| option is deprecated and is now a synonym of |scaled|.
+% When the color expressions are given in string type, they are regarded as
+% \pkg{color}, \pkg{xcolor} or \pkg{l3color}'s expressions.
% All from |mplibgraphictext| to the end of sentence will compose an
% anonymous |picture|, which can be drawn or assigned to a variable.
% Incidentally, |withdrawcolor| and |withfillcolor| are synonyms of
% |drawcolor| and |fillcolor|, hopefully to be compatible with |graphictext|.
-% \textsc{n.b.} Because luamplib's current implementation is quite different
-% from the \ConTeXt's, there are some limitations such that you can't
-% apply shading (gradient colors) to the text (But see below).
-% In DVI mode, |unicode-math| package is needed for math formula graphictext,
+%
+% \textsc{n.b.}
+% In some cases, |mplibgraphictext| will produce better results than \ConTeXt\
+% or even than our own |mpliboutlinetext|,
+% especially when processing complicated \TeX\ code
+% such as the vertical writing in Chinese or Japanese.
+% However, because the implementation is quite different from others,
+% there are some limitations such that you can't
+% apply shading (gradient colors) to the text. Again,
+% in DVI mode, \pkg{unicode-math} package is needed for math formula,
% as we cannot embolden type1 fonts in DVI mode.
%
-% \paragraph{\texttt{mplibglyph}, \texttt{mplibdrawglyph}}
-% From v2.30, we provide a new metapost operator |mplibglyph|, which returns a metapost picture
+% \paragraph{\texttt{mplibglyph ... of ...}}
+% From v2.30, we provide a new \metapost operator |mplibglyph|, which returns a \metapost picture
% containing outline paths of a glyph in opentype, truetype or type1 fonts.
-% When a type1 font is specified, metapost primitive |glyph| will be called.
-% \begin{verbatim}
+% When a type1 font is specified, \metapost primitive |glyph| will be called.
+%\begin{verbatim}
% mplibglyph 50 of \fontid\font % slot 50 of current font
% mplibglyph "Q" of "TU/TeXGyrePagella(0)/m/n/10" % font csname
% mplibglyph "Q" of "texgyrepagella-regular.otf" % raw filename
% mplibglyph "Q" of "Times.ttc(2)" % subfont number
% mplibglyph "Q" of "SourceHanSansK-VF.otf[Regular]" % instance name
-% \end{verbatim}
+%\end{verbatim}
% Both arguments before and after of ``|of|'' can be either a number or a string.
% Number arguments are regarded as a glyph slot (GID) and a font id number, repectively.
% String argument at the left side is regarded as a glyph name in the font or a unicode character.
@@ -518,76 +603,108 @@ See source file '\inFileName' for licencing and contact information.
% subfont number (starting from zero) of a TTC font; a string within brackets denotes
% an instance name of a variable font.
%
-% The returned picture will be quite similar to the result of |glyph| primitive in its structure.
-% So, metapost's |draw| command will fill the inner path of the picture with background color.
-% In contrast, |mplibdrawglyph| command fills the paths according to the Nonzero Winding
-% Number Rule. As a result, for instance, the area surrounded by inner path of ``O''
+% \paragraph{\texttt{mplibdrawglyph ...}}
+% The picture returned by |mplibglyph| will be quite similar to the result of |glyph| primitive in its structure.
+% So, \metapost's |draw| command will fill the inner path of the picture with the background color.
+% In contrast, |mplibdrawglyph| \emph{<picture>} command fills the paths according to the nonzero winding
+% number rule. As a result, for instance, the area surrounded by inner path of ``O''
% will remain transparent.
%
-% \paragraph{\texttt{mpliboutlinetext}}
-% From v2.31, we provide a new metapost operator |mpliboutlinetext|, which mimicks
-% metafun's |outlinetext|. So the syntax is the same as metafun's. See the metafun
-% manual \textsection\,8.7 (|texdoc metafun|). A simple example:
-% \begin{verbatim}
+% \leavevmode\llap{\textcolor{red}{☞}\kern1.2\parindent}\relax
+% To apply the nonzero winding number rule to a picture containing paths,
+% luamplib appends |withpostscript| |"collect"|
+% to the paths except the last one in the picture.
+% If you want the even-odd rule instead, you can, with \emph{plain} format as well,
+% additionally declare |withpostscript| |"evenodd"| to the last path in the picture.
+%
+% \paragraph{\texttt{mpliboutlinetext (...)}}
+% \hypertarget{mpliboutlinetext}{}\relax
+% From v2.31, a new \metapost operator |mpliboutlinetext| is available, which mimicks
+% \emph{metafun}'s |outlinetext|. So the syntax is the same: see the \emph{metafun}
+% manual \S\,8.7 (|texdoc metafun|). A simple example:
+%\begin{verbatim}
% draw mpliboutlinetext.b ("$\sqrt{2+\alpha}$")
% (withcolor \mpcolor{red!50})
% (withpen pencircle scaled .2 withcolor red)
% scaled 2 ;
-% \end{verbatim}
-% After the process of |mpliboutlinetext|, |mpliboutlinepic[]|
+%\end{verbatim}
+% After the process, |mpliboutlinepic[]|
% and |mpliboutlinenum| will be preserved as global variables;
% |mpliboutlinepic[1]| \ldots{} |mpliboutlinepic[mpliboutlinenum]|
% will be an array of images each of which containing a glyph or a rule.
+%
% \textsc{n.b.} As Unicode grapheme cluster is not considered in the array, a unit that must be
% a single cluster might be separated apart.
%
-% \paragraph{\cs{mppattern} \ldots\ \cs{endmppattern}, \texttt{withpattern}}
-% |\mppattern{<name>}| \ldots\ |\endmppattern| defines a tiling pattern
+% \paragraph{\cs{mppattern\{...\} ...} \cs{endmppattern}, \texttt{... withpattern ...}}
+% \hypertarget{mppattern}{}\relax
+% \TeX\ macros
+% \cs{mppattern\{<name>\}} |...| \cs{endmppattern} define a tiling pattern
% associated with the |<name>|.
-% MetaPost operator |withpattern|, the syntax being
-% \textit{path} |withpattern| \textit{string}, will return a metapost picture which fills
-% the given path with a tiling pattern of the |<name>|.
-% \begin{verbatim}
-% \mppattern{mypatt} % or \begin{mppattern}{mypatt}
-% [ % options: see below
-% xstep = 10, ystep = 12,
-% matrix = {0,1,-1,0}, % or "0 1 -1 0"
-% ]
-% \mpfig % or any other TeX code,
-% picture q;
-% q := btex Q etex;
-% fill bbox q withcolor .8[red,white];
-% draw q withcolor .8red;
-% \endmpfig
-% \endmppattern % or \end{mppattern}
+% \metapost operator |withpattern|, the syntax being
+% \emph{<path>}\textbar\emph{<textual picture>} |withpattern| \emph{<string>},
+% will return a \metapost picture which fills
+% the given path or text with a tiling pattern of the |<name>|
+% by replicating it horizontally and vertically.
+% The \emph{textual picture} here means any text typeset by \TeX, normally the result
+% of the |btex| command (though technically this is not a true textual picture)
+% or the |infont| operator.
%
-% \mpfig
-% fill fullcircle scaled 100 withpostscript "collect";
-% draw unitsquare shifted - center unitsquare scaled 45
-% withpattern "mypatt"
-% withpostscript "evenodd" ;
-% \endmpfig
-% \end{verbatim}
-% The available options are:
-% \begin{center}
+% An example:
+%\begin{verbatim}
+% \mppattern{mypatt} % or \begin{mppattern}{mypatt}
+% [ % options: see below
+% xstep = 10,
+% ystep = 12,
+% matrix = {0, 1, -1, 0}, % or "0 1 -1 0"
+% ]
+% \mpfig % or any other TeX code,
+% draw (origin--(1,1))
+% scaled 10
+% withcolor 1/3[blue,white]
+% ;
+% draw (up--right)
+% scaled 10
+% withcolor 1/3[red,white]
+% ;
+% \endmpfig
+% \endmppattern % or \end{mppattern}
+%
+% \mpfig
+% draw fullcircle scaled 90
+% withpostscript "collect"
+% ;
+% draw fullcircle scaled 200
+% withpattern "mypatt"
+% withpen pencircle scaled 1
+% withcolor \mpcolor{red!50!blue!50}
+% withpostscript "evenodd"
+% ;
+% \endmpfig
+%\end{verbatim}
+%
+% The available options are listed in Table~\ref{tab:mppatternoptions}.
+% \begin{table}
+% \centering
+% \caption{options for \cs{mppattern}}\label{tab:mppatternoptions}
% \begin{tabular}{lll}\hline
% Key & Value Type & Explanation\\\hline
-% |xstep| &\textit{number} & horizontal spacing between pattern cells\\
-% |ystep| &\textit{number} & vertical spacing between pattern cells\\
-% |xshift| &\textit{number} & horizontal shifting of pattern cells\\
-% |yshift| &\textit{number} & vertical shifting of pattern cells\\
-% |matrix| &\textit{table} or \textit{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt* or MP transform code\\
-% |bbox| &\textit{table} or \textit{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\
-% |resources|&\textit{string} & PDF resources if needed\\
-% |colored| or |coloured| &\textit{boolean}& |false| for uncolored pattern. default: |true|\\\hline
+% |xstep| &\emph{number} & horizontal spacing between pattern cells\\
+% |ystep| &\emph{number} & vertical spacing between pattern cells\\
+% |xshift| &\emph{number} & horizontal shifting of pattern cells\\
+% |yshift| &\emph{number} & vertical shifting of pattern cells\\
+% |matrix| &\emph{table} or \emph{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt* or MP transform code\\
+% |bbox| &\emph{table} or \emph{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\
+% |resources|&\emph{string} & PDF resources if needed\\
+% |colored| or |coloured| &\emph{boolean}& |false| for uncolored pattern. default: |true|\\\hline
% & & \small *\,in string type, numbers are separated by spaces\\
% \end{tabular}
-% \end{center}
+% \end{table}
%
-% For the sake of convenience, width and height values of tiling patterns will be written down
+% For the sake of convenience, the width and height values of tiling patterns will be written down
% into the log file. (depth is always zero.) Users can refer to them for option setting.
%
-% As for |matrix| option, metapost code such as `|rotated 30 slanted .2|' is allowed as well
+% As for |matrix| option, \metapost code such as `|rotated 30 slanted .2|' is allowed as well
% as string or table of four numbers. You can also set |xshift| and |yshift|
% values by using `|shifted|' operator. But when |xshift| or |yshift| option is explicitly
% given, they have precedence over the effect of `|shifted|' operator.
@@ -598,45 +715,239 @@ See source file '\inFileName' for licencing and contact information.
% is not needed in most cases.
%
% Option |colored=false| (|coloured| is a synonym of |colored|) will generate an uncolored pattern which shall have no color at all.
-% Uncolored pattern will be painted later by the color of a metapost object.
+% Uncolored pattern will be painted later by the color of a \metapost object.
% An example:
-% \begin{verbatim}
-% \begin{mppattern}{pattuncolored}
+%\begin{verbatim}
+% \begin{mppattern}{pattnocolor}
% [
% colored = false,
-% matrix = "rotated 30",
+% matrix = "slanted .3 rotated 30",
% ]
% \tiny\TeX
% \end{mppattern}
%
% \begin{mplibcode}
% beginfig(1)
-% picture tex; tex := mpliboutlinetext.p ("\bfseries \TeX");
-% i:=0;
-% for item within tex:
-% i:=i+1;
-% if i < length tex:
-% fill pathpart item scaled 10
-% withpostscript "collect";
-% else:
+% picture tex;
+% tex = mpliboutlinetext.p ("\bfseries \TeX");
+% for i=1 upto mpliboutlinenum:
+% j:=0;
+% for item within mpliboutlinepic[i]:
+% j:=j+1;
% draw pathpart item scaled 10
-% withpattern "pattuncolored"
-% withpen pencircle scaled 0.5
-% withcolor 0.7 blue % paints the pattern
-% ;
-% fi
+% if j < length mpliboutlinepic[i]:
+% withpostscript "collect"
+% else:
+% withpattern "pattnocolor"
+% withpen pencircle scaled 1/2
+% withcolor (i/4)[red,blue] % paints the pattern
+% fi;
+% endfor
% endfor
% endfig;
% \end{mplibcode}
-% \end{verbatim}
+%\end{verbatim}
+% A much simpler and efficient way to obtain a similar result
+% (without colorful characters in this example)
+% is to give a \emph{textual picture} as the operand of |withpattern|:
+%\begin{verbatim}
+% \begin{mplibcode}
+% beginfig(2)
+% picture pic;
+% pic = mplibgraphictext "\bfseries\TeX"
+% fakebold 1/2
+% fillcolor 1/3[red,blue] % paints the pattern
+% drawcolor 2/3[red,blue]
+% scaled 10 ;
+% draw pic withpattern "pattnocolor" ;
+% endfig;
+% \end{mplibcode}
+%\end{verbatim}
+%
+% \paragraph{\texttt{... withfademethod ...}}
+% This is a \metapost operator which makes the color of an object gradiently transparent.
+% The syntax is \emph{<path>}\texttt{\textbar}\emph{<picture>} |withfademethod| \emph{<string>},
+% the latter being either |"linear"| or |"circular"|.
+% Though it is similar to the |withshademethod| from \emph{metafun},
+% the differences are: (1) the operand of |withfademethod| can be a picture as well as a path;
+% (2) you cannot make gradient colors, but can only make gradient opacity.
+%
+% Related macros to control optional values are:
+% \begin{description}
+% \let\bfseries\relax
+% \item [|withfadeopacity (|\emph{number, number}|)|]
+% sets the starting opacity and the ending opacity, default value being |(1,0)|.
+% `|1|' denotes full color; `|0|' full transparency.
+% \item [|withfadevector (|\emph{pair, pair}|)|]
+% sets the starting and ending points. Default value in the linear mode is
+% |(llcorner p, lrcorner p)|, where |p| is the operand,
+% meaning that fading starts from the left edge and ends at the right edge.
+% Default value in the circular mode is |(center p, center p)|, which means
+% centers of both starting and ending circles are the center of the bounding box.
+% \item [|withfadecenter|] is a synonym of |withfadevector|.
+% \item [|withfaderadius (|\emph{number, number}|)|]
+% sets the radii of starting and ending circles. This is no-op in the linear mode.
+% Default value is |(0, abs(center p - urcorner p))|, meaning that fading starts from the
+% center and ends at the four corners of the bounding box.
+% \item [|withfadebbox (|\emph{pair, pair}|)|]
+% sets the bounding box of the fading area, default value being |(llcorner p, urcorner p)|.
+% Though this option is not needed in most cases, there could be cases when users want to
+% explicitly control the bounding box.
+% \end{description}
+% An example:
+%\begin{verbatim}
+% \mpfig
+% picture mill;
+% mill = btex \includegraphics[width=100bp]{mill} etex;
+% draw mill
+% withfademethod "circular"
+% withfadecenter (center mill, center mill)
+% withfaderadius (20, 50)
+% withfadeopacity (1, 0)
+% ;
+% \endmpfig
+%\end{verbatim}
+%
+% \paragraph{\texttt{... asgroup ...}}
+% \hypertarget{transparencygroup}{}\relax
+% As said \hyperlink{metafunformat}{before},
+% transparency group is available with \emph{plain} as well as \emph{metafun} format.
+% The syntax is exactly the same:
+% \emph{<picture>} \textbar\ \emph{<path>} |asgroup|
+% |""| \textbar\ |"isolated"| \textbar\ |"knockout"| \textbar\ |"isolated,knockout"|,
+% which will return a \metapost picture.
+% It is called \emph{Transparency Group} because the objects contained in the group are composited
+% to produce a single object, so that outer transparency effect, if any,
+% will be applied to the group as a whole, not to the individual objects cumulatively.
+%
+% The additional feature provided by luamplib is that
+% you can reuse the group as many times as you want
+% in the \TeX{} code or in other \metapost code chunks,
+% with infinitesimal increase in the size of PDF file.
+% For this functionality we provide \TeX{} and \metapost macros as follows:
+% \begin{description}
+% \let\bfseries\relax
+% \item[|withgroupname| \emph{<string>}] associates a transparency group with the given name.
+% When this is not appended to the sentense with |asgroup| operator,
+% the default group name `|lastmplibgroup|' will be used.
+%
+% \item[\cs{usemplibgroup\{...\}}]
+% \hypertarget{usemplibgroup}{}\relax
+% is a \TeX\ command to reuse a transparency group of the name
+% once used.
+% Note that the position of the group will be origin-based:
+% in other words, lower-left corner of the group will be shifted to the origin.
+%
+% \item[|usemplibgroup| \emph{<string>}] is a \metapost command which will add
+% a transparency group of the name to the |currentpicture|.
+% Contrary to the \TeX\ command just mentioned,
+% the position of the group is the same as the original transparency group.
+% \end{description}
+% An example showing the difference between the \TeX\ and \metapost commands:
+%\begin{verbatim}
+% \mpfig
+% draw image(
+% fill fullcircle scaled 100 shifted 25right withcolor .5[blue,white];
+% fill fullcircle scaled 100 withcolor .5[red,white] ;
+% ) asgroup "" withgroupname "mygroup";
+% draw (left--right) scaled 10;
+% draw (up--down) scaled 10;
+% \endmpfig
+%
+% \noindent
+% \clap{\vrule width 20pt height .25pt depth .25pt}%
+% \clap{\vrule width .5pt height 10pt depth 10pt}%
+% \usemplibgroup{mygroup}
+%
+% \mpfig
+% usemplibgroup "mygroup" rotated 15;
+% draw (left--right) scaled 10;
+% draw (up--down) scaled 10;
+% \endmpfig
+%\end{verbatim}
+%
+% Also note that normally the reused transparency groups are not affected by outer color commands.
+% However, if you have made the original transparency group using |withoutcolor| command,
+% colors will have effects on the uncolored objects in the group.
+%
+% \paragraph{\cs{mplibgroup\{...\} ...} \cs{endmplibgroup}}
+% These \TeX\ macros are described here in this subsection, as they are
+% deeply related to the |asgroup| operator.
+% Users can define a transparency group or a normal \emph{form XObject}
+% with these macros from \TeX\ side.
+% The syntax is similar to the \cs{mppattern} command (see \hyperlink{mppattern}{above}).
+% An example:
+%\begin{verbatim}
+% \mplibgroup{mygrx} % or \begin{mplibgroup}{mygrx}
+% [ % options: see below
+% asgroup="",
+% ]
+% \mpfig % or any other TeX code
+% draw (left--right) scaled 30 rotated 45 withpen pencircle scaled 10;
+% draw (left--right) scaled 30 rotated -45 withpen pencircle scaled 10;
+% \endmpfig
+% \endmplibgroup % or \end{mplibgroup}
+%
+% \usemplibgroup{mygrx}
+%
+% \mpfig
+% usemplibgroup "mygrx" scaled 1.5 withprescript "tr_transparency=0.5";
+% \endmpfig
+%\end{verbatim}
+% Availabe options, much fewer than those for \cs{mppattern},
+% are listed in Table~\ref{tab:mplibgroupoptions}.
+% \begin{table}
+% \centering
+% \caption{options for \cs{mplibgroup}}\label{tab:mplibgroupoptions}
+% \begin{tabular}{lll}
+% \hline
+% Key & Value Type & Explanation\\
+% \hline
+% |asgroup| &\emph{string} & |""|, |"isolated"|, |"knockout"|, or |"isolated,knockout"|\\
+% |bbox| &\emph{table} or \emph{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\
+% |matrix| &\emph{table} or \emph{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt*
+% or MP transform code\\
+% |resources| &\emph{string} & PDF resources if needed\\
+% \hline
+% & & \small *\,in string type, numbers are separated by spaces\\
+% \end{tabular}
+% \end{table}
+%
+% When |asgroup| option, including empty string, is not given,
+% a normal form XObject will be generated rather than a transparency group.
+% Thus the individual objects, not the XObject as a whole, will be affected
+% by outer transparency command.
+%
+% As shown in the example, you can reuse the transparency group or the normal form XObject
+% once defined
+% using the \TeX\ command \cs{usemplibgroup} or
+% the \metapost command |usemplibgroup|.
+% The behavior of these commands is the same as that described \hyperlink{usemplibgroup}{above}.
+%
+%
+% \subsection{Lua}
+%
+% \paragraph{\texttt{runscript ...}}
+% Using the primitive |runscript| \emph{<string>}, you can run a Lua code chunk from \metapost side
+% and get some \metapost code returned by Lua if you want.
+% As the functionality is provided by the \mplib library itself,
+% luamplib does not have much to say about it.
+%
+% One thing is worth mentioning, however:
+% if you return a Lua \emph{table} to the \metapost process,
+% it is automatically converted to a relevant \metapost value type
+% such as pair, color, cmykcolor or transform.
+% So users can save some extra toil of converting a table to a string, though it's not a big deal.
+% For instance, |runscript "return {1,0,0}"| will give you the \metapost color expression |(1,0,0)|
+% automatically.
%
% \paragraph{Lua table \texttt{luamplib.instances}}
-% Users can access the Lua table containing mplib instances, |luamplib.instances|,
-% through which metapost variables are also easily accessible
-% as documented in Lua\TeX{} manual \textsection\,11.2.8.4 (|texdoc luatex|).
+% Users can access the Lua table containing \mplib instances, |luamplib.instances|,
+% through which \metapost variables are also easily accessible from Lua side,
+% as documented in Lua\TeX{} manual \S\,11.2.8.4 (|texdoc luatex|).
% The following will print |false|, |3.0|, |MetaPost| and
-% the points and the cyclicity of the path |unitsquare|, consecutively.
-% \begin{verbatim}
+% the knots and the cyclicity of the path |unitsquare|, consecutively.
+%\begin{verbatim}
% \begin{mplibcode}[instance1]
% boolean b; b = 1 > 2;
% numeric n; n = 3;
@@ -646,37 +957,46 @@ See source file '\inFileName' for licencing and contact information.
%
% \directlua{
% local instance1 = luamplib.instances.instance1
-% print( instance1:get_boolean"b" )
-% print( instance1:get_number"n" )
-% print( instance1:get_string"s" )
-% local t = instance1:get_path"p"
+% print( instance1:get_boolean "b" )
+% print( instance1:get_number "n" )
+% print( instance1:get_string "s" )
+% local t = instance1:get_path "p"
% for k,v in pairs(t) do
% print(k, type(v)=='table' and table.concat(v,' ') or v)
% end
% }
-% \end{verbatim}
-% In this way, it would not be difficult to define a paragraph shape
-% (using \cs{parshape} \TeX\ primitive) which follows an arbitrary metapost path.
-%
-% \paragraph{About figure box metrics}
-% Notice that, after each figure is processed, macro \cs{MPwidth} stores
-% the width value of latest figure; \cs{MPheight}, the height value.
-% Incidentally, also note that \cs{MPllx}, \cs{MPlly}, \cs{MPurx}, and
-% \cs{MPury} store the bounding box information of latest figure
-% without the unit |bp|.
-%
-% \paragraph{luamplib.cfg}
-% At the end of package loading, \textsf{luamplib} searches
-% |luamplib.cfg| and, if found, reads the file in automatically.
-% Frequently used settings such as \cs{everymplib}, \cs{mplibforcehmode}
-% or \cs{mplibcodeinherit} are suitable for going into this file.
-%
-% \bigskip
+%\end{verbatim}
+%
+% \paragraph{Lua function \texttt{luamplib.process\_mplibcode}}
+% Users can execute a \metapost code chunk from Lua side by using this function:
+%\begin{verbatim}
+% luamplib.process_mplibcode (<string> metapost code, <string> instance name)
+%\end{verbatim}
+% The second argument cannot be absent, but can be an empty string (|""|) which
+% means that it has no instance name.
+%
+% Some other elements in the |luamplib| namespace, listed in Table~\ref{tab:elementsinluamplib},
+% can have effects on the process of |process_mplibcode|.
+% \begin{table}
+% \centering
+% \caption{elements in \texttt{luamplib} table (partial)}\label{tab:elementsinluamplib}
+% \begin{tabular}{lll}\hline
+% Key & Type & Related \TeX\ macro \\\hline
+% |codeinherit| & \emph{boolean} & \cs{mplibcodeinherit}\\
+% |everyendmplib| & \emph{table} & \cs{everyendmplib}\\
+% |everymplib| & \emph{table} & \cs{everymplib}\\
+% |getcachedir| & \emph{function} (\emph{<string>}) & \cs{mplibcachedir}\\
+% |globaltextext| & \emph{boolean} & \cs{mplibglobaltextext}\\
+% |legacyverbatimtex| & \emph{boolean} & \cs{mpliblegacybehavior}\\
+% |noneedtoreplace| & \emph{table} & \cs{mplibmakenocache}\\
+% |numbersystem| & \emph{string} & \cs{mplibnumbersystem}\\
+% |setformat| & \emph{function} (\emph{<string>}) & \cs{mplibsetformat}\\
+% |showlog| & \emph{boolean} & \cs{mplibshowlog}\\
+% |textextlabel| & \emph{boolean} & \cs{mplibtextextlabel}\\
+% |verbatiminput| & \emph{boolean} & \cs{mplibverbatim}\\\hline
+% \end{tabular}
+% \end{table}
%
-% There are (basically) two formats for metapost: \emph{plain} and
-% \emph{metafun}. By default, the \emph{plain} format is used, but you can set
-% the format to be used by future figures at any time using
-% \cs{mplibsetformat}\marg{format name}.
%
% \section{Implementation}
%
@@ -690,14 +1010,14 @@ See source file '\inFileName' for licencing and contact information.
luatexbase.provides_module {
name = "luamplib",
- version = "2.32.4",
- date = "2024/07/03",
+ version = "2.34.4",
+ date = "2024/07/31",
description = "Lua package to typeset Metapost with LuaTeX's MPLib.",
}
% \end{macrocode}
%
-% Use the |luamplib| namespace, since |mplib| is for the metapost library
+% Use the |luamplib| namespace, since |mplib| is for the \metapost library
% itself. \ConTeXt{} uses |metapost|.
% \begin{macrocode}
luamplib = luamplib or { }
@@ -733,7 +1053,6 @@ local function termorlog (target, text, kind)
if kind == "Error" then error() end
end
end
-
local function warn (...) -- beware '%' symbol
termorlog("term and log", select("#",...) > 1 and format(...) or ...)
end
@@ -749,33 +1068,23 @@ luamplib.showlog = luamplib.showlog or false
% \end{macrocode}
%
% This module is a stripped down version of libraries that are used by
-% \ConTeXt. Provide a few ``shortcuts'' expected by the imported code.
+% \ConTeXt. Provide a few ``shortcuts'' expected by the code.
% \begin{macrocode}
local tableconcat = table.concat
local tableinsert = table.insert
+local tableunpack = table.unpack
local texsprint = tex.sprint
local texgettoks = tex.gettoks
local texgetbox = tex.getbox
local texruntoks = tex.runtoks
-% \end{macrocode}
-%
-% We don't use |tex.scantoks| anymore. See below reagrding |tex.runtoks|.
-% \begin{verbatim}
-% local texscantoks = tex.scantoks
-% \end{verbatim}
-% \begin{macrocode}
-
if not texruntoks then
err("Your LuaTeX version is too old. Please upgrade it to the latest")
end
-
local is_defined = token.is_defined
local get_macro = token.get_macro
-
local mplib = require ('mplib')
local kpse = require ('kpse')
local lfs = require ('lfs')
-
local lfsattributes = lfs.attributes
local lfsisdir = lfs.isdir
local lfsmkdir = lfs.mkdir
@@ -791,7 +1100,6 @@ local file = file or { }
local replacesuffix = file.replacesuffix or function(filename, suffix)
return (filename:gsub("%.[%a%d]+$","")) .. "." .. suffix
end
-
local is_writable = file.is_writable or function(name)
if lfsisdir(name) then
name = name .. "/_luam_plib_temp_file_"
@@ -813,14 +1121,11 @@ end
% \end{macrocode}
%
% |btex ... etex| in input |.mp| files will be replaced in finder.
-% Because of the limitation of MPLib regarding |make_text|,
+% Because of the limitation of \mplib regarding |make_text|,
% we might have to make cache files modified from input files.
% \begin{macrocode}
-local luamplibtime = kpse.find_file("luamplib.lua")
-luamplibtime = luamplibtime and lfsattributes(luamplibtime,"modification")
-
+local luamplibtime = lfsattributes(kpse.find_file"luamplib.lua", "modification")
local currenttime = os.time()
-
local outputdir, cachedir
if lfstouch then
for i,v in ipairs{'TEXMFVAR','TEXMF_OUTPUT_DIRECTORY','.','TEXMFOUTPUT'} do
@@ -857,10 +1162,9 @@ function luamplib.getcachedir(dir)
end
end
end
-
% \end{macrocode}
%
-% Some basic MetaPost files not necessary to make cache files.
+% Some basic \metapost files not necessary to make cache files.
% \begin{macrocode}
local noneedtoreplace = {
["boxes.mp"] = true, -- ["format.mp"] = true,
@@ -879,7 +1183,6 @@ local noneedtoreplace = {
["mp-tool.mpiv"] = true, ["mp-cont.mpiv"] = true,
}
luamplib.noneedtoreplace = noneedtoreplace
-
% \end{macrocode}
%
% |format.mp| is much complicated, so specially treated.
@@ -901,7 +1204,6 @@ local function replaceformatmp(file,newfile,ofmodify)
lfstouch(newfile,currenttime,ofmodify)
return newfile
end
-
% \end{macrocode}
%
% Replace |btex ... etex| and |verbatimtex ... etex| in input files,
@@ -911,7 +1213,6 @@ local name_b = "%f[%a_]"
local name_e = "%f[^%a_]"
local btex_etex = name_b.."btex"..name_e.."%s*(.-)%s*"..name_b.."etex"..name_e
local verbatimtex_etex = name_b.."verbatimtex"..name_e.."%s*(.-)%s*"..name_b.."etex"..name_e
-
local function replaceinputmpfile (name,file)
local ofmodify = lfsattributes(file,"modification")
if not ofmodify then return file end
@@ -924,23 +1225,19 @@ local function replaceinputmpfile (name,file)
return nf.size == 0 and file or newfile
end
end
-
if name == "format.mp" then return replaceformatmp(file,newfile,ofmodify) end
-
local fh = ioopen(file,"r")
if not fh then return file end
local data = fh:read("*all"); fh:close()
-
% \end{macrocode}
-% ``|etex|'' must be followed by a space or semicolon as specified in
-% \LuaTeX\ manual, which is not the case of standalone MetaPost though.
+% ``|etex|'' must be preceded by a space and followed by a space or semicolon as specified in
+% \LuaTeX\ manual, which is not the case of standalone \metapost though.
% \begin{macrocode}
local count,cnt = 0,0
data, cnt = data:gsub(btex_etex, "btex %1 etex ") -- space
count = count + cnt
data, cnt = data:gsub(verbatimtex_etex, "verbatimtex %1 etex;") -- semicolon
count = count + cnt
-
if count == 0 then
noneedtoreplace[name] = true
fh = ioopen(newfile,"w");
@@ -950,7 +1247,6 @@ local function replaceinputmpfile (name,file)
end
return file
end
-
fh = ioopen(newfile,"w")
if not fh then return file end
fh:write(data); fh:close()
@@ -960,8 +1256,8 @@ end
% \end{macrocode}
%
-% As the finder function for MPLib, use the |kpse| library and
-% make it behave like as if MetaPost was used. And replace it with
+% As the finder function for \mplib, use the |kpse| library and
+% make it behave like as if \metapost was used. And replace |.mp| files with
% cache files if needed.
% See also \#74, \#97.
% \begin{macrocode}
@@ -973,12 +1269,10 @@ do
end
mpkpse = kpse.new(arg[exe], "mpost")
end
-
local special_ftype = {
pfb = "type1 fonts",
enc = "enc files",
}
-
function luamplib.finder (name, mode, ftype)
if mode == "w" then
if name and name ~= "mpout.log" then
@@ -1004,9 +1298,9 @@ end
% \end{macrocode}
%
-% Create and load MPLib instances.
-% We do not support ancient version of MPLib any more.
-% (Don't know which version of MPLib started to support
+% Create and load \mplib instances.
+% We do not support ancient version of \mplib any more.
+% (Don't know which version of \mplib started to support
% |make_text| and |run_script|; let the users find it.)
% \begin{macrocode}
local preamble = [[
@@ -1015,17 +1309,15 @@ local preamble = [[
let normalfontsize = fontsize;
input %s ;
]]
-
% \end{macrocode}
%
-% |plain| or |metafun|,
-% though we cannot support |metafun| format fully.
+% \emph{plain} or \emph{metafun},
+% though we cannot support \emph{metafun} format fully.
% \begin{macrocode}
local currentformat = "plain"
function luamplib.setformat (name)
currentformat = name
end
-
% \end{macrocode}
%
% v2.9 has introduced the concept of ``code inherit''
@@ -1034,7 +1326,6 @@ luamplib.codeinherit = false
local mplibinstances = {}
luamplib.instances = mplibinstances
local has_instancename = false
-
local function reporterror (result, prevlog)
if not result then
err("no result object returned")
@@ -1061,7 +1352,7 @@ local function reporterror (result, prevlog)
% \end{macrocode}
% v2.6.1: now luamplib does not disregard |show| command,
% even when |luamplib.showlog| is false. Incidentally,
-% it does not raise error but just prints an info,
+% it does not raise error nor prints an info,
% even if output has no figure.
% \begin{macrocode}
local show = log:match"\n>>? .+"
@@ -1075,11 +1366,10 @@ local function reporterror (result, prevlog)
return log
end
end
-
% \end{macrocode}
%
% |lualibs-os.lua| installs a randomseed. When this file is not loaded,
-% we should explicitly seed a unique interger to get random randomseed for each run.
+% we should explicitly seed a unique integer to get random randomseed for each run.
% \begin{macrocode}
if not math.initialseed then math.randomseed(currenttime) end
local function luamplibload (name)
@@ -1088,10 +1378,8 @@ local function luamplibload (name)
find_file = luamplib.finder,
% \end{macrocode}
% Make use of |make_text| and |run_script|, which will co-operate
-% with \LuaTeX's |tex.runtoks|. And we
-% provide |numbersystem| option since v2.4. Default value ``|scaled|''
-% can be changed by declaring |\mplibnumbersystem{double}|
-% or |\mplibnumbersystem{decimal}|.
+% with \LuaTeX's |tex.runtoks| or other Lua functions. And we
+% provide |numbersystem| option since v2.4.
% See \url{https://github.com/lualatex/luamplib/issues/21}.
% \begin{macrocode}
make_text = luamplib.maketext,
@@ -1102,12 +1390,12 @@ local function luamplibload (name)
extensions = 1,
}
% \end{macrocode}
-% Append our own MetaPost preamble to the preamble above.
+% Append our own \metapost preamble to the preamble above.
% \begin{macrocode}
local preamble = tableconcat{
format(preamble, replacesuffix(name,"mp")),
luamplib.preambles.mplibcode,
- luamplib.legacy_verbatimtex and luamplib.preambles.legacyverbatimtex or "",
+ luamplib.legacyverbatimtex and luamplib.preambles.legacyverbatimtex or "",
luamplib.textextlabel and luamplib.preambles.textextlabel or "",
}
local result, log
@@ -1119,22 +1407,12 @@ local function luamplibload (name)
log = reporterror(result)
return mpx, result, log
end
-
% \end{macrocode}
%
% Here, excute each |mplibcode| data,
% ie |\begin{mplibcode} ... \end{mplibcode}|.
% \begin{macrocode}
local function process (data, instancename)
-% \end{macrocode}
-% The workaround of issue \#70 seems to be unnecessary, as we use
-% |make_text| now.
-% \begin{verbatim}
-% if not data:find(name_b.."beginfig%s*%([%+%-%s]*%d[%.%d%s]*%)") then
-% data = data .. "beginfig(-1);endfig;"
-% end
-% \end{verbatim}
-% \begin{macrocode}
local currfmt
if instancename and instancename ~= "" then
currfmt = instancename
@@ -1144,7 +1422,7 @@ local function process (data, instancename)
currentformat,
luamplib.numbersystem or "scaled",
tostring(luamplib.textextlabel),
- tostring(luamplib.legacy_verbatimtex),
+ tostring(luamplib.legacyverbatimtex),
}
has_instancename = false
end
@@ -1178,40 +1456,30 @@ end
% |dvipdfmx| is supported, though nobody seems to use it.
% \begin{macrocode}
local pdfmode = tex.outputmode > 0
+
% \end{macrocode}
%
-% |make_text| and some |run_script| uses \LuaTeX's |tex.runtoks|,
-% which made possible running \TeX\ code snippets inside |\directlua|.
+% |make_text| and some |run_script| uses \LuaTeX's |tex.runtoks|.
% \begin{macrocode}
local catlatex = luatexbase.registernumber("catcodetable@latex")
local catat11 = luatexbase.registernumber("catcodetable@atletter")
-
% \end{macrocode}
%
% |tex.scantoks| sometimes fail to read catcode properly, especially
% |\#|, |\&|, or |\%|. After some experiment, we dropped using it.
-% Instead, a function containing |tex.script| seems to work nicely.
-% \begin{verbatim}
-% local function run_tex_code_no_use (str, cat)
-% cat = cat or catlatex
-% texscantoks("mplibtmptoks", cat, str)
-% texruntoks("mplibtmptoks")
-% end
-% \end{verbatim}
+% Instead, a function containing |tex.sprint| seems to work nicely.
% \begin{macrocode}
local function run_tex_code (str, cat)
texruntoks(function() texsprint(cat or catlatex, str) end)
end
-
% \end{macrocode}
%
-% Prepare textext box number containers,
-% locals, globals and possibly instances.
+% Prepare textext box number containers, locals and globals.
% |localid| can be any number. They are local anyway.
% The number will be reset at the start of a new code chunk.
% Global boxes will use |\newbox| command in |tex.runtoks| process.
-% This is the same when |codeinherit| is declared as true.
-% Boxes of an instance will also be global, so that
+% This is the same when |codeinherit| is true.
+% Boxes in instances with name will also be global, so that
% their tex boxes can be shared among instances of the same name.
% \begin{macrocode}
local texboxes = { globalid = 0, localid = 4096 }
@@ -1219,11 +1487,9 @@ local texboxes = { globalid = 0, localid = 4096 }
% For conversion of |sp| to |bp|.
% \begin{macrocode}
local factor = 65536*(7227/7200)
-
local textext_fmt = 'image(addto currentpicture doublepath unitsquare \z
-xscaled %f yscaled %f shifted (0,-%f) \z
-withprescript "mplibtexboxid=%i:%f:%f")'
-
+ xscaled %f yscaled %f shifted (0,-%f) \z
+ withprescript "mplibtexboxid=%i:%f:%f")'
local function process_tex_text (str)
if str then
local global = (has_instancename or luamplib.globaltextext or luamplib.codeinherit)
@@ -1253,7 +1519,6 @@ end
% Make |color| or |xcolor|'s color expressions usable,
% with \cs{mpcolor} or |mplibcolor|. These commands should be used
% with graphical objects.
-%
% Attempt to support l3color as well.
% \begin{macrocode}
local mplibcolorfmt = {
@@ -1269,7 +1534,6 @@ local mplibcolorfmt = {
[[\color_select:n%s\endgroup]],
},
}
-
local colfmt = is_defined'color_select:n' and "l3color" or "xcolor"
if colfmt == "l3color" then
run_tex_code{
@@ -1283,7 +1547,6 @@ if colfmt == "l3color" then
}
end
local ccexplat = luatexbase.registernumber"luamplibcctabexplat"
-
local function process_color (str)
if str then
if not str:find("%b{}") then
@@ -1344,20 +1607,18 @@ end
%
% For legacy verbatimtex process.
% |verbatimtex ... etex| before |beginfig()| is not ignored,
-% but the \TeX\ code is inserted just before the mplib box. And
-% \TeX\ code inside |beginfig() ... endfig| is inserted after the mplib box.
+% but the \TeX\ code is inserted just before the \mplib box. And
+% \TeX\ code inside |beginfig() ... endfig| is inserted after the \mplib box.
% \begin{macrocode}
local tex_code_pre_mplib = {}
luamplib.figid = 1
luamplib.in_the_fig = false
-
local function process_verbatimtex_prefig (str)
if str then
tex_code_pre_mplib[luamplib.figid] = str
end
return ""
end
-
local function process_verbatimtex_infig (str)
if str then
return format('special "postmplibverbtex=%s";', str)
@@ -1376,17 +1637,16 @@ local runscript_funcs = {
% \end{macrocode}
%
-% For |metafun| format. see issue \#79.
+% For \emph{metafun} format. see issue \#79.
% \begin{macrocode}
mp = mp or {}
local mp = mp
mp.mf_path_reset = mp.mf_path_reset or function() end
mp.mf_finish_saving_data = mp.mf_finish_saving_data or function() end
mp.report = mp.report or info
-
% \end{macrocode}
%
-% metafun 2021-03-09 changes crashes luamplib.
+% \emph{metafun} 2021-03-09 changes crashes luamplib.
% \begin{macrocode}
catcodes = catcodes or {}
local catcodes = catcodes
@@ -1420,7 +1680,6 @@ local function mpprint(buffer,...)
end
end
end
-
function luamplib.runscript (code)
local id, str = code:match("(.-){(.*)}")
if id and str then
@@ -1442,7 +1701,7 @@ function luamplib.runscript (code)
return buffer
end
buffer = {}
- mpprint(buffer, table.unpack(res))
+ mpprint(buffer, tableunpack(res))
return tableconcat(buffer)
end
return ""
@@ -1459,9 +1718,7 @@ local function protecttexcontents (str)
:gsub("%zPerCent%z", "\\%%")
:gsub("%s+", " ")
end
-
-luamplib.legacy_verbatimtex = true
-
+luamplib.legacyverbatimtex = true
function luamplib.maketext (str, what)
if str and str ~= "" then
str = protecttexcontents(str)
@@ -1470,7 +1727,7 @@ function luamplib.maketext (str, what)
not str:find("\\begin%s*{document}") and
not str:find("\\documentstyle"..name_e) and
not str:find("\\usepackage"..name_e) then
- if luamplib.legacy_verbatimtex then
+ if luamplib.legacyverbatimtex then
if luamplib.in_the_fig then
return process_verbatimtex_infig(str)
else
@@ -1489,13 +1746,13 @@ end
% \end{macrocode}
%
-% luamplib's metapost color operators
+% luamplib's \metapost color operators
% \begin{macrocode}
local function colorsplit (res)
- local t, tt = { }, res:gsub("[%[%]]",""):explode()
+ local t, tt = { }, res:gsub("[%[%]]","",2):explode()
local be = tt[1]:find"^%d" and 1 or 2
for i=be, #tt do
- if tt[i]:find"^%a" then break end
+ if not tonumber(tt[i]) then break end
t[#t+1] = tt[i]
end
return t
@@ -1529,7 +1786,7 @@ luamplib.shadecolor = function (str)
if res:find" cs " or res:find"@pdf.obj" then -- spot color shade: l3 only
% \end{macrocode}
% An example of spot color shading:
-% \begin{verbatim}
+%\begin{verbatim}
% \documentclass{article}
% \usepackage{luamplib}
% \mplibsetformat{metafun}
@@ -1575,29 +1832,63 @@ luamplib.shadecolor = function (str)
% endfig;
% \end{mplibcode}
% \end{document}
-% \end{verbatim}
+%\end{verbatim}
+% another one: user-defined DeviceN colorspace
+%\begin{verbatim}
+% \DocumentMetadata{ }
+% \documentclass{article}
+% \usepackage{luamplib}
+% \mplibsetformat{metafun}
+% \ExplSyntaxOn
+% \color_model_new:nnn { pantone1215 }
+% { Separation }
+% { name = PANTONE~1215~U ,
+% alternative-model = cmyk ,
+% alternative-values = {0, 0.15, 0.51, 0}
+% }
+% \color_model_new:nnn { pantone+black }
+% { DeviceN }
+% {
+% names = {pantone1215,black}
+% }
+% \color_set:nnn{purepantone}{pantone+black}{1,0}
+% \color_set:nnn{pureblack} {pantone+black}{0,1}
+% \ExplSyntaxOff
+% \begin{document}
+% \mpfig
+% fill unitsquare xscaled \mpdim{\textwidth} yscaled 30
+% withshademethod "linear"
+% withshadecolors ("purepantone","pureblack")
+% ;
+% \endmpfig
+% \end{document}
+%\end{verbatim}
% \begin{macrocode}
run_tex_code({
[[\color_export:nnN{]], str, [[}{backend}\mplib_@tempa]],
},ccexplat)
- local name = get_macro'mplib_@tempa':match'{(.-)}{.+}'
+ local name, value = get_macro'mplib_@tempa':match'{(.-)}{(.-)}'
local t, obj = res:explode()
if pdfmode then
obj = format("%s 0 R", ltx.pdf.object_id( t[1]:sub(2,-1) ))
else
obj = t[2]
end
- local value = t[3]:match"%[(.-)%]" or t[3]
- return format('(%s) withprescript"mplib_spotcolor=%s:%s"', value,obj,name)
+ return format('(1) withprescript"mplib_spotcolor=%s:%s:%s"', value,obj,name)
end
return colorsplit(res)
end
% \end{macrocode}
%
+% Remove trailing zeros for smaller PDF
+% \begin{macrocode}
+local function rmzeros(str) return str:gsub("%.?0+$","") end
+
+% \end{macrocode}
+%
% luamplib's mplibgraphictext operator
% \begin{macrocode}
-local running = -1073741824
local emboldenfonts = { }
local function getemboldenwidth (curr, fakebold)
local width = emboldenfonts.width
@@ -1630,13 +1921,14 @@ local function getrulewhatsit (line, wd, ht, dp)
fmt = "pdf:content "..fmt
pl = node.new("whatsit","special")
end
- pl.data = fmt:format(line, 0, -dp, wd, ht+dp, "B")
+ pl.data = fmt:format(line, 0, -dp, wd, ht+dp, "B") :gsub("%.%d+", rmzeros)
local ss = node.new"glue"
node.setglue(ss, 0, 65536, 65536, 2, 2)
pl.next = ss
return pl
end
local function getrulemetric (box, curr, bp)
+ local running = -1073741824
local wd,ht,dp = curr.width, curr.height, curr.depth
wd = wd == running and box.width or wd
ht = ht == running and box.height or ht
@@ -1688,7 +1980,8 @@ local function embolden (box, curr, fakebold)
head, curr = node.remove(head, curr)
elseif curr.id == node.id"glyph" and curr.font > 0 then
local f = curr.font
- local i = emboldenfonts[f]
+ local key = format("%s:%s",f,fakebold)
+ local i = emboldenfonts[key]
if not i then
local ft = font.getfont(f) or font.getcopy(f)
if pdfmode then
@@ -1704,7 +1997,7 @@ local function embolden (box, curr, fakebold)
name = format('%s;embolden=%s;',name,fakebold)
_, i = fonts.constructors.readanddefine(name,ft.size)
end
- emboldenfonts[f] = i
+ emboldenfonts[key] = i
end
curr.font = i
end
@@ -1913,7 +2206,7 @@ end
% mpliboutlinetext : based on mkiv's font-mps.lua
% \begin{macrocode}
local rulefmt = "mpliboutlinepic[%i]:=image(addto currentpicture contour \z
-unitsquare shifted - center unitsquare;) xscaled %f yscaled %f shifted (%f,%f);"
+ unitsquare shifted - center unitsquare;) xscaled %f yscaled %f shifted (%f,%f);"
local outline_horz, outline_vert
function outline_vert (res, box, curr, xshift, yshift)
local b2u = box.dir == "LTL"
@@ -2154,7 +2447,7 @@ end
% \end{macrocode}
%
-% Our MetaPost preambles
+% Our \metapost preambles
% \begin{macrocode}
luamplib.preambles = {
mplibcode = [[
@@ -2339,7 +2632,13 @@ vardef mpliboutlinetext@# (expr t) text rest =
) mplib_do_outline_options_r; )
enddef ;
primarydef t withpattern p =
- image( fill t withprescript "mplibpattern=" & if numeric p: decimal fi p; )
+ image(
+ if cycle t:
+ fill
+ else:
+ draw
+ fi
+ t withprescript "mplibpattern=" & if numeric p: decimal fi p; )
enddef;
vardef mplibtransformmatrix (text e) =
save t; transform t;
@@ -2353,6 +2652,63 @@ vardef mplibtransformmatrix (text e) =
& decimal ypart t & ","
& "}");
enddef;
+primarydef p withfademethod s =
+ if picture p:
+ image(
+ draw p;
+ draw center p withprescript "mplibfadestate=stop";
+ )
+ else:
+ p withprescript "mplibfadestate=stop"
+ fi
+ withprescript "mplibfadetype=" & s
+ withprescript "mplibfadebbox=" &
+ decimal xpart llcorner p & ":" &
+ decimal ypart llcorner p & ":" &
+ decimal xpart urcorner p & ":" &
+ decimal ypart urcorner p
+enddef;
+def withfadeopacity (expr a,b) =
+ withprescript "mplibfadeopacity=" &
+ decimal a & ":" &
+ decimal b
+enddef;
+def withfadevector (expr a,b) =
+ withprescript "mplibfadevector=" &
+ decimal xpart a & ":" &
+ decimal ypart a & ":" &
+ decimal xpart b & ":" &
+ decimal ypart b
+enddef;
+let withfadecenter = withfadevector;
+def withfaderadius (expr a,b) =
+ withprescript "mplibfaderadius=" &
+ decimal a & ":" &
+ decimal b
+enddef;
+def withfadebbox (expr a,b) =
+ withprescript "mplibfadebbox=" &
+ decimal xpart a & ":" &
+ decimal ypart a & ":" &
+ decimal xpart b & ":" &
+ decimal ypart b
+enddef;
+primarydef p asgroup s =
+ image(
+ fill llcorner p--lrcorner p--urcorner p--ulcorner p--cycle
+ withprescript "gr_state=start"
+ withprescript "gr_type=" & s;
+ draw p;
+ draw center p withprescript "gr_state=stop";
+ )
+enddef;
+def withgroupname expr s =
+ withprescript "mplibgroupname=" & s
+enddef;
+def usemplibgroup primary s =
+ draw maketext("\usemplibgroup{" & s & "}")
+ shifted runscript("return luamplib.trgroupshifts['" & s & "']")
+enddef;
]],
legacyverbatimtex = [[
def specialVerbatimTeX (text t) = runscript("luamplibprefig{"&t&"}") enddef;
@@ -2382,7 +2738,6 @@ enddef;
% When \cs{mplibverbatim} is enabled, do not expand |mplibcode| data.
% \begin{macrocode}
luamplib.verbatiminput = false
-
% \end{macrocode}
%
% Do not expand |btex ... etex|, |verbatimtex ... etex|, and
@@ -2398,7 +2753,6 @@ local function protect_expansion (str)
return format("\\unexpanded{%s}",str)
end
end
-
local function unprotect_expansion (str)
if str then
return str:gsub("!!!Control!!!", "\\")
@@ -2408,25 +2762,20 @@ local function unprotect_expansion (str)
:gsub("!!!RBrace!!!", "}")
end
end
-
luamplib.everymplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end })
luamplib.everyendmplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end })
-
function luamplib.process_mplibcode (data, instancename)
texboxes.localid = 4096
-
% \end{macrocode}
% This is needed for legacy behavior
% \begin{macrocode}
- if luamplib.legacy_verbatimtex then
+ if luamplib.legacyverbatimtex then
luamplib.figid, tex_code_pre_mplib = 1, {}
end
-
local everymplib = luamplib.everymplib[instancename]
local everyendmplib = luamplib.everyendmplib[instancename]
data = format("\n%s\n%s\n%s\n",everymplib, data, everyendmplib)
:gsub("\r","\n")
-
% \end{macrocode}
% These five lines are needed for |mplibverbatim| mode.
% \begin{macrocode}
@@ -2466,7 +2815,6 @@ function luamplib.process_mplibcode (data, instancename)
return format("verbatimtex %s etex", unprotect_expansion(str))
end)
end
-
process(data, instancename)
end
@@ -2496,144 +2844,34 @@ end
% \end{macrocode}
%
-% Codes below for inserting PDF lieterals are mostly from ConTeXt general,
-% with small changes when needed.
+% pdfliterals will be stored in |figcontents| table, and written to pdf in one go
+% at the end of the flushing figure.
+% Subtable |post| is for the legacy behavior.
% \begin{macrocode}
-local function getobjects(result,figure,f)
- return figure:objects()
-end
-
-function luamplib.convert (result, flusher)
- luamplib.flush(result, flusher)
- return true -- done
-end
-
local figcontents = { post = { } }
local function put2output(a,...)
figcontents[#figcontents+1] = type(a) == "string" and format(a,...) or a
end
-
local function pdf_startfigure(n,llx,lly,urx,ury)
put2output("\\mplibstarttoPDF{%f}{%f}{%f}{%f}",llx,lly,urx,ury)
end
-
local function pdf_stopfigure()
put2output("\\mplibstoptoPDF")
end
-
% \end{macrocode}
%
% |tex.sprint| with catcode regime -2, as sometimes |#| gets doubled
% in the argument of pdfliteral.
% \begin{macrocode}
-local function pdf_literalcode (fmt,...)
- put2output{-2, format(fmt,...)}
-end
-
-local function pdf_textfigure(font,size,text,width,height,depth)
- text = text:gsub(".",function(c)
- return format("\\hbox{\\char%i}",string.byte(c)) -- kerning happens in metapost : false
- end)
- put2output("\\mplibtextext{%s}{%f}{%s}{%s}{%s}",font,size,text,0,0)
-end
-
-local bend_tolerance = 131/65536
-
-local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1
-
-local function pen_characteristics(object)
- local t = mplib.pen_info(object)
- rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty
- divider = sx*sy - rx*ry
- return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width
-end
-
-local function concat(px, py) -- no tx, ty here
- return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider
-end
-
-local function curved(ith,pth)
- local d = pth.left_x - ith.right_x
- if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then
- d = pth.left_y - ith.right_y
- if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then
- return false
- end
- end
- return true
-end
-
-local function flushnormalpath(path,open)
- local pth, ith
- for i=1,#path do
- pth = path[i]
- if not ith then
- pdf_literalcode("%f %f m",pth.x_coord,pth.y_coord)
- elseif curved(ith,pth) then
- pdf_literalcode("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord)
- else
- pdf_literalcode("%f %f l",pth.x_coord,pth.y_coord)
- end
- ith = pth
- end
- if not open then
- local one = path[1]
- if curved(pth,one) then
- pdf_literalcode("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord )
- else
- pdf_literalcode("%f %f l",one.x_coord,one.y_coord)
- end
- elseif #path == 1 then -- special case .. draw point
- local one = path[1]
- pdf_literalcode("%f %f l",one.x_coord,one.y_coord)
- end
-end
-
-local function flushconcatpath(path,open)
- pdf_literalcode("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty)
- local pth, ith
- for i=1,#path do
- pth = path[i]
- if not ith then
- pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord))
- elseif curved(ith,pth) then
- local a, b = concat(ith.right_x,ith.right_y)
- local c, d = concat(pth.left_x,pth.left_y)
- pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord))
- else
- pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord))
- end
- ith = pth
- end
- if not open then
- local one = path[1]
- if curved(pth,one) then
- local a, b = concat(pth.right_x,pth.right_y)
- local c, d = concat(one.left_x,one.left_y)
- pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord))
- else
- pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
- end
- elseif #path == 1 then -- special case .. draw point
- local one = path[1]
- pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
- end
-end
-
-local function start_pdf_code()
- if pdfmode then
- pdf_literalcode("q")
- else
- put2output"\\special{pdf:bcontent}"
- end
-end
-local function stop_pdf_code()
- if pdfmode then
- pdf_literalcode("Q")
- else
- put2output"\\special{pdf:econtent}"
- end
+local function pdf_literalcode (...)
+ put2output{ -2, format(...) :gsub("%.%d+", rmzeros) }
end
+local start_pdf_code = pdfmode
+ and function() pdf_literalcode"q" end
+ or function() put2output"\\special{pdf:bcontent}" end
+local stop_pdf_code = pdfmode
+ and function() pdf_literalcode"Q" end
+ or function() put2output"\\special{pdf:econtent}" end
% \end{macrocode}
%
@@ -2705,23 +2943,32 @@ local pdfobjs, pdfetcs = {}, {}
pdfetcs.pgfextgs = "pgf@sys@addpdfresource@extgs@plain"
pdfetcs.pgfpattern = "pgf@sys@addpdfresource@patterns@plain"
pdfetcs.pgfcolorspace = "pgf@sys@addpdfresource@colorspaces@plain"
-
-local function update_pdfobjs (os)
- local on = pdfobjs[os]
+local function update_pdfobjs (os, stream)
+ local key = os
+ if stream then key = key..stream end
+ local on = pdfobjs[key]
if on then
return on,false
end
if pdfmode then
- on = pdf.immediateobj(os)
+ if stream then
+ on = pdf.immediateobj("stream",stream,os)
+ else
+ on = pdf.immediateobj(os)
+ end
else
on = pdfetcs.cnt or 1
- texsprint(format("\\special{pdf:obj @mplibpdfobj%s %s}",on,os))
+ if stream then
+ texsprint(format("\\special{pdf:stream @mplibpdfobj%s (%s) <<%s>>}",on,stream,os))
+ else
+ texsprint(format("\\special{pdf:obj @mplibpdfobj%s %s}",on,os))
+ end
pdfetcs.cnt = on + 1
end
- pdfobjs[os] = on
+ pdfobjs[key] = on
return on,true
end
-
+pdfetcs.resfmt = pdfmode and "%s 0 R" or "@mplibpdfobj%s"
if pdfmode then
pdfetcs.getpageres = pdf.getpageresources or function() return pdf.pageresources end
local getpageres = pdfetcs.getpageres
@@ -2757,11 +3004,20 @@ if pdfmode then
end
else
texsprint {
+ "\\luamplibatfirstshipout{",
"\\special{pdf:obj @MPlibTr<<>>}",
"\\special{pdf:obj @MPlibSh<<>>}",
"\\special{pdf:obj @MPlibCS<<>>}",
- "\\special{pdf:obj @MPlibPt<<>>}",
+ "\\special{pdf:obj @MPlibPt<<>>}}",
}
+ pdfetcs.resadded = { }
+ pdfetcs.fallback_update_resources = function (name,res,obj)
+ texsprint{"\\special{pdf:put ", obj, " <<", res, ">>}"}
+ if not pdfetcs.resadded[name] then
+ texsprint{"\\luamplibateveryshipout{\\special{pdf:put @resources <</", name, " ", obj, ">>}}"}
+ pdfetcs.resadded[name] = obj
+ end
+ end
end
% \end{macrocode}
@@ -2775,13 +3031,10 @@ local transparancy_modes = { [0] = "Normal",
"Hue", "Saturation", "Color", "Luminosity",
"Compatible",
}
-
-local function update_tr_res(mode,opaq)
- local os = format("<</BM /%s/ca %.3f/CA %.3f/AIS false>>",mode,opaq,opaq)
- local on, new = update_pdfobjs(os)
+local function add_extgs_resources (on, new)
+ local key = format("MPlibTr%s", on)
if new then
- local key = format("MPlibTr%s", on)
- local val = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s", on)
+ local val = format(pdfetcs.resfmt, on)
if pdfmanagement then
texsprint {
"\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/ExtGState}{", key, "}{", val, "}"
@@ -2790,51 +3043,50 @@ local function update_tr_res(mode,opaq)
local tr = format("/%s %s", key, val)
if is_defined(pdfetcs.pgfextgs) then
texsprint { "\\csname ", pdfetcs.pgfextgs, "\\endcsname{", tr, "}" }
- elseif pdfmode then
- if is_defined"TRP@list" then
- texsprint(catat11,{
- [[\if@filesw\immediate\write\@auxout{]],
- [[\string\g@addto@macro\string\TRP@list{]],
- tr,
- [[}}\fi]],
- })
- if not get_macro"TRP@list":find(tr) then
- texsprint(catat11,[[\global\TRP@reruntrue]])
- end
- else
- pdfetcs.fallback_update_resources("ExtGState", tr)
+ elseif is_defined"TRP@list" then
+ texsprint(catat11,{
+ [[\if@filesw\immediate\write\@auxout{]],
+ [[\string\g@addto@macro\string\TRP@list{]],
+ tr,
+ [[}}\fi]],
+ })
+ if not get_macro"TRP@list":find(tr) then
+ texsprint(catat11,[[\global\TRP@reruntrue]])
end
else
- texsprint { "\\special{pdf:put @MPlibTr<<", tr, ">>}" }
+ pdfetcs.fallback_update_resources("ExtGState",tr,"@MPlibTr")
end
end
end
- if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfextgs) then
- texsprint"\\special{pdf:put @resources <</ExtGState @MPlibTr>>}"
- end
- return on
+ return key
end
-
local function do_preobj_TR(object,prescript)
if object.postscript == "collect" then return end
local opaq = prescript and prescript.tr_transparency
- local tron_no
if opaq then
+ local key, on, os, new
local mode = prescript.tr_alternative or 1
- mode = transparancy_modes[tonumber(mode)]
- tron_no = update_tr_res(mode, opaq)
- start_pdf_code()
- pdf_literalcode("/MPlibTr%i gs",tron_no)
+ mode = transparancy_modes[tonumber(mode)] or mode
+ for i,v in ipairs{ {mode,opaq},{"Normal",1} } do
+ mode, opaq = v[1], v[2]
+ os = format("<</BM/%s/ca %.3f/CA %.3f/AIS false>>",mode,opaq,opaq) :gsub("%.%d+", rmzeros)
+ on, new = update_pdfobjs(os)
+ key = add_extgs_resources(on,new)
+ if i == 1 then
+ pdf_literalcode("/%s gs",key)
+ else
+ return format("/%s gs",key)
+ end
+ end
end
- return tron_no
end
% \end{macrocode}
%
-% Shading with |metafun| format.
+% Shading with \emph{metafun} format.
% \begin{macrocode}
local function sh_pdfpageresources(shtype,domain,colorspace,ca,cb,coordinates,steps,fractions)
- local fun2fmt,os = "<</FunctionType 2/Domain [%s]/C0 [%s]/C1 [%s]/N 1>>"
+ local fun2fmt,os = "<</FunctionType 2/Domain[%s]/C0[%s]/C1[%s]/N 1>>"
if steps > 1 then
local list,bounds,encode = { },{ },{ }
for i=1,steps do
@@ -2844,49 +3096,40 @@ local function sh_pdfpageresources(shtype,domain,colorspace,ca,cb,coordinates,st
encode[2*i-1] = 0
encode[2*i] = 1
os = fun2fmt:format(domain,tableconcat(ca[i],' '),tableconcat(cb[i],' '))
- list[i] = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s",update_pdfobjs(os))
+ list[i] = format(pdfetcs.resfmt, update_pdfobjs(os))
end
os = tableconcat {
"<</FunctionType 3",
- format("/Bounds [%s]", tableconcat(bounds,' ')),
- format("/Encode [%s]", tableconcat(encode,' ')),
- format("/Functions [%s]", tableconcat(list, ' ')),
- format("/Domain [%s]>>", domain),
+ format("/Bounds[%s]", tableconcat(bounds,' ')),
+ format("/Encode[%s]", tableconcat(encode,' ')),
+ format("/Functions[%s]", tableconcat(list, ' ')),
+ format("/Domain[%s]>>", domain),
}
else
os = fun2fmt:format(domain,tableconcat(ca[1],' '),tableconcat(cb[1],' '))
end
- local objref = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s",update_pdfobjs(os))
+ local objref = format(pdfetcs.resfmt, update_pdfobjs(os))
os = tableconcat {
format("<</ShadingType %i", shtype),
format("/ColorSpace %s", colorspace),
format("/Function %s", objref),
- format("/Coords [%s]", coordinates),
- "/Extend [true true]/AntiAlias true>>",
+ format("/Coords[%s]", coordinates :gsub("%.%d+", rmzeros)),
+ "/Extend[true true]/AntiAlias true>>",
}
local on, new = update_pdfobjs(os)
if new then
- local key = format("MPlibSh%s", on)
- local val = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s", on)
+ local key, val = format("MPlibSh%s", on), format(pdfetcs.resfmt, on)
if pdfmanagement then
texsprint {
"\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/Shading}{", key, "}{", val, "}"
}
else
local res = format("/%s %s", key, val)
- if pdfmode then
- pdfetcs.fallback_update_resources("Shading", res)
- else
- texsprint { "\\special{pdf:put @MPlibSh<<", res, ">>}" }
- end
+ pdfetcs.fallback_update_resources("Shading",res,"@MPlibSh")
end
end
- if not pdfmode and not pdfmanagement then
- texsprint"\\special{pdf:put @resources <</Shading @MPlibSh>>}"
- end
return on
end
-
local function color_normalize(ca,cb)
if #cb == 1 then
if #ca == 4 then
@@ -2898,7 +3141,6 @@ local function color_normalize(ca,cb)
cb[1], cb[2], cb[3], cb[4] = 1-cb[1], 1-cb[2], 1-cb[3], 0
end
end
-
pdfetcs.clrspcs = setmetatable({ }, { __index = function(t,names)
run_tex_code({
[[\color_model_new:nnn]],
@@ -2910,7 +3152,6 @@ pdfetcs.clrspcs = setmetatable({ }, { __index = function(t,names)
t[names] = colorspace
return colorspace
end })
-
local function do_preobj_SH(object,prescript)
local shade_no
local sh_type = prescript and prescript.sh_type
@@ -2918,14 +3159,14 @@ local function do_preobj_SH(object,prescript)
return
else
local domain = prescript.sh_domain or "0 1"
- local centera = prescript.sh_center_a or "0 0"; centera = centera:explode()
- local centerb = prescript.sh_center_b or "0 0"; centerb = centerb:explode()
+ local centera = (prescript.sh_center_a or "0 0"):explode()
+ local centerb = (prescript.sh_center_b or "0 0"):explode()
local transform = prescript.sh_transform == "yes"
local sx,sy,sr,dx,dy = 1,1,1,0,0
if transform then
- local first = prescript.sh_first or "0 0"; first = first:explode()
- local setx = prescript.sh_set_x or "0 0"; setx = setx:explode()
- local sety = prescript.sh_set_y or "0 0"; sety = sety:explode()
+ local first = (prescript.sh_first or "0 0"):explode()
+ local setx = (prescript.sh_set_x or "0 0"):explode()
+ local sety = (prescript.sh_set_y or "0 0"):explode()
local x,y = tonumber(setx[1]) or 0, tonumber(sety[1]) or 0
if x ~= 0 and y ~= 0 then
local path = object.path
@@ -2964,15 +3205,14 @@ local function do_preobj_SH(object,prescript)
local script = object.prescript:explode"\13+"
for i=#script,1,-1 do
if script[i]:find"mplib_spotcolor" then
- local name, value
- objref, name = script[i]:match"=(.-):(.+)"
- value = script[i+1]:match"=(.+)"
+ local t, name, value = script[i]:explode"="[2]:explode":"
+ value, objref, name = t[1], t[2], t[3]
if not names[name] then
pos = pos+1
names[name] = pos
names[#names+1] = name
end
- local t = { }
+ t = { }
for j=1,names[name] do t[#t+1] = 0 end
t[#t+1] = value
tableinsert(#ca == #cb and ca or cb, t)
@@ -3023,7 +3263,6 @@ local function do_preobj_SH(object,prescript)
else
err"unknown shading type"
end
- pdf_literalcode("q /Pattern cs")
end
return shade_no
end
@@ -3033,43 +3272,15 @@ end
% Patterns
% \begin{macrocode}
pdfetcs.patterns = { }
-local patterns = pdfetcs.patterns
-function luamplib.registerpattern ( boxid, name, opts )
- local box = texgetbox(boxid)
- local wd = format("%.3f",box.width/factor)
- local hd = format("%.3f",(box.height+box.depth)/factor)
- info("w/h/d of '%s': %s %s 0.0", name, wd, hd)
- if opts.xstep == 0 then opts.xstep = nil end
- if opts.ystep == 0 then opts.ystep = nil end
- if opts.colored == nil then
- opts.colored = opts.coloured
- if opts.colored == nil then
- opts.colored = true
- end
+local function gather_resources (optres)
+ local t, do_pattern = { }, not optres
+ local names = {"ExtGState","ColorSpace","Shading"}
+ if do_pattern then
+ names[#names+1] = "Pattern"
end
- if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end
- if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end
- if opts.matrix and opts.matrix:find"%a" then
- local data = format("mplibtransformmatrix(%s);",opts.matrix)
- process(data,"@mplibtransformmatrix")
- local t = luamplib.transformmatrix
- opts.matrix = format("%s %s %s %s", t[1], t[2], t[3], t[4])
- opts.xshift = opts.xshift or t[5]
- opts.yshift = opts.yshift or t[6]
- end
- local attr = {
- "/Type/Pattern",
- "/PatternType 1",
- format("/PaintType %i", opts.colored and 1 or 2),
- "/TilingType 2",
- format("/XStep %s", opts.xstep or wd),
- format("/YStep %s", opts.ystep or hd),
- format("/Matrix [%s %s %s]", opts.matrix or "1 0 0 1", opts.xshift or 0, opts.yshift or 0),
- }
if pdfmode then
- local optres, t = opts.resources or "", { }
if pdfmanagement then
- for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do
+ for _,v in ipairs(names) do
local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
if pp and pp:find"__prop_pair" then
t[#t+1] = format("/%s %s 0 R", v, ltx.pdf.object_id("__pdf/Page/Resources/"..v))
@@ -3078,26 +3289,19 @@ function luamplib.registerpattern ( boxid, name, opts )
else
local res = pdfetcs.getpageres() or ""
run_tex_code[[\mplibtmptoks\expandafter{\the\pdfvariable pageresources}]]
- res = (res .. texgettoks'mplibtmptoks'):explode()
- res = tableconcat(res," "):explode"/+"
+ res = res .. texgettoks'mplibtmptoks'
+ if do_pattern then return res end
+ res = res:explode"/+"
for _,v in ipairs(res) do
+ v = v:match"^%s*(.-)%s*$"
if not v:find"Pattern" and not optres:find(v) then
t[#t+1] = "/" .. v
end
end
end
- optres = optres .. tableconcat(t)
- if opts.bbox then
- attr[#attr+1] = format("/BBox [%s]", opts.bbox)
- end
- local index = tex.saveboxresource(boxid, tableconcat(attr), optres, true, opts.bbox and 4 or 1)
- patterns[name] = { id = index, colored = opts.colored }
else
- local objname = "@mplibpattern"..name
- local metric = format("bbox %s", opts.bbox or format("0 0 %s %s",wd,hd))
- local optres, t = opts.resources or "", { }
if pdfmanagement then
- for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do
+ for _,v in ipairs(names) do
local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v))
if pp and pp:find"__prop_pair" then
run_tex_code {
@@ -3113,31 +3317,86 @@ function luamplib.registerpattern ( boxid, name, opts )
"\\mplibtmptoks\\expanded{{",
"\\ifpgf@sys@pdf@extgs@exists /ExtGState @pgfextgs\\fi",
"\\ifpgf@sys@pdf@colorspaces@exists /ColorSpace @pgfcolorspaces\\fi",
+ do_pattern and "\\ifpgf@sys@pdf@patterns@exists /Pattern @pgfpatterns \\fi" or "",
"}}",
}, catat11)
t[#t+1] = texgettoks'mplibtmptoks'
+ else
+ for _,v in ipairs(names) do
+ local vv = pdfetcs.resadded[v]
+ if vv then
+ t[#t+1] = format("/%s %s", v, vv)
+ end
+ end
+ end
+ end
+ return tableconcat(t)
+end
+function luamplib.registerpattern ( boxid, name, opts )
+ local box = texgetbox(boxid)
+ local wd = format("%.3f",box.width/factor) :gsub("%.%d+", rmzeros)
+ local hd = format("%.3f",(box.height+box.depth)/factor) :gsub("%.%d+", rmzeros)
+ info("w/h/d of '%s': %s %s 0", name, wd, hd)
+ if opts.xstep == 0 then opts.xstep = nil end
+ if opts.ystep == 0 then opts.ystep = nil end
+ if opts.colored == nil then
+ opts.colored = opts.coloured
+ if opts.colored == nil then
+ opts.colored = true
end
- optres = optres .. tableconcat(t)
+ end
+ if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end
+ if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end
+ if opts.matrix and opts.matrix:find"%a" then
+ local data = format("mplibtransformmatrix(%s);",opts.matrix)
+ process(data,"@mplibtransformmatrix")
+ local t = luamplib.transformmatrix
+ opts.matrix = format("%s %s %s %s", t[1], t[2], t[3], t[4])
+ opts.xshift = opts.xshift or t[5]
+ opts.yshift = opts.yshift or t[6]
+ end
+ local attr = {
+ "/Type/Pattern",
+ "/PatternType 1",
+ format("/PaintType %i", opts.colored and 1 or 2),
+ "/TilingType 2",
+ format("/XStep %s", opts.xstep or wd),
+ format("/YStep %s", opts.ystep or hd),
+ format("/Matrix[%s %s %s]", opts.matrix or "1 0 0 1", opts.xshift or 0, opts.yshift or 0),
+ }
+ local optres = opts.resources or ""
+ optres = optres .. gather_resources(optres)
+ local patterns = pdfetcs.patterns
+ if pdfmode then
+ if opts.bbox then
+ attr[#attr+1] = format("/BBox[%s]", opts.bbox)
+ end
+ local index = tex.saveboxresource(boxid, tableconcat(attr), optres, true, opts.bbox and 4 or 1)
+ patterns[name] = { id = index, colored = opts.colored }
+ else
+ local cnt = #patterns + 1
+ local objname = "@mplibpattern" .. cnt
+ local metric = format("bbox %s", opts.bbox or format("0 0 %s %s",wd,hd))
texsprint {
- [[\ifvmode\nointerlineskip\fi]],
- format([[\hbox to0pt{\vbox to0pt{\hsize=\wd %i\vss\noindent]], boxid), -- force horiz mode?
- [[\special{pdf:bcontent}]],
- [[\special{pdf:bxobj ]], objname, format(" %s}", metric),
- format([[\raise\dp %i\box %i]], boxid, boxid),
- format([[\special{pdf:put @resources <<%s>>}]], optres),
- [[\special{pdf:exobj <<]], tableconcat(attr), ">>}",
- [[\special{pdf:econtent}]],
- [[\par}\hss}]],
+ "\\expandafter\\newbox\\csname luamplib.patternbox.", cnt, "\\endcsname",
+ "\\global\\setbox\\csname luamplib.patternbox.", cnt, "\\endcsname",
+ "\\hbox{\\unhbox ", boxid, "}\\luamplibatnextshipout{",
+ "\\special{pdf:bcontent}",
+ "\\special{pdf:bxobj ", objname, " ", metric, "}",
+ "\\raise\\dp\\csname luamplib.patternbox.", cnt, "\\endcsname",
+ "\\box\\csname luamplib.patternbox.", cnt, "\\endcsname",
+ "\\special{pdf:put @resources <<", optres, ">>}",
+ "\\special{pdf:exobj <<", tableconcat(attr), ">>}",
+ "\\special{pdf:econtent}}",
}
- patterns[#patterns+1] = objname
- patterns[name] = { id = #patterns, colored = opts.colored }
+ patterns[cnt] = objname
+ patterns[name] = { id = cnt, colored = opts.colored }
end
end
local function pattern_colorspace (cs)
local on, new = update_pdfobjs(format("[/Pattern %s]", cs))
if new then
- local key = format("MPlibCS%i",on)
- local val = pdfmode and format("%i 0 R",on) or format("@mplibpdfobj%i",on)
+ local key, val = format("MPlibCS%i",on), format(pdfetcs.resfmt,on)
if pdfmanagement then
texsprint {
"\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/ColorSpace}{", key, "}{", val, "}"
@@ -3146,21 +3405,17 @@ local function pattern_colorspace (cs)
local res = format("/%s %s", key, val)
if is_defined(pdfetcs.pgfcolorspace) then
texsprint { "\\csname ", pdfetcs.pgfcolorspace, "\\endcsname{", res, "}" }
- elseif pdfmode then
- pdfetcs.fallback_update_resources("ColorSpace", res)
else
- texsprint { "\\special{pdf:put @MPlibCS<<", res, ">>}" }
+ pdfetcs.fallback_update_resources("ColorSpace",res,"@MPlibCS")
end
end
end
- if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfcolorspace) then
- texsprint"\\special{pdf:put @resources <</ColorSpace @MPlibCS>>}"
- end
return on
end
local function do_preobj_PAT(object, prescript)
local name = prescript and prescript.mplibpattern
if not name then return end
+ local patterns = pdfetcs.patterns
local patt = patterns[name]
local index = patt and patt.id or err("cannot get pattern object '%s'", name)
local key = format("MPlibPt%s",index)
@@ -3200,21 +3455,315 @@ local function do_preobj_PAT(object, prescript)
local res = format("/%s %s", key, val)
if is_defined(pdfetcs.pgfpattern) then
texsprint { "\\csname ", pdfetcs.pgfpattern, "\\endcsname{", res, "}" }
- elseif pdfmode then
- pdfetcs.fallback_update_resources("Pattern", res)
else
- texsprint { "\\special{pdf:put @MPlibPt<<", res, ">>}" }
+ pdfetcs.fallback_update_resources("Pattern",res,"@MPlibPt")
end
end
end
- if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfpattern) then
- texsprint"\\special{pdf:put @resources <</Pattern @MPlibPt>>}"
- end
patt.done = true
end
% \end{macrocode}
%
+% Fading
+% \begin{macrocode}
+pdfetcs.fading = { }
+local function do_preobj_FADE (object, prescript)
+ local fd_type = prescript and prescript.mplibfadetype
+ local fd_stop = prescript and prescript.mplibfadestate
+ if not fd_type then
+ return fd_stop -- returns "stop" (if picture) or nil
+ end
+ local bbox = prescript.mplibfadebbox:explode":"
+ local dx, dy = -bbox[1], -bbox[2]
+ local vec = prescript.mplibfadevector; vec = vec and vec:explode":"
+ if not vec then
+ if fd_type == "linear" then
+ vec = {bbox[1], bbox[2], bbox[3], bbox[2]} -- left to right
+ else
+ local centerx, centery = (bbox[1]+bbox[3])/2, (bbox[2]+bbox[4])/2
+ vec = {centerx, centery, centerx, centery} -- center for both circles
+ end
+ end
+ local coords = { vec[1]+dx, vec[2]+dy, vec[3]+dx, vec[4]+dy }
+ if fd_type == "linear" then
+ coords = format("%f %f %f %f", tableunpack(coords))
+ elseif fd_type == "circular" then
+ local width, height = bbox[3]-bbox[1], bbox[4]-bbox[2]
+ local radius = (prescript.mplibfaderadius or "0:"..math.sqrt(width^2+height^2)/2):explode":"
+ tableinsert(coords, 3, radius[1])
+ tableinsert(coords, radius[2])
+ coords = format("%f %f %f %f %f %f", tableunpack(coords))
+ else
+ err("unknown fading method '%s'", fd_type)
+ end
+ fd_type = fd_type == "linear" and 2 or 3
+ local opaq = (prescript.mplibfadeopacity or "1:0"):explode":"
+ local on, os, new
+ on = sh_pdfpageresources(fd_type, "0 1", "/DeviceGray", {{opaq[1]}}, {{opaq[2]}}, coords, 1)
+ os = format("<</PatternType 2/Shading %s>>", format(pdfetcs.resfmt, on))
+ on = update_pdfobjs(os)
+ bbox = format("0 0 %f %f", bbox[3]+dx, bbox[4]+dy) :gsub("%.%d+", rmzeros)
+ local streamtext = format("q /Pattern cs/MPlibFd%s scn %s re f Q", on, bbox)
+ os = format("<</Pattern<</MPlibFd%s %s>>>>", on, format(pdfetcs.resfmt, on))
+ on = update_pdfobjs(os)
+ local resources = format(pdfetcs.resfmt, on)
+ on = update_pdfobjs"<</S/Transparency/CS/DeviceGray>>"
+ local attr = tableconcat{
+ "/Subtype/Form",
+ format("/BBox[%s]", bbox),
+ format("/Matrix[1 0 0 1 %s]", format("%f %f", -dx,-dy) :gsub("%.%d+", rmzeros)),
+ format("/Resources %s", resources),
+ "/Group ", format(pdfetcs.resfmt, on),
+ }
+ on = update_pdfobjs(attr, streamtext)
+ os = "<</SMask<</S/Luminosity/G " .. format(pdfetcs.resfmt, on) .. ">>>>"
+ on, new = update_pdfobjs(os)
+ local key = add_extgs_resources(on,new)
+ start_pdf_code()
+ pdf_literalcode("/%s gs", key)
+ if fd_stop then return "standalone" end
+ return "start"
+end
+
+% \end{macrocode}
+%
+% Transparency Group
+% \begin{macrocode}
+pdfetcs.tr_group = { shifts = { } }
+luamplib.trgroupshifts = pdfetcs.tr_group.shifts
+local function do_preobj_GRP (object, prescript)
+ local grstate = prescript and prescript.gr_state
+ if not grstate then return end
+ local trgroup = pdfetcs.tr_group
+ if grstate == "start" then
+ trgroup.name = prescript.mplibgroupname or "lastmplibgroup"
+ trgroup.isolated, trgroup.knockout = false, false
+ for _,v in ipairs(prescript.gr_type:explode",+") do
+ trgroup[v] = true
+ end
+ local p = object.path
+ trgroup.bbox = {
+ math.min(p[1].x_coord, p[2].x_coord, p[3].x_coord, p[4].x_coord),
+ math.min(p[1].y_coord, p[2].y_coord, p[3].y_coord, p[4].y_coord),
+ math.max(p[1].x_coord, p[2].x_coord, p[3].x_coord, p[4].x_coord),
+ math.max(p[1].y_coord, p[2].y_coord, p[3].y_coord, p[4].y_coord),
+ }
+ put2output[[\begingroup\setbox\mplibscratchbox\hbox\bgroup]]
+ elseif grstate == "stop" then
+ local llx,lly,urx,ury = tableunpack(trgroup.bbox)
+ put2output(tableconcat{
+ "\\egroup",
+ format("\\wd\\mplibscratchbox %fbp", urx-llx),
+ format("\\ht\\mplibscratchbox %fbp", ury-lly),
+ "\\dp\\mplibscratchbox 0pt",
+ })
+ local grattr = format("/Group<</S/Transparency/I %s/K %s>>",trgroup.isolated,trgroup.knockout)
+ local res = gather_resources()
+ local bbox = format("%f %f %f %f", llx,lly,urx,ury) :gsub("%.%d+", rmzeros)
+ if pdfmode then
+ put2output(tableconcat{
+ "\\saveboxresource type 2 attr{/Type/XObject/Subtype/Form/FormType 1",
+ "/BBox[", bbox, "]", grattr, "} resources{", res, "}\\mplibscratchbox",
+ [[\setbox\mplibscratchbox\hbox{\useboxresource\lastsavedboxresourceindex}]],
+ [[\wd\mplibscratchbox 0pt\ht\mplibscratchbox 0pt\dp\mplibscratchbox 0pt]],
+ [[\box\mplibscratchbox\endgroup]],
+ "\\expandafter\\xdef\\csname luamplib.group.", trgroup.name, "\\endcsname{",
+ "\\noexpand\\mplibstarttoPDF{",llx,"}{",lly,"}{",urx,"}{",ury,"}",
+ "\\useboxresource \\the\\lastsavedboxresourceindex\\noexpand\\mplibstoptoPDF}",
+ })
+ else
+ trgroup.cnt = (trgroup.cnt or 0) + 1
+ local objname = format("@mplibtrgr%s", trgroup.cnt)
+ put2output(tableconcat{
+ "\\special{pdf:bxobj ", objname, " bbox ", bbox, "}",
+ "\\unhbox\\mplibscratchbox",
+ "\\special{pdf:put @resources <<", res, ">>}",
+ "\\special{pdf:exobj <<", grattr, ">>}",
+ "\\special{pdf:uxobj ", objname, "}\\endgroup",
+ })
+ token.set_macro("luamplib.group."..trgroup.name, tableconcat{
+ "\\mplibstarttoPDF{",llx,"}{",lly,"}{",urx,"}{",ury,"}",
+ "\\special{pdf:uxobj ", objname, "}\\mplibstoptoPDF",
+ }, "global")
+ end
+ trgroup.shifts[trgroup.name] = { llx, lly }
+ end
+ return grstate
+end
+function luamplib.registergroup (boxid, name, opts)
+ local box = texgetbox(boxid)
+ local res = (opts.resources or "") .. gather_resources()
+ local attr = { "/Type/XObject/Subtype/Form/FormType 1" }
+ if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end
+ if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end
+ if opts.matrix and opts.matrix:find"%a" then
+ local data = format("mplibtransformmatrix(%s);",opts.matrix)
+ process(data,"@mplibtransformmatrix")
+ opts.matrix = tableconcat(luamplib.transformmatrix, ' ')
+ end
+ local grtype = 3
+ if opts.bbox then
+ attr[#attr+1] = format("/BBox[%s]", opts.bbox :gsub("%.%d+", rmzeros))
+ grtype = 2
+ end
+ if opts.matrix then
+ attr[#attr+1] = format("/Matrix[%s]", opts.matrix :gsub("%.%d+", rmzeros))
+ grtype = opts.bbox and 4 or 1
+ end
+ if opts.asgroup then
+ local t = { isolated = false, knockout = false }
+ for _,v in ipairs(opts.asgroup:explode",+") do t[v] = true end
+ attr[#attr+1] = format("/Group<</S/Transparency/I %s/K %s>>", t.isolated, t.knockout)
+ end
+ local trgroup = pdfetcs.tr_group
+ trgroup.shifts[name] = { get_macro'MPllx', get_macro'MPlly' }
+ if pdfmode then
+ local index = tex.saveboxresource(boxid, tableconcat(attr), res, true, grtype)
+ token.set_macro("luamplib.group."..name, "\\useboxresource "..index, "global")
+ else
+ trgroup.cnt = (trgroup.cnt or 0) + 1
+ local objname = format("@mplibtrgr%s", trgroup.cnt)
+ local wd, ht, dp = node.getwhd(box)
+ texsprint {
+ "\\expandafter\\newbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname",
+ "\\global\\setbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname",
+ "\\hbox{\\unhbox ", boxid, "}\\luamplibatnextshipout{",
+ "\\special{pdf:bcontent}",
+ "\\special{pdf:bxobj ", objname, " width ", wd, "sp height ", ht, "sp depth ", dp, "sp}",
+ "\\unhbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname",
+ "\\special{pdf:put @resources <<", res, ">>}",
+ "\\special{pdf:exobj <<", tableconcat(attr), ">>}",
+ "\\special{pdf:econtent}}",
+ }
+ token.set_macro("luamplib.group."..name, tableconcat{
+ "\\begingroup\\setbox\\mplibscratchbox\\hbox{\\special{pdf:uxobj ", objname, "}}",
+ "\\wd\\mplibscratchbox ", wd, "sp",
+ "\\ht\\mplibscratchbox ", ht, "sp",
+ "\\dp\\mplibscratchbox ", dp, "sp",
+ "\\box\\mplibscratchbox\\endgroup",
+ }, "global")
+ end
+end
+
+local function stop_special_effects(fade,opaq,over)
+ if fade then -- fading
+ stop_pdf_code()
+ end
+ if opaq then -- opacity
+ pdf_literalcode(opaq)
+ end
+ if over then -- color
+ put2output"\\special{pdf:ec}"
+ end
+end
+
+% \end{macrocode}
+%
+% Codes below for inserting PDF lieterals are mostly from ConTeXt general,
+% with small changes when needed.
+% \begin{macrocode}
+local function getobjects(result,figure,f)
+ return figure:objects()
+end
+
+function luamplib.convert (result, flusher)
+ luamplib.flush(result, flusher)
+ return true -- done
+end
+
+local function pdf_textfigure(font,size,text,width,height,depth)
+ text = text:gsub(".",function(c)
+ return format("\\hbox{\\char%i}",string.byte(c)) -- kerning happens in metapost : false
+ end)
+ put2output("\\mplibtextext{%s}{%f}{%s}{%s}{%s}",font,size,text,0,0)
+end
+
+local bend_tolerance = 131/65536
+
+local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1
+
+local function pen_characteristics(object)
+ local t = mplib.pen_info(object)
+ rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty
+ divider = sx*sy - rx*ry
+ return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width
+end
+
+local function concat(px, py) -- no tx, ty here
+ return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider
+end
+
+local function curved(ith,pth)
+ local d = pth.left_x - ith.right_x
+ if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then
+ d = pth.left_y - ith.right_y
+ if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then
+ return false
+ end
+ end
+ return true
+end
+
+local function flushnormalpath(path,open)
+ local pth, ith
+ for i=1,#path do
+ pth = path[i]
+ if not ith then
+ pdf_literalcode("%f %f m",pth.x_coord,pth.y_coord)
+ elseif curved(ith,pth) then
+ pdf_literalcode("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord)
+ else
+ pdf_literalcode("%f %f l",pth.x_coord,pth.y_coord)
+ end
+ ith = pth
+ end
+ if not open then
+ local one = path[1]
+ if curved(pth,one) then
+ pdf_literalcode("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord )
+ else
+ pdf_literalcode("%f %f l",one.x_coord,one.y_coord)
+ end
+ elseif #path == 1 then -- special case .. draw point
+ local one = path[1]
+ pdf_literalcode("%f %f l",one.x_coord,one.y_coord)
+ end
+end
+
+local function flushconcatpath(path,open)
+ pdf_literalcode("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty)
+ local pth, ith
+ for i=1,#path do
+ pth = path[i]
+ if not ith then
+ pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord))
+ elseif curved(ith,pth) then
+ local a, b = concat(ith.right_x,ith.right_y)
+ local c, d = concat(pth.left_x,pth.left_y)
+ pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord))
+ else
+ pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord))
+ end
+ ith = pth
+ end
+ if not open then
+ local one = path[1]
+ if curved(pth,one) then
+ local a, b = concat(pth.right_x,pth.right_y)
+ local c, d = concat(one.left_x,one.left_y)
+ pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord))
+ else
+ pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
+ end
+ elseif #path == 1 then -- special case .. draw point
+ local one = path[1]
+ pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
+ end
+end
+
+% \end{macrocode}
+%
% Finally, flush figures by inserting PDF literals.
% \begin{macrocode}
function luamplib.flush (result,flusher)
@@ -3234,11 +3783,11 @@ function luamplib.flush (result,flusher)
% luamplib silently ignores this invalid figure for those
% that do not contain |beginfig ... endfig|. (issue \#70)
% Original code of ConTeXt general was:
-% \begin{verbatim}
+%\begin{verbatim}
% -- invalid
% pdf_startfigure(fignum,0,0,0,0)
% pdf_stopfigure()
-% \end{verbatim}
+%\end{verbatim}
% \begin{macrocode}
else
% \end{macrocode}
@@ -3256,13 +3805,16 @@ function luamplib.flush (result,flusher)
local object = objects[o]
local objecttype = object.type
% \end{macrocode}
-% The following 6 lines are part of |btex...etex| patch.
+% The following 9 lines are part of |btex...etex| patch.
% Again, colors are processed at this stage.
% \begin{macrocode}
local prescript = object.prescript
prescript = prescript and script2table(prescript) -- prescript is now a table
local cr_over = do_preobj_CR(object,prescript) -- color
local tr_opaq = do_preobj_TR(object,prescript) -- opacity
+ local fading_ = do_preobj_FADE(object,prescript) -- fading
+ local trgroup = do_preobj_GRP(object,prescript) -- transparency group
+ local pattern_ = do_preobj_PAT(object,prescript) -- pattern
if prescript and prescript.mplibtexboxid then
put_tex_boxes(object,prescript)
elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then --skip
@@ -3288,7 +3840,7 @@ function luamplib.flush (result,flusher)
pdf_literalcode("%f %f %f %f %f %f cm",ot[3],ot[4],ot[5],ot[6],ot[1],ot[2])
pdf_textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth)
stop_pdf_code()
- else
+ elseif not trgroup and fading_ ~= "stop" then
local evenodd, collect, both = false, false, false
local postscript = object.postscript
if not object.istext then
@@ -3314,10 +3866,7 @@ function luamplib.flush (result,flusher)
else
% \end{macrocode}
% Removed from ConTeXt general: color stuff.
-% Added instead : shading stuff
% \begin{macrocode}
- local shade_no = do_preobj_SH(object,prescript) -- shading
- local pattern_ = do_preobj_PAT(object,prescript) -- pattern
local ml = object.miterlimit
if ml and ml ~= miterlimit then
miterlimit = ml
@@ -3359,6 +3908,14 @@ function luamplib.flush (result,flusher)
objecttype = 'fill'
end
end
+% \end{macrocode}
+% Added : shading
+% \begin{macrocode}
+ local shade_no = do_preobj_SH(object,prescript) -- shading
+ if shade_no then
+ pdf_literalcode"q /Pattern cs"
+ objecttype = false
+ end
if transformed then
start_pdf_code()
end
@@ -3379,27 +3936,25 @@ function luamplib.flush (result,flusher)
else
flushnormalpath(path,open)
end
-% \end{macrocode}
-% Shading seems to conflict with these ops
-% \begin{macrocode}
- if not shade_no then -- conflict with shading
- if objecttype == "fill" then
- pdf_literalcode(evenodd and "h f*" or "h f")
- elseif objecttype == "outline" then
- if both then
- pdf_literalcode(evenodd and "h B*" or "h B")
- else
- pdf_literalcode(open and "S" or "h S")
- end
- elseif objecttype == "both" then
+ if objecttype == "fill" then
+ pdf_literalcode(evenodd and "h f*" or "h f")
+ elseif objecttype == "outline" then
+ if both then
pdf_literalcode(evenodd and "h B*" or "h B")
+ else
+ pdf_literalcode(open and "S" or "h S")
end
+ elseif objecttype == "both" then
+ pdf_literalcode(evenodd and "h B*" or "h B")
end
end
if transformed then
stop_pdf_code()
end
local path = object.htap
+% \end{macrocode}
+% How can we generate an |htap| object? Please let us know if you have succeeded.
+% \begin{macrocode}
if path then
if transformed then
start_pdf_code()
@@ -3433,18 +3988,29 @@ function luamplib.flush (result,flusher)
end
end
% \end{macrocode}
-% Added to ConTeXt general: post-object color and shading stuff.
+% Added to ConTeXt general: post-object colors and shading stuff.
+% We should beware the |q ... Q| scope.
% \begin{macrocode}
if shade_no then -- shading
- pdf_literalcode("W n /MPlibSh%s sh Q",shade_no)
+ pdf_literalcode("W%s n /MPlibSh%s sh Q",evenodd and "*" or "",shade_no)
end
end
end
- if tr_opaq then -- opacity
- stop_pdf_code()
+ if fading_ == "start" then
+ pdfetcs.fading.specialeffects = {fading_, tr_opaq, cr_over}
+ elseif trgroup == "start" then
+ pdfetcs.tr_group.specialeffects = {fading_, tr_opaq, cr_over}
+ elseif fading_ == "stop" then
+ local se = pdfetcs.fading.specialeffects
+ if se then stop_special_effects(se[1], se[2], se[3]) end
+ elseif trgroup == "stop" then
+ local se = pdfetcs.tr_group.specialeffects
+ if se then stop_special_effects(se[1], se[2], se[3]) end
+ else
+ stop_special_effects(fading_, tr_opaq, cr_over)
end
- if cr_over then -- color
- put2output"\\special{pdf:ec}"
+ if fading_ or trgroup then -- extgs resetted
+ miterlimit, linecap, linejoin, dashed = -1, -1, -1, false
end
end
end
@@ -3497,15 +4063,34 @@ end
% First we need to load some packages.
%
% \begin{macrocode}
-\bgroup\expandafter\expandafter\expandafter\egroup
-\expandafter\ifx\csname selectfont\endcsname\relax
- \input ltluatex
-\else
+\ifcsname ProvidesPackage\endcsname
+% \end{macrocode}
+% We need \LaTeX\ 2024-06-01 as we use |ltx.pdf.object_id| when pdfmanagement is loaded.
+% But as \pkg{fp} package does not accept an option, we do not append the date option.
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{luamplib}
- [2024/07/03 v2.32.4 mplib package for LuaTeX]
- \ifx\newluafunction\@undefined
+ [2024/07/31 v2.34.4 mplib package for LuaTeX]
+\fi
+\ifdefined\newluafunction\else
\input ltluatex
+\fi
+% \end{macrocode}
+%
+% In DVI mode, a new XObject (mppattern, mplibgroup) must be encapsulated in an \cs{hbox}.
+% But this should not affect typesetting. So we use Hook mechanism provided by \LaTeX\ kernel.
+% In Plain, \pkg{atbegshi.sty} is loaded.
+% \begin{macrocode}
+\ifnum\outputmode=0
+ \ifdefined\AddToHookNext
+ \def\luamplibatnextshipout{\AddToHookNext{shipout/background}}
+ \def\luamplibatfirstshipout{\AddToHook{shipout/firstpage}}
+ \def\luamplibateveryshipout{\AddToHook{shipout/background}}
+ \else
+ \input atbegshi.sty
+ \def\luamplibatnextshipout#1{\AtBeginShipoutNext{\AtBeginShipoutAddToBox{#1}}}
+ \let\luamplibatfirstshipout\AtBeginShipoutFirst
+ \def\luamplibateveryshipout#1{\AtBeginShipout{\AtBeginShipoutAddToBox{#1}}}
\fi
\fi
% \end{macrocode}
@@ -3525,7 +4110,7 @@ end
\fi
% \end{macrocode}
%
-% Set the format for metapost.
+% Set the format for \metapost.
% \begin{macrocode}
\def\mplibsetformat#1{\directlua{luamplib.setformat("#1")}}
% \end{macrocode}
@@ -3567,6 +4152,39 @@ end
\def\mplibputtextbox#1{\vbox to 0pt{\vss\hbox to 0pt{\raise\dp#1\copy#1\hss}}}
% \end{macrocode}
%
+% use Transparency Group
+% \begin{macrocode}
+\protected\def\usemplibgroup#1{\csname luamplib.group.#1\endcsname}
+\protected\def\mplibgroup#1{%
+ \begingroup
+ \def\MPllx{0}\def\MPlly{0}%
+ \def\mplibgroupname{#1}%
+ \mplibgroupgetnexttok
+}
+\def\mplibgroupgetnexttok{\futurelet\nexttok\mplibgroupbranch}
+\def\mplibgroupskipspace{\afterassignment\mplibgroupgetnexttok\let\nexttok= }
+\def\mplibgroupbranch{%
+ \ifx [\nexttok
+ \expandafter\mplibgroupopts
+ \else
+ \ifx\mplibsptoken\nexttok
+ \expandafter\expandafter\expandafter\mplibgroupskipspace
+ \else
+ \let\mplibgroupoptions\empty
+ \expandafter\expandafter\expandafter\mplibgroupmain
+ \fi
+ \fi
+}
+\def\mplibgroupopts[#1]{\def\mplibgroupoptions{#1}\mplibgroupmain}
+\def\mplibgroupmain{\setbox\mplibscratchbox\hbox\bgroup\ignorespaces}
+\protected\def\endmplibgroup{\egroup
+ \directlua{ luamplib.registergroup(
+ \the\mplibscratchbox, '\mplibgroupname', {\mplibgroupoptions}
+ )}%
+ \endgroup
+}
+% \end{macrocode}
+%
% Patterns
% \begin{macrocode}
{\def\:{\global\let\mplibsptoken= } \: }
@@ -3605,7 +4223,7 @@ end
}
% \end{macrocode}
%
-% simple way to use mplib:
+% simple way to use \mplib:
% |\mpfig draw fullcircle scaled 10; \endmpfig|
% \begin{macrocode}
\def\mpfiginstancename{@mpfig}
@@ -3628,16 +4246,16 @@ end
\long\def\mplibdomainmpfig#1\endmpfig{%
\endgroup
\directlua{
- local legacy = luamplib.legacy_verbatimtex
+ local legacy = luamplib.legacyverbatimtex
local everympfig = luamplib.everymplib["\mpfiginstancename"] or ""
local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"] or ""
- luamplib.legacy_verbatimtex = false
+ luamplib.legacyverbatimtex = false
luamplib.everymplib["\mpfiginstancename"] = ""
luamplib.everyendmplib["\mpfiginstancename"] = ""
luamplib.process_mplibcode(
"beginfig(0) "..everympfig.." "..[===[\unexpanded{#1}]===].." "..everyendmpfig.." endfig;",
"\mpfiginstancename")
- luamplib.legacy_verbatimtex = legacy
+ luamplib.legacyverbatimtex = legacy
luamplib.everymplib["\mpfiginstancename"] = everympfig
luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig
}%
@@ -3651,14 +4269,14 @@ end
\long\def\mplibdoprempfig#1\endmpfig{%
\endgroup
\directlua{
- local legacy = luamplib.legacy_verbatimtex
+ local legacy = luamplib.legacyverbatimtex
local everympfig = luamplib.everymplib["\mpfiginstancename"]
local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"]
- luamplib.legacy_verbatimtex = false
+ luamplib.legacyverbatimtex = false
luamplib.everymplib["\mpfiginstancename"] = ""
luamplib.everyendmplib["\mpfiginstancename"] = ""
luamplib.process_mplibcode([===[\unexpanded{#1}]===],"\mpfiginstancename")
- luamplib.legacy_verbatimtex = legacy
+ luamplib.legacyverbatimtex = legacy
luamplib.everymplib["\mpfiginstancename"] = everympfig
luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig
}%
@@ -3737,9 +4355,9 @@ end
\def\mpliblegacybehavior#1{\directlua{
local s = string.lower("#1")
if s == "enable" or s == "true" or s == "yes" then
- luamplib.legacy_verbatimtex = true
+ luamplib.legacyverbatimtex = true
else
- luamplib.legacy_verbatimtex = false
+ luamplib.legacyverbatimtex = false
end
}}
\def\mplibverbatim#1{\directlua{
@@ -3811,14 +4429,13 @@ end
%
% Allow \TeX\ dimen/color macros. Now |runscript| does the job,
% so the following lines are not needed for most cases.
-% But the macros will be expanded when they are used in another macro.
% \begin{macrocode}
\def\mpdim#1{ runscript("luamplibdimen{#1}") }
\def\mpcolor#1#{\domplibcolor{#1}}
\def\domplibcolor#1#2{ runscript("luamplibcolor{#1{#2}}") }
% \end{macrocode}
%
-% MPLib's number system. Now |binary| has gone away.
+% \mplib's number system. Now |binary| has gone away.
% \begin{macrocode}
\def\mplibnumbersystem#1{\directlua{
local t = "#1"
@@ -3883,12 +4500,13 @@ end
% \end{macrocode}
%
% The followings are from ConTeXt general, mostly.
-% % We use a dedicated scratchbox.
+%
+% We use a dedicated scratchbox.
% \begin{macrocode}
\ifx\mplibscratchbox\undefined \newbox\mplibscratchbox \fi
% \end{macrocode}
%
-% We encapsulate the litterals.
+% We encapsulate the literals.
% \begin{macrocode}
\def\mplibstarttoPDF#1#2#3#4{%
\prependtomplibbox
diff --git a/macros/luatex/generic/luamplib/luamplib.pdf b/macros/luatex/generic/luamplib/luamplib.pdf
index 5e8e97a778..9cdef60663 100644
--- a/macros/luatex/generic/luamplib/luamplib.pdf
+++ b/macros/luatex/generic/luamplib/luamplib.pdf
Binary files differ
diff --git a/macros/luatex/generic/luamplib/test-luamplib-latex.tex b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
index c2d8cb498b..8435ee070c 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-latex.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
@@ -7,7 +7,7 @@
\usepackage{fontspec}
\setmainfont{latin modern roman}
\usepackage{luamplib}
-\usepackage{xcolor}
+\usepackage{graphicx,xcolor}
\everymplib{ beginfig(0); }
\everyendmplib{ endfig; }
\mpliblegacybehavior{true}%
@@ -246,19 +246,19 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$")
\endmpfig
\par\leavevmode
\mppattern{mypatt}
- \mpfig
- picture q;
- q := btex Q etex;
- fill bbox q withcolor .8[red,white];
- draw q withcolor .8red;
- \endmpfig
+[
+ xstep = 5, ystep = 6,
+ matrix = "rotated 90 scaled .75",
+]
+\mpfig
+draw (origin--right+up) scaled 5 withcolor 1/3[blue,white] ;
+draw (up--right) scaled 5 withcolor 1/3[red,white] ;
+\endmpfig
\endmppattern
\mpfig
- fill fullcircle scaled 100 withpostscript "collect";
- draw unitsquare shifted - center unitsquare scaled 45
- withpattern "mypatt"
- withpostscript "evenodd"
- ;
+draw unitsquare shifted -center unitsquare scaled 45 withpostscript "collect" ;
+draw fullcircle scaled 100 withpattern "mypatt" withpen pencircle scaled 1
+ withcolor \mpcolor{red!50!blue!50} withpostscript "evenodd" ;
\endmpfig
\begin{mppattern}{pattuncolored}
[
@@ -268,19 +268,81 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$")
\tiny\TeX
\end{mppattern}\relax
\mpfig
- picture tex; tex := mpliboutlinetext.p ("\bfseries \TeX");
- i:=0;
- for item within tex:
- i:=i+1;
- if i < length tex:
- fill pathpart item scaled 10 withpostscript "collect";
- else:
- draw pathpart item scaled 10 withpattern "pattuncolored"
- withpen pencircle scaled 1/2
- withcolor 0.7 blue;
- fi
+ picture tex;
+ tex = mpliboutlinetext.p ("\bfseries \TeX");
+ for i=1 upto mpliboutlinenum:
+ draw image(
+ j:=0;
+ for item within mpliboutlinepic[i]:
+ j:=j+1;
+ draw pathpart item scaled 10
+ if j < length mpliboutlinepic[i]:
+ withpostscript "collect"
+ else:
+ withpattern "pattuncolored"
+ withpen pencircle scaled 1/2
+ withcolor (i/4)[red,blue]
+ fi;
+ endfor
+ )
+ withfademethod "linear"
+ ;
endfor
\endmpfig
+\par\leavevmode
+\mpfig
+ picture mill; mill = btex \includegraphics[width=100bp]{mill} etex;
+ draw mill;
+ mill := mill shifted 125right;
+ draw mill
+ withfademethod "circular"
+ withfadecenter (center mill, center mill)
+ withfaderadius (30, abs(lrcorner mill - llcorner mill)/2)
+ withfadeopacity (1, 0)
+ ;
+\endmpfig
+\par
+\def\test#1{%
+ \mpfig
+ fill unitsquare shifted -center unitsquare scaled 200
+ withshademethod "linear"
+ withshadecolors (.3[red,white], .3[blue,white])
+ ;
+ label( btex MetaPost etex scaled 3, origin) ;
+ draw image(
+ fill fullcircle scaled 100 shifted 25left
+ withcolor .8white
+ withtransparency (2,1)
+ ;
+ fill fullcircle scaled 100 shifted 25right
+ withcolor .8white
+ withtransparency (2,1)
+ ;
+ )
+ asgroup "#1"
+ withgroupname "test:#1"
+ withtransparency (1,.5)
+ ;
+ currentpicture := currentpicture scaled 2/3;
+ \endmpfig
+}%
+\hbox{\test{isolated,knockout}\,\test{isolated}\vbox to\MPheight{\vss\hbox{~isolated}\vss}}%
+\hbox{\test{knockout}\,\test{}}%
+\hbox to\MPwidth{\hss knockout\hss}%
+\leavevmode
+\mpfig usemplibgroup "test:isolated,knockout" scaled 2/3 rotated 15 ; \endmpfig
+\usemplibgroup{test:isolated,knockout}%
+\begin{mplibgroup}{mytex}[matrix="rotated 15"] \TeX \end{mplibgroup}%
+\hbox to0pt{\hss\vrule width.5pt height5pt depth5pt\hss}%
+\hbox to0pt{\hss\vrule width10pt height.25pt depth.25pt\hss}%
+\usemplibgroup{mytex}%
+\mpfig usemplibgroup "mytex"; draw (left--right) scaled 5; draw (up--down) scaled 5; \endmpfig
+\par
+\mpfig
+ picture test; test = mplibgraphictext "\textbf{MPLIB}"
+ fakebold 1 fillcolor "red!70" drawcolor .7red scaled 7;
+ draw test withpattern "mypatt" ;
+\endmpfig
\tracingcommands0
\vskip 2\baselineskip
diff --git a/macros/luatex/generic/luamplib/test-luamplib-plain.tex b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
index c178acb31a..05c2f8138d 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-plain.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
@@ -1,4 +1,4 @@
-\input luaotfload.sty
+%\input luaotfload.sty
\input miniltx
\input color
\definecolor{orange}{cmyk}{0,.5,1,0}
@@ -261,18 +261,62 @@ draw mpliboutlinetext.b ("$\overbrace{x+\cdots+x}^k$")
\fiverm\TeX
\endmppattern
\mpfig
- picture tex; tex := mpliboutlinetext.p ("\bf \TeX");
- i:=0;
- for item within tex:
- i:=i+1;
- if i < length tex:
- fill pathpart item scaled 10 withpostscript "collect";
- else:
- draw pathpart item scaled 10 withpattern "pattuncolored"
- withpen pencircle scaled 1/2
- withcolor 0.7 blue;
- fi
+ picture tex;
+ tex = mpliboutlinetext.p ("\bf \TeX");
+ draw image(
+ for i=1 upto mpliboutlinenum:
+ j:=0;
+ for item within mpliboutlinepic[i]:
+ j:=j+1;
+ draw pathpart item scaled 10
+ if j < length mpliboutlinepic[i]:
+ withpostscript "collect"
+ else:
+ withpattern "pattuncolored"
+ withpen pencircle scaled 1/2
+ withcolor (i/4)[red,blue]
+ fi;
+ endfor
endfor
+ )
+ withfademethod "linear"
+ ;
+\endmpfig
+\par\leavevmode
+\mpfig
+fill fullcircle scaled 125 withcolor 2/3[blue,white];
+fill fullcircle scaled 80 withcolor 2/3[red,white];
+draw image(
+ draw (left--right) rotated 45 scaled 50
+ withpen pencircle scaled 20
+ ;
+ draw (left--right) rotated -45 scaled 50
+ withpen pencircle scaled 20
+ ;
+ )
+ asgroup ""
+ withgroupname "testTRgroup"
+ withprescript "tr_transparency=.3"
+ ;
+\endmpfig
+\mpfig
+fill fullcircle scaled 125 withcolor 2/3[red,white];
+fill fullcircle scaled 80 withcolor 2/3[blue,white];
+usemplibgroup "testTRgroup"
+ withfademethod "circular"
+ withfaderadius (0,60)
+ ;
+\endmpfig
+\mplibgroup{mytex}[matrix="rotated 15"] \TeX \endmplibgroup
+\hbox to0pt{\hss\vrule width.5pt height5pt depth5pt\hss}%
+\hbox to0pt{\hss\vrule width10pt height.25pt depth.25pt\hss}%
+\usemplibgroup{mytex}%
+\mpfig usemplibgroup "mytex"; draw (left--right) scaled 5; draw (up--down) scaled 5; \endmpfig
+\par
+\mpfig
+ picture test; test = mplibgraphictext "\bf MPLIB"
+ fakebold 1 fillcolor .7[white,blue] drawcolor .7blue scaled 7;
+ draw test withpattern "pattuncolored" ;
\endmpfig
\tracingcommands0
diff --git a/macros/luatex/generic/luatexja/README b/macros/luatex/generic/luatexja/README
index 9224c83b0b..0bc40ac643 100644
--- a/macros/luatex/generic/luatexja/README
+++ b/macros/luatex/generic/luatexja/README
@@ -1,4 +1,4 @@
-The LuaTeX-ja Package 20240514.0
+The LuaTeX-ja Package 20240714.0
--------------------------------
Copyright (c) 2011--2024 The LuaTeX-ja project
License: modified BSD (see COPYING)
@@ -42,7 +42,7 @@ Installation
2. If you must/want to install manually:
a. Download the source archive from CTAN,
- or tagged as 20240514.0 in the Git repository by
+ or tagged as 20240714.0 in the Git repository by
<https://github.com/luatexja/luatexja/archive/refs/tags/$VER.zip>
b. Extract the archive and process following three files by LuaLaTeX
@@ -92,4 +92,4 @@ Notes
This file and ltj-kinsoku.lua are not used anymore.
(Do not remove ltj-kinsoku.tex.)
-Last commit date: Tue May 14 19:12:05 2024 +0900
+Last commit date: Sun Jul 14 08:56:04 2024 +0900
diff --git a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf
index de28e1d279..eac7af315d 100644
--- a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf
+++ b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf
Binary files differ
diff --git a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf
index 49a8a6feef..ee55789a60 100644
--- a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf
+++ b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf
Binary files differ
diff --git a/macros/luatex/generic/luatexja/doc/luatexja.dtx b/macros/luatex/generic/luatexja/doc/luatexja.dtx
index b550dc58d4..9ad5209465 100644
--- a/macros/luatex/generic/luatexja/doc/luatexja.dtx
+++ b/macros/luatex/generic/luatexja/doc/luatexja.dtx
@@ -1467,14 +1467,19 @@ Alphabetic fonts
&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\
\midrule
Japanese fonts
-&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\
+&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\
Alphabetic fonts
-&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\
+&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\
\midrule
Japanese fonts
-&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\
+&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\
Alphabetic fonts
-&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\
+&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\
+\midrule
+Japanese fonts
+&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\
+Alphabetic fonts
+&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\
\bottomrule
\end{tabular}\par}
\end{table}
@@ -1492,14 +1497,19 @@ Alphabetic fonts
&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\
\midrule
\emph{和文}
-&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\
+&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\
+\emph{欧文}
+&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\
+\midrule
+\emph{和文}
+&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\
\emph{欧文}
-&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\
+&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\
\midrule
\emph{和文}
-&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\
+&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\
\emph{欧文}
-&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\
+&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\
\bottomrule
\end{tabular}\par}
\end{table}
@@ -7833,7 +7843,7 @@ stretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50}
さらに,バージョン20220211.0以降では次の命令が提供される.
\begin{cslist}
- \item[\cs{ltjghostbeginjachar}]
+ \item[\cs{ltjghostbeforejachar}]
\LuaTeX-ja本体が提供している\cs{ltjfakeparbegin}, \cs{ltjfakeboxbdd}と類似の命令である.
実行された箇所が(限定・非限定を問わず)水平モードであった場合に,実行された箇所は
「文字クラス0の\textbf{JAchar}」の直前であると,
@@ -7850,7 +7860,7 @@ A\LG 字 \par% ==> ALchar--(xkanjiskip)--\LG
\end{LTXexample}
\item[\cs{ltjghostafterjachar}]
- \cs{ltjghostbeginjachar}と対を成す命令で,実行された箇所は
+ \cs{ltjghostbeforejachar}と対を成す命令で,実行された箇所は
「文字クラス0の\textbf{JAchar}」の直後であると,
\LuaTeX-jaの和文処理グルー挿入処理に認識させる.以下の実行例を参照.
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
index 76ebf8716c..6ef3ff1751 100644
--- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec-27c}[2024-02-19 fontspec support of LuaTeX-ja]
+\ProvidesPackage{luatexja-fontspec-27c}[2024-05-27 fontspec support of LuaTeX-ja]
\RequirePackage{l3keys2e}
\ExplSyntaxOn
@@ -359,10 +359,24 @@
\setfontfamily #1 [#2,#4] {#3}
\cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
}
+\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \providefontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
\newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
}
+\DeclareDocumentCommand \renewjfontface { m O{} m O{} } {
+ \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \setjfontface { m O{} m O{} } {
+ \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \providejfontface { m O{} m O{} } {
+ \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
\prop_new:N \l__ltj_fontspec_tmp_prop
\prop_new:N \g__ltj_fontspec_fontopts_prop
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty
index 1415cee127..51af33447c 100644
--- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec-29c}[2024-05-05 fontspec support of LuaTeX-ja]
+\ProvidesPackage{luatexja-fontspec-29c}[2024-05-27 fontspec support of LuaTeX-ja]
\RequirePackage{l3keys2e}
\ExplSyntaxOn
@@ -359,10 +359,24 @@
\setfontfamily #1 [#2,#4] {#3}
\cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
}
+\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \providefontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
\newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
}
+\DeclareDocumentCommand \renewjfontface { m O{} m O{} } {
+ \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \setjfontface { m O{} m O{} } {
+ \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \providejfontface { m O{} m O{} } {
+ \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
\prop_new:N \l__ltj_fontspec_tmp_prop
\prop_new:N \g__ltj_fontspec_fontopts_prop
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty
index e763d91ad7..02a79ad6ca 100644
--- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec-29e}[2024-05-14 fontspec support of LuaTeX-ja]
+\ProvidesPackage{luatexja-fontspec-29e}[2024-05-27 fontspec support of LuaTeX-ja]
\RequirePackage{l3keys2e}
\ExplSyntaxOn
@@ -359,10 +359,24 @@
\setfontfamily #1 [#2,#4] {#3}
\cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
}
+\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \providefontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
\newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
}
+\DeclareDocumentCommand \renewjfontface { m O{} m O{} } {
+ \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \setjfontface { m O{} m O{} } {
+ \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+\DeclareDocumentCommand \providejfontface { m O{} m O{} } {
+ \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
\prop_new:N \l__ltj_fontspec_tmp_prop
\prop_new:N \g__ltj_fontspec_fontopts_prop
diff --git a/macros/luatex/generic/luatexja/src/lltjext.sty b/macros/luatex/generic/luatexja/src/lltjext.sty
index a83c9305c9..69e709f02e 100644
--- a/macros/luatex/generic/luatexja/src/lltjext.sty
+++ b/macros/luatex/generic/luatexja/src/lltjext.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjext}[2022-08-24 v1.2k-ltj-14 Macros for vertical writing]
+\ProvidesPackage{lltjext}[2024-05-16 v1.2k-ltj-15 Macros for vertical writing]
\RequirePackage{luatexja}
\newcount\ltj@ext@dir
\let\ltj@lltjext@orig@tabular=\tabular
@@ -541,17 +541,11 @@
\else \let\box@dir\utod
\fi
\fi
-\ifltj@ltfilehook@avail % LaTeX2e >= 2020-10-01
\@defaultunitsset\@picht{#3}\unitlength
\@defaultunitsset\@picwd{#2}\unitlength
\setbox\@picbox\hbox to\@picwd\bgroup\box@dir
\@defaultunitsset\@tempdimc{#4}\unitlength\hskip-\@tempdimc
\@defaultunitsset\@tempdimc{#5}\unitlength\lower\@tempdimc\hbox\bgroup
-\else % <= 2020-02-02
- \@picwd=#2\unitlength \@picht=#3\unitlength
- \setbox\@picbox\hbox to\@picwd\bgroup\box@dir
- \hskip-#4\unitlength\lower#5\unitlength\hbox\bgroup
-\fi
\ltj@@pic@reset@blshift
\ignorespaces}
\def\endpicture{%
diff --git a/macros/luatex/generic/luatexja/src/ltj-latex.sty b/macros/luatex/generic/luatexja/src/ltj-latex.sty
index 7e091d161d..9f6e4d0a36 100644
--- a/macros/luatex/generic/luatexja/src/ltj-latex.sty
+++ b/macros/luatex/generic/luatexja/src/ltj-latex.sty
@@ -12,45 +12,14 @@
\def\luatexjalatexLoaded{\endinput}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ltj-latex}[2022-10-15 LaTeX support of LuaTeX-ja]
+\ProvidesPackage{ltj-latex}[2024-05-16 LaTeX support of LuaTeX-ja]
\endlinechar=13
%%% LaTeX version detection
-\newif\ifltj@ltfilehook@avail
-\@ifl@t@r\fmtversion{2020-10-01}{%
- \@ifl@t@r\fmtversion{2020-10-02}%
- {\ltj@ltfilehook@availtrue}
- {%
- \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi
- \else\ltj@ltfilehook@availtrue\fi
- }%
-}{}
-\@ifl@t@r\fmtversion{2021-05-01}{\count@=1 }{\count@=0 }
-\ifnum \count@<1
-%%%% \shipout
- \newluafunction\ltj@@lua@shipout@inner
- \directlua{
- local t = lua.get_functions_table()
- local getbox, setbox = tex.getbox, tex.setbox
- local shipout_lthook = luatexja.direction.shipout_lthook
- t[\the\ltj@@lua@shipout@inner]=function ()
- local a = shipout_lthook(getbox(\the\ltj@afbox))
- if a then setbox(\the\ltj@afbox, a) end
- end
- }
- \protected\luadef\ltj@@lua@shipout\ltj@@lua@shipout@inner
- \def\ltj@shipout@{\ltj@@lua@shipout\primitive\shipout\box\ltj@afbox}%
- \protected\def\ltj@shipout{\ltj@afterbox\ltj@shipout@}
- \ifprimitive\shipout\let\shipout\ltj@shipout\fi
- \ifcsname tex_shipout:D\endcsname
- \expandafter\let\csname tex_shipout:D\endcsname\ltj@shipout
- \fi
-\else
- \directlua{%
- luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1)
- }
-\fi
+\directlua{%
+ luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1)
+}
%%% patch for LaTeX
\usepackage{lltjfont}
@@ -59,36 +28,30 @@
\RequirePackage{lltjp-atbegshi}
%%% patching commands
-\ifltj@ltfilehook@avail
- %% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code>
- %% no-starred version: do nothing if the <package> is loaded
- %% starred version: do <code> right away if the <package> is loaded
- \def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage}
- \def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage}
- \@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15
- \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}}
- \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}}
- \long\def\@@ltj@ExecuteAfterPackage#1#2{%
- \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}%
- }
- \long\def\@@ltj@ExecuteBeforePackage#1#2{%
- \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}%
- }
- }{
- \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}}
- \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}}
- \long\def\@@ltj@ExecuteAfterPackage@star#1#2{%
- \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}%
- }
- \long\def\@@ltj@ExecuteBeforePackage@star#1#2{%
- \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}%
- }
+%% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code>
+%% no-starred version: do nothing if the <package> is loaded
+%% starred version: do <code> right away if the <package> is loaded
+\def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage}
+\def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage}
+\@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15
+ \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}}
+ \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}}
+ \long\def\@@ltj@ExecuteAfterPackage#1#2{%
+ \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}%
}
-\else
- \RequirePackage{filehook}
- \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile
- \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile
-\fi
+ \long\def\@@ltj@ExecuteBeforePackage#1#2{%
+ \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}%
+ }
+}{
+ \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}}
+ \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}}
+ \long\def\@@ltj@ExecuteAfterPackage@star#1#2{%
+ \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}%
+ }
+ \long\def\@@ltj@ExecuteBeforePackage@star#1#2{%
+ \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}%
+ }
+}
\def\ltj@pkgpatch@im#1{\@ifnextchar[{\ltj@pkgpatch@im@{#1}}{\ltj@pkgpatch@im@{#1}[lltjp-#1]}}%]
\def\ltj@pkgpatch@im@#1[#2]{\ltj@ExecuteAfterPackage*{#1}{\ltj@pkgpatch@im@@{#2}}}
\def\ltj@pkgpatch@im@@#1{%
@@ -101,11 +64,7 @@
}
\def\ltj@pkgpatch#1{\@ifnextchar[{\ltj@pkgpatch@{#1}}{\ltj@pkgpatch@{#1}[lltjp-#1]}}%]
-\ifltj@ltfilehook@avail
- \def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]}
-\else
- \def\ltj@pkgpatch@@{\gpreto\@begindocumenthook}
-\fi
+\def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]}
\def\ltj@pkgpatch@#1[#2]{%
\ltj@pkgpatch@@{%
\@ifpackageloaded{#1}{\@ifpackageloaded{#2}{}{\RequirePackage{#2}}}{}%
@@ -121,18 +80,12 @@
\ltj@pkgpatch{tascmac}
\ltj@pkgpatch{ascmac}[lltjp-tascmac]
\ltj@pkgpatch@im{stfloats}
-\ifltj@ltfilehook@avail\else
- \ltj@pkgpatch{preview} %% at \begin{document}
- % (preview package has delayed option)
-\fi
\ltj@pkgpatch{array} %% at \begin{document}
\ltj@pkgpatch{collcell} %% at \begin{document}
\ltj@pkgpatch@im{unicode-math}
\ltj@pkgpatch@im{siunitx}
\ltj@pkgpatch@im{microtype}
-\ifltj@ltfilehook@avail\else\ltj@pkgpatch@im{everyshi}\fi
-
\RequirePackage{lltjp-geometry}
\ltj@ExecuteBeforePackage{breqn}{%
diff --git a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua
index 43ecac806c..8f5632be4e 100644
--- a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua
+++ b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua
@@ -156,16 +156,17 @@ function set_box_stack_level(head, mode)
if ltjs.list_dir == dir_tate then
for p in traverse_glyph(to_direct(head)) do
if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then
- local pf = ltjf_replace_altfont(attr_curtfnt, getchar(p), p)
+ local pc = ltjs_orig_char_table[p] or getchar(p)
+ local pf = ltjf_replace_altfont(attr_curtfnt, pc, p)
if ltjf_font_metric_table[pf].vert_activated then
- local pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end
+ pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end
end
end
end
else
for p in traverse_glyph(to_direct(head)) do
if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then
- ltjf_replace_altfont(attr_curjfnt, getchar(p), p)
+ ltjf_replace_altfont(attr_curjfnt, ltjs_orig_char_table[p] or getchar(p), p)
end
end
end
diff --git a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
index 88352dd5b2..2b65eb5e5c 100644
--- a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
+++ b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
@@ -15,7 +15,7 @@ do
end
local cidfont_data = {}
local cache_chars = {}
-local cache_ver = 13
+local cache_ver = 14
local identifiers = fonts.hashes.identifiers
local cid_reg, cid_order, cid_supp, cid_name
@@ -147,7 +147,7 @@ do
descender = 655360*0.12,
},
embedding = "no", cache = "yes", factor = 0, hfactor = 0, vfactor = 0,
- tounicode = 1,
+ tounicode = 1, filename="",
properties = { language = "dflt", script = "dflt" },
}
cidfont_data[cid_name] = k
diff --git a/macros/luatex/generic/luatexja/src/luatexja.sty b/macros/luatex/generic/luatexja/src/luatexja.sty
index a54ede6758..f9ae793bb4 100644
--- a/macros/luatex/generic/luatexja/src/luatexja.sty
+++ b/macros/luatex/generic/luatexja/src/luatexja.sty
@@ -27,7 +27,7 @@
\newif\ifltj@disablejfam
%%%% VERSION
-\def\LuaTeXjaversion{20240514.0}
+\def\LuaTeXjaversion{20240714.0}
%% Check if LaTeX is used.
\begingroup\expandafter\expandafter\expandafter\endgroup
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
index bb63ac6877..00c858e349 100644
--- a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
+++ b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjdefs}[2022-01-23 Default font settings of LuaTeX-ja]
+\ProvidesPackage{lltjdefs}[2024-05-16 Default font settings of LuaTeX-ja]
\ifdefined\ltj@stdmcfont\else\def\ltj@stdmcfont{file:HaranoAjiMincho-Regular.otf}\fi
\ifdefined\ltj@stdgtfont\else\def\ltj@stdgtfont{file:HaranoAjiGothic-Medium.otf}\fi
@@ -18,13 +18,8 @@
\DeclareKanjiEncodingDefaults{}{}
\DeclareErrorKanjiFont{JY3}{mc}{m}{n}{10}
\kanjifamily{mc}
-\ifnum\ltj@@latex@plv<1500 % <=2020-10-01
- \kanjiseries{m}
- \kanjishape{n}
-\else % >=2021-06-01
- \def\k@series{m}
- \def\k@shape{n}
-\fi
+\def\k@series{m}
+\def\k@shape{n}
\fontsize{10}{10}
\DeclareYokoKanjiEncoding{JY3}{}{}
\DeclareKanjiSubstitution{JY3}{mc}{m}{n}
@@ -37,12 +32,7 @@
\newcommand\kanjiencodingdefault{JY3}
\newcommand\kanjifamilydefault{\mcdefault}
\newcommand\kanjiseriesdefault{\mddefault}
-\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0
- %% LaTeX 2020-02-02
- \newcommand\kanjishapedefault{\shapedefault}
-\else%% LaTeX 2019-10-01
- \newcommand\kanjishapedefault{\updefault}
-\fi
+\newcommand\kanjishapedefault{\shapedefault}
\DeclareKanjiFamily{JY3}{mc}{}
\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi]
@@ -90,57 +80,36 @@
\DeclareMathAlphabet{\mathgt}{JY3}{gt}{m}{n}
\fi
-\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0
-%%%% LaTeX >= 2020-02-02
\edef\bfseries@mc{\bfdefault}
\edef\bfseries@gt{\bfdefault}
\def\bfseries@jtt{\bfseries@mc}
\edef\mdseries@mc{\mddefault}
\edef\mdseries@gt{\mddefault}
\def\mdseries@jtt{\mdseries@mc}
-\fi
\newif\if@ltj@match@family
\@ltj@match@familyfalse
\def\verbatim@font{\normalfont\ttfamily\kanjifamily\jttdefault\selectfont}
-\def\@ltj@hook@family#1#2{% #1: csname #2: contents
- \ifltj@ltfilehook@avail % LaTeX 2020-10-01
- \AddToHook{#1}{#2}%
- \else\ifcsname @#1hook\endcsname % LaTeX 2020-02-02
- \csappto{@#1hook}{#2}%
- \else % LaTeX 2019-10-01
- \ifcsname #1 \endcsname
- \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}%
- \else
- \PackageWarningNoLine{luatexja}{%
- Patching to \expandafter\string\csname #1\endcsname\space failed%
- }%
- \fi
- \fi\fi
-}
-\@ltj@hook@family{rmfamily}{%
+\AddToHook{rmfamily}{%
\if@ltj@match@family
\prepare@family@series@update@kanji{mc}\mcdefault
\fi
}
-\@ltj@hook@family{sffamily}{%
+\AddToHook{sffamily}{%
\if@ltj@match@family
\prepare@family@series@update@kanji{gt}\gtdefault
\fi
}
-\@ltj@hook@family{ttfamily}{%
+\AddToHook{ttfamily}{%
\if@ltj@match@family
\prepare@family@series@update@kanji{jtt}\jttdefault
\fi
}
-\let\@ltj@hook@family\@undefined
-\ifltj@ltfilehook@avail % 2020-10-01
- \expandafter\def\expandafter\kanjiseriesdefault
- \expandafter{\kanjiseriesdefault\@empty}
- \let\kanjiseriesdefault@kernel\kanjiseriesdefault
-\fi
+\expandafter\def\expandafter\kanjiseriesdefault
+ \expandafter{\kanjiseriesdefault\@empty}
+\let\kanjiseriesdefault@kernel\kanjiseriesdefault
%%% \eminnershape
\expandafter\patchcmd\csname em \endcsname{\itshape}{\gtfamily\itshape}{}{}
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
index 2efc9435ab..52ac44d5cc 100644
--- a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
+++ b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
@@ -3,31 +3,10 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2023-04-13 Patch to NFSS2 for LuaTeX-ja]
+\ProvidesPackage{lltjfont}[2023-05-16 Patch to NFSS2 for LuaTeX-ja]
%%%%%%%% LaTeX2e version detection
-\newcount\ltj@@latex@plv \ltj@@latex@plv=-1
-\ifltj@ltfilehook@avail
-\ExplSyntaxOn
- \cs_if_exist:NTF \__shipout_execute_main_cont:Nnnn
- {\ltj@@latex@plv=1500}% 2021-06-01
- {\ifnum\patch@level>2\relax \ltj@@latex@plv=1300\else \ltj@@latex@plv=1000\fi}% 2020-10-01
-\ExplSyntaxOff
-\else\ifdefined\@rmfamilyhook % 2020-02-02
- \ifx\@forced@seriestrue\@undefined % 2020-02-02 pl0--2
- \@latex@error
- {Please update LaTeX2e!^^J\space\space
- At least LaTeX2e 2020-02-02 patch level 3 is required}%
- {LaTeX2e 2020-02-02 patch level 2 (and 4) has a bug.}
- \else
- \ltj@@latex@plv=300
- \unless\ifx\series@maybe@drop@one@m@x\@undefined % pl5 + develop
- \ltj@@latex@plv=501
- \else\unless\ifx\series@maybe@drop@one@m\@undefined % patch level 5
- \ltj@@latex@plv=500
- \fi\fi
- \fi
-\fi\fi
+\newcount\ltj@@latex@plv \ltj@@latex@plv=1500
%% patching \DeclareTextComposite
\def\ltj@chardef@text@cmd#1{%
@@ -400,59 +379,7 @@
\directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
}%
\fi}
-\ifnum\ltj@@latex@plv<1500 % <=2020-10-01
-\protected\def\ltj@selectfont@patch{%
- \ltj@@start@time@measure{selectfont}%
- \let\tmp@error@fontshape\error@fontshape
- \let\error@fontshape\error@kfontshape
- \ltj@@is@kyenc{\k@encoding}\ifin@%
- \let\cy@encoding\k@encoding
- \ensure@KanjiEncodingPair{t}%
- \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
- \else
- \ltj@@is@ktenc{\k@encoding}\ifin@%
- \let\ct@encoding\k@encoding
- \ensure@KanjiEncodingPair{y}%
- \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
- \else
- \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
- \fi
- \fi
- \global\let\ltj@afont@name=\font@name
- \ltj@selectfont@tate\ltj@selectfont@yoko
-%
- \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item
- \kenc@update
- \global\let\font@name=\ltj@afont@name
- \let\error@fontshape\tmp@error@fontshape
- \if@knjcmd \@knjcmdfalse
- \expandafter\ifx
- \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
- \expandafter\ifx
- \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
- \else
- \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\selectfont
- % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり
- \fi
- \else
- \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\selectfont
- % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり
- \fi
- \fi
- \global\let\font@name=\ltj@afont@name
- \ltj@@stop@time@measure{selectfont}%
-}
-\RequirePackage{everysel}
-\let\ltj@@EverySelectfont@Init=\@EverySelectfont@Init
-\expandafter\expandafter\expandafter\let
-\expandafter\expandafter\csname ltj@@orig@selectfont\endcsname\csname selectfont\space\endcsname
-\@EverySelectfont@Init% for LaTeX2e <=2020-10-01
-\def\@EverySelectfont@Init{%
- \expandafter\let\csname selectfont\space \endcsname \ltj@@orig@selectfont
- \ltj@@EverySelectfont@Init
-}
-\EverySelectfont{\ltj@selectfont@patch}
-\else % LaTeX2e >=2021-06-01
+
\AddToHook{selectfont}[luatexja]{%
\ltj@@start@time@measure{selectfont}%
\ifx\delayed@k@adjustment\@empty
@@ -514,7 +441,6 @@
\global\let\font@name=\ltj@afont@name
\ltj@@stop@time@measure{selectfont}%
}
-\fi
\bgroup
\def\ltj@@dir@patch#1#2#3{%
@@ -721,8 +647,6 @@
}
%%%%%%
-\ifnum\ltj@@latex@plv>0
-%%%% LaTeX >= 2020-02-02
\newif\if@shape@roman@kanji
\def\merge@kanji@series#1{%
@@ -740,76 +664,11 @@
\@nil
}
-\ifnum\ltj@@latex@plv>500 % !!! pl5 + develop
\def\set@target@series@kanji#1{%
\edef\k@series{#1}%
\series@maybe@drop@one@m\k@series\k@series
}
-\else\ifnum\ltj@@latex@plv>300 % !!! pl5
- \def\set@target@series@kanji#1{%
- \edef\k@series{#1}%
- \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series
- }
-\else % !!! pl 3, 4
- \def\set@target@series@kanji#1{%
- \edef\k@series{#1}%
- \edef\k@series{\expandafter\series@drop@one@m\k@series mm\series@drop@one@m}%
- }
-\fi\fi
-\ifnum\ltj@@latex@plv<1500% <=2020-10-01
-\def\merge@kanji@series@#1#2#3\@nil{%
- \def\reserved@a{#3}%
- \ifx\reserved@a\@empty
- \set@target@series@kanji{#2}%
- \else
- \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
- \maybe@load@fontshape\endgroup
- \edef\reserved@a{\k@encoding /\k@family /#1/\k@shape}%
- \ifcsname \reserved@a \endcsname
- \set@target@series@kanji{#1}%
- \else
- \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname
- \set@target@series@kanji{#2}%
- {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
- \else
- \set@target@series@kanji{#3}%
- {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
- \fi
- \fi
- \fi
-}
-\def\merge@kanji@shape@#1#2#3\@nil{%
- \def\reserved@a{#3}%
- \ifx\reserved@a\@empty
- \if@shape@roman@kanji
- \set@safe@kanji@shape{#2}{}%
- \else
- \edef\k@shape{#2}%
- \fi
- \else
- \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
- \maybe@load@fontshape\endgroup
- \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}%
- \ifcsname \reserved@a\endcsname
- \edef\k@shape{#1}%
- \else
- \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname
- \edef\k@shape{#2}%
- {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
- \else
- \if@shape@roman@kanji
- \set@safe@kanji@shape{#3}%
- {{\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}}%
- \else
- \edef\k@shape{#3}%
- {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
- \fi
- \fi
- \fi
- \fi
-}
-\else % >=2021-06-01
\def\merge@kanji@series@#1#2#3\@nil{%
\def\reserved@a{#3}%
\ifx\reserved@a\@empty
@@ -892,20 +751,8 @@
\fi
}
\let\delayed@merge@kanji@shape\merge@kanji@shape@without@substitution
-\fi
\newif\if@forced@series@kanji
-\ifnum\ltj@@latex@plv=300 % 2020-02-02 pl3, 4
- \DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}}
- \DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}}
- \DeclareRobustCommand\romanseriesforce[1]{\edef\f@series{#1}}
- \DeclareRobustCommand\kanjiseriesforce[1]{\edef\k@series{#1}}
-\else\ifnum\ltj@@latex@plv<1500% >=2020-02-02 pl5 and <=2020-10-01
- \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse\merge@font@series{#1}}
- \DeclareRobustCommand\kanjiseries[1]{\@forced@series@kanjifalse\merge@kanji@series{#1}}
- \DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}}
- \DeclareRobustCommand\kanjiseriesforce[1]{\@forced@series@kanjitrue\edef\k@series{#1}}
-\else% >=2021-06-01
\DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse
\expandafter\def\expandafter\delayed@f@adjustment\expandafter
{\delayed@f@adjustment\delayed@merge@font@series{#1}}}
@@ -919,22 +766,9 @@
\expandafter\def\expandafter\delayed@k@adjustment\expandafter
{\delayed@k@adjustment\edef\k@series{#1}}}
\let\delayed@k@adjustment\@empty
-\fi\fi
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}%
\DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}%
-\ifnum\ltj@@latex@plv<1500% <=2020-10-01
- \DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}}
- \DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}}
- \DeclareRobustCommand\fontshape[1]{%
- \@shape@roman@kanjitrue
- \merge@font@shape{#1}\merge@kanji@shape{#1}%
- \@shape@roman@kanjifalse
- }
- \DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}}
- \DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}}
- \DeclareRobustCommand\fontshapeforce[1]{\set@safe@kanji@shape{#1}{}\romanshapeforce{#1}}
-\else% >=2021-06-01
\DeclareRobustCommand\romanshape[1]{%
\expandafter\def\expandafter\delayed@f@adjustment\expandafter
{\delayed@f@adjustment\delayed@merge@font@shape{#1}}}
@@ -956,9 +790,6 @@
\romanshapeforce{#1}%
\expandafter\def\expandafter\delayed@k@adjustment\expandafter
{\delayed@k@adjustment\set@safe@kanji@shape{#1}{}}}
-\fi
-\ifnum\ltj@@latex@plv>1499
-%%%% LaTeX >= 2021-06-01
\DeclareRobustCommand\usekanji[4]{%
\kanjiencoding{#1}\edef\k@family{#2}%
\set@target@series@kanji{#3}\edef\k@shape{#4}%
@@ -969,42 +800,6 @@
\set@target@series{#3}\edef\f@shape{#4}%
\let\delayed@f@adjustment\@empty
\selectfont\ignorespaces}
-\else\ifnum\ltj@@latex@plv>1000
-%%%% 2021-10-01 PL3 <= LaTeX < 2021-06-01
-\DeclareRobustCommand\usekanji[4]{%
- \kanjiencoding{#1}\edef\k@family{#2}%
- \set@target@series@kanji{#3}\edef\k@shape{#4}%
- \selectfont\ignorespaces}
-\DeclareRobustCommand\useroman[4]{%
- \romanencoding{#1}\edef\f@family{#2}%
- \set@target@series{#3}\edef\f@shape{#4}%
- \selectfont\ignorespaces}
-\else
-%%%% 2020-10-01 <= LaTeX < 2020-10-01 PL3
-\DeclareRobustCommand\usekanji[4]{%
- \kanjiencoding{#1}\edef\k@family{#2}\edef\k@series{#3}\edef\k@shape{#4}%
- \selectfont\ignorespaces}
-\DeclareRobustCommand\useroman[4]{%
- \romanencoding{#1}\edef\f@family{#2}\edef\f@series{#3}\edef\f@shape{#4}%
- \selectfont\ignorespaces}
-\fi\fi
-%%%% LaTeX >= 2020-02-02 END
-\else
-%%%% LaTeX 2019-10-01
-\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}}
-\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}}
-\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
-\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}}
-\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}}
-\DeclareRobustCommand\fontshape[1]{\set@safe@kanji@shape{#1}{}\romanshape{#1}}
-\DeclareRobustCommand\usekanji[4]{%
- \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}%
- \selectfont\ignorespaces}
-\DeclareRobustCommand\useroman[4]{%
- \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
- \selectfont\ignorespaces}
-%%%% LaTeX 2019-10-01 END
-\fi
%%%%
\def\set@safe@kanji@shape#1#2{%
@@ -1026,8 +821,6 @@
\else\useroman{#1}{#2}{#3}{#4}%
\fi}
-\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0
-%%%% LaTeX >= 2020-02-02
\let\prepare@family@series@update@kanji=\prepare@family@series@update
\patchcmd\prepare@family@series@update{\fontfamily}{\romanfamily}{}{}
\patchcmd\prepare@family@series@update@kanji{\if@forced@series}{\if@forced@series@kanji}{}{}
@@ -1049,34 +842,16 @@
\patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{}
\def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}\@elt{jtt}}
-\def\@ltj@hook@series@default#1#2#3{%
- \ifltj@ltfilehook@avail % 2020-10-01
- \AddToHook{#1/defaults}{#2}%
- \else\ifcsname @set#1defaultshook\endcsname %after 2020-04-07
- \expandafter\g@addto@macro\csname @set#1defaultshook\endcsname{#2}%
- \else % 2020-02-02
- \expandafter\patchcmd\csname #1 \endcsname{#3}{#3#2}{}{}%
- \fi\fi
-}
-\@ltj@hook@series@default{bfseries}{%
+\AddToHook{bfseries/defaults}{%
\let\bfseries@mc\bfdef@ult
\let\bfseries@gt\bfdef@ult
\let\bfseries@jtt\bfdef@ult
-}{%
- \let\bfseries@rm\bfdef@ult
- \let\bfseries@sf\bfdef@ult
- \let\bfseries@tt\bfdef@ult
}
-\@ltj@hook@series@default{mdseries}{%
+\AddToHook{mdseries/defaults}{%
\let\mdseries@mc\mddef@ult
\let\mdseries@gt\mddef@ult
\let\mdseries@jtt\mddef@ult
-}{%
- \let\mdseries@rm\mddef@ult
- \let\mdseries@sf\mddef@ult
- \let\mdseries@tt\mddef@ult
}
-\let\@ltj@hook@series@default\@undefined
\expandafter\patchcmd\csname bfseries \endcsname{%
\ifx\f@family\rmdef@ult \fontseries\bfseries@rm
@@ -1105,105 +880,41 @@
\fi\fi\fi
}{}{}
-\def\@ltj@hook@series#1#2{%
- \ifltj@ltfilehook@avail % 2020-10-01
- \AddToHook{#1}{#2}%
- \else % 2020-02-02
- \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}%
- \fi
-}
-\@ltj@hook@series{bfseries}{%
+\AddToHook{bfseries}{%
\ifx\k@family\mcdef@ult \kanjiseries\bfseries@mc
\else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt
\else\ifx\k@family\jttdef@ult\kanjiseries\bfseries@jtt
\else \kanjiseries\bfdefault
\fi\fi\fi
}
-\@ltj@hook@series{mdseries}{%
+\AddToHook{mdseries}{%
\ifx\k@family\mcdef@ult \kanjiseries\mdseries@mc
\else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt
\else\ifx\k@family\jttdef@ult\kanjiseries\mdseries@jtt
\else \kanjiseries\mddefault
\fi\fi\fi
}
-\let\@ltj@hook@series\@undefined
-\def\@ltj@hook@efd#1#2{%
- \ifltj@ltfilehook@avail % 2020-10-01
- \AddToHook{expand@font@defaults}{#1}%
- \else\ifdefined\@expandfontdefaultshook %after 2020-04-07
- \g@addto@macro\@expandfontdefaultshook{#1#2}%
- \else % 2020-02-02
- \appto\expand@font@defaults{#1#2}%
- \fi\fi
-}
-\@ltj@hook@efd{%
+\AddToHook{expand@font@defaults}{%
\edef\mcdef@ult{\mcdefault}%
\edef\gtdef@ult{\gtdefault}%
\edef\jttdef@ult{\jttdefault}%
-}{\edef\kanjidef@ult{\kanjifamilydefault}}
-\let\@ltj@hook@efd\@undefined
+ \edef\kanjidef@ult{\kanjifamilydefault}}
-\ifltj@ltfilehook@avail % 2020-10-01
- \appto\init@series@setup{%
- \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel
- \mdseries
- \let\kanjiseriesdefault\k@series
- \fi
- }
-\else
- \appto\init@series@setup{%
- \ifx\kanjidef@ult\mcdef@ult \mcfamily
- \else\ifx\kanjidef@ult\gtdef@ult \gtfamily
- \else\ifx\kanjidef@ult\jttdef@ult \jttfamily
- \fi\fi\fi
- }
-\fi
-
-\def\@ltj@hook@dfh#1{%
- \ifltj@ltfilehook@avail % 2020-10-01
- \AddToHook{normalfont}{#1}%
- \else\ifdefined\@defaultfamilyhook
- \g@addto@macro\@defaultfamilyhook{#1}%
- \else % 2020-02-02
- \expandafter\patchcmd\csname normalfont \endcsname{\selectfont}{#1\selectfont}{}{}%
- \let\reset@font\normalfont
- \fi\fi
+\appto\init@series@setup{%
+ \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel
+ \mdseries
+ \let\kanjiseriesdefault\k@series
+ \fi
}
-\ifnum\ltj@@latex@plv>1499
-\@ltj@hook@dfh{%
+\AddToHook{normalfont}{%
\kanjiencoding{\kanjiencodingdefault}%
\edef\k@family{\kanjifamilydefault}%
\edef\k@series{\kanjiseriesdefault}%
\edef\k@shape{\kanjishapedefault}%
\let\delayed@k@adjustment\empty
}
-\else
-\@ltj@hook@dfh{%
- \kanjiencoding{\kanjiencodingdefault}%
- \edef\k@family{\kanjifamilydefault}%
- \edef\k@series{\kanjiseriesdefault}%
- \edef\k@shape{\kanjishapedefault}%
-}
-\fi
-\let\@ltj@hook@dfh\@undefined
-%%%% LaTeX >= 2020-02-02 END
-\else
-%%%% LaTeX 2019-10-01
-\DeclareRobustCommand\normalfont{%
- \useroman\encodingdefault\familydefault\seriesdefault\shapedefault
- \usekanji\kanjiencodingdefault\kanjifamilydefault\kanjiseriesdefault\kanjishapedefault}
-\let\reset@font\normalfont
-%%%% LaTeX 2019-10-01 END
-\fi
-
-
-
-\ifdefined\prepare@family@series@update@kanji\else
-%%%% LaTeX 2019-10-01
-\def\prepare@family@series@update@kanji#1{\kanjifamily}
-\fi
\DeclareRobustCommand\mcfamily{%
\unless\ifltj@disablejfam\not@math@alphabet\mcfamily\mathmc\fi
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
index 9575dc3c04..8005153571 100644
--- a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjp-array}[2019-07-18 Patch to array for LuaTeX-ja]
+\ProvidesPackage{lltjp-array}[2024-06-10 Patch to array for LuaTeX-ja]
\RequirePackage{etoolbox,array}
@@ -11,7 +11,14 @@
\ignorespaces\@sharp\unskip
}{%
\ltj@sharp
-}{}{}
+}{}{% >=2024-06-01
+ \def\ltj@sharp{\relax\pltx@next@inhibitglue\ltjfakeboxbdd\ignorespaces\@sharp\textonly@unskip\ltjfakeboxbdd}
+ \patchcmd\insert@column{%
+ \ignorespaces\@sharp\textonly@unskip
+ }{%
+ \ltj@sharp
+ }{}{}
+}
\@ifpackageloaded{lltjext}{}{%
%% remove extra \xkanjiskip (pLaTeX2e 2016/04/17)
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
index 67b0f5de7f..641fa4a34d 100644
--- a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
@@ -3,7 +3,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjp-geometry}[2021-10-24 Patch to geometry for LuaTeX-ja with vertical writing mode]
+\ProvidesPackage{lltjp-geometry}[2024-05-16 Patch to geometry for LuaTeX-ja with vertical writing mode]
\RequirePackage{expl3}
\ifdefined\if@ltj@@geometry@tate\expandafter\endinput\fi
\newif\if@ltj@@geometry@tate
@@ -31,15 +31,6 @@
%============================================
\unless\ifdefined\ltj@ExecuteAfterPackage
-\expandafter\newif\csname ifltj@ltfilehook@avail\endcsname
-\@ifl@t@r\fmtversion{2020-10-01}{%
- \@ifl@t@r\fmtversion{2020-10-02}{\ltj@ltfilehook@availtrue}
- {%
- \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi
- \else\ltj@ltfilehook@availtrue\fi
- }%
-}{}
-\ifltj@ltfilehook@avail
%% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code>
%% no-starred version: do nothing if the <package> is loaded
%% starred version: do <code> right away if the <package> is loaded
@@ -64,11 +55,6 @@
\@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}%
}
}
-\else
- \RequirePackage{filehook}
- \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile
- \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile
-\fi
\fi
%============================================
@@ -89,12 +75,8 @@
\else
\@gobble\iftrue\csname iftdir\endcsname \bool_set_true:N \l_tmpa_bool \fi
\fi
-\ifltj@ltfilehook@avail
- \prop_map_inline:Nn \g__hook_begindocument_code_prop
- { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} }
-\else
- \tl_if_in:NnT \@begindocumenthook {\tate} {\bool_set_true:N \l_tmpa_bool}
-\fi
+\prop_map_inline:Nn \g__hook_begindocument_code_prop
+ { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} }
\bool_if:NT \l_tmpa_bool {
\if@ltj@@geometry@forceoff
\@ltj@@geometry@tatefalse
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
index 9c4526c3fd..292cbf00bf 100644
--- a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
@@ -1,5 +1,5 @@
%
-% lltjp-siunitx.sty 2022-12-14
+% lltjp-siunitx.sty 2024-06-10
%
\NeedsTeXFormat{LaTeX2e}
@@ -7,7 +7,6 @@
\RequirePackage{siunitx}
\makeatletter
\ExplSyntaxOn
-\cs_if_exist:NTF \siunitx_print_text:n {% siunitx v3.00
\cs_set_protected:Npn \siunitx_print_text:n #1
{
\text
@@ -32,104 +31,26 @@
}
}
\cs_set_eq:NN \ltj_orig__siunitx_table_collect_begin:w \__siunitx_table_collect_begin:w
-\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 \relax
- { \ltj_orig__siunitx_table_collect_begin:w }
-\RenewDocumentCommand \tablenum { O { } m }
- {
- \mode_leave_vertical:
- \group_begin:
- \keys_set:nn { siunitx } {#1}
- \siunitx_cell_begin:w
- \relax \ignorespaces #2
- \siunitx_cell_end:
- \group_end:
- }
-}% siunitx v3.00 end
-{% siunitx v2.xx
-\cs_generate_variant:Nn \tl_if_in:NnT { coT }
-\cs_new:Nn \__ltj_siunix_patch_inner:n {
- \cs_if_exist:cT { #1_tl } {
- \tl_if_in:coT { #1_tl } { \tex_char:D } {
- \tl_replace_all:cnn { #1_tl } { \tex_char:D } { \ltjalchar }
- }
+\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 {
+ \token_if_eq_meaning:NNTF #1 \relax
+ {\ltj_orig__siunitx_table_collect_begin:w }
+ {\ltj_orig__siunitx_table_collect_begin:w #1 }
}
-}
-\cs_new:Nn \__ltj_siunix_patch_inner_math:n {
- \__ltj_siunix_patch_inner:n { l__siunitx_#1_math }
- \__ltj_siunix_patch_inner:n { l__siunitx_#1_text }
-}
-\AtBeginDocument {
- \__ltj_siunix_patch_inner:n { c__siunitx_minus }
- \__ltj_siunix_patch_inner:n { c__siunitx_mu }
- \__ltj_siunix_patch_inner_math:n { angstrom }
- \__ltj_siunix_patch_inner_math:n { arcminute }
- \__ltj_siunix_patch_inner_math:n { arcsecond }
- \__ltj_siunix_patch_inner_math:n { ohm }
-}
-
-%%%% new table column: S and s
-\bool_new:N \l__ltj_siunitx_table_collect_relax_bool
-\cs_set_protected:Npn \__siunitx_table_collect_begin_s: {
- \bool_set_false:N \l__ltj_siunitx_table_collect_relax_bool
- \cs_set_eq:NN \__siunitx_table_collect_token:N
- \__siunitx_table_collect_token_s:N
- \cs_set_eq:NN \__siunitx_table_print: \__siunitx_table_print_s:
- \__siunitx_table_collect_init_s:
- \__siunitx_table_collect_get:
-}
-
-\cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1
+\cs_set_protected:Npn \__siunitx_table_collect_token:N #1
{
- \token_if_eq_meaning:NNTF #1 \tex_relax:D {
- \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool {
- \__siunitx_table_collect_not_braced_aux_i:N #1
- } {
- \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool
- }
- } {
- \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd {
- \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue {
- \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D
+ \__siunitx_table_collect_search:NnF #1
{
- \token_if_eq_meaning:NNF #1 \tex_unskip:D
- { \__siunitx_table_collect_not_braced_aux_i:N #1 }
+ \ignorespaces { \__siunitx_table_collect_ignore_spaces:N #1}
+ \pltx@next@inhibitglue { \__siunitx_table_collect_loop:}
+ \ltjfakeboxbdd { \__siunitx_table_collect_loop:}
+ \textonly@unskip { \__siunitx_table_collect_loop:}
+ \unskip { \__siunitx_table_collect_loop:}
+ \end { \tabularnewline \end }
+ \relax { \__siunitx_table_collect_relax:N #1 }
+ \tabularnewline { \tabularnewline }
+ \siunitx_cell_end: { \siunitx_cell_end:}
}
- }}}
- \__siunitx_table_collect_next:
- }
-
-\AtBeginDocument
- {
- \@ifpackageloaded { mdwtab }
- {
- \cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1
- {
- \token_if_eq_meaning:NNTF #1 \tex_relax:D {
- \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool {
- \__siunitx_table_collect_not_braced_aux_i:N #1
- } {
- \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool
- }
- } {
- \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd {
- \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue {
- \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D
- {
- \token_if_eq_meaning:NNF #1 \tex_unskip:D
- {
- \token_if_eq_meaning:NNF #1 \tab@setcr
- {
- \token_if_eq_meaning:NNF #1 \@maybe@unskip
- { \__siunitx_table_collect_not_braced_aux_i:N #1 }
- }
- }
- }
- }}}
- \__siunitx_table_collect_next:
- }
- }
- { }
- }
+ { \__siunitx_table_collect_token_aux:N #1 }
}
\ExplSyntaxOff
\endinput
diff --git a/macros/luatex/generic/luaxml/README b/macros/luatex/generic/luaxml/README
index 5df074c453..6a81ab25ce 100644
--- a/macros/luatex/generic/luaxml/README
+++ b/macros/luatex/generic/luaxml/README
@@ -32,7 +32,7 @@ Author
------
Michal Hoftich
Email: michal.h21@gmail.com
-Version: v0.1r, 2024-02-23
+Version: v0.2, 2024-07-14
Original authors: Paul Chakravarti and Manoel Campos (http://manoelcampos.com)
diff --git a/macros/luatex/generic/luaxml/luaxml-cssquery.lua b/macros/luatex/generic/luaxml/luaxml-cssquery.lua
index ebb29abb15..452656845c 100644
--- a/macros/luatex/generic/luaxml/luaxml-cssquery.lua
+++ b/macros/luatex/generic/luaxml/luaxml-cssquery.lua
@@ -156,7 +156,7 @@ local function cssquery()
-- make sure we deal with a string
value = tostring(value)
-- make the search string safe for pattern matching
- local escaped_search = search:gsub("([%(%)%.%%%+%–%*%?%[%^%$])", "%%%1")
+ local escaped_search = search:gsub("([%(%)%.%%%+%-%#%*%?%[%^%$])", "%%%1")
if modifier == "" then
return value == search
elseif modifier == "|" then
@@ -434,6 +434,18 @@ local function cssquery()
return querylist
end
+ --- Remove selector from the CSS list object.
+ -- All actions that literaly match the given selector will be removed.
+ function CssQuery:remove_selector(
+ selector -- CSS selector to be removed
+ )
+ for pos, obj in ipairs(self.querylist) do
+ if obj.source == selector then
+ table.remove(self.querylist, pos)
+ end
+ end
+ end
+
--- It tests list of queries agaings a DOM element and executes the
--- coresponding function that is saved for the matched query.
-- @return nothing
diff --git a/macros/luatex/generic/luaxml/luaxml-domobject.lua b/macros/luatex/generic/luaxml/luaxml-domobject.lua
index 73689add5a..dca38df0db 100644
--- a/macros/luatex/generic/luaxml/luaxml-domobject.lua
+++ b/macros/luatex/generic/luaxml/luaxml-domobject.lua
@@ -6,16 +6,20 @@ local dom = {}
local xml
local handler
local css_query
+local html
if kpse then
xml = require("luaxml-mod-xml")
handler = require("luaxml-mod-handler")
css_query = require("luaxml-cssquery")
+ html = require("luaxml-mod-html")
else
xml = require("luaxml.mod-xml")
handler = require("luaxml.mod-handler")
css_query = require("luaxml.cssquery")
+ html = require("luaxml.mod-html")
end
+local HtmlParser = html.HtmlParser
local void = {area = true, base = true, br = true, col = true, hr = true, img = true, input = true, link = true, meta = true, param = true}
@@ -91,9 +95,14 @@ local function serialize_dom(parser, current,level, output)
local format = get_action(typ, "start")
insert(format, el, prepare_attributes(attr))
end
- local function text(typ, text)
+ local function text(typ, text, parent)
+ local parent = parent or {}
local format = get_action(typ, "text")
- insert(format, escape_element(text))
+ if parent.verbatim then
+ insert(format, text)
+ else
+ insert(format, escape_element(text))
+ end
end
local function stop(typ, el)
local format = get_action(typ, "stop")
@@ -141,7 +150,7 @@ local function serialize_dom(parser, current,level, output)
end
start(xtype, name, attributes)
- text(xtype,text_content)
+ text(xtype,text_content, (current or {})._parent)
local children = root._children or {}
for _, child in ipairs(children) do
output = serialize_dom(parser,child, level + 1, output)
@@ -411,8 +420,8 @@ local parse = function(
return strings
end
- --- Get table with the inner text of an element -- leading and trailing spaces are removed and elements that contain only white space are ignored.
- --- @return table
+ --- Get table with the inner text of an element - leading and trailing spaces are removed and elements that contain only white space are ignored.
+ -- @return table
function DOM_Object:stripped_strings(
current --- [optional] element to be selected
)
@@ -612,11 +621,83 @@ local parse = function(
-- include the methods to all xml nodes
save_methods(parser._handler.root)
-- parser:
- return parser
+ return parser, DOM_Object
+end
+
+-- table of elements that should be kept without XML escaping in the DOM serialization
+local verbatim_elements = {script=true, style=true}
+
+local function html_to_dom(html_object)
+ -- convert parsed HTML DOM to the XML DOM
+ local dom, DOM_Object = parse("") -- use empty text to just initialize the DOM object
+ -- use root of the DOM object as the original parent
+ local current_parent = dom._handler.root
+
+ local function create_node(tbl)
+ -- create node suitable for LuaXML DOM object
+ tbl._children = {}
+ -- this should copy methods from the DOM object to the newly created object
+ tbl.__index = DOM_Object
+ return setmetatable(tbl, DOM_Object)
+ end
+
+ local function build_tree(object)
+ -- convert tree produced by the HTML parser to LuaXML DOM
+ local typ = object._type
+ -- process particular node types from the HTML parser
+ if typ == "doctype" then
+ current_parent:add_child_node(create_node {_name=object.name, _type="DTD"})
+ elseif typ == "comment" then
+ current_parent:add_child_node(create_node {_text=object.text, _type="COMMENT"})
+ elseif typ == "element" then
+ local attributes = {}
+ -- convert attributes to the form expected by the DOM object
+ for _, attr in ipairs(object.attr) do
+ attributes[attr.name] = attr.value
+ end
+ local element = current_parent:create_element(object.tag, attributes)
+ -- disable escaping of text in dom:serialize() for <script> or <style> elements
+ if verbatim_elements[string.lower(object.tag)] then element.verbatim = true end
+ current_parent:add_child_node(element)
+ -- set the current element as parent for the processing of children
+ local old_parent = current_parent
+ current_parent = element
+ -- process children
+ for k,v in ipairs(object.children) do
+ build_tree(v)
+ end
+ -- restore original parent
+ current_parent = old_parent
+ elseif typ == "text" then
+ local text = current_parent:create_text_node(object.text)
+ current_parent:add_child_node(text)
+ else
+ -- for other node types, just process the children
+ for k,v in ipairs(object.children) do
+ build_tree(v)
+ end
+ end
+
+ end
+ build_tree(html_object)
+ return dom
+end
+
+--- Parse HTML text as a DOM object.
+-- It supports all methods as the object returned by the parse() function.
+-- @param html_str string with the HTML code to be parsed
+-- @return DOM_Object
+local function html_parse(html_str)
+ local html_obj = HtmlParser:init(html_str)
+ local html_dom = html_obj:parse()
+ return html_to_dom(html_dom)
end
+
+
--- @export
return {
parse = parse,
- serialize_dom= serialize_dom
+ serialize_dom= serialize_dom,
+ html_parse = html_parse
}
diff --git a/macros/luatex/generic/luaxml/luaxml-encodings.lua b/macros/luatex/generic/luaxml/luaxml-encodings.lua
new file mode 100644
index 0000000000..71bfc81dd1
--- /dev/null
+++ b/macros/luatex/generic/luaxml/luaxml-encodings.lua
@@ -0,0 +1,88 @@
+--- Convert 8-bit encodings to UTF-8
+--- @module luaxml-encodings
+-- this table is generated automatically by this command:
+-- texlua encodings/make_encodings.lua
+local encodings = {
+ ['ibm866'] = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ',
+ ['iso-8859-5'] = '�������������������������������� ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ',
+ ['macintosh'] = 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
+ ['windows-1251'] = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя',
+ ['iso-8859-13'] = '�������������������������������� ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’',
+ ['iso-8859-6'] = '�������������������������������� ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ',
+ ['iso-8859-8'] = '�������������������������������� �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏',
+ ['iso-8859-4'] = '�������������������������������� ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙',
+ ['koi8-r'] = '─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ',
+ ['iso-8859-7'] = '�������������������������������� ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ',
+ ['iso-8859-3'] = '�������������������������������� Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙',
+ ['windows-1256'] = '€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے',
+ ['windows-1258'] = '€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ',
+ ['iso-8859-14'] = '�������������������������������� Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ',
+ ['windows-1252'] = '€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ',
+ ['iso-8859-15'] = '�������������������������������� ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ',
+ ['x-mac-cyrillic'] = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю€',
+ ['windows-1254'] = '€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ',
+ ['windows-1255'] = '€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏',
+ ['windows-1250'] = '€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙',
+ ['koi8-u'] = '─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ',
+ ['iso-8859-10'] = '�������������������������������� ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ',
+ ['windows-1257'] = '€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙',
+ ['windows-1253'] = '€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ',
+ ['iso-8859-2'] = '�������������������������������� Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙',
+ ['windows-874'] = '€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛',
+ ['iso-8859-16'] = '�������������������������������� ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ',
+}
+
+
+local utfchar = utf8.char
+
+--- Try to find an encoding in HTML string
+---@param str string HTML document
+---@param len number count of characters from the start of the string where it should search for the encoding metadata
+---@return string encoding identifier, or nil and message if no encoding was found
+local function find_html_encoding(str, len)
+ -- try to find encoding in the html document
+ -- we limit search length, because encoding should be in the document head, ideally near the start
+ local len = len or 4096
+ local sub = str:sub(1, len)
+ for meta in sub:gmatch("<meta (.-)>") do
+ local charset = meta:match("charset%s*=%s*[\"']?(.-)[\"']")
+ if charset then return string.lower(charset) end
+ end
+ return nil, "Cannot find the document encoding"
+end
+
+local function load_mapping(enc_name)
+ local enc_name = enc_name or ""
+ local enc = encodings[enc_name]
+ if not enc then return nil, "Cannot load encoding " .. enc_name end
+ local mapping,i = {}, 128
+ for pos, codepoint in utf8.codes(enc) do
+ mapping[i] = utfchar(codepoint)
+ i = i + 1
+ end
+ return mapping
+end
+
+--- Convert string to utf-8
+---@param text string for converting
+---@param mapping table
+---@return string converted string
+local function recode(text, mapping)
+ return text:gsub("(.)", function(char)
+ local charpoint = string.byte(char)
+ if charpoint > 127 then
+ return mapping[charpoint]
+ else
+ return false
+ end
+ end)
+end
+
+
+return {
+ encodings = encodings,
+ find_html_encoding = find_html_encoding,
+ load_mapping = load_mapping,
+ recode = recode
+}
+
diff --git a/macros/luatex/generic/luaxml/luaxml-mod-html.lua b/macros/luatex/generic/luaxml/luaxml-mod-html.lua
index 69e32b16e2..d8c2b7e932 100644
--- a/macros/luatex/generic/luaxml/luaxml-mod-html.lua
+++ b/macros/luatex/generic/luaxml/luaxml-mod-html.lua
@@ -1,3 +1,6 @@
+--- HTML parsing module for LuaXML
+-- @module luaxml-mod-html
+-- @author Michal Hoftich <michal.h21@gmail.com
-- Copyright Michal Hoftich, 2022
-- HTML parser inspired by https://browser.engineering/html.html
-- but then redone using https://html.spec.whatwg.org/multipage/parsing.html
@@ -1540,9 +1543,14 @@ local function is_formatting_element(name)
return formatting_element_names[name]
end
-local special_elements = {}
+local function hash_from_array(tbl)
+ local t = {}
+ for _, v in ipairs(tbl) do t[v] = true end
+ return t
+end
+
-local special_elements_list = {"address", "applet", "area", "article", "aside",
+local special_elements_list = hash_from_array {"address", "applet", "area", "article", "aside",
"base", "basefont", "bgsound", "blockquote", "body", "br", "button", "caption",
"center", "col", "colgroup", "dd", "details", "dir", "div", "dl", "dt",
"embed", "fieldset", "figcaption", "figure", "footer", "form", "frame",
@@ -1555,13 +1563,9 @@ local special_elements_list = {"address", "applet", "area", "article", "aside",
"mi","mo","mn","ms","mtext", "annotation-xml","foreignObject","desc", "title"
}
-for k,v in ipairs(special_elements_list) do
- special_elements[v] = true
-end
-
local function is_special(name)
- return special_elements[name]
+ return special_elements_list[name]
end
-- these lists are used in HtmlParser:generate_implied_endtags()
@@ -1649,8 +1653,12 @@ local HtmlTreeStates = {}
+--- @type HtmlParser
local HtmlParser = {}
+--- Initialize the HTML Object
+---@param body string HTML to be parsed
+---@return table initialized object
function HtmlParser:init(body)
local o ={}
setmetatable(o, self)
@@ -1686,10 +1694,11 @@ for _,v in ipairs(self_closing_tags_list) do self_closing_tags[v] = true end
-
+--- Execute the HTML parser
+--- @return table Root node of the HTML DOM
function HtmlParser:parse()
-- we assume utf8 input, you must convert it yourself if the source is
- -- in a different encoding
+ -- in a different encoding. for example using luaxml-encodings library
self.text = {}
self.state = self.default_state
-- this should enable us to pass over some characters that we want to ignore
@@ -1791,6 +1800,7 @@ function HtmlParser:emit(token)
elseif token_type == "start_tag" then
self:add_text()
-- self:start_attribute()
+ self:reset_insertion_mode()
self:start_tag()
-- print("Emit start tag", table.concat(token.name))
-- save last attribute
@@ -1882,8 +1892,139 @@ function HtmlParser:set_xmlns(node, parent)
end
end
+function HtmlParser:pop_element()
+ -- close the current element and add it to the DOM
+ local el = self:close_element()
+ local parent = self:get_parent()
+ parent:add_child(el)
+ return el
+end
+
+local close_p_at_start = hash_from_array {"address", "article", "aside", "blockquote", "center", "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", "search", "section", "summary", "ul", "pre", "listing", "form", "table", "xmp", "hr"}
+
+local close_headers = hash_from_array {"h1", "h2", "h3", "h4", "h5", "h6"}
+
+local body_modes = hash_from_array {"in_body", "in_cell", "in_row", "in_select", "in_table", "in_table_body", "in_frameset"}
+
+local list_items = hash_from_array {"li", "dt", "dd"}
+
+local close_address_at_end = hash_from_array{"address", "article", "aside", "blockquote", "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", "search", "section", "summary", "ul", "form"}
+
+
+function HtmlParser:close_unfinished(name)
+ -- close all unfinished elements until the element with the given name is found
+ for i = #self.unfinished, 1, -1 do
+ local el = self:pop_element()
+ if el.tag == name then
+ break
+ end
+ end
+end
+
+
+function HtmlParser:close_paragraph()
+ -- close currently open <p> elements
+ self:close_unfinished("p")
+end
+
+function HtmlParser:current_element_name()
+ -- return name of the current element
+ return self:get_parent().tag
+end
+
+local not_specials = hash_from_array { "address", "div", "p"}
+
+local function handle_list_item(self, name)
+ -- we handle li, dt and dd. dt and dd should close each other, li closes only itself
+ local names = {dt = true, dd = true}
+ if name == "li" then names = {li=true} end
+ for i = #self.unfinished, 1, -1 do
+ local current = self.unfinished[i]
+ local current_tag = current.tag
+ if names[current_tag] then
+ self:generate_implied_endtags(nil, {current.tag})
+ for j = #self.unfinished, i, -1 do
+ self:pop_element()
+ end
+ break
+ elseif is_special(current_tag) and not not_specials[name] then
+ break
+ end
+ end
+end
+
+local close_paragraph = function(self)
+ if is_in_button_scope(self, "p") then
+ self:close_paragraph()
+ end
+end
+
+function HtmlParser:handle_insertion_mode(token)
+ -- simple handling of https://html.spec.whatwg.org/multipage/parsing.html#tree-construction
+ -- we don't support most rules, just the most important for avoiding mismatched tags
+
+ if body_modes[self.insertion_mode] then
+ if token.type == "start_tag" then
+ local name = table.concat(token.name)
+ if close_p_at_start[name] then close_paragraph(self) end
+ if close_headers[name] then
+ close_paragraph(self)
+ -- close current element if it is already header
+ if close_headers[self:current_element_name()] then
+ self:pop_element()
+ end
+ elseif name == "pre" or name == "listing" then
+ -- we should ignore next "\n" char token
+ elseif name == "image" then
+ -- image tag is an error, change to <img>
+ token.name = {"img"}
+ elseif list_items[name] then
+ handle_list_item(self, name)
+ close_paragraph(self)
+ end
+ elseif token.type == "end_tag" then
+ local name = table.concat(token.name)
+ if close_address_at_end[name] then
+ if is_in_scope(self, name, {}) then
+ self:close_unfinished(name)
+ else
+ token.type = "ignore"
+ end
+ elseif name == "p" then
+ if not is_in_button_scope(self, "p") then
+ local parent = self:get_parent()
+ local node = Element:init("p", parent)
+ table.insert(self.unfinished, node)
+ end
+ -- use self:close_paragraph() instead of close_paragraph() because we don't need to check scope at this point
+ self:close_paragraph()
+ elseif name == "br" then
+ token.type = "start_tag"
+ elseif close_headers[name] then
+ local header_in_scope = false
+ -- detect, if there are any open h1-h6 tag and close it
+ for el, _ in pairs(close_headers) do
+ if is_in_scope(self, el, {}) then
+ header_in_scope = el
+ break
+ end
+ end
+ if not header_in_scope then
+ token.type = "ignore"
+ else
+ self:close_unfinished(header_in_scope)
+ end
+ end
+ end
+ end
+end
+
+local rawtext_elements = hash_from_array {"style", "textarea", "xmp"}
+
+
function HtmlParser:start_tag()
local token = self.current_token
+ self:handle_insertion_mode(token)
if token.type == "start_tag" then
-- close all currently opened attributes
self:start_attribute()
@@ -1894,18 +2035,18 @@ function HtmlParser:start_tag()
node.attr = token.attr
node.self_closing = token.self_closing
self:set_xmlns(node)
- --
+ -- in this handler we should close <p> or <li> elements without explicit closing tags
if token.self_closing -- <img />
or self_closing_tags[name] -- void elements
then
- parent:add_child(node)
+ parent:add_child(node, node.tag)
else
-- add to the unfinished list
table.insert(self.unfinished, node)
end
if name == "title" then
self.element_state = "rcdata"
- elseif name == "style" then
+ elseif rawtext_elements[name] then
self.element_state = "rawtext"
elseif name == "script" then
self.element_state = "script_data"
@@ -1916,11 +2057,13 @@ end
function HtmlParser:end_tag()
-- close current opened element
local token = self.current_token
+ self:handle_insertion_mode(token)
if token.type == "end_tag" then
if #self.unfinished==0 then return nil end
- local node = self:close_element()
- local parent = self:get_parent()
- parent:add_child(node)
+ -- close the current element only if the token is in the current scope
+ if is_in_scope(self, table.concat(token.name), {}) then
+ self:pop_element()
+ end
end
end
@@ -1964,6 +2107,21 @@ function HtmlParser:adjusted_current_node()
end
+local simple_modes = {
+ body = "in_body",
+ td = "in_cell",
+ th = "in_cell",
+ tr = "in_row",
+ tbody = "in_table_body",
+ thead = "in_table_body",
+ tfoot = "in_table_body",
+ caption = "in_caption",
+ colgroup = "in_column_group",
+ table = "in_table",
+ template = "current_template_insertion_mode",
+ frameset = "in_frameset"
+}
+
function HtmlParser:reset_insertion_mode()
-- https://html.spec.whatwg.org/multipage/parsing.html#reset-the-insertion-mode-appropriately
local last = false
@@ -1977,16 +2135,33 @@ function HtmlParser:reset_insertion_mode()
if name == "head" and last == true then
self:switch_insertion("in_head")
return
- elseif name == "body" then
- self:switch_insertion("in_body")
- return
elseif name == "html" then
- if self.head_pointer then
+ if not self.head_pointer then
self:switch_insertion("before_head")
return
else
self:switch_insertion("after_head")
+ return
+ end
+ elseif name == "select" then
+ if not last then
+ for x = position -1, 1, -1 do
+ if x == 1 then break end
+ local ancestor = self.unfinished[x]
+ local ancestor_name = ancestor.tag
+ if ancestor_name == "template" then
+ break
+ elseif ancestor_name == "table" then
+ self:switch_insertion("in_select_in_table")
+ return
+ end
+ end
end
+ self:switch_insertion("in_select")
+ return
+ elseif simple_modes[name] then
+ self:switch_insertion(simple_modes[name])
+ return
elseif last == true then
self:switch_insertion("in_body")
return
@@ -2006,8 +2181,8 @@ function HtmlParser:generate_implied_endtags(included, ignored)
local current = self:current_node() or {}
-- keep removing elements while they are in the "included" list
if included[current.tag] then
- table.remove(self.unfinished)
- self:generate_implied_endtags(ignored)
+ self:pop_element()
+ self:generate_implied_endtags(included, ignored)
end
end
@@ -2023,9 +2198,7 @@ function HtmlParser:finish()
self:start_tag("html")
end
while #self.unfinished > 0 do
- local node = self:close_element()
- local parent = self:get_parent()
- parent:add_child(node)
+ self:pop_element()
end
-- return root element
return self.Document -- self:close_element()
diff --git a/macros/luatex/generic/luaxml/luaxml-namedentities.lua b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
index 0e6399ab13..5c5ff00777 100644
--- a/macros/luatex/generic/luaxml/luaxml-namedentities.lua
+++ b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
@@ -1,2234 +1,2233 @@
-local utf8 = require "utf8"
return {
-["Subset"]="⋐",
-["Chi"]="Χ",
-["tprime"]="‴",
-["lneq"]="⪇",
-["RightUpTeeVector"]="⥜",
-["cscr"]="𝒸",
-["leftrightarrows"]="⇆",
-["LeftRightVector"]="⥎",
-["Laplacetrf"]="ℒ",
-["boxHd"]="╤",
-["GreaterSlantEqual"]="⩾",
-["sqsub"]="⊏",
-["nvdash"]="⊬",
-["boxHu"]="╧",
-["vcy"]="в",
-["DiacriticalDoubleAcute"]="˝",
-["nvHarr"]="⤄",
-["lnapprox"]="⪉",
-["fscr"]="𝒻",
-["OverBracket"]="⎴",
-["pm"]="±",
-["ovbar"]="⌽",
-["larrhk"]="↩",
-["atilde"]="ã",
-["Igrave"]="Ì",
-["profsurf"]="⌓",
-["Sigma"]="Σ",
-["rHar"]="⥤",
-["Gcedil"]="Ģ",
-["sect"]="§",
-["nmid"]="∤",
-["escr"]="ℯ",
-["delta"]="δ",
-["male"]="♂",
-["Integral"]="∫",
-["RightUpVectorBar"]="⥔",
-["alefsym"]="ℵ",
-["nsqsube"]="⋢",
-["Nacute"]="Ń",
-["mcomma"]="⨩",
-["ApplyFunction"]=utf8.char(0x2061),
-["rfisht"]="⥽",
-["phmmat"]="ℳ",
-["rarrw"]="↝",
-["backepsilon"]="϶",
-["hscr"]="𝒽",
-["middot"]="·",
-["ldrushar"]="⥋",
-["supne"]="⊋",
-["Longleftrightarrow"]="⟺",
-["Oacute"]="Ó",
-["af"]="⁡",
+["Implies"]="⇒",
+["longrightarrow"]="⟶",
+["precneqq"]="⪵",
+["geqslant"]="⩾",
+["Product"]="∏",
+["Scirc"]="Ŝ",
+["lvnE"]="≨︀",
+["dotminus"]="∸",
+["sscr"]="𝓈",
+["capdot"]="⩀",
+["dlcrop"]="⌍",
+["omacr"]="ō",
+["sext"]="✶",
+["xutri"]="△",
+["xrArr"]="⟹",
+["glE"]="⪒",
+["NotSupersetEqual"]="⊉",
+["backsim"]="∽",
["sup"]="⊃",
-["lozenge"]="◊",
-["scy"]="с",
-["gscr"]="ℊ",
-["smallsetminus"]="∖",
+["realpart"]="ℜ",
["hardcy"]="ъ",
-["DoubleVerticalBar"]="∥",
-["Yuml"]="Ÿ",
-["plusdu"]="⨥",
-["NotSucceedsSlantEqual"]="⋡",
-["nwnear"]="⤧",
-["lfloor"]="⌊",
-["rcy"]="р",
-["jscr"]="𝒿",
-["AMP"]="&",
-["acute"]="´",
-["uacute"]="ú",
-["Or"]="⩔",
-["rdldhar"]="⥩",
-["langd"]="⦑",
-["Iacute"]="Í",
-["spar"]="∥",
-["ucy"]="у",
-["rsh"]="↱",
-["Kcedil"]="Ķ",
-["iscr"]="𝒾",
-["lambda"]="λ",
-["lbrkslu"]="⦍",
-["napE"]="⩰̸",
-["shcy"]="ш",
-["nsupE"]="⫆̸",
-["Ycirc"]="Ŷ",
-["sect"]="§",
-["precnapprox"]="⪹",
-["iocy"]="ё",
-["dzcy"]="џ",
+["sqcap"]="⊓",
+["brvbar"]="¦",
+["LT"]="<",
+["udarr"]="⇅",
+["lozf"]="⧫",
+["Eogon"]="Ę",
+["frac18"]="⅛",
+["lesssim"]="≲",
+["wedbar"]="⩟",
+["EmptyVerySmallSquare"]="▫",
+["aring"]="å",
+["lesdoto"]="⪁",
+["ltquest"]="⩻",
+["LeftUpTeeVector"]="⥠",
+["FilledSmallSquare"]="◼",
+["mho"]="℧",
+["NotGreaterTilde"]="≵",
+["xharr"]="⟷",
+["NotSucceedsEqual"]="⪰̸",
+["sqsupset"]="⊐",
+["Ccedil"]="Ç",
+["aacute"]="á",
+["succcurlyeq"]="≽",
+["gneq"]="⪈",
+["forall"]="∀",
+["rightharpoonup"]="⇀",
+["leftarrow"]="←",
+["ang"]="∠",
+["mapstoup"]="↥",
+["xscr"]="𝓍",
+["NotTildeEqual"]="≄",
+["ograve"]="ò",
+["boxdl"]="┐",
+["DownLeftVectorBar"]="⥖",
+["nsup"]="⊅",
+["shchcy"]="щ",
+["demptyv"]="⦱",
+["apos"]="'",
+["between"]="≬",
+["leftrightsquigarrow"]="↭",
+["gtcc"]="⪧",
+["grave"]="`",
+["bigodot"]="⨀",
+["oline"]="‾",
+["angmsdad"]="⦫",
+["NotCongruent"]="≢",
+["gtquest"]="⩼",
+["fltns"]="▱",
+["smeparsl"]="⧤",
+["Eta"]="Η",
+["ltdot"]="⋖",
+["rhard"]="⇁",
+["rscr"]="𝓇",
["ETH"]="Ð",
-["GreaterTilde"]="≳",
-["coprod"]="∐",
-["rpar"]=")",
-["lthree"]="⋋",
-["ImaginaryI"]="ⅈ",
-["DoubleUpDownArrow"]="⇕",
-["intercal"]="⊺",
-["spadesuit"]="♠",
-["boxVH"]="╬",
-["smashp"]="⨳",
-["nu"]="ν",
-["Agrave"]="À",
-["boxtimes"]="⊠",
-["sext"]="✶",
-["nsub"]="⊄",
-["oelig"]="œ",
-["GreaterEqual"]="≥",
-["TRADE"]="™",
-["dtrif"]="▾",
-["nless"]="≮",
-["mu"]="μ",
-["larrsim"]="⥳",
-["GreaterEqualLess"]="⋛",
-["Uuml"]="Ü",
-["LeftArrowBar"]="⇤",
-["ntrianglerighteq"]="⋭",
-["DiacriticalDot"]="˙",
-["LongLeftArrow"]="⟵",
-["agrave"]="à",
-["lmoustache"]="⎰",
-["nvDash"]="⊭",
-["para"]="¶",
-["nlt"]="≮",
-["Eacute"]="É",
-["spades"]="♠",
-["lrcorner"]="⌟",
-["checkmark"]="✓",
-["lessdot"]="⋖",
-["opar"]="⦷",
-["nVDash"]="⊯",
-["pertenk"]="‱",
-["range"]="⦥",
-["Pr"]="⪻",
-["Gammad"]="Ϝ",
-["ape"]="≊",
-["Longleftarrow"]="⟸",
-["boxV"]="║",
-["rightthreetimes"]="⋌",
+["iocy"]="ё",
+["semi"]=";",
+["nexists"]="∄",
+["approxeq"]="≊",
+["compfn"]="∘",
+["sstarf"]="⋆",
+["angrtvbd"]="⦝",
["gnap"]="⪊",
-["vzigzag"]="⦚",
-["Ecirc"]="Ê",
-["npar"]="∦",
-["notinvb"]="⋷",
-["Tau"]="Τ",
-["blank"]="␣",
-["Kappa"]="Κ",
-["rmoust"]="⎱",
-["GJcy"]="Ѓ",
-["ufisht"]="⥾",
-["NotLeftTriangleBar"]="⧏̸",
-["bigvee"]="⋁",
-["lrhar"]="⇋",
-["supset"]="⊃",
-["uwangle"]="⦧",
-["UpTeeArrow"]="↥",
-["supE"]="⫆",
-["imof"]="⊷",
-["leg"]="⋚",
-["notniva"]="∌",
-["nvgt"]=">⃒",
-["rthree"]="⋌",
-["yfr"]="𝔶",
-["uHar"]="⥣",
-["nshortmid"]="∤",
-["biguplus"]="⨄",
-["barvee"]="⊽",
-["iff"]="⇔",
-["boxvH"]="╪",
-["simrarr"]="⥲",
-["Egrave"]="È",
-["ntilde"]="ñ",
-["VerticalTilde"]="≀",
-["sigmaf"]="ς",
-["khcy"]="х",
-["planck"]="ℏ",
-["NotNestedGreaterGreater"]="⪢̸",
-["NonBreakingSpace"]=" ",
-["OpenCurlyQuote"]="‘",
-["supsim"]="⫈",
-["cudarrl"]="⤸",
-["theta"]="θ",
-["notindot"]="⋵̸",
-["Omicron"]="Ο",
-["ccedil"]="ç",
-["colone"]="≔",
-["bscr"]="𝒷",
-["Dagger"]="‡",
-["comma"]=",",
+["mDDot"]="∺",
+["udblac"]="ű",
["Acirc"]="Â",
-["plankv"]="ℏ",
-["boxdr"]="┌",
-["rarrap"]="⥵",
-["rmoustache"]="⎱",
-["LeftAngleBracket"]="⟨",
-["Cacute"]="Ć",
-["blk34"]="▓",
-["rfloor"]="⌋",
-["awconint"]="∳",
-["sfrown"]="⌢",
-["middot"]="·",
-["ascr"]="𝒶",
-["dot"]="˙",
-["caron"]="ˇ",
-["image"]="ℑ",
-["esdot"]="≐",
-["ohbar"]="⦵",
-["rarrb"]="⇥",
-["submult"]="⫁",
-["plusb"]="⊞",
-["oopf"]="𝕠",
-["breve"]="˘",
-["conint"]="∮",
-["angrt"]="∟",
-["nbump"]="≎̸",
-["raquo"]="»",
-["Iuml"]="Ï",
-["Rcedil"]="Ŗ",
-["minus"]="−",
-["nsucceq"]="⪰̸",
-["telrec"]="⌕",
-["CHcy"]="Ч",
-["nrightarrow"]="↛",
-["NotRightTriangle"]="⋫",
-["zfr"]="𝔷",
-["succ"]="≻",
-["Aacute"]="Á",
-["NestedLessLess"]="≪",
-["RightTeeArrow"]="↦",
-["homtht"]="∻",
-["Cup"]="⋓",
-["lcub"]="{",
-["race"]="∽̱",
-["THORN"]="Þ",
-["propto"]="∝",
-["odblac"]="ő",
-["mumap"]="⊸",
-["filig"]="fi",
-["ecir"]="≖",
-["DoubleRightArrow"]="⇒",
-["npreceq"]="⪯̸",
-["female"]="♀",
-["LeftFloor"]="⌊",
-["gtrarr"]="⥸",
-["dotsquare"]="⊡",
-["map"]="↦",
-["OverBrace"]="⏞",
-["zopf"]="𝕫",
-["rang"]="⟩",
-["laquo"]="«",
-["elsdot"]="⪗",
-["frac56"]="⅚",
-["Iuml"]="Ï",
-["ocirc"]="ô",
-["clubs"]="♣",
-["IOcy"]="Ё",
-["scnE"]="⪶",
-["deg"]="°",
-["simgE"]="⪠",
-["nap"]="≉",
-["blacktriangle"]="▴",
-["edot"]="ė",
-["epsiv"]="ϵ",
-["napprox"]="≉",
-["NotGreaterSlantEqual"]="⩾̸",
-["prap"]="⪷",
-["lnap"]="⪉",
-["circledS"]="Ⓢ",
-["lang"]="⟨",
-["qprime"]="⁗",
-["aelig"]="æ",
-["ncongdot"]="⩭̸",
-["supdsub"]="⫘",
-["nltrie"]="⋬",
-["xopf"]="𝕩",
+["UnderParenthesis"]="⏝",
+["nisd"]="⋺",
+["lneq"]="⪇",
+["Dagger"]="‡",
+["qscr"]="𝓆",
+["gneqq"]="≩",
+["doteqdot"]="≑",
+["DoubleVerticalBar"]="∥",
+["emptyset"]="∅",
+["lEg"]="⪋",
+["subseteq"]="⊆",
+["dwangle"]="⦦",
+["dotplus"]="∔",
+["NotPrecedesSlantEqual"]="⋠",
+["bnot"]="⌐",
["LeftDownVector"]="⇃",
-["duarr"]="⇵",
-["urcorner"]="⌝",
-["nvltrie"]="⊴⃒",
-["Pi"]="Π",
+["leg"]="⋚",
+["Therefore"]="∴",
+["Omega"]="Ω",
+["acE"]="∾̳",
+["Auml"]="Ä",
+["xvee"]="⋁",
["Eacute"]="É",
-["nGtv"]="≫̸",
-["icirc"]="î",
-["twoheadleftarrow"]="↞",
+["LeftFloor"]="⌊",
+["swnwar"]="⤪",
+["Jukcy"]="Є",
+["nless"]="≮",
+["NotSquareSupersetEqual"]="⋣",
+["larrfs"]="⤝",
+["gcy"]="г",
+["solbar"]="⌿",
+["rharul"]="⥬",
+["dscy"]="ѕ",
+["yen"]="¥",
+["ForAll"]="∀",
+["DownArrow"]="↓",
+["qprime"]="⁗",
+["NegativeThickSpace"]="​",
+["part"]="∂",
+["Iukcy"]="І",
+["ltcc"]="⪦",
+["xlArr"]="⟸",
+["fcy"]="ф",
+["gl"]="≷",
+["rsh"]="↱",
+["lrhar"]="⇋",
["divide"]="÷",
-["yopf"]="𝕪",
-["ntlg"]="≸",
-["Darr"]="↡",
+["bemptyv"]="⦰",
+["rx"]="℞",
+["ecy"]="э",
+["ApplyFunction"]="⁡",
+["divideontimes"]="⋇",
+["prod"]="∏",
+["boxHU"]="╩",
+["HARDcy"]="Ъ",
+["mstpos"]="∾",
+["llcorner"]="⌞",
+["rsquor"]="’",
+["NotTildeFullEqual"]="≇",
+["mlcp"]="⫛",
+["cemptyv"]="⦲",
+["Proportional"]="∝",
+["DiacriticalDoubleAcute"]="˝",
+["dcy"]="д",
+["Yacute"]="Ý",
+["egsdot"]="⪘",
["hslash"]="ℏ",
-["Coproduct"]="∐",
-["profline"]="⌒",
-["imagline"]="ℐ",
-["chcy"]="ч",
-["ccedil"]="ç",
-["PrecedesEqual"]="⪯",
-["jcirc"]="ĵ",
-["nang"]="∠⃒",
-["Icirc"]="Î",
-["nbumpe"]="≏̸",
-["incare"]="℅",
-["tint"]="∭",
-["nhArr"]="⇎",
-["emsp13"]=" ",
-["blacktriangleleft"]="◂",
-["Star"]="⋆",
-["hkswarow"]="⤦",
-["NegativeThickSpace"]="​",
-["eDot"]="≑",
-["Euml"]="Ë",
-["scaron"]="š",
-["RightDownVectorBar"]="⥕",
-["cent"]="¢",
-["jukcy"]="є",
-["backsimeq"]="⋍",
-["Ncy"]="Н",
-["DD"]="ⅅ",
-["circledast"]="⊛",
-["ccirc"]="ĉ",
-["rsaquo"]="›",
-["YIcy"]="Ї",
-["iquest"]="¿",
-["NotExists"]="∄",
-["iukcy"]="і",
-["Tab"]=" ",
-["Equilibrium"]="⇌",
-["nLt"]="≪⃒",
-["yen"]="¥",
-["CircleDot"]="⊙",
-["CircleMinus"]="⊖",
-["topf"]="𝕥",
-["equivDD"]="⩸",
-["DoubleLeftRightArrow"]="⇔",
-["ngsim"]="≵",
-["upuparrows"]="⇈",
-["ll"]="≪",
-["cirscir"]="⧂",
-["ShortLeftArrow"]="←",
-["angmsdag"]="⦮",
-["shortmid"]="∣",
-["ngeqslant"]="⩾̸",
-["subset"]="⊂",
-["curvearrowleft"]="↶",
-["gdot"]="ġ",
-["circledcirc"]="⊚",
-["Pcy"]="П",
-["asymp"]="≈",
-["boxUr"]="╙",
-["uopf"]="𝕦",
-["frac15"]="⅕",
-["Iacute"]="Í",
-["Utilde"]="Ũ",
-["Congruent"]="≡",
-["nhpar"]="⫲",
-["capbrcup"]="⩉",
-["ordf"]="ª",
-["SOFTcy"]="Ь",
-["nlArr"]="⇍",
-["not"]="¬",
-["ffllig"]="ffl",
-["nprec"]="⊀",
-["Hat"]="^",
+["infin"]="∞",
["Auml"]="Ä",
-["ntriangleleft"]="⋪",
-["longmapsto"]="⟼",
-["nvrtrie"]="⊵⃒",
-["timesb"]="⊠",
-["lsh"]="↰",
-["Jcy"]="Й",
-["gcirc"]="ĝ",
-["Oacute"]="Ó",
-["vartriangleright"]="⊳",
-["NotRightTriangleEqual"]="⋭",
-["Rightarrow"]="⇒",
-["ast"]="*",
-["hamilt"]="ℋ",
-["Ncedil"]="Ņ",
-["apE"]="⩰",
-["macr"]="¯",
-["cwconint"]="∲",
-["Kcy"]="К",
-["Ucirc"]="Û",
-["hcirc"]="ĥ",
-["yacy"]="я",
-["uml"]="¨",
-["popf"]="𝕡",
-["bumpE"]="⪮",
-["varnothing"]="∅",
-["RightUpVector"]="↾",
-["curren"]="¤",
-["Scedil"]="Ş",
-["FilledVerySmallSquare"]="▪",
-["dollar"]="$",
-["Lcy"]="Л",
-["longrightarrow"]="⟶",
-["LeftTee"]="⊣",
-["excl"]="!",
-["acirc"]="â",
-["wp"]="℘",
-["lcaron"]="ľ",
-["NotGreaterFullEqual"]="≧̸",
-["CounterClockwiseContourIntegral"]="∳",
-["sup2"]="²",
-["rnmid"]="⫮",
-["Lcedil"]="Ļ",
-["ddotseq"]="⩷",
-["tbrk"]="⎴",
-["mlcp"]="⫛",
-["rarrhk"]="↪",
-["Tilde"]="∼",
-["Mcy"]="М",
-["aring"]="å",
-["rarrsim"]="⥴",
-["nopf"]="𝕟",
-["aelig"]="æ",
-["order"]="ℴ",
-["diamondsuit"]="♦",
-["nvsim"]="∼⃒",
-["lhard"]="↽",
-["commat"]="@",
-["qint"]="⨌",
-["lsquo"]="‘",
-["sqcaps"]="⊓︀",
-["circlearrowleft"]="↺",
-["NotElement"]="∉",
-["measuredangle"]="∡",
-["Atilde"]="Ã",
-["CapitalDifferentialD"]="ⅅ",
-["kgreen"]="ĸ",
-["Cscr"]="𝒞",
+["Wcirc"]="Ŵ",
+["larrtl"]="↢",
+["Aacute"]="Á",
+["LeftTriangleEqual"]="⊴",
+["NegativeMediumSpace"]="​",
+["TripleDot"]="⃛",
+["utdot"]="⋰",
+["isinv"]="∈",
+["looparrowright"]="↬",
+["loang"]="⟬",
+["multimap"]="⊸",
["NotLessEqual"]="≰",
-["trpezium"]="⏢",
-["ne"]="≠",
-["NotSuperset"]="⊃⃒",
-["nearrow"]="↗",
-["ncong"]="≇",
-["doteqdot"]="≑",
-["supmult"]="⫂",
-["longleftrightarrow"]="⟷",
-["Rarr"]="↠",
-["DoubleUpArrow"]="⇑",
-["Dscr"]="𝒟",
-["mp"]="∓",
-["jmath"]="ȷ",
-["erarr"]="⥱",
-["searrow"]="↘",
-["Sup"]="⋑",
-["lvnE"]="≨︀",
-["ffilig"]="ffi",
-["NotSquareSupersetEqual"]="⋣",
-["bullet"]="•",
-["bigstar"]="★",
-["cylcty"]="⌭",
-["nvle"]="≤⃒",
-["TildeFullEqual"]="≅",
-["lopf"]="𝕝",
-["sqsupseteq"]="⊒",
-["lt"]="<",
-["geqslant"]="⩾",
+["midcir"]="⫰",
+["nge"]="≱",
["quot"]="\"",
-["le"]="≤",
-["square"]="□",
-["sigma"]="σ",
-["prE"]="⪳",
-["rtrie"]="⊵",
-["triangleq"]="≜",
+["REG"]="®",
+["div"]="÷",
+["complexes"]="ℂ",
+["lhblk"]="▄",
+["gvnE"]="≩︀",
+["leftharpoonup"]="↼",
+["it"]="⁢",
+["clubsuit"]="♣",
+["iff"]="⇔",
+["Hacek"]="ˇ",
+["CircleTimes"]="⊗",
+["Cacute"]="Ć",
+["rarrtl"]="↣",
+["RightDownVector"]="⇂",
+["rarrfs"]="⤞",
+["UpArrowBar"]="⤒",
+["male"]="♂",
+["RightTriangle"]="⊳",
+["GreaterTilde"]="≳",
+["Barwed"]="⌆",
+["ltlarr"]="⥶",
+["Zdot"]="Ż",
+["parsim"]="⫳",
+["Ugrave"]="Ù",
+["Dot"]="¨",
+["circleddash"]="⊝",
+["rsaquo"]="›",
+["hyphen"]="‐",
+["angrt"]="∟",
+["RightTriangleEqual"]="⊵",
+["Darr"]="↡",
+["ulcrop"]="⌏",
+["olcir"]="⦾",
+["gimel"]="ℷ",
+["gel"]="⋛",
+["SquareSubset"]="⊏",
+["Uacute"]="Ú",
+["gt"]=">",
+["lnap"]="⪉",
+["Union"]="⋃",
+["nu"]="ν",
+["and"]="∧",
+["ltcir"]="⩹",
["Fscr"]="ℱ",
+["ee"]="ⅇ",
+["laquo"]="«",
+["Hfr"]="ℌ",
+["prec"]="≺",
+["imagline"]="ℐ",
+["precnsim"]="⋨",
+["zhcy"]="ж",
+["mu"]="μ",
+["rlarr"]="⇄",
+["pound"]="£",
+["origof"]="⊶",
+["rfloor"]="⌋",
+["lnsim"]="⋦",
+["nVdash"]="⊮",
+["otimes"]="⊗",
+["iuml"]="ï",
+["Cscr"]="𝒞",
+["lsime"]="⪍",
+["ngeqq"]="≧̸",
+["Del"]="∇",
+["Coproduct"]="∐",
+["NotSubsetEqual"]="⊈",
+["HilbertSpace"]="ℋ",
+["frac58"]="⅝",
+["cap"]="∩",
+["roang"]="⟭",
+["intlarhk"]="⨗",
+["DownTee"]="⊤",
+["thickapprox"]="≈",
+["prnap"]="⪹",
+["laquo"]="«",
+["lesdot"]="⩿",
+["inodot"]="ı",
+["Hscr"]="ℋ",
+["YIcy"]="Ї",
+["ctdot"]="⋯",
+["thetav"]="ϑ",
+["DoubleUpDownArrow"]="⇕",
+["succ"]="≻",
+["nbumpe"]="≏̸",
+["ReverseElement"]="∋",
+["Oacute"]="Ó",
+["equest"]="≟",
+["Lt"]="≪",
+["Nacute"]="Ń",
["DiacriticalTilde"]="˜",
-["SucceedsSlantEqual"]="≽",
-["mopf"]="𝕞",
-["Ecaron"]="Ě",
-["UpArrowDownArrow"]="⇅",
-["ges"]="⩾",
-["nsqsupe"]="⋣",
-["ubrcy"]="ў",
-["Gscr"]="𝒢",
-["HARDcy"]="Ъ",
-["jopf"]="𝕛",
-["gtquest"]="⩼",
-["iinfin"]="⧜",
-["twixt"]="≬",
+["Escr"]="ℰ",
+["boxvH"]="╪",
+["Ifr"]="ℑ",
+["mp"]="∓",
+["ell"]="ℓ",
+["Iacute"]="Í",
+["NotNestedGreaterGreater"]="⪢̸",
+["raquo"]="»",
+["Zcy"]="З",
+["micro"]="µ",
+["dzigrarr"]="⟿",
+["rtrif"]="▸",
+["Uuml"]="Ü",
+["nvHarr"]="⤄",
+["leqslant"]="⩽",
+["tritime"]="⨻",
+["nlarr"]="↚",
+["NotRightTriangle"]="⋫",
+["apid"]="≋",
+["succeq"]="⪰",
+["NotEqualTilde"]="≂̸",
+["varphi"]="ϕ",
+["Vert"]="‖",
+["int"]="∫",
+["lurdshar"]="⥊",
+["lneqq"]="≨",
+["Jsercy"]="Ј",
+["Superset"]="⊃",
+["subsetneqq"]="⫋",
+["gap"]="⪆",
+["ssmile"]="⌣",
+["Ugrave"]="Ù",
+["IOcy"]="Ё",
+["ltimes"]="⋉",
+["UnderBracket"]="⎵",
+["subseteqq"]="⫅",
+["Dscr"]="𝒟",
+["dtrif"]="▾",
+["raquo"]="»",
+["hbar"]="ℏ",
+["ge"]="≥",
+["cudarrr"]="⤵",
+["icy"]="и",
+["plusdo"]="∔",
+["bull"]="•",
+["weierp"]="℘",
+["mapsto"]="↦",
+["Uring"]="Ů",
+["supplus"]="⫀",
+["Succeeds"]="≻",
+["Ascr"]="𝒜",
+["cdot"]="ċ",
+["nwarr"]="↖",
+["target"]="⌖",
+["dharr"]="⇂",
+["curlyvee"]="⋎",
+["supE"]="⫆",
+["emsp13"]=" ",
["ltrie"]="⊴",
+["olarr"]="↺",
+["RightTeeVector"]="⥛",
+["Vvdash"]="⊪",
+["larrsim"]="⥳",
+["varsubsetneq"]="⊊︀",
+["Not"]="⫬",
+["CenterDot"]="·",
+["PlusMinus"]="±",
+["aring"]="å",
+["Nscr"]="𝒩",
+["delta"]="δ",
+["npre"]="⪯̸",
+["Vcy"]="В",
+["NotVerticalBar"]="∤",
+["scpolint"]="⨓",
+["rcedil"]="ŗ",
+["Lmidot"]="Ŀ",
+["DScy"]="Ѕ",
+["nsubseteq"]="⊈",
+["ngE"]="≧̸",
+["NotSquareSubsetEqual"]="⋢",
+["edot"]="ė",
+["Ucy"]="У",
+["lessapprox"]="⪅",
+["niv"]="∋",
+["Kscr"]="𝒦",
+["LeftVectorBar"]="⥒",
+["nhpar"]="⫲",
+["scedil"]="ş",
+["Uacute"]="Ú",
+["ntrianglelefteq"]="⋬",
+["Otilde"]="Õ",
+["iexcl"]="¡",
+["lbrke"]="⦋",
+["simdot"]="⩪",
+["sigmaf"]="ς",
+["Bfr"]="𝔅",
+["pitchfork"]="⋔",
+["ngeqslant"]="⩾̸",
+["Pscr"]="𝒫",
+["gsime"]="⪎",
+["Ouml"]="Ö",
+["rarrsim"]="⥴",
+["subE"]="⫅",
+["otimesas"]="⨶",
+["lfloor"]="⌊",
+["prop"]="∝",
+["imacr"]="ī",
+["blacktriangleleft"]="◂",
+["Ntilde"]="Ñ",
+["llarr"]="⇇",
+["nsucc"]="⊁",
+["PartialD"]="∂",
+["Iacute"]="Í",
+["gdot"]="ġ",
+["Afr"]="𝔄",
+["Igrave"]="Ì",
["csub"]="⫏",
-["Hscr"]="ℋ",
-["leftharpoondown"]="↽",
+["Mscr"]="ℳ",
+["Scy"]="С",
+["bsime"]="⋍",
+["nequiv"]="≢",
+["scnap"]="⪺",
+["Tab"]=" ",
+["Equal"]="⩵",
+["blacklozenge"]="⧫",
+["nrarrc"]="⤳̸",
+["divide"]="÷",
["RightUpDownVector"]="⥏",
-["LongLeftRightArrow"]="⟷",
-["Im"]="ℑ",
-["dcaron"]="ď",
+["iinfin"]="⧜",
+["precnapprox"]="⪹",
+["dArr"]="⇓",
+["orslope"]="⩗",
+["Rcy"]="Р",
+["sqsub"]="⊏",
+["OverBracket"]="⎴",
+["sum"]="∑",
+["ncedil"]="ņ",
+["ltrPar"]="⦖",
+["ii"]="ⅈ",
+["Gcirc"]="Ĝ",
+["SucceedsTilde"]="≿",
+["RightFloor"]="⌋",
+["osol"]="⊘",
["barwedge"]="⌅",
-["nexist"]="∄",
-["blacktriangledown"]="▾",
-["fork"]="⋔",
-["rhard"]="⇁",
-["cent"]="¢",
-["RightTriangle"]="⊳",
-["Eta"]="Η",
-["dotminus"]="∸",
-["nles"]="⩽̸",
-["larrtl"]="↢",
-["LeftTriangleEqual"]="⊴",
-["hopf"]="𝕙",
-["gammad"]="ϝ",
-["gsime"]="⪎",
-["llhard"]="⥫",
-["precapprox"]="⪷",
-["profalar"]="⌮",
-["lnE"]="≨",
-["ddagger"]="‡",
-["leq"]="≤",
-["smile"]="⌣",
-["robrk"]="⟧",
-["Jscr"]="𝒥",
-["triangleleft"]="◃",
-["acd"]="∿",
-["prod"]="∏",
-["atilde"]="ã",
-["seArr"]="⇘",
-["therefore"]="∴",
-["iopf"]="𝕚",
-["solbar"]="⌿",
-["kcedil"]="ķ",
-["NotHumpEqual"]="≏̸",
-["nspar"]="∦",
-["frac14"]="¼",
-["nsime"]="≄",
-["DoubleLongLeftArrow"]="⟸",
-["sccue"]="≽",
-["models"]="⊧",
-["SupersetEqual"]="⊇",
-["iquest"]="¿",
-["oline"]="‾",
-["lparlt"]="⦓",
-["triplus"]="⨹",
-["nequiv"]="≢",
-["nlE"]="≦̸",
-["nldr"]="‥",
-["equals"]="=",
-["Agrave"]="À",
-["ccaron"]="č",
-["Yacute"]="Ý",
-["Oslash"]="Ø",
-["udarr"]="⇅",
-["ang"]="∠",
-["dopf"]="𝕕",
-["comp"]="∁",
-["caps"]="∩︀",
-["bowtie"]="⋈",
-["glj"]="⪤",
-["ltquest"]="⩻",
-["cirmid"]="⫯",
-["ordm"]="º",
-["esim"]="≂",
-["reals"]="ℝ",
-["LeftTriangle"]="⊲",
-["flat"]="♭",
-["eopf"]="𝕖",
-["lap"]="⪅",
-["not"]="¬",
-["ENG"]="Ŋ",
-["DiacriticalAcute"]="´",
-["sharp"]="♯",
-["longleftarrow"]="⟵",
-["dblac"]="˝",
-["UpArrow"]="↑",
-["npre"]="⪯̸",
-["bopf"]="𝕓",
-["DScy"]="Ѕ",
+["twoheadrightarrow"]="↠",
+["Gscr"]="𝒢",
+["acy"]="а",
+["dtdot"]="⋱",
+["rbrke"]="⦌",
+["imath"]="ı",
+["Hcirc"]="Ĥ",
+["num"]="#",
+["nprec"]="⊀",
+["smallsetminus"]="∖",
+["lesges"]="⪓",
+["LeftUpVector"]="↿",
+["gtdot"]="⋗",
+["theta"]="θ",
+["kappav"]="ϰ",
+["jmath"]="ȷ",
+["Lscr"]="ℒ",
+["Aogon"]="Ą",
+["ltrif"]="◂",
+["DownArrowUpArrow"]="⇵",
+["prap"]="⪷",
+["Racute"]="Ŕ",
+["curlyeqprec"]="⋞",
["bepsi"]="϶",
-["angrtvb"]="⊾",
-["ccaps"]="⩍",
-["UnderParenthesis"]="⏝",
-["subne"]="⊊",
-["succnsim"]="⋩",
-["Bumpeq"]="≎",
-["xvee"]="⋁",
-["colon"]=":",
-["deg"]="°",
-["fnof"]="ƒ",
-["Uarr"]="↟",
-["Zcaron"]="Ž",
-["copf"]="𝕔",
-["Theta"]="Θ",
-["omicron"]="ο",
-["ntriangleright"]="⋫",
-["DoubleLongRightArrow"]="⟹",
-["UnderBrace"]="⏟",
-["GT"]=">",
-["lEg"]="⪋",
-["supplus"]="⫀",
-["acute"]="´",
+["blacktriangle"]="▴",
+["nvap"]="≍⃒",
+["Supset"]="⋑",
+["angmsd"]="∡",
+["boxul"]="┘",
+["LessSlantEqual"]="⩽",
["GT"]=">",
-["upsilon"]="υ",
-["sc"]="≻",
-["xrarr"]="⟶",
-["eng"]="ŋ",
-["it"]="⁢",
-["Ntilde"]="Ñ",
-["Mu"]="Μ",
-["CircleTimes"]="⊗",
-["NotTildeTilde"]="≉",
-["NotLessLess"]="≪̸",
-["vellip"]="⋮",
-["cularrp"]="⤽",
-["UnderBracket"]="⎵",
-["aopf"]="𝕒",
-["itilde"]="ĩ",
-["latail"]="⤙",
-["Nu"]="Ν",
-["Ascr"]="𝒜",
-["complement"]="∁",
-["gjcy"]="ѓ",
-["radic"]="√",
-["maltese"]="✠",
-["glE"]="⪒",
-["plusmn"]="±",
-["curvearrowright"]="↷",
-["gt"]=">",
-["Colone"]="⩴",
-["Bscr"]="ℬ",
-["ic"]="⁣",
-["clubsuit"]="♣",
-["djcy"]="ђ",
-["Oopf"]="𝕆",
-["ltrPar"]="⦖",
-["ngtr"]="≯",
-["eqcirc"]="≖",
-["Hacek"]="ˇ",
-["vdash"]="⊢",
-["NotCupCap"]="≭",
-["Gdot"]="Ġ",
-["jsercy"]="ј",
-["marker"]="▮",
+["nexist"]="∄",
+["ccupssm"]="⩐",
+["Eacute"]="É",
+["ddarr"]="⇊",
+["ntlg"]="≸",
+["Iscr"]="ℐ",
+["Jcirc"]="Ĵ",
+["Sacute"]="Ś",
+["capand"]="⩄",
+["gesdoto"]="⪂",
+["olcross"]="⦻",
+["amalg"]="⨿",
+["rarrlp"]="↬",
+["NotLeftTriangle"]="⋪",
+["reals"]="ℝ",
+["bigcup"]="⋃",
+["NJcy"]="Њ",
+["Odblac"]="Ő",
+["hArr"]="⇔",
+["RightArrowLeftArrow"]="⇄",
+["SOFTcy"]="Ь",
+["Lambda"]="Λ",
+["RightCeiling"]="⌉",
+["Vdash"]="⊩",
+["elinters"]="⏧",
+["lsimg"]="⪏",
["Nopf"]="ℕ",
-["Wfr"]="𝔚",
-["boxHD"]="╦",
-["mho"]="℧",
-["ulcrop"]="⌏",
-["DifferentialD"]="ⅆ",
-["aacute"]="á",
-["lpar"]="(",
+["Esim"]="⩳",
+["vzigzag"]="⦚",
+["acd"]="∿",
+["ccedil"]="ç",
+["lbarr"]="⤌",
+["nmid"]="∤",
+["Backslash"]="∖",
+["Laplacetrf"]="ℒ",
+["npr"]="⊀",
+["nap"]="≉",
+["nsupseteqq"]="⫆̸",
+["igrave"]="ì",
+["LJcy"]="Љ",
+["lessgtr"]="≶",
["angle"]="∠",
-["rharu"]="⇀",
-["Breve"]="˘",
-["Dot"]="¨",
-["rect"]="▭",
-["NotNestedLessLess"]="⪡̸",
-["boxplus"]="⊞",
-["NotSucceeds"]="⊁",
-["gnapprox"]="⪊",
-["DownLeftTeeVector"]="⥞",
-["Xfr"]="𝔛",
-["Lang"]="⟪",
-["Element"]="∈",
-["sung"]="♪",
-["RightVectorBar"]="⥓",
-["simne"]="≆",
-["LeftVector"]="↼",
-["Idot"]="İ",
+["lAarr"]="⇚",
+["notin"]="∉",
+["orv"]="⩛",
+["gtreqqless"]="⪌",
+["CircleMinus"]="⊖",
+["Diamond"]="⋄",
+["map"]="↦",
+["nvsim"]="∼⃒",
+["pi"]="π",
+["pluscir"]="⨢",
+["boxVH"]="╬",
["QUOT"]="\"",
-["nsmid"]="∤",
-["fjlig"]="fj",
-["Ufr"]="𝔘",
-["cuvee"]="⋎",
+["duarr"]="⇵",
+["lgE"]="⪑",
+["lmoust"]="⎰",
+["lsquo"]="‘",
+["rightrightarrows"]="⇉",
+["times"]="×",
+["iuml"]="ï",
+["andslope"]="⩘",
+["order"]="ℴ",
+["Sub"]="⋐",
+["capcap"]="⩋",
+["nabla"]="∇",
+["ntriangleleft"]="⋪",
+["blk14"]="░",
+["Kopf"]="𝕂",
+["lArr"]="⇐",
+["Qopf"]="ℚ",
+["circledS"]="Ⓢ",
+["omid"]="⦶",
+["ord"]="⩝",
+["lvertneqq"]="≨︀",
+["updownarrow"]="↕",
+["yacute"]="ý",
+["ni"]="∋",
+["hamilt"]="ℋ",
+["Jopf"]="𝕁",
+["CupCap"]="≍",
+["lbrack"]="[",
+["preccurlyeq"]="≼",
+["Ropf"]="ℝ",
+["lessdot"]="⋖",
+["blank"]="␣",
+["SucceedsEqual"]="⪰",
+["triangleleft"]="◃",
+["ring"]="˚",
+["omega"]="ω",
+["bowtie"]="⋈",
+["Sqrt"]="√",
+["uuml"]="ü",
+["Udblac"]="Ű",
+["diams"]="♦",
+["Oslash"]="Ø",
["real"]="ℜ",
-["luruhar"]="⥦",
-["NotRightTriangleBar"]="⧐̸",
-["target"]="⌖",
-["lharu"]="↼",
-["CloseCurlyQuote"]="’",
-["rAtail"]="⤜",
-["nparallel"]="∦",
-["brvbar"]="¦",
-["Vfr"]="𝔙",
-["wedbar"]="⩟",
-["REG"]="®",
-["boxur"]="└",
-["Rcaron"]="Ř",
-["Rang"]="⟫",
-["sqsubseteq"]="⊑",
-["div"]="÷",
-["boxul"]="┘",
-["Cdot"]="Ċ",
-["vsupnE"]="⫌︀",
-["zeetrf"]="ℨ",
-["Sfr"]="𝔖",
-["roang"]="⟭",
-["LessTilde"]="≲",
-["equiv"]="≡",
-["frac12"]="½",
-["eacute"]="é",
-["rrarr"]="⇉",
-["nearhk"]="⤤",
-["Zopf"]="ℤ",
-["SucceedsTilde"]="≿",
+["egrave"]="è",
+["prurel"]="⊰",
+["LeftUpDownVector"]="⥑",
+["TildeEqual"]="≃",
+["cuwed"]="⋏",
+["times"]="×",
["ap"]="≈",
-["lfisht"]="⥼",
-["timesd"]="⨰",
-["UpDownArrow"]="↕",
-["xuplus"]="⨄",
-["cularr"]="↶",
-["iprod"]="⨼",
-["AElig"]="Æ",
-["rationals"]="ℚ",
-["geqq"]="≧",
-["Tfr"]="𝔗",
-["Yopf"]="𝕐",
-["rtimes"]="⋊",
-["Tcaron"]="Ť",
-["srarr"]="→",
-["diam"]="⋄",
-["mid"]="∣",
-["imath"]="ı",
-["PlusMinus"]="±",
-["isin"]="∈",
-["vprop"]="∝",
-["RightArrowLeftArrow"]="⇄",
-["NotSubset"]="⊂⃒",
-["bigtriangledown"]="▽",
-["ldsh"]="↲",
-["Qfr"]="𝔔",
-["nvap"]="≍⃒",
-["vert"]="|",
-["Xopf"]="𝕏",
-["lBarr"]="⤎",
-["egsdot"]="⪘",
-["Tcedil"]="Ţ",
-["xi"]="ξ",
-["LeftUpVectorBar"]="⥘",
-["circ"]="ˆ",
-["ocir"]="⊚",
-["gtlPar"]="⦕",
-["Rfr"]="ℜ",
-["RightTriangleBar"]="⧐",
-["nwarhk"]="⤣",
-["zhcy"]="ж",
-["Iukcy"]="І",
-["plusdo"]="∔",
+["lowast"]="∗",
+["Lopf"]="𝕃",
+["bdquo"]="„",
+["blacktriangledown"]="▾",
+["vBarv"]="⫩",
+["Longleftarrow"]="⟸",
+["lesg"]="⋚︀",
+["Popf"]="ℙ",
+["iogon"]="į",
+["vellip"]="⋮",
+["Ntilde"]="Ñ",
+["cwconint"]="∲",
["boxv"]="│",
-["minusb"]="⊟",
-["Ncaron"]="Ň",
-["angmsdaa"]="⦨",
-["varsubsetneqq"]="⫋︀",
-["cirfnint"]="⨐",
-["LongRightArrow"]="⟶",
-["ddarr"]="⇊",
-["piv"]="ϖ",
-["fopf"]="𝕗",
-["Ofr"]="𝔒",
-["fflig"]="ff",
-["Jukcy"]="Є",
-["xhArr"]="⟺",
-["ncy"]="н",
-["Scaron"]="Š",
-["TildeEqual"]="≃",
-["subrarr"]="⥹",
-["iacute"]="í",
-["ogt"]="⧁",
-["nvge"]="≥⃒",
-["vee"]="∨",
-["UnderBar"]="_",
-["andslope"]="⩘",
-["gopf"]="𝕘",
-["Pfr"]="𝔓",
-["die"]="¨",
+["boxbox"]="⧉",
+["langd"]="⦑",
+["diam"]="⋄",
+["boxHu"]="╧",
+["acute"]="´",
["Uopf"]="𝕌",
+["Fcy"]="Ф",
+["vee"]="∨",
+["eqslantless"]="⪕",
+["NotLeftTriangleEqual"]="⋬",
+["OverBrace"]="⏞",
+["beta"]="β",
+["Otilde"]="Õ",
+["fjlig"]="fj",
+["uacute"]="ú",
+["CirclePlus"]="⊕",
+["Mellintrf"]="ℳ",
+["Vopf"]="𝕍",
+["Gcy"]="Г",
+["searhk"]="⤥",
+["boxur"]="└",
+["LeftTeeVector"]="⥚",
+["nsubE"]="⫅̸",
+["gvertneqq"]="≩︀",
+["eqcirc"]="≖",
+["nrightarrow"]="↛",
+["DJcy"]="Ђ",
+["tdot"]="⃛",
+["Dcy"]="Д",
+["Sopf"]="𝕊",
+["range"]="⦥",
+["agrave"]="à",
+["gtrsim"]="≳",
["RightArrowBar"]="⇥",
-["orarr"]="↻",
-["Precedes"]="≺",
-["oror"]="⩖",
-["straightepsilon"]="ϵ",
-["cong"]="≅",
-["TScy"]="Ц",
-["nleftarrow"]="↚",
-["DZcy"]="Џ",
-["horbar"]="―",
+["larrlp"]="↫",
+["le"]="≤",
+["xi"]="ξ",
+["gla"]="⪥",
+["GT"]=">",
+["leftarrowtail"]="↢",
+["commat"]="@",
+["rightarrowtail"]="↣",
+["approx"]="≈",
+["sdot"]="⋅",
["Topf"]="𝕋",
-["Cayleys"]="ℭ",
-["leqq"]="≦",
-["curlyeqprec"]="⋞",
-["nLeftarrow"]="⇍",
-["pcy"]="п",
-["realine"]="ℛ",
-["nlsim"]="≴",
+["Ecy"]="Э",
+["eplus"]="⩱",
+["cir"]="○",
["Rarrtl"]="⤖",
-["CupCap"]="≍",
-["vDash"]="⊨",
-["shortparallel"]="∥",
-["ExponentialE"]="ⅇ",
-["Sopf"]="𝕊",
-["iiota"]="℩",
-["Nfr"]="𝔑",
-["pointint"]="⨕",
-["NotGreaterLess"]="≹",
-["olcross"]="⦻",
-["kcy"]="к",
-["complexes"]="ℂ",
-["varepsilon"]="ϵ",
-["Fouriertrf"]="ℱ",
-["rho"]="ρ",
-["Lsh"]="↰",
-["exponentiale"]="ⅇ",
-["hookrightarrow"]="↪",
-["Ropf"]="ℝ",
-["lAtail"]="⤛",
-["Kfr"]="𝔎",
-["bsim"]="∽",
-["jcy"]="й",
-["frac34"]="¾",
-["DotDot"]="⃜",
+["Emacr"]="Ē",
+["Dcaron"]="Ď",
+["Sc"]="⪼",
+["cent"]="¢",
+["rtri"]="▹",
+["cedil"]="¸",
+["spades"]="♠",
+["upsilon"]="υ",
+["boxminus"]="⊟",
+["angmsdaa"]="⦨",
+["zdot"]="ż",
+["Bcy"]="Б",
+["Zscr"]="𝒵",
+["looparrowleft"]="↫",
+["Dfr"]="𝔇",
+["Bumpeq"]="≎",
+["nLeftarrow"]="⇍",
+["equiv"]="≡",
+["Ccaron"]="Č",
+["UpperLeftArrow"]="↖",
+["SubsetEqual"]="⊆",
+["nrArr"]="⇏",
+["loarr"]="⇽",
+["minusdu"]="⨪",
+["sup3"]="³",
+["Zopf"]="ℤ",
+["elsdot"]="⪗",
+["NotLessLess"]="≪̸",
+["eta"]="η",
+["ubrcy"]="ў",
+["Yscr"]="𝒴",
+["subset"]="⊂",
+["Cfr"]="ℭ",
+["harrcir"]="⥈",
+["supsetneq"]="⊋",
+["LeftUpVectorBar"]="⥘",
+["LT"]="<",
+["DoubleLeftArrow"]="⇐",
+["circledcirc"]="⊚",
+["bkarow"]="⤍",
+["rangd"]="⦒",
+["downharpoonright"]="⇂",
+["Wopf"]="𝕎",
+["ast"]="*",
+["planck"]="ℏ",
+["gtrdot"]="⋗",
+["Ffr"]="𝔉",
+["rArr"]="⇒",
+["VeryThinSpace"]=" ",
+["Ecaron"]="Ě",
+["RightVectorBar"]="⥓",
+["divonx"]="⋇",
+["Xopf"]="𝕏",
+["nsubset"]="⊂⃒",
+["Otimes"]="⨷",
+["bot"]="⊥",
+["nsime"]="≄",
["thorn"]="þ",
-["ThickSpace"]="  ",
-["SquareUnion"]="⊔",
-["frac58"]="⅝",
-["dfisht"]="⥿",
-["MediumSpace"]=" ",
-["Lfr"]="𝔏",
-["Qopf"]="ℚ",
+["subsetneq"]="⊊",
+["nltri"]="⋪",
+["Cayleys"]="ℭ",
+["Efr"]="𝔈",
+["Intersection"]="⋂",
+["UnderBar"]="_",
+["fpartint"]="⨍",
+["Iuml"]="Ï",
+["rsquo"]="’",
+["ecir"]="≖",
+["nis"]="⋼",
+["fscr"]="𝒻",
+["hellip"]="…",
+["ogt"]="⧁",
["ntgl"]="≹",
-["LessFullEqual"]="≦",
-["malt"]="✠",
-["mcy"]="м",
-["NotGreaterEqual"]="≱",
-["bottom"]="⊥",
-["NotSucceedsEqual"]="⪰̸",
-["lcedil"]="ļ",
-["infintie"]="⧝",
-["Lcaron"]="Ľ",
-["NotSquareSubset"]="⊏̸",
-["brvbar"]="¦",
-["fallingdotseq"]="≒",
-["AElig"]="Æ",
-["swarhk"]="⤦",
-["Ifr"]="ℑ",
-["pi"]="π",
-["lcy"]="л",
-["copy"]="©",
-["dlcorn"]="⌞",
-["oacute"]="ó",
-["gtreqless"]="⋛",
-["neArr"]="⇗",
+["frac14"]="¼",
+["squf"]="▪",
+["circ"]="ˆ",
+["prE"]="⪳",
+["ordf"]="ª",
["ZHcy"]="Ж",
-["Vdashl"]="⫦",
-["darr"]="↓",
-["circeq"]="≗",
+["NegativeVeryThinSpace"]="​",
+["quot"]="\"",
+["excl"]="!",
+["sqcaps"]="⊓︀",
+["gfr"]="𝔤",
+["varsigma"]="ς",
+["nwarrow"]="↖",
+["reg"]="®",
+["longmapsto"]="⟼",
+["And"]="⩓",
+["cuvee"]="⋎",
+["zwj"]="‍",
+["plankv"]="ℏ",
+["varepsilon"]="ϵ",
+["Aopf"]="𝔸",
+["UpTee"]="⊥",
+["lescc"]="⪨",
+["ltri"]="◃",
+["iiint"]="∭",
+["ccups"]="⩌",
+["alefsym"]="ℵ",
+["succneqq"]="⪶",
+["hscr"]="𝒽",
+["Or"]="⩔",
["yuml"]="ÿ",
-["Jfr"]="𝔍",
-["Product"]="∏",
-["boxDL"]="╗",
-["el"]="⪙",
-["supe"]="⊇",
-["frac13"]="⅓",
-["Barwed"]="⌆",
-["larrpl"]="⤹",
-["SHCHcy"]="Щ",
-["LeftUpDownVector"]="⥑",
-["Diamond"]="⋄",
-["DownLeftVectorBar"]="⥖",
-["Cross"]="⨯",
-["ncup"]="⩂",
-["supnE"]="⫌",
-["lne"]="⪇",
-["micro"]="µ",
-["lowbar"]="_",
-["perp"]="⊥",
-["sqcap"]="⊓",
-["Gfr"]="𝔊",
-["raemptyv"]="⦳",
-["gesl"]="⋛︀",
-["drcrop"]="⌌",
-["boxUL"]="╝",
-["becaus"]="∵",
-["gne"]="⪈",
-["scap"]="⪸",
-["swarrow"]="↙",
-["nesim"]="≂̸",
-["DoubleDot"]="¨",
-["Mopf"]="𝕄",
-["apid"]="≋",
-["InvisibleComma"]="⁣",
-["Backslash"]="∖",
-["mnplus"]="∓",
-["niv"]="∋",
-["Hfr"]="ℌ",
-["rarrlp"]="↬",
-["Because"]="∵",
-["parsl"]="⫽",
-["sup1"]="¹",
-["Lt"]="≪",
-["par"]="∥",
-["Iota"]="Ι",
-["beth"]="ℶ",
-["Lopf"]="𝕃",
+["rcub"]="}",
+["lt"]="<",
+["vArr"]="⇕",
+["EqualTilde"]="≂",
+["vDash"]="⊨",
+["RightArrow"]="→",
+["dlcorn"]="⌞",
+["Barv"]="⫧",
+["nsc"]="⊁",
+["Proportion"]="∷",
+["iota"]="ι",
+["gscr"]="ℊ",
+["abreve"]="ă",
+["ThickSpace"]="  ",
+["szlig"]="ß",
+["lhard"]="↽",
+["emptyv"]="∅",
+["Tau"]="Τ",
+["sharp"]="♯",
+["bNot"]="⫭",
+["LongLeftRightArrow"]="⟷",
+["frac23"]="⅔",
+["NotEqual"]="≠",
+["scE"]="⪴",
+["jfr"]="𝔧",
+["bscr"]="𝒷",
+["uhblk"]="▀",
+["frac35"]="⅗",
+["TSHcy"]="Ћ",
+["ntrianglerighteq"]="⋭",
+["Tcedil"]="Ţ",
+["NotGreaterFullEqual"]="≧̸",
+["asympeq"]="≍",
+["oror"]="⩖",
+["ecirc"]="ê",
+["ohbar"]="⦵",
+["Rho"]="Ρ",
+["iacute"]="í",
+["ascr"]="𝒶",
+["RightUpVector"]="↾",
+["Ocirc"]="Ô",
+["cedil"]="¸",
+["sect"]="§",
+["angmsdab"]="⦩",
+["FilledVerySmallSquare"]="▪",
+["curlywedge"]="⋏",
+["lesdotor"]="⪃",
+["esdot"]="≐",
+["eqvparsl"]="⧥",
["Cap"]="⋒",
-["Aring"]="Å",
-["rarr"]="→",
-["Efr"]="𝔈",
-["bigcup"]="⋃",
-["DownLeftRightVector"]="⥐",
-["lesges"]="⪓",
-["NegativeThinSpace"]="​",
-["DownRightTeeVector"]="⥟",
-["npolint"]="⨔",
-["gEl"]="⪌",
-["lltri"]="◺",
-["ogon"]="˛",
-["LessEqualGreater"]="⋚",
-["sqsupset"]="⊐",
-["NotSubsetEqual"]="⊈",
-["Ubrcy"]="Ў",
-["ShortDownArrow"]="↓",
-["ugrave"]="ù",
-["Dcaron"]="Ď",
-["subE"]="⫅",
-["divide"]="÷",
-["bigotimes"]="⨂",
-["dscy"]="ѕ",
-["wreath"]="≀",
-["Jopf"]="𝕁",
-["pre"]="⪯",
-["tdot"]="⃛",
-["Cfr"]="ℭ",
-["Uogon"]="Ų",
-["softcy"]="ь",
-["isinE"]="⋹",
-["Dstrok"]="Đ",
-["Jsercy"]="Ј",
-["capdot"]="⩀",
-["realpart"]="ℜ",
-["hearts"]="♥",
-["Atilde"]="Ã",
-["LeftArrowRightArrow"]="⇆",
-["upharpoonleft"]="↿",
-["Iopf"]="𝕀",
-["Intersection"]="⋂",
-["midcir"]="⫰",
-["ocirc"]="ô",
-["sdot"]="⋅",
-["Dfr"]="𝔇",
-["gla"]="⪥",
-["DiacriticalGrave"]="`",
+["dscr"]="𝒹",
+["rbrace"]="}",
+["nsccue"]="⋡",
+["neArr"]="⇗",
+["rightthreetimes"]="⋌",
+["plusmn"]="±",
["Ubreve"]="Ŭ",
-["int"]="∫",
-["PrecedesSlantEqual"]="≼",
-["Square"]="□",
-["Acy"]="А",
+["ifr"]="𝔦",
+["Poincareplane"]="ℌ",
+["leftrightarrows"]="⇆",
+["scnsim"]="⋩",
+["cscr"]="𝒸",
+["NotHumpEqual"]="≏̸",
+["capbrcup"]="⩉",
+["curarr"]="↷",
+["notinvb"]="⋷",
+["LeftArrow"]="←",
+["Gopf"]="𝔾",
+["ldrushar"]="⥋",
+["nscr"]="𝓃",
+["Gg"]="⋙",
+["ouml"]="ö",
+["nsce"]="⪰̸",
+["cupbrcap"]="⩈",
+["nLt"]="≪⃒",
+["bullet"]="•",
+["nsqsupe"]="⋣",
+["rect"]="▭",
+["lbrace"]="{",
+["Fopf"]="𝔽",
+["COPY"]="©",
+["epar"]="⋕",
+["mscr"]="𝓂",
+["odsold"]="⦼",
+["cupor"]="⩅",
+["not"]="¬",
+["subsim"]="⫇",
+["hoarr"]="⇿",
+["Scedil"]="Ş",
+["eacute"]="é",
+["emsp"]=" ",
+["uml"]="¨",
+["igrave"]="ì",
+["pscr"]="𝓅",
+["LeftTee"]="⊣",
+["Cedilla"]="¸",
+["Iopf"]="𝕀",
+["HumpEqual"]="≏",
+["les"]="⩽",
+["Rcedil"]="Ŗ",
+["lsquor"]="‚",
+["raemptyv"]="⦳",
+["NotSucceedsSlantEqual"]="⋡",
+["SuchThat"]="∋",
+["vert"]="|",
+["backcong"]="≌",
["Hopf"]="ℍ",
-["precsim"]="≾",
-["nleq"]="≰",
-["urcorn"]="⌝",
-["hyphen"]="‐",
-["FilledSmallSquare"]="◼",
-["zdot"]="ż",
-["ndash"]="–",
-["hbar"]="ℏ",
-["Wopf"]="𝕎",
-["Esim"]="⩳",
-["subsetneq"]="⊊",
-["boxhD"]="╥",
-["searhk"]="⤥",
-["late"]="⪭",
+["CircleDot"]="⊙",
+["Kappa"]="Κ",
+["conint"]="∮",
+["DZcy"]="Џ",
+["prsim"]="≾",
+["Copf"]="ℂ",
+["curvearrowright"]="↷",
+["twixt"]="≬",
+["curren"]="¤",
+["rtriltri"]="⧎",
+["jscr"]="𝒿",
+["cupcup"]="⩊",
+["Lcedil"]="Ļ",
+["supseteqq"]="⫆",
+["bfr"]="𝔟",
+["lesseqqgtr"]="⪋",
+["leftleftarrows"]="⇇",
+["Bopf"]="𝔹",
+["acute"]="´",
["blacktriangleright"]="▸",
-["auml"]="ä",
-["NotLessTilde"]="≴",
-["Bfr"]="𝔅",
-["grave"]="`",
-["ltlarr"]="⥶",
-["Aogon"]="Ą",
-["sdote"]="⩦",
-["gtrsim"]="≳",
-["nvinfin"]="⧞",
-["lgE"]="⪑",
-["mdash"]="—",
-["Vopf"]="𝕍",
-["leftrightarrow"]="↔",
-["RBarr"]="⤐",
-["amalg"]="⨿",
-["preccurlyeq"]="≼",
-["EqualTilde"]="≂",
-["scpolint"]="⨓",
-["NotHumpDownHump"]="≎̸",
-["uparrow"]="↑",
-["downarrow"]="↓",
-["boxdL"]="╕",
-["Hstrok"]="Ħ",
-["Ccaron"]="Č",
-["succsim"]="≿",
-["RightFloor"]="⌋",
-["DownBreve"]="̑",
-["succapprox"]="⪸",
-["dsol"]="⧶",
-["napid"]="≋̸",
-["nprcue"]="⋠",
+["frac34"]="¾",
+["Gbreve"]="Ğ",
+["Updownarrow"]="⇕",
+["iscr"]="𝒾",
+["sigmav"]="ς",
+["trade"]="™",
+["minusb"]="⊟",
+["GJcy"]="Ѓ",
+["TildeFullEqual"]="≅",
+["DoubleRightTee"]="⊨",
+["nang"]="∠⃒",
+["ddotseq"]="⩷",
+["copy"]="©",
["Eopf"]="𝔼",
-["ell"]="ℓ",
-["cupdot"]="⊍",
-["Not"]="⫬",
-["zigrarr"]="⇝",
-["downharpoonright"]="⇂",
-["nisd"]="⋺",
-["lotimes"]="⨴",
-["plusmn"]="±",
-["ngE"]="≧̸",
-["odash"]="⊝",
-["emptyset"]="∅",
+["Psi"]="Ψ",
+["UpperRightArrow"]="↗",
+["geqq"]="≧",
+["subedot"]="⫃",
+["nvlArr"]="⤂",
+["Ncedil"]="Ņ",
+["vsupne"]="⊋︀",
+["supset"]="⊃",
["squarf"]="▪",
-["NotGreaterTilde"]="≵",
-["NotTildeFullEqual"]="≇",
-["DownArrowUpArrow"]="⇵",
-["nwarrow"]="↖",
-["looparrowright"]="↬",
+["LeftDoubleBracket"]="⟦",
+["utrif"]="▴",
["Dopf"]="𝔻",
-["oplus"]="⊕",
-["UpEquilibrium"]="⥮",
-["leftthreetimes"]="⋋",
-["DoubleLeftTee"]="⫤",
-["nabla"]="∇",
-["RuleDelayed"]="⧴",
-["euml"]="ë",
-["varsupsetneqq"]="⫌︀",
-["upsi"]="υ",
-["supsup"]="⫖",
-["bsol"]="\\",
-["Copf"]="ℂ",
-["DDotrahd"]="⤑",
-["Upsilon"]="Υ",
-["UpperRightArrow"]="↗",
-["nedot"]="≐̸",
-["NotEqual"]="≠",
-["bumpeq"]="≏",
-["emsp14"]=" ",
-["frac38"]="⅜",
-["DownTeeArrow"]="↧",
-["Bopf"]="𝔹",
-["capand"]="⩄",
-["nleqq"]="≦̸",
-["ratio"]="∶",
-["eplus"]="⩱",
-["nge"]="≱",
-["laquo"]="«",
-["urtri"]="◹",
-["LeftUpVector"]="↿",
-["gl"]="≷",
-["Gt"]="≫",
-["andd"]="⩜",
+["ape"]="≊",
+["gEl"]="⪌",
+["COPY"]="©",
+["afr"]="𝔞",
+["Acy"]="А",
+["ldquor"]="„",
+["because"]="∵",
+["Pr"]="⪻",
+["OverBar"]="‾",
+["lang"]="⟨",
+["mopf"]="𝕞",
+["crarr"]="↵",
+["Epsilon"]="Ε",
+["Nfr"]="𝔑",
+["kjcy"]="ќ",
+["TildeTilde"]="≈",
+["bsim"]="∽",
+["lcy"]="л",
+["larrb"]="⇤",
+["ncong"]="≇",
+["ENG"]="Ŋ",
+["brvbar"]="¦",
+["Rightarrow"]="⇒",
+["nopf"]="𝕟",
+["Wfr"]="𝔚",
+["ljcy"]="љ",
+["diamondsuit"]="♦",
+["latail"]="⤙",
+["lambda"]="λ",
+["frac14"]="¼",
+["mcy"]="м",
+["nparsl"]="⫽⃥",
+["lBarr"]="⤎",
+["subdot"]="⪽",
+["frac12"]="½",
+["kopf"]="𝕜",
+["LeftCeiling"]="⌈",
+["erarr"]="⥱",
+["pre"]="⪯",
+["varr"]="↕",
+["Pi"]="Π",
+["sub"]="⊂",
+["ncy"]="н",
+["marker"]="▮",
+["rpargt"]="⦔",
+["supe"]="⊇",
+["veebar"]="⊻",
+["checkmark"]="✓",
+["nbsp"]=" ",
+["sqsupseteq"]="⊒",
+["upharpoonright"]="↾",
+["lopf"]="𝕝",
+["Omicron"]="Ο",
+["ccaps"]="⩍",
+["lrhard"]="⥭",
["Lstrok"]="Ł",
-["gamma"]="γ",
-["Sc"]="⪼",
-["Aopf"]="𝔸",
-["pluscir"]="⨢",
-["Itilde"]="Ĩ",
-["DoubleRightTee"]="⊨",
-["pluse"]="⩲",
-["iiint"]="∭",
-["dotplus"]="∔",
-["vrtri"]="⊳",
-["Proportion"]="∷",
-["bne"]="=⃥",
-["cuepr"]="⋞",
+["Mfr"]="𝔐",
+["njcy"]="њ",
+["ocy"]="о",
+["Zcaron"]="Ž",
+["NotSucceeds"]="⊁",
+["rarrbfs"]="⤠",
+["gtrapprox"]="⪆",
+["oS"]="Ⓢ",
+["diamond"]="⋄",
+["gesdot"]="⪀",
+["urcorner"]="⌝",
+["lotimes"]="⨴",
+["pertenk"]="‱",
+["rfisht"]="⥽",
+["Zfr"]="ℨ",
+["Map"]="⤅",
+["cross"]="✗",
+["DifferentialD"]="ⅆ",
+["boxtimes"]="⊠",
+["horbar"]="―",
+["lg"]="≶",
+["orarr"]="↻",
+["Vbar"]="⫫",
+["ropf"]="𝕣",
+["NotDoubleVerticalBar"]="∦",
+["Sfr"]="𝔖",
+["Iuml"]="Ï",
+["leftharpoondown"]="↽",
+["atilde"]="ã",
+["VerticalTilde"]="≀",
+["DoubleContourIntegral"]="∯",
+["longleftarrow"]="⟵",
+["Im"]="ℑ",
+["RightUpVectorBar"]="⥔",
+["nGg"]="⋙̸",
+["scap"]="⪸",
+["nrarr"]="↛",
+["ycy"]="ы",
+["ucirc"]="û",
+["qopf"]="𝕢",
+["oopf"]="𝕠",
+["yacute"]="ý",
+["Xfr"]="𝔛",
+["fork"]="⋔",
+["in"]="∈",
+["xcap"]="⋂",
+["check"]="✓",
+["jcy"]="й",
+["Phi"]="Φ",
+["doteq"]="≐",
["vBar"]="⫨",
-["yucy"]="ю",
-["PrecedesTilde"]="≾",
-["varr"]="↕",
-["leftarrowtail"]="↢",
-["rangle"]="⟩",
-["subsub"]="⫕",
-["rightarrowtail"]="↣",
-["oslash"]="ø",
-["mapstodown"]="↧",
-["sqsube"]="⊑",
-["NewLine"]="\n",
-["Vdash"]="⊩",
-["num"]="#",
-["umacr"]="ū",
-["InvisibleTimes"]="⁢",
-["bemptyv"]="⦰",
+["frown"]="⌢",
["Iogon"]="Į",
-["ssmile"]="⌣",
-["timesbar"]="⨱",
-["Tstrok"]="Ŧ",
-["Icy"]="И",
-["zacute"]="ź",
-["Cedilla"]="¸",
-["daleth"]="ℸ",
-["semi"]=";",
-["ssetmn"]="∖",
-["subdot"]="⪽",
-["Bernoullis"]="ℬ",
-["otimesas"]="⨶",
-["circleddash"]="⊝",
-["circlearrowright"]="↻",
-["NotLeftTriangleEqual"]="⋬",
-["NotTilde"]="≁",
-["npart"]="∂̸",
-["Gbreve"]="Ğ",
-["gtrless"]="≷",
-["pound"]="£",
-["curlyeqsucc"]="⋟",
-["blacklozenge"]="⧫",
-["ldca"]="⤶",
-["nsucc"]="⊁",
-["top"]="⊤",
-["ufr"]="𝔲",
-["sscr"]="𝓈",
-["eDDot"]="⩷",
-["Updownarrow"]="⇕",
-["loz"]="◊",
-["Gcy"]="Г",
-["boxdl"]="┐",
+["gnsim"]="⋧",
+["nsupset"]="⊃⃒",
+["equals"]="=",
+["angmsdac"]="⦪",
+["odash"]="⊝",
+["Hstrok"]="Ħ",
+["homtht"]="∻",
+["maltese"]="✠",
+["esim"]="≂",
+["realine"]="ℛ",
+["straightepsilon"]="ϵ",
+["utri"]="▵",
+["primes"]="ℙ",
+["dbkarow"]="⤏",
+["NotLessTilde"]="≴",
+["nvrArr"]="⤃",
+["cularrp"]="⤽",
+["supsup"]="⫖",
+["rang"]="⟩",
+["nshortmid"]="∤",
+["NotCupCap"]="≭",
+["gnE"]="≩",
+["otilde"]="õ",
+["LeftTriangle"]="⊲",
+["oelig"]="œ",
+["curarrm"]="⤼",
+["orderof"]="ℴ",
+["DoubleLongLeftArrow"]="⟸",
+["OverParenthesis"]="⏜",
+["amacr"]="ā",
+["copysr"]="℗",
+["acirc"]="â",
+["LeftArrowRightArrow"]="⇆",
+["filig"]="fi",
+["uopf"]="𝕦",
+["rlhar"]="⇌",
+["dharl"]="⇃",
+["rAarr"]="⇛",
+["rarrw"]="↝",
+["isin"]="∈",
+["simg"]="⪞",
+["NoBreak"]="⁠",
+["rAtail"]="⤜",
+["ndash"]="–",
+["IJlig"]="IJ",
+["dfr"]="𝔡",
+["ohm"]="Ω",
+["breve"]="˘",
+["ccedil"]="ç",
+["topf"]="𝕥",
+["nvDash"]="⊭",
+["RBarr"]="⤐",
+["clubs"]="♣",
["napos"]="ʼn",
-["Sqrt"]="√",
-["xsqcup"]="⨆",
-["Implies"]="⇒",
-["uring"]="ů",
-["thetav"]="ϑ",
-["iiiint"]="⨌",
-["nLeftrightarrow"]="⇎",
-["lobrk"]="⟦",
-["xfr"]="𝔵",
-["Abreve"]="Ă",
-["micro"]="µ",
-["quatint"]="⨖",
-["congdot"]="⩭",
-["nrtrie"]="⋭",
-["Fcy"]="Ф",
-["hksearow"]="⤥",
-["LowerLeftArrow"]="↙",
-["rdca"]="⤷",
-["OverBar"]="‾",
-["frac12"]="½",
-["imacr"]="ī",
-["boxVL"]="╣",
-["sfr"]="𝔰",
-["ensp"]=" ",
-["dwangle"]="⦦",
-["boxh"]="─",
-["Eogon"]="Ę",
+["ngtr"]="≯",
+["Tstrok"]="Ŧ",
+["lrarr"]="⇆",
+["eqslantgtr"]="⪖",
+["efr"]="𝔢",
+["gne"]="⪈",
+["csube"]="⫑",
+["Xi"]="Ξ",
+["sopf"]="𝕤",
+["LeftVector"]="↼",
+["ggg"]="⋙",
+["Ubrcy"]="Ў",
+["die"]="¨",
+["topbot"]="⌶",
+["Rfr"]="ℜ",
+["ofcir"]="⦿",
["imped"]="Ƶ",
-["Ecy"]="Э",
-["lates"]="⪭︀",
-["phi"]="φ",
-["minusd"]="∸",
-["planckh"]="ℎ",
-["Ocirc"]="Ô",
-["lE"]="≦",
-["sum"]="∑",
-["lrtri"]="⊿",
-["ruluhar"]="⥨",
-["lAarr"]="⇚",
-["DownArrow"]="↓",
-["zscr"]="𝓏",
-["questeq"]="≟",
-["ngeqq"]="≧̸",
-["And"]="⩓",
-["Dcy"]="Д",
-["angrtvbd"]="⦝",
-["rarrpl"]="⥅",
-["thkap"]="≈",
-["Otimes"]="⨷",
-["lesssim"]="≲",
-["gE"]="≧",
-["ouml"]="ö",
-["nsubseteq"]="⊈",
-["bigcirc"]="◯",
+["plusmn"]="±",
+["nles"]="⩽̸",
+["pcy"]="п",
+["permil"]="‰",
+["notinE"]="⋹̸",
+["bigoplus"]="⨁",
+["boxplus"]="⊞",
+["doublebarwedge"]="⌆",
+["ccaron"]="č",
+["asymp"]="≈",
+["sup1"]="¹",
+["bumpeq"]="≏",
+["nrtrie"]="⋭",
+["larrbfs"]="⤟",
+["emacr"]="ē",
+["gtrless"]="≷",
+["Kfr"]="𝔎",
+["plus"]="+",
+["risingdotseq"]="≓",
+["notindot"]="⋵̸",
+["Subset"]="⋐",
+["CloseCurlyDoubleQuote"]="”",
+["nlsim"]="≴",
+["dcaron"]="ď",
["boxVR"]="╠",
-["Vert"]="‖",
-["naturals"]="ℕ",
-["plussim"]="⨦",
-["wscr"]="𝓌",
-["raquo"]="»",
-["bigodot"]="⨀",
-["dashv"]="⊣",
-["hairsp"]=" ",
-["inodot"]="ı",
-["vnsup"]="⊃⃒",
+["lne"]="⪇",
+["Pfr"]="𝔓",
+["rightsquigarrow"]="↝",
+["phone"]="☎",
+["DiacriticalDot"]="˙",
+["Congruent"]="≡",
+["SquareIntersection"]="⊓",
+["ordf"]="ª",
+["loz"]="◊",
["cire"]="≗",
-["vartriangleleft"]="⊲",
-["rbrke"]="⦌",
-["boxuL"]="╛",
-["sce"]="⪰",
-["nrtri"]="⋫",
-["loarr"]="⇽",
-["ShortRightArrow"]="→",
-["xscr"]="𝓍",
-["Bcy"]="Б",
-["HumpEqual"]="≏",
-["lmidot"]="ŀ",
-["DownLeftVector"]="↽",
-["leftharpoonup"]="↼",
+["ecaron"]="ě",
+["nsub"]="⊄",
+["Fouriertrf"]="ℱ",
+["Qfr"]="𝔔",
+["dblac"]="˝",
+["sc"]="≻",
+["xrarr"]="⟶",
+["ImaginaryI"]="ⅈ",
+["angmsdag"]="⦮",
+["wopf"]="𝕨",
+["middot"]="·",
+["gsiml"]="⪐",
+["biguplus"]="⨄",
+["Prime"]="″",
+["bigcirc"]="◯",
+["vsubnE"]="⫋︀",
+["lrtri"]="⊿",
+["nparallel"]="∦",
["lbbrk"]="❲",
-["rarrtl"]="↣",
-["SucceedsEqual"]="⪰",
-["HumpDownHump"]="≎",
-["Vee"]="⋁",
-["Gopf"]="𝔾",
-["otilde"]="õ",
-["ofr"]="𝔬",
-["Sub"]="⋐",
-["gnE"]="≩",
-["SquareSuperset"]="⊐",
-["leftrightharpoons"]="⇋",
-["tosa"]="⤩",
-["Ucirc"]="Û",
-["mscr"]="𝓂",
-["Exists"]="∃",
-["langle"]="⟨",
-["rfr"]="𝔯",
-["THORN"]="Þ",
-["gtreqqless"]="⪌",
-["eqvparsl"]="⧥",
-["NotCongruent"]="≢",
-["phiv"]="ϕ",
-["lsquor"]="‚",
-["prec"]="≺",
-["igrave"]="ì",
-["Fopf"]="𝔽",
-["nwArr"]="⇖",
-["nscr"]="𝓃",
-["gescc"]="⪩",
-["intprod"]="⨼",
-["larrlp"]="↫",
-["AMP"]="&",
-["psi"]="ψ",
-["mDDot"]="∺",
-["VDash"]="⊫",
-["Lleftarrow"]="⇚",
-["mfr"]="𝔪",
+["dotsquare"]="⊡",
+["rceil"]="⌉",
["gesles"]="⪔",
-["kscr"]="𝓀",
-["Omega"]="Ω",
-["bumpe"]="≏",
-["NotDoubleVerticalBar"]="∦",
-["frac18"]="⅛",
-["ecolon"]="≕",
-["compfn"]="∘",
-["supdot"]="⪾",
-["Alpha"]="Α",
-["rsquor"]="’",
+["roarr"]="⇾",
+["simplus"]="⨤",
+["lagran"]="ℒ",
+["pr"]="≺",
+["mnplus"]="∓",
+["Iota"]="Ι",
+["NestedLessLess"]="≪",
+["utilde"]="ũ",
+["mldr"]="…",
+["bigstar"]="★",
+["micro"]="µ",
["percnt"]="%",
-["pfr"]="𝔭",
-["frasl"]="⁄",
-["lscr"]="𝓁",
-["aleph"]="ℵ",
-["swArr"]="⇙",
-["uuml"]="ü",
-["uacute"]="ú",
-["scE"]="⪴",
-["hellip"]="…",
+["fllig"]="fl",
+["euml"]="ë",
+["circledR"]="®",
+["lltri"]="◺",
+["IEcy"]="Е",
+["notniva"]="∌",
+["or"]="∨",
+["curvearrowleft"]="↶",
+["gnapprox"]="⪊",
+["NotLessSlantEqual"]="⩽̸",
+["Cconint"]="∰",
+["NotSucceedsTilde"]="≿̸",
+["gammad"]="ϝ",
+["rightharpoondown"]="⇁",
+["CounterClockwiseContourIntegral"]="∳",
+["supdot"]="⪾",
+["upsi"]="υ",
+["nvle"]="≤⃒",
+["beth"]="ℶ",
+["nhArr"]="⇎",
+["Gamma"]="Γ",
+["complement"]="∁",
+["xoplus"]="⨁",
+["chi"]="χ",
+["backepsilon"]="϶",
+["nsube"]="⊈",
+["aopf"]="𝕒",
+["para"]="¶",
+["drbkarow"]="⤐",
+["Dstrok"]="Đ",
+["isinE"]="⋹",
+["Ecirc"]="Ê",
+["aelig"]="æ",
["ulcorner"]="⌜",
-["prnap"]="⪹",
-["Gg"]="⋙",
-["wedge"]="∧",
-["SquareSubset"]="⊏",
-["qscr"]="𝓆",
-["kfr"]="𝔨",
-["RightTee"]="⊢",
-["eqsim"]="≂",
-["rbrksld"]="⦎",
-["ohm"]="Ω",
-["lozf"]="⧫",
-["cups"]="∪︀",
-["epsilon"]="ε",
-["ncap"]="⩃",
-["Leftarrow"]="⇐",
-["ultri"]="◸",
-["egrave"]="è",
-["vBarv"]="⫩",
-["bNot"]="⫭",
-["nfr"]="𝔫",
-["rsqb"]="]",
-["OpenCurlyDoubleQuote"]="“",
-["rsquo"]="’",
-["Del"]="∇",
-["smtes"]="⪬︀",
-["varphi"]="ϕ",
-["CirclePlus"]="⊕",
-["prcue"]="≼",
-["curren"]="¤",
-["nltri"]="⋪",
-["oscr"]="ℴ",
-["Wcirc"]="Ŵ",
-["prime"]="′",
-["ifr"]="𝔦",
-["apos"]="'",
-["UpTee"]="⊥",
-["lescc"]="⪨",
-["NegativeMediumSpace"]="​",
-["DownTee"]="⊤",
-["NotSquareSubsetEqual"]="⋢",
-["LowerRightArrow"]="↘",
-["wr"]="≀",
+["Lcaron"]="Ľ",
+["bopf"]="𝕓",
+["midast"]="*",
+["barvee"]="⊽",
+["nvgt"]=">⃒",
+["bnequiv"]="≡⃥",
+["caron"]="ˇ",
["andand"]="⩕",
-["gvnE"]="≩︀",
-["lfr"]="𝔩",
-["lowast"]="∗",
-["gfr"]="𝔤",
-["digamma"]="ϝ",
-["cemptyv"]="⦲",
-["ubreve"]="ŭ",
-["dstrok"]="đ",
+["eparsl"]="⧣",
+["xhArr"]="⟺",
+["Yuml"]="Ÿ",
+["fallingdotseq"]="≒",
+["vltri"]="⊲",
+["gtrarr"]="⥸",
+["nGtv"]="≫̸",
+["congdot"]="⩭",
+["lfisht"]="⥼",
+["nrtri"]="⋫",
+["prnsim"]="⋨",
+["nsupE"]="⫆̸",
+["Colone"]="⩴",
+["SquareSuperset"]="⊐",
+["boxUL"]="╝",
+["Rrightarrow"]="⇛",
+["nleftrightarrow"]="↮",
+["Conint"]="∯",
+["ffilig"]="ffi",
+["nleqq"]="≦̸",
+["drcrop"]="⌌",
+["boxh"]="─",
+["Lang"]="⟪",
+["ldrdhar"]="⥧",
+["rbrack"]="]",
+["nvinfin"]="⧞",
+["succsim"]="≿",
+["boxhu"]="┴",
+["tau"]="τ",
+["incare"]="℅",
+["flat"]="♭",
+["angst"]="Å",
+["Oslash"]="Ø",
+["Vfr"]="𝔙",
+["tscy"]="ц",
+["lates"]="⪭︀",
+["eopf"]="𝕖",
+["Because"]="∵",
+["frac25"]="⅖",
+["daleth"]="ℸ",
+["ic"]="⁣",
+["ensp"]=" ",
+["lrm"]="‎",
+["DoubleLeftRightArrow"]="⇔",
+["kappa"]="κ",
+["fopf"]="𝕗",
+["cularr"]="↶",
+["shy"]="­",
+["yen"]="¥",
+["glj"]="⪤",
+["dzcy"]="џ",
["expectation"]="ℰ",
-["sime"]="≃",
-["ltrif"]="◂",
-["iacute"]="í",
-["chi"]="χ",
+["dash"]="‐",
+["female"]="♀",
+["UnderBrace"]="⏟",
+["rotimes"]="⨵",
+["caps"]="∩︀",
+["copf"]="𝕔",
+["lparlt"]="⦓",
+["NotLess"]="≮",
+["simrarr"]="⥲",
+["dtri"]="▿",
+["supne"]="⊋",
+["block"]="█",
+["siml"]="⪝",
+["blk12"]="▒",
+["natural"]="♮",
+["frac34"]="¾",
+["frac38"]="⅜",
+["Ufr"]="𝔘",
+["gg"]="≫",
+["Square"]="□",
+["lt"]="<",
["erDot"]="≓",
-["Vcy"]="В",
+["RightAngleBracket"]="⟩",
+["LeftDownTeeVector"]="⥡",
+["NotGreaterGreater"]="≫̸",
+["uogon"]="ų",
+["ocirc"]="ô",
+["sung"]="♪",
+["dollar"]="$",
+["Scaron"]="Š",
+["top"]="⊤",
+["iopf"]="𝕚",
+["udhar"]="⥮",
+["gjcy"]="ѓ",
+["ncap"]="⩃",
+["circlearrowleft"]="↺",
+["bernou"]="ℬ",
+["angmsdaf"]="⦭",
+["ldsh"]="↲",
+["isins"]="⋴",
+["RoundImplies"]="⥰",
+["bigtriangledown"]="▽",
+["LeftAngleBracket"]="⟨",
+["HorizontalLine"]="─",
+["Vdashl"]="⫦",
+["rHar"]="⥤",
+["Tcaron"]="Ť",
+["LeftDownVectorBar"]="⥙",
+["jopf"]="𝕛",
+["LeftRightVector"]="⥎",
+["LessGreater"]="≶",
+["npart"]="∂̸",
+["nsmid"]="∤",
+["RightTriangleBar"]="⧐",
+["nesim"]="≂̸",
+["deg"]="°",
+["LeftTeeArrow"]="↤",
+["NotHumpDownHump"]="≎̸",
+["tridot"]="◬",
+["lceil"]="⌈",
+["ExponentialE"]="ⅇ",
+["tosa"]="⤩",
+["gopf"]="𝕘",
+["ContourIntegral"]="∮",
+["late"]="⪭",
+["bbrk"]="⎵",
+["half"]="½",
["boxhd"]="┬",
-["DoubleDownArrow"]="⇓",
-["lArr"]="⇐",
-["demptyv"]="⦱",
-["smt"]="⪪",
-["intcal"]="⊺",
-["in"]="∈",
-["capcup"]="⩇",
-["kjcy"]="ќ",
-["Ccirc"]="Ĉ",
-["bnequiv"]="≡⃥",
-["Emacr"]="Ē",
-["siml"]="⪝",
-["jfr"]="𝔧",
-["gesdoto"]="⪂",
-["efr"]="𝔢",
-["precneqq"]="⪵",
-["because"]="∵",
-["Udblac"]="Ű",
-["lg"]="≶",
-["boxvr"]="├",
-["fpartint"]="⨍",
-["rbbrk"]="❳",
-["LT"]="<",
-["cap"]="∩",
-["circledR"]="®",
-["notinvc"]="⋶",
-["zwj"]="‍",
-["nle"]="≰",
-["hfr"]="𝔥",
-["bigsqcup"]="⨆",
-["nGg"]="⋙̸",
-["doublebarwedge"]="⌆",
+["hopf"]="𝕙",
+["Ouml"]="Ö",
+["Atilde"]="Ã",
+["planckh"]="ℎ",
+["MinusPlus"]="∓",
+["uharl"]="↿",
+["aleph"]="ℵ",
+["boxHD"]="╦",
+["lesseqgtr"]="⋚",
+["colon"]=":",
+["SquareSupersetEqual"]="⊒",
+["isinsv"]="⋳",
+["lnapprox"]="⪉",
+["PrecedesSlantEqual"]="≼",
+["boxuL"]="╛",
+["csup"]="⫐",
+["hstrok"]="ħ",
+["leftrightharpoons"]="⇋",
+["boxuR"]="╘",
+["DD"]="ⅅ",
+["Longrightarrow"]="⟹",
+["epsilon"]="ε",
+["NotTildeTilde"]="≉",
+["nfr"]="𝔫",
+["Vscr"]="𝒱",
+["Ncy"]="Н",
+["boxUl"]="╜",
+["searr"]="↘",
+["ddagger"]="‡",
+["KHcy"]="Х",
+["NotSuperset"]="⊃⃒",
+["Uparrow"]="⇑",
+["nsqsube"]="⋢",
+["Imacr"]="Ī",
+["nspar"]="∦",
+["supsetneqq"]="⫌",
+["Sscr"]="𝒮",
+["lobrk"]="⟦",
+["mfr"]="𝔪",
+["acirc"]="â",
+["subne"]="⊊",
+["Icirc"]="Î",
+["Re"]="ℜ",
+["nearrow"]="↗",
["YUcy"]="Ю",
-["empty"]="∅",
-["nacute"]="ń",
-["Acirc"]="Â",
-["bigtriangleup"]="△",
-["hybull"]="⁃",
-["Ycy"]="Ы",
-["isindot"]="⋵",
-["iota"]="ι",
-["numero"]="№",
-["cfr"]="𝔠",
-["llarr"]="⇇",
-["lrhard"]="⥭",
-["cross"]="✗",
+["eqsim"]="≂",
+["UnionPlus"]="⊎",
+["topcir"]="⫱",
+["boxVL"]="╣",
+["Xscr"]="𝒳",
+["QUOT"]="\"",
+["RightDownVectorBar"]="⥕",
+["epsi"]="ε",
+["natur"]="♮",
+["leftthreetimes"]="⋋",
+["hercon"]="⊹",
+["lHar"]="⥢",
+["Aring"]="Å",
+["Kcedil"]="Ķ",
+["kfr"]="𝔨",
+["Oacute"]="Ó",
["zwnj"]="‌",
+["plusdu"]="⨥",
+["Kcy"]="К",
+["sqcup"]="⊔",
+["zscr"]="𝓏",
+["Assign"]="≔",
+["zopf"]="𝕫",
+["lstrok"]="ł",
+["zigrarr"]="⇝",
+["ShortDownArrow"]="↓",
+["simlE"]="⪟",
+["mid"]="∣",
["zeta"]="ζ",
-["precnsim"]="⋨",
-["zcy"]="з",
+["gE"]="≧",
+["zeetrf"]="ℨ",
+["qfr"]="𝔮",
["zcaron"]="ž",
-["xodot"]="⨀",
-["RightDownTeeVector"]="⥝",
-["ljcy"]="љ",
+["Yacute"]="Ý",
+["hksearow"]="⤥",
+["Atilde"]="Ã",
+["zacute"]="ź",
+["bsemi"]="⁏",
+["bigtriangleup"]="△",
+["yuml"]="ÿ",
+["yucy"]="ю",
["yscr"]="𝓎",
+["yopf"]="𝕪",
["yicy"]="ї",
-["Rcy"]="Р",
-["nsubset"]="⊂⃒",
-["yen"]="¥",
-["ycy"]="ы",
-["simeq"]="≃",
-["dharr"]="⇂",
-["ycirc"]="ŷ",
-["hArr"]="⇔",
-["yacute"]="ý",
-["yacute"]="ý",
+["urcorn"]="⌝",
+["Aacute"]="Á",
+["backsimeq"]="⋍",
+["ShortUpArrow"]="↑",
["xwedge"]="⋀",
-["xoplus"]="⨁",
-["nparsl"]="⫽⃥",
-["PartialD"]="∂",
-["YAcy"]="Я",
-["xrArr"]="⟹",
-["xotime"]="⨂",
-["sstarf"]="⋆",
-["yuml"]="ÿ",
-["Int"]="∬",
-["bsolb"]="⧅",
+["Jcy"]="Й",
+["nltrie"]="⋬",
+["starf"]="★",
+["zfr"]="𝔷",
+["comma"]=",",
+["xsqcup"]="⨆",
+["boxVr"]="╟",
+["cirscir"]="⧂",
+["ucirc"]="û",
+["Cross"]="⨯",
+["naturals"]="ℕ",
+["quaternions"]="ℍ",
+["xopf"]="𝕩",
+["xodot"]="⨀",
["xnis"]="⋻",
-["xmap"]="⟼",
-["hercon"]="⊹",
-["xlArr"]="⟸",
-["xharr"]="⟷",
-["rbrack"]="]",
+["lsaquo"]="‹",
+["xlarr"]="⟵",
+["Zacute"]="Ź",
+["vdash"]="⊢",
+["submult"]="⫁",
+["Oscr"]="𝒪",
["xdtri"]="▽",
-["diamond"]="⋄",
+["LowerRightArrow"]="↘",
["xcup"]="⋃",
-["subsup"]="⫓",
-["lneqq"]="≨",
-["dharl"]="⇃",
-["Scy"]="С",
-["wopf"]="𝕨",
-["rightleftharpoons"]="⇌",
-["wfr"]="𝔴",
-["nsupseteqq"]="⫆̸",
-["boxuR"]="╘",
-["permil"]="‰",
+["Ycy"]="Ы",
+["timesb"]="⊠",
+["Ucirc"]="Û",
+["eth"]="ð",
+["wscr"]="𝓌",
+["ratail"]="⤚",
+["wr"]="≀",
+["Ograve"]="Ò",
+["wp"]="℘",
+["euml"]="ë",
+["yfr"]="𝔶",
+["rangle"]="⟩",
+["hearts"]="♥",
["wedgeq"]="≙",
-["eparsl"]="⧣",
-["RoundImplies"]="⥰",
-["afr"]="𝔞",
-["vsubne"]="⊊︀",
-["sup2"]="²",
+["wedge"]="∧",
+["gtcir"]="⩺",
+["par"]="∥",
+["swarr"]="↙",
+["phiv"]="ϕ",
+["NotElement"]="∉",
+["alpha"]="α",
+["SquareUnion"]="⊔",
+["parsl"]="⫽",
["vscr"]="𝓋",
+["rharu"]="⇀",
+["vrtri"]="⊳",
+["comp"]="∁",
+["Agrave"]="À",
+["rdca"]="⤷",
+["vprop"]="∝",
+["Tscr"]="𝒯",
["vopf"]="𝕧",
-["lbrace"]="{",
+["ldca"]="⤶",
["vnsub"]="⊂⃒",
-["vltri"]="⊲",
-["Uacute"]="Ú",
-["vfr"]="𝔳",
-["sacute"]="ś",
-["njcy"]="њ",
-["frac35"]="⅗",
-["squf"]="▪",
+["gbreve"]="ğ",
+["NotSquareSubset"]="⊏̸",
+["verbar"]="|",
+["YAcy"]="Я",
["veeeq"]="≚",
-["lsime"]="⪍",
-["mapstoleft"]="↤",
+["downharpoonleft"]="⇃",
+["Star"]="⋆",
+["xfr"]="𝔵",
+["nges"]="⩾̸",
+["GreaterGreater"]="⪢",
+["vartriangleright"]="⊳",
+["rcy"]="р",
+["vartheta"]="ϑ",
+["varsupsetneqq"]="⫌︀",
+["dashv"]="⊣",
["varsupsetneq"]="⊋︀",
-["varsubsetneq"]="⊊︀",
-["Tcy"]="Т",
-["cwint"]="∱",
-["varsigma"]="ς",
-["LessGreater"]="≶",
+["Ncaron"]="Ň",
+["varsubsetneqq"]="⫋︀",
["varrho"]="ϱ",
-["varpropto"]="∝",
-["pr"]="≺",
-["backprime"]="‵",
+["triangledown"]="▿",
+["varpi"]="ϖ",
+["sol"]="/",
+["ssetmn"]="∖",
+["varnothing"]="∅",
["varkappa"]="ϰ",
-["Poincareplane"]="ℌ",
-["roplus"]="⨮",
-["Edot"]="Ė",
-["copysr"]="℗",
+["vangrt"]="⦜",
+["Leftarrow"]="⇐",
+["Qscr"]="𝒬",
+["uwangle"]="⦧",
+["rarrap"]="⥵",
["uuml"]="ü",
-["dfr"]="𝔡",
["uuarr"]="⇈",
-["uogon"]="ų",
-["Uscr"]="𝒰",
-["gel"]="⋛",
-["olarr"]="↺",
-["lsaquo"]="‹",
-["omacr"]="ō",
-["utdot"]="⋰",
-["or"]="∨",
-["Ocirc"]="Ô",
-["ClockwiseContourIntegral"]="∲",
-["SmallCircle"]="∘",
-["gtcc"]="⪧",
["uscr"]="𝓊",
+["urtri"]="◹",
+["uring"]="ů",
+["sect"]="§",
+["quatint"]="⨖",
["urcrop"]="⌎",
-["ContourIntegral"]="∮",
-["szlig"]="ß",
-["egs"]="⪖",
-["Ucy"]="У",
-["ange"]="⦤",
-["upharpoonright"]="↾",
-["xcap"]="⋂",
+["wfr"]="𝔴",
+["duhar"]="⥯",
+["upuparrows"]="⇈",
+["macr"]="¯",
+["SmallCircle"]="∘",
+["upsih"]="ϒ",
+["uplus"]="⊎",
+["shy"]="­",
+["uparrow"]="↑",
["uml"]="¨",
-["nsubseteqq"]="⫅̸",
+["eDot"]="≑",
+["blk34"]="▓",
+["umacr"]="ū",
+["ultri"]="◸",
+["rbbrk"]="❳",
["ulcorn"]="⌜",
-["uhblk"]="▀",
-["scirc"]="ŝ",
-["shy"]="­",
-["uharl"]="↿",
+["uharr"]="↾",
["ugrave"]="ù",
-["lstrok"]="ł",
-["Gamma"]="Γ",
-["udhar"]="⥮",
-["udblac"]="ű",
-["ucirc"]="û",
-["loang"]="⟬",
-["uarr"]="↑",
+["Ograve"]="Ò",
+["nsupseteq"]="⊉",
+["ufisht"]="⥾",
+["Breve"]="˘",
+["ucy"]="у",
+["cylcty"]="⌭",
+["ubreve"]="ŭ",
+["SHcy"]="Ш",
+["boxdR"]="╒",
+["awint"]="⨑",
+["uHar"]="⥣",
["uArr"]="⇑",
-["twoheadrightarrow"]="↠",
+["REG"]="®",
+["twoheadleftarrow"]="↞",
["tstrok"]="ŧ",
+["iprod"]="⨼",
["tshcy"]="ћ",
-["tscy"]="ц",
-["angsph"]="∢",
-["kappa"]="κ",
["tscr"]="𝓉",
-["tritime"]="⨻",
-["trisb"]="⧍",
+["trpezium"]="⏢",
+["ycirc"]="ŷ",
+["larrhk"]="↩",
+["triplus"]="⨹",
["triminus"]="⨺",
-["trie"]="≜",
-["tridot"]="◬",
-["aacute"]="á",
+["Rsh"]="↱",
+["becaus"]="∵",
+["Acirc"]="Â",
["trianglerighteq"]="⊵",
-["RightTeeVector"]="⥛",
["triangleright"]="▹",
+["hkswarow"]="⤦",
+["triangleq"]="≜",
+["AElig"]="Æ",
["trianglelefteq"]="⊴",
+["varpropto"]="∝",
["triangle"]="▵",
-["NegativeVeryThinSpace"]="​",
-["triangledown"]="▿",
-["dash"]="‐",
-["trade"]="™",
+["tprime"]="‴",
["topfork"]="⫚",
-["Upsi"]="ϒ",
-["topcir"]="⫱",
-["loplus"]="⨭",
-["Zdot"]="Ż",
-["lbrke"]="⦋",
-["angmsd"]="∡",
-["dArr"]="⇓",
-["topbot"]="⌶",
["toea"]="⤨",
-["iexcl"]="¡",
-["acirc"]="â",
-["easter"]="⩮",
-["CloseCurlyDoubleQuote"]="”",
-["cupcup"]="⩊",
-["rlhar"]="⇌",
-["nsimeq"]="≄",
-["Uparrow"]="⇑",
-["tau"]="τ",
-["npr"]="⊀",
-["phone"]="☎",
-["emacr"]="ē",
-["SHcy"]="Ш",
-["gtdot"]="⋗",
-["ReverseUpEquilibrium"]="⥯",
+["ac"]="∾",
+["timesd"]="⨰",
+["UpArrowDownArrow"]="⇅",
+["timesbar"]="⨱",
+["llhard"]="⥫",
+["CHcy"]="Ч",
+["odblac"]="ő",
+["THORN"]="Þ",
+["notni"]="∌",
+["nbump"]="≎̸",
+["eqcolon"]="≕",
["tilde"]="˜",
-["angmsdac"]="⦪",
-["duhar"]="⥯",
-["approxeq"]="≊",
-["NotSupersetEqual"]="⊉",
-["thorn"]="þ",
-["thksim"]="∼",
-["subsim"]="⫇",
-["bnot"]="⌐",
+["simgE"]="⪠",
+["intercal"]="⊺",
+["thetasym"]="ϑ",
+["xcirc"]="◯",
["thinsp"]=" ",
["thicksim"]="∼",
-["gt"]=">",
-["UpperLeftArrow"]="↖",
-["thetasym"]="ϑ",
-["simlE"]="⪟",
-["bbrktbrk"]="⎶",
-["Jcirc"]="Ĵ",
-["cedil"]="¸",
-["NotLessSlantEqual"]="⩽̸",
-["rx"]="℞",
-["infin"]="∞",
-["curlyvee"]="⋎",
-["LeftArrow"]="←",
-["tfr"]="𝔱",
-["blacksquare"]="▪",
-["emptyv"]="∅",
-["Mellintrf"]="ℳ",
-["aogon"]="ą",
-["succnapprox"]="⪺",
-["tcy"]="т",
-["ecaron"]="ě",
+["LeftArrowBar"]="⇤",
+["Uuml"]="Ü",
+["DownTeeArrow"]="↧",
+["cent"]="¢",
+["hookleftarrow"]="↩",
+["odiv"]="⨸",
+["therefore"]="∴",
+["ClockwiseContourIntegral"]="∲",
+["Ofr"]="𝔒",
+["auml"]="ä",
+["frac12"]="½",
+["nRightarrow"]="⇏",
+["kcedil"]="ķ",
+["DownRightVectorBar"]="⥗",
+["boxDL"]="╗",
["tcedil"]="ţ",
-["boxhU"]="╨",
-["boxVl"]="╢",
-["gacute"]="ǵ",
-["tcaron"]="ť",
-["boxDr"]="╓",
-["bump"]="≎",
-["blk12"]="▒",
-["RightArrow"]="→",
-["els"]="⪕",
-["apacir"]="⩯",
-["acy"]="а",
-["omid"]="⦶",
-["boxbox"]="⧉",
-["iecy"]="е",
-["szlig"]="ß",
-["upsih"]="ϒ",
-["swnwar"]="⤪",
-["Icirc"]="Î",
-["swarr"]="↙",
-["times"]="×",
-["Ograve"]="Ò",
-["hoarr"]="⇿",
-["NotTildeEqual"]="≄",
-["IEcy"]="Е",
-["iexcl"]="¡",
-["bdquo"]="„",
-["TildeTilde"]="≈",
+["boxUr"]="╙",
+["icirc"]="î",
+["lmoustache"]="⎰",
+["prime"]="′",
+["ngeq"]="≱",
["nshortparallel"]="∦",
-["subedot"]="⫃",
-["supsetneq"]="⊋",
-["CenterDot"]="·",
-["lessapprox"]="⪅",
-["LeftVectorBar"]="⥒",
-["bigoplus"]="⨁",
-["supseteqq"]="⫆",
-["drcorn"]="⌟",
-["hstrok"]="ħ",
-["HorizontalLine"]="─",
-["curarrm"]="⤼",
-["lopar"]="⦅",
+["szlig"]="ß",
+["Egrave"]="È",
+["sqsubset"]="⊏",
+["NotRightTriangleEqual"]="⋭",
+["swarrow"]="↙",
+["Ucirc"]="Û",
+["DownArrowBar"]="⤓",
+["Lfr"]="𝔏",
["wcirc"]="ŵ",
+["LessLess"]="⪡",
+["Tilde"]="∼",
+["empty"]="∅",
+["swarhk"]="⤦",
+["DownLeftVector"]="↽",
+["Uscr"]="𝒰",
+["khcy"]="х",
+["gesl"]="⋛︀",
+["supsub"]="⫔",
+["malt"]="✠",
+["cirmid"]="⫯",
+["PrecedesTilde"]="≾",
+["lharul"]="⥪",
+["rightleftharpoons"]="⇌",
+["Ccedil"]="Ç",
+["plusb"]="⊞",
+["nsupe"]="⊉",
+["geq"]="≥",
+["dHar"]="⥥",
+["lcedil"]="ļ",
+["ange"]="⦤",
+["supseteq"]="⊇",
+["Upsi"]="ϒ",
+["mapstodown"]="↧",
+["profalar"]="⌮",
+["cupdot"]="⊍",
+["mapstoleft"]="↤",
+["xotime"]="⨂",
+["tbrk"]="⎴",
+["supmult"]="⫂",
+["disin"]="⋲",
["suphsub"]="⫗",
-["Otilde"]="Õ",
-["EmptySmallSquare"]="◻",
+["eg"]="⪚",
["supedot"]="⫄",
-["Kopf"]="𝕂",
-["boxminus"]="⊟",
-["csupe"]="⫒",
-["Ffr"]="𝔉",
-["origof"]="⊶",
-["sup3"]="³",
-["boxH"]="═",
-["vsubnE"]="⫋︀",
-["Hcirc"]="Ĥ",
-["block"]="█",
+["NonBreakingSpace"]=" ",
+["Euml"]="Ë",
["bsolhsub"]="⟈",
-["Supset"]="⋑",
-["GreaterFullEqual"]="≧",
+["supdsub"]="⫘",
+["sup3"]="³",
+["DoubleLeftTee"]="⫤",
+["angrtvb"]="⊾",
+["supsim"]="⫈",
+["sup2"]="²",
+["sup2"]="²",
+["circledast"]="⊛",
+["rfr"]="𝔯",
+["darr"]="↓",
+["rarrhk"]="↪",
+["macr"]="¯",
["sup1"]="¹",
-["llcorner"]="⌞",
-["sopf"]="𝕤",
-["larrbfs"]="⤟",
-["succneqq"]="⪶",
-["part"]="∂",
-["eacute"]="é",
-["COPY"]="©",
-["frac23"]="⅔",
-["dbkarow"]="⤏",
-["succeq"]="⪰",
-["notni"]="∌",
-["Euml"]="Ë",
-["harrcir"]="⥈",
-["leftrightsquigarrow"]="↭",
-["xcirc"]="◯",
-["caret"]="⁁",
-["les"]="⩽",
-["lharul"]="⥪",
-["bsime"]="⋍",
-["DoubleLeftArrow"]="⇐",
-["ecirc"]="ê",
-["subsetneqq"]="⫋",
-["crarr"]="↵",
-["cuwed"]="⋏",
-["Ugrave"]="Ù",
-["Gcirc"]="Ĝ",
-["LeftTriangleBar"]="⧏",
+["aacute"]="á",
+["oscr"]="ℴ",
+["lharu"]="↼",
+["telrec"]="⌕",
+["Dashv"]="⫤",
+["succnsim"]="⋩",
+["AElig"]="Æ",
+["Vee"]="⋁",
+["succnapprox"]="⪺",
+["CapitalDifferentialD"]="ⅅ",
["gsim"]="≳",
-["RightTriangleEqual"]="⊵",
-["lacute"]="ĺ",
-["Ccedil"]="Ç",
-["ee"]="ⅇ",
-["heartsuit"]="♥",
-["coloneq"]="≔",
-["subseteq"]="⊆",
-["NotSucceedsTilde"]="≿̸",
+["succapprox"]="⪸",
+["rmoustache"]="⎱",
+["DotEqual"]="≐",
+["subsup"]="⫓",
+["Gcedil"]="Ģ",
+["questeq"]="≟",
+["lthree"]="⋋",
+["cong"]="≅",
+["lcub"]="{",
+["radic"]="√",
+["subrarr"]="⥹",
+["nvlt"]="<⃒",
["subplus"]="⪿",
-["cupcap"]="⩆",
-["Amacr"]="Ā",
-["angst"]="Å",
-["supsetneqq"]="⫌",
-["sube"]="⊆",
-["imagpart"]="ℑ",
-["Lambda"]="Λ",
-["Afr"]="𝔄",
-["sub"]="⊂",
+["bigsqcup"]="⨆",
+["downarrow"]="↓",
+["auml"]="ä",
+["boxdL"]="╕",
+["boxvr"]="├",
+["lbrkslu"]="⦍",
+["bigwedge"]="⋀",
+["apacir"]="⩯",
+["Wscr"]="𝒲",
+["iecy"]="е",
+["VerticalSeparator"]="❘",
+["Yfr"]="𝔜",
["strns"]="¯",
["straightphi"]="ϕ",
-["boxvL"]="╡",
-["dagger"]="†",
-["eta"]="η",
-["KHcy"]="Х",
-["Yfr"]="𝔜",
-["lbrack"]="[",
-["VerticalBar"]="∣",
-["rightleftarrows"]="⇄",
-["fltns"]="▱",
-["verbar"]="|",
-["RightAngleBracket"]="⟩",
-["DownRightVector"]="⇁",
-["Lacute"]="Ĺ",
-["sol"]="/",
-["lrm"]="‎",
-["lesdot"]="⩿",
-["nleqslant"]="⩽̸",
-["capcap"]="⩋",
+["kcy"]="к",
+["aogon"]="ą",
+["star"]="☆",
+["caret"]="⁁",
+["cups"]="∪︀",
+["iquest"]="¿",
+["spar"]="∥",
+["NotExists"]="∄",
+["Gt"]="≫",
["squ"]="□",
-["xutri"]="△",
-["TSHcy"]="Ћ",
-["gap"]="⪆",
-["gtrdot"]="⋗",
-["scnap"]="⪺",
-["bkarow"]="⤍",
-["NotPrecedes"]="⊀",
-["suphsol"]="⟉",
+["sqsupe"]="⊒",
+["subnE"]="⫋",
["sqsup"]="⊐",
-["epsi"]="ε",
-["sqsubset"]="⊏",
-["check"]="✓",
-["UpArrowBar"]="⤒",
-["NotPrecedesEqual"]="⪯̸",
-["csube"]="⫑",
-["nsupset"]="⊃⃒",
-["lesdoto"]="⪁",
+["sqsubseteq"]="⊑",
+["ffr"]="𝔣",
+["UpTeeArrow"]="↥",
+["middot"]="·",
+["DoubleLongRightArrow"]="⟹",
+["sqsube"]="⊑",
+["sce"]="⪰",
+["Sup"]="⋑",
+["cacute"]="ć",
+["GreaterFullEqual"]="≧",
+["pfr"]="𝔭",
+["Lleftarrow"]="⇚",
+["heartsuit"]="♥",
+["precsim"]="≾",
+["nsucceq"]="⪰̸",
["sqcups"]="⊔︀",
-["suplarr"]="⥻",
-["nsim"]="≁",
-["NotEqualTilde"]="≂̸",
-["nearr"]="↗",
-["SquareIntersection"]="⊓",
-["intlarhk"]="⨗",
-["Ecirc"]="Ê",
-["vangrt"]="⦜",
-["fllig"]="fl",
-["Leftrightarrow"]="⇔",
-["primes"]="ℙ",
-["nvlArr"]="⤂",
+["Igrave"]="Ì",
+["iquest"]="¿",
+["Pcy"]="П",
+["thksim"]="∼",
+["djcy"]="ђ",
+["hfr"]="𝔥",
+["spadesuit"]="♠",
+["rbrkslu"]="⦐",
+["shcy"]="ш",
+["barwed"]="⌅",
+["rpar"]=")",
+["iiiint"]="⨌",
+["solb"]="⧄",
+["Integral"]="∫",
+["napE"]="⩰̸",
+["softcy"]="ь",
+["NotRightTriangleBar"]="⧐̸",
+["Mu"]="Μ",
+["frasl"]="⁄",
+["Icy"]="И",
+["dfisht"]="⥿",
["smte"]="⪬",
-["ltri"]="◃",
-["Tscr"]="𝒯",
+["smt"]="⪪",
+["bottom"]="⊥",
+["oacute"]="ó",
+["ofr"]="𝔬",
["smid"]="∣",
-["smeparsl"]="⧤",
-["rarrc"]="⤳",
-["divideontimes"]="⋇",
-["eth"]="ð",
-["boxvR"]="╞",
-["copy"]="©",
-["nges"]="⩾̸",
-["fcy"]="ф",
-["ShortUpArrow"]="↑",
-["simplus"]="⨤",
-["frac45"]="⅘",
-["nexists"]="∄",
-["LeftTeeArrow"]="↤",
-["leftleftarrows"]="⇇",
-["simg"]="⪞",
-["euro"]="€",
-["simdot"]="⩪",
-["sim"]="∼",
-["sigmav"]="ς",
-["iuml"]="ï",
-["updownarrow"]="↕",
-["shy"]="­",
-["solb"]="⧄",
+["ReverseUpEquilibrium"]="⥯",
+["smashp"]="⨳",
+["slarr"]="←",
+["simne"]="≆",
+["LeftRightArrow"]="↔",
+["thkap"]="≈",
+["nlArr"]="⇍",
+["chcy"]="ч",
+["not"]="¬",
+["kgreen"]="ĸ",
+["simeq"]="≃",
+["LongRightArrow"]="⟶",
+["sime"]="≃",
+["sigma"]="σ",
+["odot"]="⊙",
+["amp"]="&",
+["Longleftrightarrow"]="⟺",
+["Upsilon"]="Υ",
+["upharpoonleft"]="↿",
+["bigotimes"]="⨂",
+["parallel"]="∥",
+["ffllig"]="ffl",
+["shortparallel"]="∥",
+["boxdr"]="┌",
+["shortmid"]="∣",
+["Euml"]="Ë",
+["UpDownArrow"]="↕",
+["lcaron"]="ľ",
+["sfrown"]="⌢",
+["harr"]="↔",
+["dsol"]="⧶",
+["Beta"]="Β",
+["srarr"]="→",
+["boxHd"]="╤",
["nesear"]="⤨",
-["Umacr"]="Ū",
-["uharr"]="↾",
-["Therefore"]="∴",
-["Barv"]="⫧",
-["amacr"]="ā",
["setmn"]="∖",
+["DoubleDot"]="¨",
["setminus"]="∖",
-["Sscr"]="𝒮",
+["andd"]="⩜",
+["leftrightarrow"]="↔",
["seswar"]="⤩",
-["ccupssm"]="⩐",
-["searr"]="↘",
+["eogon"]="ę",
+["bne"]="=⃥",
+["DownBreve"]="̑",
+["nLtv"]="≪̸",
+["nprcue"]="⋠",
+["SucceedsSlantEqual"]="≽",
+["downdownarrows"]="⇊",
+["seArr"]="⇘",
+["Utilde"]="Ũ",
+["Gammad"]="Ϝ",
+["sdote"]="⩦",
+["iexcl"]="¡",
+["nvdash"]="⊬",
+["csupe"]="⫒",
["sdotb"]="⊡",
-["icirc"]="î",
-["amp"]="&",
-["gcy"]="г",
-["Aacute"]="Á",
-["boxvh"]="┼",
-["bfr"]="𝔟",
-["OverParenthesis"]="⏜",
-["sqsupe"]="⊒",
-["amp"]="&",
-["frac14"]="¼",
-["ZeroWidthSpace"]="​",
-["Colon"]="∷",
-["Proportional"]="∝",
-["thickapprox"]="≈",
-["subseteqq"]="⫅",
-["IJlig"]="IJ",
-["scedil"]="ş",
-["lrarr"]="⇆",
-["angmsdaf"]="⦭",
-["downharpoonleft"]="⇃",
+["scsim"]="≿",
+["bcy"]="б",
+["NotTilde"]="≁",
+["minus"]="−",
+["scnE"]="⪶",
+["scirc"]="ŝ",
+["oplus"]="⊕",
+["para"]="¶",
+["Ycirc"]="Ŷ",
+["notinva"]="∉",
+["nLl"]="⋘̸",
+["Aring"]="Å",
+["THORN"]="Þ",
+["numero"]="№",
+["scaron"]="š",
+["bsol"]="\\",
+["harrw"]="↭",
+["exponentiale"]="ⅇ",
+["eDDot"]="⩷",
+["AMP"]="&",
+["gamma"]="γ",
+["opar"]="⦷",
+["cwint"]="∱",
+["GreaterEqual"]="≥",
+["bigcap"]="⋂",
+["rtimes"]="⋊",
+["integers"]="ℤ",
+["easter"]="⩮",
["RightDoubleBracket"]="⟧",
-["half"]="½",
-["larr"]="←",
["sbquo"]="‚",
-["Vscr"]="𝒱",
-["nVdash"]="⊮",
-["DownRightVectorBar"]="⥗",
-["RightDownVector"]="⇂",
-["disin"]="⋲",
-["nsce"]="⪰̸",
-["rbrace"]="}",
-["MinusPlus"]="∓",
-["rtrif"]="▸",
-["parsim"]="⫳",
-["supseteq"]="⊇",
-["Superset"]="⊃",
-["Verbar"]="‖",
+["cfr"]="𝔠",
+["ruluhar"]="⥨",
+["image"]="ℑ",
+["nleqslant"]="⩽̸",
+["Yopf"]="𝕐",
+["apE"]="⩰",
+["NotPrecedesEqual"]="⪯̸",
+["rsqb"]="]",
+["rtrie"]="⊵",
+["rthree"]="⋌",
+["amp"]="&",
+["eng"]="ŋ",
+["ll"]="≪",
+["rrarr"]="⇉",
+["RightTee"]="⊢",
+["ETH"]="Ð",
+["ReverseEquilibrium"]="⇋",
+["langle"]="⟨",
["Zeta"]="Ζ",
-["nsccue"]="⋡",
-["bsemi"]="⁏",
-["ldquor"]="„",
-["curarr"]="↷",
-["rscr"]="𝓇",
-["rppolint"]="⨒",
-["rpargt"]="⦔",
-["rotimes"]="⨵",
-["Equal"]="⩵",
-["ropf"]="𝕣",
-["ropar"]="⦆",
-["roarr"]="⇾",
-["odot"]="⊙",
-["natural"]="♮",
-["slarr"]="←",
-["angmsdae"]="⦬",
-["acE"]="∾̳",
+["roplus"]="⨮",
+["there4"]="∴",
+["DownRightTeeVector"]="⥟",
+["npar"]="∦",
+["robrk"]="⟧",
+["exist"]="∃",
+["lfr"]="𝔩",
+["VDash"]="⊫",
+["rnmid"]="⫮",
+["rmoust"]="⎱",
["rlm"]="‏",
-["COPY"]="©",
-["iogon"]="į",
-["nleftrightarrow"]="↮",
-["reg"]="®",
-["risingdotseq"]="≓",
-["rightsquigarrow"]="↝",
-["dtri"]="▿",
-["Larr"]="↞",
-["icy"]="и",
-["gimel"]="ℷ",
+["Ccirc"]="Ĉ",
+["imagpart"]="ℑ",
+["Equilibrium"]="⇌",
+["dd"]="ⅆ",
+["cuepr"]="⋞",
+["Agrave"]="À",
+["cuesc"]="⋟",
+["square"]="□",
+["notnivc"]="⋽",
+["rbrksld"]="⦎",
["cup"]="∪",
-["DJcy"]="Ђ",
-["gtrapprox"]="⪆",
-["rightharpoonup"]="⇀",
-["prsim"]="≾",
-["rightharpoondown"]="⇁",
-["frac16"]="⅙",
-["nbsp"]=" ",
-["cedil"]="¸",
-["numsp"]=" ",
+["OpenCurlyDoubleQuote"]="“",
+["Lacute"]="Ĺ",
+["NewLine"]="\n",
+["Sigma"]="Σ",
+["Abreve"]="Ă",
+["rightleftarrows"]="⇄",
+["tint"]="∭",
+["angmsdae"]="⦬",
+["Leftrightarrow"]="⇔",
+["rdquor"]="”",
+["Verbar"]="‖",
+["Gfr"]="𝔊",
["rightarrow"]="→",
["rhov"]="ϱ",
-["rdquo"]="”",
-["rharul"]="⥬",
-["frac34"]="¾",
-["ldrdhar"]="⥧",
-["gnsim"]="⋧",
-["rtriltri"]="⧎",
-["emsp"]=" ",
-["rlarr"]="⇄",
-["Oslash"]="Ø",
-["LeftDownTeeVector"]="⥡",
+["Alpha"]="Α",
+["rho"]="ρ",
+["DownLeftTeeVector"]="⥞",
+["ntriangleright"]="⋫",
["reg"]="®",
-["LeftTeeVector"]="⥚",
-["gsiml"]="⪐",
-["QUOT"]="\"",
-["blk14"]="░",
-["rightrightarrows"]="⇉",
-["NotGreaterGreater"]="≫̸",
-["Xscr"]="𝒳",
-["Re"]="ℜ",
-["Ouml"]="Ö",
+["Int"]="∬",
+["agrave"]="à",
+["Ecirc"]="Ê",
+["NotReverseElement"]="∌",
+["backprime"]="‵",
+["Jfr"]="𝔍",
["rdsh"]="↳",
-["and"]="∧",
-["larrb"]="⇤",
-["TripleDot"]="⃛",
-["bcy"]="б",
-["diams"]="♦",
-["veebar"]="⊻",
-["rcub"]="}",
-["Scirc"]="Ŝ",
-["ac"]="∾",
-["rceil"]="⌉",
-["rcedil"]="ŗ",
-["cupbrcap"]="⩈",
-["rcaron"]="ř",
-["cuesc"]="⋟",
-["HilbertSpace"]="ℋ",
-["plus"]="+",
-["rbrkslu"]="⦐",
-["LessLess"]="⪡",
-["macr"]="¯",
-["notinE"]="⋹̸",
+["jsercy"]="ј",
+["Bscr"]="ℬ",
+["boxH"]="═",
+["leq"]="≤",
+["NotPrecedes"]="⊀",
+["coloneq"]="≔",
+["boxvh"]="┼",
+["larr"]="←",
+["ncup"]="⩂",
+["EmptySmallSquare"]="◻",
+["vartriangleleft"]="⊲",
+["iacute"]="í",
+["nVDash"]="⊯",
+["lap"]="⪅",
+["precapprox"]="⪷",
+["ecolon"]="≕",
+["lsqb"]="[",
["rbarr"]="⤍",
-["abreve"]="ă",
-["sqcup"]="⊔",
-["ratail"]="⤚",
-["VeryThinSpace"]=" ",
-["Uarrocir"]="⥉",
-["rarrfs"]="⤞",
-["Odblac"]="Ő",
-["Imacr"]="Ī",
-["ordm"]="º",
-["odsold"]="⦼",
-["NJcy"]="Њ",
-["Yacute"]="Ý",
-["rarrbfs"]="⤠",
-["prop"]="∝",
-["notin"]="∉",
-["vsupne"]="⊋︀",
-["bigcap"]="⋂",
-["Phi"]="Φ",
-["Ograve"]="Ò",
-["Yscr"]="𝒴",
-["approx"]="≈",
-["racute"]="ŕ",
-["ggg"]="⋙",
-["lmoust"]="⎰",
+["yacy"]="я",
+["efDot"]="≒",
+["ratio"]="∶",
+["wreath"]="≀",
+["nearhk"]="⤤",
+["rarrpl"]="⥅",
+["nvge"]="≥⃒",
+["searrow"]="↘",
+["thorn"]="þ",
+["rdquo"]="”",
+["LessFullEqual"]="≦",
+["nvrtrie"]="⊵⃒",
+["nsubseteqq"]="⫅̸",
+["nedot"]="≐̸",
+["VerticalLine"]="|",
+["lsh"]="↰",
+["DownRightVector"]="⇁",
+["ecirc"]="ê",
+["andv"]="⩚",
+["trie"]="≜",
+["race"]="∽̱",
["rBarr"]="⤏",
-["gneqq"]="≩",
-["isinv"]="∈",
-["harr"]="↔",
-["rArr"]="⇒",
-["rAarr"]="⇛",
-["quot"]="\"",
+["lbrksld"]="⦏",
+["emsp14"]=" ",
+["RuleDelayed"]="⧴",
+["vsubne"]="⊊︀",
+["ShortLeftArrow"]="←",
+["gtlPar"]="⦕",
["quest"]="?",
-["iuml"]="ï",
-["LeftRightArrow"]="↔",
-["LeftDoubleBracket"]="⟦",
-["gesdot"]="⪀",
-["Ntilde"]="Ñ",
-["boxUR"]="╚",
-["exist"]="∃",
-["subnE"]="⫋",
-["ograve"]="ò",
-["qopf"]="𝕢",
-["Zacute"]="Ź",
-["qfr"]="𝔮",
-["dcy"]="д",
-["NotReverseElement"]="∌",
-["DotEqual"]="≐",
-["VerticalLine"]="|",
-["pscr"]="𝓅",
-["prurel"]="⊰",
-["cdot"]="ċ",
-["bprime"]="‵",
-["ltdot"]="⋖",
-["prnsim"]="⋨",
-["curlywedge"]="⋏",
-["prnE"]="⪵",
-["REG"]="®",
-["sup3"]="³",
+["dot"]="˙",
+["RightVector"]="⇀",
+["rppolint"]="⨒",
+["Hat"]="^",
+["zcy"]="з",
+["suplarr"]="⥻",
+["boxhU"]="╨",
+["puncsp"]=" ",
+["GreaterLess"]="≷",
+["psi"]="ψ",
+["ncaron"]="ň",
+["SupersetEqual"]="⊇",
+["propto"]="∝",
["preceq"]="⪯",
-["LeftDownVectorBar"]="⥙",
-["ForAll"]="∀",
+["frac56"]="⅚",
+["NotLessGreater"]="≸",
+["jukcy"]="є",
+["swArr"]="⇙",
+["profline"]="⌒",
+["prnE"]="⪵",
+["larrpl"]="⤹",
+["af"]="⁡",
+["profsurf"]="⌓",
+["Larr"]="↞",
["forkv"]="⫙",
-["varpi"]="ϖ",
-["nrArr"]="⇏",
+["prcue"]="≼",
+["RightUpTeeVector"]="⥜",
["pound"]="£",
+["ugrave"]="ù",
+["popf"]="𝕡",
+["frac78"]="⅞",
+["suphsol"]="⟉",
+["loplus"]="⨭",
+["pointint"]="⨕",
+["cupcap"]="⩆",
+["LessTilde"]="≲",
+["pm"]="±",
+["blacksquare"]="▪",
["plustwo"]="⨧",
-["shchcy"]="щ",
-["cacute"]="ć",
-["Dashv"]="⫤",
-["lHar"]="⥢",
-["NotLeftTriangle"]="⋪",
-["gbreve"]="ğ",
-["boxDl"]="╖",
-["Beta"]="Β",
-["ReverseEquilibrium"]="⇋",
+["copy"]="©",
+["plussim"]="⨦",
+["Lcy"]="Л",
+["pluse"]="⩲",
+["ropar"]="⦆",
+["OpenCurlyQuote"]="‘",
["plusacir"]="⨣",
-["eqslantgtr"]="⪖",
-["ecy"]="э",
-["pitchfork"]="⋔",
-["ctdot"]="⋯",
-["odiv"]="⨸",
-["lesseqqgtr"]="⪋",
-["GreaterLess"]="≷",
-["Ocy"]="О",
-["weierp"]="℘",
-["Uring"]="Ů",
-["period"]=".",
-["nis"]="⋼",
-["cudarrr"]="⤵",
-["boxHU"]="╩",
-["Ouml"]="Ö",
-["Assign"]="≔",
-["Lscr"]="ℒ",
-["parallel"]="∥",
-["there4"]="∴",
-["cupor"]="⩅",
-["nwarr"]="↖",
-["para"]="¶",
-["ouml"]="ö",
-["otimes"]="⊗",
-["drbkarow"]="⤐",
-["puncsp"]=" ",
-["otilde"]="õ",
-["Vvdash"]="⊪",
-["osol"]="⊘",
+["Exists"]="∃",
+["piv"]="ϖ",
+["phmmat"]="ℳ",
+["angzarr"]="⍼",
+["vsupnE"]="⫌︀",
+["phi"]="φ",
+["perp"]="⊥",
+["rdldhar"]="⥩",
+["ccirc"]="ĉ",
+["Tfr"]="𝔗",
+["Tcy"]="Т",
+["circeq"]="≗",
+["InvisibleTimes"]="⁢",
+["OElig"]="Œ",
+["trisb"]="⧍",
+["Rcaron"]="Ř",
+["olt"]="⧀",
+["UpArrow"]="↑",
+["DDotrahd"]="⤑",
+["Uarrocir"]="⥉",
+["lacute"]="ĺ",
["oslash"]="ø",
-["dd"]="ⅆ",
-["NotPrecedesSlantEqual"]="⋠",
-["orv"]="⩛",
-["orslope"]="⩗",
-["KJcy"]="Ќ",
-["larrfs"]="⤝",
-["orderof"]="ℴ",
-["asympeq"]="≍",
-["ord"]="⩝",
-["NotLess"]="≮",
-["NotGreater"]="≯",
-["ThinSpace"]=" ",
-["ominus"]="⊖",
+["Uarr"]="↟",
+["bsolb"]="⧅",
+["gt"]=">",
+["ordm"]="º",
+["Itilde"]="Ĩ",
+["ordm"]="º",
+["Jscr"]="𝒥",
+["Rarr"]="↠",
+["measuredangle"]="∡",
["DoubleLongLeftRightArrow"]="⟺",
-["lesseqgtr"]="⋚",
+["lmidot"]="ŀ",
+["period"]=".",
["operp"]="⦹",
-["quaternions"]="ℍ",
-["boxdR"]="╒",
-["omega"]="ω",
-["Kscr"]="𝒦",
-["lessgtr"]="≶",
-["utilde"]="ũ",
-["olt"]="⧀",
-["Rho"]="Ρ",
-["olcir"]="⦾",
-["oint"]="∮",
+["bprime"]="‵",
+["numsp"]=" ",
+["ominus"]="⊖",
+["nldr"]="‥",
["ograve"]="ò",
-["Succeeds"]="≻",
-["Igrave"]="Ì",
-["eogon"]="ę",
-["Uacute"]="Ú",
-["bbrk"]="⎵",
-["ocy"]="о",
-["bcong"]="≌",
+["omicron"]="ο",
+["nearr"]="↗",
+["jcirc"]="ĵ",
+["nlE"]="≦̸",
+["deg"]="°",
+["frac13"]="⅓",
+["tcy"]="т",
+["lowbar"]="_",
+["vfr"]="𝔳",
+["ogon"]="˛",
+["sim"]="∼",
+["ocirc"]="ô",
+["Icirc"]="Î",
+["ocir"]="⊚",
+["ZeroWidthSpace"]="​",
["oast"]="⊛",
+["smile"]="⌣",
+["bigvee"]="⋁",
["oacute"]="ó",
-["cir"]="○",
-["angmsdab"]="⦩",
-["Iscr"]="ℐ",
-["ldquo"]="“",
-["RightVector"]="⇀",
-["euml"]="ë",
-["between"]="≬",
-["oS"]="Ⓢ",
-["downdownarrows"]="⇊",
-["nvlt"]="<⃒",
-["lurdshar"]="⥊",
-["starf"]="★",
-["xlarr"]="⟵",
-["Aring"]="Å",
-["Xi"]="Ξ",
-["gtcir"]="⩺",
-["Nscr"]="𝒩",
-["elinters"]="⏧",
-["ntrianglelefteq"]="⋬",
-["Vbar"]="⫫",
+["Egrave"]="È",
+["nwnear"]="⤧",
+["nwarhk"]="⤣",
+["rationals"]="ℚ",
+["DiacriticalGrave"]="`",
+["npreceq"]="⪯̸",
+["rarrc"]="⤳",
+["Uogon"]="Ų",
+["InvisibleComma"]="⁣",
+["nvltrie"]="⊴⃒",
+["digamma"]="ϝ",
+["cirE"]="⧃",
+["AMP"]="&",
+["Theta"]="Θ",
+["frac15"]="⅕",
+["fnof"]="ƒ",
+["icirc"]="î",
+["Cdot"]="Ċ",
+["ngsim"]="≵",
+["sube"]="⊆",
+["tcaron"]="ť",
["ntilde"]="ñ",
-["andv"]="⩚",
-["Rsh"]="↱",
-["angmsdad"]="⦫",
-["nsup"]="⊅",
-["nbsp"]=" ",
-["SquareSupersetEqual"]="⊒",
-["ETH"]="Ð",
-["nsube"]="⊈",
-["DoubleContourIntegral"]="∯",
-["nsubE"]="⫅̸",
-["angmsdah"]="⦯",
-["NotLessGreater"]="≸",
-["awint"]="⨑",
-["rtri"]="▹",
-["nsc"]="⊁",
-["boxvl"]="┤",
-["beta"]="β",
-["LessSlantEqual"]="⩽",
-["supsub"]="⫔",
-["agrave"]="à",
-["LeftUpTeeVector"]="⥠",
-["nrarrw"]="↝̸",
-["ltcc"]="⪦",
-["nrarrc"]="⤳̸",
-["frac78"]="⅞",
-["nvrArr"]="⤃",
-["igrave"]="ì",
-["barwed"]="⌅",
-["Mscr"]="ℳ",
-["nrarr"]="↛",
-["SubsetEqual"]="⊆",
-["notnivc"]="⋽",
-["notnivb"]="⋾",
-["succcurlyeq"]="≽",
-["eth"]="ð",
-["notinva"]="∉",
-["Otilde"]="Õ",
-["star"]="☆",
-["rangd"]="⦒",
-["Psi"]="Ψ",
-["nsupe"]="⊉",
-["mapstoup"]="↥",
-["LJcy"]="Љ",
-["looparrowleft"]="↫",
-["nlarr"]="↚",
-["Ll"]="⋘",
-["ordf"]="ª",
-["ni"]="∋",
+["ufr"]="𝔲",
+["Mcy"]="М",
["Delta"]="Δ",
-["NotVerticalBar"]="∤",
-["backcong"]="≌",
-["NoBreak"]="⁠",
+["vnsup"]="⊃⃒",
+["lAtail"]="⤛",
+["DoubleUpArrow"]="⇑",
+["aelig"]="æ",
+["lscr"]="𝓁",
+["Rscr"]="ℛ",
+["capcup"]="⩇",
+["npolint"]="⨔",
+["gesdotol"]="⪄",
+["uacute"]="ú",
+["bumpE"]="⪮",
+["drcorn"]="⌟",
+["notnivb"]="⋾",
+["notinvc"]="⋶",
+["ovbar"]="⌽",
+["Mopf"]="𝕄",
+["NotGreater"]="≯",
+["boxDr"]="╓",
+["lrcorner"]="⌟",
+["nleq"]="≰",
+["nleftarrow"]="↚",
+["nle"]="≰",
+["boxvl"]="┤",
+["Downarrow"]="⇓",
+["hcirc"]="ĥ",
["nharr"]="↮",
+["tfr"]="𝔱",
+["nlt"]="≮",
+["gacute"]="ǵ",
+["colone"]="≔",
+["Rang"]="⟫",
["ngt"]="≯",
-["Pscr"]="𝒫",
-["laemptyv"]="⦴",
-["utrif"]="▴",
-["ngeq"]="≱",
-["ncedil"]="ņ",
-["ncaron"]="ň",
-["boxhu"]="┴",
-["NotSquareSuperset"]="⊐̸",
-["bull"]="•",
+["ntilde"]="ñ",
+["vcy"]="в",
+["boxvL"]="╡",
+["NotLeftTriangleBar"]="⧏̸",
+["NestedGreaterGreater"]="≫",
+["xmap"]="⟼",
+["napid"]="≋̸",
+["LeftTriangleBar"]="⧏",
["SquareSubsetEqual"]="⊑",
-["VerticalSeparator"]="❘",
-["natur"]="♮",
-["ffr"]="𝔣",
-["rdquor"]="”",
-["lagran"]="ℒ",
-["nRightarrow"]="⇏",
-["nLtv"]="≪̸",
-["nLl"]="⋘̸",
-["Epsilon"]="Ε",
-["csup"]="⫐",
-["leftarrow"]="←",
-["nGt"]="≫⃒",
-["multimap"]="⊸",
-["mstpos"]="∾",
-["SuchThat"]="∋",
-["mldr"]="…",
-["midast"]="*",
-["Sum"]="∑",
-["vartheta"]="ϑ",
-["mapsto"]="↦",
-["nsupseteq"]="⊉",
-["Oscr"]="𝒪",
-["forall"]="∀",
-["aring"]="å",
-["ltimes"]="⋉",
-["ltcir"]="⩹",
-["lt"]="<",
-["ii"]="ⅈ",
-["equest"]="≟",
-["scsim"]="≿",
-["lsqb"]="[",
-["lsimg"]="⪏",
-["Egrave"]="È",
-["Downarrow"]="⇓",
-["lsim"]="≲",
-["eqslantless"]="⪕",
-["ucirc"]="û",
-["Auml"]="Ä",
-["lnsim"]="⋦",
-["uplus"]="⊎",
-["lhblk"]="▄",
-["Ugrave"]="Ù",
-["dlcrop"]="⌍",
-["OElig"]="Œ",
-["lesg"]="⋚︀",
-["lesdotor"]="⪃",
-["eg"]="⪚",
-["lvertneqq"]="≨︀",
-["leqslant"]="⩽",
-["ccups"]="⩌",
-["lceil"]="⌈",
-["auml"]="ä",
-["RightCeiling"]="⌉",
-["lbrksld"]="⦏",
-["lbarr"]="⤌",
+["eacute"]="é",
+["ne"]="≠",
+["ncongdot"]="⩭̸",
+["boxvR"]="╞",
+["PrecedesEqual"]="⪯",
+["Omacr"]="Ō",
+["egs"]="⪖",
+["ouml"]="ö",
+["nbsp"]=" ",
+["xuplus"]="⨄",
+["napprox"]="≉",
+["CloseCurlyQuote"]="’",
+["nacute"]="ń",
+["Chi"]="Χ",
+["subsub"]="⫕",
+["gescc"]="⪩",
+["gcirc"]="ĝ",
+["Lsh"]="↰",
+["sfr"]="𝔰",
+["circlearrowright"]="↻",
+["rcaron"]="ř",
+["ThinSpace"]=" ",
+["otilde"]="õ",
+["TRADE"]="™",
+["cudarrl"]="⤸",
["lat"]="⪫",
-["Rscr"]="ℛ",
-["Zcy"]="З",
-["bigwedge"]="⋀",
-["Prime"]="″",
+["nLeftrightarrow"]="⇎",
+["leqq"]="≦",
+["dagger"]="†",
+["dstrok"]="đ",
+["sacute"]="ś",
+["Amacr"]="Ā",
+["mumap"]="⊸",
+["models"]="⊧",
+["DiacriticalAcute"]="´",
+["minusd"]="∸",
+["hybull"]="⁃",
+["ijlig"]="ij",
+["fflig"]="ff",
+["NotGreaterEqual"]="≱",
+["Colon"]="∷",
+["boxV"]="║",
+["DotDot"]="⃜",
+["mdash"]="—",
+["hairsp"]=" ",
+["bcong"]="≌",
+["mcomma"]="⨩",
+["cirfnint"]="⨐",
+["TScy"]="Ц",
+["luruhar"]="⥦",
+["awconint"]="∳",
+["nsim"]="≁",
+["els"]="⪕",
+["imof"]="⊷",
+["lpar"]="(",
+["lozenge"]="◊",
+["oint"]="∮",
+["Umacr"]="Ū",
+["Sum"]="∑",
+["lopar"]="⦅",
+["racute"]="ŕ",
+["LessEqualGreater"]="⋚",
+["Wedge"]="⋀",
+["bbrktbrk"]="⎶",
+["RightDownTeeVector"]="⥝",
+["HumpDownHump"]="≎",
+["rarrb"]="⇥",
+["longleftrightarrow"]="⟷",
+["lnE"]="≨",
+["NotGreaterSlantEqual"]="⩾̸",
+["Nu"]="Ν",
+["NotNestedLessLess"]="⪡̸",
+["UpEquilibrium"]="⥮",
+["boxhD"]="╥",
+["el"]="⪙",
["boxDR"]="╔",
-["scnsim"]="⋩",
-["efDot"]="≒",
-["kopf"]="𝕜",
-["minusdu"]="⨪",
-["kappav"]="ϰ",
+["Gdot"]="Ġ",
+["itilde"]="ĩ",
+["isindot"]="⋵",
+["GreaterEqualLess"]="⋛",
+["Ll"]="⋘",
+["nrarrw"]="↝̸",
+["supnE"]="⫌",
+["epsiv"]="ϵ",
+["Element"]="∈",
+["gtreqless"]="⋛",
+["laemptyv"]="⦴",
+["nGt"]="≫⃒",
+["angsph"]="∢",
+["lE"]="≦",
+["kscr"]="𝓀",
+["Ocy"]="О",
+["LowerLeftArrow"]="↙",
+["dopf"]="𝕕",
+["iukcy"]="і",
+["atilde"]="ã",
+["DoubleRightArrow"]="⇒",
+["oslash"]="ø",
+["rarr"]="→",
+["intprod"]="⨼",
+["hookrightarrow"]="↪",
+["intcal"]="⊺",
+["infintie"]="⧝",
+["escr"]="ℯ",
+["iiota"]="℩",
+["curren"]="¤",
+["Bernoullis"]="ℬ",
+["angmsdah"]="⦯",
+["ShortRightArrow"]="→",
+["boxUR"]="╚",
+["ges"]="⩾",
+["DoubleDownArrow"]="⇓",
+["NotSquareSuperset"]="⊐̸",
+["lsim"]="≲",
+["bump"]="≎",
+["curlyeqsucc"]="⋟",
+["SHCHcy"]="Щ",
+["frac45"]="⅘",
+["qint"]="⨌",
+["Precedes"]="≺",
+["RightTeeArrow"]="↦",
+["frac16"]="⅙",
+["euro"]="€",
+["smtes"]="⪬︀",
+["eth"]="ð",
+["ldquo"]="“",
+["equivDD"]="⩸",
+["Oopf"]="𝕆",
["boxVh"]="╫",
-["Uuml"]="Ü",
-["centerdot"]="·",
-["isinsv"]="⋳",
-["isins"]="⋴",
-["bot"]="⊥",
-["integers"]="ℤ",
-["Racute"]="Ŕ",
-["ijlig"]="ij",
-["bernou"]="ℬ",
-["Cconint"]="∰",
-["doteq"]="≐",
-["hookleftarrow"]="↩",
-["epar"]="⋕",
-["harrw"]="↭",
-["dzigrarr"]="⟿",
-["Zscr"]="𝒵",
-["alpha"]="α",
-["times"]="×",
+["GreaterSlantEqual"]="⩾",
+["KJcy"]="Ќ",
["egrave"]="è",
-["UnionPlus"]="⊎",
-["Qscr"]="𝒬",
-["Omacr"]="Ō",
-["Zfr"]="ℨ",
-["gneq"]="⪈",
-["divonx"]="⋇",
-["gesdotol"]="⪄",
-["gvertneqq"]="≩︀",
-["geq"]="≥",
-["utri"]="▵",
-["ge"]="≥",
-["vArr"]="⇕",
-["Rrightarrow"]="⇛",
-["frac25"]="⅖",
-["LeftCeiling"]="⌈",
-["GreaterGreater"]="⪢",
-["LT"]="<",
-["Longrightarrow"]="⟹",
-["eqcolon"]="≕",
-["ofcir"]="⦿",
-["boxUl"]="╜",
-["Wscr"]="𝒲",
-["Sacute"]="Ś",
-["Union"]="⋃",
-["gg"]="≫",
-["DownArrowBar"]="⤓",
-["Escr"]="ℰ",
-["ecirc"]="ê",
-["Lmidot"]="Ŀ",
-["Wedge"]="⋀",
-["frown"]="⌢",
-["ring"]="˚",
-["dtdot"]="⋱",
-["Ccedil"]="Ç",
-["Conint"]="∯",
-["dscr"]="𝒹",
-["Map"]="⤅",
-["EmptyVerySmallSquare"]="▫",
-["backsim"]="∽",
-["angzarr"]="⍼",
-["dHar"]="⥥",
-["Mfr"]="𝔐",
-["cirE"]="⧃",
-["Popf"]="ℙ",
-["NestedGreaterGreater"]="≫",
-["ReverseElement"]="∋",
-["boxVr"]="╟",
+["NotGreaterLess"]="≹",
+["boxVl"]="╢",
+["MediumSpace"]=" ",
+["LongLeftArrow"]="⟵",
+["uarr"]="↑",
+["Ocirc"]="Ô",
+["Idot"]="İ",
+["bumpe"]="≏",
+["nwArr"]="⇖",
+["NegativeThinSpace"]="​",
+["coprod"]="∐",
+["VerticalBar"]="∣",
+["sccue"]="≽",
+["boxDl"]="╖",
+["NotSubset"]="⊂⃒",
+["Edot"]="Ė",
+["scy"]="с",
+["Cup"]="⋓",
+["centerdot"]="·",
+["nsimeq"]="≄",
+["DownLeftRightVector"]="⥐",
}
diff --git a/macros/luatex/generic/luaxml/luaxml-transform.lua b/macros/luatex/generic/luaxml/luaxml-transform.lua
index b6841fea5f..4b51eed117 100644
--- a/macros/luatex/generic/luaxml/luaxml-transform.lua
+++ b/macros/luatex/generic/luaxml/luaxml-transform.lua
@@ -198,6 +198,10 @@ local function add_action(selector, template, parameters, csspar)
end
+local function reset_actions(selector, csspar)
+ local css = csspar or css
+ css:remove_selector(selector)
+end
--- Transform XML string
@@ -243,7 +247,7 @@ end
local Transformer
--- Make new Transformer object
--- @return Tranformer object
+-- @return Transformer object
local function new()
local self = setmetatable({}, Transformer)
self.css = cssquery()
@@ -289,6 +293,12 @@ function Transformer:add_custom_action(selector, fn )
add_custom_action(selector, fn, self.css)
end
+--- Remove all actions that match the given selector
+---@param selector string
+function Transformer:reset_actions(selector)
+ reset_actions(selector, self.css)
+end
+
-- all methods that use transformation functions must
-- correctly handle the cssquery object that this library uses
@@ -338,6 +348,7 @@ local M = {
print_tex = print_tex,
add_action = add_action,
add_custom_action = add_custom_action,
+ reset_actions = reset_actions,
simple_content = simple_content,
load_file = load_file,
process_dom = process_dom,
diff --git a/macros/luatex/generic/luaxml/luaxml.pdf b/macros/luatex/generic/luaxml/luaxml.pdf
index f574a0a528..071fa4e4cd 100644
--- a/macros/luatex/generic/luaxml/luaxml.pdf
+++ b/macros/luatex/generic/luaxml/luaxml.pdf
Binary files differ
diff --git a/macros/luatex/generic/luaxml/luaxml.tex b/macros/luatex/generic/luaxml/luaxml.tex
index 5031a0468e..bf3b8fbaa7 100644
--- a/macros/luatex/generic/luaxml/luaxml.tex
+++ b/macros/luatex/generic/luaxml/luaxml.tex
@@ -7,7 +7,7 @@
\usepackage{framed}
% Version is defined in the makefile, use default values when compiled directly
\ifdefined\version\else
-\def\version{v0.1r}
+\def\version{v0.2}
\let\gitdate\date
\fi
\newcommand\modulename[1]{\subsection{#1}\label{sec:#1}}
@@ -99,6 +99,67 @@ end
\end{luacode*}
\end{framed}
+\subsection{HTML parsing}
+
+You can parse HTML documents using the \verb|DOM_Object.html_parse| function. This parser is slower
+than the default XML parser, but it can load files that would cause errors in the XML mode.
+It can handle wrongly nested HTML tags, inline JavaScript and CSS styles, and other HTML features
+that would cause XML errors.
+
+\begin{verbatim}
+dom = require "luaxml-domobject"
+local document = [[
+<html>
+<head><title>sample</title></head>
+<body>
+<h1>test</h1>
+<p>hello
+<p>another paragraph
+<ul>
+<li>first
+<li>second
+</ul>
+</body>
+</html>
+ ]]
+
+-- dom.html_parse returns the DOM_Object
+obj = dom.html_parse(document)
+-- print names of all elements contained in body
+for _, x in ipairs(obj:query_selector("body *")) do
+ tex.print(x:get_element_name().. "\\par")
+end
+\end{verbatim}
+
+
+\begin{framed}
+\begin{luacode*}
+dom = require "luaxml-domobject"
+local document = [[
+<html>
+<head><title>sample</title></head>
+<body>
+<h1>test</h1>
+<p>hello
+<p>another paragraph
+<ul>
+<li>first
+<li>second
+</ul>
+</body>
+</html>
+ ]]
+
+-- dom.html_parse returns the DOM_Object
+obj = dom.html_parse(document)
+-- print names of all elements contained in body
+for _, x in ipairs(obj:query_selector("body *")) do
+ tex.print(x:get_element_name().. "\\par")
+end
+\end{luacode*}
+\end{framed}
+
+
\subsection{Void elements}
The \verb|DOM_Object.parse| function tries to support the HTML void elements,
@@ -641,6 +702,35 @@ transform.print_tex("\\verb|" .. result .. "|")
\end{luacode*}
\end{framed}
+\section{Character sets handling}
+
+The \texttt{luaxml-encodings} library provides functions to convert texts in legacy 8-bit encodings such as WINDOWS-1250
+or ISO-8859-2 to UTF-8. This can be useful in fixing document encoding before HTML parsing using the \texttt{luaxml-mod-html}
+library.
+
+\subsection{Example}
+
+
+\begin{verbatim}
+kpse.set_program_name "luatex"
+local encodings = require "luaxml-encodings"
+
+--read HTML page from the standard input
+local text = io.read("*all")
+-- find the character encoding in HTML metadata
+local enc = encodings.find_html_encoding(text)
+if enc then
+ -- local conversion table for the found encoding
+ local mapping = encodings.load_mapping(enc)
+ if mapping then
+ -- if the mapping exists, recode the HTML input and print it
+ local converted = encodings.recode(text, mapping)
+ print(converted)
+ end
+end
+\end{verbatim}
+
+
\section{The API documentation}
diff --git a/macros/luatex/latex/piton/piton-french.pdf b/macros/luatex/latex/piton/piton-french.pdf
index 8ad40b754c..0d08e0b60f 100644
--- a/macros/luatex/latex/piton/piton-french.pdf
+++ b/macros/luatex/latex/piton/piton-french.pdf
@@ -368,23 +368,21 @@ endobj
<< /S /GoTo /D [ 213 0 R /Fit ] >>
endobj
216 0 obj
-<< /Filter /FlateDecode /Length 3586 >>
-stream
-xڽ\K[ WEIp/
-',եp)ku!MO>V.AD +(
-FhLG&4+)"zG
-+#,oˮLo%?p]V4jz4pApS}H/y$GhMJ:Qם *Gvhe?h=}?n3n<6kG0vN21-U~$!Pa}=
-lMcLs0ZYL꜆e DrhcɮzQ86AYeޭip1<'{YXÍ PYU
-iu+f fM1 ?mn
-d
-ӧd`^9@y*;9ۢئܺ s }PQq׺PW_BdlrU}L8SMQp{5 ! U4W0TF@L  _\:4
-ToJ4^'hP+=;g)06Hg{(u5 2Js$
-\٣5
-^l< %&ۈi-dǣ 76ZTd reAG1fOR)8uE
-Sq&t*ͶޞGVZ\+vp2LҊ&FL('9҈W LZu=t%]aZqp!z՜8
-]T>j⛠D)Y!{_s<ܩx0s{;Ggxn53ؓDži'`Ϛ{^|vk<諦붾|l 3=$ \_Acyh vt3t;zZ!Qh0O0ƅEXKqs_+t~<*p^U'L
-%;hdUA(OV/ޞe6?\F:Oxt})i7l0?V}</ lZ {Ckmr㬏Pc]t+opqP!35D 3RDxv`AbWr'Dmrvb!Hi;H9:T?%*eܴ~=[}5S={ռmSUFTɪƵz9]d^@y8M5ۼ#M4dN`}+8_̎)fe. -<d?c;xNMLYH暯e5v;j)śG:%;Y3L~7`NvH0T,&puTރHgN08ex ơYybfI<}''֣.8 dXhFge־6 rgmq yޱ)9?(z9DK{JR{ _:ܦW95zQ^;jqgKjy7'z:q.g$0Hz^J5;w`ϗf9z?asΡz^mN1&+v5ݏ{
-%!h >\Yʍ eٹ99?q*O~r㈞Nsw>_R)?ҥ0˱Mx&E`n,/֦y`#!
+<< /Filter /FlateDecode /Length 3585 >>
+stream
+xڽ\K[ Wx"Qo@N\0vΪEi(=N|ga\X(>>2uy靬>ݕ(/@Yc._N7.P]e|v*RݝFJ{s/J_>j eT_õ/}9-6 a^ܚ@Z.R p2T
+,QY<my Q(7.__Fp>qK]&GоmLB~&J a}L "
+Bpi8 "Ƃ#$
+&ΒnI_V^%lE дߗb6y%}&-J
+ţlt"ʦ$
+GLxioaIJst]MbV͘LrX]5Qf]vrIqciLwe7ݪa{ߋi<ٜ$ _;nqG*:Y_m
+OXw%,q TߊQ&,7GzOUd#+>=$f;y&0p+.=(<>=$S<?ؕ-mέې?7(m܇y ukE8n|U.Dv.WDs8n^s{5 [eC*iN/PiJf[XzX_vH/EQi
+8r"O}Vsy5u碧NcV}LJ+aGO5WfšCRf5ihtj&BC-ɪvPYU8@z:H! g3f4ol+Ω-i봎6I։z`5B>QV̗5ԊngȰյ'ӱ:JsnfC1J{#m{l).i.%Zء38 W?<;j{ϺS.Ter-˭ɐQ%V}8V~9քH#I,)HۜiEJR =stS1-r5wO y4z
+0b5ӵSj`m=(j4˜'pxx?"FX "%{T/WLyxU3w~OVzVح?ݵڌFVbܿC=
+0}8\FW>A/+M"j )ϻUfٰ#
+iz8.j6s{*i8wRAMqUsN$5wtQC+9n!{GA38N9'>{@ޛOF~lz))-d&nvtGi4=%IHRVagpӎ&JXNbZgy(c
+msѸjYo ~3%8SSFNb0܏'͈-p3[kF .U> |A 0k*ȧu}־bP]NSJSA__Upw-:2߻p5ï*6L9u-\,'鶃Qֱ˛]iG~Io<L)OAݿMʐ2ݯc7
+%Þae|hZ{,5:{39#ye˲mnZ,g>st_g뇃y!U*D)L+yUG K J]f^Kou^adŠyb5GB{U1gP6Nӓa G__et2[@}9B[OiAu9OuH7wL&tzp`*A"iByWK)tm݇xE~=ۑzL̵'uՆ="TSCmqvՍm>'5I2kw'oV(L9
endstream
endobj
213 0 obj
@@ -405,24 +403,29 @@ endobj
<< /D [ 213 0 R /XYZ 79.37 771.024 null ] >>
endobj
5 0 obj
-<< /D [ 213 0 R /XYZ 79.37 545.899 null ] >>
+<< /D [ 213 0 R /XYZ 79.37 545.785 null ] >>
endobj
215 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F17 219 0 R /F18 220 0 R /F19 221 0 R /F42 222 0 R /F50 223 0 R /F49 224 0 R /F51 225 0 R /F53 226 0 R /F15 227 0 R /F54 228 0 R /F55 229 0 R /F62 230 0 R /F63 231 0 R /F65 232 0 R /F31 233 0 R /F22 234 0 R /F33 235 0 R /F32 236 0 R /F48 237 0 R /F60 238 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
248 0 obj
-<< /Filter /FlateDecode /Length 3540 >>
-stream
-xڵ\K# ϯXGTF+Wdo.8! d[A><dyE^~z~{ݙX/~QB^%$a%(lPo/Jo_>ZkoHÿ$;ǽgXJKkoKi/K Rݽh[gZsCme0ԝ- " k-<Ň
-bqTkSߵ*>13p|WZݾWyn
-TQ.0`O#_tc`#Hg47T#aakIU$IZT
-w32-aq%u*^v
-܈kCèjQuL3 i^e*Cص.yOc#1М%,ˠW|gsѨ(],Қ v#1U
-L+$akg\rLh1yxB~U5x{]&:{KƃI %RUMwOR6-Fˀ2!<^_%r`Ƣ{n+:YLF>}\p=>%!Fg
-v_! 3w)q5a:Gm&D8J*Gu9DH$FX f*\}eޱe(`LXU!|mwÑ.P#5?
-"Y5_cݳA,<Ξirf1#,ru&AeݸD=G)NuUs>:h+*n Vc]7  `+ayo9*d[OY?ȻkaE<+Rƥ^(H{0"sҟ_f5Jf/F>q@!jԔBFث1 VV08 1:[S806ie\>sU^U,̏{ʊa
-#)r&RKԼ6醛?WqOudϔVHJnʰ*MS=HND^+Y5PjCmְ>YK}fC?<W'AXj^mjwrJ6ml=>o/am3Qmֈx/L EtJWx~b> 9reGk],ʰqYF];2j(M7ܽU]ٹ>V&.2ONDאaΡ cboq,Z#N񝹷VR_KFS.-UAڀv‡xF%7*xV[GpS#9F-ӗӤ9oz_D_wdur/u r;w#+~l(~xhfVJ'wQx٣<;'OǀP9SJ>cZXy=[bҴ΂Yr)= F8?
-X뇎Dm be?o#[lo7kHBvjB}f%²nɺw,İ{ e*
+<< /Filter /FlateDecode /Length 3539 >>
+stream
+xڵ\ɲc W<TꪧK;WVIM7
+o_ޤ/>ZkoHÿ$;}۷a).I$,P.R6HuRliͅ;(a;[( '8TΊ*OZGxvp}n]znHؽGI nщhc4Sㄖj+tʏNA}Bsvʬ
+ӄu,RW48~n)-YE4 ZZ{T\Q|6U˛SNB[зE޾ʅf[_>ȧ7&Iᔚ|OFw$̏ 5:2OUddwj™PH8F-,{2⁉s3:Ai,MIUZxGAo"EF:өV3M!{=ͧ~+'^f;VR@e8ho,X .aAƚ΋knң$cB^L;x(>4^ٝ.KEB9+[t6oT2`~q@@Zd/ՠa
+7|6VK׮+$2Ae0 {PfSĐ杼*ƅ
+bqTkSߵ*>13p|WZݾWyn
+TQn0`/3_tc`#Hg2*K㑰GE$m-*^֒:/{l 
+*ESQ:ᴞ9ZTJxY,:΋lYCVV<//e
+=¨u^P8*t3ABeXa
+@eCT=Ecl$3$evlu35eV+EZSn6PbRJIw%@7l363Z {vt#rM ^7ɳ=S%q/YT}ݓ6v'k"o)2 oH&~ܵ=Ec#2ۊNj_a{/\OI1'k`׍mHpՅ 
+' EbhƃJ^+3Hxlڈ=+YvVwhOpnLuhxvI#GʧvH ]
+mQVS .X/<DՄh曜\(r!a!'0jޗEpyw1aU G\CB
+sZۃXY 3[$lM}GҒq ֫eV hzUIH 1?+e<rSbl\>䶥9sːQj3&8EB$Zj"[)𑽩DMZtz>l~`9Ϛ(?0 0Of~xSg7Qav G5{:,6;v}37vxbg[dp:Hg$Y+LΨDaC-PNU%d"1`JߣGDƫyGH3jg+t8!u^7˫JIU:Q\g"IV(Q?4EH?ilPϧ 4&&aÞ~`!e@Ha{v}'?HÍҠj^;5X)TZdxˋnGm;v"}T5Klo:j e6Cо &aaZElL<̲qO 8Oιw77ϥf$dlf8ƒʽ(4鋱BE{iGTAsH&${ݦ] GPF3
+{iDZ7זbRg{^p/VO@ /\f*զ*Sa0W~Ґbdo7 '70"l"žt4J͛-iLn|
+^Qھ|dԑ=S!)*ê4M("y&Rrڿ4Xesc@B؇ְ@_~fC?<W'AXj^mjwrJ76<z} O_}klF/
+zqߘ>;GvWAۉ2l9tL=Bk33ֻJbqhj>e5v*HNU(&P%jcj2Lj4ew6!-Vx_̾NvQ-0®hg*1BGG6-sW) ߕFmg으,|~p.OI*I<D zŤiϝ4Vzp ?
endstream
endobj
247 0 obj
@@ -459,25 +462,25 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F54 228 0 R /F62 230 0 R /F67 250 0 R /F55 229 0 R /F16 251 0 R /F63 231 0 R /F32 236 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
257 0 obj
-<< /Filter /FlateDecode /Length 4386 >>
-stream
-xn$0Cqj
-Na❺썮T٢R˷[y2xbѴ. CEN%.ZV}FPanε秲[EIOܳ_*ҐrVґV@*Ai)O`[=Q!$/ `R3u!Xsภ24m3*pv<`H!x3Dl+
-݋Z~m3
-=bRlRJU pq `_6:2'-sz<Eҁ0c8I1d!;JH;Tx݊^*4.ƿM:iɄfq4mEG-=t4*:(<[+hKyN8h@237pWWo\$GJb
-
-I
-Dz>Au[fPg<dF̄`
-Ɖ'79+@LaNN Xy.<(3ږq/2#%"VY i6
-F;|(j/W)'\JHr !)Ղj_.O
-b6q<ÔDWjv5#xQx;(`{Gwggqk%B[ b:PBجL
-Tҵ=bLr `~Ӂi3͒^:1h8KeslrTRreI.IsL?ش3~!Px@l8^<3[=bsNK-"˴Cl: tlHu+b3{=)KUߊUoS#ax?Bt++e
- ~u ii
--L+$82]~P_pL:QU [hb-Wi_(krWuj>OFș#y #)Ixwô%X9寄X`qqk! QP%
-?1ΠIGQMxj+|L0":Uvsю7v 4 k'F> YY^ѷ*YtS %({ۨ`l-3t
-3v{..|띋sZìzN 'Kޭxg|6ys8ĜG7N0L맅/VgvRT,
- r).?J)HwSH#y~:EYުHyFBbp#aG =H2<ԹHXtbS^3^= 3|T32{ ,z[$3Ow,fڙR9} `P˞7Vk7r֝9mNw8oN<|z=3ƓȷE\L6γ}0ӋVsqùP;XP|EŷuP
-[&.˄0=ʦ- )z^ |_022{_UJ5B_z|vlWiy$<ZjP5Gkznx/s"}*J=^/tJ8QZjpr6X:ۅѺ.bl>
+<< /Filter /FlateDecode /Length 4384 >>
+stream
+xIn$W}l
+ƭ|~  qq+ o5;܈x=Ҙ8ֆ_Y_޾=/
+La杶 آQ+[e:xbѼ.f\)4Ouʻg/ >|C˨'mTxsY$1ɛJU HX & TU< jO~ݮ
+}yۚ"ŹZ!g7n⭫[mQV /:&,% BV # <P."wSX"GV@m+jmC^Q`qB\4ŽrɅ,r<A9_z=RkY5J11S}+"ݥ*]aX;pE{)3aqu(vrt-EdgZO1sL5M1/a{A]i<׬oz~~Uҳ :jM<{O-(dzLkAA9l4d4zG/t[z_yvJ9E-aHreW5ȕT,dZ0
+xO;c\:3ynewmK1ٱS9P' /!U`_D?\+h}n&R4u4h]-fi),Uh 6,ل T;tQr6D-b^y: 6k悝f
+&渽
+Tpf0pNn {fʹG
+
+aIJRi *͞WOg>iNU!xq(d);+danR( )\mF5Zl/xD &~VOR}atMy1D^̾= dTh>`ĪjxyWtUS)-#DIjKTlEmp ŝ!!^u;+RqnEh}ǀ%]AeXCM"̘z֮V\WrFDe#!.fw:tlrJŠ:ecwNec<M_MJչJm4):
+*5YBf&0Jb
+@)^hiƜRi@9l<w2==sDD_KI V&yn ׌;y&2ro%\veir[᥹mJx"(Dǻ½b,)(uc!a_$_uo [H?n NʸvTBw-SшFVuuGM:+?.Lș-#yZG3)Ixw
+ܜ6c GJ+C5{d%47|ca߆:nHے=Vv\cv`ݭ90*nnG|ܱ޹:=ɉTXV ~RF:w裴#]8#(c2V}R݊mlNeRAy^bʶ󏥬R
+>=EH?ư+ρh U<J#
+Ԋ.\k&LG¡}Xq6OaP߮@Cb
+"> m|_?c 7~dEyL6yT7++D
+6K@CTY;ww}X6=,k/sF/B5,Lm%5LEg6|~;ڐ0b3shܩy1g,
+ҧbjDOW ޣNֹօ+tM]Syh[u`\4O+*;(Nߪ)W(Ji qЄcO(r
endstream
endobj
256 0 obj
@@ -508,24 +511,28 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F68 259 0 R /F54 228 0 R /F53 226 0 R /F55 229 0 R /F63 231 0 R /F65 232 0 R /F32 236 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
267 0 obj
-<< /Filter /FlateDecode /Length 5225 >>
-stream
-xڵ<ɮ丑<%s n^Vvm<ukd2m`2?=̬W TD7J\~_\]K؂U.Eq)`S]Mp7!UBUk޿jq"6ױj2pqFl麎2w7o\nxu7 ^o}OҨ<F#F-_<g|~ aADF84+3W.{7#4_ߜF7H<.pdZ^դFLq5L):QPMHFAT3} c8xm6qS2kէiûBW /oGGW]8][iJ,TI? ST;"mAo|zs@oiԀ ;zMhx3Y!&d ȼ8W9k7e3rr0͝ؼ܂˅XMSlBQ9^=}y{ǑY+T&NtkKe^znU*Ue- j6+2-ʢ"ͦsGhҜ7jÞgfS{/ |b}yLjfMvێ ctdmW=}>+hJ|\w+H[e g11GlDn`NT}^ &V=Uc33szj^ݧS鵮kW苄M364rH
- +|Ejw-ߊ؋w_@˯ÇF6@ ֻ+@exÊʽexqc;VǪ겋x'mtQWBKß~f*JGEu\]ӗ604o Fm^8cP.-$Ӭi l0`MHmVdgu*5yJM ]uyTf
-:d4Q-P+oF/WշTa8:9r~s <I-Qs<zLnŞbNp<У.Q&FwʺNx5גNaU9{⎿bl |FUd.@׎Ugi#G13fQPE'<UTܕl5D=i^$tTxӸ[#nʫqR=-ݍ`T=\%]E$mY2A6c7ǵs| H7O1=
-Mb"h%=.ė6Q-c@X,r 1`Qz^_d`\3N_9!] q"^Md&\@Ni!孇!OT(*pVUzO`J^0G{6FĚ_saf -3ýs3Р@P̠NKfMPvrlVL S]rm,4DF5 '@FoV6E֜E+ma?dMU ^5ѶgGN~ M4_$x}Ն4 FUQ#WÃ
-dH GT^vl+-9ݔ~yv`(ʩ>0rb6v,0t1ˤuP埲L
-
-d>fJv9y)ߔ}WbjVgJxx,7H _I#Cr:6UK ^R> MO*8,i*SŞ_Zً pI$7b{L<!Kq^XM b4RYF(<]+
-#H}v\p`do,=,3)ϓK&\Y58Ƣ^ xKg
-ip+${SCc=1qCoLς{n`Ҫ4ϠkGTkUKLL
-c;Q3/0CIQ(
-&Bp/HN1f 0q
-
-Nm _>V{]LvzU40iq/]cw,9AHћ6R5VD+CcNuI譠DzGZrm1Ee '2+"(0+F +Ji.6j"l>%Uf4 yV)'Q5j ߱ޏCtWI@Ӓ<mSQ)J-m:BW;zL(F:䧳7&R?j\+NBE"#.#?fivquRkv('!R8qubڹvp􈶐]Tf2Kj  "!t֔`mMR/Rqa9 ?sP!o2-I;=eW Mlj[me47)ΡVWy7PL_1jOlr~3SuOAⳐc{)JifUxMIo
-Sts?&I ݛ7p>KT=kZ\Ji!=r2j dN+h]Ze1LvǓC |ȿkE4S[5kX3 5
-Z]PSh1|VO(竝앧.zڀ$)iV!EL}˴N(3] jYWng|mgm۾I>8Hjje<*gײr[{Uor)6]~gד!-j,W ݎ}d֪MJ@B.4}
-+߉9ondx"=O c}+ )CYkAkoԝUO-M3wѺ@u)Z</>RT);Ӣ!0ʑh)oЖ~s+kp~>#V\V>9#T}`J2+1{<(3spFΒNl pvzH*qɚneq5zlMR
+<< /Filter /FlateDecode /Length 5226 >>
+stream
+xڵ<ˎ$<
+4z6^ee%RDdfWS
+&E\˟^r__$<ylwf"^~M-*!U M(NZ(El6M r)6e[Eqe*7o-opUe< [/fzۂa%bdᙯk oG7+4ֱֈy=nB<7^٤ h?j贃:nB԰^h}S(G u~JOtnin!Sf
+')7iq}UO0 t֭LUiz!igln3F|T5suBz`M&*Ғ72Nd7jÞ#\^Z+NVw˘l++aXpu>zu#}WД8Wc
++Js+VIƥ-U貋
+x'mtQW>CKß~!4I^騤+v
+>kcte10)+@*wlA'>͊p7pDmVlg8J eR\uU<4W\ygUX22:d4ρ(ٷ#kW6W[\/ ]Q>lRN'E Ɯ;ޱ{~tS|] @ڥ90jbꟸTF ZRArPJEp\^_\;U;Xp̢y
+ jZi4QI{ei<>My9Ej/Z풒\6=9+>CC=f8w5#Cmt'n $[l$m-p
+Qj8:*zឋjx`,DJ"`%9GPb00%؍IGK 5dBݓZ4.wsQm) ,m^\G˩G*ĻuoKDT<AT e摑%E12_KsR+
+X'
+K`88Ɂ|Db`3tRީ"vS$gTw5m{dAq(-@+|$\I unCbG!6z"D5(ZZAQD.MˑEKgF:,TV'zq1p%[gg/#ԑFXƼ)E*OZ^ᶵfmOmh{
+IDyP bR*j(-iZ-4dgbpK
+IuGhZ4_QM\ M j&B2XϝX֤èS@'Bn&%ӗXbgN1vf
+BښG}x6^X8j8b$N|ƍGE`O9#%
+qfőuI5u
+nG@ؗn'#;qnp?Jv0_sO>᫉0
+^?x;qg{Ga㽳-GDş^
+~f^`SeA̩: |F-}x+lZN0 lSAaZRd*dʊ&M ?QZ-ȱjq>,yHޫty+IC 5 B߱ޏC|WIƳ%'xH4aQ)J-m:Bg;zL(ތ*u>O7&V|Fw? 5xD'l"O zfۑ^Ks4:[;TM9 bN.nVծ<z==-uUz(3UhQz{bv5 D]$w~5%XbCԋ"ir\giOTjȇ[l6<C1yuʞ4ѝ~l>z&5_ju;~U}Qb%*ӧzR_TB(逬L[ZΔt)(=p{*nS6#LwB.LE|ɛ£ܼ̄V#E&(ľ^Uɬcl<hshӕXWeD&#uP yƘiA)Nľ:4:XyŒ|!K1<ق1jq(ˡǟcG ߉'5pbr1);c7iKU78X- tL׿¿oEp<w|fs2?La~Lt~"-;}QSζli휭WC4mn;,C`I"ݪx<[v{`~ĚQq5ҋ|H{hAheqiF`3SBMiyU=H_vWnP$:IcjXާI8ֈˎ{O^/pBt%tjيWIG.F2g]>I8Ґ
+=0wyT
+kU&HB.4} I9Omd<zOҬ[}*֩`YkAk'wpeeiT"ZPeϮTDNδh(r D$Z{mj5(v9\/ׂH{oW.G"EJefn](8Yn[p=e3LL8;K]$ (qJL*V]S=u(̊fGvL ̕gҒGmHO>M?CmdB+5+"ʒkgRJ
endstream
endobj
266 0 obj
@@ -552,42 +559,29 @@ endobj
265 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F63 231 0 R /F65 232 0 R /F53 226 0 R /F54 228 0 R /F69 269 0 R /F55 229 0 R /F22 234 0 R /F68 259 0 R /F32 236 0 R /F61 239 0 R /F60 238 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-283 0 obj
-<< /Filter /FlateDecode /Length 4917 >>
-stream
-xɲC{ԫR{4-n.ؗ_ 3$%9<FE^~}𧻲(g._~RJUN]~*>Z)R/#xO }{Oi|Wk0>~`AA
-?.~3~aX:Xbi0&,3&&NALA߻-}zH]Lm3UG ѷ=a@Fe<LjLe##rV_zoKMdއpBؚFŽ.luE$Vn%qU$C.Z{.r6MJ:je2&h51v) dV[1'y
-d}.К4A!RCkXח;N>)߄ݱO2@xޤP)t7jo#iƑ<vd`+̦a=S e|Jc<7eQ lT3p͚p_$. hEFF#
-Rso[fiðR_XΖ||j gS[݊>
-(s0T۾ "0~mW:/=~ȩi1W-^96ieRz:{Qr0hN@53C54i+Llot.l~/Q3/`Ko9
-e#$pVǍh7rGBl,=`TZL8c
-OLnK;K{I5hR
-W|RWr(Yj[\y#!~jC6aX%h6:Z+hW @(
-<D۪ nX% ʬ^:}r`w<vƢEsN#L h+a]ۜp]ﳤmVŵ>L>), >OZ\`^[ڽ[, HQ}>9Vx1w
-F<a^JX6\{֫'֦Q77
-Ž7R%{PG\Cai3}~'u)5@ߩ
-0zvRȲ=w^EM"Xݎu"D[YS_QʟY<yy[HGHqh1OZ8=gَ~ |\ӯk
-7^P**=s1p.&N_HUVgs: ?2}؇8(߉]VCkFX,
-؜nWV3<uʪ Z 3cG<[mJ
-K͞ߓ~T-z;XTẻdkw0o6s;<2:( m4 1LU6T09̬.b1gdqA, T%`Zݖ:.Ͻ^ފ*Zk@#g4^{j>T
-5Xlj-*)PPMp;B9T!dNUfwTq36@8k!dG(z-'PPJڷXvPhtC wJ& dA!.rCƸStWסH@/YkҔ\0>x%3Aow;yeQkko%c%ڪ) ~; JOXܷdl`Q}u-co9,Q; eη)Jj/OT9SD:}*W~޽HYҲΑ5rQ{Ԏ
-
-^T申! Oe6 QVu]
-;i]aVcU +';ɰ_ʰ:\jb+2 ХzO#83arVpneM -ÞT+tD_g l`5AAtN^[eY0kGFMwUM 0$^ԗ;}Nf"Fv䴨dU.\ݨiD|ʌf䊚|:9meT]`#sc,|A.8};HmnQS8.;?.h6z;dZ̈98bS/98Ksi/VU-
-<A_N+Bה픏efp=Lo,!kBCBfAbm.`{0c3]*^0!L Zs߼uۯ<>F.' C -%o`Aãyp.% +L?6ËW?,OU^;ϝ%1`&<[cxpc>P`P}M<;LvvTd)3e/ND2 tR/`t*U74@`fB7Ϟqy_"D&EzR0#qR.i31  s5N9\,j}(ێi|p+``Th׀(|Z`0XPMYe!5=J =>.3ιW GX5q~#^sVx`3l_| J>8ޅL
-NUVL庴]2 6mzz̝93}KXK}jP8Ms*T9X}䵛B0 {~YCtRҰ`C{}|}G%Sxsg:7ַq8x)2GWܰx?v,z =L1@lAQc
-94Qedqr26nx
-Ԝ!
- Q^wZ9-7z1
-lC;Bw:P$epYʤdw;sR!I
-g(hdif %h=d `؂kgW1ZƚS,kE?-MbZT{,yB1H ;YF+7D6qhDk
-)y(WA՝mc kn^8lj=T2L}2ONJG5v:VJXTl5 eٵIJ&]w,_]$AKhtԘެ$NX'zWG6t$kRH'ChO$|TíJ*j&oxLXa[pGukR+搆v;YV a*O<,mxY MDٳ8M.NT`~AWhP, wpOtIY^Vۺ=[yQE
+281 0 obj
+<< /Filter /FlateDecode /Length 4814 >>
+stream
+x\:n)C*}z&T$Er&(mg(
+xѷ{$g /|A2=F&11ɍZүVkb1c5v|VWBbVlΛ\%2\J*-Kj3NhoDVv+c&;O] H4Yl{IkS1'}J]zkUH-bm^_h:HPjS5SVe~&݅ʡS'J6䱳$[a6=^(SWFsSH]`Ajm֔TE}>N(шl-δðROIƥ3ױl-Φx
+Ԟu~?HzCu>;w7Ժ'hZnjm-Gvҭ$/
+jv&JKN ;JI*̽+l6^-m%EyAfK%d|dZiM5:.qt).I+LV$E[,AOk_ ʳ K5Uay #WҪk/QEnRg
+ 䀲_UuzsQy
+Owaw#`'a-z:\k&T3lGJ4?H1ffDg4HP]w|[5a=W cfq@ڄôV汋m[TA\޲sƐ|<UtY'1.K >Y2K
+G iQ0
+
+Vܹ4;'J
+W5ecR^؊r#}3JNg'-۷ ʔIXPRU"CjXdHr(<+w| S>k6&AyrU󨗴;7ǘp-ӬdUÖӯiv4:2EfqF#H]*cMBBǃ^ڦڥN_ߺAdUF~fz&exuB*w83w?OFʥK,mζC׮Uwn 6)8+} gp" `ٓYE{ݔe̘۶(-z'?*jfrb8(57\|P!c](BkCJ8fo#yr<&ذYy@ŵdtIEUV䮷+u\&D{坨J?{2~v_]
+Bn!tɰzLTUqmeM -~$TpkRl`5AAyrMV:N.^Zs[bS> I
+-%o Dãp</AT!|^A<\Wo{?w̟;KbJI̾yJ ={dgZBew2CM%l_3ٵڅRXMSfޜue t-A2Ԗ ^@IHW^FO
+f1N>87|e];=n;{MkO=\+,^X(۾cL#^0:$9!!\jz')_w9,?qG<akf\`=KkuQ~o쩈c{eqk1+8ޔK~ø_
+N捲Cg ݿ ƣKiuEm[ObZ|jKKYJ.Ě^W4 3&A`/6yh Ο86*]?-΃nw!T|Ǯ%_ߟt (kuW ,n{$vؼU鴒;"2KS>{9x)Y~6ko3,p[lloT"qRՎ\L N] j5oFcz֍V¡Mow(|eN,A/g^eb'/_N;= o6);DEyjɅItoyГNAF$:@}8[)n"2#4!9ZlڑOArڹ&uSq襹:o2Zϒ--Z u(2cˑiҹɣ!sejyPW[T\v{{#߬w+^(=wL-:v˷L+'b9~wpv6lwFWx]{:[9i砞|M#TNGWt˳/RN*鼈$eKlF;h}INaҝ6Izuil %̥0|<
endstream
endobj
-282 0 obj
-<< /Type /Page /Contents 283 0 R /Resources 281 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 240 0 R /Annots 286 0 R >>
+280 0 obj
+<< /Type /Page /Contents 281 0 R /Resources 279 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 240 0 R /Annots 284 0 R >>
endobj
-286 0 obj
+284 0 obj
[ 263 0 R 264 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R ]
endobj
263 0 obj
@@ -597,101 +591,94 @@ endobj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 468.149 733.664 480.104 745.619 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
271 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 262.513 427.854 277.238 438.734 ]/A << /S /GoTo /D (subsection.8.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 262.513 395.169 277.238 406.048 ]/A << /S /GoTo /D (subsection.8.1) >> >>
endobj
272 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 290.19 427.854 302.145 438.734 ]/A << /S /GoTo /D (subsection.8.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 290.19 395.169 302.145 406.048 ]/A << /S /GoTo /D (subsection.8.1) >> >>
endobj
273 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 474.51 297.516 489.234 309.471 ]/A << /S /GoTo /D (subsection.9.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 474.51 261.766 489.234 273.721 ]/A << /S /GoTo /D (subsection.9.2) >> >>
endobj
274 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 502.177 297.516 514.132 309.471 ]/A << /S /GoTo /D (subsection.9.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 502.177 261.766 514.132 273.721 ]/A << /S /GoTo /D (subsection.9.2) >> >>
endobj
275 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.781 259.072 424.257 271.027 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.781 222.465 424.257 234.42 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
endobj
276 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 439.978 259.072 451.933 271.027 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 439.978 222.465 451.933 234.42 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
endobj
277 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 362.08 209.23 376.805 220.069 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 362.08 171.767 376.805 182.607 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
278 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.03 209.23 477.985 220.069 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.03 171.767 477.985 182.607 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-284 0 obj
-<< /D [ 282 0 R /XYZ 78.37 808.885 null ] >>
+282 0 obj
+<< /D [ 280 0 R /XYZ 78.37 808.885 null ] >>
endobj
-281 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F68 259 0 R /F54 228 0 R /F70 285 0 R /F55 229 0 R /F32 236 0 R /F61 239 0 R /F60 238 0 R /F48 237 0 R >> /ProcSet [ /PDF /Text ] >>
+279 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F16 251 0 R /F68 259 0 R /F54 228 0 R /F70 283 0 R /F55 229 0 R /F32 236 0 R /F61 239 0 R /F60 238 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
290 0 obj
-<< /Filter /FlateDecode /Length 3196 >>
-stream
-xڽɮB?04
- v2S_).]{_K"kHow7ϼFm~{obsf`܈/>h?rO_K|;pȏt'_ӓ_™Ж +6￿3-&8$n_4<AhDŽ p\ +ihNnIH
-Ìw#ty#O8-j$'n I>I!7:@{Ms;6ȋY2:c$¸%᯺@ew#aR r-ZIZR nHZ}P +"Db菉U@y 4"aʢMV#eܧԐ\$P1BTkiyZ5U.SgIAk-8BGcxTɬ,ƯFo,qU2 :4֪Q#M][-=>'gFN~ãYeu٬t~<2BڻqqUTƓG_Ϧx.Q$'l*jp L*9":T }+  p'K KY㝫IJ4wA4?bJ/M@VFҧ!NK3tԴcOuɟ%9[wfh2Z Yfpd}J9jQ(K2~t]1ݲ^_+~)Q vƇ<6!dB?{C2̏QZDʯ<?NpY :VIwLn&%[^Õ2̑#̼n%#I)gpMmz!31
-cQ}
-mDB5k}D2Pd P׮(Ӯv&ۊv.}KR0%KA=ZI iU)AaRj lh,m*?ڷtʇTaj3gj$4:$1 %>P=21AyWxAh%H
-1PFMFXbvhʌFFGXk̅稒J0i`EU*fÏ3
-XKÛ5ɿv<am3:'+=ӹDI-X5ȯ 1&>0"q
-/7VJ䕸tMvI;$Z!b\|Qgpōg=&g2EmHEvrM#ETffb
-Efkwx ?rRNjXH>n"F}OJT
-)I
-n(5ޚ*- [&4 Ywݩ
-_ɬ3=3+LzAk!|W6K<u)Zyr'wQfյ*ԹuJ$šSq̇ŹPCɦ&/iO~{?Z<H P#:A;w&71Au4W2h79KB;"t:ȝ;Ӱ_R6W)V+j3`%RwntAk^
-+Cj\(\o4Y)ħ]ՈOUѭfe/O@IUI=a`_Y3*1Q!VOS64jPaM§j H 
-I|kSwZJ2z+ܵU=
-{IbI\]bߪ{"n~/Ϻ?u
- v*5_v/2v
-&iF36:.=Fw1yb`aJ4>qX})y;=dۈ6lM)}|B zfV'Jn Cĕ0EX<54Ңv۱BkClR-ZXe"v:hn8@'7
+<< /Filter /FlateDecode /Length 3392 >>
+stream
+xڽɮB?0`Y)sJ2sH|\).ŭIۯ=&kf_~˗ח܅x4E\WLZ{F0n/8׊s9_no3^
+FCzkIu:Q<O1g%0]'>>t.H*MɬU61xܦ0&hj9ZuIoţY"c UYҝ㝇~_F][{U<@x\y;4>Ts"q>э\gSQS[`RQщe{h6^1ͷP\ w  KY㝫d4ۂ ~|^r&<VЬ%]HGM;~,RXFAtE av!Րłr.F%  }ԢtUk<C
+6tpvzVSm@-!}>a|& !r'ߩH0]~Rf(cA 8G$ݔah6J-J ȌDTf^7l
+n##I)gqb
+nӻ !\ 4+ ڴN00#5<#Sa0y_&TlEBUk}IJ:iCZj?KY]̷W%}[9^7d A= |aU!i\bN05-/P;T~o<h˙3Q5$4nUHq?P}+_ƼY `{ [jaڗ"UfQ<l(\54)Ly9i1('[ZÐɕqfrZB2wXg@E*_az}0Z,,8#XĴŇ +} =sNHw[S/\H91Q; 0 Q_} !e/ϩ1i7"ҙG0ƪoѤ)fo尪3Jb=ޏQ%3R5 ǜTs
+G\G3zsfFL%!;yANs>(;Ǽ[WqSS~懙>ngQH_, RtV- 
+;)2)B̨U9k6r6}!\of֘_@ӎ5CA{l|7R7wpmeigb]<ۢ3S1ψ<)|Rn(`]y6E~tzp؏``-~L-jC~O>Gϸt/O0Uoz2gAGqC'WyJI^g?=ggH0= ?胖 X0aJ2l{Q
+v(C WZ]W <8@ TlMv3;[=bR=+%I\܈u4Թ!B8j LSy${<^XN*)ث0pYk3jfb^ A8R{䗒n{g()\WasȸSIE^w
+D],^Cd
+~#;Mvm׬O`_$ OY̝ qА$;v\$cUQI3ljgL~P#21[]ChXkzGL {%G
+BL !X7S sa#6V߻fyʈ:鞛>Bh2G]CU6Etۼ5RϚGQ۶HbXLwMhW9{P:"[G-+UhPweT0hkpLF>a/[8 `I Mni]beHM%C8^O|_HWl$owCT#% $F]Rm۳1@><wȏgR*kRC
+!JK_~Oaq7w,)c.4
+Zy'MWTІEZ1ND#NIX<t7{`di7?zkAѻ ־>Py6ڷia[ cNxJJXM=*iG a6?P
endstream
endobj
289 0 obj
<< /Type /Page /Contents 290 0 R /Resources 288 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 240 0 R /Annots 293 0 R >>
endobj
293 0 obj
-[ 287 0 R 279 0 R 280 0 R ]
+[ 287 0 R 285 0 R 286 0 R ]
endobj
287 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.659 258.922 251.614 270.877 ]/A << /S /GoTo /D (subsection.6.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.659 229.859 251.614 241.814 ]/A << /S /GoTo /D (subsection.6.1) >> >>
endobj
-279 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 111.179 92.406 130.57 103.863 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
+285 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 111.179 80.28 130.57 91.737 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
endobj
-280 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 141.274 92.406 151.731 103.863 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
+286 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 141.274 80.28 151.731 91.737 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
endobj
291 0 obj
<< /D [ 289 0 R /XYZ 78.37 808.885 null ] >>
endobj
41 0 obj
-<< /D [ 289 0 R /XYZ 79.37 240.596 null ] >>
+<< /D [ 289 0 R /XYZ 79.37 211.533 null ] >>
endobj
45 0 obj
-<< /D [ 289 0 R /XYZ 79.37 216.366 null ] >>
+<< /D [ 289 0 R /XYZ 79.37 187.304 null ] >>
endobj
288 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F55 229 0 R /F54 228 0 R /F71 292 0 R /F61 239 0 R /F63 231 0 R /F53 226 0 R /F16 251 0 R /F69 269 0 R /F32 236 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F55 229 0 R /F62 230 0 R /F54 228 0 R /F71 292 0 R /F61 239 0 R /F63 231 0 R /F53 226 0 R /F16 251 0 R /F32 236 0 R /F48 237 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
298 0 obj
-<< /Filter /FlateDecode /Length 3781 >>
-stream
-x[K$ ?R 8''{ |JK~)U3b=VDQI"/?|~rC^{{'/E]!L_^oR-ׯTBvzQAJר_
-`[f1|աW_S4!i|RB[&>iV\ [m^Aξ~&ۏp^ª(=ð3dYS_z'9/A }/+/1βխpe;ivZ2icpp#i'pV*\1=Թ2+^K\$1BZ{Vq+[Lk-iHy KlliݵBf,VaK\"D3ngބWC%e@_Rzy<ı͂[Z;v!UL3o2CYh`<足܀䖽6iFKrK7qd eb2iN%7|Gw}O<l4_f츌i3NBީЮ\3Uq-
-9S+kCqEӏ(ܮE;#իJ)WuAGD_yiꫳ"gY-\ ʥ>UQfmɩH$7T.e++Q.t(
-"9h] qP-tvGf؅i98
-,. Bc`7w:L'D^bG ;c)9Q\RfP<oFuBS%i" _9);GCq8x4vqFXX"\I4GrHEM7zRq0k<$uSzSi6W[J._+NnXU/ ['GR+K=J7 D}:alRRw&UWVJσf{ONBl88rL
-WPIInx=91LCҎh3ΎS
-YZf1g| iG4kv"=^ mLc+@< )A}c/Fj F-橻+֚ngI|rT[b:2(*f2fLz9w$AYH-kq
-#&sg^ :=b ɳE*wB;Eۅ&}s[NKqK4D!s!dF|fyO 7k8!hLɗ?)5DGK704o,t[q=Z_QH5g;s An=Ҫ}2Gwg
-c٧ic CTŸX]]ƒ'aΆ2y'vylސ{iR%leeu-~ݢO׍Ͽ. kpL 2vlCrI} knJSܺ"
-=VZYҫ9/',p&
-?Lqn)fRPiLẅ́/NnlW(\ݺ z{T1+}g~'h m
-5:hɥeG2l]O
-]" l{p̴:SRY 2ib9LӖ>rkpֻSsqv~
-4sh ձN)Zo5@7սfE*1smȫ j!tlEcyDtk,Cz`BѤ>6"c\*Ķ<nǴu  , Rwbz`: mczr_!߫Ҹ]rEax>:TJ)}^+}S%;U&+\&w^Zv8VU]g'9ze2}
+<< /Filter /FlateDecode /Length 3926 >>
+stream
+x\K Wh 0v/9mbOI6ć%?ԃۇ,S]*(#2/?}}0V_A ~rgV\|z\;ŧJY7΍_o#>~po_~V #y9\Ň;
+)PsŠ$r#?ԛ֜ik&*\9pk>ݨAt`jxfjzd]HBGd«^_<(S{W֒Xw{/v#ntd5?ɢ_>&A8A( W & T3|%j=jO5H΋32-\20ܞuYHEUUqn.r>gx M &9rZxuT(Xga:O0#D~̋L%IZ|'ńo䣘'<+u^#!C \aA0T>=1ci7[&oxeL^8|';vU֔1{ 4+ˢqpΜW6wDR15 !I(Y*TՐ^'D{
+r wlFAJ}4-puXuX Ǧ U[(CBM;p48֩Uf9-<qO#L![vU lŊGȁPDZ%<IjEkt>GjZ6 -JR6qiRjW#Jȧ:If;Jo#GC6 K̤ez̺] r,ڬW4z 8O&؅.8jy
+`x;I8jl~tW(<kFoxEQg$'w:L.eEfQL?N*MƧ@<2& !ĬcRkwkK[7Am5'm7Sqiџ_RR 3vk=o$1b*bg
+]׳
+ Ug 6chQh9n:YC mX#K<ץq R4cdT0wlR#\5fjZ\r .3%,2X!@XYt!
+Ugw숊rӦd5D}Q4yVF;=źNf#b<&U!Ջ2;#uz:7ؽDcOaK?
+Mq&Tt"6L4z_--!1܅(vA 3& Lّ-0;,b=vb^ˉWjyZiFjUeJHzcJmT"LxJqoc"|@~1O~ゖV=~iS ^Dt]Q~A4bՓF`s~12+?_A]Q6M ,uX+yǵs,S0vjj~7~HP1%W Gd\1ABZ蕯XƟ'ک #;µQ_˾)
+j)1fXYyԏ]f^|az&4kt{Ïx%t vnHzNa~%EU_8˝Nk t@]r80&=cmR풦5No#( umi.Z,=ئnP*nymMz",VtmבfnW(TNYuiړ㛃綕G!Fs4T c.
+o5M\`Hm^S4Q^ln*Sܻ_oI:V*[saNTgcqYMKϹx|^c2Ab%M>S|ݻ3Som {'ׇUU 1<v槾Y-}_=tۆZ̛]n~Ov[\Wp>3ImuPFiaiMGݘ1LJrK#sS"ЎOiq4*HSVel/`ЛJ> t#nS#;:Ͳ4dWyfY5OdY"vlr?zhR+e}2}aBrb"0ibF[ R;Ἴ`A0|<os<iW4">_?O)yq`>~'{N%RzvG&9-\xU<*yq_'<x#Fw+Rrɂ4~ڻ^&jM2ݤG&1ɤV|r{x4mNX/[{j=3-W,M>㴓^ofi7Go=4mTpdDiL^͊*)AT[o b\Qu{M
+|H`뎃 ֟F?O
endstream
endobj
297 0 obj
@@ -701,37 +688,36 @@ endobj
[ 294 0 R 295 0 R ]
endobj
294 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 493.753 564.737 505.708 575.806 ]/A << /S /GoTo /D (section.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 493.753 528.872 505.708 539.94 ]/A << /S /GoTo /D (section.10) >> >>
endobj
295 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.259 552.782 166.214 563.741 ]/A << /S /GoTo /D (section.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.259 516.916 166.214 527.875 ]/A << /S /GoTo /D (section.10) >> >>
endobj
299 0 obj
<< /D [ 297 0 R /XYZ 78.37 808.885 null ] >>
endobj
49 0 obj
-<< /D [ 297 0 R /XYZ 79.37 449.94 null ] >>
+<< /D [ 297 0 R /XYZ 79.37 414.075 null ] >>
endobj
296 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F68 259 0 R /F54 228 0 R /F72 300 0 R /F63 231 0 R /F16 251 0 R /F55 229 0 R /F32 236 0 R /F48 237 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F69 269 0 R /F68 259 0 R /F54 228 0 R /F72 300 0 R /F63 231 0 R /F16 251 0 R /F55 229 0 R /F32 236 0 R /F48 237 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
305 0 obj
-<< /Filter /FlateDecode /Length 3986 >>
-stream
-xr$XU*Ui$k|rb=ė~HjW5=
-NP8\[~{O U{*& b e%oʌOmTp?}}k'HӾ] iZB Ik]+ V$
-]M MP$"4 r
-% fh#,Dk^UյI4,d euKeuZ9ޛk7~od%Z:v3y y>0.hL?mO{ΡzdjB )<I#\yAVWd, |@D6Z74RBQtF ,c#ۤkáH~Cp= *[PhIV'֜Wix\9t)ByqH*±XMVM̡jZ eu
-ah (;,$V͑*` Et<+rˏkꤻ˪()=,auW);|N)0@Y-b}TFr@~쩞Q $QA&dVKlّ撛a3|ȷ :^;C ?q;a(R) ̧U='لFy
-d:Y2mn84(2_) (s<A2$ |ہƽڑ'ê#;T[yaA*z{k.45W#Z!e0NXHe1Rq,nį,ET sݚ݌͆[5v!DEF6v76F)dPQG9? P(LS=puBjPv|?R ؆Wk$"ՆH9w[HPM(ԹsIDO#7 rN(؟܈y`TX?i"ܷyu=O6зwkU]oQsc/DbH#-E<b4f<ݟت[fu36}dBI\,BJկt 0hFFA <[r[|vjTyYi‡.~QovS<¼ƒ:'_+|53iPV ?:p3GVy´ag JnRguڷb;sҕvtѢߦ$w4EMpľitU]4c9~'!=9HR?r+A`?IZM;yjլ.WCU&"( ast-+z3オ$i6}B^'Drn):FǙǡutM
-P ̪vnvk6)sn:y=cXrxF I+;pnuN)D5RpM{JY5xu'Z{`Zʍ%zэWqJ]gPC˥ q:u Nqt_K.Ѧ$cZ5*Eњ/oxŬA9{F add[,Jx*)όJV ů<ydK@[OzOS+z]ȓi|f6]O&.a(ʟʐ{EE
-7{¦"c});h.X9G]+*Ն)ڡKi`Y-$E1(s_{0)'i( o[15TRAo#enhīVb=;;[AO"֑Db0qKs-Əbd6IT"^lj0FϳZ^X"*x1P}?ItLԏ3{e߫\bkQԫL4;&y! 9/Xrp'巯2kܔ}~n>BnDK2039e+W97d;13v큸lH뿎W{RKNU$ cd,+}x:UF<7Bo[PAס~YPw։=C.voyMF7[5_y"o\Se6&A\nKMkd^Iv+y$턪(^rR e֡՞IompGT!Ji5֫(,p%?`OU0KkoÜ_OP)D`hcv92n.K"pvۡ28P>5n 7 !%Gg[D,emcqxĈ0r9oʨyt]\Hw2/cr *;pICX0Mr['dHi:ۗx8hTϡ= }.Vs8wFLmW9yʛ=o>6a)칶)H ˅-⍸A[X>"\chѩR:ɢ(yźvhw
-aKN+5Q%o3$\c0ptzCq΋Be
-PQ
-AN_M-(:q@]-o|7(u;e[5#&fYyǣ2ٛH):5|c(ƇyF+Zzwt_y)t+~rXU!Z
-܎Ju91Y<,;&yON61ވ62=\_#E0,J 6ϧ
-L>`_>\J|.{Ratѻ QhǴsmN[YֳY\
-t=:)o-~*1܋DBju1$1MTE9S+P)5<:7YζT]b36Y{ҐCfåPkXXJOkSc`p9.Υ3y3iU-ǂ <8t)42{OQ/};2V(YS|<J9ruݜStU`v4_Ex*SUz}GI6M{r5Hx5J>MJÜo,}\
+<< /Filter /FlateDecode /Length 3979 >>
+stream
+xn$񮯘X,AFpNv>${/E6Y`v7Ւ?.7.QD\BwJH._^(R OJJIW4oi:=EH5ܪt/?%PZ@4/1<)+*<1}U {5O -v-e mIhdЯv(8X
+ubwMBZġ#Dmh,>ZdjTǹb> vBѶR
+f(&`6ݽXX !6t@͹ ݒ@-D̅h@>>OB:}r|A29?3Y0*}ɴ"<'^m׻E1cp QQ1L䖢-1ԍzZ|B3dOlUFkMqW'%_:m 4s#O#P Avv^-->b5Oߦ&{^V ˁ?9A2gl׏8*#h,SxWә[9e0h0'1{i%7+HtfD&v{`7} -޼3']qG-:m;-rNs[ǪJfWUUMc0fߑwұ!2,S$RO;.˞d@~əmA%\}KofYKMۥ'7h4>!
+3atiZЌ+A$M
+z,yyn)@Q0¾2jk=1 J@9oB}=q7£\@c>*Rqh!i4wGcmF0n)E
+Fm QB
+Npv=vj -eG*|lv#4OZÛv#%Gg8HӉX45?{ˊ.t7j9 aKC-<nX7
+RBBv A[X>"9\chi`Q"XǓ9Y%Xam3r`fJ#lqi& dMqI3=L`D|70z຤>s)"f<P2p
+X%
+Z#UUS}jGB$ёfncN.C{"lԱa<i|P'O/$`i
+0)tX#NIǃO*
+* a`-Sj;C5^;W6]
+猹%=~_^Ʈ^vZݦFxgkN_j+{WPIvM6
endstream
endobj
304 0 obj
@@ -759,24 +745,24 @@ endobj
<< /D [ 304 0 R /XYZ 79.37 298.517 null ] >>
endobj
303 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 251 0 R /F15 227 0 R /F62 230 0 R /F63 231 0 R /F54 228 0 R /F70 285 0 R /F49 224 0 R /F51 225 0 R /F71 292 0 R /F33 235 0 R /F53 226 0 R /F55 229 0 R /F32 236 0 R /F48 237 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 251 0 R /F15 227 0 R /F62 230 0 R /F63 231 0 R /F54 228 0 R /F70 283 0 R /F49 224 0 R /F51 225 0 R /F71 292 0 R /F33 235 0 R /F53 226 0 R /F55 229 0 R /F32 236 0 R /F48 237 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
312 0 obj
-<< /Filter /FlateDecode /Length 3183 >>
-stream
-xڽˎ_?Y|E<$C @ V;~"lvHVlc4d^R&.lQDl>=MjQhytjeˋ`4o Ǐ.o~{Y\;WpxW_ރ?7BA#y&
-%]#@,UpCN7ub eռqoZD&5ܔ=р|U)
-gKY^=%2q 4P,vc.X3 GJL+Ƶ0ZUa'O{2ύ]^.ELEonGb^ӝ=-sdwd!NpQi߿>[\juMŠ
-91kc2,kDW7wõͮ,-ɫӰXa!iVhVk (J$:r6vaBmή㗧_7"y:w`?}zXn_/jf>;uaS"JkP1
-Yt%Dc(!
--OE aU
-Iew)GWZ"b;aAZ2'M qOkM
-EyqkX@ݵ xXS"mnn̾kM&}z_ysj ([þ8r]SrkIe-HRG{RGB@݌2 RjQHn2* P_AiXsOT3ux Pa^U`
-\׷;F¤x)wI-gcLXm9:4ZYO8owJ`%ISpey3vn~"V;^ElZ"
-e ϵwm̪Ƶ8͏{RP)۹U~3zt[srU3 g.:|އsF s''kj6LNz2X[46'7 Frs~a`
-`AX2N x k.hw$i9^Lk-e y1.
-;J/zOW^rz('*n Ar,*Uz.>}֬=NGylb<Q<fwk4h=|@WW"?@b* BS]O{""T}ENvב{+,kn ^nY0+`a_jԔ$*CHAUv)95W7
-7/3 .kރ 7n,%ZSނV!ܦO<xz5li6Bƒ{a&.ss) m ѡuA=e7 R>/jk=}5ah3-η!Z ;?+
+<< /Filter /FlateDecode /Length 3186 >>
+stream
+xڽˎ_?Y|E<$C @ V;~"lvHVl{<dެ*rM||xzssE8}6Gҩ×//RҼR?V3~e}';s)s4\]yַ>|y
+Q(t0W]ЗxFTå";Ƨ׋i/Ub ܾiԀJxsSDR VWK+B\^/ey D\&ЈByTصc],(-w3
+? $ KQ}QB
+V_:yTh8%F='sS%tSI 
+cLǙS a^ym2%N;"L֑a2VmPr\k;BIF
+(v@^Coܕ9eƘ<<0/AOX-d@q#qݷ!N^k(BCLjI^Esj|drGh=hoNHDp%rG}@axdUŢ2N
+q*IcX[FfjЩ(`j<ªʩB\n::aAI ݌=rqk3mܩ9
+YI< $ cS+-4q8sh׬Kzʱ:7ُo`\g{D1c8:/
+-OSE aUމ
+bލDnn̾kM}M=Yy˯̼ya_CT9 )gIJ$=], £z!|GKo)s(KeMGWg]K/5 ,۹:mPa^U`"\׷wIAOR F>0amprth
+
+x[|iq
+ef.dm.,
endstream
endobj
311 0 obj
@@ -792,21 +778,26 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F62 230 0 R /F15 227 0 R /F63 231 0 R /F65 232 0 R /F53 226 0 R /F16 251 0 R /F54 228 0 R /F68 259 0 R /F67 250 0 R /F71 292 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
316 0 obj
-<< /Filter /FlateDecode /Length 3727 >>
-stream
-xˎ>_Q?Zz]]6lS!Cɢ$K\ AM۲ER$ŇL3/ _o_Yqq#߾H\g^q7Aq>8şxkWYz-|v]õ3}%OhDu $B@/vY5gæ󲒆le& !={~\ !_{C8t¥sMi,-;ͯVu|K[`a.Vz&̜Z
-'RFw RI:`78Ge
-V2#更A$Oj'=
-\m½
-ε'ʲT2)pIB}osqPViJQlD[/Zġ V8'I$6$*AWI/ێ<rڹ1^3-qiԻLVYv66hZY5\m2n#)Wh|k\W6Ko&ۢaxY_eDulsO ,Q;_2Aq'd PCȧ|ÀgZgK<9|1(p͜}u4I)ay[5Joʶ艹nfj-UIFo`=Rd6zkMwfj?U^W>=doj_{%pQ7@f8JIMp2r롸rQ-6[eu(]Ao]`ў*QUz[jDŶw Gbhmsbe%(ߖNR4yD'Qtwbx+ѯ
-[֑;3 c|k4MǣD,ŒTZ7D+et^HQ|&ǙŸ;XA1C#N^PGVy'4}>$@ ϽC_qV<k5r^9`^vSa/%ҪDY?O"_4 teͳ{P1h?|`R'Q0Q´2
-b62R^\(T.1ဢa[T60Hb\*ස?>p3q9d) |c*f]LzBk4*f1'E)WprVQKpRL% Ji]̡&ϴ`_7W̢z#)a`Ҝ5E"9&reQ*nx\q#]Xb2|Է֊"LtYiXQbٌ;\)8
-̀%Nqhd˳TQ9cjO U1!@sUITƃhs޹#I{;971WύJ srw-ѣD1t7rբ?ala.ާJd#glGsfz~I S@F#30)iϙL1r+LKf33`53[5333ỪN{8J0Gۻ'Zt&7j5i/V@V!CjlP&U9aIkDKyB nȑFF''mWYcs}-ʞb,|K28gw{} 4U_u "WԸ~jo=^"^WG=aw>))ocVog;Dzc\|Wbƹ3\Mx<UjVZZ9>kf^z(TأR7C{
->luBaߘl4[|]]jg"b&-|Io{:Ҡ\L6Dž\ޜ^GH&]7s|1au'fZ20k\wFcMC׾ƶZR<Rhf{TRͺ9vj@,T?K: eȶCz)u(HrcKC/o%\7-h{F 8 dYu g:j!ؓsO*Sg.N<_NN|XWt \HIZt(Z)dQ؎ڑƛzSl(,av
-zyGf/9q<I!ՉnXD#Ҝ@ϟI-wLgkPnEqbL.:_ˡ `pqu8"pI#%6.v|处(^bJuhۗ5 _”/?wg/ZOpߢ%$ڡ
-b{huMx+sjŸ
-Dݎvl̇e$hȂ5
-1#xL6ZF7uO.=YMEL13ʹ`OP?vxE=`Fgdm 3
+<< /Filter /FlateDecode /Length 3729 >>
+stream
+xˎ_Q?Zz]]6lS!C=(ɒljw`PӶlI!S g?Ǽ1]MGb=b`܈˷_.?}s [ixx}ş\|kkgKЈAH2A@/vY5gêHH2| T_D$S[!KkzǡN ol7=p³ضw" }OVu|k[` c.Vz&,Z
+[^dx۬R*g+|p1~4]IOn/?9EQ?UZH. E*YrE3
+∰ @G^bj[g40ȖIG+Z[V#CWEW52y`9I(/mC0085Z2
+4KFC8hV3L-Ry3
+5mϚ2LfY
+7pجYG; JL` -DQnzBn*j #BYjR#1!LUZڸlR̋u Źz,W/9 )YS%Rb"Wb֋e5ckr@LZؒTi.m+J<qk97rքSAr-Rmy'r a]Ü1'*n"}UITƃhsy I{;ϘovNvn4Zx~lw%m5GWcx8= t>P'Qg6doQH}=5) 0quhff&% 93i=F.Y~I}t^`f&̼\ffMffcf&|Wi GM-0}{5͚و+ VC_my6Iij̒mhz%tXqݏ~KA7sxP6t1߹mH֏R%\Wd#uV>&z:W+j\M|i·lI/q^psH}}J
+ۘm٠.4_Uq W"d4p|䚕V~=CzV;*FSQ
+r=`OXf
+ =GT 9hYCᨰ2loFZ}*GӺ|*dtJV_|fQF(*F`[סжkBR3*m!]G#8m [`^gl Bs @ sa`2 ~w?0o__P$AJ¶$fƟZ>剮pdPoK̺ZmSrh+Jy[87f^0
+TܱƷOP
+{
+ D#y
+W 3GܟcI+ nkқB~}iäƕ8&? >J*fm hrl^ ^R
+쨗`^Jq0B .=K: eȶCz)u(HrL?is^jؙ6[TG)pR5ȌjuB24'qe炩Tp26\y.&c]ek,8s!%hA}{,2F`jgOoMƣyV<ѣ&}̄V'qfImx`bΑBfhHC.7n*J }DӘӃAo]-vu5+!utWj`RobլzKj$J3S2i'J&rJܹ~#;?xO 2]]f=XaSV-|o"B:[k[tojώK3Vn畛 }{ gnp;1217v@V[L6H\"+eT:boQ6MiSݨ--%y4aH(ˁ/[(ˇ6[\ =
+Uska>ݙ!vP S'hUYќgGӓ!݁4Pt ",3:NrzVQ^ÖU?tVƭ۝L!d0P
++aKή=I)Li\;\-xA|Y #<em:[+zU-aBJ<3_Y5
+Eɗ8ېD ,N*Og;35OZx"qbL._ `Zq19f&Nݑ+:zRBsbb ź=J_`—0/]/`,B^tJ -*5NW
+\2{ VD VjcE)5jXA8wdyh'U!<lLЪ/'b2O-GG1bj2ǧi.=MEL13ʹ`OP?6xF=`Fkgdm `
endstream
endobj
315 0 obj
@@ -819,34 +810,28 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F71 292 0 R /F15 227 0 R /F54 228 0 R /F62 230 0 R /F55 229 0 R /F63 231 0 R /F65 232 0 R /F32 236 0 R /F48 237 0 R /F61 239 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
320 0 obj
-<< /Filter /FlateDecode /Length 4358 >>
+<< /Filter /FlateDecode /Length 4360 >>
stream
xڽ\9dWthK V Pfx3Al9 ؉wzofw9b/O///kyIeE\g^vLYqW΍~$84o^_ՍscC.K߇>I_7)oFyRBl뗟3y]P
9cHNR e*5<Q{1u|?}ϲ3[0ϼ Y9z,֓){LJUH \+qd\ql~rK "pR#8ᑁ&;WEFb6)N
Vn6
[{Qmm 81c Q?Y&QX[*4XyGyAstS5*bLi-jV(MtdCѲ*xT2n"䥁t$:̢=SPW~Hc֨22G[W{ %`f_3o@exH0KSVh= YآmlAj:n꽀Ǜ[/}f \҂q#G
-ʾpxӋ3PoAYX)>HƅԖYY:S^wb7Gə&S-퓎G٬w2|zHy1`/{nLq?.'
-Qޔ@D<V18E1yu`3`#*Z{WK|M{Pt'B:zq/^'5wc#d&(+onhEjӍF`g3JRIu߿pr$7UjK|>5g@ցnſ4~0NkV4ܭ UQ=-pyk^ks"a%kk)nv#[o#ffߢRnJSZ_ D6̸ũ_<&G,oڔ8KpjFhyka9͡6%`S(7ڦ3uglSܠ6!l| '=:te@HQ•
-t[z!
-S5RpEƑN3f4\(Bw𑝽_;FÌ;k -(O'!ֺS=@t-s xdC*W"a狊DftEZD;{%a Ǎ^"yO06s2|*Em}rCs vHF!9 ]lV luD-훲gKVGimB#
-p;$_a feW\PʐL=[UU QjG(/wk0K˃u*fӿ|xda;5r++h>" o7LBުiFf
-\wJWy5[*KG_J!Iserh(7 1'N1 rѵ^˂AXS;~-`ªa.YgC0MJY4Z2`Հu7TEs nw%}Tk11xD (kyưUl
-"c6,'C!JLH||[`8s0Nv Kj6%)24mյkO^TVn(9w2@-۵bf+SʑNGghk5c en+ R-so$_“-Y+e1/;6 ~T|gd=>7]
-O(,Nzhu{TQ\h
-g87. Dӣg
-DdbS 8*?dUq!X'(>b<friyu- XݠEԛvqf$G9* F n3?p2Lg~b素3'68+Ѻ`a Qf<Gn1A8mOɸRy7*g*&WW"թf{!"2Rk?J3Aߨ8z`WUA`j1+]?Ԓx̔ڼQׯ,3Lzs$]횔9&7q?)XǓ~oP 7',U xT,(U2 €X1K%Y*L)=}
-'̮~eR6',UC:j->xOh1K|U_<YwOG˜sӌቾ
-veXu}rueq zlݮD}{*]@ɉ֤rO[6Qվp\mܲaѨehB4
- Xaډq9[2 ׭RGW/{ a^/%W [;%YE[unAH`(f'p@f^ui_}I렿^S^<_ݽzSZ?ںbZwzMOSڏ;Ӂi
-9ؤ@)}
-
-a
-֖1*g@꠿R@`B鋰$44 Qc*"*hCiߓ5>fzsFќf8{'m'Y֤+9-=~P.:)z8XV5h„7TIbd
-\۝x 8RExm9a*Ӝ# J|Db])ϕ%Rk;>sUDX-kzPROG^Ǫyb5٥ +A>v,_)>Lk^TQJ)i1~?NJ8#YW;nXJX~FM][OBu*ZT0 
-U4shnYk5ÛZ fCzֻV}:@rTG[">y57:c/ΙjDVRÞH>:I tҟҍ$`$"t4SL20鵬 '׏$:|l T^?(^BfꀃIu}eMޭ1I5p}K8yʭ
-;e8U/yd|Z֙%ƵG 5LVsI0aM8QėIWn_.g z$dڜPoy[-ց~Kl[<Kց: %Id}|Kly/"ѽnqè̴}\+yqݻKh5`TNqb`\YY>ΠHW`? ʶئo#Ha qZD4=gl絻bWoJx
-ykĸ]43ٶkɓANyZlɜ1_ɀ~ֶmb@̄bh tm=
->?,`]
+ʾpxӋ3PoAYX)>HƅԖYY:S^wb7Gə&S-퓎G٬w2|zH).,]~%>$>?.'eOh@ہ)n6U,LT{TZEg%f7|x.V:ݻJŔoXǶXbG1R(Hs
+^N„~YJ})$\{oV:ϭϚƉ;{֪\B@b;C!٠JS5Jyߢ#R<wKtw }|N6zm-EW͎dk Z~D,[tYʍPiJ@|ѽF^8@GM g N-(s-x<#9&}TlR%FbFR`{jq8g[g h8JRN?t+Z/1 ̦xaN,N$W[iD/}ix jRiѭZ._{W7N7aĐB\ $5`%&J?ώڕV DPFP"@if,F a\Ξ$>k{qgMa#V%ෝv)0sRZqH{Npr?b,xRWB,ly|QhLz®H xzr"K [5 g fNO(m/^=bhRi?9j35Vn}Sl(MHs /MAnvĄo
+鎖D
+N84U-f= L-k d
+8&\N" Ԃ`VpԎ&#}xa z$J"lLY%W2tĘ<V0jÜcN
+
+7C_ukxB@ a$NdXh: Z!]v̆d!D))ObO:pKULgy_ͦ$Ef}Ƴv؋*Z
+/Wɓ7<M4IuǂIvY]v%A
+׋H ozwSrT$?'3 rcR )M#k퓑RfpYGHâ;7䎣 2Y9rU:̣f
+L(ZSſU9s|wF?U1Z؎N7{+9\pؗj\yP! F%ѣҬ
+3xPYc?~=_?NdfV;+'irtod]ȉ7aԈ;Ig,ը%>{Kn9aOH fAᬒI°Y*yRidb\NOm9S8av+Kڭ}9a4P-U(h"^FY\ɺS~>Z望fOU+ê+3|khSETfSv%5D&W!$NN6&5~ڲiZ[nC F-EWHHT~ Nْn:WՍ}qczy,:\8
+1o-)V*Z"7s BC1G?7(ϭ;OL"45+O[z ЛplŽ7բӋ~~dɝLPȑ&HOVPq e@D4PtW?U:J_E&ѮQm8CUQyGe"M{8ή0{GL֛34
+PjI^փj:R5=VϫcY.eX 7vwo814E~cvO)e"] ͠
+TO M)qUq̺کVvEUBW3jxjDPѢIXTt~Cp˒Y\ 1^Tj
+0qE2!P6]}ǔumG
+cuo'`\[Ԓ&9c;B}KThU[#ɶ]+M p ϛnKJ4dàmz`&Cck|`P^@
endstream
endobj
319 0 obj
@@ -873,28 +858,19 @@ endobj
325 0 obj
<< /Filter /FlateDecode /Length 3798 >>
stream
-xˮ$;m?_yJGGFb+X/pNT<#鮪qiyE^˯we/QDE]B
-P.LXflBnR~%=c$k;P=i#nou'ݚׯ:eȗUGUp!A֔; @Z_| 7 8{-(P 2Vd+Z6џ
-?Szrظ&_BIGtKτz"R
-nBMTruf}_eI]"v型tGRIRϻ
-tp,S fm$,HƯrE2GU"0q;pVxpΑ~i%FWM +Kjƌ{W4Ҧ" к,\ȦܾMi(6@h6G{QB8F<JEklY)XhOl<kЕA,OA,ߎ bY~ .VV[ܱ:*rEVmVALr
-\uw+;-):YA!q uoj9͍NU&SA[3zOb4'Iw$?ϒ"m%Դ8 KhEF2j<!>@AFK8;>5؈a^}2h\1`tA
-ot
-]N51@Е͏Ύ{ea(<زC nOG^%z Grc,z=WjڀxB.V3;;v龮#+VOd<մ8~9ldZ+ÿvC,$8K-{=p!}xq-Ťc?atE,@0kҏ> א'o,0 Tq?
-WeFfBMP\LLql"L ;Q&_4Ch!wKo]<r/] 1(wdOՙhY$Y Z'i#NѦ:IDa@G,c@APZȒ:K '?R08w4X
-.&s1XqOšʎ\IaS(W!ʯѿݐvJ0{'P"@<Ф_vc0FF!H.g^n.l)sYZe63V9;nCgJ> ]<9a{LF@ʰɦ(I^huLc\6+hI?3z9C4^(P|^q
-asIB{}e* >ݱ nxv) %5B>J(7no땢$oGX V(Y045ƾ7b,wc'ԡy6`+s"Y<0=LyÙu=rM
-dKo*QB:Y5vܒxԅϱ
-Z{*
-ѧ ڨ7:W܌n]jJ*6XG
-OOB*yk;"
-MQO &qgy4"q`J
-`L9sw%OR0y_0Lk}'#>xfo̔V[)/ڷij.
- 6+[]5Ҁ.8r u8v&aDZ9,oȝ ʘRN:t7@}J- jcǠMJա>6D &eƙZGO ~ՐauZR#onzXN3n3M*;0mBC¼&{ۢQFgx77ɵ-+B]d6u>ְ^vp .˕nbVdvZB2±VGUV{ͨ8xZ)/=6#<[ mM4ZmWhgݶ%3ul'N/t6 ڠpR70}~`,F.,rN3֘vufcY6K}{Fa4̳>GFU)
-T/Nk6 <Ej]1ktX͖ʾғ4oYrE'{So0韱s'"{Ő^E3}Z.sY/nCnL`¶SLn?
-aOW(>F󦨟4İ1<nW`ád.4'BൟCe+{Ctrf+C|6jTsKr.mr&Aod=2:L([;5B|gλĤ7y+)5\9⪕q%7DzULh@-}Ln xq@B_O TƟHv(fkS{=n9<c,q ռM<\ 2yRO_xW
-|64d.> z} g$ٱbVb#FRޅPM~
- f"hYv< .&LaR 7BGnTJG<!_;\=0`$e}=N*9G!GWxKdiڂ7{zب%y &\k#4͛Q]#7~oDB& kFpѮ_PJ=ǓAkRwe7c,8`9`f`[d:<NO*zOS&l0u:09Ӝ5ȼ?|.id=cFCTe8Z71q.FFV T±I7`(#9rl4?[xÏ"g}<*:x.nZ'@̾uػTinqld(,d$TK1Rן/f~s #7Q^1%\F!7v&1QTzyH \<ohGHt0 0fR7~~~>c]H*1|x\dCSUbjwvַ5ܦýAD~+&+S\28R~=zuyYf;rgUE4}uF(j"5^ 9U)i.u*W]pT}~? t}G= aOIFtY7ly:yP}s8j`jTr\7)7uԂ~.&7q݆B0//RpN{[ԧ>nlZwLE-uCzn뿦
+xɎ#>_򀌞j
+xaXƊyl|ŴZM'ϔƣ$:6I(tDDLY'(/媐&$mQN,W^ZWI[hUFTG+\;{LjzޝP`32JmfFI‚d)W*cJD5N`g޸ H4ZKh|+Kjƌ{W4Ҧ" к,\Ȧ#r6MCq `Bi>[#X*{, gaSО A,CW<I|;2e4bZ ߷ZmrVY!Y1G*pݭVﰮJd}ڶ_e1ֽaN縲\M 'I;pןgI}nCԴ8 KhEF2j< B"=}Y|a"/Ldg_c#b0̫O+.HA7|TC
+T ]IYWfq-K0ptUWZ\cW.cEJMcEVbfg0Ӯ:Ur`%8תU,^}}<aLkepȝ}ќ'y)c^ Ӟb]>A{am8-Ť!
+u ,2+!vbB+C+Oi.< eeXdSN$3{ہGج[{
+z?Yc?wDu2#U1 9}!iZPpO۠L3bk킰:]4bIϫ}? \mRL+}2
+^O񶁍HQ8c;]ͳY4[T p"~Z0y*xA\CI|伢4etslB+tk8. џc HƵT4"G6&UO=l^(-fts
+0>!(0,|7z aǮ`\C=Hާ0 [7΀l]xC`XVw5~_Mvq[FJ)^ j5uA[䵞GՏzPٺ[|&ppTڔ ¸I-d @eMTsu>]GB ` AJ
+ Sт*:\mٌ#xDW! ClQ)mLiL:΁n j8`lh@^_&/^ s WP۟/Fծ&hZmS&f
+lItu<6v$c3Ui`m
+{jf {yGuutk{_oVq1n2Vhmd0 I
+Ə~]M6&j4qpf7yؾ-(fmwj&K4FEfmK<fpYtm"mM׺\ԩuŲ<y׍mwqJ)Ŋ7N [n3c11E 5HMӁ.AMG}vfmK!1#Iy_Fƥa!5;cM67 np(Leqw?&K5\Lm9l,Fv^oϨy^_'Ȩ*]aiA;FӼ'h2_+b!Qҕ^z Z=Xds*^>-LuLnVCf¶Pn?4Nm\\>1_͛^X$q  s>**[*S?fYI]0F=3`&gRxF2FS ek tge@?sVHLzcZWm:Y!Ѭ5mo¼G@ &1Bzڠ2D]F5[q_0!cxX4w/C<\}<qة/<߫L9< ~*O7bΆGsXbVb#FRޅPMo
+ f"hYv< 6&LaR 7BnUJC$_;\=fIckDpw(GCK3C0I:oQKDSMŹFh7ףc 7~oDB& kFpѮ_PJ=ǓA {[c0key9`f`[d:<NO*zObMat`asp9/n)ky]u7#\ z>Bp`\ųob w]^F`c/uoU@3D84?[xǘ˳>R`(䱇N{Ut
+fߺw]An4fbld(,|2JF$TK1Rן/@Egf~s 㔙7Q^v<\F!7v&1QTzyHFxfߦ?=>q
endstream
endobj
324 0 obj
@@ -916,7 +892,7 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F63 231 0 R /F65 232 0 R /F32 236 0 R /F22 234 0 R /F25 327 0 R /F53 226 0 R /F16 251 0 R /F71 292 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
330 0 obj
-<< /Filter /FlateDecode /Length 3065 >>
+<< /Filter /FlateDecode /Length 3063 >>
stream
x[KϯX,
9{C[j.ڣ&bk3}ωy9t7F_ĉ$eʹp.ֿ_֚3Z[ZkX %Z O_x] ]%<^g!?|J͜v' TR>h
@@ -924,11 +900,11 @@ x[KϯX,
ڶg&wZ|v $2d^\[9̸2J$> p)쥊*ʧH:9۾͚jQvh-QLe9 T,ͱtϡ$Hƽ4HK0L0{T3-:p1JՎ21i \)^@ˮ4qr;buvEJGRI~ݏZR1HLNPLy۹z-IDMMWꑦycj<GOtC+srڳx`d}KbkK
 F}X/Ez䓗d,rﶱ}g rj2$zJt87uosq;}HWISzJon!Mo+aV׈>8}/S+
ycMJ.A4bMƒ$xYj+)+snlu:˙0'סLb6n*AaLO0vJ<q f~~ Hr~M EvY^4 t[yþ~_&R<&ɭV^T_P~{I⧎ K@'`#>p #<YUqPT`jdio4.`vt[ڰ) ʭ1XwC)̲8R WIw_JOWY25CR֗~UHC_dl^gx@7QWa1r,ֲy?%DL\l?Uӣx#ɸB 9υτYUcn>ʜhVP0/`%[Nho kG\HJA@~`á\<45|ys;Zh.X{$iy:T`1Ӧ/Y<C
-ڏx&9l4`}{%y떎tyӱaOGO:>W=fS]Ie8&ϵ :{'\JK&y!@^S,X`9N|bO
-lw!`Hcb' 8)s !a9iP=@2@c`=HP(6 p-$?Y'>>]Ʒy]
-fJ R 鞊H #RC)h#R R#{Li1~"5PZ!􆐮 Dj}{%<Dj}LǾ."b?rx=H-$>H  R1DjtDjDjmo
-#/H V?@K&h/H ܲ,Zp/H r~H 홵?&ޏH-B-aˡvP;tXS
-qR8C
+ڏx&9l4`}{%y떎tyӱaOGO:>W=fS]Ie8&KGnޖrd9q$
+Ct&N.}7QT9Pxʨ幸]Hg;Lx>҃ʀO6_ =&*g
+;ǾOJV µqA.V˧4Q*xG@ޅY DaVC&fZ3% 0tOŬ1 jhj10=OIi(zCH~f5>}ie
+f5>cw R Ĭ?>YM=Y4aVCcV`Vhxk%wij@f5^9a3~j疽gZ:`j疖KJhϬ1~j!=r! [e׫ܡ0_tBiFUe+[{3'6#<=}~u0b`&NøCk|kp4:D=2iFLnmt|=<3YKI|@?)nV[mK@{sy
+ҝ3]1j-v-v_f\)G}5u83D7q;"m v o;0ӓ~W`=CǧR+lNvSz^05S1C=G U045mo\14N+'MiW9:n#Mp0&N BAغLQA(|N~܎n2WB1!xP6@am(}dz©N6[d,Ɖ@
endstream
endobj
329 0 obj
@@ -941,19 +917,20 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F71 292 0 R /F15 227 0 R /F62 230 0 R /F68 259 0 R /F54 228 0 R /F72 300 0 R /F63 231 0 R /F65 232 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
336 0 obj
-<< /Filter /FlateDecode /Length 2971 >>
-stream
-xɎ6^_(x\@rJnANY0Ӈe~U,Nn$(kW-!Zo"뙴5q#/o͹vxtzs|>$^o/|zw3疧qpos;߈G}zni.= c >iH闏#ϼ& I8 )`!R%R X"3Pa//-JX8ˏB)GzA!F${Urt @9jFZ^eIH"+zJU\HQʵs ?:\幃>t*+Rw̸G )>U$Fi7"'I:ެ:DZYvF1 AsEC'hV@&FkZ8 >'u([)+Ӹ$
-q>ulY?AG#ua%)II-y~@b2PU= ]1+ Df3=bs,Ld]l;=b$d`bc^%{xV"=V,Z=p@UH@gjAe5bq#w2bos;1bGY7 |_.J\Y+r$ͥZޭnY3{ZC< .=J@^939JI_ϝ&h^$E4azbJ
-O[f46tfc1rԁr UOI%^F NV032$ (wP =
-M['BӓBӛVYyɐf
-q\eS<P~w̱-XӖj%5]eY*&Cڈ04mC.#S kTJ! XH1Ahht:S*41qyegJHD]Rʮ&
-{Q
-jԚOAx_iL[ތ7H;"ܨf=V]u<ˎrtpͣ!ʒ_Sf8G/;BM%a?,-O1tK<W3jSpI eV"dhai~s2I^dZQ-{[ZRD װAkaֵnFeC& 3F@̵V]& (c0
-.;j}廱Ȇ$+noF|Fq8~r4UumI/0f#ӂ}D@HVEAwXvgKLȂN!ldy V3+U
-ϐ sЖ4{ O7 p+fjIj3s"'~ay!
-FMXΜSSKhZP N۽fFv 0;ߴp@`siB#%s?$jilP#NOaRgH1Gȩ56zUȍGBb}ٌJn?bТyPaI\>h;9I]!t$V6ILx\>q`bq&lf_o>(ϻqL
-˝0?O/?oq1j9hb:"YM5k3կD)_(
+<< /Filter /FlateDecode /Length 2975 >>
+stream
+x[K6h.Y| x@rʤoANyaw-ŧ(Y;<nKTcE_ __/j.XϤ]||Y~~hεOW9K~
+IrR6B |K5D94:g> y$3#W˯_^ .[pn受Fc3iRHNB=kI$9JDol;i;绶含kuzI$#%Q R2)VcsF)> d[;*W ʨ!tǂ+D~4P8SuNq0hV_Ik)rNQ^^i{{)q'kp5W<4xfUK dm ƮEsb[r3K2ӫNcVV"QFJ6NR++(B[d
+#{8M_mƴѯ$VZyJ4^ hfa2(hQɎP#"!k,s[t%Gy(k%?H R (V-TFI[#Ȝ68Ŝs;1rG[4 zO6.
+;Zgm6rlJ,O􂃭t%,ޡ^ :w-Ebds yF%Kbh܅v)J@o<_<v̬*yu"e5[oْd/3G΢,agFmg*nWUd$. A&z84nMWfMwZgM4nh;M@ VdBE3zXtb][*JDkT,#Th(#Rl]8GM&Ru y/'I6NOg uL\b
+^*|׵T>>Nitr-??4]:֐Ko\@
+U#s!ά{a쿗7t DMq5ý';zypI[=/i/;3׉4c,obYzlդpONZj/c\iqFsonEI:UsibV,c\S4+wÄ8?oߗ<rH 1sDL\܁
+džRAh`kJ_\s^$GcW}<_FqcC\Za[WA^Z=[ZX`@%}՛.ތN
+ljIIr.dYKc"lyJS> \湚I
+#NhX?-s= dC0O'9)zT!Jx&0u&N۫_X4X<g]fR>& sp
+r
++?I<zdIm`܂4b<Σa9USW'~fyL2gp@<6ƤSrgЁRئy)&^n9Eu9V8θvX٘q¶І5-oX|GȟqȌ~r4Uu \r_0{mIWY{IQhoϑc՝d<՝Go۩3݁6fQ
+XfZ[ N;H@+ G"Ux2JQmQwQih2Lvnֱy Ӗ3]AM6KZ9Gxv/;%1QJ
endstream
endobj
335 0 obj
@@ -987,7 +964,9 @@ xɎc_ F
l7#c*j@XKc"ME>-5,5
EMȰiKLe5j<:O,!5 R R2ņ&OHǤӖK!a[mw^2Ognre5jnA8z*=9
4'pkmȞC}TF3͈Kܣ6"'7v-
-Dҍ'3usL5bBBrk+ҍtdɞwfŲT ) k/U8=%cȭHT U˩j*SR&3QS2Y:M? ؟ZvRbS/\nZx)٣.^k5F!czeaI
+Dҍ'3usL5bBBrk+ҍtdɞwfŲT )9JQُSR9f꞊tOLPz+
+P N%2\UcŎg˸zJ팗?N(L Xxa!$L1"6YH?vڬUY1]Zɯp~VYc¤6R. 1]Q>-/(* 6RW=<h>(?F[rALXyK$)oՀL+{|m\9+knj4X!~)N&}d.Z35w7~{yQ=Nsϼ#LG,:/[.χf$PxBnY2?v
+T\%SU&{ԾX hLE?Xh ݇":`Z< ~Bbb%IJ30\t 'eq]O<Xr![
endstream
endobj
344 0 obj
@@ -1021,7 +1000,7 @@ endobj
<< /D [ 344 0 R /XYZ 79.37 247.555 null ] >>
endobj
343 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F54 228 0 R /F62 230 0 R /F16 251 0 R /F68 259 0 R /F70 285 0 R /F55 229 0 R /F32 236 0 R /F61 239 0 R /F48 237 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F54 228 0 R /F62 230 0 R /F16 251 0 R /F68 259 0 R /F70 283 0 R /F55 229 0 R /F32 236 0 R /F61 239 0 R /F48 237 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
350 0 obj
<< /Filter /FlateDecode /Length 3177 >>
@@ -1091,24 +1070,25 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F62 230 0 R /F63 231 0 R /F68 259 0 R /F15 227 0 R /F16 251 0 R /F61 239 0 R /F22 234 0 R /F31 233 0 R /F25 327 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
359 0 obj
-<< /Filter /FlateDecode /Length 4080 >>
-stream
-x\\)jA`Y@Wkj&%Y%H`<PwrNUmF\B,"pݪI._A]$. eZ|7) ԟ:%`.֝}ʸR }qLz7%@e.I}o=E2 L+;r?J~{ieD>`}Ry&)K/婗yUf^߅OG4~H7gp ){@kRMfdH1%myEDk`;j,zߟ֪HWYP;¢{:;2-^+aBiﭭr];Uw 6C
-F`}1&9e)>7ì?p0:a.|Eevl|duh/cV++18e[ꎽ9gmрr)kATX&Ѩ| tj+a ]1o…Tio5!^K!uU8AvLn\ƓiRi}#^Ph5B{Z<Z<_~u)M?7"3D)R([ }Bz?!_0o9bpw4J 1BBd^ɂ?vyo2]~:*!$ЗW|qo
-I>5VoejL~輦H*O# S?6 [cQ<wW<-fug[ܔR?Y[[fPk,އ
-4F}\F3n*"퉋n,3';N3 |۩A AiM`3wp)¾#(yʉA]"SY1R[`珉pUyP] 
-޹&!%O*@;=`#` $Q,EʖԿB}OLkJSo"k&ObrfƗ0R`8_|E8 [ BOޯG?%q =1!vR:1bj ׬;S\e} lU
-' 98ֺE%=߲[B/
-7O
-T Ls ( I:Po++—!w}^QܫLNJn*kn.hLVM~AfCf7?anSӞ~L jULG`c:-L[,OO[G7Lt<0S8L=ێ.lKQ#oY)y[=i&|+DOcҹ_wsnCM5'%͊StIpXR#8VS}4S@l"80mNtCu`M61$z̬L> %czik=08I_I_? lYpq{< sKrffi/CAdü4C 3v+!T,Sdjjۯ5W^{[ (r=ېLSZ*\S9^b0BKZ*k?uc93Eʠ5Q Ypݍl`cE$!oiS~-{)nSa*/5s1fΙc v{pTM>f$KUO&/tk~T<2'F B/ң)8Raˎf| Y
-{y1E`u1%8uh(NqİQP7xuKZlt^[x8~ =m)z?P>lGxח { ζ[0
-xGgF ~٨e7,hM`7σVQ8Kg^_CȻn_czO]$ykySidI5UJOf,K66U&<1-2Y76;_s{NveW<^vg}u5A}!syw6mbET8}
-x ^XdLUdiƪڱ"8KġݠkIMTQ~R; yw4kZ5
-i)}+g*m|ܞ~b:ٱԁAaºV$%U']+H%ϓ+*z_liuURyiO[m% =i V<@zBO5VM&HJmώ 6]6U{h܌^zlMrW tղoD 8UrGn`{N:O
-W唙fBv6!h瑲Rt
-|~ζ/|*ԂD53k 4ǷXɶX?f
->̣ak5t:D3=&W/<e.O)L d'4XcbS82SGCF
-@a`uk9G6#q(72\@azo ^{3ӑ-6zZ5 OUbgKjc 5-c#g u/q$nk-`Uh<Zk~3qgJ(cP^vk7RwQ9eUT+pM4eg<A
+<< /Filter /FlateDecode /Length 4462 >>
+stream
+x\KdmF%z tuMW{x^L&@I~~78ۨsHHQW
+sEçU'J]HX/ŋJHj˟ߤ_#P j: Zw)J I3L
+
+s˿ʀ0ԧޟp cUjKm/'2^㬐:3IYz}/O$̫R_3oy>LNy~#էߜq fK5)#- M-~R@y쨱i\~N[#ϯH;LWw|ES_uB]ȃWֶxu z"uTP ~/+ iW;ft4*由rxtV^?R D脝IۥyѺo磽\xYqO
+Ƭ˾of;6朵FY_iDPaF/hҩepth8 RAք^z-]V2WssO}K5xAUniah|K!ojۯz}qIm%Q
+_yӇ?fwDJEVeS!{=~y j[u$RC 8Wꩥx]ś x߾JI63+>ac]8w
+I>|
+ɎQ2 `]szo5t&vwSL$͵>)v0Ci2O,OP~FuM)esef9}xP@+q%.6DĆ[|
+D2Cj{b&
+pLe-bvlHn\[,\'wd:o4Ƚ-*EO.ո*TVq8cb+kUbcTV.vIDqœ5.Tr("|eKDU_'5H{)7y'}73KZY)0/yri _nO֠?'W`fJ䣳8"]Fs)XIW
+fn]rިELDP1+94M0 V BZi' :#PV?O t! e4D[359®vtdf$w<_? a}iuT5A2+?.‹BBⓒ*U/HJyBgm}%69xe{&EW7**6zbҟZˌdTvۍ<dt?e.eWy\np<=mY
+j
+(#vk tH2q$|BUk\Bq]+n;o/fzNn%-p1<yO$SZ?ʻxul}0b]Ugf\-<)2-SX sʎVBl )f0NIk<2x+~;PrkI=QE?K<>F߬.G!ߒgLJP+[紸ONrzt<WbfE :\k NWr&^psy?H"梏Zs%2^*kFG5UJO+K6~UdbU:j3_~L"eC<Կe}NLsk%}r"5, dY1"wzM9V[%^F UhSNuA("cVj;n^ڍ5p@C}O=UI':ZEѝqΗ{x|?`h*Ѫq3o
+  jo$'->[|"wx]y.DnA]x`*lz~!aP?W2^5d.fۼQzByV-ZR(+#e5(QhGWkFZl.]n%GT
+i-Ȟ~b:AK!Y)āE3!Lõ\;%{ҵ~}OIAUNnf?֟ZniK$z$0N[%-}ԛ_,]cz-d+J`E.^y{R |h܌^zlM Uc}߁[^N2D-^⧂Γ[4mdp+ƃLX`_1W+,}m!hځRa^Vuhb˲Q^|=` 8gVmDIB)“R3
+2̣ah5t4F@z
+Mެ*湢?b^Lk##ǁJ?#!A iXӠΕq +|8Z.X07 `d :-7N^k#Vɰ;
endstream
endobj
358 0 obj
@@ -1118,27 +1098,34 @@ endobj
<< /D [ 358 0 R /XYZ 78.37 808.885 null ] >>
endobj
121 0 obj
-<< /D [ 358 0 R /XYZ 79.37 689.086 null ] >>
+<< /D [ 358 0 R /XYZ 79.37 689.507 null ] >>
endobj
125 0 obj
-<< /D [ 358 0 R /XYZ 79.37 576.152 null ] >>
+<< /D [ 358 0 R /XYZ 79.37 577.974 null ] >>
endobj
129 0 obj
-<< /D [ 358 0 R /XYZ 79.37 417.923 null ] >>
+<< /D [ 358 0 R /XYZ 79.37 427.504 null ] >>
endobj
357 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F61 239 0 R /F62 230 0 R /F63 231 0 R /F22 234 0 R /F31 233 0 R /F25 327 0 R /F15 227 0 R /F59 352 0 R /F57 361 0 R /F44 362 0 R /F56 363 0 R /F53 226 0 R /F68 259 0 R /F55 229 0 R /F54 228 0 R /F16 251 0 R /F32 236 0 R /F48 237 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
366 0 obj
-<< /Filter /FlateDecode /Length 2801 >>
-stream
-xڽɎ>_Y,.ڭk߂\CRDv?#[jgl)IŋZ/_.[vgV]UJ@lREכv骁.>z)KօݖBIh\Vx`q]gWx x"ꎿLgH= %yVy2ë
-`S5|g$>IukqKBHfPۢa1@KwdQ
-gh.]Qh\Zm2Ӂ Ga{l .k!ar2$X ֽd~>u=u:++Tb'P#>-d'=^.r>ƹn-zC2_Tݓb@Wd1%{KJE:>-lEg>nKyasA,Hp6e. 9sUi\pdj cn92pt'}Gi\ũ$'=TSWYӮwo sqN:%;#Jfu
-. m'ߌՑ/үMk, PZ6(gP.M}l
-$G؁TCS%";:e;*!ƈ-Q^5՛f^d
-Bby6ZvcǙrHUʉx_FEfHX PR{"䣮`+lA}NȚՔ}Pip>~w{J
-G7N&!`(C=£f09>,2 ™ b%#y++ɳl{R* a_Tb=_"բ'bEOL:~JR֥^qٽr=-ȽzDc3y:Bu\hA`A;g/k@
+<< /Filter /FlateDecode /Length 2959 >>
+stream
+xڽ[K# Dv {
+з CB^*3=EmHK#=$y||yu
+":u:(?ytg)MJ"JiS~wi);q~%|u^J$릵5D'.4Z'x[PF+|&z+oK
+ړ<z
+F{DA<It(7eO8s6:|(<^II&١9Z3GmAL#i ?o( ׎v-et̃+2z+8Nm ~ץxr8BΕ#}k:
+TгO#0
+e形@u)2τX+qZ"Iǩsy+ v p+FrAE<PRhWjG9ͽsP*{f™ x+ >I3_\ B,tFb߷.Zz}J9
+=cęu+>гQd♒F*CBsAM)YNO+i2p:(QB9yfyU&V: !^kRZ5xdމRϕ>`Ө):qUh|#>>ō!GjNf;տ [;:&h)uzdT]ZfԥظzZiԝ շoZ&Fy[cY[;*|i[%~޵9BsJoW'
+fU0b'C7q{Q[js
+ _u
+_|m@%ڷK֪Sle8IhYmkG,ڢ\w{ 5IkLʖ;T36vGپF
+g?Hr!7U/`-64P2!ZYCܾd/h3{R?#b{c
+;x
+j 2]|Ʒ<T
endstream
endobj
365 0 obj
@@ -1148,123 +1135,129 @@ endobj
<< /D [ 365 0 R /XYZ 78.37 808.885 null ] >>
endobj
133 0 obj
-<< /D [ 365 0 R /XYZ 79.37 564.05 null ] >>
+<< /D [ 365 0 R /XYZ 79.37 556.321 null ] >>
endobj
364 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F71 292 0 R /F15 227 0 R /F62 230 0 R /F16 251 0 R /F54 228 0 R /F68 259 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-375 0 obj
-<< /Filter /FlateDecode /Length 3829 >>
-stream
-xn$1WLhK( 4ؑ͌~gţ=3ٍhfdWy_^^tUio(|!O7a;%So*~/ƻtҪ/:ć+d|ʣW/RB1YgA
-
-z!I>7۞!⪽<h9omd*S$L<04u;chM:=zS9NGGC~3qw 6MJXƠ /eFFK i6ހJɴ<;]"wYkN\=]T4) //_R
-uA:X6mxp}/Bե*Ah)kl<5ys&nc)Ao{5u,5x7}~6t(7,p]oHÏoHrs5RP̫ U`1X-S,@wOCR$g#f[J2lD,֚mx1X|5ӜJ
-XxL=wk+TRtGoYMPk{XfH)@~|œQ_N{ՄWJǺ\X9Jtq/I/
--bܚvfHVEpneZѕųqurK~Bx"C=8
-1TYqBcܣ?2
-jC8}6 H&J}3Z03Ґ^
-^zSکծӥM}41&S 6S etSd]ySe1莦TƷzjZڴRGKA~ SPwI%g*
->p IUMKv-;\% 8DTI=R\c_9v#ľ3M
-_ tYroS\YFFZ6ǜ nԒ+5hVuLofM!كo]!{i)㉓Ŀ<*ѣ4HzB-:ϳ" 7Cu#v2vm%地d
- aRgtw&ͭ!}pEЅF)`!)c9"wL65";
-hT/tU>:MZapݑ<Z^i/UT:=tzCj+ąWpo ;>4F=tGA-oj7P=[9Cc]WBէ1o%E֌ g+RV $7r&ƶ_ 1$=W rJ*R>7y]CC`(
-T'_ZP͎|lyVp&}t`믝+=۞ \Z\[)z{3r~M9wN]:| 5-x0HfXU]IT-=<0$a,2[ϐƺa nOf;`ژcUn">޺7̚]UEH1:|N 6\#~^ /ڴ7Hh=JRnx8]xw8c:Ad=+\}EPޫ6~dd,2%]O9%CxB!Y> L(p?uPɀ5+$C,neڤdWTt;ݰͱb`^P̍4M#׊m yz#ڠuYGHT;\oJNX#&k>*N* r89ܶIKek ܎қ4uAL
+373 0 obj
+<< /Filter /FlateDecode /Length 3806 >>
+stream
+xɎc_crKqy@hd >[S8@"{59F[O|E־rOOWO؜vpۋ:IO&?yt^ Rq~6oUJ8V᳐g m]׷/VC7Nq|]^!>~齷_e6SSIܷrkgrrxlG!uWg߉*.py#%E]sr;~aj0Lqu9vЦtHH1 Ve0x!3 6ۥK-
+pKEMoF&'^M J;Sj["ߓGe{1)і1b(#NOWemZ4uTYbW$6KagѸʿsO&Ioڿk6v)Rx|3_: oL%L!"aޙ`$>z4O@@ZQgenPHY ,k}ɘ"N6Z(xB?-LVҧ_Le.
+|^5
+R厥Ǣ{D!
+E"DFO,
++.:'p_sI24 gVl
+!SwiHЌ6;g0?|oFK% $x_BZhu?N&
+5C{yljT 3UMf&hb"d#E.%ݲXVRsW%a׍-0ڕjͩQiW5R0-}
+enй<F 7,ݥSCbkZ*!kjvRiyjkZuӕJu+(\j
+uh lW/~Z#$Rnd|Qn-c\]# DL=@ ٭56?
+.^tvA,6Q ՙv.eD=p_gEgֵu5} 7 s~6F ficu}LKĘsR@U\
+9kkFgD$ӱbgc ވm sf؈T- ^"m<w_0,z|mI%XN{fZEUԷZ5
+ %Rx29N"vaiGϩ\긫I:}ih$ʰ3CŷZsԎ,[
+I(2ӯOe93b?SFdGhcvx)8
+bO*5=Wуv c0w {}o6D谌jнP efu
+a@XFTÀF|Ag԰9hhS-k|+(L)3W%rx܌mJs2浻! &r6C+ZMhv?a4t u
+Q߹R:Beu,];(T&8ݐM-םZ)`d!V;)zZ-M4:vIh xv|r=LMH,^SoָGqD4x:rM#F3Y)4#;uPoY
+o:UwYHײf*2cmjlU4CoѨ+҄IL]`1B1)q,|/Dſ:c4lH9-|nHYcҍ 2}
+چ hQXcxUDyX-s^Ѣr~yp.AV?xx 4van++!:ĴB
+Ap 醪bz(ziNNA .3 zq2>0_vntENwҾ.C2HS^t2iʍ2Ȕ{l0<e3箢 xm!פSsv?I*ֿVSD@XQ+ h47 )4H-AхT>#h1"Di"1F(aG8p;n0ڠCm4A[[mE_.X?9}& esBNϙIbe̞ogbIWjrK"Cߵ*TNIgo6B$,ǖT*/h9nkWmE-ӄ!1v
+i_%C_-'e`h=۸-k̶^[wp?ђj X yY
endstream
endobj
-374 0 obj
-<< /Type /Page /Contents 375 0 R /Resources 373 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 322 0 R /Annots 377 0 R >>
+372 0 obj
+<< /Type /Page /Contents 373 0 R /Resources 371 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 322 0 R /Annots 375 0 R >>
endobj
-377 0 obj
-[ 368 0 R 369 0 R 370 0 R ]
+375 0 obj
+[ 368 0 R ]
endobj
368 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.041 145.137 174.015 157.092 ]/A << /S /GoTo /D (subsection.4.1) >> >>
-endobj
-369 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 255.622 105.836 278.098 117.791 ]/A << /S /GoTo /D (subsubsection.6.4.3) >> >>
-endobj
-370 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 149.527 93.881 172.003 105.836 ]/A << /S /GoTo /D (subsubsection.6.4.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.041 67.379 174.015 79.334 ]/A << /S /GoTo /D (subsection.4.1) >> >>
endobj
-376 0 obj
-<< /D [ 374 0 R /XYZ 78.37 808.885 null ] >>
+374 0 obj
+<< /D [ 372 0 R /XYZ 78.37 808.885 null ] >>
endobj
137 0 obj
-<< /D [ 374 0 R /XYZ 79.37 703.382 null ] >>
+<< /D [ 372 0 R /XYZ 79.37 636.64 null ] >>
endobj
141 0 obj
-<< /D [ 374 0 R /XYZ 79.37 454.69 null ] >>
+<< /D [ 372 0 R /XYZ 79.37 389.431 null ] >>
endobj
145 0 obj
-<< /D [ 374 0 R /XYZ 79.37 300.244 null ] >>
+<< /D [ 372 0 R /XYZ 79.37 221.086 null ] >>
endobj
-373 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F53 226 0 R /F54 228 0 R /F22 234 0 R /F16 251 0 R >> /ProcSet [ /PDF /Text ] >>
+371 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F62 230 0 R /F15 227 0 R /F53 226 0 R /F54 228 0 R /F22 234 0 R /F16 251 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
380 0 obj
-<< /Filter /FlateDecode /Length 2985 >>
+<< /Filter /FlateDecode /Length 3321 >>
stream
-x[Ɏ W( c T*Ƀ>9d[feI<+3# .d$_so/܅x4pyE~Rb`܈or!o|+N2r5Ip`a9H΍\]_o}'枼9Nck%Ly=V>)E^lVՉxF6_ʼB7<3hIK3aBvI&<M 㽸Rxq D%kF@r8 㢤'gVD~T\N i0g PiI4V eCk(k
-HK ov\d~kʯ^dY<[&<=\T} ]*˄.^iFhb dmq1eTk&&ub y<:\Yu\1[/_g@ mZ%f•S(΃+n.lw $[2(P k <
-yETըUT9qr͔*iG*)+U8i.Rתr/܅PՆ J6LLԨ;+bfBB*[Ť;廷ZQ@0[~5㢨݄p$|*K'^夦EXКoyWOStSKiWM
-!!l(
-IAH0͡"oN)l9ea,]eҰ"e SIIVIQNܥȲsņ֏̈%. JZ{$!y'\=Ҝl"*D^o-A@b/:Vp|}}} aֈ˿~{۔h<חw:,'NXws.*i Oop(FU#9+G 2_n
-BB־4$_RHW%I64Fit w焴ag;D viaݟ<zJ_jթS&(k
-oimF:!6OL"!6a`w٨Yڨ:M^'hn {r P84 A>RAW
-kJ3P_/:V4ƯP+{JZOi!C%<I9Z0>/x^
+x\K ϯ?Zkm 9e["!C!%Q类,(>k_7~}{.-`շo_<7q)n
+ƭ}W.'+q$V~IIι>IԝsK=J<7OG60y]"1!  ~}s(߷a8h[ XH8y%?yb) nI
+FT[pV3BHmc_L:ws:0mV3W.E$_lR#V,HɔIcggf߾ ͽ4h636ci%O\xǣ0R 1g0Ot9Ev[dDFJ!iFKu+DŽU]*Txz߫[nox<<֠,p?GTQvR$)>&ZHs^i]u:wEJhLCۍ8kJ=kqCnoƱHnqT-O;ˌ6$UEQX'J( & jN#ŧⷍiqYi5͛;(2NJ(#؉wBڪزCV6 [cɾNޱB:̝qce‹5~hB^fz5iµ'u42"`in7
+yą.n9Pơ 5rfl,
+m↞-V{.e|\ qr}.
+fރYD N;<-|Hj!-Q62fi6wwK E0<_#\,yQ{ӊHH[;H|N(.F[ŧ֌d<
+E~<|L.(B
+WvtzY<(//n vN&%ü:xrߥhmņuT4FaKy Y?'.:cQi'ƃV
+Gzτm\A~bt8\;x*ou2DAA *\JV}."z/^3זyomS2/ 0VJX˝ UJ0eplRXs4e>@oů_ZNA0HƖٖcxkbIL>B_6*S)b͢@;smZ\8Jal:C_
+}zTwfR+O*} ]Ʉb>=mJ{+|t z=rtb褻 qB l>?jpJ1-fF_ax;=\B13LB~ttR@ 9%3ON)3m Tޒһ Gn$|8<#^]@&[;_c}pjѢ ynߎw ƛ/}/CWk
+A~?q =WKu"_x-xw兎\Sj*7Ќ|)oqJ& aR k` &uxu2js$2KR=m' o+U Nj=6Sjͥn[| ajem\U
endstream
endobj
379 0 obj
<< /Type /Page /Contents 380 0 R /Resources 378 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 382 0 R /Annots 383 0 R >>
endobj
383 0 obj
-[ 371 0 R 372 0 R ]
+[ 369 0 R 370 0 R 376 0 R 377 0 R ]
endobj
-371 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 499.407 700.341 514.132 712.296 ]/A << /S /GoTo /D (subsection.9.1) >> >>
+369 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 255.622 733.664 278.098 745.619 ]/A << /S /GoTo /D (subsubsection.6.4.3) >> >>
endobj
-372 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 90 688.943 101.955 699.613 ]/A << /S /GoTo /D (subsection.9.1) >> >>
+370 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 149.527 721.708 172.003 733.664 ]/A << /S /GoTo /D (subsubsection.6.4.4) >> >>
+endobj
+376 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 499.407 649.53 514.132 661.485 ]/A << /S /GoTo /D (subsection.9.1) >> >>
+endobj
+377 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 90 638.133 101.955 648.803 ]/A << /S /GoTo /D (subsection.9.1) >> >>
endobj
381 0 obj
<< /D [ 379 0 R /XYZ 78.37 808.885 null ] >>
endobj
149 0 obj
-<< /D [ 379 0 R /XYZ 79.37 662.029 null ] >>
+<< /D [ 379 0 R /XYZ 79.37 611.289 null ] >>
endobj
153 0 obj
-<< /D [ 379 0 R /XYZ 79.37 622.186 null ] >>
+<< /D [ 379 0 R /XYZ 79.37 571.445 null ] >>
endobj
157 0 obj
-<< /D [ 379 0 R /XYZ 79.37 293.752 null ] >>
+<< /D [ 379 0 R /XYZ 79.37 244.226 null ] >>
endobj
378 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 227 0 R /F62 230 0 R /F54 228 0 R /F53 226 0 R /F71 292 0 R /F61 239 0 R /F63 231 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
388 0 obj
-<< /Filter /FlateDecode /Length 3376 >>
-stream
-x[n++7ـa xddf"G"mQν0lb>l1]x^ąqq SeR.keQ"4^/o`>LL|r|feaV_>/x͔`܊r.o+ ?*+
-5R0sGTw#gZNc9ґHvne+B?nZA${6&m,p״ 9G|HJ0-Mo#vҹ[6}>dJ,C7FcH쇮S
-~$Zlz5~ݠׯik>֦+OG#ao8\dPStp(%4Q!ŒdBLXI5[lkR
-r:iL/2Ȧ7ͼAIcMGعǚjaE'z%,@AIHċx9:'9eerܻZ.ʛܨKcK)qxפe%r(;^H1
-At;):׉s7S<CF@T: L4LpKc1-AQ:ɬs;{CR}2ŌuO3cToϰLGT!gz2X"s[΋
-B˫IDHRiuem+<+K"\܃KHVҨAQUv%U)e> q,J.gBB#U!?MUrJuIJQrĊqd~./ @0BR2>)sByA_ӏJډKO#rJ"ʲҋr%W{P.:>|F2rWUiE zG1q*2pO]9sU+{˪N­JTђN`9q@6o
-g_ӓuehw zQyK_+1!XlG0G<(0PʕE Ҹܒ|.Xy!`u[6:qk.rꖑ BqlM6;Xn4*uL_>`B]lSr4=mJ'\fc<ly) C8G YzرU~R+yTː"b(踇9vdLg+dFJG0`!18U91_L΄C_VL`p$,Z9e
-
-au<0:ca
-29P@ xNzY~
-ᵷ; b9Te+]i
-/b;ngs ybH}戄<ds}"<3@Hޒ1_Q/Sl4Cc4abEt1E농δ]{T&N ÒQ!@FFy9R a~@Y_7fS|oOQi OWr\
-_!­;PDs
-MVIO>HR kGS 9[jƣ}8Fd_f
-W1*p+4fer5H%2_ <W  D%6፿XO7`8<T#26OP/*|
-]+ x/,Xq CAW`d`#+ #_ALG[mkD6cGzBeA>ט\(~CFN"}(=Q2\sjMCAžTĬn= L&*1쪾w?^H
-)J;ww3CoDR߉$.6[%؞><{a
-XZQg,S}4h)13+zsT©VN1L-<Vګ+,M:}B8 x7ݣ [""څ ߃h* LǯH
-IG\2
-]śU'(.<jȲyu" D\н6btB?;(sxەdJչfr53(`|3mp%½JE_ü۱Yc/_?_}E
+<< /Filter /FlateDecode /Length 3377 >>
+stream
+x[ˎ,W\7jHV,,,_8xEU2!x\u㷗 ˤ\.%<2Eh_o?tL_{~r결J/qfpV0n^97Ε??3bsocU
+<վI??NcM
+p4P=
+.3r6~rj3qEx_۾V2ϻdbE̳iU^{cړtD^ථn簥[WVM[=aSz]XLKq#舞hhDŽZ%4Pc/2c䯂7VM7hkښWzƕǞ0 JAW2(-t0,8Ki3Zm$ʌ`Hi3pf)e rIۅIͲ i>oi'hQ='z5ǾW<J;Hhև'Ls?MOD|=s=lUʃz{D,u+ צS1A(0hXD}QHPN\ɚ $Ub$q !2_$!eU95ov9y|ǚ6Ə0s%ŏ5>$N@U}%C=C)Y239֟Dw\w
+es3#dwu/ \7$SI7R:v|)@b%fw&Rq#nx(Pt#1|>`?G3cZtYM;=w@.f.랢gnqĩp韡
+4+Bf*0y6;AW!B h(XpV`@\GBCF յKJTfc7_cʘs¥=J)O|%qʣ+fc|rm9wbR&]h@xMf|R<h?V)/Ul.̇C eJ6ፋU*h>ᄡ%~bvUZQ^fMm3?E-\݈:TfEèܕND©w%GKђN`9q(@~'uwl2l(M'rDw۵
+$7 ܲIͤl6dUN4r~AcC(&4߲>Xk݉bƹI&m۔ral v
+Rx\uKa(`Pv&l;g"McA.SPu٤ HEO8ո;]@/5jY^X\ՎVɢ9
+m3 x*=
+H /k.=Yr=bĜ"
+d\_0O"u_RX_0fo=gX'Ae%zBi{eC(%UBP#Iqei?ͯ&T7+CS:*bj5cUgln>C)ۤk{\YOA+
+; b9e,i
+H0j;n@psR ybRIm戄0<}"<3bh֒q_Q/St4k4#jRE1E솎ऌŻߔ֑&_ äQ!@Fh{R a~@_D@flT<٧E'+PYy
+4؄`JB0< $wd<e!&#d֙-s8wnni> a0r6tC
+!+PFMrk|(HK0Wh0QW-CZͨԲ呞P+kwA%ac5fu75 8*C}OHHI 'jF5+mN] +(7_ܘ*ս*pDEC>#]Sx BK
+&9.L^̻PaL=jʴy?~ErfVPN<biUDz{/\"Sj/,+2 FTwO,'N(c9km2gIs1̨G!0!W:H2*Jlmݟ{ut]?^zE
endstream
endobj
387 0 obj
@@ -1289,27 +1282,19 @@ endobj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F63 231 0 R /F62 230 0 R /F15 227 0 R /F71 292 0 R /F68 259 0 R /F53 226 0 R /F54 228 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
396 0 obj
-<< /Filter /FlateDecode /Length 3273 >>
-stream
-x\n++G,j*wY%,H6_MZNf`ؒb=ͣ˙קx˿^ĉd=SdaR_~A> `
-(DE<8*hD\ͤ8&gktL+Fk*Ak-KTDGj˴tQHʟ\#㳹}l*4n6"?5-tmIk75Oa KˆY#B' >y%H=үj' s]X&lf|(ɔC6Zq^akB0dE]M?7eiLJՍ
-J@mM
-v" S6d*ᙝed0
-Dr*ЈQڢF <fWNxqU\G
-m 4VYKU&WxԃBs F)pL`[ ȯbⳃ?}y+&w7iCy$/ya̹uav1;:KU^U]? iLڵVSk$%`TyzN 3^97Vˈ&gs.yzI@FO=JiE 9o#c|Mq$j\7nrPzj&ix|g(z2CR\8
-irVYw^f;R U.xcQjj,1q<TztPQ6%Aos:'ȱA.Sz͵TE{LAWu-4c
-RIٳ$I<WYv{!Ri0 .P\4L;-Tzx~OPS
-6d/
-pu9`xgy\7UH<Ӓ=19c'\Y>f5>>yf 2%!ߊyȕiW'rMƎslК)O`ϯI)hRd4)"i4).6MAp.)7FD4vӤ4F;hRd h0|
-M
-XPQxO̓]/@RTuL )2Cޜţ.j&Kfΐ"KaH )jʁ ^:CjCRCR
-"&zt^<
-L ;'`(a@A߾[8Np2{&"V7Fkoe[Akb4<P0£
-l#}ⵠċ3/G\刷h?V޽re7~_ksNT>)|ѓ<'
-sBݘimW0ngthdf3ST.*!KCŎ&`b=(ղܓF*.@R
-'ҹMʼn]Sk_-$t.G'ǃl)Эsy`N 7hӥhq$\nT9Ded)^)7鏁YBoh CLx5`OAIzS7Tj8& )ce$_)+oxҴ,`~ NۏE@0:K)gZIz1B o2-2TLC':N<Xg=+ЍxXlGm
-D{$_0<_z~ɥ'y 1MSKk),=aAZ9Zc4ηj!AJ@Y6/V4^|>orp1i=?>:Ͱ=9ut=~닉דVN;}onn[=Y1
-Y
+<< /Filter /FlateDecode /Length 3272 >>
+stream
+x\Ɏ#W%J
+#!sAQ)&f.
+Z?Q:W3igs.6њJКs (Rg2;QG2m-]GA-g;HlF[?ޕUL7Fy7-t}
+@H#$tK0:د3"6.÷}xQ9=)K7!}񿗴5d8b8>%Tl@tAGDȤ ,I_.Ǣ~n^סɅ0Vd9.Mf/Z Po7 RKaRq~{"=Y|`\0Zoܡa#0X
+d@荦-Y`- ^1mSn3xå{2DA
+9ӹmT3;yQaty2pS*TM4fg
+jP6:\gEW \a:&W M X Dl ^$Uc|6T~*+<W˛!<yy{a̹ua5]rLEkWuiWz&Z]`djV4fi5_
+7
+h9%hJSޜʻ*\U4MUmsO22~ޣZb!l}L=Qek#5q»A빪 O˄;DՓ2rfNqPڕ w2[ʶY9=L.Nr3vF&e}u\J6B\H ̕ `a49,W;SHd^\=StU.1=antk`ט$jyZdr ¦C 7'ϕ$! \1N5><u0]յҌHzƫ/ 5kezcOu)'[}YSDłA-L{<P\ӖհЕ'6@9BO !,D1ho<)F<0_sjl猠@0%)ס%u4\e>ZM!%E#^g ~0/Jy609 ],`nffRUq*ivv!XQy]
+iyRe?hy8jΟi?EOћc؆rVGsB^o)Ο[9?Ջ^O-z{(j蠥[~a?
+Ӳ=5<m.?BgZ,𧠟IW$gb{ǐ(%a{u/#•ɤZ8trq*`]@F^b%1;ZmI~0I3_z~':y  T53[Â#ڵ4sڵhoB,ĎY6.V4.Fs43޴tq4[VW^{g]|mu6VN;}on[g=Y1rY
endstream
endobj
395 0 obj
@@ -1403,10 +1388,10 @@ endobj
<< /D [ 411 0 R /XYZ 79.37 578.639 null ] >>
endobj
410 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F62 230 0 R /F63 231 0 R /F65 232 0 R /F53 226 0 R /F15 227 0 R /F54 228 0 R /F70 285 0 R /F68 259 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F62 230 0 R /F63 231 0 R /F65 232 0 R /F53 226 0 R /F15 227 0 R /F54 228 0 R /F70 283 0 R /F68 259 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
416 0 obj
-<< /Filter /FlateDecode /Length 2183 >>
+<< /Filter /FlateDecode /Length 2181 >>
stream
xn6!gv
g:)B'V}twz{,X=}SKu.tJHo烔R"$>S`Uj7rq;)LG?h
@@ -1414,12 +1399,11 @@ g:)B'V}twz{,X=}SKu.tJHo烔R"$>S`Uj7rq
a7R&fZmhZޠU~e+ <"Xe~Je#ceb[ qaC7Cҍ<uY&\|hؾDr;=8wL#z;eza/ẸXqKu@ҬOOuLQhԥ1)K1eJ*Jp/FXy)Mv
8Lf!D63e/mQM&8JUY<e&
cF!
-_|Kat,PsQ z׽)ѪyᨢNˮi0}u-F Uvw<f\q[(s5*DYɹe^t@dZ 3Tc,; 1>ͭ& </Jz+|ª%!2T ʼBS]OV{\Љ ú84x.ҍm4}h$H$HPCiԆZy.`\"ɱR܌=/oS 3/fMlK[SЖQGߏ﵂鑽BK@YRR"p~kX&=mCcwm.m5ܘΊO[rHT]nskέ?!37<*Z)iq/t?Js 'PWqZ!1# QYdu<{Gk1fA
-7^
-0#4O1#eGq7
-6)W 0ʎwG(I쌠K~:DIœч\oΥQzb T
-J" )M͘]
-fg
+_|Kat,PsQ z׽)ѪyᨢNˮi0}u-F Uvw<f\q[(s5*DYɹe^t@dZ 3Tc,; 1>ͭ& </Jz+|ª%!2T ʼBS]OV{\Љ ú84x.ҍm4}h$H$HPCiԆZy.`\"ɱR܌=/oS 3/fMlK[SЖQGߏ﵂鑽BK@YRR"p~kX&=mCcwm.m5ܘΊO[ :°% p+H_snՐPq?QHiM{a},9T7 WLt786?Iy@N% ;J\1S>\פ28OIh.>Za?0ZXvhkV(//G .~(/~(G;^PzHouC!meƊL.JuIaV>Gjll/4st Ϲ
+o6[ 9|BͿ# 8HJOdeG黣}ZvF%?mR¤JaNQC.ŷRJsR(=u[Fr
+ѦfL®hw
+U4 NZq
+NWePIj 39հ^Ppd%n%W% T3L?V
endstream
endobj
415 0 obj
@@ -1454,20 +1438,18 @@ x\$+"#x:'hZ$GcW>
2U]3"d?o˟
oB2n"q (ˤoo?\ƽ~sWΑ~ џ{EAߍvl$} 1<W?ͷ-=N]_SjSBjahLZsŵ|)I00 B2MO(@ba$_>ziq=Bs\,#Cy9y^ɼ<99#LOT(DN@ZF}ǽI^bqvkZ{Rv l3T35P\]HQ5Kᯐ+
џ37.SCpZ>!b5ӯ&D{ŽjH<rBQe7O"c)q$+h-يC$58N68?22„~ ˌy=<Q`A;$ x ) 0YT
-F8ܯԜ7+>dq+36iυ+ǸB6cAҏeՌ¶ׯm jFSjyַ` i'h2G'E?QG3Nq뷗_+qF,o_~~qfH
-f,Ia:4^ymD$ʀa1|pzGJ[z10S'}M>h |HSnd!~κA0UG5̺H2S{;V’Ѝ񆦥SkUqeIW+*^U%?I*FCt!hSf)qA01c&]=R1Iz.~ treS饤BfQᄩ>Mkw5T O♵- ub%"S`>P2k??Sya($zKLWQ,aMFPG j4+^" @߸dysGۻ$42&єb) ͂(ذ粴hAR\3;<0k($yuGbv 9dq֣ I0;`¥ 5"^ 4NbV;yDh4Z;iY,)$g1xh$FkqL+vd|6>eG}KC`_㔣'8iNJQ; TK*BJ7]^iUL:
-61-p!bH'.%֌ !s:\dZ-mT_Bwb9@!8a7$,A
->Y<,g<MZoP)Sg3xOLK\
-$X_gFq$|վ=4:}cԴP8
- rTW>ζj~w:?9֕Ts>v]v
-lT%r>LGû2E֧RjAVpɾ.f
-BCX!֟3no_FYZLF:8^7L^Yk}؛])s%c= 4?X:Wc>0ܧbN'cξk>FF8UΔ1/:|ldb>ٟ=Y/C,!u(6FqE1.kN $ b}[v0ATW:6&+>^]<&͊$Ou_^.&z=d;GI=ǺҦu7w
-u"Wo*kF%ZӺT0(=42@Ta飩gRH~l7Tn^E{WUf{6h͆֘m{If"=[)rZ$b„ba!')8|ԍIs+d(QOJPNTBsM./a0N$ },7:a_װ)MT\ Va}O-7`iww']ͽ:TI\E6OL]~ltf7Yn'ry[|ձ] [#~ nM{QP{s%>)aX1`NtNɨM$^ 㵂ӟT|T@SD {݅vV+|-tOuMbl.zBsn9}‚U̪%˩2s<}€ kjP!zՓ=} <f*/g\n_
-"ml[o2ܰf>AekxG}
-w>k _i0 ycWEj_v|z)L5;dQ
- ˣ4ЙDЄF|ZK]TFYFC.~yz6>nh8='㛆BF-C X!^! v9[)&ڐcSQkYr
- OQ]dIQ I_3z5M)cN26yc&fu[\RSò،a'-MSYLz o
-Do.εrϖ o5HS{¬$
+F8ܯԜ7+>dq+36iυ+ǸB6cAҏeՌ¶ׯm jFSjyַ` i'h2G'EMk`Wө#~k?.ptبϿГO7 C7tq_%ekaq_
+RȰ}%nqPsɌi.xG aA,"T2Ag`~(if4Pk5F'y"=Y SY%=`HRqK$ą+'7iaU([=Cٌ3) !TGu51-Zۚ@<Q}=ocSHiktSc5f꤯m<i6l7dY9C?(3cY5>I濰zyǪVX3֙1дT|s*  8ib%[Eԑ3s۫JUձv?єV]6Ih!mʌ{;:E5.F9fDZ*&W<\ϥN.l{*TCܣ\ۼ,*0<3I]s6.2!8C0Z<NDd
+Vfm?ǜcjs!/l5՟DoɁi1Q*%ț(Af+\6v,h{FD6R"0^~Y\?Hpf'f >$NHb .~3|,zt! u C>y\a4IJQc'oϐV`'-=s0h-_=5Tie,WVo>LOpikr6[#2I 9j|vI_E[+ 2J\
+y,ч,)8sbP~־j>EӦ1
+B1z 'qr}d1>4Z>;%^O Ωȏ7I92 OyENDהx# p^m,;iy-Z~IÈoڗd AΕB^v+d5Z?y2NdW@4klvy[U>%x vFO¸˄ȵ{]PoqĹ\:aΖir~hǴ!#&0)|$!˵esm$B֚ u|H\?dg tlm2$ŷmd:6;e#F sCenU=kZ$(KL ǚɼP(}_y$'̵R$3$Oz=^tb](2j]%T'VNsF6e|,K)0n) 񝒌0j?$xHdu_DLabaW~tVON5պjˠNdpQΧ\hx^ƚ~@^-
+N2LACh+1|(Kvɨ15SǢF+k{+3eDrAQ{8+UWjLGƕtW)d7~vHG"Ù8V'Z?՝c L,ۇ97+6<~u%7ź79(ƥ{ͩAD,]2A}F<JBW&Wx:v'ث߹ǤYCݴΐݐDgs7(_XwwBڴNn
+8f
+(k\sIL_a.8QCmZE\`ͨ#ZKxZ*Ae'f_&*,}4; S
+ɏ؞+h
+1l m/,@p#EN+DAP=,$򻜖1|n <ʕIʉ|_uSh`)%39 f׉zᰏfYg 7yjsav="OTSWr\,!.DW8ɞ=Y扩ϲѾU&~ԭ^D#
+jx/[`'%,+fvՉ"+aVp3h
+](asVnp2jŐ{cvI\Zb.0gOVXYudc9_f#պ]0aX *cZzO>,_obv=KZ Mq}MZ&XLV5'<l PARw K4M&W4!o*ѽ]M nVo1 վ Qvaf u1J὘[yƵQ::܈OkuIK0;j#(Hthх/O5fҧ''@t|PH3|a+ċ6Dz6'q+%D2sl*J-=KNaA)qw,)*!kfV){b U]7oĬnW*|jXvvw0L޷d% ښx*۟IR/ ^4|;ŹBr>4FiUc/X
endstream
endobj
424 0 obj
@@ -1641,26 +1623,22 @@ endobj
449 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F62 230 0 R /F54 228 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-524 0 obj
-<< /Filter /FlateDecode /Length 1963 >>
+526 0 obj
+<< /Filter /FlateDecode /Length 2001 >>
stream
-xڽZn$7 +FHmٷ RRn`G蠟?^n_/}Z )$#?Г\P&ZY]k2u>F_SPa)',CvЬ=)By]k-/QpSvI+Y 6| ?h{\ۣze_,[AnVm'F>틶%ZnSL::)0Mt^D1,s8RQeTg.#]*% ~nHF1)Ag*l0Ҟ-6My1Wmӕt +!(vQKxFzҦS@M8D͓%bTt<V{3BDOn:̏JjJQUܢ߿z\ֆøTMoڈNm<jzuq\6>ĚYиdܮn
-O#QӚ')PhfAg68xDŽ s֥;Vԇxa@j`ڟ< JKՀ`.
-# .<GgBPF/Bף"yl\-A
-Z=S\BdssP$
-6Irn72a`"KjX/< F`za}T +/_9ڌGG::84pa:/U
-sin{R?w| 5(60gl /֗Ij͒WMh02~
-b VçVPWW`|_l'av
-m,<@B4x7P?7ZoAwQzTJ6ۦ\|Ce-ޮȼ_<2Vơvs͇k 2
-[寏ĐGf,S6n2V"e;XN|Ȭ0fV:D ﵍'bC,ˆ{BX昕NˣV3+yAtGXH!͘2oM/~UZsl0վzgDt8J9!ԧ(Wsβ#f/2/ڄ5s+'4dVG=Yh7'.^6tzH&36ײ&D{OؕаE*ƤS8\6*h_8N'n4,1Ő`o2hܑiG/$C=[d5ww~"1匿M/=v*xwfGG{:-+]a|<MʟU6 T *{ꡗ!Y K%=ߖz)<#: ˕_/'+ʄm2xyeB
-ȏd&tce%!kݧ +ivv[g;v]ϱ߂?Eq?=.-Ko qi2 aB+?r{T
+xڽZn+7 +*%E8N
+t]moKiFh "𐲞O!0}b=nrߵ&#wSk0<Z~YB-?dG'B(ϼkr0mTB5G~V
+?Qp01Ү pE?kSYGY?'uώâ{9}WzEqھF׬-1ud_-(rb: xGrKB0#qYj>,c}Z>yitF1)@o#l0RM6MyQӊ+VCPd)>K/jNoQ.p
+'KV9E `|y&W$geJ%HT5\=)yW %mnuH`?[@tPƢ_U~u*hC̙KMfj6p0|_9s#24)G+Sq!D0LiYGunt-{S o}[
+uitr=MŲҸ5Ww~%rߦEу9wG Օ5ޙFgYa< !5爼kT!C/]V AJs[)<#:A
+"4gWеMTEc2ClbxJ -E{`A5@~:״O [BivvL[:v̑I@Kq=/%p~;la{jt2ˀ 2llZ*ŏ{.p
endstream
endobj
-523 0 obj
-<< /Type /Page /Contents 524 0 R /Resources 522 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 526 0 R >>
+525 0 obj
+<< /Type /Page /Contents 526 0 R /Resources 524 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 528 0 R >>
endobj
-526 0 obj
-[ 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R ]
+528 0 obj
+[ 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R ]
endobj
454 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.39 681.75 142.364 692.709 ]/A << /S /GoTo /D (page.4) >> >>
@@ -1705,177 +1683,183 @@ endobj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.52 494.853 251.475 505.802 ]/A << /S /GoTo /D (page.12) >> >>
endobj
468 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 196.023 460.728 207.978 472.683 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 461.295 217.413 472.125 ]/A << /S /GoTo /D (page.18) >> >>
endobj
469 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 198.454 427.608 210.409 438.487 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 217.393 449.34 229.348 460.17 ]/A << /S /GoTo /D (page.19) >> >>
endobj
470 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.276 415.653 143.231 426.492 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 196.023 436.817 207.978 448.772 ]/A << /S /GoTo /D (page.16) >> >>
endobj
471 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.288 403.697 169.243 414.537 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 198.454 403.697 210.409 414.577 ]/A << /S /GoTo /D (page.15) >> >>
endobj
472 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.817 391.752 174.772 402.691 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.276 391.742 143.231 402.582 ]/A << /S /GoTo /D (page.16) >> >>
endobj
473 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.111 379.668 139.066 390.626 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.288 379.787 169.243 390.626 ]/A << /S /GoTo /D (page.17) >> >>
endobj
474 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 130.957 367.712 137.931 378.671 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.817 367.842 174.772 378.781 ]/A << /S /GoTo /D (page.11) >> >>
endobj
475 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.469 355.877 150.424 366.716 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.111 355.757 139.066 366.716 ]/A << /S /GoTo /D (page.13) >> >>
endobj
476 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 171.305 321.641 183.261 333.596 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 130.957 343.802 137.931 354.761 ]/A << /S /GoTo /D (page.4) >> >>
endobj
477 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.131 309.686 155.086 321.641 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.469 331.966 150.424 342.806 ]/A << /S /GoTo /D (page.17) >> >>
endobj
478 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.309 297.731 206.264 309.686 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 171.305 297.731 183.261 309.686 ]/A << /S /GoTo /D (page.20) >> >>
endobj
479 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.799 285.776 179.754 297.731 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.131 285.776 155.086 297.731 ]/A << /S /GoTo /D (page.20) >> >>
endobj
480 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 112.695 252.537 119.669 263.495 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.309 273.821 206.264 285.776 ]/A << /S /GoTo /D (page.20) >> >>
endobj
481 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.315 240.581 162.289 251.54 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.799 261.865 179.754 273.821 ]/A << /S /GoTo /D (page.20) >> >>
endobj
482 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 150.882 228.626 157.856 239.585 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 112.695 228.626 119.669 239.585 ]/A << /S /GoTo /D (page.4) >> >>
endobj
483 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.3 195.078 179.256 205.908 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.315 216.671 162.289 227.63 ]/A << /S /GoTo /D (page.4) >> >>
endobj
484 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.343 160.833 152.317 172.788 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 150.882 204.716 157.856 215.675 ]/A << /S /GoTo /D (page.4) >> >>
endobj
485 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 149.316 139.345 160.384 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.3 171.168 179.256 181.997 ]/A << /S /GoTo /D (page.11) >> >>
endobj
486 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 140.172 137.49 147.146 148.32 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.343 136.922 152.317 148.877 ]/A << /S /GoTo /D (page.2) >> >>
endobj
487 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.77 124.967 171.744 136.922 ]/A << /S /GoTo /D (page.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 125.406 139.345 136.474 ]/A << /S /GoTo /D (page.5) >> >>
endobj
488 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.299 91.29 174.254 103.245 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 140.172 113.58 147.146 124.409 ]/A << /S /GoTo /D (page.4) >> >>
endobj
489 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.44 79.334 147.395 91.29 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.77 101.057 171.744 113.012 ]/A << /S /GoTo /D (page.9) >> >>
endobj
490 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.686 67.379 185.642 79.334 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.299 67.379 174.254 79.334 ]/A << /S /GoTo /D (page.12) >> >>
endobj
491 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 377.209 693.835 389.165 704.664 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 358.689 693.267 370.644 705.222 ]/A << /S /GoTo /D (page.12) >> >>
endobj
492 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.994 681.312 453.95 693.267 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.935 681.312 408.891 693.267 ]/A << /S /GoTo /D (page.13) >> >>
endobj
493 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.318 648.007 419.292 658.836 ]/A << /S /GoTo /D (page.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 377.209 669.925 389.165 680.754 ]/A << /S /GoTo /D (page.15) >> >>
endobj
494 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 635.693 403.6 646.881 ]/A << /S /GoTo /D (page.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.994 657.402 453.95 669.357 ]/A << /S /GoTo /D (page.32) >> >>
endobj
495 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.695 635.693 419.65 646.881 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.318 624.097 419.292 634.926 ]/A << /S /GoTo /D (page.8) >> >>
endobj
496 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.066 623.967 414.241 634.926 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 611.783 403.6 622.971 ]/A << /S /GoTo /D (page.9) >> >>
endobj
497 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.317 612.012 459.491 623.011 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.695 611.783 419.65 622.971 ]/A << /S /GoTo /D (page.33) >> >>
endobj
498 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 327.645 578.258 334.619 589.098 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.066 600.057 414.241 611.016 ]/A << /S /GoTo /D (page.22) >> >>
endobj
499 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 353.13 566.303 360.104 577.143 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.317 588.102 459.491 599.1 ]/A << /S /GoTo /D (page.21) >> >>
endobj
500 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 344.323 554.358 351.297 565.187 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 327.645 554.348 334.619 565.187 ]/A << /S /GoTo /D (page.4) >> >>
endobj
501 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 542.114 346.066 553.232 ]/A << /S /GoTo /D (page.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 353.13 542.393 360.104 553.232 ]/A << /S /GoTo /D (page.4) >> >>
endobj
502 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 473.379 529.88 485.334 541.835 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 344.323 530.448 351.297 541.277 ]/A << /S /GoTo /D (page.2) >> >>
endobj
503 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.166 518.204 398.121 529.322 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 518.204 346.066 529.322 ]/A << /S /GoTo /D (page.3) >> >>
endobj
504 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 506.248 382.679 517.367 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 473.379 505.97 485.334 517.925 ]/A << /S /GoTo /D (page.20) >> >>
endobj
505 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.244 494.234 372.218 505.412 ]/A << /S /GoTo /D (page.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.166 494.293 398.121 505.412 ]/A << /S /GoTo /D (page.12) >> >>
endobj
506 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.957 482.498 424.93 493.456 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 482.338 382.679 493.456 ]/A << /S /GoTo /D (page.4) >> >>
endobj
507 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.917 470.104 405.872 482.059 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.244 470.323 372.218 481.501 ]/A << /S /GoTo /D (page.7) >> >>
endobj
508 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 496.502 458.149 508.457 470.104 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.957 458.587 424.93 469.546 ]/A << /S /GoTo /D (page.5) >> >>
endobj
509 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 424.844 419.043 435.673 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.917 446.194 405.872 458.149 ]/A << /S /GoTo /D (page.24) >> >>
endobj
510 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 412.54 387.909 423.718 ]/A << /S /GoTo /D (page.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 496.502 434.239 508.457 446.194 ]/A << /S /GoTo /D (page.25) >> >>
endobj
511 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 359.605 400.923 366.579 411.763 ]/A << /S /GoTo /D (page.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 400.933 419.043 411.763 ]/A << /S /GoTo /D (page.14) >> >>
endobj
512 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.471 388.849 410.445 399.808 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 388.63 387.909 399.808 ]/A << /S /GoTo /D (page.7) >> >>
endobj
513 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.608 376.904 405.563 387.852 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 359.605 377.013 366.579 387.852 ]/A << /S /GoTo /D (page.6) >> >>
endobj
514 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.828 365.058 386.783 375.897 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.471 364.938 410.445 375.897 ]/A << /S /GoTo /D (page.5) >> >>
endobj
515 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 348.178 353.103 360.133 363.942 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.608 352.993 405.563 363.942 ]/A << /S /GoTo /D (page.11) >> >>
endobj
516 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.742 340.59 420.716 352.545 ]/A << /S /GoTo /D (page.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.828 341.148 386.783 351.987 ]/A << /S /GoTo /D (page.11) >> >>
endobj
517 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 340.965 307.285 352.92 318.114 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 348.178 329.192 360.133 340.032 ]/A << /S /GoTo /D (page.11) >> >>
endobj
518 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.487 295.329 368.442 306.159 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.742 316.679 420.716 328.635 ]/A << /S /GoTo /D (page.6) >> >>
endobj
519 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.826 260.889 403.8 272.844 ]/A << /S /GoTo /D (page.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 340.965 283.374 352.92 294.204 ]/A << /S /GoTo /D (page.20) >> >>
endobj
520 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 332.627 227.583 339.6 238.413 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.487 271.419 368.442 282.248 ]/A << /S /GoTo /D (page.20) >> >>
endobj
521 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 329.877 215.628 336.851 226.288 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.826 236.978 403.8 248.933 ]/A << /S /GoTo /D (page.8) >> >>
endobj
-525 0 obj
-<< /D [ 523 0 R /XYZ 78.37 808.885 null ] >>
+522 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 332.627 203.673 339.6 214.503 ]/A << /S /GoTo /D (page.5) >> >>
+endobj
+523 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 329.877 191.718 336.851 202.378 ]/A << /S /GoTo /D (page.4) >> >>
+endobj
+527 0 obj
+<< /D [ 525 0 R /XYZ 78.37 808.885 null ] >>
endobj
209 0 obj
-<< /D [ 523 0 R /XYZ 79.37 706.717 null ] >>
+<< /D [ 525 0 R /XYZ 79.37 706.717 null ] >>
endobj
-522 0 obj
+524 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F16 251 0 R /F15 227 0 R /F54 228 0 R /F68 259 0 R /F62 230 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-566 0 obj
+568 0 obj
<< /Filter /FlateDecode /Length 2344 >>
stream
x\n6߯%
@@ -1898,127 +1882,127 @@ yg6KU.UYRTbKM1GBQ^@JN
0cOAjdÝbpft*%*QAf=^۳/WQH
endstream
endobj
-565 0 obj
-<< /Type /Page /Contents 566 0 R /Resources 564 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 568 0 R >>
+567 0 obj
+<< /Type /Page /Contents 568 0 R /Resources 566 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 570 0 R >>
endobj
-568 0 obj
-[ 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R ]
+570 0 obj
+[ 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R ]
endobj
-527 0 obj
+529 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 548.017 158.683 557.083 ]/A << /S /GoTo /D (section.1) >> >>
endobj
-528 0 obj
+530 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 526.099 152.217 535.065 ]/A << /S /GoTo /D (section.2) >> >>
endobj
-529 0 obj
+531 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 504.131 220.7 513.148 ]/A << /S /GoTo /D (section.3) >> >>
endobj
-530 0 obj
+532 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 490.234 194.339 501.302 ]/A << /S /GoTo /D (subsection.3.1) >> >>
endobj
-531 0 obj
+533 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 478.278 233.98 489.347 ]/A << /S /GoTo /D (subsection.3.2) >> >>
endobj
-532 0 obj
+534 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 466.443 405.437 477.322 ]/A << /S /GoTo /D (subsection.3.3) >> >>
endobj
-533 0 obj
+535 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 453.93 270.892 465.885 ]/A << /S /GoTo /D (subsection.3.4) >> >>
endobj
-534 0 obj
+536 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 434.443 177.522 443.409 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-535 0 obj
+537 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 420.057 292.441 432.012 ]/A << /S /GoTo /D (subsection.4.1) >> >>
endobj
-536 0 obj
+538 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 408.55 160.018 419.499 ]/A << /S /GoTo /D (subsection.4.2) >> >>
endobj
-537 0 obj
+539 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 396.595 216.297 407.544 ]/A << /S /GoTo /D (subsubsection.4.2.1) >> >>
endobj
-538 0 obj
+540 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 384.63 256.157 395.698 ]/A << /S /GoTo /D (subsubsection.4.2.2) >> >>
endobj
-539 0 obj
+541 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 372.684 245.437 383.633 ]/A << /S /GoTo /D (subsubsection.4.2.3) >> >>
endobj
-540 0 obj
+542 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 362.552 290.319 371.788 ]/A << /S /GoTo /D (subsection.4.3) >> >>
endobj
-541 0 obj
+543 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 338.851 391.211 349.86 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-542 0 obj
+544 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 318.826 217.522 327.942 ]/A << /S /GoTo /D (section.6) >> >>
endobj
-543 0 obj
+545 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 304.928 256.267 315.997 ]/A << /S /GoTo /D (subsection.6.1) >> >>
endobj
-544 0 obj
+546 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 292.973 231.599 304.042 ]/A << /S /GoTo /D (subsubsection.6.1.1) >> >>
endobj
-545 0 obj
+547 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 281.018 232.157 292.087 ]/A << /S /GoTo /D (subsubsection.6.1.2) >> >>
endobj
-546 0 obj
+548 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 269.182 265.064 280.131 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-547 0 obj
+549 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 257.108 300.371 268.286 ]/A << /S /GoTo /D (subsubsection.6.2.1) >> >>
endobj
-548 0 obj
+550 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 245.272 274.01 256.331 ]/A << /S /GoTo /D (subsubsection.6.2.2) >> >>
endobj
-549 0 obj
+551 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 235.031 264.755 244.266 ]/A << /S /GoTo /D (subsection.6.3) >> >>
endobj
-550 0 obj
+552 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 221.362 250.11 232.241 ]/A << /S /GoTo /D (subsection.6.4) >> >>
endobj
-551 0 obj
+553 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 211.12 276.738 220.136 ]/A << /S /GoTo /D (subsubsection.6.4.1) >> >>
endobj
-552 0 obj
+554 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 199.165 265.45 208.331 ]/A << /S /GoTo /D (subsubsection.6.4.2) >> >>
endobj
-553 0 obj
+555 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 187.21 281.779 196.375 ]/A << /S /GoTo /D (subsubsection.6.4.3) >> >>
endobj
-554 0 obj
+556 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 173.541 258.855 184.42 ]/A << /S /GoTo /D (subsubsection.6.4.4) >> >>
endobj
-555 0 obj
+557 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 161.586 284.868 172.465 ]/A << /S /GoTo /D (subsubsection.6.4.5) >> >>
endobj
-556 0 obj
+558 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 149.631 282.1 160.58 ]/A << /S /GoTo /D (subsection.6.5) >> >>
endobj
-557 0 obj
+559 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 137.118 361.512 149.073 ]/A << /S /GoTo /D (subsubsection.6.5.1) >> >>
endobj
-558 0 obj
+560 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 125.163 443.664 137.118 ]/A << /S /GoTo /D (subsubsection.6.5.2) >> >>
endobj
-559 0 obj
+561 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 113.207 456.307 125.163 ]/A << /S /GoTo /D (subsubsection.6.5.3) >> >>
endobj
-560 0 obj
+562 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 101.691 362.538 112.649 ]/A << /S /GoTo /D (subsection.6.6) >> >>
endobj
-561 0 obj
+563 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 91.568 169.492 100.694 ]/A << /S /GoTo /D (subsection.6.7) >> >>
endobj
-562 0 obj
+564 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 67.937 229.457 78.876 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-567 0 obj
-<< /D [ 565 0 R /XYZ 78.37 808.885 null ] >>
+569 0 obj
+<< /D [ 567 0 R /XYZ 78.37 808.885 null ] >>
endobj
-564 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F62 230 0 R /F54 228 0 R /F70 285 0 R /F71 292 0 R /F16 251 0 R >> /ProcSet [ /PDF /Text ] >>
+566 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 226 0 R /F15 227 0 R /F62 230 0 R /F54 228 0 R /F70 283 0 R /F71 292 0 R /F16 251 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-586 0 obj
+588 0 obj
<< /Filter /FlateDecode /Length 871 >>
stream
xXɎ0 +QEJ$`` N&zέ=Xfv:|0hG χvt9`PvB ') ?V;J')Mx.GEЏ o/P
@@ -2026,64 +2010,64 @@ xXɎ0 +QEJ$`` N&zέ=Xfv:|0hG χvt9`
u#g:ƀpz>հ]LTa>(Рv>
endstream
endobj
-585 0 obj
-<< /Type /Page /Contents 586 0 R /Resources 584 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 588 0 R >>
+587 0 obj
+<< /Type /Page /Contents 588 0 R /Resources 586 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 440 0 R /Annots 590 0 R >>
endobj
-588 0 obj
-[ 563 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R ]
+590 0 obj
+[ 565 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R ]
endobj
-563 0 obj
+565 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 758.132 143.002 768.971 ]/A << /S /GoTo /D (section.8) >> >>
endobj
-569 0 obj
+571 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 746.057 223.799 757.056 ]/A << /S /GoTo /D (subsection.8.1) >> >>
endobj
-570 0 obj
+572 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 734.102 277.208 745.061 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-571 0 obj
+573 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 722.147 214.513 733.106 ]/A << /S /GoTo /D (subsection.8.3) >> >>
endobj
-572 0 obj
+574 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 710.192 261.178 721.19 ]/A << /S /GoTo /D (subsection.8.4) >> >>
endobj
-573 0 obj
+575 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 688.334 219.843 699.233 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-574 0 obj
+576 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 676.329 259.525 687.278 ]/A << /S /GoTo /D (subsection.9.1) >> >>
endobj
-575 0 obj
+577 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 663.925 364.391 675.88 ]/A << /S /GoTo /D (subsection.9.2) >> >>
endobj
-576 0 obj
+578 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 642.496 355.794 653.504 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-577 0 obj
+579 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 630.491 200.147 641.449 ]/A << /S /GoTo /D (subsection.10.1) >> >>
endobj
-578 0 obj
+580 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 618.535 199.161 629.604 ]/A << /S /GoTo /D (subsection.10.2) >> >>
endobj
-579 0 obj
+581 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 606.142 220.74 618.097 ]/A << /S /GoTo /D (subsection.10.3) >> >>
endobj
-580 0 obj
+582 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 594.625 187.684 605.694 ]/A << /S /GoTo /D (subsection.10.4) >> >>
endobj
-581 0 obj
+583 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 582.67 219.981 593.629 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-582 0 obj
+584 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 570.276 375.36 582.232 ]/A << /S /GoTo /D (subsection.10.6) >> >>
endobj
-583 0 obj
+585 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 550.74 108.74 559.756 ]/A << /S /GoTo /D (section*.1) >> >>
endobj
-587 0 obj
-<< /D [ 585 0 R /XYZ 78.37 808.885 null ] >>
+589 0 obj
+<< /D [ 587 0 R /XYZ 78.37 808.885 null ] >>
endobj
-584 0 obj
+586 0 obj
<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 251 0 R /F15 227 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1 0 obj
@@ -2095,16 +2079,16 @@ endobj
3 0 obj
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
-589 0 obj
+591 0 obj
[ 3 [ 602.1 ] 5 [ 602.1 ] 11 [ 602.1 602.1 ] 38 [ 602.1 ] 68 [ 602.1 602.1 602.1 ] 72 [ 602.1 602.1 ] 75 [ 602.1 602.1 ] 79 [ 602.1 602.1 602.1 602.1 602.1 ] 85 [ 602.1 602.1 602.1 602.1 602.1 ] 91 [ 602.1 ] ]
endobj
-591 0 obj
+593 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xڛ"w
endstream
endobj
-592 0 obj
+594 0 obj
<< /Filter /FlateDecode /Length 11571 >>
stream
x| |UﭺU%tv& &Av"J  IL,cC@D ""(.({TԙqGapF'>PVu6P~Ҟ>n{sJxr%*oܱ?3oԵF{1B׭+8EH4̽Pr~cC;zEBү%$ƀϯvTM(OjĄeuG6Wƿ.ŵ7| T%2Za-mO2/VZ}-Zq}W}[{mJtZBbtMD&D/A& ^U1`T1D+ɪDPeRQ_'QQC*l3,#/h? ىDF1+yJ,|^2y Fˑ+ׄC'·?E bqG|EW35NgEG;e
@@ -2140,10 +2124,10 @@ R kBX_"PSU;~@1~1nc̍1c|$a=b[0\Hx $Nchbo
iLOׯ+WkuWJ^)_^[ ]IVU[شVW
endstream
endobj
-590 0 obj
-<< /Type /FontDescriptor /FontName /GMFTGJ+DejaVuSansMono-Oblique /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 592 0 R /CIDSet 591 0 R >>
+592 0 obj
+<< /Type /FontDescriptor /FontName /GMFTGJ+DejaVuSansMono-Oblique /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 594 0 R /CIDSet 593 0 R >>
endobj
-593 0 obj
+595 0 obj
<< /Filter /FlateDecode /Length 477 >>
stream
xڍOo0=8!h"TD
@@ -2155,21 +2139,21 @@ xڍOo0=8!h"TD
endstream
endobj
408 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /DescendantFonts [ 594 0 R ] /ToUnicode 593 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /DescendantFonts [ 596 0 R ] /ToUnicode 595 0 R >>
endobj
-594 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /FontDescriptor 590 0 R /W 589 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+596 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /FontDescriptor 592 0 R /W 591 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-595 0 obj
+597 0 obj
[ 3 [ 602.1 ] 6 [ 602.1 ] 11 [ 602.1 602.1 602.1 602.1 602.1 602.1 ] 18 [ 602.1 602.1 602.1 602.1 ] 29 [ 602.1 ] 31 [ 602.1 602.1 602.1 ] 68 [ 602.1 ] 70 [ 602.1 ] 72 [ 602.1 602.1 602.1 602.1 602.1 ] 78 [ 602.1 602.1 602.1 602.1 ] 83 [ 602.1 ] 85 [ 602.1 602.1 602.1 602.1 ] 91 [ 602.1 ] 171 [ 602.1 ] ]
endobj
-597 0 obj
+599 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xڛ$
endstream
endobj
-598 0 obj
+600 0 obj
<< /Filter /FlateDecode /Length 12999 >>
stream
x| \TU9{ f.32Y"[ B
@@ -2231,10 +2215,10 @@ ffR'(y)9yĴ"%PəZis&*X_L)|4*'Hc650k.32
nϔn/blv-ˤ[Uv2nVR+IeUHeuaR}o$.k#YmXUV`U\Ϫ*JUEr [ULeUVZJUVBlRT6OesU6Z4fopq]€QlʦlZ>ҴTV"e@eQ,OeSPir)Xi()IJIٱ$MD? Yv,XV]ʊdYBzÏ2,Q HJ,UzZnet9LRZKk~j]SٕX+JQ*94JS)la*KT]We)}Y2zɱ,[Jφz{ICFAkK^̫^28A98 JT6Pe%FޙRB6*sEDH.+CeLʜS;;TmWa}UGe* wPw&ICY¼^Q,#UfLf6;鶋I,B5,YØU]8lnf݋bi%ZTf&fz3T&2)1(ǾgB
endstream
endobj
-596 0 obj
-<< /Type /FontDescriptor /FontName /TNBLMB+DejaVuSansMono /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 598 0 R /CIDSet 597 0 R >>
+598 0 obj
+<< /Type /FontDescriptor /FontName /TNBLMB+DejaVuSansMono /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 600 0 R /CIDSet 599 0 R >>
endobj
-599 0 obj
+601 0 obj
<< /Filter /FlateDecode /Length 512 >>
stream
x}[k0+|oJ0
@@ -2243,21 +2227,21 @@ x}[k0+|oJ0
endstream
endobj
407 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TNBLMB+DejaVuSansMono /DescendantFonts [ 600 0 R ] /ToUnicode 599 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TNBLMB+DejaVuSansMono /DescendantFonts [ 602 0 R ] /ToUnicode 601 0 R >>
endobj
-600 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /TNBLMB+DejaVuSansMono /FontDescriptor 596 0 R /W 595 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+602 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /TNBLMB+DejaVuSansMono /FontDescriptor 598 0 R /W 597 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-601 0 obj
+603 0 obj
[ 68 [ 602.1 ] 70 [ 602.1 602.1 602.1 602.1 ] 76 [ 602.1 ] 79 [ 602.1 602.1 602.1 602.1 602.1 ] 85 [ 602.1 602.1 602.1 602.1 ] ]
endobj
-603 0 obj
+605 0 obj
<< /Filter /FlateDecode /Length 15 >>
stream
xk`
endstream
endobj
-604 0 obj
+606 0 obj
<< /Filter /FlateDecode /Length 10706 >>
stream
x{ xTչ{=3I& .3gd ( $@$7pS&I2d̄-
@@ -2313,10 +2297,10 @@ L/"hB_l
_Q UzEێ4Cێ*mk]#m[`ܺK6xX㹴kZM6ARҨ_*mPo3]K3Tzi&6F^MWeӕdR+rY4Zgg˵{5iٴ&V/W~Ze*<Ch-ϠK%gʹ4C.LK3Zb VEo_ysй[c-z~4yz;/Ξ#^Fg̔gЙhF\3zF^S-O/9
endstream
endobj
-602 0 obj
-<< /Type /FontDescriptor /FontName /WYCBGG+DejaVuSansMono-Bold /Flags 4 /FontBBox [ 0 -207 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -207 /ItalicAngle 0 /StemV 150 /XHeight 547 /FontFile2 604 0 R /CIDSet 603 0 R >>
+604 0 obj
+<< /Type /FontDescriptor /FontName /WYCBGG+DejaVuSansMono-Bold /Flags 4 /FontBBox [ 0 -207 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -207 /ItalicAngle 0 /StemV 150 /XHeight 547 /FontFile2 606 0 R /CIDSet 605 0 R >>
endobj
-605 0 obj
+607 0 obj
<< /Filter /FlateDecode /Length 434 >>
stream
xڅMo@+K΁4T8+mxwnevD ü33;/UM=Fk/ؙ
@@ -2325,21 +2309,21 @@ wXq==mRl
endstream
endobj
406 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WYCBGG+DejaVuSansMono-Bold /DescendantFonts [ 606 0 R ] /ToUnicode 605 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WYCBGG+DejaVuSansMono-Bold /DescendantFonts [ 608 0 R ] /ToUnicode 607 0 R >>
endobj
-606 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /WYCBGG+DejaVuSansMono-Bold /FontDescriptor 602 0 R /W 601 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+608 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /WYCBGG+DejaVuSansMono-Bold /FontDescriptor 604 0 R /W 603 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-607 0 obj
+609 0 obj
[ 28 [ 603 ] 35 [ 544 ] ]
endobj
-609 0 obj
+611 0 obj
<< /Filter /FlateDecode /Length 13 >>
stream
xc``
endstream
endobj
-610 0 obj
+612 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 748 >>
stream
xmRmHq^򚽰͌޶QQ1tQQ~vݭJIQ,S|XbȾEDз>xB݊D0l!GMM݁:m:$csZPY+R
@@ -2349,10 +2333,10 @@ xmRmHq^򚽰͌޶QQ1tQQ~vݭJIQ,S|XbȾEDз>
BEt|.:CࠜHQѠ19 '41rR դP p驑ahz*2Aܺ>01J]{xuEݎ̴jphx<tԫ{ty{w<eR&/<Y QeuynJ1ƓetlTA-;aiM|Sj%7ͯ4veR & j#ǃ<n>.QٛϞS# G)SK_!l͡ȰRq dd</c^&i|2O'RD/K~}.
endstream
endobj
-608 0 obj
-<< /Type /FontDescriptor /FontName /WIKKRQ+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 610 0 R /CIDSet 609 0 R >>
+610 0 obj
+<< /Type /FontDescriptor /FontName /WIKKRQ+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 612 0 R /CIDSet 611 0 R >>
endobj
-611 0 obj
+613 0 obj
<< /Filter /FlateDecode /Length 365 >>
stream
x}R]k0}ϯ{(haRͮ ]?f˶W\@M$Ƈ%0 sܣ.xdL!Fa s
@@ -2361,36 +2345,36 @@ x}R]k0}ϯ{(haRͮ ]?f˶W\@M$Ƈ%0 sܣ.xdL!Fa s
endstream
endobj
398 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WIKKRQ+LMRoman7-Italic /DescendantFonts [ 612 0 R ] /ToUnicode 611 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WIKKRQ+LMRoman7-Italic /DescendantFonts [ 614 0 R ] /ToUnicode 613 0 R >>
endobj
-612 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WIKKRQ+LMRoman7-Italic /FontDescriptor 608 0 R /W 607 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+614 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WIKKRQ+LMRoman7-Italic /FontDescriptor 610 0 R /W 609 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-613 0 obj
+615 0 obj
[607.3 ]
endobj
-614 0 obj
+616 0 obj
[758.1 ]
endobj
-615 0 obj
+617 0 obj
[892.9 ]
endobj
-616 0 obj
+618 0 obj
[446.4 446.4 0 877 0 0 0 0 0 569.4 569.4 ]
endobj
-617 0 obj
+619 0 obj
[777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ]
endobj
-618 0 obj
+620 0 obj
[ 43 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 63 [ 525 ] 66 [ 525 ] 72 [ 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 ] 96 [ 525 ] 98 [ 525 ] 105 [ 525 ] 109 [ 525 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-620 0 obj
+622 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`
endstream
endobj
-621 0 obj
+623 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2073 >>
stream
xڍV TẄQ2UfUʪgE]+ѵV I$d G#s0E[z\ֳǰQQizZY︷gy{}w{qL&pZ 9֯gMl1d}9.fVW`0K)/HN!LDŽ$#wd Te#yj$=?
@@ -2411,10 +2395,10 @@ _`4Ҁp A]||pdnZDr|xcnWs!EATuA{}d
R`#w_#sµ9YXbЪ!܁#j9&V_Agʺ5o%)lH ϓlyMAX
endstream
endobj
-619 0 obj
-<< /Type /FontDescriptor /FontName /HKOFRT+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 621 0 R /CIDSet 620 0 R >>
+621 0 obj
+<< /Type /FontDescriptor /FontName /HKOFRT+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 623 0 R /CIDSet 622 0 R >>
endobj
-622 0 obj
+624 0 obj
<< /Filter /FlateDecode /Length 449 >>
stream
xڍAk0C =nK0I͚me4Iddn,a<oF{>qupqKz5hz[wlQlhA7
@@ -2422,15 +2406,15 @@ xڍAk0C =nK0I͚me4Iddn,a<oF{>qupqKz5hz[
endstream
endobj
300 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HKOFRT+LMMonoSlant10-Regular /DescendantFonts [ 623 0 R ] /ToUnicode 622 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HKOFRT+LMMonoSlant10-Regular /DescendantFonts [ 625 0 R ] /ToUnicode 624 0 R >>
endobj
-623 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HKOFRT+LMMonoSlant10-Regular /FontDescriptor 619 0 R /W 618 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+625 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HKOFRT+LMMonoSlant10-Regular /FontDescriptor 621 0 R /W 620 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-624 0 obj
+626 0 obj
[ 27 [ 525 525 ] 32 [ 525 ] 34 [ 525 525 525 ] 38 [ 525 525 525 525 525 525 525 525 525 525 ] 49 [ 525 525 ] 52 [ 525 525 525 525 525 525 ] 59 [ 525 ] 61 [ 525 ] 63 [ 525 525 ] 66 [ 525 525 525 ] 70 [ 525 525 525 525 525 525 525 525 ] 79 [ 525 525 525 525 525 525 525 525 525 525 525 ] 91 [ 525 ] 93 [ 525 525 ] 96 [ 525 525 525 525 ] 101 [ 525 525 525 525 525 525 525 525 525 525 525 525 ] 114 [ 525 525 525 ] 118 [ 525 ] 120 [ 525 525 ] 246 [ 525 ] 272 [ 525 ] 338 [ 525 ] ]
endobj
-626 0 obj
+628 0 obj
<< /Filter /FlateDecode /Length 34 >>
stream
xc``?}
@@ -2438,7 +2422,7 @@ xc``?}
endstream
endobj
-627 0 obj
+629 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6614 >>
stream
xڽztyF1Cѐ3
@@ -2476,10 +2460,10 @@ yDi::Ǥ4]RR B6
4sldh4<'ZSfv̘NCVG
endstream
endobj
-625 0 obj
-<< /Type /FontDescriptor /FontName /XMTOPM+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 627 0 R /CIDSet 626 0 R >>
+627 0 obj
+<< /Type /FontDescriptor /FontName /XMTOPM+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 629 0 R /CIDSet 628 0 R >>
endobj
-628 0 obj
+630 0 obj
<< /Filter /FlateDecode /Length 698 >>
stream
x}Ko0Ev/Z!$ABJUШ[H  ( >V1SU?|{α{}Ozob՗0lky]\oƔv콭l9_ڪrK[.U/ceK|5j~_?W/9^N6Nm՟\[dY8i,}N}rV.D6>TlI'{Q*z8͵yiu4\u}{ -M[#{/ѕl.Ms2^KNvΆ eVlaYr4]+LG\ɘk[`
@@ -2488,21 +2472,21 @@ x}Ko0Ev/Z!$ABJUШ[H  ( >V1SU?|{α{}Ozob՗0l
endstream
endobj
292 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XMTOPM+LMMono9-Regular /DescendantFonts [ 629 0 R ] /ToUnicode 628 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XMTOPM+LMMono9-Regular /DescendantFonts [ 631 0 R ] /ToUnicode 630 0 R >>
endobj
-629 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XMTOPM+LMMono9-Regular /FontDescriptor 625 0 R /W 624 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+631 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XMTOPM+LMMono9-Regular /FontDescriptor 627 0 R /W 626 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-630 0 obj
+632 0 obj
[ 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 72 [ 513 ] 77 [ 613 ] 81 [ 636 ] 84 [ 558 ] 96 [ 602 ] 98 [ 458 ] 112 [ 613 ] 116 [ 613 ] ]
endobj
-632 0 obj
+634 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc````Td`h`X
endstream
endobj
-633 0 obj
+635 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1806 >>
stream
x}U}P$g;]eb/D b4aR|qw;dOLViꘙiftZH%/h;I3ywٝw~Ǽ((W3שuyj;ٙ84VF)D Ox*D%"yq*c#v)'KG6nɾHcIEҐ'gPM&蜬fDdg1b7S;cFcm iYԾ,X(PuT]VRJ~j0Ҍb ,H5ZJ2Vi ՠ e=JJ|DuF̤(#MS&{**KT*Ju2"qK3
@@ -2517,33 +2501,33 @@ $`<H2MA9,1w1@l3 '@:)[wq!F _7 ^
d\vuy>c-
endstream
endobj
-631 0 obj
-<< /Type /FontDescriptor /FontName /OWSLYP+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 633 0 R /CIDSet 632 0 R >>
+633 0 obj
+<< /Type /FontDescriptor /FontName /OWSLYP+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 635 0 R /CIDSet 634 0 R >>
endobj
-634 0 obj
+636 0 obj
<< /Filter /FlateDecode /Length 422 >>
stream
xڍj@@&5 mbeifNҁ8#.PJysպa0Fua5u#=b0E.E{mĹdǎ[!$ދuQU)n"lKPѤC F$
nPJ͇'3UمCC8~r=H=Yeũi^BY4>I_hJ8M}kY!֍hOmIܞjqGgcS u)H|ig`x5!Uj[(B$t)4s4yZxzrtyZz:J|d(cCݥ~7]ڸ~s&$OBjnwmi$I
endstream
endobj
-285 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OWSLYP+LMRomanCaps10-Regular /DescendantFonts [ 635 0 R ] /ToUnicode 634 0 R >>
+283 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OWSLYP+LMRomanCaps10-Regular /DescendantFonts [ 637 0 R ] /ToUnicode 636 0 R >>
endobj
-635 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OWSLYP+LMRomanCaps10-Regular /FontDescriptor 631 0 R /W 630 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+637 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OWSLYP+LMRomanCaps10-Regular /FontDescriptor 633 0 R /W 632 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-636 0 obj
+638 0 obj
[ 28 [ 500 ] 43 [ 444 ] 50 [ 444 ] 52 [ 778 ] 72 [ 278 ] 96 [ 392 ] 109 [ 556 ] 112 [ 528 ] 251 [ 444 ] ]
endobj
-638 0 obj
+640 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc`````h

endstream
endobj
-639 0 obj
+641 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1371 >>
stream
xڵTmLSg-ZvһEޫC"J ȢAP"G+Rʕۖ
@@ -2555,10 +2539,10 @@ xڵTmLSg-ZvһEޫC"J ȢAP"G+Rʕۖ
1)D(.cF(]GH9){mł0~k:\TWTӰgz
endstream
endobj
-637 0 obj
-<< /Type /FontDescriptor /FontName /UHLNIO+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 639 0 R /CIDSet 638 0 R >>
+639 0 obj
+<< /Type /FontDescriptor /FontName /UHLNIO+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 641 0 R /CIDSet 640 0 R >>
endobj
-640 0 obj
+642 0 obj
<< /Filter /FlateDecode /Length 412 >>
stream
xڍ]K0+yQv:?tu]r6mRb|
@@ -2567,21 +2551,21 @@ xڍ]K0+yQv:?tu]r6mRb|
endstream
endobj
269 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /UHLNIO+LMRomanSlant10-Regular /DescendantFonts [ 641 0 R ] /ToUnicode 640 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /UHLNIO+LMRomanSlant10-Regular /DescendantFonts [ 643 0 R ] /ToUnicode 642 0 R >>
endobj
-641 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /UHLNIO+LMRomanSlant10-Regular /FontDescriptor 637 0 R /W 636 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+643 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /UHLNIO+LMRomanSlant10-Regular /FontDescriptor 639 0 R /W 638 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-642 0 obj
+644 0 obj
[ 27 [ 743 511 ] 35 [ 460 ] 43 [ 460 ] 46 [ 755 511 ] 49 [ 678 460 ] 55 [ 307 ] 59 [ 460 ] 63 [ 511 358 ] 66 [ 307 ] 68 [ 307 ] 72 [ 256 ] 74 [ 897 818 ] 77 [ 562 ] 81 [ 511 511 678 511 ] 91 [ 460 ] 95 [ 729 422 562 409 ] 105 [ 332 ] 107 [ 511 ] 109 [ 537 ] 111 [ 743 460 ] 116 [ 464 ] 118 [ 486 ] 125 [ 562 ] 168 [ 511 ] 251 [ 460 ] 257 [ 460 ] 277 [ 460 ] 502 [ 307 ] ]
endobj
-644 0 obj
+646 0 obj
<< /Filter /FlateDecode /Length 38 >>
stream
xc``N\BAh 40 n
endstream
endobj
-645 0 obj
+647 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4771 >>
stream
xY XSg>OD؂izN\VV.T*U]d $$ bkTbg.3tipg i:s<<$$'[ <aX6LXk3olٞ*xnM{j.#'j6"&QdŝLn
@@ -2603,10 +2587,10 @@ qa~I3Y{aQƷ|ΨiT
c|qr08e۫83e[[֥ TJL9gRht _Z"M"YZB~>1vURD7pQ˴j5hɹ!ԙ!GNÆy5U<@c"Cb`*SDKys7]& :lx %&ݷw˯x@-gbI–}P{{#v@W7cjf
endstream
endobj
-643 0 obj
-<< /Type /FontDescriptor /FontName /IXSCYM+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 645 0 R /CIDSet 644 0 R >>
+645 0 obj
+<< /Type /FontDescriptor /FontName /IXSCYM+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 647 0 R /CIDSet 646 0 R >>
endobj
-646 0 obj
+648 0 obj
<< /Filter /FlateDecode /Length 541 >>
stream
x}]0+s1im;Rpj T˚D` &9сa]Aurxɏ^#%9K?{:o2YH5I)Fgѷ|+G2uA'B^"J1st'?s~nڦRXjSSǓ"Qr'Jl_V=H)r%1'SIfW݇ZI%{#c5_hL2)աK20B::g{4zҔyЭGoU#_h=^UtVȡ+uR@S,'UP'\o!M#Q:gR
@@ -2615,21 +2599,21 @@ BP
endstream
endobj
259 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IXSCYM+LMRoman10-Italic /DescendantFonts [ 647 0 R ] /ToUnicode 646 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IXSCYM+LMRoman10-Italic /DescendantFonts [ 649 0 R ] /ToUnicode 648 0 R >>
endobj
-647 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IXSCYM+LMRoman10-Italic /FontDescriptor 643 0 R /W 642 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+649 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IXSCYM+LMRoman10-Italic /FontDescriptor 645 0 R /W 644 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-648 0 obj
+650 0 obj
[ 27 [ 869 559 ] 34 [ 818 639 575 ] 38 [ 575 575 ] 42 [ 831 511 ] 45 [ 319 882 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 904 575 ] 63 [ 639 383 436 319 ] 71 [ 692 319 ] 74 [ 1092 958 900 639 575 ] 81 [ 575 575 786 639 ] 88 [ 319 ] 91 [ 607 ] 95 [ 863 474 639 454 ] 100 [ 575 575 ] 104 [ 800 447 575 575 885 639 ] 112 [ 607 1189 831 869 607 ] 118 [ 607 ] 121 [ 575 671 ] 125 [ 639 ] 168 [ 559 ] 251 [ 527 ] 319 [ 639 639 ] 499 [ 571 571 ] 502 [ 319 ] 589 [ 639 ] ]
endobj
-650 0 obj
+652 0 obj
<< /Filter /FlateDecode /Length 41 >>
stream
xc``6/p_7~0@ @iF2B0Y
endstream
endobj
-651 0 obj
+653 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6693 >>
stream
xڵZ XǶfzTi7h4"qWQA@A}aXfaAAQZܷFMsԀAtWW
@@ -2657,10 +2641,10 @@ in]tP<O:!|qWL4sTn[=Y? g{D
ypxcXjE.Kkw,<Gn԰T&Ăsf&̐s4y\,';+;{k̬,%v?'n1+%8rMh mrIMFӕe,c1WY.Hݎ%b܃H%vBk2(9QxUu3oNU*w(4|ʨxy6C}RAe_hM1 Z|o6Kjq;<L,Od-F (]?x٨ eP-XѢ7+YFe=pB9TSh,4ZXO =
endstream
endobj
-649 0 obj
-<< /Type /FontDescriptor /FontName /MMPGKS+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 651 0 R /CIDSet 650 0 R >>
+651 0 obj
+<< /Type /FontDescriptor /FontName /MMPGKS+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 653 0 R /CIDSet 652 0 R >>
endobj
-652 0 obj
+654 0 obj
<< /Filter /FlateDecode /Length 652 >>
stream
x}]0+s1JAȮ36qii~GEVDU&mt[]BվzyU\tZ+ngҔ݋u^tQiJpquXms{pZT]̮NnS)~-+΢WιaaԬ:M4!$QTYtD8&yiU0ۮz/Q)?Uh=>i`<fJmbۛY;RYk]w֚Ş#-*z_fot0 c6ghsD@pWțo\hjqFcO3OǰŠ6S6 Or
@@ -2668,21 +2652,21 @@ x}]0+s1JAȮ36qii~GEVDU&mt[]Bվ
endstream
endobj
251 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MMPGKS+LMRoman10-Bold /DescendantFonts [ 653 0 R ] /ToUnicode 652 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MMPGKS+LMRoman10-Bold /DescendantFonts [ 655 0 R ] /ToUnicode 654 0 R >>
endobj
-653 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MMPGKS+LMRoman10-Bold /FontDescriptor 649 0 R /W 648 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+655 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MMPGKS+LMRoman10-Bold /FontDescriptor 651 0 R /W 650 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-654 0 obj
+656 0 obj
[ 89 [ 1161 ] ]
endobj
-656 0 obj
+658 0 obj
<< /Filter /FlateDecode /Length 12 >>
stream
xc`
endstream
endobj
-657 0 obj
+659 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 514 >>
stream
xmQkQ~/Yl݀&(Px1%- i4J=%Kvɺ/n nl%(("^=&GЃx7Ϧwso#A@cq1_9[8/ۊy1f721y I !M}"쎍>cg!|~r#A qT4XzUs`*: -AVY]A1UJ0/A5 KTS
@@ -2690,31 +2674,31 @@ xmQkQ~/Yl݀&(Px1%- i4J=%Kvɺ/n nl%(("^=&GЃx7Ϧ
"4ljPXn64U/ZԠMUh*(X( 3Դ)$
endstream
endobj
-655 0 obj
-<< /Type /FontDescriptor /FontName /XNTVGR+LMRoman5-Bold /Flags 4 /FontBBox [ -630 -325 2006 1163 ] /Ascent 1163 /CapHeight 686 /Descent -325 /ItalicAngle 0 /StemV 145 /XHeight 444 /FontFile3 657 0 R /CIDSet 656 0 R >>
+657 0 obj
+<< /Type /FontDescriptor /FontName /XNTVGR+LMRoman5-Bold /Flags 4 /FontBBox [ -630 -325 2006 1163 ] /Ascent 1163 /CapHeight 686 /Descent -325 /ItalicAngle 0 /StemV 145 /XHeight 444 /FontFile3 659 0 R /CIDSet 658 0 R >>
endobj
-658 0 obj
+660 0 obj
<< /Filter /FlateDecode /Length 358 >>
stream
x}Qk0)n;"ڮCXa&gD> /d}޹:`Z쳊L&[es@^V L76s,Yr\5ބ|Z`Żg}UfrU=jSR cgԵPrRj6>$ߨ6V  5ȽYi&dO]`\0?1bΈ7é- PE17u\YۮcnTt?ҮBX8QXWCдO#wJG}5Cc>Aa?uouܾhg!Z8!1JU6-w.հqG~:T
endstream
endobj
250 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XNTVGR+LMRoman5-Bold /DescendantFonts [ 659 0 R ] /ToUnicode 658 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XNTVGR+LMRoman5-Bold /DescendantFonts [ 661 0 R ] /ToUnicode 660 0 R >>
endobj
-659 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XNTVGR+LMRoman5-Bold /FontDescriptor 655 0 R /W 654 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+661 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XNTVGR+LMRoman5-Bold /FontDescriptor 657 0 R /W 656 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-660 0 obj
+662 0 obj
[ 28 [ 531 ] 31 [ 531 ] 35 [ 531 531 ] 38 [ 531 531 531 531 ] 43 [ 531 531 ] 47 [ 531 ] 50 [ 531 531 531 ] 54 [ 531 531 531 531 531 531 ] 61 [ 531 531 531 531 ] 66 [ 531 ] 68 [ 531 ] 70 [ 531 531 531 ] 74 [ 531 531 ] 77 [ 531 531 531 531 531 531 531 531 531 531 ] 88 [ 531 ] 93 [ 531 531 ] 96 [ 531 531 531 ] 100 [ 531 531 531 531 531 531 531 531 531 531 531 ] 112 [ 531 ] 114 [ 531 ] 116 [ 531 ] 118 [ 531 ] 121 [ 531 ] 338 [ 531 ] ]
endobj
-662 0 obj
+664 0 obj
<< /Filter /FlateDecode /Length 28 >>
stream
xc``i}mr` 
endstream
endobj
-663 0 obj
+665 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 5615 >>
stream
xڝY Xڞ2cT2LBV,.E\ZIH ; `QPܰ^k5hZxk{c!h譽O™9;9}@IVz(fo)TU T)#XF N${Qy B`}
@@ -2738,10 +2722,10 @@ AŀhY7l=
3K9V^G Uw/17o9WHmG|mŋ65$Ayar{Y
endstream
endobj
-661 0 obj
-<< /Type /FontDescriptor /FontName /ILTTFM+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 663 0 R /CIDSet 662 0 R >>
+663 0 obj
+<< /Type /FontDescriptor /FontName /ILTTFM+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 665 0 R /CIDSet 664 0 R >>
endobj
-664 0 obj
+666 0 obj
<< /Filter /FlateDecode /Length 643 >>
stream
x}n0 $zĉM+rJ[68.xuOZi.9}3vfcU}!اn-uM0-zѦ{Zi5Xgar;6^lSuycUӋ>Uۥ{+ܼm֦t=6}՝3FԶj(+o &&2';A0U)Y^ܜݭecu0\y`n9}D粻6Y8,
@@ -2755,21 +2739,21 @@ x}n0 $zĉM+rJ[68.xuOZi.9}3vfcU}!اn-u
endstream
endobj
239 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ILTTFM+LMMono8-Regular /DescendantFonts [ 665 0 R ] /ToUnicode 664 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ILTTFM+LMMono8-Regular /DescendantFonts [ 667 0 R ] /ToUnicode 666 0 R >>
endobj
-665 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ILTTFM+LMMono8-Regular /FontDescriptor 661 0 R /W 660 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+667 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ILTTFM+LMMono8-Regular /FontDescriptor 663 0 R /W 662 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-666 0 obj
+668 0 obj
[ 28 [ 549 ] 35 [ 494 ] 43 [ 494 ] 47 [ 549 ] 50 [ 494 ] 59 [ 494 ] 63 [ 549 384 ] 66 [ 329 ] 75 [ 878 ] 77 [ 603 ] 81 [ 549 ] 84 [ 549 ] 91 [ 494 ] 96 [ 453 ] 98 [ 439 ] 105 [ 357 ] 109 [ 576 ] 116 [ 495 ] ]
endobj
-668 0 obj
+670 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``T\ !
endstream
endobj
-669 0 obj
+671 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2457 >>
stream
xڭW PgԪCwm=ԶwZ@-t @BB $H@B?BLQJS=؛f:ε3zvڞsw|||1%K Ю3Sv/⊟ޔ)V
@@ -2781,10 +2765,10 @@ tqkj{lG`X6&,]JXA
m fր/*TV"ҶPhG=pslΎF{*v݄U:t* --j:&. 6%oNV
endstream
endobj
-667 0 obj
-<< /Type /FontDescriptor /FontName /GESSBI+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 669 0 R /CIDSet 668 0 R >>
+669 0 obj
+<< /Type /FontDescriptor /FontName /GESSBI+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 671 0 R /CIDSet 670 0 R >>
endobj
-670 0 obj
+672 0 obj
<< /Filter /FlateDecode /Length 449 >>
stream
x}j0~
@@ -2794,21 +2778,21 @@ s~RH9ELqښ -bk")fV0C+l!Jgi( eHK ii!#e
endstream
endobj
238 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GESSBI+LMRoman8-Italic /DescendantFonts [ 671 0 R ] /ToUnicode 670 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GESSBI+LMRoman8-Italic /DescendantFonts [ 673 0 R ] /ToUnicode 672 0 R >>
endobj
-671 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GESSBI+LMRoman8-Italic /FontDescriptor 667 0 R /W 666 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+673 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GESSBI+LMRoman8-Italic /FontDescriptor 669 0 R /W 668 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-672 0 obj
+674 0 obj
[ 28 [ 510 ] 35 [ 549 ] 43 [ 472 ] 50 [ 472 ] 55 [ 325 ] 63 [ 549 ] 66 [ 253 ] 70 [ 519 ] 72 [ 253 ] 75 [ 844 ] 77 [ 549 ] 81 [ 531 ] 84 [ 549 ] 96 [ 363 ] 98 [ 407 ] 105 [ 384 ] 112 [ 490 ] 114 [ 726 ] 116 [ 490 ] ]
endobj
-674 0 obj
+676 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``PdTa
endstream
endobj
-675 0 obj
+677 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1660 >>
stream
xmUqPWKX HpUJK bT B"k $HPԀk)6<DE:C@cB&gozS[mw~}<ň %9yt9F+51+O^ ~3aJijb@":!1_cemBϋa$Vx%y20 YtS YWS9*j2]ِ]flcqY-nbluxU ﰳŜh+e{rqN[tTUVzN++<38[e7qNm lfuDuqkv+~*S;eI+ɕK5$6-TwR5qnR粒N-(68AˆA?G hҠQB&^D
@@ -2820,10 +2804,10 @@ Y%p9.!iǁIc6J-I
^V\kȿP,a֓ gZ%:";飘l-I+yX+MBCFDrCV?<
endstream
endobj
-673 0 obj
-<< /Type /FontDescriptor /FontName /MBEOCR+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 675 0 R /CIDSet 674 0 R >>
+675 0 obj
+<< /Type /FontDescriptor /FontName /MBEOCR+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 677 0 R /CIDSet 676 0 R >>
endobj
-676 0 obj
+678 0 obj
<< /Filter /FlateDecode /Length 448 >>
stream
x}n0~
@@ -2835,21 +2819,21 @@ E-XeRByHOH)REZxgi@ʑk5SE{J!Ӷ4Ji
endstream
endobj
237 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MBEOCR+LMSans8-Regular /DescendantFonts [ 677 0 R ] /ToUnicode 676 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MBEOCR+LMSans8-Regular /DescendantFonts [ 679 0 R ] /ToUnicode 678 0 R >>
endobj
-677 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MBEOCR+LMSans8-Regular /FontDescriptor 673 0 R /W 672 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+679 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MBEOCR+LMSans8-Regular /FontDescriptor 675 0 R /W 674 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-678 0 obj
+680 0 obj
[ 27 [ 796 531 ] 34 [ 752 590 ] 42 [ 767 472 295 295 811 590 ] 49 [ 723 472 531 ] 55 [ 325 531 531 834 531 ] 62 [ 796 590 354 383 295 ] 68 [ 325 ] 71 [ 664 295 ] 74 [ 973 885 796 590 531 ] 80 [ 826 531 531 723 590 413 413 ] 88 [ 295 826 826 561 ] 96 [ 414 ] 98 [ 419 ] 100 [ 531 531 531 ] 104 [ 767 413 531 531 796 590 ] 111 [ 796 561 ] 115 [ 796 561 ] 118 [ 561 ] 121 [ 531 620 885 ] 125 [ 590 ] 167 [ 796 531 ] 207 [ 472 ] 251 [ 472 ] 257 [ 472 ] 277 [ 472 ] 319 [ 590 590 ] 343 [ 295 ] 502 [ 295 ] 575 [ 590 ] 589 [ 590 ] ]
endobj
-680 0 obj
+682 0 obj
<< /Filter /FlateDecode /Length 49 >>
stream
xc``0/r߿*a
endstream
endobj
-681 0 obj
+683 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7215 >>
stream
xz \WL*0})ںU^.( @@vInaw!".ZV[Zkkg Xk[/Νs}9sGJ"_ru _Z
@@ -2881,31 +2865,31 @@ Uxx*}/
qvfWED6L֗zuK>icc3C .
endstream
endobj
-679 0 obj
-<< /Type /FontDescriptor /FontName /HSGCYI+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 681 0 R /CIDSet 680 0 R >>
+681 0 obj
+<< /Type /FontDescriptor /FontName /HSGCYI+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 683 0 R /CIDSet 682 0 R >>
endobj
-682 0 obj
+684 0 obj
<< /Filter /FlateDecode /Length 698 >>
stream
x}Mo0 ڡ@wp#Cj [M1lGV2l!~^&u)%E0W7ato:o8{cwjU\]xfzԺ:޳硫7zbz6:M?6o޵aׯGu%=t܆/zwWCݭv[;2keX]cۙ{&n80M\c0#lvֽmM3T"bM[OD>V˛8l`>g3UfOC{0,[:h6skmG}xz5< F}U2;mKY49nmJΦW5@biqܓEl((-!$B8<CO%@-!$B`[D1IN"B1I (P;)#J@6&P&H $-DYR3I1P (DPR^(E}6
endstream
endobj
236 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HSGCYI+LMRoman8-Regular /DescendantFonts [ 683 0 R ] /ToUnicode 682 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HSGCYI+LMRoman8-Regular /DescendantFonts [ 685 0 R ] /ToUnicode 684 0 R >>
endobj
-683 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HSGCYI+LMRoman8-Regular /FontDescriptor 679 0 R /W 678 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+685 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HSGCYI+LMRoman8-Regular /FontDescriptor 681 0 R /W 680 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-684 0 obj
+686 0 obj
[ 82 [ 611 ] 100 [ 611 ] 187 [ 611 ] ]
endobj
-686 0 obj
+688 0 obj
<< /Filter /FlateDecode /Length 18 >>
stream
xc`8A
endstream
endobj
-687 0 obj
+689 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 801 >>
stream
xuRKlkG(`Ɗ`6-G6k8t~י^W3ӦE(5B]Wwtg2Nĸ1,;|0EQݵPdc{}(Q"fF@),#.]m^Ԟl/
@@ -2915,37 +2899,37 @@ xuRKlkG(`Ɗ`6-G6k8t~י^W3ӦE(5B]Ww
sR4s=NoFJRv4(8:s[ϐΒ Gr^Qo|ⶬȣ2!+ESc%OG1
endstream
endobj
-685 0 obj
-<< /Type /FontDescriptor /FontName /BTJJIE+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 687 0 R /CIDSet 686 0 R >>
+687 0 obj
+<< /Type /FontDescriptor /FontName /BTJJIE+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 689 0 R /CIDSet 688 0 R >>
endobj
-688 0 obj
+690 0 obj
<< /Filter /FlateDecode /Length 375 >>
stream
x}R]k0}ϯ{(hXZ{ɵ D>/NP<s=suBo4pJ57d%5zȑwl5V5"q"٥ة,Cb@?/oTɱwssɴG+Ũa 'J(9`H)5Ua'K ~;[T8$ Vߐ{¬ʚת""Q,Z_]w 'ؔm$cnJm'ܰ>Ó^K ǪLDf 4hexںNy {u δ:آk&fa0c݇cf2]PҺN,ڭc
endstream
endobj
235 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTJJIE+LMRoman6-Regular /DescendantFonts [ 689 0 R ] /ToUnicode 688 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTJJIE+LMRoman6-Regular /DescendantFonts [ 691 0 R ] /ToUnicode 690 0 R >>
endobj
-689 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTJJIE+LMRoman6-Regular /FontDescriptor 685 0 R /W 684 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+691 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTJJIE+LMRoman6-Regular /FontDescriptor 687 0 R /W 686 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-690 0 obj
+692 0 obj
[570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520.6 0 0 600.2 0 0 0 0 0 0 0 0 0 571.5 ]
endobj
-691 0 obj
+693 0 obj
[388.9 388.9 0 777.8 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 777.8 ]
endobj
-692 0 obj
+694 0 obj
[ 28 [ 525 ] 35 [ 525 525 ] 40 [ 525 525 525 525 ] 47 [ 525 ] 49 [ 525 525 ] 55 [ 525 ] 59 [ 525 ] 61 [ 525 ] 63 [ 525 ] 66 [ 525 ] 72 [ 525 525 ] 75 [ 525 ] 77 [ 525 ] 79 [ 525 ] 81 [ 525 525 ] 84 [ 525 525 525 ] 91 [ 525 ] 93 [ 525 525 ] 96 [ 525 ] 98 [ 525 ] 102 [ 525 525 525 525 ] 109 [ 525 ] 111 [ 525 525 ] 116 [ 525 ] 118 [ 525 ] 246 [ 525 ] ]
endobj
-694 0 obj
+696 0 obj
<< /Filter /FlateDecode /Length 27 >>
stream
xc``(p5Ol.T
endstream
endobj
-695 0 obj
+697 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4172 >>
stream
xڽXyTWEE),UF4f,=٥WznhAF(юY$f>2Iη"ϜjPaI9S}N/{u,$) aXwܲgM˟۾_pՊ Q^EiAV=J!}&h2&YRXW3%>8tCG>͂އ ;l@|_R"  J`%f8V=_%Wzc my|WYݖݞKR~%7WWQqy{b!O  *tnvI+ ʹ̧W
@@ -2970,10 +2954,10 @@ HhFyu|˹)A<8,pq
.WFomj!vNz}DQt@߅ֻ 5Ww^)9?Tr#Q)pj|dK_`פm-?g Ɖd8 v>{}ڤU ȢŊ9K#C6X,N p꠰X'#<5y̬‹` 6 s&`iN`i(h뼵:٤%\20"YmXvmotXjxʢy<ߎ9Mt,lb[vʔT،љK[܎YBYt۝kt
endstream
endobj
-693 0 obj
-<< /Type /FontDescriptor /FontName /PFVAAD+LMMono10-Italic /Flags 4 /FontBBox [ -491 -316 834 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -15 /StemV 175 /XHeight 431 /FontFile3 695 0 R /CIDSet 694 0 R >>
+695 0 obj
+<< /Type /FontDescriptor /FontName /PFVAAD+LMMono10-Italic /Flags 4 /FontBBox [ -491 -316 834 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -15 /StemV 175 /XHeight 431 /FontFile3 697 0 R /CIDSet 696 0 R >>
endobj
-696 0 obj
+698 0 obj
<< /Filter /FlateDecode /Length 540 >>
stream
x}[@+z!c x vfda_ct I|owց]AO*3sɏ9t˷FUS]Τw"I_٦k- l,V'\ttzcSL6/+[PЮN:yL "_u^Y9?\6g^ME6>Jv'^2YW#Y\Cfl]'oIjuduҶ'2vI:he=Llbz/C>BV-+Ju$oG36+HɿN}w`8Af(@!(,A/h
@@ -2985,21 +2969,21 @@ ZY b)v*S|
endstream
endobj
232 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PFVAAD+LMMono10-Italic /DescendantFonts [ 697 0 R ] /ToUnicode 696 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PFVAAD+LMMono10-Italic /DescendantFonts [ 699 0 R ] /ToUnicode 698 0 R >>
endobj
-697 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PFVAAD+LMMono10-Italic /FontDescriptor 693 0 R /W 692 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+699 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PFVAAD+LMMono10-Italic /FontDescriptor 695 0 R /W 694 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-698 0 obj
+700 0 obj
[ 28 [ 525 ] 35 [ 525 ] 43 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 63 [ 525 ] 66 [ 525 ] 70 [ 525 ] 72 [ 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 ] 84 [ 525 ] 96 [ 525 ] 98 [ 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 114 [ 525 ] ]
endobj
-700 0 obj
+702 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``TdTe
endstream
endobj
-701 0 obj
+703 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2256 >>
stream
xڕVkTSWF4E깷Q<k)Z}ֺ @Hb QPK$<H[yuVՎPӱuN:Szc (d{wB!!fں+!a-[tZf"Y&DZK6 f8Ɵ %\?$>:NCekrdW2b&1E 2ҵ:ŠVLblIbDIi,ckٍ6^MTV&(vF* 14MPlΐoBl6Ya`M*mkӚ$֨`Y֨P*I22Ҕ)52F y3>!|㷮0Ml&+LrǷɺDņd֤6YfsD$XN&1DBM${DBMzKJHyTDP-gO2+Q>@fۓd0:0}O(=W%uimNqqr{~Z]git[kq>[
@@ -3014,10 +2998,10 @@ F=F"$
$I*BPNKC'^<:O-< 0L- D+(R5'OML8^dnH TyyGCde🲾ax홥V,4:j42b]*wNM_a# W+x!o)=c'[Y`uWn&g= &~|(sZO6}; Pܽ;`lD11;w{qesq
endstream
endobj
-699 0 obj
-<< /Type /FontDescriptor /FontName /GYSYTT+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 701 0 R /CIDSet 700 0 R >>
+701 0 obj
+<< /Type /FontDescriptor /FontName /GYSYTT+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 703 0 R /CIDSet 702 0 R >>
endobj
-702 0 obj
+704 0 obj
<< /Filter /FlateDecode /Length 453 >>
stream
x}n0~
@@ -3028,21 +3012,21 @@ ud v9{7$|5TG:nJʡmOPF
endstream
endobj
231 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GYSYTT+LMMonoLt10-Bold /DescendantFonts [ 703 0 R ] /ToUnicode 702 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GYSYTT+LMMonoLt10-Bold /DescendantFonts [ 705 0 R ] /ToUnicode 704 0 R >>
endobj
-703 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GYSYTT+LMMonoLt10-Bold /FontDescriptor 699 0 R /W 698 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+705 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GYSYTT+LMMonoLt10-Bold /FontDescriptor 701 0 R /W 700 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-704 0 obj
+706 0 obj
[ 27 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 61 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 92 [ 525 525 525 525 525 525 525 525 ] 101 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 118 [ 525 ] 120 [ 525 525 ] 246 [ 525 ] 272 [ 525 ] 338 [ 525 ] 602 [ 525 ] ]
endobj
-706 0 obj
+708 0 obj
<< /Filter /FlateDecode /Length 36 >>
stream
xc``w ~ ( l@
endstream
endobj
-707 0 obj
+709 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8223 >>
stream
xڽz\Wqw=;PAQzYX3KwD +EM51h>g~@$`޹s?sfE1!,y;;3믭9Sď%7E<ijFTLw`?47 BT8Lx4e:^oӉA $'EƢ!ag[%{{(,̞=w=˕3-m)=-ii7rL)zZ%tqf)stpi*t˂ߞihɽ-O@׃A~]
@@ -3077,10 +3061,10 @@ qeУ*]'/ң*T=^J 8% 4L)]L%»Z;旁$ABG
`h-t- `{wSPsA]0HRE墅$j&qD|tB46˻6+#5Mc ?C#])rCqRJNfafqRfFrS՜ N7ϡ(N?YR>ΟZM*ƘaS'B?I)W̅!| ;$ D6fdVp1&A5WҼ<:2̙ =RdgVgi4[rM+G߉_m
endstream
endobj
-705 0 obj
-<< /Type /FontDescriptor /FontName /KXPZZP+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 707 0 R /CIDSet 706 0 R >>
+707 0 obj
+<< /Type /FontDescriptor /FontName /KXPZZP+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 709 0 R /CIDSet 708 0 R >>
endobj
-708 0 obj
+710 0 obj
<< /Filter /FlateDecode /Length 750 >>
stream
x}]O0+ $v+Jڀ qW&Q^i Sǵ/]QX]%u]<}4ŬΏW8vbr-U?{+ϐ!|q*PWunwo8fG?PQŨrmWխH$̫bZ.J1:׽-e}(<J(ʼ'o0y}zwXV:g.=GpmY5inG$d"
@@ -3089,22 +3073,22 @@ x}]O0+ $v+Jڀ qW&Q^i Sǵ/]QX]%u]<
endstream
endobj
230 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /KXPZZP+LMMono10-Regular /DescendantFonts [ 709 0 R ] /ToUnicode 708 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /KXPZZP+LMMono10-Regular /DescendantFonts [ 711 0 R ] /ToUnicode 710 0 R >>
endobj
-709 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KXPZZP+LMMono10-Regular /FontDescriptor 705 0 R /W 704 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+711 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KXPZZP+LMMono10-Regular /FontDescriptor 707 0 R /W 706 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-710 0 obj
+712 0 obj
[ 51 [ 569 ] 56 [ 569 569 ] 78 [ 569 ] 82 [ 569 ] 100 [ 569 569 ] 106 [ 569 569 ] 121 [ 569 ] ]
endobj
-712 0 obj
+714 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`
< 
endstream
endobj
-713 0 obj
+715 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1685 >>
stream
xuUkPTGÈ(uG^QWCZ` 00 j3GAG@^X"")E0kZ]CP*X,PѾncgVmwӧ;uXL cLqs`<&N~9*
@@ -3114,31 +3098,31 @@ GKtdžmBEx}gZ5g:\~Bc"ZOI
NbC^r`)|*+%M 1=U8⦈kQʁR y Ķ˚Jmѹpr~_9&꾩R58WCW%#B)_o-Zȫ=%-/7l|D%2]DCbTߙir8lkQ(\-:Kϗ:Y
endstream
endobj
-711 0 obj
-<< /Type /FontDescriptor /FontName /TFIASI+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 713 0 R /CIDSet 712 0 R >>
+713 0 obj
+<< /Type /FontDescriptor /FontName /TFIASI+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 715 0 R /CIDSet 714 0 R >>
endobj
-714 0 obj
+716 0 obj
<< /Filter /FlateDecode /Length 405 >>
stream
x}]K0+wQSetPpC풳X$Q xzޓy[ͥc4ڴV`XhKQ#Y#rlv=gZ5}gZZwyvn,z]mMYic{*l]N5'R/UüяqNj S,}PZڋU;,Trn bYՍ={}oDw۪:)H<ДѺ(bLRU5rٝ+$Fb]mfOa+e:]C@tɵ$> i zݧ,<=yz4J<MFƁ&恆 <M/34܂\@Fiqe*o8hd_K}O
endstream
endobj
229 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TFIASI+LMRoman7-Regular /DescendantFonts [ 715 0 R ] /ToUnicode 714 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TFIASI+LMRoman7-Regular /DescendantFonts [ 717 0 R ] /ToUnicode 716 0 R >>
endobj
-715 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TFIASI+LMRoman7-Regular /FontDescriptor 711 0 R /W 710 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+717 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TFIASI+LMRoman7-Regular /FontDescriptor 713 0 R /W 712 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-716 0 obj
+718 0 obj
[ 28 [ 481 ] 34 [ 667 517 ] 43 [ 444 ] 47 [ 517 ] 50 [ 444 ] 55 [ 306 ] 59 [ 500 ] 63 [ 517 333 ] 66 [ 239 ] 72 [ 239 ] 75 [ 794 ] 77 [ 517 ] 81 [ 500 ] 84 [ 517 ] 86 [ 389 ] 96 [ 342 556 383 ] 105 [ 361 ] 109 [ 517 ] 116 [ 461 ] 118 [ 461 ] ]
endobj
-718 0 obj
+720 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``0T\0ŋ 
endstream
endobj
-719 0 obj
+721 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2227 >>
stream
xuV PWf.v!xDPA\gaF`$@B&`4XPx#@$jToahR[}_=1aq13F+r3}3:/`=bqrbid1E.Nl`"գϞ10B} {9.'aNcLJqg[?_Y!&3xe}(2bjEa}0S9Re0 &A1#iЛs|, Z{:¨V1LDb|11 59F50F2rd29GoȔeps2IFcwxlLȐ0
@@ -3152,10 +3136,10 @@ D!m[OQ
͙V8
endstream
endobj
-717 0 obj
-<< /Type /FontDescriptor /FontName /FPEUQN+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 719 0 R /CIDSet 718 0 R >>
+719 0 obj
+<< /Type /FontDescriptor /FontName /FPEUQN+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 721 0 R /CIDSet 720 0 R >>
endobj
-720 0 obj
+722 0 obj
<< /Filter /FlateDecode /Length 472 >>
stream
x}Mo0
@@ -3163,21 +3147,21 @@ x}Mo0
endstream
endobj
228 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FPEUQN+LMSans10-Regular /DescendantFonts [ 721 0 R ] /ToUnicode 720 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FPEUQN+LMSans10-Regular /DescendantFonts [ 723 0 R ] /ToUnicode 722 0 R >>
endobj
-721 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FPEUQN+LMSans10-Regular /FontDescriptor 717 0 R /W 716 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+723 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FPEUQN+LMSans10-Regular /FontDescriptor 719 0 R /W 718 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-722 0 obj
+724 0 obj
[ 27 [ 750 500 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 42 [ 722 444 278 278 764 556 ] 49 [ 681 444 500 778 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 778 528 ] 95 [ 736 392 556 394 278 500 500 500 ] 104 [ 722 389 500 500 750 556 ] 111 [ 750 528 ] 114 [ 722 750 528 ] 118 [ 528 ] 120 [ 444 500 583 833 ] 125 [ 556 556 ] 144 [ 500 ] 167 [ 750 500 ] 207 [ 444 ] 251 [ 444 ] 257 [ 444 ] 277 [ 444 ] 283 [ 1000 500 ] 319 [ 556 556 ] 343 [ 278 ] 428 [ 500 ] 499 [ 472 472 ] 502 [ 278 ] 575 [ 556 ] 589 [ 556 ] 612 [ 500 ] ]
endobj
-724 0 obj
+726 0 obj
<< /Filter /FlateDecode /Length 59 >>
stream
xc``߿
endstream
endobj
-725 0 obj
+727 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8767 >>
stream
x{t׺Ȳ4D`̘z$L W܋\-YeʽȖ 7'@HB HBIH}HsBryܻ%φb<[<j5!AƏY+ t\d;Xچe-jcg1 PD0Wi՛5 ~nV1 c4zx_-;q煄ƆE:N?~h ǹc{DG;{9.|㊐h`Go?@u%!ЈcG8F8r{zGx{9J#:] $8qwp1ގ~);·&b\`E,`uc-t wt'% r;8?2^6
@@ -3218,10 +3202,10 @@ TJ%H§\٘YF{(e!Ҋg׵ΙsG,^mDߜJ`Pś6L)
NJHxHq7ŠwcK1B57hV9!6۶xEl">2R  D_w_!.u4;4G^,e7= æX8H b4%uv=Lݯ05di4vvm&Sfdz
endstream
endobj
-723 0 obj
-<< /Type /FontDescriptor /FontName /JXVJCI+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 725 0 R /CIDSet 724 0 R >>
+725 0 obj
+<< /Type /FontDescriptor /FontName /JXVJCI+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 727 0 R /CIDSet 726 0 R >>
endobj
-726 0 obj
+728 0 obj
<< /Filter /FlateDecode /Length 788 >>
stream
xڅ[k0+lRSBqlH^HJk+YCbyȿ_Yg,˖-eX2lmOֻY6`ŘҔuM1MVU] wv.ҜW{dnͧfwmհi4s>LWMȂ{ιH2iޛP69KVuّZ5jU1Vkܼ99mflb3WН;oڕN]9ތsVm XvNߖ: hJӷyaoflٟgy]_[]pwSů s%( 1戤()GzҠ%(FB>E|"-3> ʰ$E TD)@)ED
@@ -3231,21 +3215,21 @@ J2 S78ԩ ?}
endstream
endobj
227 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JXVJCI+LMRoman10-Regular /DescendantFonts [ 727 0 R ] /ToUnicode 726 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JXVJCI+LMRoman10-Regular /DescendantFonts [ 729 0 R ] /ToUnicode 728 0 R >>
endobj
-727 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JXVJCI+LMRoman10-Regular /FontDescriptor 723 0 R /W 722 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+729 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JXVJCI+LMRoman10-Regular /FontDescriptor 725 0 R /W 724 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-728 0 obj
+730 0 obj
[ 27 [ 850 547 ] 34 [ 800 625 575 ] 38 [ 575 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 54 [ 707 344 563 563 ] 59 [ 563 ] 63 [ 625 ] 65 [ 419 313 ] 71 [ 676 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 90 [ 845 594 ] 96 [ 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 112 [ 594 ] 114 [ 813 850 594 ] 118 [ 594 ] 121 [ 563 656 ] 125 [ 625 ] 168 [ 547 ] 251 [ 513 ] 277 [ 513 ] 319 [ 625 625 ] 502 [ 313 ] ]
endobj
-730 0 obj
+732 0 obj
<< /Filter /FlateDecode /Length 42 >>
stream
xc``6.߆7v0@ 00hF2`
endstream
endobj
-731 0 obj
+733 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6476 >>
stream
xy \SW܈xsVw*de BHrD@
@@ -3268,10 +3252,10 @@ qla1^5y{yR
H@ p/nװM^hrBz|;HAHk6rD ,ߡ?wh§[Tu\B<>oWY*igۭ);-bg2PY.X摅`Wt5pi;9uӁ#~>K c] _ |q?=8?=92_TÆE&f0j.j^O̹HLq`H\_[j4l9;&TPB1ww|cI չ\D!^Bj5Yr!ˠ宭83iTm䲅\=9~H@*E y,fetIZΗv;$Is\$7';7=:sE`ɖcOz"ʄ*X)&ـF\ >z[do@]@qOyAu ^z4}Uۥ{ Eʹ>cJYH%kB]#;0f볳}A~{{sɒ\Ca~0ǾpO>̃
endstream
endobj
-729 0 obj
-<< /Type /FontDescriptor /FontName /CXYYVI+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 731 0 R /CIDSet 730 0 R >>
+731 0 obj
+<< /Type /FontDescriptor /FontName /CXYYVI+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 733 0 R /CIDSet 732 0 R >>
endobj
-732 0 obj
+734 0 obj
<< /Filter /FlateDecode /Length 644 >>
stream
x}[0+r& 
@@ -3281,21 +3265,21 @@ DnV1
endstream
endobj
226 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CXYYVI+LMRoman12-Bold /DescendantFonts [ 733 0 R ] /ToUnicode 732 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CXYYVI+LMRoman12-Bold /DescendantFonts [ 735 0 R ] /ToUnicode 734 0 R >>
endobj
-733 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CXYYVI+LMRoman12-Bold /FontDescriptor 729 0 R /W 728 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+735 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CXYYVI+LMRoman12-Bold /FontDescriptor 731 0 R /W 730 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-734 0 obj
+736 0 obj
[ 66 [ 245 ] 77 [ 531 ] 81 [ 514 ] 84 [ 531 ] 105 [ 371 ] ]
endobj
-736 0 obj
+738 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc`
endstream
endobj
-737 0 obj
+739 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 764 >>
stream
xmRkHQNmZVf,ac6 !
@@ -3304,31 +3288,31 @@ JjB.Ԩ+S- %Eh/(~UvFȚLOlٹiI}̐UQu5;
KWVWv^w4ZybX4=MQ#ch3z6FE:
endstream
endobj
-735 0 obj
-<< /Type /FontDescriptor /FontName /BLRUUF+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 737 0 R /CIDSet 736 0 R >>
+737 0 obj
+<< /Type /FontDescriptor /FontName /BLRUUF+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 739 0 R /CIDSet 738 0 R >>
endobj
-738 0 obj
+740 0 obj
<< /Filter /FlateDecode /Length 382 >>
stream
x}R]k0}ϯ{6u_X{ڤ~Ij[!'ܓsOy%W'^XZ3f \:GYm9ZN`K,RT=C%j-9i!{tMWqI*˱Kڣ ̐)"8OԥPrARj6Tn+~k,$7pI0
endstream
endobj
225 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BLRUUF+LMSans9-Regular /DescendantFonts [ 739 0 R ] /ToUnicode 738 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BLRUUF+LMSans9-Regular /DescendantFonts [ 741 0 R ] /ToUnicode 740 0 R >>
endobj
-739 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BLRUUF+LMSans9-Regular /FontDescriptor 735 0 R /W 734 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+741 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BLRUUF+LMSans9-Regular /FontDescriptor 737 0 R /W 736 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-740 0 obj
+742 0 obj
[ 28 [ 514 ] 34 [ 728 571 ] 43 [ 457 286 286 ] 47 [ 571 ] 49 [ 699 457 ] 55 [ 314 ] 58 [ 807 514 ] 63 [ 571 343 ] 66 [ 286 ] 71 [ 642 286 ] 75 [ 856 ] 77 [ 571 ] 81 [ 514 ] 83 [ 699 571 400 400 ] 88 [ 286 ] 90 [ 799 542 ] 96 [ 402 ] 98 [ 405 ] 104 [ 742 400 ] 109 [ 571 ] 112 [ 542 ] 115 [ 771 542 ] 118 [ 542 ] 125 [ 571 ] 168 [ 514 ] 251 [ 457 ] 277 [ 457 ] 502 [ 286 ] 575 [ 571 ] ]
endobj
-742 0 obj
+744 0 obj
<< /Filter /FlateDecode /Length 41 >>
stream
xc``0M4\8%nÂ#X@Xp&
endstream
endobj
-743 0 obj
+745 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4412 >>
stream
xڽX X纞
@@ -3349,10 +3333,10 @@ VO| y=.jXwXlo{z:
;lEŞ7q
endstream
endobj
-741 0 obj
-<< /Type /FontDescriptor /FontName /IUSWHX+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 743 0 R /CIDSet 742 0 R >>
+743 0 obj
+<< /Type /FontDescriptor /FontName /IUSWHX+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 745 0 R /CIDSet 744 0 R >>
endobj
-744 0 obj
+746 0 obj
<< /Filter /FlateDecode /Length 558 >>
stream
x}[o0+H! IV"m/v!Hĉry߯PZ ė9sf}{ YȟsꛜKV{ѪTJ$I7UFݝNިKLB}>lse[ztYsS/"Qv#ʬ/jڢRO,k%Ui&ls&cd㬲1!E9yWewr7\]s[#)ԉox9d0LQKf%_h]nf+ImdDL/,կGJ~sT@0|!#,I074E3h
@@ -3360,21 +3344,21 @@ BtZY-Ȍ,Mh tH PZ S\?GNRor hF= i:N֖bLRf9($/qB
endstream
endobj
224 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IUSWHX+LMRoman9-Regular /DescendantFonts [ 745 0 R ] /ToUnicode 744 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IUSWHX+LMRoman9-Regular /DescendantFonts [ 747 0 R ] /ToUnicode 746 0 R >>
endobj
-745 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IUSWHX+LMRoman9-Regular /FontDescriptor 741 0 R /W 740 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+747 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IUSWHX+LMRoman9-Regular /FontDescriptor 743 0 R /W 742 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-746 0 obj
+748 0 obj
[ 75 [ 986 ] 95 [ 887 ] 98 [ 467 ] 109 [ 657 ] 251 [ 543 ] ]
endobj
-748 0 obj
+750 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xc`Ft
endstream
endobj
-749 0 obj
+751 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1088 >>
stream
xڅTmLSWJ/wQ*ҋhA]@Eatc&vFRt{k%JAriP HcKh4MLlfes&\9ĬY%K&=<oL82yE_R5m{8)I@JIZJäDGIL,C)dMRAdZg_=dF$;H
@@ -3385,10 +3369,10 @@ W-`glZzPV':x`vpN;Y,<pqF5 8m&]Y
y{{`,$(׍u^FfHJU}lķZ9z__njM OH(rCm?'`UYdH&r$}._W_w.Izt#_aT
endstream
endobj
-747 0 obj
-<< /Type /FontDescriptor /FontName /TZPLIV+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 749 0 R /CIDSet 748 0 R >>
+749 0 obj
+<< /Type /FontDescriptor /FontName /TZPLIV+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 751 0 R /CIDSet 750 0 R >>
endobj
-750 0 obj
+752 0 obj
<< /Filter /FlateDecode /Length 381 >>
stream
x}R]@}_q!sa/*b7:#>wf̂EVP<s\N'WW}
@@ -3397,22 +3381,22 @@ G,TzmNgX,wyS8hNXBw-#)ʞGF.Mȗľg߇Mt6ۣb9*(S
endstream
endobj
223 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZPLIV+LMRoman9-Bold /DescendantFonts [ 751 0 R ] /ToUnicode 750 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZPLIV+LMRoman9-Bold /DescendantFonts [ 753 0 R ] /ToUnicode 752 0 R >>
endobj
-751 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZPLIV+LMRoman9-Bold /FontDescriptor 747 0 R /W 746 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+753 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZPLIV+LMRoman9-Bold /FontDescriptor 749 0 R /W 748 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-752 0 obj
+754 0 obj
[ 28 [ 515 ] 33 [ 515 ] 47 [ 515 ] 55 [ 515 ] 59 [ 515 ] 66 [ 515 ] 77 [ 515 ] 81 [ 515 ] 84 [ 515 ] 88 [ 515 ] 96 [ 515 ] 105 [ 515 ] 114 [ 515 ] 118 [ 515 ] ]
endobj
-754 0 obj
+756 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``p`dP`hhpP
D)
endstream
endobj
-755 0 obj
+757 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1845 >>
stream
xuV}TW!@5ʚiZ3K- _EAE%1LBD<u
@@ -3427,69 +3411,69 @@ oRWɧ<| ƠP"{nPq%e}Gܮ(WȗN)QuoYUO&Pn^
g48ԂE>*`zK@E%1άxh@,+&p_(N(/?=u0ݕLDB0O>`R Fon0km(V׮Җ ֐F"3DgϷ^?@%xSEV!6¶M:GӞ`x#qNf4e'_%#l|ZQuJeq?HR@8(fu\o!du8iw6s;YpoۚiPH&Ng y[j;rgRsJcOt~w@[fk9RM
endstream
endobj
-753 0 obj
-<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 755 0 R /CIDSet 754 0 R >>
+755 0 obj
+<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 757 0 R /CIDSet 756 0 R >>
endobj
-756 0 obj
+758 0 obj
<< /Filter /FlateDecode /Length 428 >>
stream
x}]O0+`Dpf!q%Df,[֞&%.m{&F%pk z:=A[2,5P3
endstream
endobj
222 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 757 0 R ] /ToUnicode 756 0 R >>
-endobj
-757 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 753 0 R /W 752 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 759 0 R ] /ToUnicode 758 0 R >>
endobj
-758 0 obj
-[ 28 [ 490 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 ] 75 [ 816 ] 77 [ 544 ] 83 [ 666 ] 88 [ 272 ] 105 [ 381 490 490 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] ]
+759 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 755 0 R /W 754 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
760 0 obj
+[ 28 [ 490 ] 50 [ 435 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 ] 68 [ 299 ] 72 [ 272 ] 77 [ 544 ] 83 [ 666 ] 88 [ 272 ] 105 [ 381 490 490 ] 109 [ 544 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] ]
+endobj
+762 0 obj
<< /Filter /FlateDecode /Length 27 >>
stream
-xc`````
-Ph`(`r`
+xc````P
+hh`(ar`
endstream
endobj
-761 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2199 >>
+763 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2463 >>
stream
-xڭV{PSW+6״5Wv<|?WT*"*k/ py
-NH2!?DhH.R)ӢLFOM :
-bS7fiMLV&JSԲP*^kx-M46JR JPj֐L4 e(SeRU:eU:JQQ1ɉIb-27hFEPRQ>wNXޠaF  Y<>)$nIE|=Q*}jf6_|+rR#ӵi%*Z/@1
-F"QRdF2MHbD
-ӁB01> d;‹VD :.^'!ɒ-?e#n$?Lb8!M`lf8WKh t?JЬsg%nswL /O7t'/&Q~myJlt__㴛ZTW=ݮ{$?bBԦ )ipv!+,<38Ep0 zG<u<Ȉ};(F&Z=x[$Ni'4:duS1VK:v {8]ŏq2rIO_ \;u*k@-a]8aF.h[{#ɚt $&|ț;nکF,DEEYzVhU?ЖQ]Bbʕm:g)vZg ]8ŹM[/-OW[V=."TvNH)PWV{%M_`-+Z:gCVK9V#>ll
-d!72CuqSТ?@g.OL1'{Y&Y{uV-@%~EHrˮ_?)'x{Q4ɧp@rgx|[N-)/6a)#
-K2TKO¦7/3
+xuV TWI+RiZؙkbyUj튀@Gk/"@h \"` !AlJiJV-v{zgw'c{vs}\p8kLߐaqbR S$24E"g*k`9HYM̠I.M0qӯ0G0g򄿿$xr|a(yD0 s7962,"8EaR&USK_+0*!sGBʓQl*!J
+Z**T$73?RPiMF%Q(R)T-
+re*JPQ쨔K2UlJ#ϖ()uOOM*j*QC"WIPRI$TZ]JxZ# S(9UxEpеo$&Zrka5PRu,_?I>2$+1ي,Z.E6D#+H,Y$!&DD)ENsْ C0qZ_,Ή\W p f߃RAf?A&߻pWZaظ;DojRQ'CCA>+wm"1=An׹ܭRPN:֏</YB@-QWS^vn;,}wؾ"AѢ؝3zN9pՁ dp[Za84^.ЋLQnl2uL<sƐv؉bN Kdf1̜@.Dd#b*pu͋jɠ*g9|SIzxC+{ 9ͩ6Z9 : `%Z&ƝQhQR?bwO|ߛL b>Zӟp,R[@AX *3<-aKc6>p+`v>-Wx1U|XE1v _qa@:=V!67r*=(_ҝXIbWʳV-ҷk'SpCw06X'RXiw[ZmD~Є/;y]d)Ps-[m2b]cEI0RUVHK
+ Rpv>{gF` ћZz=͹|߄<4-!:%ឧ}hBU}I9f'G?޿'dѭz@Q4M#|D*JQ),rj<v%h?}-53~mDe^^ۿ;c6`'PL੷[XME`ewxĄ籉!g;k$W]fHKV3oI <^2h!˦#
+ԉͦWH!mݮěuƦεnjt6o06tF=[$SHUlm#qSUkqnf6n7#u6X^=TRIN8׌Z/((PV(l6k9aHmLmlE8#ȰGuT]$06t6| ?gxɇ?:*>{|lR_[PWko tv, {-YOF_Cqr
endstream
endobj
-759 0 obj
-<< /Type /FontDescriptor /FontName /VDLIBI+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 761 0 R /CIDSet 760 0 R >>
+761 0 obj
+<< /Type /FontDescriptor /FontName /DVUPSP+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 763 0 R /CIDSet 762 0 R >>
endobj
-762 0 obj
-<< /Filter /FlateDecode /Length 440 >>
+764 0 obj
+<< /Filter /FlateDecode /Length 453 >>
stream
-xڅMk0@zp-ۉ--EJ4Iddnaٰ?wf^f}>}0eNcy`6+5T+@1E{x7ﰇ*+%+?'տEk<I#q}`|UM$i8&d.m/G 6 }V2G%6qh4
-d(0[88AN%.]M:X eכ}DoFk&h7!`AQmZ7@%lTI_ZsLص5GS+;V
+xڅn0~
+)=P $"RF!z%$k)!oZh#1Ͷ >@1VCU L֚5n @n%ttB֊ ϽQo
+NRH\:WؖmJEqSL\^vg+0'VjH;Ƙ}Dk- 4fpK;b*$r.Q咆l;soInNtzͤ}Ӝdp6U 4t(ru?IK4eMTdi2| GD+o1Tr[E9Jb9l)!Pz yH3'{iix3$T[`b{ݭ]OX3E)NK:+QT
+
endstream
endobj
221 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VDLIBI+LMRoman12-Regular /DescendantFonts [ 763 0 R ] /ToUnicode 762 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /DVUPSP+LMRoman12-Regular /DescendantFonts [ 765 0 R ] /ToUnicode 764 0 R >>
endobj
-763 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VDLIBI+LMRoman12-Regular /FontDescriptor 759 0 R /W 758 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+765 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /DVUPSP+LMRoman12-Regular /FontDescriptor 761 0 R /W 760 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-764 0 obj
+766 0 obj
[ 66 [ 223 ] 77 [ 484 ] 81 [ 470 ] 84 [ 484 ] 105 [ 340 ] ]
endobj
-766 0 obj
+768 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc`
endstream
endobj
-767 0 obj
+769 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 759 >>
stream
xuR]HQםuM'״$u&JfZnc;N;23EPaPQ(*YFB>XD܉1h%{{A
@@ -3498,10 +3482,10 @@ xuR]HQםuM'״$u&JfZnc;N;23EPaPQ(*YFB>
'5;լ{k-MW<sϞ>ҍyPs-T2LDf_LeqgF, .r
endstream
endobj
-765 0 obj
-<< /Type /FontDescriptor /FontName /BTPEXR+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 767 0 R /CIDSet 766 0 R >>
+767 0 obj
+<< /Type /FontDescriptor /FontName /BTPEXR+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 769 0 R /CIDSet 768 0 R >>
endobj
-768 0 obj
+770 0 obj
<< /Filter /FlateDecode /Length 383 >>
stream
x}R]k0}ϯ{6u:kMn]&%mKR0
@@ -3510,21 +3494,21 @@ OdPWBCJXIP"%\HoVd`\ܛ&*ۜ\X抄!dQ\g?h
endstream
endobj
220 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTPEXR+LMSans17-Regular /DescendantFonts [ 769 0 R ] /ToUnicode 768 0 R >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTPEXR+LMSans17-Regular /DescendantFonts [ 771 0 R ] /ToUnicode 770 0 R >>
endobj
-769 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTPEXR+LMSans17-Regular /FontDescriptor 765 0 R /W 764 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+771 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTPEXR+LMSans17-Regular /FontDescriptor 767 0 R /W 766 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-770 0 obj
+772 0 obj
[ 28 [ 459 ] 50 [ 406 ] 66 [ 250 ] 71 [ 576 ] 77 [ 511 ] 81 [ 459 ] 98 [ 359 ] 104 [ 668 354 ] 115 [ 693 485 ] 502 [ 250 ] ]
endobj
-772 0 obj
+774 0 obj
<< /Filter /FlateDecode /Length 27 >>
stream
xc````P`Pdq`P8 @`
endstream
endobj
-773 0 obj
+775 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1830 >>
stream
xuUkPEUm8(wMNmvhvk<<ıc [%@Z]-Bc&P4&'㌧vǞ>NidIj4K*G;s{~("#(n{US#/`ݵ'c18YS@M [ITZ&0r1?L*c]$Gۏ
@@ -3541,10 +3525,10 @@ jqS”M<D'N yѻ?[y~-(15+Z-NaFG.E0N]
!UcN;q]]a-H]:
endstream
endobj
-771 0 obj
-<< /Type /FontDescriptor /FontName /LLXTJU+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 773 0 R /CIDSet 772 0 R >>
+773 0 obj
+<< /Type /FontDescriptor /FontName /LLXTJU+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 775 0 R /CIDSet 774 0 R >>
endobj
-774 0 obj
+776 0 obj
<< /Filter /FlateDecode /Length 425 >>
stream
xڅKk0@p-ٔ`qpI$[Gb"~$Ѐ?sc nv/il6gE +#u(Qj
@@ -3552,12 +3536,12 @@ xڅKk0@p-ٔ`qpI$[Gb"~$Ѐ?sc nv/il6gE
endstream
endobj
219 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /LLXTJU+LMRoman17-Regular /DescendantFonts [ 775 0 R ] /ToUnicode 774 0 R >>
-endobj
-775 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /LLXTJU+LMRoman17-Regular /FontDescriptor 771 0 R /W 770 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /LLXTJU+LMRoman17-Regular /DescendantFonts [ 777 0 R ] /ToUnicode 776 0 R >>
endobj
777 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /LLXTJU+LMRoman17-Regular /FontDescriptor 773 0 R /W 772 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+endobj
+779 0 obj
<< /Length1 1524 /Length2 7052 /Length3 0 /Filter /FlateDecode /Length 8075 >>
stream
xڍwT]6ҩR# ]CI0P3 #1tt
@@ -3589,10 +3573,10 @@ lNI2*ʪ)q2DnWtx8Ӹ©tT[m9=Y2ˆrvM_]
z ˨iB|)hCߤAfhbr@tq+P皓z}ثd[wD}Kρ]~* #
endstream
endobj
-776 0 obj
-<< /Type /FontDescriptor /FontName /FJNSRO+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /arrowhookleft /greater /k /less /n /pi /x) /FontFile 777 0 R >>
+778 0 obj
+<< /Type /FontDescriptor /FontName /FJNSRO+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /arrowhookleft /greater /k /less /n /pi /x) /FontFile 779 0 R >>
endobj
-779 0 obj
+781 0 obj
<< /Length1 1407 /Length2 6115 /Length3 0 /Filter /FlateDecode /Length 7068 >>
stream
xڍtTk.ݩlr
@@ -3621,10 +3605,10 @@ q=48EKhH:aa(?$Oԝ3`Zn[wѳ=ொˉeډ{ۅ٧
-<R׿̫Oi_\|e3*3I( k`yPƸWŢ>AҸx!F߭; ̓!uD#Bx\n=x2BGg_^n33x}`K/;"U 25P&B:s/r*,RO1<'ĀZ~"EiB)8z*0S'G%:N~<+h9FN-RYId h\IbfFF&1}dO5ߴSNiBoDeEqcZ*6Ed%=Ye)1ؾXVaa翚EE~8'B|p+D|*|x@S:~Mzv]ۻO`_x}>ЊQIx{sᦟ?xTQgKݼ6+qduU6QqBݝWSY* X)Z31=AYjBn?8/zڙV~8kќ7Qk:+ ۡ.a^7/;581/! =BpXTq7*KO_3*T[$bdF*z7F7_$+޻ah$ˊ"҇YxB)URT g'U6 IJiv6yl͐zWw]q<E'*xɩ )D:AhÛٗY|CHd.զh>YzaJDr*(NvbpnOpUfBbϊ#YFw8 1R>4Z'@lМ:/wM,VtYz _-H/=4cU}m`@B%nD8_3ʈdZ 䊃ak)!<4"~I ^]z{o}cצx16bvD!dwyIFV'}mzHgLҒZɴ7 WuկZy:r'S<]3i
endstream
endobj
-778 0 obj
-<< /Type /FontDescriptor /FontName /YJUITE+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /k) /FontFile 779 0 R >>
+780 0 obj
+<< /Type /FontDescriptor /FontName /YJUITE+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /k) /FontFile 781 0 R >>
endobj
-781 0 obj
+783 0 obj
<< /Length1 1407 /Length2 6093 /Length3 0 /Filter /FlateDecode /Length 7053 >>
stream
xڍtTk.)85C ]Ҡt"0  1C "H#-% t4"(R"?wZYzzzh
@@ -3657,10 +3641,10 @@ hU$}'P:o~]M*Qߤ;}Xٮ9ـQpX7N@{Ijp$O ypz
}I!Enb)8~j y@_/b܋
endstream
endobj
-780 0 obj
-<< /Type /FontDescriptor /FontName /NAZTKW+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /k) /FontFile 781 0 R >>
+782 0 obj
+<< /Type /FontDescriptor /FontName /NAZTKW+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /k) /FontFile 783 0 R >>
endobj
-783 0 obj
+785 0 obj
<< /Length1 1518 /Length2 7335 /Length3 0 /Filter /FlateDecode /Length 8348 >>
stream
xڍtTo7Hw kLFAIAAB@bHH
@@ -3690,10 +3674,10 @@ U U>} ,4"&و鸳VUY :5
4NC 4J!hKɲX-GL#y AvaS,`7NTk&2xݲR0]]S(EYg:9a[Шvl&ˎEvH
endstream
endobj
-782 0 obj
-<< /Type /FontDescriptor /FontName /NTKKEA+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /equal /one /parenleft /parenright /plus /slash /two /zero) /FontFile 783 0 R >>
+784 0 obj
+<< /Type /FontDescriptor /FontName /NTKKEA+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /equal /one /parenleft /parenright /plus /slash /two /zero) /FontFile 785 0 R >>
endobj
-785 0 obj
+787 0 obj
<< /Length1 1457 /Length2 6431 /Length3 0 /Filter /FlateDecode /Length 7408 >>
stream
xڍvTn6%1VF).1 c
@@ -3732,10 +3716,10 @@ P)m\Ǟ/kq'}D(h.91V@;sڮ.弄
O[D&$%iާ)w{Y6{K#%w'}cnM<I \1G Gur Rh;݊~dܓsIϻ*y'expv$ǖư1H%FUO&y[X]bK(ڕ:=xi|8GZ4#;`%.Y#afcB}3h,燕qU=@>֣'6͈J,ADotn3ӧhJ aHͬ:҅b &kߤ #a7P{O<^_lh!:$gah,tK3kNsK@e8*X@^x
endstream
endobj
-784 0 obj
-<< /Type /FontDescriptor /FontName /JLMYRF+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /one /parenleft /parenright /plus /two) /FontFile 785 0 R >>
+786 0 obj
+<< /Type /FontDescriptor /FontName /JLMYRF+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /one /parenleft /parenright /plus /two) /FontFile 787 0 R >>
endobj
-787 0 obj
+789 0 obj
<< /Length1 1424 /Length2 6044 /Length3 0 /Filter /FlateDecode /Length 7012 >>
stream
xڍxT6 MW5Aj {/#(HGt
@@ -3762,10 +3746,10 @@ R^D/z<s[Y+y33NVYU
}$Y}1x`6IQࡪ]\QѢb\^)#z!?*5U}v\t?"n-g!D8΁X;[rewɏ-rgc4X
endstream
endobj
-786 0 obj
-<< /Type /FontDescriptor /FontName /KAYNOZ+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /arrowright /minus) /FontFile 787 0 R >>
+788 0 obj
+<< /Type /FontDescriptor /FontName /KAYNOZ+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /arrowright /minus) /FontFile 789 0 R >>
endobj
-789 0 obj
+791 0 obj
<< /Length1 1393 /Length2 5904 /Length3 0 /Filter /FlateDecode /Length 6854 >>
stream
xڍtTk.] 
@@ -3794,50 +3778,50 @@ p\g4=}M%:{(V1p]J9»$ʃ|GBHCe|/#>I<
7fTcVkY\5Ã-{e-=?+
endstream
endobj
-788 0 obj
-<< /Type /FontDescriptor /FontName /PXBGHL+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /minus) /FontFile 789 0 R >>
+790 0 obj
+<< /Type /FontDescriptor /FontName /PXBGHL+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /minus) /FontFile 791 0 R >>
endobj
234 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /FJNSRO+CMMI10 /FontDescriptor 776 0 R /FirstChar 25 /LastChar 120 /Widths 690 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /FJNSRO+CMMI10 /FontDescriptor 778 0 R /FirstChar 25 /LastChar 120 /Widths 692 0 R >>
endobj
362 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /YJUITE+CMMI5 /FontDescriptor 778 0 R /FirstChar 107 /LastChar 107 /Widths 614 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /YJUITE+CMMI5 /FontDescriptor 780 0 R /FirstChar 107 /LastChar 107 /Widths 616 0 R >>
endobj
363 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /NAZTKW+CMMI7 /FontDescriptor 780 0 R /FirstChar 107 /LastChar 107 /Widths 613 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /NAZTKW+CMMI7 /FontDescriptor 782 0 R /FirstChar 107 /LastChar 107 /Widths 615 0 R >>
endobj
233 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /NTKKEA+CMR10 /FontDescriptor 782 0 R /FirstChar 40 /LastChar 61 /Widths 691 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /NTKKEA+CMR10 /FontDescriptor 784 0 R /FirstChar 40 /LastChar 61 /Widths 693 0 R >>
endobj
352 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /JLMYRF+CMR7 /FontDescriptor 784 0 R /FirstChar 40 /LastChar 50 /Widths 616 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /JLMYRF+CMR7 /FontDescriptor 786 0 R /FirstChar 40 /LastChar 50 /Widths 618 0 R >>
endobj
327 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /KAYNOZ+CMSY10 /FontDescriptor 786 0 R /FirstChar 0 /LastChar 33 /Widths 617 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /KAYNOZ+CMSY10 /FontDescriptor 788 0 R /FirstChar 0 /LastChar 33 /Widths 619 0 R >>
endobj
361 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /PXBGHL+CMSY7 /FontDescriptor 788 0 R /FirstChar 0 /LastChar 0 /Widths 615 0 R >>
+<< /Type /Font /Subtype /Type1 /BaseFont /PXBGHL+CMSY7 /FontDescriptor 790 0 R /FirstChar 0 /LastChar 0 /Widths 617 0 R >>
endobj
240 0 obj
-<< /Type /Pages /Parent 790 0 R /Count 10 /Kids [ 213 0 R 247 0 R 256 0 R 266 0 R 282 0 R 289 0 R 297 0 R 304 0 R 311 0 R 315 0 R ] >>
+<< /Type /Pages /Parent 792 0 R /Count 10 /Kids [ 213 0 R 247 0 R 256 0 R 266 0 R 280 0 R 289 0 R 297 0 R 304 0 R 311 0 R 315 0 R ] >>
endobj
322 0 obj
-<< /Type /Pages /Parent 790 0 R /Count 10 /Kids [ 319 0 R 324 0 R 329 0 R 335 0 R 344 0 R 349 0 R 354 0 R 358 0 R 365 0 R 374 0 R ] >>
+<< /Type /Pages /Parent 792 0 R /Count 10 /Kids [ 319 0 R 324 0 R 329 0 R 335 0 R 344 0 R 349 0 R 354 0 R 358 0 R 365 0 R 372 0 R ] >>
endobj
382 0 obj
-<< /Type /Pages /Parent 790 0 R /Count 10 /Kids [ 379 0 R 387 0 R 395 0 R 403 0 R 411 0 R 415 0 R 419 0 R 424 0 R 429 0 R 433 0 R ] >>
+<< /Type /Pages /Parent 792 0 R /Count 10 /Kids [ 379 0 R 387 0 R 395 0 R 403 0 R 411 0 R 415 0 R 419 0 R 424 0 R 429 0 R 433 0 R ] >>
endobj
440 0 obj
-<< /Type /Pages /Parent 790 0 R /Count 6 /Kids [ 437 0 R 444 0 R 450 0 R 523 0 R 565 0 R 585 0 R ] >>
+<< /Type /Pages /Parent 792 0 R /Count 6 /Kids [ 437 0 R 444 0 R 450 0 R 525 0 R 567 0 R 587 0 R ] >>
endobj
-790 0 obj
+792 0 obj
<< /Type /Pages /Count 36 /Kids [ 240 0 R 322 0 R 382 0 R 440 0 R ] >>
endobj
-791 0 obj
+793 0 obj
<< /Type /Outlines /First 6 0 R /Last 210 0 R /Count 11 >>
endobj
210 0 obj
-<< /Title 211 0 R /A 208 0 R /Parent 791 0 R /Prev 182 0 R >>
+<< /Title 211 0 R /A 208 0 R /Parent 793 0 R /Prev 182 0 R >>
endobj
206 0 obj
<< /Title 207 0 R /A 204 0 R /Parent 182 0 R /Prev 202 0 R >>
@@ -3858,7 +3842,7 @@ endobj
<< /Title 187 0 R /A 184 0 R /Parent 182 0 R /Next 190 0 R >>
endobj
182 0 obj
-<< /Title 183 0 R /A 180 0 R /Parent 791 0 R /Prev 170 0 R /Next 210 0 R /First 186 0 R /Last 206 0 R /Count -6 >>
+<< /Title 183 0 R /A 180 0 R /Parent 793 0 R /Prev 170 0 R /Next 210 0 R /First 186 0 R /Last 206 0 R /Count -6 >>
endobj
178 0 obj
<< /Title 179 0 R /A 176 0 R /Parent 170 0 R /Prev 174 0 R >>
@@ -3867,7 +3851,7 @@ endobj
<< /Title 175 0 R /A 172 0 R /Parent 170 0 R /Next 178 0 R >>
endobj
170 0 obj
-<< /Title 171 0 R /A 168 0 R /Parent 791 0 R /Prev 150 0 R /Next 182 0 R /First 174 0 R /Last 178 0 R /Count -2 >>
+<< /Title 171 0 R /A 168 0 R /Parent 793 0 R /Prev 150 0 R /Next 182 0 R /First 174 0 R /Last 178 0 R /Count -2 >>
endobj
166 0 obj
<< /Title 167 0 R /A 164 0 R /Parent 150 0 R /Prev 162 0 R >>
@@ -3882,10 +3866,10 @@ endobj
<< /Title 155 0 R /A 152 0 R /Parent 150 0 R /Next 158 0 R >>
endobj
150 0 obj
-<< /Title 151 0 R /A 148 0 R /Parent 791 0 R /Prev 146 0 R /Next 170 0 R /First 154 0 R /Last 166 0 R /Count -4 >>
+<< /Title 151 0 R /A 148 0 R /Parent 793 0 R /Prev 146 0 R /Next 170 0 R /First 154 0 R /Last 166 0 R /Count -4 >>
endobj
146 0 obj
-<< /Title 147 0 R /A 144 0 R /Parent 791 0 R /Prev 66 0 R /Next 150 0 R >>
+<< /Title 147 0 R /A 144 0 R /Parent 793 0 R /Prev 66 0 R /Next 150 0 R >>
endobj
142 0 obj
<< /Title 143 0 R /A 140 0 R /Parent 66 0 R /Prev 138 0 R >>
@@ -3945,10 +3929,10 @@ endobj
<< /Title 71 0 R /A 68 0 R /Parent 66 0 R /Next 82 0 R /First 74 0 R /Last 78 0 R /Count -2 >>
endobj
66 0 obj
-<< /Title 67 0 R /A 64 0 R /Parent 791 0 R /Prev 62 0 R /Next 146 0 R /First 70 0 R /Last 142 0 R /Count -7 >>
+<< /Title 67 0 R /A 64 0 R /Parent 793 0 R /Prev 62 0 R /Next 146 0 R /First 70 0 R /Last 142 0 R /Count -7 >>
endobj
62 0 obj
-<< /Title 63 0 R /A 60 0 R /Parent 791 0 R /Prev 34 0 R /Next 66 0 R >>
+<< /Title 63 0 R /A 60 0 R /Parent 793 0 R /Prev 34 0 R /Next 66 0 R >>
endobj
58 0 obj
<< /Title 59 0 R /A 56 0 R /Parent 34 0 R /Prev 42 0 R >>
@@ -3969,7 +3953,7 @@ endobj
<< /Title 39 0 R /A 36 0 R /Parent 34 0 R /Next 42 0 R >>
endobj
34 0 obj
-<< /Title 35 0 R /A 32 0 R /Parent 791 0 R /Prev 14 0 R /Next 62 0 R /First 38 0 R /Last 58 0 R /Count -3 >>
+<< /Title 35 0 R /A 32 0 R /Parent 793 0 R /Prev 14 0 R /Next 62 0 R /First 38 0 R /Last 58 0 R /Count -3 >>
endobj
30 0 obj
<< /Title 31 0 R /A 28 0 R /Parent 14 0 R /Prev 26 0 R >>
@@ -3984,838 +3968,840 @@ endobj
<< /Title 19 0 R /A 16 0 R /Parent 14 0 R /Next 22 0 R >>
endobj
14 0 obj
-<< /Title 15 0 R /A 12 0 R /Parent 791 0 R /Prev 10 0 R /Next 34 0 R /First 18 0 R /Last 30 0 R /Count -4 >>
+<< /Title 15 0 R /A 12 0 R /Parent 793 0 R /Prev 10 0 R /Next 34 0 R /First 18 0 R /Last 30 0 R /Count -4 >>
endobj
10 0 obj
-<< /Title 11 0 R /A 8 0 R /Parent 791 0 R /Prev 6 0 R /Next 14 0 R >>
+<< /Title 11 0 R /A 8 0 R /Parent 793 0 R /Prev 6 0 R /Next 14 0 R >>
endobj
6 0 obj
-<< /Title 7 0 R /A 4 0 R /Parent 791 0 R /Next 10 0 R >>
-endobj
-792 0 obj
-<< /Names [ (Doc-Start) 218 0 R (page.1) 217 0 R (page.10) 317 0 R (page.11) 321 0 R (page.12) 326 0 R (page.13) 331 0 R (page.14) 337 0 R (page.15) 346 0 R (page.16) 351 0 R (page.17) 356 0 R (page.18) 360 0 R (page.19) 367 0 R (page.2) 249 0 R (page.20) 376 0 R (page.21) 381 0 R (page.22) 389 0 R (page.23) 397 0 R (page.24) 405 0 R (page.25) 413 0 R (page.26) 417 0 R (page.27) 421 0 R (page.28) 426 0 R (page.29) 431 0 R (page.3) 258 0 R (page.30) 435 0 R (page.31) 439 0 R (page.32) 446 0 R (page.33) 452 0 R (page.34) 525 0 R (page.35) 567 0 R (page.36) 587 0 R (page.4) 268 0 R ] /Limits [ (Doc-Start) (page.4) ] >>
-endobj
-793 0 obj
-<< /Names [ (page.5) 284 0 R (page.6) 291 0 R (page.7) 299 0 R (page.8) 306 0 R (page.9) 313 0 R (piton:passe) 308 0 R (piton:transpose) 307 0 R (section*.1) 209 0 R (section.1) 5 0 R (section.10) 181 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 33 0 R (section.5) 61 0 R (section.6) 65 0 R (section.7) 145 0 R (section.8) 149 0 R (section.9) 169 0 R (subsection.10.1) 185 0 R (subsection.10.2) 189 0 R (subsection.10.3) 193 0 R (subsection.10.4) 197 0 R (subsection.10.5) 201 0 R (subsection.10.6) 205 0 R (subsection.3.1) 17 0 R (subsection.3.2) 21 0 R (subsection.3.3) 25 0 R (subsection.3.4) 29 0 R (subsection.4.1) 37 0 R (subsection.4.2) 41 0 R (subsection.4.3) 57 0 R (subsection.6.1) 69 0 R ] /Limits [ (page.5) (subsection.6.1) ] >>
+<< /Title 7 0 R /A 4 0 R /Parent 793 0 R /Next 10 0 R >>
endobj
794 0 obj
-<< /Names [ (subsection.6.2) 81 0 R (subsection.6.3) 93 0 R (subsection.6.4) 97 0 R (subsection.6.5) 121 0 R (subsection.6.6) 137 0 R (subsection.6.7) 141 0 R (subsection.8.1) 153 0 R (subsection.8.2) 157 0 R (subsection.8.3) 161 0 R (subsection.8.4) 165 0 R (subsection.9.1) 173 0 R (subsection.9.2) 177 0 R (subsubsection.4.2.1) 45 0 R (subsubsection.4.2.2) 49 0 R (subsubsection.4.2.3) 53 0 R (subsubsection.6.1.1) 73 0 R (subsubsection.6.1.2) 77 0 R (subsubsection.6.2.1) 85 0 R (subsubsection.6.2.2) 89 0 R (subsubsection.6.4.1) 101 0 R (subsubsection.6.4.2) 105 0 R (subsubsection.6.4.3) 109 0 R (subsubsection.6.4.4) 113 0 R (subsubsection.6.4.5) 117 0 R (subsubsection.6.5.1) 125 0 R (subsubsection.6.5.2) 129 0 R (subsubsection.6.5.3) 133 0 R ] /Limits [ (subsection.6.2) (subsubsection.6.5.3) ] >>
+<< /Names [ (Doc-Start) 218 0 R (page.1) 217 0 R (page.10) 317 0 R (page.11) 321 0 R (page.12) 326 0 R (page.13) 331 0 R (page.14) 337 0 R (page.15) 346 0 R (page.16) 351 0 R (page.17) 356 0 R (page.18) 360 0 R (page.19) 367 0 R (page.2) 249 0 R (page.20) 374 0 R (page.21) 381 0 R (page.22) 389 0 R (page.23) 397 0 R (page.24) 405 0 R (page.25) 413 0 R (page.26) 417 0 R (page.27) 421 0 R (page.28) 426 0 R (page.29) 431 0 R (page.3) 258 0 R (page.30) 435 0 R (page.31) 439 0 R (page.32) 446 0 R (page.33) 452 0 R (page.34) 527 0 R (page.35) 569 0 R (page.36) 589 0 R (page.4) 268 0 R ] /Limits [ (Doc-Start) (page.4) ] >>
endobj
795 0 obj
-<< /Kids [ 792 0 R 793 0 R 794 0 R ] /Limits [ (Doc-Start) (subsubsection.6.5.3) ] >>
+<< /Names [ (page.5) 282 0 R (page.6) 291 0 R (page.7) 299 0 R (page.8) 306 0 R (page.9) 313 0 R (piton:passe) 308 0 R (piton:transpose) 307 0 R (section*.1) 209 0 R (section.1) 5 0 R (section.10) 181 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 33 0 R (section.5) 61 0 R (section.6) 65 0 R (section.7) 145 0 R (section.8) 149 0 R (section.9) 169 0 R (subsection.10.1) 185 0 R (subsection.10.2) 189 0 R (subsection.10.3) 193 0 R (subsection.10.4) 197 0 R (subsection.10.5) 201 0 R (subsection.10.6) 205 0 R (subsection.3.1) 17 0 R (subsection.3.2) 21 0 R (subsection.3.3) 25 0 R (subsection.3.4) 29 0 R (subsection.4.1) 37 0 R (subsection.4.2) 41 0 R (subsection.4.3) 57 0 R (subsection.6.1) 69 0 R ] /Limits [ (page.5) (subsection.6.1) ] >>
endobj
796 0 obj
-<< /Dests 795 0 R >>
+<< /Names [ (subsection.6.2) 81 0 R (subsection.6.3) 93 0 R (subsection.6.4) 97 0 R (subsection.6.5) 121 0 R (subsection.6.6) 137 0 R (subsection.6.7) 141 0 R (subsection.8.1) 153 0 R (subsection.8.2) 157 0 R (subsection.8.3) 161 0 R (subsection.8.4) 165 0 R (subsection.9.1) 173 0 R (subsection.9.2) 177 0 R (subsubsection.4.2.1) 45 0 R (subsubsection.4.2.2) 49 0 R (subsubsection.4.2.3) 53 0 R (subsubsection.6.1.1) 73 0 R (subsubsection.6.1.2) 77 0 R (subsubsection.6.2.1) 85 0 R (subsubsection.6.2.2) 89 0 R (subsubsection.6.4.1) 101 0 R (subsubsection.6.4.2) 105 0 R (subsubsection.6.4.3) 109 0 R (subsubsection.6.4.4) 113 0 R (subsubsection.6.4.5) 117 0 R (subsubsection.6.5.1) 125 0 R (subsubsection.6.5.2) 129 0 R (subsubsection.6.5.3) 133 0 R ] /Limits [ (subsection.6.2) (subsubsection.6.5.3) ] >>
endobj
797 0 obj
-<< /Type /Catalog /Pages 790 0 R /Outlines 791 0 R /Names 796 0 R /PageMode/UseOutlines /OpenAction 212 0 R >>
+<< /Kids [ 794 0 R 795 0 R 796 0 R ] /Limits [ (Doc-Start) (subsubsection.6.5.3) ] >>
endobj
798 0 obj
-<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000p\000i\000t\000o\000n)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240523184955+02'00') /ModDate (D:20240523184955+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
+<< /Dests 797 0 R >>
+endobj
+799 0 obj
+<< /Type /Catalog /Pages 792 0 R /Outlines 793 0 R /Names 798 0 R /PageMode/UseOutlines /OpenAction 212 0 R >>
+endobj
+800 0 obj
+<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000p\000i\000t\000o\000n)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240730111345+02'00') /ModDate (D:20240730111345+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
endobj
xref
-0 799
+0 801
0000000000 65535 f
-0000174798 00000 n
-0000174843 00000 n
-0000174863 00000 n
+0000176256 00000 n
+0000176301 00000 n
+0000176321 00000 n
0000000020 00000 n
-0000016546 00000 n
-0000410266 00000 n
+0000016545 00000 n
+0000412035 00000 n
0000000065 00000 n
0000000155 00000 n
-0000021159 00000 n
-0000410180 00000 n
+0000021157 00000 n
+0000411949 00000 n
0000000200 00000 n
0000000288 00000 n
-0000021219 00000 n
-0000410055 00000 n
+0000021217 00000 n
+0000411824 00000 n
0000000334 00000 n
0000000498 00000 n
-0000021280 00000 n
-0000409981 00000 n
+0000021278 00000 n
+0000411750 00000 n
0000000549 00000 n
0000000663 00000 n
-0000021341 00000 n
-0000409894 00000 n
+0000021339 00000 n
+0000411663 00000 n
0000000714 00000 n
0000000873 00000 n
-0000021401 00000 n
-0000409807 00000 n
+0000021399 00000 n
+0000411576 00000 n
0000000924 00000 n
0000001304 00000 n
-0000027058 00000 n
-0000409733 00000 n
+0000027054 00000 n
+0000411502 00000 n
0000001355 00000 n
0000001561 00000 n
-0000033205 00000 n
-0000409608 00000 n
+0000033202 00000 n
+0000411377 00000 n
0000001607 00000 n
0000001715 00000 n
-0000033266 00000 n
-0000409534 00000 n
+0000033263 00000 n
+0000411303 00000 n
0000001766 00000 n
0000002000 00000 n
-0000044746 00000 n
-0000409410 00000 n
+0000044832 00000 n
+0000411179 00000 n
0000002051 00000 n
0000002132 00000 n
-0000044807 00000 n
-0000409336 00000 n
+0000044893 00000 n
+0000411105 00000 n
0000002188 00000 n
0000002297 00000 n
-0000049531 00000 n
-0000409249 00000 n
+0000049761 00000 n
+0000411018 00000 n
0000002353 00000 n
0000002510 00000 n
-0000054301 00000 n
-0000409175 00000 n
+0000054538 00000 n
+0000410944 00000 n
0000002566 00000 n
0000002705 00000 n
-0000054490 00000 n
-0000409101 00000 n
+0000054727 00000 n
+0000410870 00000 n
0000002756 00000 n
0000002981 00000 n
-0000058305 00000 n
-0000409013 00000 n
+0000058545 00000 n
+0000410782 00000 n
0000003027 00000 n
0000003377 00000 n
-0000067463 00000 n
-0000408886 00000 n
+0000067707 00000 n
+0000410655 00000 n
0000003423 00000 n
0000003580 00000 n
-0000067524 00000 n
-0000408775 00000 n
+0000067768 00000 n
+0000410544 00000 n
0000003631 00000 n
0000003829 00000 n
-0000067585 00000 n
-0000408701 00000 n
+0000067829 00000 n
+0000410470 00000 n
0000003885 00000 n
0000004004 00000 n
-0000067646 00000 n
-0000408627 00000 n
+0000067890 00000 n
+0000410396 00000 n
0000004060 00000 n
0000004184 00000 n
-0000072024 00000 n
-0000408503 00000 n
+0000072268 00000 n
+0000410272 00000 n
0000004235 00000 n
0000004450 00000 n
-0000072085 00000 n
-0000408429 00000 n
+0000072329 00000 n
+0000410198 00000 n
0000004506 00000 n
0000004722 00000 n
-0000072146 00000 n
-0000408355 00000 n
+0000072390 00000 n
+0000410124 00000 n
0000004778 00000 n
0000004950 00000 n
-0000079598 00000 n
-0000408268 00000 n
+0000079844 00000 n
+0000410037 00000 n
0000005001 00000 n
0000005211 00000 n
-0000084643 00000 n
-0000408141 00000 n
+0000084889 00000 n
+0000409910 00000 n
0000005262 00000 n
0000005437 00000 n
-0000084704 00000 n
-0000408063 00000 n
+0000084950 00000 n
+0000409832 00000 n
0000005494 00000 n
0000005655 00000 n
-0000084766 00000 n
-0000407971 00000 n
+0000085012 00000 n
+0000409740 00000 n
0000005712 00000 n
0000005866 00000 n
-0000088524 00000 n
-0000407879 00000 n
+0000088770 00000 n
+0000409648 00000 n
0000005923 00000 n
0000006097 00000 n
-0000088586 00000 n
-0000407787 00000 n
+0000088832 00000 n
+0000409556 00000 n
0000006154 00000 n
0000006303 00000 n
-0000092320 00000 n
-0000407709 00000 n
+0000092566 00000 n
+0000409478 00000 n
0000006360 00000 n
0000006534 00000 n
-0000096955 00000 n
-0000407579 00000 n
+0000097583 00000 n
+0000409348 00000 n
0000006586 00000 n
0000006797 00000 n
-0000097017 00000 n
-0000407500 00000 n
+0000097645 00000 n
+0000409269 00000 n
0000006854 00000 n
0000007149 00000 n
-0000097079 00000 n
-0000407407 00000 n
+0000097707 00000 n
+0000409176 00000 n
0000007206 00000 n
0000007570 00000 n
-0000100552 00000 n
-0000407328 00000 n
+0000101338 00000 n
+0000409097 00000 n
0000007627 00000 n
0000008011 00000 n
-0000105443 00000 n
-0000407236 00000 n
+0000105862 00000 n
+0000409005 00000 n
0000008063 00000 n
0000008389 00000 n
-0000105505 00000 n
-0000407158 00000 n
+0000105923 00000 n
+0000408927 00000 n
0000008441 00000 n
0000008525 00000 n
-0000105566 00000 n
-0000407066 00000 n
+0000105985 00000 n
+0000408835 00000 n
0000008572 00000 n
0000008738 00000 n
-0000109433 00000 n
-0000406934 00000 n
+0000110531 00000 n
+0000408703 00000 n
0000008785 00000 n
0000008854 00000 n
-0000109495 00000 n
-0000406855 00000 n
+0000110593 00000 n
+0000408624 00000 n
0000008906 00000 n
0000009059 00000 n
-0000109557 00000 n
-0000406762 00000 n
+0000110655 00000 n
+0000408531 00000 n
0000009111 00000 n
0000009309 00000 n
-0000113833 00000 n
-0000406669 00000 n
+0000114932 00000 n
+0000408438 00000 n
0000009361 00000 n
0000009514 00000 n
-0000118193 00000 n
-0000406590 00000 n
+0000119291 00000 n
+0000408359 00000 n
0000009566 00000 n
0000009773 00000 n
-0000121950 00000 n
-0000406458 00000 n
+0000123048 00000 n
+0000408227 00000 n
0000009820 00000 n
0000009980 00000 n
-0000122012 00000 n
-0000406379 00000 n
+0000123110 00000 n
+0000408148 00000 n
0000010032 00000 n
0000010230 00000 n
-0000125396 00000 n
-0000406300 00000 n
+0000126494 00000 n
+0000408069 00000 n
0000010282 00000 n
0000010607 00000 n
-0000133314 00000 n
-0000406168 00000 n
+0000134410 00000 n
+0000407937 00000 n
0000010655 00000 n
0000010970 00000 n
-0000133376 00000 n
-0000406089 00000 n
+0000134472 00000 n
+0000407858 00000 n
0000011023 00000 n
0000011143 00000 n
-0000136945 00000 n
-0000405996 00000 n
+0000138041 00000 n
+0000407765 00000 n
0000011196 00000 n
0000011311 00000 n
-0000140569 00000 n
-0000405903 00000 n
+0000141665 00000 n
+0000407672 00000 n
0000011364 00000 n
0000011516 00000 n
-0000144143 00000 n
-0000405810 00000 n
+0000145239 00000 n
+0000407579 00000 n
0000011569 00000 n
0000011674 00000 n
-0000146397 00000 n
-0000405717 00000 n
+0000147493 00000 n
+0000407486 00000 n
0000011727 00000 n
0000011868 00000 n
-0000148431 00000 n
-0000405638 00000 n
+0000149527 00000 n
+0000407407 00000 n
0000011921 00000 n
0000012244 00000 n
-0000161740 00000 n
-0000405559 00000 n
+0000163198 00000 n
+0000407328 00000 n
0000012292 00000 n
0000012346 00000 n
-0000016066 00000 n
-0000016232 00000 n
-0000016606 00000 n
+0000016065 00000 n
+0000016231 00000 n
+0000016605 00000 n
0000012398 00000 n
-0000016422 00000 n
-0000016484 00000 n
-0000349089 00000 n
-0000345798 00000 n
-0000343694 00000 n
-0000339985 00000 n
-0000336651 00000 n
-0000334220 00000 n
-0000327942 00000 n
-0000325841 00000 n
-0000317326 00000 n
-0000306201 00000 n
-0000302352 00000 n
-0000299261 00000 n
-0000288914 00000 n
-0000285074 00000 n
-0000404254 00000 n
-0000403822 00000 n
-0000278773 00000 n
-0000276656 00000 n
-0000267286 00000 n
-0000264058 00000 n
-0000260037 00000 n
-0000404819 00000 n
-0000016203 00000 n
-0000020940 00000 n
-0000020786 00000 n
-0000026360 00000 n
-0000026519 00000 n
-0000021461 00000 n
-0000020612 00000 n
-0000016990 00000 n
-0000021097 00000 n
-0000252440 00000 n
-0000250663 00000 n
-0000020749 00000 n
-0000026678 00000 n
-0000026837 00000 n
-0000027119 00000 n
-0000026170 00000 n
-0000021702 00000 n
-0000026996 00000 n
-0000241927 00000 n
-0000026307 00000 n
-0000032841 00000 n
-0000032992 00000 n
-0000038843 00000 n
-0000039002 00000 n
-0000033326 00000 n
-0000032667 00000 n
-0000027360 00000 n
-0000033143 00000 n
-0000235307 00000 n
-0000032804 00000 n
-0000039161 00000 n
-0000039320 00000 n
-0000039478 00000 n
-0000039636 00000 n
-0000039795 00000 n
-0000039959 00000 n
-0000040123 00000 n
-0000040280 00000 n
-0000044359 00000 n
-0000044521 00000 n
-0000040499 00000 n
-0000038605 00000 n
-0000033606 00000 n
-0000040437 00000 n
-0000232493 00000 n
-0000038742 00000 n
-0000044200 00000 n
-0000044868 00000 n
-0000044018 00000 n
-0000040740 00000 n
-0000044684 00000 n
-0000229217 00000 n
-0000044155 00000 n
-0000049159 00000 n
-0000049314 00000 n
-0000049591 00000 n
-0000048985 00000 n
-0000045122 00000 n
-0000049469 00000 n
-0000220502 00000 n
-0000049122 00000 n
-0000054079 00000 n
-0000054551 00000 n
-0000053913 00000 n
-0000049845 00000 n
-0000054239 00000 n
-0000054362 00000 n
-0000054426 00000 n
-0000054050 00000 n
-0000058366 00000 n
-0000058122 00000 n
-0000054857 00000 n
-0000058243 00000 n
-0000062599 00000 n
-0000062416 00000 n
-0000058607 00000 n
-0000062537 00000 n
-0000067707 00000 n
-0000067280 00000 n
-0000062840 00000 n
-0000067401 00000 n
-0000404971 00000 n
-0000072207 00000 n
-0000071841 00000 n
-0000067961 00000 n
-0000071962 00000 n
-0000404537 00000 n
-0000075778 00000 n
-0000075595 00000 n
-0000072448 00000 n
-0000075716 00000 n
-0000079220 00000 n
-0000079378 00000 n
-0000079659 00000 n
-0000079046 00000 n
-0000075993 00000 n
-0000079536 00000 n
-0000079183 00000 n
-0000083945 00000 n
-0000084104 00000 n
-0000084263 00000 n
-0000084422 00000 n
-0000084828 00000 n
-0000083755 00000 n
-0000079900 00000 n
-0000084581 00000 n
-0000083892 00000 n
-0000088648 00000 n
-0000088341 00000 n
-0000085082 00000 n
-0000088462 00000 n
-0000404396 00000 n
-0000092382 00000 n
-0000092137 00000 n
-0000088876 00000 n
-0000092258 00000 n
-0000097141 00000 n
-0000096772 00000 n
-0000092610 00000 n
-0000096893 00000 n
-0000404679 00000 n
-0000403966 00000 n
-0000404110 00000 n
-0000100613 00000 n
-0000100369 00000 n
-0000097486 00000 n
-0000100490 00000 n
-0000104895 00000 n
-0000105054 00000 n
-0000105218 00000 n
-0000109058 00000 n
-0000109217 00000 n
-0000105628 00000 n
-0000104713 00000 n
-0000100802 00000 n
-0000105381 00000 n
-0000104850 00000 n
-0000109619 00000 n
-0000108884 00000 n
-0000105817 00000 n
-0000109371 00000 n
-0000405123 00000 n
-0000109021 00000 n
-0000113453 00000 n
-0000113612 00000 n
-0000113895 00000 n
-0000113279 00000 n
-0000109821 00000 n
-0000113771 00000 n
-0000113416 00000 n
-0000117634 00000 n
-0000117793 00000 n
-0000117952 00000 n
-0000118255 00000 n
-0000117452 00000 n
-0000114097 00000 n
-0000118131 00000 n
-0000216650 00000 n
-0000117589 00000 n
-0000121580 00000 n
-0000121734 00000 n
-0000122074 00000 n
-0000121406 00000 n
-0000118522 00000 n
-0000121888 00000 n
-0000214584 00000 n
-0000202423 00000 n
-0000187696 00000 n
-0000121543 00000 n
-0000125458 00000 n
-0000125213 00000 n
-0000122315 00000 n
-0000125334 00000 n
-0000128121 00000 n
-0000127938 00000 n
-0000125673 00000 n
-0000128059 00000 n
-0000129032 00000 n
-0000128849 00000 n
-0000128323 00000 n
-0000128970 00000 n
-0000133074 00000 n
-0000133438 00000 n
-0000132908 00000 n
-0000129182 00000 n
-0000133252 00000 n
-0000133045 00000 n
-0000137007 00000 n
-0000136762 00000 n
-0000133666 00000 n
-0000136883 00000 n
-0000140631 00000 n
-0000140386 00000 n
-0000137170 00000 n
-0000140507 00000 n
-0000144205 00000 n
-0000143960 00000 n
-0000140820 00000 n
-0000144081 00000 n
-0000405275 00000 n
-0000146017 00000 n
-0000146176 00000 n
-0000146459 00000 n
-0000145843 00000 n
-0000144381 00000 n
-0000146335 00000 n
-0000145980 00000 n
-0000148216 00000 n
-0000148493 00000 n
-0000148050 00000 n
-0000146622 00000 n
-0000148369 00000 n
-0000148187 00000 n
-0000151403 00000 n
-0000151552 00000 n
-0000151703 00000 n
-0000151855 00000 n
-0000152007 00000 n
-0000152159 00000 n
-0000152311 00000 n
-0000152463 00000 n
-0000152614 00000 n
-0000152766 00000 n
-0000152917 00000 n
-0000153068 00000 n
-0000153220 00000 n
-0000153371 00000 n
-0000153522 00000 n
-0000153674 00000 n
-0000153826 00000 n
-0000153978 00000 n
-0000154130 00000 n
-0000154282 00000 n
-0000154434 00000 n
-0000154585 00000 n
-0000154737 00000 n
-0000154889 00000 n
-0000155041 00000 n
-0000155193 00000 n
-0000155345 00000 n
-0000155496 00000 n
-0000155646 00000 n
-0000155797 00000 n
-0000155947 00000 n
-0000156098 00000 n
-0000156249 00000 n
-0000156398 00000 n
-0000156548 00000 n
-0000156698 00000 n
-0000156846 00000 n
-0000156996 00000 n
-0000157148 00000 n
-0000157299 00000 n
-0000157450 00000 n
-0000157599 00000 n
-0000157750 00000 n
-0000157902 00000 n
-0000158054 00000 n
-0000158205 00000 n
-0000158355 00000 n
-0000158506 00000 n
-0000158657 00000 n
-0000158808 00000 n
-0000158960 00000 n
-0000159111 00000 n
-0000159262 00000 n
-0000159412 00000 n
-0000159564 00000 n
-0000159716 00000 n
-0000159868 00000 n
-0000160018 00000 n
-0000160169 00000 n
-0000160320 00000 n
-0000160472 00000 n
-0000160624 00000 n
-0000160776 00000 n
-0000160926 00000 n
-0000161077 00000 n
-0000161229 00000 n
-0000161378 00000 n
-0000161527 00000 n
-0000161802 00000 n
-0000150701 00000 n
-0000148656 00000 n
-0000161678 00000 n
-0000150838 00000 n
-0000164863 00000 n
-0000165016 00000 n
-0000165169 00000 n
-0000165320 00000 n
-0000165478 00000 n
-0000165635 00000 n
-0000165793 00000 n
-0000165950 00000 n
-0000166103 00000 n
-0000166261 00000 n
-0000166418 00000 n
-0000166582 00000 n
-0000166745 00000 n
-0000166909 00000 n
-0000167067 00000 n
-0000167219 00000 n
-0000167372 00000 n
-0000167530 00000 n
-0000167694 00000 n
-0000167858 00000 n
-0000168016 00000 n
-0000168180 00000 n
-0000168343 00000 n
-0000168501 00000 n
-0000168658 00000 n
-0000168821 00000 n
-0000168984 00000 n
-0000169147 00000 n
-0000169310 00000 n
+0000016421 00000 n
+0000016483 00000 n
+0000350858 00000 n
+0000347567 00000 n
+0000345463 00000 n
+0000341443 00000 n
+0000338109 00000 n
+0000335678 00000 n
+0000329400 00000 n
+0000327299 00000 n
+0000318784 00000 n
+0000307659 00000 n
+0000303810 00000 n
+0000300719 00000 n
+0000290372 00000 n
+0000286532 00000 n
+0000406023 00000 n
+0000405591 00000 n
+0000280231 00000 n
+0000278114 00000 n
+0000268744 00000 n
+0000265516 00000 n
+0000261495 00000 n
+0000406588 00000 n
+0000016202 00000 n
+0000020938 00000 n
+0000020784 00000 n
+0000026356 00000 n
+0000026515 00000 n
+0000021459 00000 n
+0000020610 00000 n
+0000016989 00000 n
+0000021095 00000 n
+0000253898 00000 n
+0000252121 00000 n
+0000020747 00000 n
+0000026674 00000 n
+0000026833 00000 n
+0000027115 00000 n
+0000026166 00000 n
+0000021700 00000 n
+0000026992 00000 n
+0000243385 00000 n
+0000026303 00000 n
+0000032838 00000 n
+0000032989 00000 n
+0000038737 00000 n
+0000038896 00000 n
+0000033323 00000 n
+0000032664 00000 n
+0000027356 00000 n
+0000033140 00000 n
+0000236765 00000 n
+0000032801 00000 n
+0000039055 00000 n
+0000039214 00000 n
+0000039372 00000 n
+0000039530 00000 n
+0000039689 00000 n
+0000039852 00000 n
+0000040015 00000 n
+0000040173 00000 n
+0000040393 00000 n
+0000038499 00000 n
+0000033603 00000 n
+0000040331 00000 n
+0000233951 00000 n
+0000038636 00000 n
+0000044449 00000 n
+0000044609 00000 n
+0000044290 00000 n
+0000044954 00000 n
+0000044108 00000 n
+0000040634 00000 n
+0000044770 00000 n
+0000230675 00000 n
+0000044245 00000 n
+0000049390 00000 n
+0000049544 00000 n
+0000049822 00000 n
+0000049216 00000 n
+0000045208 00000 n
+0000049699 00000 n
+0000221960 00000 n
+0000049353 00000 n
+0000054316 00000 n
+0000054788 00000 n
+0000054150 00000 n
+0000050089 00000 n
+0000054476 00000 n
+0000054599 00000 n
+0000054663 00000 n
+0000054287 00000 n
+0000058606 00000 n
+0000058362 00000 n
+0000055094 00000 n
+0000058483 00000 n
+0000062841 00000 n
+0000062658 00000 n
+0000058847 00000 n
+0000062779 00000 n
+0000067951 00000 n
+0000067524 00000 n
+0000063082 00000 n
+0000067645 00000 n
+0000406740 00000 n
+0000072451 00000 n
+0000072085 00000 n
+0000068205 00000 n
+0000072206 00000 n
+0000406306 00000 n
+0000076020 00000 n
+0000075837 00000 n
+0000072692 00000 n
+0000075958 00000 n
+0000079466 00000 n
+0000079624 00000 n
+0000079905 00000 n
+0000079292 00000 n
+0000076235 00000 n
+0000079782 00000 n
+0000079429 00000 n
+0000084191 00000 n
+0000084350 00000 n
+0000084509 00000 n
+0000084668 00000 n
+0000085074 00000 n
+0000084001 00000 n
+0000080146 00000 n
+0000084827 00000 n
+0000084138 00000 n
+0000088894 00000 n
+0000088587 00000 n
+0000085328 00000 n
+0000088708 00000 n
+0000406165 00000 n
+0000092628 00000 n
+0000092383 00000 n
+0000089122 00000 n
+0000092504 00000 n
+0000097769 00000 n
+0000097400 00000 n
+0000092856 00000 n
+0000097521 00000 n
+0000406448 00000 n
+0000405735 00000 n
+0000405879 00000 n
+0000101400 00000 n
+0000101155 00000 n
+0000098114 00000 n
+0000101276 00000 n
+0000105643 00000 n
+0000109829 00000 n
+0000109993 00000 n
+0000106047 00000 n
+0000105477 00000 n
+0000101589 00000 n
+0000105800 00000 n
+0000105614 00000 n
+0000110157 00000 n
+0000110315 00000 n
+0000110717 00000 n
+0000109639 00000 n
+0000106236 00000 n
+0000110469 00000 n
+0000406892 00000 n
+0000109776 00000 n
+0000114552 00000 n
+0000114711 00000 n
+0000114994 00000 n
+0000114378 00000 n
+0000110919 00000 n
+0000114870 00000 n
+0000114515 00000 n
+0000118732 00000 n
+0000118891 00000 n
+0000119050 00000 n
+0000119353 00000 n
+0000118550 00000 n
+0000115196 00000 n
+0000119229 00000 n
+0000218108 00000 n
+0000118687 00000 n
+0000122678 00000 n
+0000122832 00000 n
+0000123172 00000 n
+0000122504 00000 n
+0000119620 00000 n
+0000122986 00000 n
+0000216042 00000 n
+0000203881 00000 n
+0000189154 00000 n
+0000122641 00000 n
+0000126556 00000 n
+0000126311 00000 n
+0000123413 00000 n
+0000126432 00000 n
+0000129217 00000 n
+0000129034 00000 n
+0000126771 00000 n
+0000129155 00000 n
+0000130128 00000 n
+0000129945 00000 n
+0000129419 00000 n
+0000130066 00000 n
+0000134170 00000 n
+0000134534 00000 n
+0000134004 00000 n
+0000130278 00000 n
+0000134348 00000 n
+0000134141 00000 n
+0000138103 00000 n
+0000137858 00000 n
+0000134762 00000 n
+0000137979 00000 n
+0000141727 00000 n
+0000141482 00000 n
+0000138266 00000 n
+0000141603 00000 n
+0000145301 00000 n
+0000145056 00000 n
+0000141916 00000 n
+0000145177 00000 n
+0000407044 00000 n
+0000147113 00000 n
+0000147272 00000 n
+0000147555 00000 n
+0000146939 00000 n
+0000145477 00000 n
+0000147431 00000 n
+0000147076 00000 n
+0000149312 00000 n
+0000149589 00000 n
+0000149146 00000 n
+0000147718 00000 n
+0000149465 00000 n
+0000149283 00000 n
+0000152553 00000 n
+0000152702 00000 n
+0000152853 00000 n
+0000153005 00000 n
+0000153157 00000 n
+0000153309 00000 n
+0000153461 00000 n
+0000153613 00000 n
+0000153764 00000 n
+0000153916 00000 n
+0000154067 00000 n
+0000154218 00000 n
+0000154370 00000 n
+0000154521 00000 n
+0000154672 00000 n
+0000154824 00000 n
+0000154974 00000 n
+0000155126 00000 n
+0000155278 00000 n
+0000155430 00000 n
+0000155582 00000 n
+0000155734 00000 n
+0000155886 00000 n
+0000156037 00000 n
+0000156189 00000 n
+0000156341 00000 n
+0000156493 00000 n
+0000156645 00000 n
+0000156797 00000 n
+0000156948 00000 n
+0000157098 00000 n
+0000157249 00000 n
+0000157399 00000 n
+0000157550 00000 n
+0000157701 00000 n
+0000157851 00000 n
+0000158001 00000 n
+0000158151 00000 n
+0000158303 00000 n
+0000158455 00000 n
+0000158607 00000 n
+0000158758 00000 n
+0000158909 00000 n
+0000159058 00000 n
+0000159209 00000 n
+0000159361 00000 n
+0000159511 00000 n
+0000159662 00000 n
+0000159812 00000 n
+0000159963 00000 n
+0000160114 00000 n
+0000160265 00000 n
+0000160417 00000 n
+0000160568 00000 n
+0000160719 00000 n
+0000160869 00000 n
+0000161021 00000 n
+0000161173 00000 n
+0000161325 00000 n
+0000161475 00000 n
+0000161626 00000 n
+0000161777 00000 n
+0000161929 00000 n
+0000162081 00000 n
+0000162233 00000 n
+0000162384 00000 n
+0000162535 00000 n
+0000162687 00000 n
+0000162836 00000 n
+0000162985 00000 n
+0000163260 00000 n
+0000151835 00000 n
+0000149752 00000 n
+0000163136 00000 n
+0000151972 00000 n
+0000166321 00000 n
+0000166474 00000 n
+0000166627 00000 n
+0000166778 00000 n
+0000166936 00000 n
+0000167093 00000 n
+0000167251 00000 n
+0000167408 00000 n
+0000167561 00000 n
+0000167719 00000 n
+0000167876 00000 n
+0000168040 00000 n
+0000168203 00000 n
+0000168367 00000 n
+0000168525 00000 n
+0000168677 00000 n
+0000168830 00000 n
+0000168988 00000 n
+0000169152 00000 n
+0000169316 00000 n
0000169474 00000 n
-0000169629 00000 n
-0000169793 00000 n
-0000169957 00000 n
-0000170121 00000 n
+0000169638 00000 n
+0000169801 00000 n
+0000169959 00000 n
+0000170116 00000 n
0000170279 00000 n
-0000170436 00000 n
-0000172090 00000 n
-0000170649 00000 n
-0000164417 00000 n
-0000161991 00000 n
-0000170587 00000 n
-0000164554 00000 n
-0000172243 00000 n
-0000172401 00000 n
-0000172559 00000 n
-0000172717 00000 n
-0000172874 00000 n
-0000173027 00000 n
-0000173185 00000 n
-0000173342 00000 n
-0000173496 00000 n
-0000173655 00000 n
-0000173814 00000 n
-0000173972 00000 n
-0000174131 00000 n
-0000174289 00000 n
-0000174447 00000 n
-0000174661 00000 n
-0000171804 00000 n
-0000170851 00000 n
-0000174599 00000 n
-0000171941 00000 n
-0000174916 00000 n
-0000186898 00000 n
-0000175143 00000 n
-0000175245 00000 n
-0000187137 00000 n
-0000187858 00000 n
-0000188089 00000 n
-0000201598 00000 n
-0000188411 00000 n
-0000188517 00000 n
-0000201829 00000 n
-0000202577 00000 n
-0000202800 00000 n
-0000213831 00000 n
-0000202946 00000 n
-0000203043 00000 n
-0000214068 00000 n
-0000214743 00000 n
-0000214971 00000 n
-0000215963 00000 n
-0000215014 00000 n
-0000215109 00000 n
-0000216203 00000 n
-0000216805 00000 n
-0000217006 00000 n
-0000217032 00000 n
-0000217058 00000 n
-0000217084 00000 n
-0000217144 00000 n
-0000217239 00000 n
-0000219726 00000 n
-0000217444 00000 n
-0000217547 00000 n
-0000219971 00000 n
-0000220663 00000 n
-0000220870 00000 n
-0000228200 00000 n
-0000221364 00000 n
-0000221480 00000 n
-0000228437 00000 n
-0000229372 00000 n
-0000229573 00000 n
-0000231745 00000 n
-0000229728 00000 n
-0000229833 00000 n
-0000231989 00000 n
-0000232654 00000 n
-0000232861 00000 n
-0000234567 00000 n
-0000232984 00000 n
-0000233090 00000 n
-0000234813 00000 n
-0000235469 00000 n
-0000235677 00000 n
-0000241063 00000 n
-0000236066 00000 n
-0000236186 00000 n
-0000241304 00000 n
-0000242083 00000 n
-0000242285 00000 n
-0000249692 00000 n
-0000242770 00000 n
-0000242893 00000 n
-0000249929 00000 n
-0000250817 00000 n
-0000251017 00000 n
-0000251764 00000 n
-0000251050 00000 n
-0000251144 00000 n
-0000252000 00000 n
-0000252593 00000 n
-0000252792 00000 n
-0000259075 00000 n
-0000253244 00000 n
-0000253354 00000 n
-0000259312 00000 n
-0000260192 00000 n
-0000260393 00000 n
-0000263287 00000 n
-0000260619 00000 n
-0000260724 00000 n
-0000263527 00000 n
-0000264213 00000 n
-0000264414 00000 n
-0000266519 00000 n
-0000264648 00000 n
-0000264753 00000 n
-0000266756 00000 n
-0000267441 00000 n
-0000267642 00000 n
-0000275638 00000 n
-0000268186 00000 n
-0000268317 00000 n
-0000275876 00000 n
-0000276812 00000 n
-0000277014 00000 n
-0000278077 00000 n
-0000277070 00000 n
-0000277170 00000 n
-0000278316 00000 n
-0000278929 00000 n
-0000279131 00000 n
-0000279369 00000 n
-0000279457 00000 n
-0000284213 00000 n
-0000279826 00000 n
-0000279935 00000 n
-0000284452 00000 n
-0000285229 00000 n
-0000285430 00000 n
-0000288142 00000 n
-0000285675 00000 n
-0000285780 00000 n
-0000288379 00000 n
-0000289069 00000 n
-0000289270 00000 n
-0000298191 00000 n
-0000289744 00000 n
-0000289862 00000 n
-0000298429 00000 n
-0000299417 00000 n
-0000299619 00000 n
-0000301626 00000 n
-0000299732 00000 n
-0000299835 00000 n
-0000301865 00000 n
-0000302508 00000 n
-0000302710 00000 n
-0000305409 00000 n
-0000302971 00000 n
-0000303076 00000 n
-0000305647 00000 n
-0000306357 00000 n
-0000306559 00000 n
-0000316217 00000 n
-0000307203 00000 n
-0000307344 00000 n
-0000316456 00000 n
-0000317483 00000 n
-0000317686 00000 n
-0000324878 00000 n
-0000318172 00000 n
-0000318296 00000 n
-0000325115 00000 n
-0000325995 00000 n
-0000326195 00000 n
-0000327241 00000 n
-0000326272 00000 n
-0000326371 00000 n
-0000327478 00000 n
-0000328097 00000 n
-0000328298 00000 n
-0000333342 00000 n
-0000328701 00000 n
-0000328824 00000 n
-0000333580 00000 n
-0000334376 00000 n
-0000334578 00000 n
-0000335952 00000 n
-0000334656 00000 n
-0000334758 00000 n
-0000336188 00000 n
-0000336804 00000 n
-0000337003 00000 n
-0000339237 00000 n
-0000337181 00000 n
-0000337286 00000 n
-0000339475 00000 n
-0000340141 00000 n
-0000340343 00000 n
-0000342933 00000 n
-0000340519 00000 n
-0000340628 00000 n
-0000343172 00000 n
-0000343851 00000 n
-0000344054 00000 n
-0000345095 00000 n
-0000344131 00000 n
-0000344230 00000 n
-0000345333 00000 n
-0000345954 00000 n
-0000346156 00000 n
-0000348343 00000 n
-0000346298 00000 n
-0000346407 00000 n
-0000348582 00000 n
-0000349246 00000 n
-0000357645 00000 n
-0000349449 00000 n
-0000365098 00000 n
-0000357909 00000 n
-0000372494 00000 n
-0000365320 00000 n
-0000381185 00000 n
-0000372716 00000 n
-0000388991 00000 n
-0000381462 00000 n
-0000396380 00000 n
-0000389247 00000 n
-0000403595 00000 n
-0000396620 00000 n
-0000405394 00000 n
-0000405483 00000 n
-0000410338 00000 n
-0000410979 00000 n
-0000411746 00000 n
-0000412571 00000 n
-0000412674 00000 n
-0000412712 00000 n
-0000412840 00000 n
+0000170442 00000 n
+0000170605 00000 n
+0000170768 00000 n
+0000170932 00000 n
+0000171087 00000 n
+0000171251 00000 n
+0000171415 00000 n
+0000171579 00000 n
+0000171737 00000 n
+0000171894 00000 n
+0000173548 00000 n
+0000172107 00000 n
+0000165875 00000 n
+0000163449 00000 n
+0000172045 00000 n
+0000166012 00000 n
+0000173701 00000 n
+0000173859 00000 n
+0000174017 00000 n
+0000174175 00000 n
+0000174332 00000 n
+0000174485 00000 n
+0000174643 00000 n
+0000174800 00000 n
+0000174954 00000 n
+0000175113 00000 n
+0000175272 00000 n
+0000175430 00000 n
+0000175589 00000 n
+0000175747 00000 n
+0000175905 00000 n
+0000176119 00000 n
+0000173262 00000 n
+0000172309 00000 n
+0000176057 00000 n
+0000173399 00000 n
+0000176374 00000 n
+0000188356 00000 n
+0000176601 00000 n
+0000176703 00000 n
+0000188595 00000 n
+0000189316 00000 n
+0000189547 00000 n
+0000203056 00000 n
+0000189869 00000 n
+0000189975 00000 n
+0000203287 00000 n
+0000204035 00000 n
+0000204258 00000 n
+0000215289 00000 n
+0000204404 00000 n
+0000204501 00000 n
+0000215526 00000 n
+0000216201 00000 n
+0000216429 00000 n
+0000217421 00000 n
+0000216472 00000 n
+0000216567 00000 n
+0000217661 00000 n
+0000218263 00000 n
+0000218464 00000 n
+0000218490 00000 n
+0000218516 00000 n
+0000218542 00000 n
+0000218602 00000 n
+0000218697 00000 n
+0000221184 00000 n
+0000218902 00000 n
+0000219005 00000 n
+0000221429 00000 n
+0000222121 00000 n
+0000222328 00000 n
+0000229658 00000 n
+0000222822 00000 n
+0000222938 00000 n
+0000229895 00000 n
+0000230830 00000 n
+0000231031 00000 n
+0000233203 00000 n
+0000231186 00000 n
+0000231291 00000 n
+0000233447 00000 n
+0000234112 00000 n
+0000234319 00000 n
+0000236025 00000 n
+0000234442 00000 n
+0000234548 00000 n
+0000236271 00000 n
+0000236927 00000 n
+0000237135 00000 n
+0000242521 00000 n
+0000237524 00000 n
+0000237644 00000 n
+0000242762 00000 n
+0000243541 00000 n
+0000243743 00000 n
+0000251150 00000 n
+0000244228 00000 n
+0000244351 00000 n
+0000251387 00000 n
+0000252275 00000 n
+0000252475 00000 n
+0000253222 00000 n
+0000252508 00000 n
+0000252602 00000 n
+0000253458 00000 n
+0000254051 00000 n
+0000254250 00000 n
+0000260533 00000 n
+0000254702 00000 n
+0000254812 00000 n
+0000260770 00000 n
+0000261650 00000 n
+0000261851 00000 n
+0000264745 00000 n
+0000262077 00000 n
+0000262182 00000 n
+0000264985 00000 n
+0000265671 00000 n
+0000265872 00000 n
+0000267977 00000 n
+0000266106 00000 n
+0000266211 00000 n
+0000268214 00000 n
+0000268899 00000 n
+0000269100 00000 n
+0000277096 00000 n
+0000269644 00000 n
+0000269775 00000 n
+0000277334 00000 n
+0000278270 00000 n
+0000278472 00000 n
+0000279535 00000 n
+0000278528 00000 n
+0000278628 00000 n
+0000279774 00000 n
+0000280387 00000 n
+0000280589 00000 n
+0000280827 00000 n
+0000280915 00000 n
+0000285671 00000 n
+0000281284 00000 n
+0000281393 00000 n
+0000285910 00000 n
+0000286687 00000 n
+0000286888 00000 n
+0000289600 00000 n
+0000287133 00000 n
+0000287238 00000 n
+0000289837 00000 n
+0000290527 00000 n
+0000290728 00000 n
+0000299649 00000 n
+0000291202 00000 n
+0000291320 00000 n
+0000299887 00000 n
+0000300875 00000 n
+0000301077 00000 n
+0000303084 00000 n
+0000301190 00000 n
+0000301293 00000 n
+0000303323 00000 n
+0000303966 00000 n
+0000304168 00000 n
+0000306867 00000 n
+0000304429 00000 n
+0000304534 00000 n
+0000307105 00000 n
+0000307815 00000 n
+0000308017 00000 n
+0000317675 00000 n
+0000308661 00000 n
+0000308802 00000 n
+0000317914 00000 n
+0000318941 00000 n
+0000319144 00000 n
+0000326336 00000 n
+0000319630 00000 n
+0000319754 00000 n
+0000326573 00000 n
+0000327453 00000 n
+0000327653 00000 n
+0000328699 00000 n
+0000327730 00000 n
+0000327829 00000 n
+0000328936 00000 n
+0000329555 00000 n
+0000329756 00000 n
+0000334800 00000 n
+0000330159 00000 n
+0000330282 00000 n
+0000335038 00000 n
+0000335834 00000 n
+0000336036 00000 n
+0000337410 00000 n
+0000336114 00000 n
+0000336216 00000 n
+0000337646 00000 n
+0000338262 00000 n
+0000338461 00000 n
+0000340695 00000 n
+0000338639 00000 n
+0000338744 00000 n
+0000340933 00000 n
+0000341599 00000 n
+0000341801 00000 n
+0000344689 00000 n
+0000342011 00000 n
+0000342120 00000 n
+0000344928 00000 n
+0000345620 00000 n
+0000345823 00000 n
+0000346864 00000 n
+0000345900 00000 n
+0000345999 00000 n
+0000347102 00000 n
+0000347723 00000 n
+0000347925 00000 n
+0000350112 00000 n
+0000348067 00000 n
+0000348176 00000 n
+0000350351 00000 n
+0000351015 00000 n
+0000359414 00000 n
+0000351218 00000 n
+0000366867 00000 n
+0000359678 00000 n
+0000374263 00000 n
+0000367089 00000 n
+0000382954 00000 n
+0000374485 00000 n
+0000390760 00000 n
+0000383231 00000 n
+0000398149 00000 n
+0000391016 00000 n
+0000405364 00000 n
+0000398389 00000 n
+0000407163 00000 n
+0000407252 00000 n
+0000412107 00000 n
+0000412748 00000 n
+0000413515 00000 n
+0000414340 00000 n
+0000414443 00000 n
+0000414481 00000 n
+0000414609 00000 n
trailer
-<< /Size 799 /Root 797 0 R /Info 798 0 R /ID [ <BAED7C336B1B3BB8FDEEEB3D3DB34A65> <BAED7C336B1B3BB8FDEEEB3D3DB34A65> ] >>
+<< /Size 801 /Root 799 0 R /Info 800 0 R /ID [ <505D8C0FC3B36B7F2C68B98EBB6A683F> <505D8C0FC3B36B7F2C68B98EBB6A683F> ] >>
startxref
-413388
+415157
%%EOF
diff --git a/macros/luatex/latex/piton/piton-french.tex b/macros/luatex/latex/piton/piton-french.tex
index 2794f5acda..79b4f33e9a 100644
--- a/macros/luatex/latex/piton/piton-french.tex
+++ b/macros/luatex/latex/piton/piton-french.tex
@@ -107,21 +107,25 @@ version~\PitonFileVersion\space de \pkg{piton}, à la date du~\PitonFileDate.}}
\maketitle
\begin{abstract}
-L'extension \pkg{piton} propose des outils pour composer des codes informatiques avec coloration syntaxique. Elle
-nécessite l'emploi de la LuaLaTeX car le travail principal est fait en utilisant la bibliothèque Lua LPEG.
+L'extension \pkg{piton} propose des outils pour composer des codes informatiques avec
+coloration syntaxique. Elle nécessite l'emploi de la LuaLaTeX car le travail principal est
+fait en utilisant la bibliothèque Lua LPEG.
\end{abstract}
\section{Présentation}
-L'extension \pkg{piton} utilise la librairie Lua nommée LPEG\footnote{LPEG est une librairie de capture de motifs
- (\emph{pattern-matching} en anglais) pour Lua, écrite en C, fondée sur les PEG (\emph{parsing expression
- grammars}): \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} pour «parser» des listings informatiques avec
-coloriage syntaxique. Comme elle utilise le Lua de LuaLaTeX, elle fonctionne uniquement avec |lualatex|
-(et ne va pas fonctionner avec les autres moteurs de compilation LaTeX, que ce soit |latex|, |pdflatex| ou
-|xelatex|). Elle n'utilise aucun programme extérieur et la compilation ne requiert donc pas |--shell-escape|. La
-compilation est très rapide puisque tout le travail du parseur est fait par la librairie LPEG, écrite en C.
+L'extension \pkg{piton} utilise la librairie Lua nommée LPEG\footnote{LPEG est une
+ librairie de capture de motifs (\emph{pattern-matching} en anglais) pour Lua, écrite en
+ C, fondée sur les PEG (\emph{parsing expression grammars}):
+ \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} pour «parser» des listings informatiques
+avec coloriage syntaxique. Comme elle utilise le Lua de LuaLaTeX, elle fonctionne
+uniquement avec |lualatex| (et ne va pas fonctionner avec les autres moteurs de
+compilation LaTeX, que ce soit |latex|, |pdflatex| ou |xelatex|). Elle n'utilise aucun
+programme extérieur et la compilation ne requiert donc pas |--shell-escape|. La
+compilation est très rapide puisque tout le travail du parseur est fait par la librairie
+LPEG, écrite en C.
\bigskip
Voici un exemple de code Python composé avec l'environnement |{Piton}| proposé par \pkg{piton}.
@@ -149,40 +153,42 @@ def arctan(x,n=10:int):
\end{Piton}
\bigskip
-Les principaux concurrents de l'extension \pkg{piton} sont certainement les extensions bien connues \pkg{listings}
-et \pkg{minted}.
+Les principaux concurrents de l'extension \pkg{piton} sont certainement les extensions
+bien connues \pkg{listings} et \pkg{minted}.
\bigskip
-Le nom de cette extension (\pkg{piton}) a été choisi un peu arbitrairement en référence aux pitons d'alpinisme qui
-servent à gravir les montagnes.
+Le nom de cette extension (\pkg{piton}) a été choisi un peu arbitrairement en référence
+aux pitons d'alpinisme qui servent à gravir les montagnes.
\section{Installation}
-L'extension \pkg{piton} est composée de deux fichiers : |piton.sty| et |piton.lua| (le fichier LaTeX |piton.sty|
-chargé par |\usepackage| va à son tour charger le fichier |piton.lua|). Les deux fichiers doivent être présents
-dans un répertoire où LaTeX pourra les trouver, de préférence dans une arborescence |texmf|. Le mieux reste néanmoins
+L'extension \pkg{piton} est composée de deux fichiers : |piton.sty| et |piton.lua| (le
+fichier LaTeX |piton.sty| chargé par |\usepackage| va à son tour charger le fichier
+|piton.lua|). Les deux fichiers doivent être présents dans un répertoire où LaTeX pourra
+les trouver, de préférence dans une arborescence |texmf|. Le mieux reste néanmoins
d'installer \pkg{piton} avec une distribution TeX comme MiKTeX, TeX~Live ou MacTeX.
\section{Utilisation de l'extension}
-L'extension \pkg{piton} n'est utilisable qu'avec LuaLaTeX : si un autre moteur de compilation (comme |latex|,
-|pdflatex| ou |xelatex|) est utilisé, une erreur fatale sera levée.
+L'extension \pkg{piton} n'est utilisable qu'avec LuaLaTeX : si un autre moteur de
+compilation (comme |latex|, |pdflatex| ou |xelatex|) est utilisé, une erreur fatale sera
+levée.
\subsection{Choix du langage}
Les langages informatiques pris en charge par \pkg{piton} se classent en deux catégories :
\begin{itemize}
-\item les langages reconnus nativement par \pkg{piton} qui sont au nombre de cinq : Python, OCaml, SQL, C (ou
-plutôt \CC) et un langage nommé |minimal|\footnote{Le langage |minimal| peut servir pour formater du pseudo-code
- : cf.~p.~\pageref{minimal}.} ;
+\item les langages reconnus nativement par \pkg{piton} qui sont au nombre de cinq :
+Python, OCaml, SQL, C (ou plutôt \CC) et un langage nommé |minimal|\footnote{Le langage
+ |minimal| peut servir pour formater du pseudo-code : cf.~p.~\pageref{minimal}.} ;
\item les langages définis par l'utilisateur avec la commande |\NewPitonLanguage| décrite
-p.~\pageref{NewPitonLanguage} (les parseurs de ces langages ne pourront jamais être aussi précis que ceux proposés
-nativement par \pkg{piton)}.
+p.~\pageref{NewPitonLanguage} (les parseurs de ces langages ne pourront jamais être aussi
+précis que ceux proposés nativement par \pkg{piton)}.
\end{itemize}
@@ -197,15 +203,16 @@ On peut changer de langage avec la clé |language| de |\PitonOptions| :
|\PitonOptions{language = OCaml}|
\smallskip
-En fait, le nom des langages, pour \pkg{piton}, est toujours \textbf{insensible à la casse}. Dans cet exemple, on
-aurait tout aussi bien pu écrire |Ocaml| ou |ocaml|.
+En fait, le nom des langages, pour \pkg{piton}, est toujours \textbf{insensible à la
+ casse}. Dans cet exemple, on aurait tout aussi bien pu écrire |Ocaml| ou |ocaml|.
\smallskip
-Pour les développeurs, précisons que le nom du langage courant est stocké (en minuscules) dans la variable publique
-L3 nommée |\l_piton_language_str|.
+Pour les développeurs, précisons que le nom du langage courant est stocké (en minuscules)
+dans la variable publique L3 nommée |\l_piton_language_str|.
\smallskip
-Dans la suite de ce document, on parlera de Python mais les fonctionnalités s'appliquent aussi aux autres langages.
+Dans la suite de ce document, on parlera de Python mais les fonctionnalités s'appliquent
+aussi aux autres langages.
@@ -215,21 +222,21 @@ Dans la suite de ce document, on parlera de Python mais les fonctionnalités s'a
L'extension \pkg{piton} se charge simplement avec |\usepackage{piton}|.
\smallskip
-Si, à la fin du prambule, l'extension \pkg{xcolor} n'a pas été chargée (par l'utilisateur ou par une extension
-chargée dans le préambule), \pkg{piton} charge l'extension \pkg{xcolor} avec |\usepackage{xcolor}|, c'est-à-dire
-sans aucune option. L'extension \pkg{piton} ne charge pas d'autre extension. Elle n'utilise pas de programme
-extérieur.
+Si, à la fin du prambule, l'extension \pkg{xcolor} n'a pas été chargée (par l'utilisateur
+ou par une extension chargée dans le préambule), \pkg{piton} charge l'extension
+\pkg{xcolor} avec |\usepackage{xcolor}|, c'est-à-dire sans aucune option. L'extension
+\pkg{piton} ne charge pas d'autre extension. Elle n'utilise pas de programme extérieur.
\subsection{Les commandes et environnements à la disposition de l'utilisateur}
\indexenv{Piton}
-L'extension \pkg{piton} fournit plusieurs outils pour composer du code Python: les commandes |\piton|,
-l'environnement |{Piton}| et la commande |\PitonInputFile|.
+L'extension \pkg{piton} fournit plusieurs outils pour composer du code Python: les
+commandes |\piton|, l'environnement |{Piton}| et la commande |\PitonInputFile|.
\begin{itemize} \setlength{\fboxsep}{1pt}
-\item La commande \colorbox{gray!20}{\ttfamily \textbackslash piton} doit être utilisée pour composer de petits éléments de code à l'intérieur d'un
-paragraphe. Par exemple :
+\item La commande \colorbox{gray!20}{\ttfamily \textbackslash piton} doit être utilisée
+pour composer de petits éléments de code à l'intérieur d'un paragraphe. Par exemple :
{\color{gray}\verb|\piton{def carré(x): return x*x}|}\qquad
\piton{def carré(x): return x*x}
@@ -237,26 +244,28 @@ paragraphe. Par exemple :
La syntaxe et les particularités de la commande sont détaillées ci-après.
-\item L'environnement \colorbox{gray!20}{\ttfamily \{Piton\}} doit être utilisé pour composer des codes de
-plusieurs lignes. Comme cet environnement prend son argument selon un mode verbatim, il ne peut pas être utilisé
-dans l'argument d'une commande LaTeX. Pour les besoins de personnalisation, il est possible de définir de nouveaux
-environnements similaires à |{Piton}| en utilisant la commande \DefinitionCommand{NewPitonEnvironment} : cf. partie
-\ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}.
+\item L'environnement \colorbox{gray!20}{\ttfamily \{Piton\}} doit être utilisé pour
+composer des codes de plusieurs lignes. Comme cet environnement prend son argument selon
+un mode verbatim, il ne peut pas être utilisé dans l'argument d'une commande LaTeX. Pour
+les besoins de personnalisation, il est possible de définir de nouveaux environnements
+similaires à |{Piton}| en utilisant la commande \DefinitionCommand{NewPitonEnvironment} :
+cf. partie \ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}.
-\item La commande \colorbox{gray!20}{\ttfamily \textbackslash PitonInputFile} doit être utilisée pour insérer et
-composer un fichier externe.
+\item La commande \colorbox{gray!20}{\ttfamily \textbackslash PitonInputFile} doit être
+utilisée pour insérer et composer un fichier externe.
Il est possible de n'insérer qu'une partie de ce fichier : cf. partie~\ref{part-of-a-file},
p.~\pageref{part-of-a-file}.
-La clé \Definition{path} de la commande |\PitonOptions| permet de spécifier une \emph{liste} de chemins où sera
-recherché le fichier à inclure (dans cette liste, les chemins sont séparés par des virgules).
+La clé \Definition{path} de la commande |\PitonOptions| permet de spécifier une
+\emph{liste} de chemins où sera recherché le fichier à inclure (dans cette liste, les
+chemins sont séparés par des virgules).
-L'extension \pkg{piton} propose aussi des commandes \colorbox{gray!20}{\ttfamily\textbackslash PitonInputFileT},
-\colorbox{gray!20}{\ttfamily \textbackslash PitonInputFileF} et
-\colorbox{gray!20}{\ttfamily \textbackslash PitonInputFileTF} avec des arguments correspondant aux lettres |T| et
-|F|, arguments qui seront executés dans le
-cas où le fichier a été trouvé (lettre |T|) ou pas (lettre |F|).
+L'extension \pkg{piton} propose aussi des commandes
+\colorbox{gray!20}{\ttfamily\textbackslash PitonInputFileT}, \colorbox{gray!20}{\ttfamily
+ \textbackslash PitonInputFileF} et \colorbox{gray!20}{\ttfamily \textbackslash
+ PitonInputFileTF} avec des arguments correspondant aux lettres |T| et |F|, arguments qui
+seront executés dans le cas où le fichier a été trouvé (lettre |T|) ou pas (lettre |F|).
\end{itemize}
@@ -265,19 +274,23 @@ cas où le fichier a été trouvé (lettre |T|) ou pas (lettre |F|).
\indexcommand{piton}
-La commande |\piton| possède en fait une syntaxe double. Elle est peut être utilisée comme une commande standard de
-LaTeX prenant son argument entre accolades (|\piton{...}|), ou bien selon la syntaxe de la commande |\verb| où l'argument est
-délimité entre deux caractères identiques (par ex. : \verb!\piton|...|!). On détaille maintenant ces deux syntaxes.
+La commande |\piton| possède en fait une syntaxe double. Elle est peut être utilisée comme
+une commande standard de LaTeX prenant son argument entre accolades (|\piton{...}|), ou
+bien selon la syntaxe de la commande
+|\verb| où l'argument est délimité entre deux caractères
+identiques (par ex. : \verb!\piton|...|!).
+On détaille maintenant ces deux syntaxes.
\bigskip
\begin{itemize}
\item {\color{blue} \textsf{Syntaxe} \verb|\piton{...}|}\par\nobreak
-Quand son argument est donné entre accolades, la commande |\piton| ne prend pas son argument en mode verbatim. Les
-points suivants doivent être remarqués :
+Quand son argument est donné entre accolades, la commande |\piton| ne prend pas son
+argument en mode verbatim. Les points suivants doivent être remarqués :
\begin{itemize}
-\item plusieurs espaces successives sont remplacées par une unique espace, ainsi que les retours à la ligne
+\item plusieurs espaces successives sont remplacées par une unique espace, ainsi que les
+retours à la ligne
{\color{cyan} mais la commande |\|␣ est fournie pour forcer l'insertion d'une espace} ;
@@ -287,7 +300,8 @@ points suivants doivent être remarqués :
\item les accolades doivent apparaître par paires correctement imbriquées,
-{\color{cyan} mais les commandes |\{| et |\}| sont aussi fournies pour insérer des accolades individuelles} ;
+{\color{cyan} mais les commandes |\{| et |\}| sont aussi fournies pour insérer des
+ accolades individuelles} ;
\item les commandes LaTeX\footnote{Cela s'applique aux commandes commençant par une contre-oblique |\| mais
également aux caractères actifs, c'est-à-dire ceux de catcode~13.} sont complètement développées sans être
@@ -316,16 +330,16 @@ et |@|) doivent être insérés sans contre-oblique.
\end{tabular}
\bigskip
-La commande |\piton| avec son argument entre accolades peut être utilisée dans les arguments des autres commandes LaTeX.\footnote{La commande
- |\piton| peut par exemple être
+La commande |\piton| avec son argument entre accolades peut être utilisée dans les
+arguments des autres commandes LaTeX.\footnote{La commande |\piton| peut par exemple être
utilisée dans une note de bas de page. Exemple : \piton{s = 'Une chaîne'}.}
\bigskip
\item {\color{blue} \textsf{Syntaxe} \verb!\piton|...|!}\par\nobreak
-Quand la commande |\piton| prend son argument entre deux caractères identiques, cet argument est pris \emph{en mode
- verbatim}. De ce fait, avec cette syntaxe, la commande |\piton| ne peut \emph{pas} être utilisée dans l'argument d'une
-autre fonction.
+Quand la commande |\piton| prend son argument entre deux caractères identiques, cet
+argument est pris \emph{en mode verbatim}. De ce fait, avec cette syntaxe, la commande
+|\piton| ne peut \emph{pas} être utilisée dans l'argument d'une autre fonction.
\medskip
\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l}
@@ -347,85 +361,102 @@ autre fonction.
\section{Personnalisation}
-Concernant la fonte de caractères utilisée dans les listings produits par l'extension \pkg{piton}, il s'agit
-simplement de la fonte mono-chasse courante (\pkg{piton} utilise simplement en interne la commande LaTeX standard
-|\ttfamily|). Pour la changer, le mieux est d'utiliser |\setmonofont| de \pkg{fontspec}.
+Concernant la fonte de caractères utilisée dans les listings produits par l'extension
+\pkg{piton}, il s'agit simplement de la fonte mono-chasse courante (\pkg{piton} utilise
+simplement en interne la commande LaTeX standard |\ttfamily|). Pour la changer, le mieux
+est d'utiliser |\setmonofont| de \pkg{fontspec}.
\subsection{Les clés de la commande \textbackslash PitonOptions}
\indexcommand{PitonOptions}
-La commande |\PitonOptions| prend en argument une liste de couples \textsl{clé=valeur}. La portée des réglages
-effectués par cette commande est le groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en
- particulier, un groupe.}
+La commande |\PitonOptions| prend en argument une liste de couples \textsl{clé=valeur}. La
+portée des réglages effectués par cette commande est le groupe TeX courant.\footnote{On
+ rappelle que tout environnement LaTeX est, en particulier, un groupe.}
-Ces clés peuvent aussi être appliquées à un environnement |{Piton}| individuel (entre crochets).
+Ces clés peuvent aussi être appliquées à un environnement |{Piton}| individuel (entre
+crochets).
\begin{itemize}
-\item La clé \Definition{language} spécifie le langage informatique considéré (la casse n'est pas prise en compte).
-Cinq valeurs sont possibles : |Python|, |OCaml|, |C|, |SQL| et |minimal|. La valeur initiale est |Python|.
+\item La clé \Definition{language} spécifie le langage informatique considéré (la casse
+n'est pas prise en compte). Cinq valeurs sont possibles : |Python|, |OCaml|, |C|, |SQL| et
+|minimal|. La valeur initiale est |Python|.
\item \index{path} La clé \Definition{path} indique un chemin où seront cherchés les fichiers inclus par
|\PitonInputFile|.
-\item \index{gobble}\label{gobble} La clé \Definition{gobble} prend comme valeur un entier positif $n$ : les $n$
-premiers caractères de chaque ligne sont alors retirés (avant formatage du code) dans les environnements |{Piton}|.
-Ces $n$ caractères ne sont pas nécessairement des espaces.
-
-\item \index{auto-gobble}\index{gobble!auto-gobble} Quand la clé \Definition{auto-gobble} est activée, l'extension \pkg{piton} détermine la valeur minimale $n$
-du nombre d'espaces successifs débutant chaque ligne (non vide) de l'environnement |{Piton}| et applique |gobble|
-avec cette valeur de~$n$.
-
-\item \index{env-gobble}\index{gobble!env-gobble} Quand la clé \Definition{env-gobble} est activée, \pkg{piton}
-analyse la dernière ligne de l'environnement, c'est-à-dire celle qui contient le |\end{Piton}| et détermine si
-cette ligne ne comporte que des espaces suivis par |\end{Piton}|. Si c'est le cas, \pkg{piton} calcule le nombre
-$n$ de ces espaces et applique |gobble| avec cette valeur de~$n$. Le nom de cette clé vient de \emph{environment
- gobble}: le nombre d'espaces à retirer ne dépend que de la position des délimiteurs |\begin{Piton}| et
-|\end{Piton}| de l'environnement.
-
-\item \index{write} La clé \Definition{write} prend en argument un nom de fichier (avec l'extension) et écrit le
-contenu\footnote{En fait, il ne s'agit pas exactement du contenu de l'environnement mais de la valeur renvoyée par
- l'instruction Lua
- |piton.get_last_code()| qui en est une version sans les surcharges de formatage LaTeX (voir la partie \ref{API}, p.~\pageref{API}).} de l'environnement courant dans ce fichier. À la première utilisation du fichier par \pkg{piton}, celui-ci
-est effacé.
-
-\item \index{path-write} La clé \Definition{path-write} indique un chemin où seront écrits les fichiers écrits par
-l'emploi de la clé |write| précédente.
-
-\item \index{line-numbers} La clé \Definition{line-numbers} active la numérotation des lignes (en débordement à
-gauche) dans les environnements |{Piton}| et dans les listings produits par la commande |\PitonInputFile|.
+\item \index{gobble}\label{gobble} La clé \Definition{gobble} prend comme valeur un entier
+positif $n$ : les $n$ premiers caractères de chaque ligne sont alors retirés (avant
+formatage du code) dans les environnements |{Piton}|. Ces $n$ caractères ne sont pas
+nécessairement des espaces.
+
+\item \index{auto-gobble}\index{gobble!auto-gobble} Quand la clé \Definition{auto-gobble}
+est activée, l'extension \pkg{piton} détermine la valeur minimale $n$ du nombre d'espaces
+successifs débutant chaque ligne (non vide) de l'environnement |{Piton}| et applique
+|gobble| avec cette valeur de~$n$.
+
+\item \index{env-gobble}\index{gobble!env-gobble} Quand la clé \Definition{env-gobble} est
+activée, \pkg{piton} analyse la dernière ligne de l'environnement, c'est-à-dire celle qui
+contient le |\end{Piton}| et détermine si cette ligne ne comporte que des espaces suivis
+par |\end{Piton}|. Si c'est le cas, \pkg{piton} calcule le nombre $n$ de ces espaces et
+applique |gobble| avec cette valeur de~$n$. Le nom de cette clé vient de \emph{environment
+ gobble}: le nombre d'espaces à retirer ne dépend que de la position des délimiteurs
+|\begin{Piton}| et |\end{Piton}| de l'environnement.
+
+\item \index{write} La clé \Definition{write} prend en argument un nom de fichier (avec
+l'extension) et écrit le contenu\footnote{En fait, il ne s'agit pas exactement du contenu
+ de l'environnement mais de la valeur renvoyée par l'instruction Lua
+ |piton.get_last_code()| qui en est une version sans les surcharges de formatage LaTeX
+ (voir la partie \ref{API}, p.~\pageref{API}).} de l'environnement courant dans ce
+fichier. À la première utilisation du fichier par \pkg{piton}, celui-ci est effacé.
+
+\item \index{path-write} La clé \Definition{path-write} indique un chemin où seront écrits
+les fichiers écrits par l'emploi de la clé |write| précédente.
+
+\item \index{line-numbers} La clé \Definition{line-numbers} active la numérotation des
+lignes (en débordement à gauche) dans les environnements |{Piton}| et dans les listings
+produits par la commande |\PitonInputFile|.
Cette clé propose en fait plusieurs sous-clés.
\begin{itemize}
-\item La clé \Definition{line-numbers/skip-empty-lines} demande que les lignes vides (qui ne contiennent que des
-espaces) soient considérées comme non existantes en ce qui concerne la numérotation des lignes (si la clé
-|/absolute|, décrite plus bas, est active, la clé |/skip-empty-lines| n'a pas d'effet dans |\PitonInputFile|). La
-valeur initiale de cette clé est |true| (et non |false|).\footnote{Avec le langage Python, les lignes vides des \emph{docstrings} sont
- prises en compte.}
-
-\item La clé \Definition{line-numbers/label-empty-lines} demande que les labels (c'est-à-dire les numéros) des
-lignes vides soient affichés. Si la clé |/skip-empty-lines| est active, la clé |/label-empty-lines| est sans effet.
-La valeur initiale de cette clé est |true|.\footnote{Quand la clé |split-on-empty-lines| est activée, les labels des
+\item La clé \Definition{line-numbers/skip-empty-lines} demande que les lignes vides (qui
+ne contiennent que des espaces) soient considérées comme non existantes en ce qui concerne
+la numérotation des lignes (si la clé |/absolute|, décrite plus bas, est active, la clé
+|/skip-empty-lines| n'a pas d'effet dans |\PitonInputFile|). La valeur initiale de cette
+clé est |true| (et non |false|).\footnote{Avec le langage Python, les lignes vides des
+ \emph{docstrings} sont prises en compte.}
+
+\item La clé \Definition{line-numbers/label-empty-lines} demande que les labels
+(c'est-à-dire les numéros) des lignes vides soient affichés. Si la clé |/skip-empty-lines|
+est active, la clé |/label-empty-lines| est sans effet. La valeur initiale de cette clé
+est |true|.\footnote{Quand la clé |split-on-empty-lines| est activée, les labels des
lignes vides ne sont jamais imprimés.}
-\item La clé \Definition{line-numbers/absolute} demande, pour les listings générés par |\PitonInputFile|, que les
-numéros de lignes affichés soient absolus (c'est-à-dire ceux du fichier d'origine). Elle n'a d'intérêt que si on
-n'insère qu'une partie du fichier (cf. partie~\ref{part-of-a-file}, p.~\pageref{part-of-a-file}). La clé
-|/absolute| est sans effet dans les environnements |{Piton}|.
+\item La clé \Definition{line-numbers/absolute} demande, pour les listings générés par
+|\PitonInputFile|, que les numéros de lignes affichés soient absolus (c'est-à-dire ceux du
+fichier d'origine). Elle n'a d'intérêt que si on n'insère qu'une partie du fichier (cf.
+partie~\ref{part-of-a-file}, p.~\pageref{part-of-a-file}). La clé |/absolute| est sans
+effet dans les environnements |{Piton}|.
+
+\item La clé \Definition{line-numbers/resume} reprend la numérotation là où elle avait été
+laissée au dernier listing. En fait, la clé |line-numbers/resume| a un alias, qui est
+|resume| tout court (car on peut être amené à l'utiliser souvent).
-\item La clé \Definition{line-numbers/resume} reprend la numérotation là où elle avait été laissée au dernier
-listing. En fait, la clé |line-numbers/resume| a un alias, qui est |resume| tout court (car on peut être amené à
-l'utiliser souvent).
+\item La clé \Definition{line-numbers/start} impose que la numérotation commence à ce
+numéro.
-\item La clé \Definition{line-numbers/start} impose que la numérotation commence à ce numéro.
+\item La clé \Definition{line-numbers/sep} est la distance horizontale entre les numéros
+de lignes (insérés par |line-numbers|) et les lignes du code informatique. La valeur
+initiale est 0.7~em.
-\item La clé \Definition{line-numbers/sep} est la distance horizontale entre les numéros de lignes (insérés par
-|line-numbers|) et les lignes du code informatique. La valeur initiale est 0.7~em.
+\item \colorbox{yellow!50}{\bfseries Nouveau 3.1}\enskip La clé
+\Definition{line-numbers/format} est une liste de tokens qui est insérée avant le numéro de
+ligne pour le formater. La valeur initiale est |\footnotesize \color{gray}|.
\end{itemize}
-Pour la commodité, un dispositif de factorisation du préfixe |line-numbers| est disponible, c'est-à-dire que l'on
-peut écrire :
+Pour la commodité, un dispositif de factorisation du préfixe |line-numbers| est
+disponible, c'est-à-dire que l'on peut écrire :
\begin{Verbatim}
\PitonOptions
@@ -440,47 +471,58 @@ peut écrire :
\end{Verbatim}
-\item \index{left-margin} La clé \Definition{left-margin} fixe une marge sur la gauche. Cette clé peut être utile, en particulier, en
-conjonction avec la clé |line-numbers| si on ne souhaite pas que les numéros de ligne soient dans une position en
-débordement sur la gauche.
+\item \index{left-margin} La clé \Definition{left-margin} fixe une marge sur la gauche.
+Cette clé peut être utile, en particulier, en conjonction avec la clé |line-numbers| si on
+ne souhaite pas que les numéros de ligne soient dans une position en débordement sur la
+gauche.
-Il est possible de donner à la clé |left-margin| la valeur spéciale~|auto|. Avec cette valeur, une marge est
-insérée automatiquement pour les numéros de ligne quand la clé |line-numbers| est utilisée. Voir un exemple à la
-partie \ref{example-numbering} p.~\pageref{example-numbering}.
+Il est possible de donner à la clé |left-margin| la valeur spéciale~|auto|. Avec cette
+valeur, une marge est insérée automatiquement pour les numéros de ligne quand la clé
+|line-numbers| est utilisée. Voir un exemple à la partie \ref{example-numbering}
+p.~\pageref{example-numbering}.
-\item \index{background-color} La clé \Definition{background-color} fixe la couleur de fond des environnements |{Piton}| et des listings
-produits par |\PitonInputFile| (ce fond a une largeur que l'on peut fixer avec la clé |width| décrite ci-dessous).
-La clé |background-color| accepte une couleur définie «à la volée», c'est-à-dire que l'on peut écrire par exemple
-|background-color = [cmyk]{0.1,0.05,0,0}|
+\item \index{background-color} La clé \Definition{background-color} fixe la couleur de
+fond des environnements |{Piton}| et des listings produits par |\PitonInputFile| (ce fond
+a une largeur que l'on peut fixer avec la clé |width| décrite ci-dessous). La clé
+|background-color| accepte une couleur définie «à la volée», c'est-à-dire que l'on peut
+écrire par exemple |background-color = [cmyk]{0.1,0.05,0,0}|
\smallskip
-La clé |background-color| accepte aussi en argument une \emph{liste} de couleurs. Les lignes sont alors coloriées
-de manière cyclique avec ces couleurs.
+La clé |background-color| accepte aussi en argument une \emph{liste} de couleurs. Les
+lignes sont alors coloriées de manière cyclique avec ces couleurs.
\emph{Exemple} : |\PitonOptions{background-color = {gray!5,white}}|
-\item \index{prompt-background-color} Avec la clé \Definition{prompt-background-color}, \pkg{piton} ajoute un fond coloré aux lignes débutant par
-le prompt «|>>>|» (et sa continuation «|...|») caractéristique des consoles Python avec boucle \textsc{repl}
-(\emph{read-eval-print loop}). Pour un exemple d'utilisation de cette clé, voir la partie \ref{pythonrepl}
-p.~\pageref{pythonrepl}.
-
-\item \index{width} La clé \Definition{width} fixe la largeur du listing produit. Cette largeur s'applique aux fonds colorés
-spécifiés par les clés |background-color| et |prompt-background-color| et également quand une coupure automatique
-des lignes est demandée par |break-lines| (cf.~\ref{line-breaks}, p.~\pageref{line-breaks}).
-
-Cette clé peut prendre comme valeur une longueur explicite mais aussi la valeur spéciale~|min|. Avec cette valeur,
-la largeur sera calculée à partir de la largeur maximale des lignes de code. Attention : l'usage de cette valeur
-spéciale~|min| requiert deux compilations LuaLaTeX\footnote{La largeur maximale est calculée lors de la première
-compilation, écrite sur le fichier~|aux|, puis réutilisée lors de la compilation suivante. Certains outils comme
-|latexmk| (utilisé par Overleaf) effectuent automatiquement un nombre suffisant de compilations.}.
-
-Pour un exemple d'utilisation de |width=min|, voir la partie~\ref{example-comments} sur les exemples, p.~\pageref{example-comments}.
-
-\item \index{show-spaces-in-strings} En activant la clé \Definition{show-spaces-in-strings}, les espaces dans les
-chaînes de caractères\footnote{Pour le language Python, cela ne s'applique que pour les chaînes courtes, c'est-à-dire
-celles délimitées par~\verb|'| ou~\verb|"|. En OCaml, cela ne s'applique pas pour les \emph{quoted strings}.} sont
-matérialisés par le caractère ␣ (U+2423 : \textsc{open box}). Bien sûr, le caractère U+2423 doit être présent dans la fonte mono-chasse utilisée.\footnote{L'extension \pkg{piton} utilise
- simplement la fonte mono-chasse courante. Pour la changer, le mieux est d'utiliser |\setmonofont| de
+\item \index{prompt-background-color} Avec la clé \Definition{prompt-background-color},
+\pkg{piton} ajoute un fond coloré aux lignes débutant par le prompt «|>>>|» (et sa
+continuation «|...|») caractéristique des consoles Python avec boucle \textsc{repl}
+(\emph{read-eval-print loop}). Pour un exemple d'utilisation de cette clé, voir la partie
+\ref{pythonrepl} p.~\pageref{pythonrepl}.
+
+\item \index{width} La clé \Definition{width} fixe la largeur du listing produit. Cette
+largeur s'applique aux fonds colorés spécifiés par les clés |background-color| et
+|prompt-background-color| et également quand une coupure automatique des lignes est
+demandée par |break-lines| (cf.~\ref{line-breaks}, p.~\pageref{line-breaks}).
+
+Cette clé peut prendre comme valeur une longueur explicite mais aussi la valeur
+spéciale~|min|. Avec cette valeur, la largeur sera calculée à partir de la largeur
+maximale des lignes de code. Attention : l'usage de cette valeur spéciale~|min| requiert
+deux compilations LuaLaTeX\footnote{La largeur maximale est calculée lors de la première
+ compilation, écrite sur le fichier~|aux|, puis réutilisée lors de la compilation
+ suivante. Certains outils comme |latexmk| (utilisé par Overleaf) effectuent
+ automatiquement un nombre suffisant de compilations.}.
+
+Pour un exemple d'utilisation de |width=min|, voir la partie~\ref{example-comments} sur
+les exemples, p.~\pageref{example-comments}.
+
+\item \index{show-spaces-in-strings} En activant la clé
+\Definition{show-spaces-in-strings}, les espaces dans les chaînes de
+caractères\footnote{Pour le language Python, cela ne s'applique que pour les chaînes
+ courtes, c'est-à-dire celles délimitées par~\verb|'| ou~\verb|"|. En OCaml, cela ne
+ s'applique pas pour les \emph{quoted strings}.} sont matérialisés par le caractère ␣
+(U+2423 : \textsc{open box}). Bien sûr, le caractère U+2423 doit être présent dans la
+fonte mono-chasse utilisée.\footnote{L'extension \pkg{piton} utilise simplement la fonte
+ mono-chasse courante. Pour la changer, le mieux est d'utiliser |\setmonofont| de
\pkg{fontspec}.}\par\nobreak
%
\begingroup
@@ -488,10 +530,12 @@ matérialisés par le caractère ␣ (U+2423 : \textsc{open box}). Bien sûr, le
Exemple : \piton{my_string = 'Très bonne réponse'}
\endgroup
-\item \index{show-spaces} Avec la clé \Definition{show-spaces}, tous les espaces sont matérialisés (et aucune
-coupure de ligne ne peut plus intervenir sur ces espaces matérialisés, même si la clé |break-lines|\footnote{cf.
- \ref{line-breaks} p.~\pageref{line-breaks}.} est active). Il faut néanmoins remarquer que les espaces en fin de
-ligne sont tous supprimés par \pkg{piton}. Les tabulations de début de ligne sont représentées par des flèches.
+\item \index{show-spaces} Avec la clé \Definition{show-spaces}, tous les espaces sont
+matérialisés (et aucune coupure de ligne ne peut plus intervenir sur ces espaces
+matérialisés, même si la clé |break-lines|\footnote{cf. \ref{line-breaks}
+ p.~\pageref{line-breaks}.} est active). Il faut néanmoins remarquer que les espaces en
+fin de ligne sont tous supprimés par \pkg{piton}. Les tabulations de début de ligne sont
+représentées par des flèches.
\end{itemize}
\bigskip
@@ -544,8 +588,8 @@ ligne sont tous supprimés par \pkg{piton}. Les tabulations de début de ligne s
\bigskip
-La commande |\PitonOptions| propose d'autres clés qui seront décrites plus loin (voir en particulier la coupure des
-pages et des lignes p.~\pageref{breakable}).
+La commande |\PitonOptions| propose d'autres clés qui seront décrites plus loin (voir en
+particulier la coupure des pages et des lignes p.~\pageref{breakable}).
\subsection{Les styles}
@@ -555,32 +599,35 @@ pages et des lignes p.~\pageref{breakable}).
\subsubsection{Notion de style}
-L'extension \pkg{piton} fournit la commande |\SetPitonStyle| pour personnaliser les différents styles utilisés pour
-formater les éléments syntaxiques des listings Python. Ces personnalisations ont une portée qui correspond au
-groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en particulier, un groupe.}
+L'extension \pkg{piton} fournit la commande |\SetPitonStyle| pour personnaliser les
+différents styles utilisés pour formater les éléments syntaxiques des listings Python. Ces
+personnalisations ont une portée qui correspond au groupe TeX courant.\footnote{On
+ rappelle que tout environnement LaTeX est, en particulier, un groupe.}
\bigskip
-\indexcommand{SetPitonStyle}
-La commande |\SetPitonStyle| prend en argument une liste de couples \textsl{clé=valeur}. Les clés sont les noms des
-styles et les valeurs sont les instructions LaTeX de formatage correspondantes.
+\indexcommand{SetPitonStyle} La commande |\SetPitonStyle| prend en argument une liste de
+couples \textsl{clé=valeur}. Les clés sont les noms des styles et les valeurs sont les
+instructions LaTeX de formatage correspondantes.
\bigskip
-Ces instructions LaTeX doivent être des instructions de formatage du type de |\bfseries|, |\slshape|,
-|\color{...}|, etc. (les commandes de ce type sont parfois qualifiées de \emph{semi-globales}). Il est aussi
-possible de mettre, \emph{à la fin de la liste d'instructions}, une commande LaTeX prenant exactement un argument.
+Ces instructions LaTeX doivent être des instructions de formatage du type de |\bfseries|,
+|\slshape|, |\color{...}|, etc. (les commandes de ce type sont parfois qualifiées de
+\emph{semi-globales}). Il est aussi possible de mettre, \emph{à la fin de la liste
+ d'instructions}, une commande LaTeX prenant exactement un argument.
\bigskip
-Voici un exemple qui change le style utilisé pour le nom d'une fonction Python, au moment de sa définition
-(c'est-à-dire après le mot-clé |def|). Elle utilise la commande |\highLight| de \pkg{lua-ul} (qui nécessite
-lui-même le chargement de \pkg{luacolor}).
+Voici un exemple qui change le style utilisé pour le nom d'une fonction Python, au moment
+de sa définition (c'est-à-dire après le mot-clé |def|). Elle utilise la commande
+|\highLight| de \pkg{lua-ul} (qui nécessite lui-même le chargement de \pkg{luacolor}).
\begin{Verbatim}
\SetPitonStyle
{ Name.Function = \bfseries \hightLight[red!50] }
\end{Verbatim}
-Ici, |\highLight[red!50]| doit être considéré comme le nom d'une fonction LaTeX qui prend exactement un argument,
-puisque, habituellement, elle est utilisée avec |\highLight[red!50]{|\texttt{\slshape text}|}|.
+Ici, |\highLight[red!50]| doit être considéré comme le nom d'une fonction LaTeX qui prend
+exactement un argument, puisque, habituellement, elle est utilisée avec
+|\highLight[red!50]{|\texttt{\slshape text}|}|.
\medskip
\begingroup
@@ -591,57 +638,62 @@ Avec ce réglage, on obtient : \piton{def cube(x) : return x * x * x }
\bigskip
-L'usage des différents styles suivant le langage informatique considéré est décrit dans la partie \ref{Semantic}, à
-partir de la page \pageref{Semantic}.
+L'usage des différents styles suivant le langage informatique considéré est décrit dans la
+partie \ref{Semantic}, à partir de la page \pageref{Semantic}.
\bigskip
-\indexcommand{PitonStyle}
-La commande \DefinitionCommand{PitonStyle} prend en argument le nom d'un style et permet de récupérer la valeur (en
-tant que liste d'instructions LaTeX) de ce style.
+\indexcommand{PitonStyle} La commande \DefinitionCommand{PitonStyle} prend en argument le
+nom d'un style et permet de récupérer la valeur (en tant que liste d'instructions LaTeX)
+de ce style.
\smallskip
-Par exemple, on peut écrire, dans le texte courant, |{\PitonStyle{Keyword}{function}}| et on aura
-le mot {\PitonStyle{Keyword}{function}} formaté comme un mot-clé.
+Par exemple, on peut écrire, dans le texte courant, |{\PitonStyle{Keyword}{function}}| et
+on aura le mot {\PitonStyle{Keyword}{function}} formaté comme un mot-clé.
\smallskip
-La syntaxe |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| est nécessaire pour pouvoir tenir compte à la fois des commandes
-semi-globales et des commandes à argument présentes dans la valeur courante du style \texttt{\textsl{style}}.
+La syntaxe |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| est nécessaire pour pouvoir
+tenir compte à la fois des commandes semi-globales et des commandes à argument présentes
+dans la valeur courante du style \texttt{\textsl{style}}.
\subsubsection{Styles locaux et globaux}
-Un style peut être défini de manière globale avec la commande |\SetPitonStyle|. Cela veut dire qu'il s'appliquera
-par défaut à tous les langages informatiques qui utilisent ce style.
+Un style peut être défini de manière globale avec la commande |\SetPitonStyle|. Cela veut
+dire qu'il s'appliquera par défaut à tous les langages informatiques qui utilisent ce
+style.
\medskip
Par exemple, avec la commande
\begin{Verbatim}
\SetPitonStyle{Comment = \color{gray}}
\end{Verbatim}
-tous les commentaires (que ce soit en Python, en C, en OCaml, etc. ou dans un langage défini avec
-|\NewPitonLanguage|) seront composés en gris.
+tous les commentaires (que ce soit en Python, en C, en OCaml, etc. ou dans un langage
+défini avec |\NewPitonLanguage|) seront composés en gris.
\bigskip
-Mais il est aussi possible de définir un style localement pour un certain langage informatique en passant le nom du
-langage en argument optionnel (entre crochets) de la commande |\SetPitonStyle|.\footnote{On rappelle que, dans
- \pkg{piton}, les noms des langages informatiques ne sont pas sensibles à la casse.}
+Mais il est aussi possible de définir un style localement pour un certain langage
+informatique en passant le nom du langage en argument optionnel (entre crochets) de la
+commande |\SetPitonStyle|.\footnote{On rappelle que, dans \pkg{piton}, les noms des
+ langages informatiques ne sont pas sensibles à la casse.}
\medskip
Par exemple, avec la commande
\begin{Verbatim}
\SetPitonStyle~emphase#[SQL]@{Keywords = \color[HTML]{006699} \bfseries \MakeUppercase}
\end{Verbatim}
-les mots-clés dans les listings SQL seront composés en lettres capitales, même s'ils s'apparaissent en minuscules
-dans le fichier source LaTeX (on rappelle que, en SQL, les mot-clés ne sont pas sensibles à la casse et donc forcer
-leur mise en capitales peut être envisagé).
+les mots-clés dans les listings SQL seront composés en lettres capitales, même s'ils
+s'apparaissent en minuscules dans le fichier source LaTeX (on rappelle que, en SQL, les
+mot-clés ne sont pas sensibles à la casse et donc forcer leur mise en capitales peut être
+envisagé).
\medskip
-Comme on s'en doute, si un langage informatique utilise un certain style et que ce style n'est pas défini
-localement pour ce langage, c'est la version globale qui est utilisée. Cette notion de globalité n'a pas de
-rapport avec la notion de liaison locale de TeX (notion de groupe TeX).\footnote{Du point de vue des groupes de
- TeX, les liaisons faites par |\SetPitonStyle| sont toujours locales.}
+Comme on s'en doute, si un langage informatique utilise un certain style et que ce style
+n'est pas défini localement pour ce langage, c'est la version globale qui est utilisée.
+Cette notion de globalité n'a pas de rapport avec la notion de liaison locale de TeX
+(notion de groupe TeX).\footnote{Du point de vue des groupes de TeX, les liaisons faites
+ par |\SetPitonStyle| sont toujours locales.}
\medskip
Les styles fournis par défaut par \pkg{piton} sont tous définis globalement.
@@ -652,16 +704,19 @@ Les styles fournis par défaut par \pkg{piton} sont tous définis globalement.
\index{UserFunction (style)}
\bigskip
-Il existe un style spécial nommé |UserFunction|. Ce style s'applique aux noms des fonctions précédemment définies
-par l'utilisateur (par exemple, avec le langage Python, ces noms de fonctions sont ceux qui apparaissent après le
-mot-clé \piton{def} dans un listing Python précédent). La valeur initiale de ce style est nulle (=vide), ce qui
-fait que ces noms de fonctions sont formatés comme du texte courant (en noir). Néanmoins, il est possible de
-changer la valeur de ce style, comme tous les autres styles, avec la commande |\SetPitonStyle|.
+Il existe un style spécial nommé |UserFunction|. Ce style s'applique aux noms des
+fonctions précédemment définies par l'utilisateur (par exemple, avec le langage Python,
+ces noms de fonctions sont ceux qui apparaissent après le mot-clé \piton{def} dans un
+listing Python précédent). La valeur initiale de ce style est nulle (=vide), ce qui fait
+que ces noms de fonctions sont formatés comme du texte courant (en noir). Néanmoins, il
+est possible de changer la valeur de ce style, comme tous les autres styles, avec la
+commande |\SetPitonStyle|.
\medskip
-Dans l'exemple suivant, on règle les styles |Name.Function| et |UserFunction| de manière à ce que, quand on clique
-sur le nom d'une fonction Python précédemment définie par l'utilisateur, on soit renvoyé vers la définition
-(informatique) de cette fonction. Cette programmation utilise les fonctions |\hypertarget| et |\hyperlink| de \pkg{hyperref}.
+Dans l'exemple suivant, on règle les styles |Name.Function| et |UserFunction| de manière à
+ce que, quand on clique sur le nom d'une fonction Python précédemment définie par
+l'utilisateur, on soit renvoyé vers la définition (informatique) de cette fonction. Cette
+programmation utilise les fonctions |\hypertarget| et |\hyperlink| de \pkg{hyperref}.
\begingroup
@@ -698,7 +753,8 @@ def passe(v):
\end{Piton}
\medskip
-(Certains lecteurs de \textsc{pdf} affichent un cadre autour du mot |transpose| cliquable et d'autres non.)
+(Certains lecteurs de \textsc{pdf} affichent un cadre autour du mot |transpose| cliquable
+et d'autres non.)
\endgroup
@@ -707,12 +763,14 @@ def passe(v):
\bigskip
\begin{small}
-Bien sûr, la liste des noms de fonctions Python précédemment définies est gardée en mémoire de LuaLaTeX (de manière
-globale, c'est-à-dire indépendamment des groupes TeX). L'extension \pkg{piton} fournit une commande qui permet de
-vider cette liste : c'est la commande \DefinitionCommand{PitonClearUserFunctions}. Quand elle est utilisée sans argument, cette
-commande s'applique à tous les langages informatiques utilisées par l'utilisateur mais on peut spécifier en
-argument optionnel (entre crochets) une liste de langages informatiques auxquels elle s'appliquera.\footnote{On
- rappelle que, dans \pkg{piton}, les noms des langages informatiques ne sont pas sensibles à la casse. }
+Bien sûr, la liste des noms de fonctions Python précédemment définies est gardée en
+mémoire de LuaLaTeX (de manière globale, c'est-à-dire indépendamment des groupes TeX).
+L'extension \pkg{piton} fournit une commande qui permet de vider cette liste : c'est la
+commande \DefinitionCommand{PitonClearUserFunctions}. Quand elle est utilisée sans
+argument, cette commande s'applique à tous les langages informatiques utilisées par
+l'utilisateur mais on peut spécifier en argument optionnel (entre crochets) une liste de
+langages informatiques auxquels elle s'appliquera.\footnote{On rappelle que, dans
+ \pkg{piton}, les noms des langages informatiques ne sont pas sensibles à la casse. }
\end{small}
@@ -722,24 +780,26 @@ argument optionnel (entre crochets) une liste de langages informatiques auxquels
\label{NewPitonEnvironment}
\indexcommand{NewPitonEnvironment}
-Comme l'environnement |{Piton}| a besoin d'absorber son contenu d'une manière spéciale (à peu près comme du texte
-verbatim), il n'est pas possible de définir de nouveaux environnements directement au-dessus de l'environnement
-|{Piton}| avec les commandes classiques |\newenvironment| (de LaTeX standard) et |\NewDocumentEnvironment| (de
-LaTeX3).
+Comme l'environnement |{Piton}| a besoin d'absorber son contenu d'une manière spéciale (à
+peu près comme du texte verbatim), il n'est pas possible de définir de nouveaux
+environnements directement au-dessus de l'environnement |{Piton}| avec les commandes
+classiques |\newenvironment| (de LaTeX standard) et |\NewDocumentEnvironment| (de LaTeX3).
-C'est pourquoi \pkg{piton} propose une commande |\NewPitonEnvironment|. Cette commande a la même syntaxe que la
-commande classique |\NewDocumentEnvironment|.\footnote{Néanmoins, le spécificateur d'argument~|b|, qui sert à
- capter le corps de l'environnement comme un argument LaTeX, n'est pas autorisé.}
+C'est pourquoi \pkg{piton} propose une commande |\NewPitonEnvironment|. Cette commande a
+la même syntaxe que la commande classique |\NewDocumentEnvironment|.\footnote{Néanmoins,
+ le spécificateur d'argument~|b|, qui sert à capter le corps de l'environnement comme un
+ argument LaTeX, n'est pas autorisé.}
\bigskip
-Par exemple, avec l'instruction suivante, un nouvel environnement |{Python}| sera défini avec le même comportement
-que l'environnement |{Piton}|:
+Par exemple, avec l'instruction suivante, un nouvel environnement |{Python}| sera défini
+avec le même comportement que l'environnement |{Piton}|:
{\color{gray}|\NewPitonEnvironment{Python}{O{}}{\PitonOptions{#1}}{}|}
\bigskip
-Si on souhaite un environnement |{Python}| qui compose le code inclus dans une boîte de \pkg{tcolorbox}, on peut
-écrire (à condition, bien entendu, d'avoir chargé l'extension \pkg{tcolorbox}):
+Si on souhaite un environnement |{Python}| qui compose le code inclus dans une boîte de
+\pkg{tcolorbox}, on peut écrire (à condition, bien entendu, d'avoir chargé l'extension
+\pkg{tcolorbox}):
\begin{Verbatim}
\NewPitonEnvironment{Python}{}
@@ -780,21 +840,25 @@ def carré(x):
L'extension \pkg{listings} est une célèbre extension LaTeX pour formater des codes informatiques.
\medskip
-Elle propose une commande |\lstdefinelanguage| pour définir de nouveaux langages. Cette commande est aussi
-utilisée en interne par \pkg{listings} pour sa définition des languages (en fait, pour cela, \pkg{listings} utilise
-une commande nommée |\lst@definelanguage| mais celle-ci a la même syntaxe que |\lstdefinelanguage|).
+Elle propose une commande |\lstdefinelanguage| pour définir de nouveaux langages. Cette
+commande est aussi utilisée en interne par \pkg{listings} pour sa définition des languages
+(en fait, pour cela, \pkg{listings} utilise une commande nommée |\lst@definelanguage| mais
+celle-ci a la même syntaxe que |\lstdefinelanguage|).
\medskip
-L'extension \pkg{piton} propose une commande \DefinitionCommand{NewPitonLanguage} pour définir de nouveaux
-langages (utilisables avec les outils de \pkg{piton}) avec quasiment la même syntaxe que |\lstdefinelanguage|.
+L'extension \pkg{piton} propose une commande \DefinitionCommand{NewPitonLanguage} pour
+définir de nouveaux langages (utilisables avec les outils de \pkg{piton}) avec quasiment
+la même syntaxe que |\lstdefinelanguage|.
\medskip
-Précisons tout de suite que l'extension \pkg{piton} n'utilise \emph{pas} cette commande pour définir les langages
-qu'elle propose nativement (Python, C, OCaml, \CC\ et |minimal|), ce qui permet de proposer des parseurs plus puissants.
+Précisons tout de suite que l'extension \pkg{piton} n'utilise \emph{pas} cette commande
+pour définir les langages qu'elle propose nativement (Python, C, OCaml, \CC\ et
+|minimal|), ce qui permet de proposer des parseurs plus puissants.
\medskip
-Par exemple, dans le fichier |lstlang1.sty|, qui est un des fichiers de definition des langages proposés par défaut
-par \pkg{listings}, on trouve les instructions suivantes (dans la version 1.10a).
+Par exemple, dans le fichier |lstlang1.sty|, qui est un des fichiers de definition des
+langages proposés par défaut par \pkg{listings}, on trouve les instructions suivantes
+(dans la version 1.10a).
\begin{Verbatim}[formatcom=\small\color{gray}]
\lst~@definelanguage{Java}%
@@ -813,9 +877,10 @@ par \pkg{listings}, on trouve les instructions suivantes (dans la version 1.10a)
\end{Verbatim}
\medskip
-Pour définir un language nommé |Java| pour \pkg{piton}, il suffit d'écrire le code suivant,
-{\bfseries où le dernier argument de |\lst@definelanguage|, qui est entre crochets, a été supprimé}
-(en fait, les symboles \verb+%+ pourraient être supprimés sans problème).
+Pour définir un language nommé |Java| pour \pkg{piton}, il suffit d'écrire le code
+suivant, {\bfseries où le dernier argument de |\lst@definelanguage|, qui est entre
+ crochets, a été supprimé} (en fait, les symboles \verb+%+ pourraient être supprimés sans
+problème).
\begin{Verbatim}[formatcom=\small\color{gray}]
~emphase#\NewPitonLanguage@{Java}%
@@ -850,11 +915,13 @@ Pour définir un language nommé |Java| pour \pkg{piton}, il suffit d'écrire le
\medskip
-On peut alors utiliser le language Java comme n'importe quel autre langage prédéfini de \pkg{piton}.
+On peut alors utiliser le language Java comme n'importe quel autre langage prédéfini de
+\pkg{piton}.
-Voici un exemple de code Java formaté dans un environnement~|{Piton}| avec la clé~|language=Java|.\footnote{On
- rappelle que, pour \pkg{piton}, les noms de langages informatiques ne sont pas sensibles à la casse, ce qui fait
- que l'on aurait pu aussi bien utiliser : |language=java|.}
+Voici un exemple de code Java formaté dans un environnement~|{Piton}| avec la
+clé~|language=Java|.\footnote{On rappelle que, pour \pkg{piton}, les noms de langages
+ informatiques ne sont pas sensibles à la casse, ce qui fait que l'on aurait pu aussi
+ bien utiliser : |language=java|.}
\bigskip
\begingroup
@@ -893,12 +960,14 @@ public class Cipher { // cryptage par le chiffre de César
\endgroup
\bigskip
-Les clés de la commande |\lstdefinelanguage| de \pkg{listings} prises en charge par |\NewPitonLanguage| sont :
-|morekeywords|, |otherkeywords|, |sensitive|, |keywordsprefix|, |moretexcs|, |morestring| (avec les lettres |b|,
-|d|, |s| et |m|), |morecomment| (avec les lettres |i|, |l|, |s| et |n|), |moredelim| (avec les lettres |i|,
-|l|, |s|, |*| et |**|), |moredirectives|, |tag|, |alsodigit|, |alsoletter| et |alsoother|.
+Les clés de la commande |\lstdefinelanguage| de \pkg{listings} prises en charge par
+|\NewPitonLanguage| sont : |morekeywords|, |otherkeywords|, |sensitive|, |keywordsprefix|,
+|moretexcs|, |morestring| (avec les lettres |b|, |d|, |s| et |m|), |morecomment| (avec les
+lettres |i|, |l|, |s| et |n|), |moredelim| (avec les lettres |i|, |l|, |s|, |*| et |**|),
+|moredirectives|, |tag|, |alsodigit|, |alsoletter| et |alsoother|.
-Pour la description de ces clés, on renvoie à la documentation de \pkg{listings} (taper |texdoc| |listings| dans un terminal).
+Pour la description de ces clés, on renvoie à la documentation de \pkg{listings} (taper
+|texdoc| |listings| dans un terminal).
\bigskip
Par exemple, pour formater du code LaTeX, on pourra créer le language suivant :
@@ -907,10 +976,9 @@ Par exemple, pour formater du code LaTeX, on pourra créer le language suivant :
\begin{verbatim}
\NewPitonLanguage{LaTeX}{keywordsprefix = \ , alsoletter = @_ }
\end{verbatim}
-}
-Initialement, les caractères |@| et |_| sont des considérés comme des lettres car de nombreux langages de
-programmation les autorisent dans les mots-clés et les identificateurs. Avec \verb|alsoletter = @_|, on les retire
-de la catégorie des lettres.
+} Initialement, les caractères |@| et |_| sont des considérés comme des lettres car de
+nombreux langages de programmation les autorisent dans les mots-clés et les
+identificateurs. Avec \verb|alsoletter = @_|, on les retire de la catégorie des lettres.
\section{Fonctionnalités avancées}
@@ -926,84 +994,98 @@ de la catégorie des lettres.
\index{split-on-empty-lines}
\index{split-separation}
-Par défaut, les listings produits par l'environnement |{Piton}| et par la commande |\PitonInputFile| sont
-insécables.
+Par défaut, les listings produits par l'environnement |{Piton}| et par la commande
+|\PitonInputFile| sont insécables.
-Néanmoins, la commande |\PitonOptions| propose les clés |split-on-empty-lines| et |splittable| pour autoriser de
-telles coupures.
+Néanmoins, la commande |\PitonOptions| propose les clés |split-on-empty-lines| et
+|splittable| pour autoriser de telles coupures.
\begin{itemize}
-\item La clé \Definition{split-on-empty-lines} autorise les coupures sur les lignes vides\footnote{Les lignes considérées
- comme vides sont celles qui ne comportent que des espaces.} du listing. Dans les listings informatiques, les
-lignes vides séparent le plus souvent les définitions des fonctions informatiques et il est donc souvent judicieux
-de pouvoir couper au niveau de ces lignes.
+\item La clé \Definition{split-on-empty-lines} autorise les coupures sur les lignes
+vides\footnote{Les lignes considérées comme vides sont celles qui ne comportent que des
+ espaces.} du listing. Dans les listings informatiques, les lignes vides séparent le plus
+souvent les définitions des fonctions informatiques et il est donc souvent judicieux de
+pouvoir couper au niveau de ces lignes.
-Quand la clé |split-on-empty-lines| est activée, le travail effectué va en fait un peu plus loin : les lignes vides
-successives sont supprimées et remplacées par le contenu du paramètre correspondant à la clé
-\Definition{split-separation}.
+Quand la clé |split-on-empty-lines| est activée, le travail effectué va en fait un peu
+plus loin : les lignes vides successives sont supprimées et remplacées par le contenu du
+paramètre correspondant à la clé \Definition{split-separation}.
-La valeur initiale de ce paramètre est |\vspace{\baselineskip}\vspace{-1.25pt}|, ce qui, au final, correspond à une
-ligne vide dans le PDF produit (cet espace vertical est supprimé s'il tombe au niveau d'un saut de page).
+La valeur initiale de ce paramètre est |\vspace{\baselineskip}\vspace{-1.25pt}|, ce qui,
+au final, correspond à une ligne vide dans le PDF produit (cet espace vertical est
+supprimé s'il tombe au niveau d'un saut de page).
\medskip
-\item La clé |split-on-empty-lines| peut bien sûr être insuffisante et c'est pourquoi \pkg{piton} propose la clé
-\Definition{splittable}.
+\item La clé |split-on-empty-lines| peut bien sûr être insuffisante et c'est pourquoi
+\pkg{piton} propose la clé \Definition{splittable}.
-Quand la clé |splittable| est utilisée avec la valeur numérique $n$ (qui doit être un entier naturel non nul) le
-listing, ou bien chaque partie de ce listing située entre des lignes vides (quand |split-on-empty-lines| est
-utilisée), pourra être coupé n'importe où avec cette exception qu'aucune coupure ne pourra avoir lieu entre les
-$n$~premières lignes, ni entre les $n$~dernières. Par exemple, |splittable = 4| pourrait être un réglage raisonnable.
+Quand la clé |splittable| est utilisée avec la valeur numérique $n$ (qui doit être un
+entier naturel non nul) le listing, ou bien chaque partie de ce listing située entre des
+lignes vides (quand |split-on-empty-lines| est utilisée), pourra être coupé n'importe où
+avec cette exception qu'aucune coupure ne pourra avoir lieu entre les $n$~premières
+lignes, ni entre les $n$~dernières. Par exemple, |splittable = 4| pourrait être un réglage
+raisonnable.
-Employée sans argument, la clé |splittable| est équivalente à |splittable = 1|, et les listings sont alors sécables
-n'importe où (ce n'est pas recommandable).
+Employée sans argument, la clé |splittable| est équivalente à |splittable = 1|, et les
+listings sont alors sécables n'importe où (ce n'est pas recommandable).
\end{itemize}
\medskip
\emph{Remarque}\par\nobreak
-Même avec une couleur de fond (fixée avec |background-color|), les sauts de page sont possibles, à partir du moment
-où |split-on-empty-lines| ou |splittable| est utilisée.\footnote{Avec la clé |splittable|, un environnement
- |{Piton}| est sécable même dans un environnement de \pkg{tcolorbox} (à partir du moment où la clé |breakable| de
- \pkg{tcolorbox} est utilisée). On précise cela parce que, en revanche, un environnement de \pkg{tcolorbox} inclus
- dans un autre environnement de \pkg{tcolorbox} n'est pas sécable, même quand les deux utilisent la clé
- |breakable|.}
+Même avec une couleur de fond (fixée avec |background-color|), les sauts de page sont
+possibles, à partir du moment où |split-on-empty-lines| ou |splittable| est
+utilisée.\footnote{Avec la clé |splittable|, un environnement |{Piton}| est sécable même
+ dans un environnement de \pkg{tcolorbox} (à partir du moment où la clé |breakable| de
+ \pkg{tcolorbox} est utilisée). On précise cela parce que, en revanche, un environnement
+ de \pkg{tcolorbox} inclus dans un autre environnement de \pkg{tcolorbox} n'est pas
+ sécable, même quand les deux utilisent la clé |breakable|.}
\subsubsection{Coupure des lignes}
\label{line-breaks}
-Par défaut, les éléments produits par \pkg{piton} ne peuvent pas être coupés par une fin de ligne. Il existe
-néanmoins des clés pour autoriser de telles coupures (les points de coupure possibles sont les espaces, y compris
-les espaces dans les chaînes Python).
+Par défaut, les éléments produits par \pkg{piton} ne peuvent pas être coupés par une fin
+de ligne. Il existe néanmoins des clés pour autoriser de telles coupures (les points de
+coupure possibles sont les espaces, y compris les espaces dans les chaînes Python).
\begin{itemize}
-\item \index{break-lines!break-lines-in-piton} Avec la clé \Definition{break-lines-in-piton}, les coupures de ligne sont autorisées dans la commande
-|\piton{...}| (mais pas dans la commande \verb+\piton|...|+, c'est-à-dire avec la syntaxe verbatim).
-
-\item \index{break-lines!break-lines-in-Piton} Avec la clé \Definition{break-lines-in-Piton}, les coupures de ligne sont autorisées dans l'environnement
-|{Piton}| (d'où la lettre |P| capitale dans le nom) et les listings produits par |\PitonInputFile|.
-
-\item \index{break-lines} La clé \Definition{break-lines} est la conjonction des deux clés précédentes.
+\item \index{break-lines!break-lines-in-piton} Avec la clé
+\Definition{break-lines-in-piton}, les coupures de ligne sont autorisées dans la commande
+|\piton{...}| (mais pas dans la commande \verb+\piton|...|+, c'est-à-dire avec la syntaxe
+verbatim).
+
+\item \index{break-lines!break-lines-in-Piton} Avec la clé
+\Definition{break-lines-in-Piton}, les coupures de ligne sont autorisées dans
+l'environnement |{Piton}| (d'où la lettre |P| capitale dans le nom) et les listings
+produits par |\PitonInputFile|.
+
+\item \index{break-lines} La clé \Definition{break-lines} est la conjonction des deux clés
+précédentes.
\end{itemize}
\medskip
-L'extension \pkg{piton} fournit aussi plusieurs clés pour contrôler l'apparence des coupures de ligne autorisées par |break-lines-in-Piton|.
+L'extension \pkg{piton} fournit aussi plusieurs clés pour contrôler l'apparence des
+coupures de ligne autorisées par |break-lines-in-Piton|.
\begin{itemize}
-\item \index{indent-broken-lines} Avec la clé \Definition{indent-broken-lines}, l'indentation de la ligne coupée est respectée à chaque retour
-à la ligne.
+\item \index{indent-broken-lines} Avec la clé \Definition{indent-broken-lines},
+l'indentation de la ligne coupée est respectée à chaque retour à la ligne.
-\item \index{end-of-broken-line} La clé \Definition{end-of-broken-line} correspond au symbole placé à la fin d'une ligne coupée. Sa valeur initiale est :
+\item \index{end-of-broken-line} La clé \Definition{end-of-broken-line} correspond au
+symbole placé à la fin d'une ligne coupée. Sa valeur initiale est :
|\hspace*{0.5em}\textbackslash|.
-\item \index{continuation-symbol} La clé \Definition{continuation-symbol} correspond au symbole placé à chaque retour de ligne dans la marge
-gauche. Sa valeur initiale est : |+\;| (la commande |\;| insère un petit espace horizontal).
+\item \index{continuation-symbol} La clé \Definition{continuation-symbol} correspond au
+symbole placé à chaque retour de ligne dans la marge gauche. Sa valeur initiale est :
+|+\;| (la commande |\;| insère un petit espace horizontal).
-\item \index{continuation-symbol-on-indentation} La clé \Definition{continuation-symbol-on-indentation} correspond au symbole placé à chaque retour de ligne
-au niveau de l'indentation (uniquement dans le cas où la clé |indent-broken-lines| est active). Sa valeur initiale
-est : |$\hookrightarrow\;$|.
+\item \index{continuation-symbol-on-indentation} La clé
+\Definition{continuation-symbol-on-indentation} correspond au symbole placé à chaque
+retour de ligne au niveau de l'indentation (uniquement dans le cas où la clé
+|indent-broken-lines| est active). Sa valeur initiale est : |$\hookrightarrow\;$|.
\end{itemize}
\bigskip
@@ -1039,21 +1121,25 @@ def dict_of_liste(liste):
\indexcommand{PitonInputFile}
-La commande |\PitonInputFile| permet d'insérer (avec formatage) le contenu d'un fichier. En fait, il existe des
-mécanismes permettant de n'insérer qu'une partie du fichier en question.
+La commande |\PitonInputFile| permet d'insérer (avec formatage) le contenu d'un fichier.
+En fait, il existe des mécanismes permettant de n'insérer qu'une partie du fichier en
+question.
\begin{itemize}
-\item On peut spécifier la partie à insérer par les numéros de lignes (dans le fichier d'origine).
+\item On peut spécifier la partie à insérer par les numéros de lignes (dans le fichier
+d'origine).
\item On peut aussi spécifier la partie à insérer par des marqueurs textuels.
\end{itemize}
-Dans les deux cas, si on souhaite numéroter les lignes avec les numéros des lignes du fichier d'origine, il
-convient d'utiliser la clé |line-numbers/absolute|.
+Dans les deux cas, si on souhaite numéroter les lignes avec les numéros des lignes du
+fichier d'origine, il convient d'utiliser la clé |line-numbers/absolute|.
\subsubsection{Avec les numéros de lignes absolus}
-La commande |\PitonInputFile| propose les clés \Definition{first-line} et \Definition{last-line} pour n'insérer que
-la partie du fichier comprise entre les lignes correspondantes. Ne pas confondre avec la clé |line-numbers/start|
-qui demande un numérotage des lignes commençant à la valeur donnée à cette clé (en un sens |line-numbers/start|
-concerne la sortie alors que |first-line| et |last-line| concernent l'entrée).
+La commande |\PitonInputFile| propose les clés \Definition{first-line} et
+\Definition{last-line} pour n'insérer que la partie du fichier comprise entre les lignes
+correspondantes. Ne pas confondre avec la clé |line-numbers/start| qui demande un
+numérotage des lignes commençant à la valeur donnée à cette clé (en un sens
+|line-numbers/start| concerne la sortie alors que |first-line| et |last-line| concernent
+l'entrée).
\subsubsection{Avec des marqueurs textuels}
@@ -1062,15 +1148,17 @@ concerne la sortie alors que |first-line| et |last-line| concernent l'entrée).
\index{marker/end}
-Pour utiliser cette technique, il convient d'abord de spécifier le format des marqueurs marquant le début et la fin
-de la partie du fichier à inclure. Cela se fait avec les deux clés \Definition{marker/beginning} et
-\Definition{marker/end} (usuellement dans la commande |\PitonOptions|).
+Pour utiliser cette technique, il convient d'abord de spécifier le format des marqueurs
+marquant le début et la fin de la partie du fichier à inclure. Cela se fait avec les deux
+clés \Definition{marker/beginning} et \Definition{marker/end} (usuellement dans la
+commande |\PitonOptions|).
\medskip
Prenons d'abord un exemple.
\medskip
-Supposons que le fichier à inclure contienne des solutions à des exercices de programmation sur le modèle suivant :
+Supposons que le fichier à inclure contienne des solutions à des exercices de
+programmation sur le modèle suivant :
\begin{Verbatim}[formatcom=\small\color{gray}]
~#[Exercice 1] Version itérative
@@ -1087,25 +1175,27 @@ def fibo(n):
~#<Exercice 1>
\end{Verbatim}
-Les marqueurs de début de début et de fin sont les chaînes |#[Exercice 1]| et |#<Exercice 1>|. La chaîne
-«|Exercice 1|» sera appelée le \emph{label} de l'exercice (ou de la partie du fichier à inclure).
+Les marqueurs de début de début et de fin sont les chaînes |#[Exercice 1]| et
+|#<Exercice 1>|. La chaîne «|Exercice 1|» sera appelée le \emph{label} de l'exercice (ou
+de la partie du fichier à inclure).
-Pour spécifier des marqueurs de cette sorte dans \pkg{piton}, on utilisera les clés |marker/beginning| et |marker/end|
-de la manière suivante (le caractère |#| des commentaires de Python doit être inséré sous la forme échappée |\#|).
+Pour spécifier des marqueurs de cette sorte dans \pkg{piton}, on utilisera les clés
+|marker/beginning| et |marker/end| de la manière suivante (le caractère |#| des
+commentaires de Python doit être inséré sous la forme échappée |\#|).
\begin{Verbatim}
\PitonOptions{ ~emphase#marker/beginning@ = \~#[~#1] , ~emphase#marker/end@ = \~#<~#1> }
\end{Verbatim}
-Comme on le voit, |marker/beginning| est une expression correspondant à la fonction mathématique qui, au nom du
-label (par exemple |Exercice 1|), associe le marqueur de début (dans l'exemple |#[Exercice 1]|). La chaîne |#1|
-correspond aux occurrences de l'argument de cette fonction (c'est la syntaxe habituelle de TeX). De même pour
-|marker/end|.
+Comme on le voit, |marker/beginning| est une expression correspondant à la fonction
+mathématique qui, au nom du label (par exemple |Exercice 1|), associe le marqueur de début
+(dans l'exemple |#[Exercice 1]|). La chaîne |#1| correspond aux occurrences de l'argument
+de cette fonction (c'est la syntaxe habituelle de TeX). De même pour |marker/end|.
\bigskip
-Pour insérer une partie marquée d'un fichier, il suffit alors d'utiliser la clé \Definition{range} de
-|\PitonInputFile|.
+Pour insérer une partie marquée d'un fichier, il suffit alors d'utiliser la clé
+\Definition{range} de |\PitonInputFile|.
\smallskip
\begin{Verbatim}
@@ -1126,9 +1216,8 @@ def fibo(n):
return v
\end{Piton}
-\vspace{1cm}
-\index{marker/include-lines}
-La clé \Definition{marker/include-lines} demande que les lignes contenant les marqueurs soient également insérées.
+\vspace{1cm} \index{marker/include-lines} La clé \Definition{marker/include-lines} demande
+que les lignes contenant les marqueurs soient également insérées.
\begin{Verbatim}
\PitonInputFile[~emphase#marker/include-lines@,range = Exercice 1]{~textsl#nom_du_fichier@}
@@ -1151,13 +1240,12 @@ def fibo(n):
\bigskip
-\index{begin-range}
-\index{end-range}
-Il existe en fait aussi les clés \Definition{begin-range} et \Definition{end-range} pour insérer plusieurs
-contenus marqués simultanément.
+\index{begin-range} \index{end-range} Il existe en fait aussi les clés
+\Definition{begin-range} et \Definition{end-range} pour insérer plusieurs contenus marqués
+simultanément.
-Par exemple, pour insérer les solutions des exercices 3 à 5, on pourra écrire (à condition que le fichier soit
-structuré correctement!):
+Par exemple, pour insérer les solutions des exercices 3 à 5, on pourra écrire (à condition
+que le fichier soit structuré correctement!):
\begin{Verbatim}
\PitonInputFile[~emphase#begin-range = Exercice 3, end-range = Exercice 5@]{~textsl#nom_du_fichier@}
@@ -1171,27 +1259,31 @@ structuré correctement!):
\indexcommand{SetPitonIdentifier}
\label{SetPitonIdentifier}
-La commande \DefinitionCommand{SetPitonIdentifier} permet de changer le formatage de certains identificateurs.
+La commande \DefinitionCommand{SetPitonIdentifier} permet de changer le formatage de
+certains identificateurs.
\smallskip
Cette commande prend trois arguments : un optionnel et deux obligatoires.
\begin{itemize}
-\item L'argument optionnel (entre crochets) indique le langage (informatique) concerné ; si cet
-argument est absent, les réglages faits par |\SetPitonIdentifier| s'appliqueront à tous les langages.\footnote{On rappelle que, dans \pkg{piton}, les noms des langages informatiques ne sont pas
- sensibles à la casse.}
+\item L'argument optionnel (entre crochets) indique le langage (informatique) concerné ;
+si cet argument est absent, les réglages faits par |\SetPitonIdentifier| s'appliqueront à
+tous les langages.\footnote{On rappelle que, dans \pkg{piton}, les noms des langages
+ informatiques ne sont pas sensibles à la casse.}
-\item Le premier argument obligatoire est une liste de noms d'identificateurs séparés par des virgules.
+\item Le premier argument obligatoire est une liste de noms d'identificateurs séparés par
+des virgules.
-\item Le deuxième argument obligatoire est une liste d'instructions LaTeX de formatage du même type que pour les
-styles précédemment définis (cf. \ref{styles}, p.~\pageref{styles}).
+\item Le deuxième argument obligatoire est une liste d'instructions LaTeX de formatage du
+même type que pour les styles précédemment définis (cf. \ref{styles},
+p.~\pageref{styles}).
\end{itemize}
-\emph{Attention} : Seuls les identificateurs peuvent voir leur formatage affecté. Les mots-clés et les noms de
-fonctions prédéfinies ne seront pas affectés, même s'ils figurent dans le premier argument de
-|\SetPitonIdentifier|.
+\emph{Attention} : Seuls les identificateurs peuvent voir leur formatage affecté. Les
+mots-clés et les noms de fonctions prédéfinies ne seront pas affectés, même s'ils figurent
+dans le premier argument de |\SetPitonIdentifier|.
\begin{Verbatim}
~emphase#\SetPitonIdentifier{l1,l2}{\color{red}}@
@@ -1230,8 +1322,9 @@ def tri(l):
\endgroup
\bigskip
-Avec la commande |\SetPitonIdentifiers|, on peut ajouter à un langage informatique de nouvelles fonctions
-prédéfinies (ou de nouveaux mots-clés, etc.) qui seront détectées par \pkg{piton}.
+Avec la commande |\SetPitonIdentifiers|, on peut ajouter à un langage informatique de
+nouvelles fonctions prédéfinies (ou de nouveaux mots-clés, etc.) qui seront détectées par
+\pkg{piton}.
\begin{Verbatim}
@@ -1272,16 +1365,18 @@ floor(5.4)
L'extension \pkg{piton} propose plusieurs mécanismes d'échappement vers LaTeX :
\begin{itemize}
\item Il est possible d'avoir des commentaires entièrement composés en LaTeX.
-\item Il est possible d'avoir, dans les commentaires Python, les éléments entre \texttt{\$} composés en mode
-mathématique de LaTeX.
-\item Il est possible de demander à \pkg{piton} de détecter directement certaines commandes LaTeX avec leur argument.
+\item Il est possible d'avoir, dans les commentaires Python, les éléments entre
+\texttt{\$} composés en mode mathématique de LaTeX.
+\item Il est possible de demander à \pkg{piton} de détecter directement certaines
+commandes LaTeX avec leur argument.
\item Il est possible d'insérer du code LaTeX à n'importe quel endroit d'un listing Python.
\end{itemize}
Ces mécanismes vont être détaillés dans les sous-parties suivantes.
\smallskip
-À remarquer également que, dans le cas où \pkg{piton} est utilisée dans la classe \cls{beamer}, \pkg{piton} détecte
-la plupart des commandes et environnements de Beamer : voir la sous-section \ref{beamer}, p.~\pageref{beamer}.
+À remarquer également que, dans le cas où \pkg{piton} est utilisée dans la classe
+\cls{beamer}, \pkg{piton} détecte la plupart des commandes et environnements de Beamer :
+voir la sous-section \ref{beamer}, p.~\pageref{beamer}.
\subsubsection{Les «commentaires LaTeX»}
@@ -1289,14 +1384,16 @@ la plupart des commandes et environnements de Beamer : voir la sous-section \ref
\index{comment-latex}
\index{commentaires LaTeX}
-Dans ce document, on appelle «commentaire LaTeX» des commentaires qui débutent par |#>|. Tout ce qui suit ces deux
-caractères, et jusqu'à la fin de la ligne, sera composé comme du code LaTeX standard.
+Dans ce document, on appelle «commentaire LaTeX» des commentaires qui débutent par |#>|.
+Tout ce qui suit ces deux caractères, et jusqu'à la fin de la ligne, sera composé comme du
+code LaTeX standard.
Il y a deux outils pour personnaliser ces commentaires.
\begin{itemize}
-\item Il est possible de changer le marquage syntaxique utilisé (qui vaut initialement~|#>|). Pour ce faire, il
-existe une clé \Definition{comment-latex}, \emph{disponible uniquement dans le préambule du document}, qui permet de choisir les
+\item Il est possible de changer le marquage syntaxique utilisé (qui vaut
+initialement~|#>|). Pour ce faire, il existe une clé \Definition{comment-latex},
+\emph{disponible uniquement dans le préambule du document}, qui permet de choisir les
caractères qui (précédés par~|#|) serviront de marqueur syntaxique.
Par exemple, avec le réglage suivant (fait dans le préambule du document) :
@@ -1305,18 +1402,18 @@ Par exemple, avec le réglage suivant (fait dans le préambule du document) :
les commentaires LaTeX commenceront par~|#LaTeX|.
-Si on donne la valeur nulle à la clé |comment-latex|, tous les commentaires Python (débutant par~|#|) seront en
-fait des «commentaires LaTeX».
+Si on donne la valeur nulle à la clé |comment-latex|, tous les commentaires Python
+(débutant par~|#|) seront en fait des «commentaires LaTeX».
\smallskip
-\item Il est possible de changer le formatage du commentaire LaTeX lui-même en changeant le style \pkg{piton}
-|Comment.LaTeX|.
+\item Il est possible de changer le formatage du commentaire LaTeX lui-même en changeant
+le style \pkg{piton} |Comment.LaTeX|.
-Par exemple, avec |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, les commentaires LaTeX seront composés
-en bleu.
+Par exemple, avec |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, les
+commentaires LaTeX seront composés en bleu.
-Si on souhaite qu'un croisillon (|#|) soit affiché en début de commentaire dans le \textsc{pdf}, on peut régler
-|Comment.LaTeX| de la manière suivante :
+Si on souhaite qu'un croisillon (|#|) soit affiché en début de commentaire dans le
+\textsc{pdf}, on peut régler |Comment.LaTeX| de la manière suivante :
\begin{Verbatim}
\SetPitonStyle{Comment.LaTeX = \color{gray}\~#\normalfont\space }
@@ -1328,11 +1425,12 @@ p.~\pageref{example-comments}.
\bigskip
-Si l'utilisateur a demandé l'affichage des numéros de ligne avec |line-numbers|, il est possible de faire référence
-à ce numéro de ligne avec la commande |\label| placée dans un commentaire LaTeX.\footnote{Cette fonctionnalité est
- implémentée en redéfinissant, dans les environnements |{Piton}|, la commande |\label|. Il peut donc y avoir des
- incompatibilités avec les extensions qui redéfinissent (globalement) cette commande |\label| (comme
- \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)}
+Si l'utilisateur a demandé l'affichage des numéros de ligne avec |line-numbers|, il est
+possible de faire référence à ce numéro de ligne avec la commande |\label| placée dans un
+commentaire LaTeX.\footnote{Cette fonctionnalité est implémentée en redéfinissant, dans
+ les environnements |{Piton}|, la commande |\label|. Il peut donc y avoir des
+ incompatibilités avec les extensions qui redéfinissent (globalement) cette commande
+ |\label| (comme \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)}
@@ -1341,15 +1439,17 @@ Si l'utilisateur a demandé l'affichage des numéros de ligne avec |line-numbers
\index{math-comments}
-Il est possible de demander que, dans les commentaires Python normaux, c'est-à-dire débutant par~|#| (et non par
-|#>|), les éléments placés entre symboles \texttt{\$} soient composés en mode mathématique de LaTeX (le reste du
-commentaire restant composé en verbatim).
+Il est possible de demander que, dans les commentaires Python normaux, c'est-à-dire
+débutant par~|#| (et non par |#>|), les éléments placés entre symboles \texttt{\$} soient
+composés en mode mathématique de LaTeX (le reste du commentaire restant composé en
+verbatim).
-La clé \Definition{math-comments} (\emph{qui ne peut être activée que dans le préambule du document}) active ce
-comportement.
+La clé \Definition{math-comments} (\emph{qui ne peut être activée que dans le préambule du
+ document}) active ce comportement.
\bigskip
-Dans l'exemple suivant, on suppose que |\PitonOptions{math-comments}| a été utilisé dans le préambule du document.
+Dans l'exemple suivant, on suppose que |\PitonOptions{math-comments}| a été utilisé dans
+le préambule du document.
\begin{Verbatim}
\begin{Piton}
@@ -1369,23 +1469,25 @@ def carré(x):
\index{detected-commands (key)}
\label{detected-commands}
-La clé \Definition{detected-commands} de |\PitonOptions| permet de spécifier une liste de noms de commandes LaTeX
-qui seront directement détectées par \pkg{piton}.
+La clé \Definition{detected-commands} de |\PitonOptions| permet de spécifier une liste de
+noms de commandes LaTeX qui seront directement détectées par \pkg{piton}.
\begin{itemize}
-\item Cette clé |detected-commands| ne peut être utilisée que dans le préambule du document.
+\item Cette clé |detected-commands| ne peut être utilisée que dans le préambule du
+document.
-\item Les noms de commandes LaTeX doivent apparaître sans la contre-oblique
-(ex. : |detected-commands = { emph , textbf }|).
+\item Les noms de commandes LaTeX doivent apparaître sans la contre-oblique (ex. :
+|detected-commands = { emph , textbf }|).
-\item Ces commandes doivent être des commandes LaTeX à un seul argument obligatoire entre accolades (et ces
-accolades doivent apparaître explicitement dans le listing).
+\item Ces commandes doivent être des commandes LaTeX à un seul argument obligatoire entre
+accolades (et ces accolades doivent apparaître explicitement dans le listing).
\end{itemize}
\medskip
-Dans l'exemple suivant, qui est une programmation récursive de la factorielle, on décide de surligner en jaune
-l'appel récursif. La commande |\highLight| de \pkg{lua-ul} (cette extension requiert elle-même l'extension
-\pkg{luacolor}) permet de le faire avec la syntaxe |\hightLight{...}|.
+Dans l'exemple suivant, qui est une programmation récursive de la factorielle, on décide
+de surligner en jaune l'appel récursif. La commande |\highLight| de \pkg{lua-ul} (cette
+extension requiert elle-même l'extension \pkg{luacolor}) permet de le faire avec la
+syntaxe |\hightLight{...}|.
\smallskip
On suppose que l'on a mis dans le préambule du document LaTeX l'instruction suivante :
@@ -1419,16 +1521,19 @@ def fact(n):
\index{end-escape}
\label{escape}
-Il est aussi possible de surcharger les listings Python pour y insérer du code LaTeX à peu près n'importe où (mais
-entre deux lexèmes, bien entendu). Cette fonctionnalité n'est pas activée par défaut par \pkg{piton}. Pour
-l'utiliser, il faut spécifier les deux délimiteurs marquant l'échappement (le premier le commençant et le deuxième
-le terminant) en utilisant les clés \Definition{begin-escape} et \Definition{end-escape} (\emph{qui ne sont accessibles
-que dans le préambule du document}). Les deux délimiteurs peuvent être identiques.
+Il est aussi possible de surcharger les listings Python pour y insérer du code LaTeX à peu
+près n'importe où (mais entre deux lexèmes, bien entendu). Cette fonctionnalité n'est pas
+activée par défaut par \pkg{piton}. Pour l'utiliser, il faut spécifier les deux
+délimiteurs marquant l'échappement (le premier le commençant et le deuxième le terminant)
+en utilisant les clés \Definition{begin-escape} et \Definition{end-escape} (\emph{qui ne
+ sont accessibles que dans le préambule du document}). Les deux délimiteurs peuvent être
+identiques.
\medskip
-On reprend l'exemple précédent de la factorielle et on souhaite surligner en rose l'instruction qui contient l'appel
-récursif. La commande |\highLight| de \pkg{lua-ul} permet de le faire avec la syntaxe |\highLight[LightPink]{...}|.
-Du fait de la présence de l'argument optionnel entre crochets, on ne peut pas utiliser la clé |detected-commands|
+On reprend l'exemple précédent de la factorielle et on souhaite surligner en rose
+l'instruction qui contient l'appel récursif. La commande |\highLight| de \pkg{lua-ul}
+permet de le faire avec la syntaxe |\highLight[LightPink]{...}|. Du fait de la présence de
+l'argument optionnel entre crochets, on ne peut pas utiliser la clé |detected-commands|
comme précédemment mais on peut utiliser le mécanisme «escape».
\smallskip
@@ -1460,10 +1565,10 @@ def fact(n):
\bigskip
-\emph{Attention} : L'échappement vers LaTeX permis par les clés |begin-escape| et |end-escape| n'est pas actif dans
-les chaînes de caractères ni dans les commentaires (pour avoir un commentaire entièrement en échappement vers
-LaTeX, c'est-à-dire ce qui est appelé dans ce document «commentaire LaTeX», il suffit de le faire débuter par
-|#>|).
+\emph{Attention} : L'échappement vers LaTeX permis par les clés |begin-escape| et
+|end-escape| n'est pas actif dans les chaînes de caractères ni dans les commentaires (pour
+avoir un commentaire entièrement en échappement vers LaTeX, c'est-à-dire ce qui est appelé
+dans ce document «commentaire LaTeX», il suffit de le faire débuter par |#>|).
\subsubsection{Le mécanisme «escape-math»}
@@ -1472,24 +1577,27 @@ LaTeX, c'est-à-dire ce qui est appelé dans ce document «commentaire LaTeX»,
\index{begin-escape-math}
\index{end-escape-math}
-Le mécanisme «|escape-math|» est très similaire au mécanisme «|escape|» puisque la seule différence est que les
-éléments en échappement LaTeX y sont composés en mode mathématique.
+Le mécanisme «|escape-math|» est très similaire au mécanisme «|escape|» puisque la seule
+différence est que les éléments en échappement LaTeX y sont composés en mode mathématique.
-On active ce mécanisme avec les clés \Definition{begin-escape-math} et \Definition{end-escape-math} (\emph{qui ne sont
-accessibles que dans le préambule du document}).
+On active ce mécanisme avec les clés \Definition{begin-escape-math} et
+\Definition{end-escape-math} (\emph{qui ne sont accessibles que dans le préambule du
+ document}).
\medskip
-Malgré la proximité technique, les usages du mécanisme «|escape-math|» sont en fait assez différents de ceux du
-mécanisme «|escape|». En effet, comme le contenu en échappement est composé en mode mathématique, il est en
-particulier composé dans un groupe TeX et ne pourra donc pas servir à changer le formatage d'autres unités lexicales.
+Malgré la proximité technique, les usages du mécanisme «|escape-math|» sont en fait assez
+différents de ceux du mécanisme «|escape|». En effet, comme le contenu en échappement est
+composé en mode mathématique, il est en particulier composé dans un groupe TeX et ne
+pourra donc pas servir à changer le formatage d'autres unités lexicales.
\medskip
-Dans les langages où le caractère |$| ne joue pas un rôle syntaxique important, on peut assez naturellement
-vouloir activer le mécanisme «|escape-math|» avec le caractère |$|:
+Dans les langages où le caractère
+|$| ne joue pas un rôle syntaxique important, on peut assez naturellement vouloir activer
+le mécanisme «|escape-math|» avec le caractère |$|:
\begin{Verbatim}
\PitonOptions{~emphase#begin-escape-math=$,end-escape-math=$@}
\end{Verbatim}
-Remarquer que le caractère |$| ne doit \emph{pas} être protégé par une contre-oblique.
+Remarquer que le caractère |$| ne doit \emph{pas} être protégé par une contre-oblique. % $
\bigskip
Néanmoins, il est sans doute plus prudent d'utiliser |\(| et |\)|.
@@ -1538,25 +1646,29 @@ def arctan(x,n=10):
\index{Beamer@\cls{Beamer} (classe)}
-\emph{Première remarque}\par\nobreak
-Remarquons que, comme l'environnement |{Piton}| prend son argument selon un mode verbatim, il convient, ce qui
-n'est pas surprenant, de l'utiliser dans des environnements |{frame}| de Beamer protégés par la clé |fragile|,
-c'est-à-dire débutant par |\begin{frame}[fragile]|.\footnote{On rappelle que pour un environnement |{frame}| de Beamer qui
- utilise la clé |fragile|, l'instruction |\end{frame}| doit être seule sur une ligne (à l'exception d'éventuels
- espaces en début de ligne).}
+\emph{Première remarque}\par\nobreak
+
+Remarquons que, comme l'environnement |{Piton}| prend son argument selon un mode verbatim,
+il convient, ce qui n'est pas surprenant, de l'utiliser dans des environnements |{frame}|
+de Beamer protégés par la clé |fragile|, c'est-à-dire débutant par
+|\begin{frame}[fragile]|.\footnote{On rappelle que pour un environnement |{frame}| de
+ Beamer qui utilise la clé |fragile|, l'instruction |\end{frame}| doit être seule sur une
+ ligne (à l'exception d'éventuels espaces en début de ligne).}
\medskip
-Quand l'extension \pkg{piton} est utilisée dans la classe \cls{beamer}\footnote{L'extension \pkg{piton} détecte la
- classe \cls{beamer} et l'extension \pkg{beamerarticle} si elle est chargée précédemment, mais il est aussi
- possible, si le besoin s'en faisait sentir, d'activer ce comportement avec la clé |beamer| au chargement de
- \pkg{piton} : |\usepackage[beamer]{piton}|}, le comportement de \pkg{piton} est légèrement modifié, comme décrit
-maintenant.
+Quand l'extension \pkg{piton} est utilisée dans la classe
+\cls{beamer}\footnote{L'extension \pkg{piton} détecte la classe \cls{beamer} et
+ l'extension \pkg{beamerarticle} si elle est chargée précédemment, mais il est aussi
+ possible, si le besoin s'en faisait sentir, d'activer ce comportement avec la clé
+ |beamer| au chargement de \pkg{piton} : |\usepackage[beamer]{piton}|}, le comportement
+de \pkg{piton} est légèrement modifié, comme décrit maintenant.
\subsubsection{\{Piton\} et \textbackslash PitonInputFile sont ``overlay-aware''}
-Quand \pkg{piton} est utilisé avec Beamer, l'environnement |{Piton}| et la commande |\PitonInputFile| acceptent
-l'argument optionnel |<...>| de Beamer pour indiquer les «\emph{overlays}» concernés.
+Quand \pkg{piton} est utilisé avec Beamer, l'environnement |{Piton}| et la commande
+|\PitonInputFile| acceptent l'argument optionnel |<...>| de Beamer pour indiquer les
+«\emph{overlays}» concernés.
On peut par exemple écrire :
@@ -1575,27 +1687,37 @@ ou aussi
\subsubsection{Commandes de Beamer reconnues dans \{Piton\} et \textbackslash PitonInputFile}
-Quand \pkg{piton} est utilisé dans la classe \cls{beamer}, les commandes suivantes de \cls{beamer} (classées selon
-leur nombre d'arguments obligatoires) sont directement reconnues dans les environnements |{Piton}| (ainsi que dans
-les listings composés par la commande |\PitonInputFile|, même si c'est sans doute moins utile).
+\index{detected-beamer-commands}
+
+Quand \pkg{piton} est utilisé dans la classe \cls{beamer}, les commandes suivantes de
+\cls{beamer} (classées selon leur nombre d'arguments obligatoires) sont directement
+reconnues dans les environnements |{Piton}| (ainsi que dans les listings composés par la
+commande |\PitonInputFile|, même si c'est sans doute moins utile).
%
\begin{itemize}
-\item aucun argument obligatoire : |\pause|\footnote{On remarquera que, bien sûr, on peut aussi utiliser |\pause|
- dans un «commentaire LaTeX», c'est-à-dire en écrivant |#> \pause|. Ainsi, si le code Python est copié, il est
- interprétable par Python.} ;
-\item un argument obligatoire : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| et |\visible| ;
-\item deux arguments obligatoires : |\alt| ;
+\item aucun argument obligatoire : |\pause|\footnote{On remarquera que, bien sûr, on peut
+aussi utiliser |\pause| dans un «commentaire LaTeX», c'est-à-dire en écrivant
+|#> \pause|. Ainsi, si le code Python est copié, il est interprétable par Python.} ;
+\item un argument obligatoire : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| et
+|\visible| ; \newline
+\colorbox{yellow!50}{\bfseries Nouveau 3.1} on peut rajouter à cette liste de
+nouveaux noms de commandes avec la clé \Definition{detected-beamer-commands} (les noms de
+commandes ne doivent \emph{pas} être précédés de la contre-oblique) ;
+\item deux arguments obligatoires : |\alt| ;
\item trois arguments obligatoires : |\temporal|.
\end{itemize}
\medskip
-Les accolades dans les arguments obligatoires de ces commandes doivent être équilibrées (cependant, les accolades
-présentes dans des chaînes courtes\footnote{Les chaînes courtes de Python sont les chaînes (string) délimitées par
- les caractères \texttt{'} ou \texttt{"} non triplés. En Python, les chaînes de caractères courtes ne peuvent pas
- s'étendre sur plusieurs lignes de code.} de Python ne sont pas prises en compte).
+Ces commandes doivent être utilisées précédées et suivies d'un espace. Les accolades dans
+les arguments obligatoires de ces commandes doivent être équilibrées (cependant, les
+accolades présentes dans des chaînes courtes\footnote{Les chaînes courtes de Python sont
+ les chaînes (string) délimitées par les caractères \texttt{'} ou \texttt{"} non triplés.
+ En Python, les chaînes de caractères courtes ne peuvent pas s'étendre sur plusieurs
+ lignes de code.} de Python ne sont pas prises en compte).
\medskip
-Concernant les fonctions |\alt| et |\temporal|, aucun retour à la ligne ne doit se trouver dans les arguments de ces fonctions.
+Concernant les fonctions |\alt| et |\temporal|, aucun retour à la ligne ne doit se trouver
+dans les arguments de ces fonctions.
\medskip
@@ -1618,22 +1740,29 @@ def string_of_list(l):
\end{document}
\end{Verbatim}
-Dans l'exemple précédent, les accolades des deux chaînes de caractères Python |"{"| et |"}"| sont correctement
-interprétées (sans aucun caractère d'échappement).
+Dans l'exemple précédent, les accolades des deux chaînes de caractères Python |"{"| et
+ |"}"| sont correctement interprétées (sans aucun caractère d'échappement).
\bigskip
\subsubsection{Environnements de Beamer reconnus dans \{Piton\} et \textbackslash PitonInputFile}
-Quand \pkg{piton} est utilisé dans la classe \pkg{beamer}, les environnements suivants de Beamer sont directement
-reconnus dans les environnements |{Piton}| (ainsi que dans les listings composés par la commande |\PitonInputFile|
-même si c'est sans doute moins utile) : |{actionenv}|, |{alertenv}|, |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}|
-et |{visibleenv}|.
+Quand \pkg{piton} est utilisé dans la classe \pkg{beamer}, les environnements suivants de
+Beamer sont directement reconnus dans les environnements |{Piton}| (ainsi que dans les
+listings composés par la commande |\PitonInputFile| même si c'est sans doute moins utile)
+: |{actionenv}|, |{alertenv}|, |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| et
+|{visibleenv}|.
+\smallskip
+\index{detected-beamer-environments} \colorbox{yellow!50}{\bfseries Nouveau 3.1}\enskip On
+peut ajouter de nouveaux environnements à cette liste d'environnements reconnus avec la
+clé \Definition{detected-beamer-environments}.
\medskip
-Il y a néanmoins une restriction : ces environnements doivent englober des \emph{lignes entières de code Python}.
+Il y a néanmoins une restriction : ces environnements doivent englober des \emph{lignes
+ entières de code Python}. Les instructions |\begin{...}| et |\end{...}| doivent être
+seules sur leurs lignes.
\medskip
@@ -1657,25 +1786,29 @@ def carré(x):
-\vspace{1cm}
-\textbf{Remarque à propos de la commande \textbackslash alert et de l'environnement \{alertenv\} de Beamer}\par\nobreak
+\vspace{1cm}
+\textbf{Remarque à propos de la commande \textbackslash alert et de
+ l'environnement \{alertenv\} de Beamer}\par\nobreak
\smallskip
-Beamer propose un moyen aisé de changer la couleur utilisée par l'environnement |{alertenv}| (et par la commande
-|\alert| qui s'appuie dessus). Par exemple, on peut écrire:
+Beamer propose un moyen aisé de changer la couleur utilisée par l'environnement
+|{alertenv}| (et par la commande |\alert| qui s'appuie dessus). Par exemple, on peut
+écrire:
\begin{Verbatim}
\setbeamercolor{~emphase#alerted text@}{fg=blue}
\end{Verbatim}
-Néanmoins, dans le cas d'une utilisation à l'intérieur d'un environnement |{Piton}| un tel réglage n'est sans doute
-pas pertinent, puisque, justement, \pkg{piton} va (le plus souvent) changer la couleur des élements selon leur
-valeur lexicale. On préfèrera sans doute un environnement |{alertenv}| qui change la couleur de fond des
-éléments à mettre en évidence.
+Néanmoins, dans le cas d'une utilisation à l'intérieur d'un environnement |{Piton}| un tel
+réglage n'est sans doute pas pertinent, puisque, justement, \pkg{piton} va (le plus
+souvent) changer la couleur des élements selon leur valeur lexicale. On préfèrera sans
+doute un environnement |{alertenv}| qui change la couleur de fond des éléments à mettre en
+évidence.
\smallskip
-Voici un code qui effectuera ce travail en mettant un fond jaune. Ce code utilise la commande |\@highLight| de
-l'extension \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}).
+Voici un code qui effectuera ce travail en mettant un fond jaune. Ce code utilise la
+commande |\@highLight| de l'extension \pkg{lua-ul} (cette extension nécessite elle-même
+l'extension \pkg{luacolor}).
\begingroup
\fvset{commandchars=\~\#\+,formatcom=\color{gray}}
@@ -1688,8 +1821,9 @@ l'extension \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg
\end{Verbatim}
\endgroup
-Ce code redéfinit localement l'environnement |{alertenv}| à l'intérieur de l'environnement |{Piton}| (on rappelle
-que la commande |\alert| s'appuie sur cet environnement |{alertenv}|).
+Ce code redéfinit localement l'environnement |{alertenv}| à l'intérieur de l'environnement
+|{Piton}| (on rappelle que la commande |\alert| s'appuie sur cet environnement
+|{alertenv}|).
@@ -1707,33 +1841,35 @@ que la commande |\alert| s'appuie sur cet environnement |{alertenv}|).
\label{footnote}
-Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{piton} (ou bien dans un listing
-produit par |\PitonInputFile|, bien que cela paraisse moins pertinent dans ce cas-là) vous pouvez utiliser une
-paire |\footnotemark|--|\footnotetext|.
+Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{piton} (ou
+bien dans un listing produit par |\PitonInputFile|, bien que cela paraisse moins pertinent
+dans ce cas-là) vous pouvez utiliser une paire |\footnotemark|--|\footnotetext|.
\smallskip
-Néanmoins, il est également possible d'extraire les notes de pieds de page avec l'extension \pkg{footnote} ou bien
-l'extension \pkg{footnotehyper}.
+Néanmoins, il est également possible d'extraire les notes de pieds de page avec
+l'extension \pkg{footnote} ou bien l'extension \pkg{footnotehyper}.
\smallskip
-Si \pkg{piton} est chargée avec l'option \Definition{footnote} (avec |\usepackage[footnote]{piton}|) l'extension
-\pkg{footnote} est chargée (si elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de
-page.
+Si \pkg{piton} est chargée avec l'option \Definition{footnote} (avec
+|\usepackage[footnote]{piton}|) l'extension \pkg{footnote} est chargée (si elle ne l'est
+pas déjà) et elle est utilisée pour extraire les notes de pied de page.
\smallskip
-Si \pkg{piton} est chargée avec l'option \Definition{footnotehyper}, l'extension \pkg{footnotehyper} est chargée
-(si elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de page.
+Si \pkg{piton} est chargée avec l'option \Definition{footnotehyper}, l'extension
+\pkg{footnotehyper} est chargée (si elle ne l'est pas déjà) et elle est utilisée pour
+extraire les notes de pied de page.
\smallskip
Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont incompatibles.
-L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote}
-et devrait être utilisée préférentiellement. L'extension \pkg{footnote} a quelques défauts ;
-en particulier, elle doit être chargée après l'extension \pkg{xcolor} et elle n'est pas parfaitement
-compatible avec \pkg{hyperref}.
+L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote} et devrait
+être utilisée préférentiellement. L'extension \pkg{footnote} a quelques défauts ; en
+particulier, elle doit être chargée après l'extension \pkg{xcolor} et elle n'est pas
+parfaitement compatible avec \pkg{hyperref}.
\medskip
-Dans ce document, l'extension \pkg{piton} a été chargée avec l'option |footnotehyper| et c'est pourquoi des notes
-peuvent être mises dans les environnements |{Piton}| : voir un exemple sur la première page de ce document.
+Dans ce document, l'extension \pkg{piton} a été chargée avec l'option |footnotehyper| et
+c'est pourquoi des notes peuvent être mises dans les environnements |{Piton}| : voir un
+exemple sur la première page de ce document.
\subsection{Tabulations}
@@ -1741,15 +1877,20 @@ peuvent être mises dans les environnements |{Piton}| : voir un exemple sur la p
\index{tab-size}
\smallskip
-Même s'il est recommandé d'indenter les listings Python avec des espaces (cf. PEP~8), \pkg{piton} accepte les
-caractères de tabulations (U+0009) en début de ligne. Chaque caractère U+0009 est remplacé par $n$ espaces. La
-valeur initiale de~$n$ est~4 mais on peut la changer avec la clé \Definition{tab-size} de |\PitonOptions|.
+Même s'il est recommandé d'indenter les listings Python avec des espaces (cf. PEP~8),
+\pkg{piton} accepte les caractères de tabulations (U+0009) en début de ligne. Chaque
+caractère U+0009 est remplacé par $n$ espaces. La valeur initiale de~$n$ est~4 mais on
+peut la changer avec la clé \Definition{tab-size} de |\PitonOptions|.
\smallskip
-Il existe aussi une clé \Definition{tabs-auto-gobble} qui détermine le nombre minimal de caractères U+0009 débutant
-chaque ligne (non vide) de l'environnement |{Piton}| et applique |gobble| avec cette valeur (avant le remplacement
-des caractères U+0009 par des espaces, bien entendu). Cette clé est donc similaire à la clé |auto-gobble| mais agit
-sur des caractères U+0009 au lieu de caractères U+0020 (espaces).
+Il existe aussi une clé \Definition{tabs-auto-gobble} qui détermine le nombre minimal de
+caractères U+0009 débutant chaque ligne (non vide) de l'environnement |{Piton}| et
+applique |gobble| avec cette valeur (avant le remplacement des caractères U+0009 par des
+espaces, bien entendu). Cette clé est donc similaire à la clé |auto-gobble| mais agit sur
+des caractères U+0009 au lieu de caractères U+0020 (espaces).
+
+\smallskip
+La clé |env-gobble| n'est pas compatible avec les tabulations.
\section{API pour les développeurs}
@@ -1764,22 +1905,24 @@ La variable L3 |\l_piton_language_str| contient le nom du langage courant (en mi
\colorbox{yellow!50}{\textbf{Nouveau 2.6}}\par\nobreak
-L'extension \pkg{piton} fournit une fonction Lua |piton.get_last_code| sans argument permettant de récupérer le
-code contenu dans le dernier environnement de \pkg{piton}.
+L'extension \pkg{piton} fournit une fonction Lua |piton.get_last_code| sans argument
+permettant de récupérer le code contenu dans le dernier environnement de \pkg{piton}.
\begin{itemize}
-\item Les retours à la ligne (présents dans l'environnement de départ) apparaissent comme des caractères |\r|
-(c'est-à-dire des caractères U+000D).
+\item Les retours à la ligne (présents dans l'environnement de départ) apparaissent comme
+des caractères |\r| (c'est-à-dire des caractères U+000D).
-\item Le code fourni par |piton.get_last_code()| tient compte de l'éventuelle application d'une clé |gobble| (cf.
-p.~\pageref{gobble}).
+\item Le code fourni par |piton.get_last_code()| tient compte de l'éventuelle application
+d'une clé |gobble| (cf. p.~\pageref{gobble}).
-\item Les surcharges du code (qui entraînent des échappements vers LaTeX) ont été retirées du code fourni par
-|piton.get_last_code()|. Cela s'applique aux commandes LaTeX déclarées par la clé |detected-commands| (cf.
-partie~\ref{detected-commands}) et aux éléments insérés avec le mécanisme «|escape|» (cf. partie~\ref{escape}).
+\item Les surcharges du code (qui entraînent des échappements vers LaTeX) ont été retirées
+du code fourni par |piton.get_last_code()|. Cela s'applique aux commandes LaTeX déclarées
+par la clé |detected-commands| (cf. partie~\ref{detected-commands}) et aux éléments
+insérés avec le mécanisme «|escape|» (cf. partie~\ref{escape}).
-\item |piton.get_last_code| est une fonction Lua et non une chaîne de caractères : les traitements présentés
-précédemment sont exécutés lorsque la fonction est appelée. De ce fait, il peut être judicieux de stocker la valeur
-renvoyée par |piton.get_last_code()| dans une variable Lua si on doit l'utiliser plusieurs fois.
+\item |piton.get_last_code| est une fonction Lua et non une chaîne de caractères : les
+traitements présentés précédemment sont exécutés lorsque la fonction est appelée. De ce
+fait, il peut être judicieux de stocker la valeur renvoyée par |piton.get_last_code()|
+dans une variable Lua si on doit l'utiliser plusieurs fois.
\end{itemize}
\medskip
@@ -1794,12 +1937,15 @@ partie~\ref{pyluatex}, p.~\pageref{pyluatex}.
\label{example-numbering}
\index{numérotation des lignes de code|emph}
-On rappelle que l'on peut demander la numérotation des lignes des listings avec la clé |line-numbers|.
+On rappelle que l'on peut demander la numérotation des lignes des listings avec la clé
+|line-numbers|.
-Par défaut, les numéros de ligne sont composés par \pkg{piton} en débordement à gauche (en utilisant en interne la commande |\llap| de LaTeX).
+Par défaut, les numéros de ligne sont composés par \pkg{piton} en débordement à gauche (en
+utilisant en interne la commande |\llap| de LaTeX).
-Si on ne veut pas de débordement, on peut utiliser l'option |left-margin=auto| qui va insérer une marge adaptée aux
-numéros qui seront insérés (elle est plus large quand les numéros dépassent 10).
+Si on ne veut pas de débordement, on peut utiliser l'option |left-margin=auto| qui va
+insérer une marge adaptée aux numéros qui seront insérés (elle est plus large quand les
+numéros dépassent 10).
\begingroup
@@ -1841,8 +1987,8 @@ def arctan(x,n=10):
\label{example-comments}
\index{commentaires LaTeX|emph}
-On peut modifier le style |Comment.LaTeX| (avec |\SetPitonStyle|) pour faire afficher les commentaires
-LaTeX (qui débutent par |#>|) en butée à droite.
+On peut modifier le style |Comment.LaTeX| (avec |\SetPitonStyle|) pour faire afficher les
+commentaires LaTeX (qui débutent par |#>|) en butée à droite.
\begingroup
\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}}
@@ -1876,10 +2022,10 @@ def arctan(x,n=10):
\endgroup
-\vspace{1cm}
-On peut aussi faire afficher les commentaires dans une deuxième colonne à droite si on limite la largeur du code
-proprement dit avec la clé |width|. Dans l'exemple qui suit, on utilise la clé |width| avec la valeur
-spéciale~|min|. Plusieurs compilations sont nécessaires.
+\vspace{1cm} On peut aussi faire afficher les commentaires dans une deuxième colonne à
+droite si on limite la largeur du code proprement dit avec la clé |width|. Dans l'exemple
+qui suit, on utilise la clé |width| avec la valeur spéciale~|min|. Plusieurs compilations
+sont nécessaires.
\begingroup
@@ -1929,12 +2075,14 @@ def arctan(x,n=10):
\index{notes dans les listings|emph}
-Pour pouvoir extraire les notes (introduites par |\footnote|), l'extension |piton| doit être chargée, soit avec la
-clé |footnote|, soit avec la clé |footnotehyper|, comme expliqué à la section \ref{footnote} p.~\pageref{footnote}.
-Dans le présent document, l'extension \pkg{piton} a été chargée par la clé |footnotehyper|.
+Pour pouvoir extraire les notes (introduites par |\footnote|), l'extension |piton| doit
+être chargée, soit avec la clé |footnote|, soit avec la clé |footnotehyper|, comme
+expliqué à la section \ref{footnote} p.~\pageref{footnote}. Dans le présent document,
+l'extension \pkg{piton} a été chargée par la clé |footnotehyper|.
-Bien entendu, une commande |\footnote| ne peut apparaître que dans un commentaire LaTeX (qui débute par |#>|). Un
-tel commentaire peut se limiter à cette unique commande |\footnote|, comme dans l'exemple suivant.
+Bien entendu, une commande |\footnote| ne peut apparaître que dans un commentaire LaTeX
+(qui débute par |#>|). Un tel commentaire peut se limiter à cette unique commande
+|\footnote|, comme dans l'exemple suivant.
\begingroup
\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}}
@@ -1968,9 +2116,9 @@ def arctan(x,n=10):
\vspace{1cm}
-Si on utilise l'environnement |{Piton}| dans un environnement |{minipage}| de LaTeX, les notes sont, bien entendu,
-composées au bas de l'environnement |{minipage}|. Rappelons qu'une telle |{minipage}| ne peut être coupée par un
-saut de page.
+Si on utilise l'environnement |{Piton}| dans un environnement |{minipage}| de LaTeX, les
+notes sont, bien entendu, composées au bas de l'environnement |{minipage}|. Rappelons
+qu'une telle |{minipage}| ne peut être coupée par un saut de page.
\begingroup
@@ -2014,11 +2162,13 @@ def arctan(x,n=10):
Les styles graphiques ont été présentés à la partie \ref{styles}, p.~\pageref{styles}.
\smallskip
-On présente ici un réglage de ces styles adapté pour les documents en noir et blanc. On l'utilise avec la fonte
-\emph{DejaVu Sans Mono}\footnote{Voir: \url{https://dejavu-fonts.github.io}} spécifiée avec la commande
- |\setmonofont| de \pkg{fontspec}.
+On présente ici un réglage de ces styles adapté pour les documents en noir et blanc. On
+l'utilise avec la fonte \emph{DejaVu Sans Mono}\footnote{Voir:
+ \url{https://dejavu-fonts.github.io}} spécifiée avec la commande |\setmonofont| de
+\pkg{fontspec}.
-Ce réglage utilise la commande |\highLight| de \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}).
+Ce réglage utilise la commande |\highLight| de \pkg{lua-ul} (cette extension nécessite
+elle-même l'extension \pkg{luacolor}).
\begin{Verbatim}
@@ -2044,10 +2194,11 @@ Ce réglage utilise la commande |\highLight| de \pkg{lua-ul} (cette extension n
\end{Verbatim}
-Dans ce réglage, de nombreuses valeurs fournies aux clés sont vides, ce qui signifie que le style correspondant
-n'insèrera aucune instruction de formatage (l'élément sera composé dans la couleur standard, le plus souvent, en noir,
-etc.). Ces entrées avec valeurs nulles sont néanmoins nécessaires car la valeur initiale de ces styles dans
-\pkg{piton} n'est \emph{pas} vide.
+Dans ce réglage, de nombreuses valeurs fournies aux clés sont vides, ce qui signifie que
+le style correspondant n'insèrera aucune instruction de formatage (l'élément sera composé
+dans la couleur standard, le plus souvent, en noir, etc.). Ces entrées avec valeurs nulles
+sont néanmoins nécessaires car la valeur initiale de ces styles dans \pkg{piton} n'est
+\emph{pas} vide.
\begingroup
@@ -2105,11 +2256,13 @@ def arctan(x,n=10):
\label{pyluatex}
\index{pyluatex@{\pkg{pyluatex}} (extension)}
-L'extension \pkg{pyluatex} est une extension qui permet l'exécution de code Python à partir de |lualatex| (pourvu
-que Python soit installé sur la machine et que la compilation soit effectuée avec |lualatex| et |--shell-escape|).
+L'extension \pkg{pyluatex} est une extension qui permet l'exécution de code Python à
+partir de |lualatex| (pourvu que Python soit installé sur la machine et que la compilation
+soit effectuée avec |lualatex| et |--shell-escape|).
-Voici, à titre d'exemple, un environnement |{PitonExecute}| qui formate un listing Python (avec \pkg{piton}) et qui
-affiche également dessous le résultat de l'exécution de ce code avec Python.
+Voici, à titre d'exemple, un environnement |{PitonExecute}| qui formate un listing Python
+(avec \pkg{piton}) et qui affiche également dessous le résultat de l'exécution de ce code
+avec Python.
\begin{Verbatim}
@@ -2129,12 +2282,12 @@ affiche également dessous le résultat de l'exécution de ce code avec Python.
\ignorespacesafterend}
-On a utilisé la fonction Lua |piton.get_last_code| fournie dans l'API de \pkg{piton} : cf.~partie~\ref{API},
-p.~\pageref{API}.
+ On a utilisé la fonction Lua |piton.get_last_code| fournie dans l'API de \pkg{piton} :
+ cf.~partie~\ref{API}, p.~\pageref{API}.
\bigskip
-Cet environnement |{PitonExecute}| prend en argument optionnel (entre crochets) les options proposées par la
-commande |\PitonOptions|.
+Cet environnement |{PitonExecute}| prend en argument optionnel (entre crochets) les
+options proposées par la commande |\PitonOptions|.
\begin{Verbatim}
\begin{~emphase#PitonExecute@}[background-color=gray!15]
@@ -2162,23 +2315,26 @@ print(f'Le carré de 12 est {carré(12)}.')
\index{pythonrepl@\texttt{\{pythonrepl\}} (environnement de \pkg{pyluatex})}
-L'environnement |{pythonrepl}| de \pkg{pyluatex} passe son contenu à Python et renvoie ce que l'on obtient quand on
-fournit ce code à une boucle \textsc{repl} (\emph{read-eval-print loop}) de Python. On obtient un entrelacement
-d'instructions précédées par le prompt |>>>| de Python et des valeurs renvoyées par Python (et de ce qui a été
-demandé d'être affiché avec des \piton{print} de Python).
+L'environnement |{pythonrepl}| de \pkg{pyluatex} passe son contenu à Python et renvoie ce
+que l'on obtient quand on fournit ce code à une boucle \textsc{repl}
+(\emph{read-eval-print loop}) de Python. On obtient un entrelacement d'instructions
+précédées par le prompt |>>>| de Python et des valeurs renvoyées par Python (et de ce qui
+a été demandé d'être affiché avec des \piton{print} de Python).
\medskip
-Il est ensuite possible de passer cela à un environnement |{Piton}| qui va faire un coloriage syntaxique
-et mettre sur fond grisé les lignes correspondant aux instructions fournies à l'interpréteur Python (grâce à la clé
-|prompt-background-color| de |\PitonOptions|).
+Il est ensuite possible de passer cela à un environnement |{Piton}| qui va faire un
+coloriage syntaxique et mettre sur fond grisé les lignes correspondant aux instructions
+fournies à l'interpréteur Python (grâce à la clé |prompt-background-color| de
+|\PitonOptions|).
\medskip
-Voici la programmation d'un environnement |{PitonREPL}| qui effectue ce travail (pour des raisons techniques, le
-|!| est ici obligatoire dans la signature de l'environnement). On ne peut pas procéder comme précédemment (dans
-l'utilisation «standard» de \pkg{pyluatex}) car, bien sûr, c'est le retour fait par |{pythonrepl}| qui doit être
-traité par \pkg{piton}. De ce fait, il ne sera pas possible de mettre des surcharges (avec |detected-commands| ou
-le mécanisme |escape|) dans le code.
+Voici la programmation d'un environnement |{PitonREPL}| qui effectue ce travail (pour des
+raisons techniques, le |!| est ici obligatoire dans la signature de l'environnement). On
+ne peut pas procéder comme précédemment (dans l'utilisation «standard» de \pkg{pyluatex})
+car, bien sûr, c'est le retour fait par |{pythonrepl}| qui doit être traité par
+\pkg{piton}. De ce fait, il ne sera pas possible de mettre des surcharges (avec
+|detected-commands| ou le mécanisme |escape|) dans le code.
\begin{Verbatim}
\ExplSyntaxOn
@@ -2263,11 +2419,12 @@ Voici un exemple d'utilisation de ce nouvel environnement |{PitonREPL}|.
\bigskip
-En fait, il est possible de ne pas faire afficher les prompts eux-mêmes (c'est-à-dire les chaînes de caractères
-|>>>| et |...|). En effet, \pkg{piton} propose un style pour ces éléments, qui est appelé |Prompt|. Par défaut, la
-valeur de ce style est vide, ce qui fait qu'aucune action n'est exécutée sur ces éléments qui sont donc affichés
-tels quels. En fournissant comme valeur une fonction qui se contente de gober son argument, on peut demander à ce
-qu'ils ne soient pas affichés.
+En fait, il est possible de ne pas faire afficher les prompts eux-mêmes (c'est-à-dire les
+chaînes de caractères |>>>| et |...|). En effet, \pkg{piton} propose un style pour ces
+éléments, qui est appelé |Prompt|. Par défaut, la valeur de ce style est vide, ce qui fait
+qu'aucune action n'est exécutée sur ces éléments qui sont donc affichés tels quels. En
+fournissant comme valeur une fonction qui se contente de gober son argument, on peut
+demander à ce qu'ils ne soient pas affichés.
\bigskip
\begin{savenotes}
@@ -2328,16 +2485,17 @@ L'exemple précédent donne alors :
\subsection{Le langage Python}
-Le langage par défaut de l'extension \pkg{piton} est Python. Si besoin est, on peut revenir au langage Python avec
-|\PitonOptions{language=Python}|.
+Le langage par défaut de l'extension \pkg{piton} est Python. Si besoin est, on peut
+revenir au langage Python avec |\PitonOptions{language=Python}|.
\bigskip
-Les réglages initiaux effectués par \pkg{piton} dans |piton.sty| sont inspirés par le style \pkg{manni} de Pygments
-tel qu'il est appliqué au langage Python par Pygments.\footnote{Voir \url{https://pygments.org/styles/}. À
- remarquer que, par défaut, Pygments propose pour le style \pkg{manni} un fond coloré dont la couleur est la
- couleur HTML |#F0F3F3|. Il est possible d'avoir la même couleur dans |{Piton}| avec l'instruction :
- |\PitonOptions{background-color = [HTML]{F0F3F3}}|}
+Les réglages initiaux effectués par \pkg{piton} dans |piton.sty| sont inspirés par le
+style \pkg{manni} de Pygments tel qu'il est appliqué au langage Python par
+Pygments.\footnote{Voir \url{https://pygments.org/styles/}. À remarquer que, par défaut,
+ Pygments propose pour le style \pkg{manni} un fond coloré dont la couleur est la couleur
+ HTML |#F0F3F3|. Il est possible d'avoir la même couleur dans |{Piton}| avec
+ l'instruction : |\PitonOptions{background-color = [HTML]{F0F3F3}}|}
\vspace{1cm}
@@ -2349,33 +2507,40 @@ tel qu'il est appliqué au langage Python par Pygments.\footnote{Voir \url{https
\midrule
Number & les nombres \\
String.Short & les chaînes de caractères courtes (entre \texttt{'} ou \texttt{"}) \\
- String.Long & les chaînes de caractères longues (entre \texttt{'''} ou \texttt{"""}) sauf les chaînes de
- documentation (qui sont gérées par |String.Doc|)\\
+ String.Long & les chaînes de caractères longues (entre \texttt{'''} ou \texttt{"""})
+ sauf les chaînes de documentation (qui sont gérées par |String.Doc|)\\
String & cette clé fixe à la fois |String.Short| et |String.Long| \\
String.Doc & les chaînes de documentation (seulement entre |"""| suivant PEP~257) \\
- String.Interpol & les éléments syntaxiques des champs des f-strings (c'est-à-dire les caractères \texttt{\{} et
- \texttt{\}}) ; ce style hérite des styles |String.Short| et |String.Long| (suivant la chaîne où
- apparaît l'interpolation)\\
- Interpol.Inside & le contenu des interpolations dans les f-strings (c'est-à-dire les éléments qui se trouvent entre
- \texttt{\{} et~\texttt{\}} ; si l'utilisateur n'a pas fixé ce style, ces éléments sont analysés et formatés par \pkg{piton}
- au même titre que le reste du code. \\
- Operator & les opérateurs suivants : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ |@| \\
+ String.Interpol & les éléments syntaxiques des champs des f-strings (c'est-à-dire les
+ caractères \texttt{\{} et \texttt{\}}) ; ce style hérite des styles
+ |String.Short| et |String.Long| (suivant la chaîne où apparaît
+ l'interpolation)\\
+ Interpol.Inside & le contenu des interpolations dans les f-strings (c'est-à-dire les
+ éléments qui se trouvent entre \texttt{\{} et~\texttt{\}} ; si
+ l'utilisateur n'a pas fixé ce style, ces éléments sont analysés et
+ formatés par \pkg{piton} au même titre que le reste du code. \\
+ Operator & les opérateurs suivants : \texttt{!= == << >> - \~{} + / * \% = < > \& .}
+ \verb+|+ |@| \\
Operator.Word & les opérateurs suivants : |in|, |is|, |and|, |or| et |not| \\
Name.Builtin & la plupart des fonctions prédéfinies par Python \\
Name.Decorator & les décorateurs (instructions débutant par \verb|@|) \\
Name.Namespace & le nom des modules (= bibliothèques extérieures) \\
- Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le mot-clé \verb|class| \\
- Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur définition} (après le
- mot-clé |def|) \\
- UserFunction & le nom des fonctions précédemment définies par l'utilisateur (la valeur initiale de ce paramètre est
- vide et ces éléments sont affichés en noir --- ou plutôt dans la couleur courante) \\
+ Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le
+ mot-clé \verb|class| \\
+ Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur
+ définition} (après le mot-clé |def|) \\
+ UserFunction & le nom des fonctions précédemment définies par l'utilisateur (la valeur
+ initiale de ce paramètre est vide et ces éléments sont affichés en noir
+ --- ou plutôt dans la couleur courante) \\
Exception & les exceptions prédéfinies (ex.: \texttt{SyntaxError}) \\
- InitialValues & les valeurs initiales (et le symbole |=| qui précède) des arguments optionnels dans les définitions
- de fonctions ; si l'utilisateur n'a pas fixé ce style, ces éléments sont analysés et formatés par \pkg{piton}
+ InitialValues & les valeurs initiales (et le symbole |=| qui précède) des arguments
+ optionnels dans les définitions de fonctions ; si l'utilisateur n'a pas
+ fixé ce style, ces éléments sont analysés et formatés par \pkg{piton}
au même titre que le reste du code.\\
Comment & les commentaires commençant par \texttt{\#} \\
- Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés par \pkg{piton} comme du code LaTeX (et
- appelés simplement «commentaires LaTeX» dans ce document) \\
+ Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés par
+ \pkg{piton} comme du code LaTeX (et appelés simplement «commentaires
+ LaTeX» dans ce document) \\
Keyword.Constant & |True|, |False| et |None| \\
Keyword & les mots-clés suivants :
\ttfamily assert, break, case, continue, del,
@@ -2421,17 +2586,18 @@ L'option est aussi disponible pour |\PitonInputFile| : |\PitonInputFile[language
String.Long & les chaînes de caractères, entre |"| mais aussi les \emph{quoted-strings} \\
String & cette clé fixe à la fois |String.Short| et |String.Long| \\
Operator & les opérateurs, en particulier |+|, |-|, |/|, |*|, |@|, |!=|, |==|, |&&| \\
- Operator.Word & les opérateurs suivants : |and|, |asr|, |land|, |lor|, |lsl|, |lxor|, |mod| et |or| \\
+ Operator.Word & les opérateurs suivants : |and|, |asr|, |land|, |lor|, |lsl|, |lxor|,
+ |mod| et |or| \\
Name.Builtin & les fonctions |not|, |incr|, |decr|, |fst| et |snd| \\
Name.Type & le nom des types OCaml \\
Name.Field & le nom d'un champ de module \\
Name.Constructor & le nom des constructeurs de types (qui débutent par une majuscule) \\
Name.Module & le nom des modules \\
- Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur définition} (après le
- mot-clé |let|) \\
- UserFunction & le nom des fonctions précédemment définies par l'utilisateur
- (la valeur initiale de ce paramètre est
- vide et ces éléments sont affichés en noir --- ou plutôt dans la couleur courante) \\
+ Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur
+ définition} (après le mot-clé |let|) \\
+ UserFunction & le nom des fonctions précédemment définies par l'utilisateur (la valeur
+ initiale de ce paramètre est vide et ces éléments sont affichés en noir
+ --- ou plutôt dans la couleur courante) \\
Exception & les exceptions prédéfinies (ex. : |End_of_File|) \\
TypeParameter & les paramétreurs de type \\
Comment & les commentaires, entre |(*| et |*)| ; ces commentaires peuvent être imbriqués \\
@@ -2477,28 +2643,33 @@ L'option est aussi disponible pour |\PitonInputFile| : |\PitonInputFile[language
\midrule
Number & les nombres \\
String.Long & les chaînes de caractères (entre \texttt{"}) \\
-String.Interpol & les éléments \texttt{\%d}, \texttt{\%i}, \texttt{\%f}, \texttt{\%c}, etc. dans les chaînes de
- caractères ; ce style hérite du style |String.Long| \\
+String.Interpol & les éléments \texttt{\%d}, \texttt{\%i}, \texttt{\%f}, \texttt{\%c},
+ etc. dans les chaînes de caractères ; ce style hérite du style
+ |String.Long| \\
Operator & les opérateurs suivants : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ |@| \\
-Name.Type & les types prédéfinis suivants :
- |bool|, |char|, |char16_t|, |char32_t|, |double|, |float|, |int|, |int8_t|, |int16_t|, |int32_t|,
- |int64_t|, |long|, |short|, |signed|, |unsigned|, |void| et |wchar_t| \\
-Name.Builtin & les fonctions prédéfinies suivantes : |printf|, |scanf|, |malloc|, |sizeof| et |alignof| \\
- Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le mot-clé |class| \\
+Name.Type & les types prédéfinis suivants : |bool|, |char|, |char16_t|, |char32_t|,
+ |double|, |float|, |int|, |int8_t|, |int16_t|, |int32_t|, |int64_t|, |long|,
+ |short|, |signed|, |unsigned|, |void| et |wchar_t| \\
+Name.Builtin & les fonctions prédéfinies suivantes : |printf|, |scanf|, |malloc|, |sizeof|
+ et |alignof| \\
+ Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le
+ mot-clé |class| \\
Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur définition} \\
-UserFunction & le nom des fonctions précédemment définies par l'utilisateur (la valeur initiale de ce paramètre est
- vide et ces éléments sont affichés en noir --- ou plutôt dans la couleur courante) \\
+UserFunction & le nom des fonctions précédemment définies par l'utilisateur (la valeur
+ initiale de ce paramètre est vide et ces éléments sont affichés en noir ---
+ ou plutôt dans la couleur courante) \\
Preproc & les instructions du préprocesseur (commençant par |#|) \\
Comment & les commentaires (commençant par \texttt{//} ou entre |/*| et |*/|) \\
-Comment.LaTeX & les commentaires commençant par \texttt{//>} qui sont composés par \pkg{piton} comme du code LaTeX (et
- appelés simplement «commentaires LaTeX» dans ce document) \\
+Comment.LaTeX & les commentaires commençant par \texttt{//>} qui sont composés par
+ \pkg{piton} comme du code LaTeX (et appelés simplement «commentaires
+ LaTeX» dans ce document) \\
Keyword.Constant & |default|, |false|, |NULL|, |nullptr| et |true| \\
-Keyword & les mots-clés suivants :
-|alignas|, |asm|, |auto|, |break|, |case|, |catch|, |class|,
-|constexpr|, |const|, |continue|, |decltype|, |do|, |else|, |enum|,
-|extern|, |for|, |goto|, |if|, |nexcept|, |private|, |public|, |register|, |restricted|, |try|,
-|return|, |static|, |static_assert|, |struct|, |switch|, |thread_local|, |throw|,
-|typedef|, |union|, |using|, |virtual|, |volatile| et |while|
+Keyword & les mots-clés suivants : |alignas|, |asm|, |auto|, |break|, |case|, |catch|,
+ |class|, |constexpr|, |const|, |continue|, |decltype|, |do|, |else|, |enum|,
+ |extern|, |for|, |goto|, |if|, |nexcept|, |private|, |public|, |register|,
+ |restricted|, |try|, |return|, |static|, |static_assert|, |struct|, |switch|,
+ |thread_local|, |throw|, |typedef|, |union|, |using|, |virtual|, |volatile| et
+ |while|
\\
\bottomrule
\end{tabularx}
@@ -2534,31 +2705,32 @@ L'option est aussi disponible pour |\PitonInputFile| : |\PitonInputFile[language
Number & les nombres \\
String.Long & les chaînes de caractères (entre \texttt{'} et non entre \texttt{"} car les éléments entre \texttt{"}
sont des noms de champs et formatés avec |Name.Field|) \\
-Operator & les opérateurs suivants :
-\texttt{= != <> >= > < <= * + / } \\
+Operator & les opérateurs suivants : \texttt{= != <> >= > < <= * + / } \\
Name.Table & les noms des tables \\
Name.Field & les noms des champs des tables \\
-Name.Builtin & les fonctions prédéfinies suivantes (leur nom n'est \emph{pas} sensible à la casse) :
- |avg|, |count|, |char_lenght|, |concat|, |curdate|, |current_date|,
- |date_format|, |day|, |lower|, |ltrim|, |max|, |min|, |month|, |now|,
- |rank|, |round|, |rtrim|, |substring|, |sum|, |upper| et |year|. \\
+Name.Builtin & les fonctions prédéfinies suivantes (leur nom n'est \emph{pas} sensible à
+ la casse) : |avg|, |count|, |char_lenght|, |concat|, |curdate|,
+ |current_date|, |date_format|, |day|, |lower|, |ltrim|, |max|, |min|,
+ |month|, |now|, |rank|, |round|, |rtrim|, |substring|, |sum|, |upper| et
+ |year|. \\
Comment & les commentaires (débutant par |--| ou bien entre |/*| et |*/|) \\
-Comment.LaTeX & les commentaires commençant par \texttt{-->} qui sont composés par \pkg{piton} comme du code LaTeX (et
- appelés simplement «commentaires LaTeX» dans ce document) \\
-Keyword & les mots-clés suivants (leur nom n'est \emph{pas} sensible à la casse) :
- |add|, |after|, |all|, |alter|, |and|, |as|, |asc|, |between|, |by|,
- |change|, |column|, |create|, |cross join|, |delete|, |desc|, |distinct|,
- |drop|, |from|, |group|, |having|, |in|, |inner|, |insert|, |into|, |is|,
- |join|, |left|, |like|, |limit|, |merge|, |not|, |null|, |on|, |or|,
- |order|, |over|, |right|, |select|, |set|, |table|, |then|, |truncate|,
- |union|, |update|, |values|, |when|, |where| et |with|. \\
+Comment.LaTeX & les commentaires commençant par \texttt{-->} qui sont composés par
+ \pkg{piton} comme du code LaTeX (et appelés simplement «commentaires
+ LaTeX» dans ce document) \\
+Keyword & les mots-clés suivants (leur nom n'est \emph{pas} sensible à la casse) : |add|,
+ |after|, |all|, |alter|, |and|, |as|, |asc|, |between|, |by|, |change|,
+ |column|, |create|, |cross join|, |delete|, |desc|, |distinct|, |drop|, |from|,
+ |group|, |having|, |in|, |inner|, |insert|, |into|, |is|, |join|, |left|,
+ |like|, |limit|, |merge|, |not|, |null|, |on|, |or|, |order|, |over|, |right|,
+ |select|, |set|, |table|, |then|, |truncate|, |union|, |update|, |values|,
+ |when|, |where| et |with|. \\
\bottomrule
\end{tabularx}
\end{center}
\bigskip
-Si on souhaite que les mots-clés soient capitalisés automatiquement, on peut modifier le style |Keywords|
-localement pour le langage SQL avec l'instruction :
+Si on souhaite que les mots-clés soient capitalisés automatiquement, on peut modifier le
+style |Keywords| localement pour le langage SQL avec l'instruction :
\begin{Verbatim}
\SetPitonStyle~emphase#[SQL]@{Keywords = \bfseries \MakeUppercase}
\end{Verbatim}
@@ -2598,16 +2770,18 @@ L'option est aussi disponible pour |\PitonInputFile| : |\PitonInputFile[language
Number & les nombres \\
String & les chaînes de caractères (qui sont entre \texttt{"}) \\
Comment & les commentaires (qui débutent par |#|) \\
-Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés par \pkg{piton} comme du code LaTeX (et
- appelés simplement «commentaires LaTeX» dans ce document) \\
+Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés par
+ \pkg{piton} comme du code LaTeX (et appelés simplement «commentaires
+ LaTeX» dans ce document) \\
\bottomrule
\end{tabularx}
\end{center}
\bigskip
-Ce langage «|minimal|» est proposé par \pkg{piton} à l'utilisateur final pour qu'il puisse y ajouter des
-formatages de mots-clés avec la commande |\SetPitonIdentifier| (cf. \ref{SetPitonIdentifier},
-p.~\pageref{SetPitonIdentifier}) et créer par exemple un langage pour pseudo-code.
+Ce langage «|minimal|» est proposé par \pkg{piton} à l'utilisateur final pour qu'il puisse
+y ajouter des formatages de mots-clés avec la commande |\SetPitonIdentifier| (cf.
+\ref{SetPitonIdentifier}, p.~\pageref{SetPitonIdentifier}) et créer par exemple un langage
+pour pseudo-code.
\newpage
@@ -2617,8 +2791,8 @@ p.~\pageref{SetPitonIdentifier}) et créer par exemple un langage pour pseudo-co
\indexcommand{NewPitonLanguage}
\vspace{1cm}
-La commande |\NewPitonLanguage|, qui permet de définir de nouveaux langages en utilisant la syntaxe de l'extension
-\pkg{listings}, a été présentée p.~\pageref{NewPitonLanguage}.
+La commande |\NewPitonLanguage|, qui permet de définir de nouveaux langages en utilisant
+la syntaxe de l'extension \pkg{listings}, a été présentée p.~\pageref{NewPitonLanguage}.
Tous les langages définis avec la commande |\NewPitonLanguage| partagent les mêmes styles.
@@ -2630,15 +2804,17 @@ Tous les langages définis avec la commande |\NewPitonLanguage| partagent les m
\normalfont Style & Usage \\
\midrule
Number & les nombres \\
-String.Long & les chaînes de caractères définies dans |\NewPitonLanguage| par la clé |morestring| \\
+String.Long & les chaînes de caractères définies dans |\NewPitonLanguage| par la clé
+ |morestring| \\
Comment & les commentaires définis dans |\NewPitonLanguage| par la clé |morecomment| \\
Comment.LaTeX & les commentaires qui sont composés par \pkg{piton} comme du code LaTeX (et
appelés simplement «commentaires LaTeX» dans ce document) \\
-Keyword & les mots-clés, définis dans |\NewPitonLanguage| par les clés |morekeywords| et |moretexcs| (et également
- la clé |sensitive| qui indique si les mots-clés sont sensibles à la casse) \\
+Keyword & les mots-clés, définis dans |\NewPitonLanguage| par les clés |morekeywords| et
+ |moretexcs| (et également la clé |sensitive| qui indique si les mots-clés sont
+ sensibles à la casse) \\
Directive & les directives définies dans |\NewPitonLanguage| par la clé |moredirectives| \\
-Tag & les «tags» définis par la clé |tag| (les lexèmes détectés à l'intérieur d'un tag seront
- aussi composés avec leur propre style) \\
+Tag & les «tags» définis par la clé |tag| (les lexèmes détectés à l'intérieur d'un tag
+ seront aussi composés avec leur propre style) \\
\bottomrule
\end{tabularx}
\end{center}
diff --git a/macros/luatex/latex/piton/piton.dtx b/macros/luatex/latex/piton/piton.dtx
index ec18e80eaa..dc178721b0 100644
--- a/macros/luatex/latex/piton/piton.dtx
+++ b/macros/luatex/latex/piton/piton.dtx
@@ -79,12 +79,12 @@
% \iffalse
%<*STY>
% \fi
-\def\PitonFileVersion{3.0b}
-\def\PitonFileDate{2024/05/23}
+\def\PitonFileVersion{3.1}
+\def\PitonFileDate{2024/07/30}
% \iffalse
%</STY>
%<*LUA>
-piton_version = "3.0b" -- 2024/05/23
+piton_version = "3.1" -- 2024/07/30
%</LUA>
%\fi
%
@@ -431,6 +431,10 @@ piton_version = "3.0b" -- 2024/05/23
% \item The key \Definition{line-numbers/sep} is the horizontal distance between
% the numbers of lines (inserted by |line-numbers|) and the beginning of the
% lines of code. The initial value is 0.7~em.
+% \item \colorbox{yellow!50}{\bfseries New 3.1}\enskip The key
+% \Definition{line-numbers/format} is a list of tokens which are inserted before
+% the number of line in order to format it. The initial value is
+% |\footnotesize\color{gray}|.
% \end{itemize}
%
% For convenience, a mechanism of factorisation of the prefix |line-numbers| is
@@ -1654,6 +1658,8 @@ piton_version = "3.0b" -- 2024/05/23
%
% \subsubsection{Commands of Beamer allowed in \{Piton\} and \textbackslash PitonInputFile}
%
+% \index{detected-beamer-commands}
+%
% When \pkg{piton} is used in the class \cls{beamer} , the following commands of
% \cls{beamer} (classified upon their number of arguments) are automatically
% detected in the environments |{Piton}| (and in the listings processed by
@@ -1663,17 +1669,23 @@ piton_version = "3.0b" -- 2024/05/23
% also possible to use the command \texttt{\textbackslash pause} in a ``LaTeX
% comment'', that is to say by writing \texttt{\#> \textbackslash pause}. By
% this way, if the Python code is copied, it's still executable by Python}. ;
-% \item one mandatory argument : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible| ;
+% \item one mandatory argument : |\action|, |\alert|, |\invisible|, |\only|,
+% |\uncover| and |\visible| ; \newline
+% \colorbox{yellow!50}{\bfseries New 3.1}\newline
+% It's possible to add new commands to that list with the key
+% \Definition{detected-beamer-commands} (the names of the commands must
+% \emph{not} be preceded by a backslash).
% \item two mandatory arguments : |\alt| ;
% \item three mandatory arguments : |\temporal|.
% \end{itemize}
-% \medskip
-% In the mandatory arguments of these commands, the braces must be balanced.
-% However, the braces included in short strings\footnote{The short strings of
-% Python are the strings delimited by characters \texttt{'} or the characters
-% \texttt{"} and not \texttt{'''} nor \texttt{"""}. In Python, the short strings
-% can't extend on several lines.} of Python are not considered.
+% \medskip
+% These commands must be used preceded and following by a space. In the
+% mandatory arguments of these commands, the braces must be balanced. However,
+% the braces included in short strings\footnote{The short strings of Python are
+% the strings delimited by characters \texttt{'} or the characters \texttt{"}
+% and not \texttt{'''} nor \texttt{"""}. In Python, the short strings can't
+% extend on several lines.} of Python are not considered.
%
% \medskip
% Regarding the functions |\alt| and |\temporal| there should be no carriage
@@ -1713,8 +1725,18 @@ piton_version = "3.0b" -- 2024/05/23
% listings processed by |\PitonInputFile|): |{actionenv}|, |{alertenv}|,
% |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| and |{visibleenv}|.
%
+% \smallskip
+% \index{detected-beamer-environments}
+% \colorbox{yellow!50}{\bfseries New 3.1}
+%
+% It's possible to add new environments to that list with the key
+% \Definition{detected-beamer-environments}.
+%
+% \smallskip
+%
% However, there is a restriction: these environments must contain only \emph{whole
-% lines of Python code} in their body.
+% lines of Python code} in their body. The instructions |\begin{...}| and
+% |\end{...}| must be alone on their lines.
%
%\medskip
% Here is an example:
@@ -1835,6 +1857,8 @@ piton_version = "3.0b" -- 2024/05/23
% course). Hence, that key is similar to the key |auto-gobble| but acts on
% U+0009 instead of U+0020 (spaces).
%
+% The key |env-gobble| is not compatible with the tabulations.
+%
%
% \bigskip
% \section{API for the developpers}
@@ -2957,7 +2981,11 @@ piton_version = "3.0b" -- 2024/05/23
% \begin{macrocode}
\lua_now:n
{
- piton.ListCommands = lpeg.P ( false )
+ piton.BeamerCommands = lpeg.P ( "\\uncover" )
+ + "\\only" + "\\visible" + "\\invisible" + "\\alert" + "\\action"
+ piton.beamer_environments = { "uncoverenv" , "onlyenv" , "visibleenv" ,
+ "invisibleenv" , "alertenv" , "actionenv" }
+ piton.DetectedCommands = lpeg.P ( false )
piton.last_code = ''
piton.last_language = ''
}
@@ -3213,11 +3241,6 @@ piton_version = "3.0b" -- 2024/05/23
\dim_set:Nn \l_@@_numbers_sep_dim { 0.7 em }
% \end{macrocode}
%
-% \medskip
-% The tabulators will be replaced by the content of the following token list.
-% \begin{macrocode}
-\tl_new:N \l_@@_tab_tl
-% \end{macrocode}
%
% \medskip
% Be careful. The following sequence |\g_@@_languages_seq| is not the list of
@@ -3233,30 +3256,26 @@ piton_version = "3.0b" -- 2024/05/23
%
% \medskip
% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_tab_tl:n #1
- {
- \tl_clear:N \l_@@_tab_tl
- \prg_replicate:nn { #1 }
- { \tl_put_right:Nn \l_@@_tab_tl { ~ } }
- }
-\@@_set_tab_tl:n { 4 }
+\int_new:N \l_@@_tab_size_int
+\int_set:Nn \l_@@_tab_size_int { 4 }
% \end{macrocode}
%
-% \medskip
-% When the key |show-spaces| is in force, |\l_@@_tab_tl| will be replaced by an
-% arrow by using the following command.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_tab_tl:
- {
- \hbox_set:Nn \l_tmpa_box { \l_@@_tab_tl }
- \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box }
- \tl_set:Nn \l_@@_tab_tl
+\cs_new_protected:Npn \@@_tab:
+ {
+ \bool_if:NTF \l_@@_show_spaces_bool
{
+ \hbox_set:Nn \l_tmpa_box
+ { \prg_replicate:nn \l_@@_tab_size_int { ~ } }
+ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box }
\( \mathcolor { gray }
- { \hbox_to_wd:nn \l_tmpa_dim { \rightarrowfill } \) }
+ { \hbox_to_wd:nn \l_tmpa_dim { \rightarrowfill } } \)
}
+ { \hbox:n { \prg_replicate:nn \l_@@_tab_size_int { ~ } } }
+ \int_gadd:Nn \g_@@_indentation_int \l_@@_tab_size_int
}
% \end{macrocode}
+%
%
% \medskip
% The following integer corresponds to the key |gobble|.
@@ -3637,6 +3656,8 @@ piton_version = "3.0b" -- 2024/05/23
\bool_new:N \l_@@_skip_empty_lines_bool
\bool_set_true:N \l_@@_skip_empty_lines_bool
\bool_new:N \l_@@_line_numbers_absolute_bool
+\tl_new:N \l_@@_line_numbers_format_bool
+\tl_set:Nn \l_@@_line_numbers_format_tl { \footnotesize \color { gray } }
\bool_new:N \l_@@_label_empty_lines_bool
\bool_set_true:N \l_@@_label_empty_lines_bool
\int_new:N \l_@@_number_lines_start_int
@@ -3715,6 +3736,9 @@ piton_version = "3.0b" -- 2024/05/23
sep .dim_set:N = \l_@@_numbers_sep_dim ,
sep .value_required:n = true ,
+ format .tl_set:N = \l_@@_line_numbers_format_tl ,
+ format .value_required:n = true ,
+
unknown .code:n = \@@_error:n { Unknown~key~for~line-numbers }
}
% \end{macrocode}
@@ -3730,9 +3754,17 @@ piton_version = "3.0b" -- 2024/05/23
% First, we put keys that should be available only in the preamble.
% \begin{macrocode}
detected-commands .code:n =
- \lua_now:n { piton.addListCommands('#1') } ,
+ \lua_now:n { piton.addDetectedCommands('#1') } ,
detected-commands .value_required:n = true ,
detected-commands .usage:n = preamble ,
+ detected-beamer-commands .code:n =
+ \lua_now:n { piton.addBeamerCommands('#1') } ,
+ detected-beamer-commands .value_required:n = true ,
+ detected-beamer-commands .usage:n = preamble ,
+ detected-beamer-environments .code:n =
+ \lua_now:n { piton.addBeamerEnvironments('#1') } ,
+ detected-beamer-environments .value_required:n = true ,
+ detected-beamer-environments .usage:n = preamble ,
% \end{macrocode}
%
% Remark that the command |\lua_escape:n| is fully expandable. That's why we use
@@ -3849,11 +3881,9 @@ piton_version = "3.0b" -- 2024/05/23
} ,
left-margin .value_required:n = true ,
- tab-size .code:n = \@@_set_tab_tl:n { #1 } ,
+ tab-size .int_set:N = \l_@@_tab_size_int ,
tab-size .value_required:n = true ,
- show-spaces .code:n =
- \bool_set_true:N \l_@@_show_spaces_bool
- \@@_convert_tab_tl: ,
+ show-spaces .bool_set:N = \l_@@_show_spaces_bool ,
show-spaces .value_forbidden:n = true ,
show-spaces-in-strings .code:n = \tl_set:Nn \l_@@_space_tl { ␣ } , % U+2423
show-spaces-in-strings .value_forbidden:n = true ,
@@ -3974,8 +4004,7 @@ piton_version = "3.0b" -- 2024/05/23
\hbox_overlap_left:n
{
{
- \color { gray }
- \footnotesize
+ \l_@@_line_numbers_format_tl
\int_to_arabic:n \g_@@_visual_line_int
}
\skip_horizontal:N \l_@@_numbers_sep_dim
@@ -4347,7 +4376,7 @@ piton_version = "3.0b" -- 2024/05/23
{
\hbox_set:Nn \l_tmpa_box
{
- \footnotesize
+ \l_@@_line_numbers_format_tl
\bool_if:NTF \l_@@_skip_empty_lines_bool
{
\lua_now:n
@@ -4726,7 +4755,6 @@ piton_version = "3.0b" -- 2024/05/23
\@@_compute_left_margin:no { CountNonEmptyLinesFile } \l_@@_file_name_str
\@@_compute_width:
\ttfamily
- % \leavevmode
\lua_now:e
{
piton.ParseFile(
@@ -5274,6 +5302,8 @@ piton_version = "3.0b" -- 2024/05/23
break-lines-in-Piton,~
continuation-symbol,~
continuation-symbol-on-indentation,~
+ detected-beamer-commands,~
+ detected-beamer-environments,~
detected-commands,~
end-of-broken-line,~
end-range,~
@@ -5386,8 +5416,28 @@ piton_version = "3.0b" -- 2024/05/23
% \begin{macrocode}
F = space ^ 0 * ( ( alpha ^ 1 ) / "\\%0" ) * space ^ 0
}
- function piton.addListCommands( key_value )
- piton.ListCommands = piton.ListCommands + my_lpeg : match ( key_value )
+ function piton.addDetectedCommands( key_value )
+ piton.DetectedCommands = piton.DetectedCommands + my_lpeg : match ( key_value )
+ end
+ function piton.addBeamerCommands( key_value )
+ piton.BeamerCommands
+ = piton.BeamerCommands + my_lpeg : match ( key_value )
+ end
+% \end{macrocode}
+%
+% \begin{macrocode}
+ local function insert(...)
+ local s = piton.beamer_environments
+ for _ , x in ipairs({...}) do table.insert(s,x) end
+ return s
+ end
+ local my_lpeg_bis =
+ P { "E" ,
+ E = ( V "F" * ( "," * V "F" ) ^ 0 ) / insert ,
+ F = space ^ 0 * ( alpha ^ 1 ) * space ^ 0
+ }
+ function piton.addBeamerEnvironments( key_value )
+ piton.beamer_environments = my_lpeg_bis : match ( key_value )
end
\end{luacode*}
%</STY>
@@ -5427,7 +5477,7 @@ end
local function sprintL3 ( s )
tex.sprint ( luatexbase.catcodetables.expl , s )
end
-% \end{uncoverenv}
+% \end{macrocode}
%
% \bigskip
% \subsubsection{Special functions dealing with LPEG}
@@ -5648,7 +5698,7 @@ local SkipSpace = Q " " ^ 0
local Punct = Q ( S ".,:;!" )
-local Tab = "\t" * Lc "\\l_@@_tab_tl"
+local Tab = "\t" * Lc "\\@@_tab:"
% \end{macrocode}
%
% \bigskip
@@ -5703,16 +5753,19 @@ local function Compute_braces ( lpeg_string ) return
end
% \end{macrocode}
%
+%
+%
% \bigskip
% The following Lua function will compute the \text{lpeg} |DetectedCommands|
% which is a \textsc{lpeg} with captures).
% \begin{macrocode}
local function Compute_DetectedCommands ( lang , braces ) return
Ct ( Cc "Open"
- * C ( piton.ListCommands * P "{" )
+ * C ( piton.DetectedCommands * P "{" )
* Cc "}"
)
- * ( braces / (function ( s ) return LPEG1[lang] : match ( s ) end ) )
+ * ( braces
+ / ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* P "}"
* Ct ( Cc "Close" )
end
@@ -5721,9 +5774,10 @@ end
% \bigskip
% \begin{macrocode}
local function Compute_LPEG_cleaner ( lang , braces ) return
- Ct ( ( piton.ListCommands * "{"
+ Ct ( ( piton.DetectedCommands * "{"
* ( braces
- / ( function ( s ) return LPEG_cleaner[lang] : match ( s ) end ) )
+ / ( function ( s )
+ if s ~= '' then return LPEG_cleaner[lang] : match ( s ) end end ) )
* "}"
+ EscapeClean
+ C ( P ( 1 ) )
@@ -5744,28 +5798,20 @@ local BeamerBeginEnvironments = P ( true )
local BeamerEndEnvironments = P ( true )
% \end{macrocode}
%
-% \bigskip
% \begin{macrocode}
-local list_beamer_env =
- { "uncoverenv" , "onlyenv" , "visibleenv" ,
- "invisibleenv" , "alertenv" , "actionenv" }
-% \end{macrocode}
-%
-% \bigskip
-% \begin{macrocode}
-local BeamerNamesEnvironments = P ( false )
-for _ , x in ipairs ( list_beamer_env ) do
- BeamerNamesEnvironments = BeamerNamesEnvironments + x
+piton.BeamerEnvironments = P ( false )
+for _ , x in ipairs ( piton.beamer_environments ) do
+ piton.BeamerEnvironments = piton.BeamerEnvironments + x
end
% \end{macrocode}
-%
+%
% \bigskip
% \begin{macrocode}
BeamerBeginEnvironments =
( space ^ 0 *
L
(
- P "\\begin{" * BeamerNamesEnvironments * "}"
+ P "\\begin{" * piton.BeamerEnvironments * "}"
* ( "<" * ( 1 - P ">" ) ^ 0 * ">" ) ^ -1
)
* "\r"
@@ -5776,11 +5822,12 @@ BeamerBeginEnvironments =
% \begin{macrocode}
BeamerEndEnvironments =
( space ^ 0 *
- L ( P "\\end{" * BeamerNamesEnvironments * "}" )
+ L ( P "\\end{" * piton.BeamerEnvironments * "}" )
* "\r"
) ^ 0
% \end{macrocode}
%
+%
%
% \bigskip
% The following Lua function will be used to compute the \textsc{lpeg} |Beamer|
@@ -5795,14 +5842,14 @@ local function Compute_Beamer ( lang , braces )
local lpeg = L ( P "\\pause" * ( "[" * ( 1 - P "]" ) ^ 0 * "]" ) ^ -1 )
lpeg = lpeg +
Ct ( Cc "Open"
- * C ( ( P "\\uncover" + "\\only" + "\\alert" + "\\visible"
- + "\\invisible" + "\\action" )
+ * C ( piton.BeamerCommands
* ( "<" * ( 1 - P ">" ) ^ 0 * ">" ) ^ -1
* P "{"
)
* Cc "}"
)
- * ( braces / ( function ( s ) return LPEG1[lang] : match ( s ) end ) )
+ * ( braces /
+ ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* "}"
* Ct ( Cc "Close" )
% \end{macrocode}
@@ -5814,9 +5861,11 @@ local function Compute_Beamer ( lang , braces )
% \begin{macrocode}
lpeg = lpeg +
L ( P "\\alt" * "<" * ( 1 - P ">" ) ^ 0 * ">" * "{" )
- * K ( 'ParseAgain.noCR' , braces )
+ * ( braces /
+ ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* L ( P "}{" )
- * K ( 'ParseAgain.noCR' , braces )
+ * ( braces /
+ ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* L ( P "}" )
% \end{macrocode}
%
@@ -5825,18 +5874,21 @@ local function Compute_Beamer ( lang , braces )
% \begin{macrocode}
lpeg = lpeg +
L ( ( P "\\temporal" ) * "<" * ( 1 - P ">" ) ^ 0 * ">" * "{" )
- * K ( 'ParseAgain.noCR' , braces )
+ * ( braces
+ / ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* L ( P "}{" )
- * K ( 'ParseAgain.noCR' , braces )
+ * ( braces
+ / ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* L ( P "}{" )
- * K ( 'ParseAgain.noCR' , braces )
+ * ( braces
+ / ( function ( s ) if s ~= '' then return LPEG1[lang] : match ( s ) end end ) )
* L ( P "}" )
% \end{macrocode}
%
% \bigskip
% Now, the environments of Beamer.
% \begin{macrocode}
- for _ , x in ipairs ( list_beamer_env ) do
+ for _ , x in ipairs ( piton.beamer_environments ) do
lpeg = lpeg +
Ct ( Cc "Open"
* C (
@@ -5847,7 +5899,11 @@ local function Compute_Beamer ( lang , braces )
)
* (
( ( 1 - P ( "\\end{" .. x .. "}" ) ) ^ 0 )
- / ( function ( s ) return LPEG1[lang] : match ( s ) end )
+ / ( function ( s )
+ if s ~= ''
+ then return LPEG1[lang] : match ( s )
+ end
+ end )
)
* P ( "\\end{" .. x .. "}" )
* Ct ( Cc "Close" )
@@ -5959,6 +6015,17 @@ local Operator =
local OperatorWord =
K ( 'Operator.Word' , P "in" + "is" + "and" + "or" + "not" )
+% \end{macrocode}
+%
+% \smallskip
+% The keyword |in| in a construction such as ``|for i in range(n)|'' must be
+% formatted as a keyword and not as an |Operator.Word|.
+% \begin{macrocode}
+local For = K ( 'Keyword' , P "for" )
+ * Space
+ * Identifier
+ * Space
+ * K ( 'Keyword' , P "in" )
local Keyword =
K ( 'Keyword' ,
@@ -6413,12 +6480,16 @@ local ExceptionInConsole = Exception * Q ( ( 1 - P "\r" ) ^ 0 ) * EOL
% \bigskip
% \paragraph{The main LPEG for the language Python}
%
+% \begin{macrocode}
+local EndKeyword = Space + Punct + Delim + EOL + Beamer + DetectedCommands + -1
+% \end{macrocode}
+%
% First, the main loop :
% \begin{macrocode}
local Main =
- space ^ 1 * -1
- + space ^ 0 * EOL
- + Space
+ -- space ^ 1 * -1
+ -- + space ^ 0 * EOL
+ Space
+ Tab
+ Escape + EscapeMath
+ CommentLaTeX
@@ -6429,16 +6500,17 @@ local Main =
+ ExceptionInConsole
+ Delim
+ Operator
- + OperatorWord * ( Space + Punct + Delim + EOL + -1 )
+ + OperatorWord * EndKeyword
+ ShortString
+ Punct
+ FromImport
+ RaiseException
+ DefFunction
+ DefClass
- + Keyword * ( Space + Punct + Delim + EOL + -1 )
+ + For
+ + Keyword * EndKeyword
+ Decorator
- + Builtin * ( Space + Punct + Delim + EOL + -1 )
+ + Builtin * EndKeyword
+ Identifier
+ Number
+ Word
@@ -6464,7 +6536,7 @@ LPEG2['python'] =
* Lc '\\@@_begin_line:'
* Prompt
* SpaceIndentation ^ 0
- * LPEG1['python']
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc '\\@@_end_line:'
)
@@ -6555,7 +6627,7 @@ local DotNotation =
(
K ( 'Name.Module' , cap_identifier )
* Q "."
- * ( Identifier + Constructor + Q "(" + Q "[" + Q "{" )
+ * ( Identifier + Constructor + Q "(" + Q "[" + Q "{" ) ^ ( -1 )
+
Identifier
* Q "."
@@ -6616,7 +6688,7 @@ local Char =
% \begin{macrocode}
braces = Compute_braces ( "\"" * ( 1 - S "\"" ) ^ 0 * "\"" )
if piton.beamer then
- Beamer = Compute_Beamer ( 'ocaml' , "\"" * ( 1 - S "\"" ) ^ 0 * "\"" )
+ Beamer = Compute_Beamer ( 'ocaml' , braces ) -- modified 2024/07/24
end
% \end{macrocode}
%
@@ -6826,12 +6898,14 @@ local TypeParameter = K ( 'TypeParameter' , "'" * alpha * # ( 1 - P "'" ) )
% \bigskip
% \paragraph{The main LPEG for the language OCaml}
%
+% \begin{macrocode}
+local EndKeyword = Space + Punct + Delim + EOL + Beamer + DetectedCommands + -1
+% \end{macrocode}
+%
% First, the main loop :
% \begin{macrocode}
local Main =
- space ^ 1 * -1
- + space ^ 0 * EOL
- + Space
+ Space
+ Tab
+ Escape + EscapeMath
+ Beamer
@@ -6847,9 +6921,9 @@ local Main =
+ DefFunction
+ DefModule
+ Record
- + Keyword * ( Space + Punct + Delim + EOL + -1 )
- + OperatorWord * ( Space + Punct + Delim + EOL + -1 )
- + Builtin * ( Space + Punct + Delim + EOL + -1 )
+ + Keyword * EndKeyword
+ + OperatorWord * EndKeyword
+ + Builtin * EndKeyword
+ DotNotation
+ Constructor
+ Identifier
@@ -6872,7 +6946,7 @@ LPEG2['ocaml'] =
* BeamerBeginEnvironments
* Lc '\\@@_begin_line:'
* SpaceIndentation ^ 0
- * LPEG1['ocaml']
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc '\\@@_end_line:'
)
@@ -7015,12 +7089,14 @@ local LongComment =
% \bigskip
% \paragraph{The main LPEG for the language C}
%
+% \begin{macrocode}
+local EndKeyword = Space + Punct + Delim + EOL + Beamer + DetectedCommands + -1
+% \end{macrocode}
+%
% First, the main loop :
% \begin{macrocode}
local Main =
- space ^ 1 * -1
- + space ^ 0 * EOL
- + Space
+ Space
+ Tab
+ Escape + EscapeMath
+ CommentLaTeX
@@ -7034,9 +7110,9 @@ local Main =
+ Punct
+ DefFunction
+ DefClass
- + Type * ( Q "*" ^ -1 + Space + Punct + Delim + EOL + -1 )
- + Keyword * ( Space + Punct + Delim + EOL + -1 )
- + Builtin * ( Space + Punct + Delim + EOL + -1 )
+ + Type * ( Q "*" ^ -1 + EndKeyword )
+ + Keyword * EndKeyword
+ + Builtin * EndKeyword
+ Identifier
+ Number
+ Word
@@ -7060,7 +7136,7 @@ LPEG2['c'] =
* BeamerBeginEnvironments
* Lc '\\@@_begin_line:'
* SpaceIndentation ^ 0
- * LPEG1['c']
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc '\\@@_end_line:'
)
@@ -7203,6 +7279,9 @@ local LongComment =
% \bigskip
% \paragraph{The main LPEG for the language SQL}
%
+% \begin{macrocode}
+local EndKeyword = Space + Punct + Delim + EOL + Beamer + DetectedCommands + -1
+% \end{macrocode}
%
% \begin{macrocode}
local TableField =
@@ -7245,13 +7324,15 @@ local WeCatchTableNames =
* ( Space + EOL ) * OneTable
% \end{macrocode}
%
+% \begin{macrocode}
+local EndKeyword = Space + Punct + Delim + EOL + Beamer + DetectedCommands + -1
+% \end{macrocode}
+%
%
% First, the main loop :
% \begin{macrocode}
local Main =
- space ^ 1 * -1
- + space ^ 0 * EOL
- + Space
+ Space
+ Tab
+ Escape + EscapeMath
+ CommentLaTeX
@@ -7286,7 +7367,7 @@ LPEG2['sql'] =
* BeamerBeginEnvironments
* Lc [[ \@@_begin_line: ]]
* SpaceIndentation ^ 0
- * LPEG1['sql']
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc [[ \@@_end_line: ]]
)
@@ -7328,9 +7409,7 @@ local Identifier = K ( 'Identifier' , identifier )
local Delim = Q ( S "{[()]}" )
local Main =
- space ^ 1 * -1
- + space ^ 0 * EOL
- + Space
+ Space
+ Tab
+ Escape + EscapeMath
+ CommentLaTeX
@@ -7352,7 +7431,7 @@ LPEG2['minimal'] =
* BeamerBeginEnvironments
* Lc [[ \@@_begin_line: ]]
* SpaceIndentation ^ 0
- * LPEG1['minimal']
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc [[ \@@_end_line: ]]
)
@@ -7394,14 +7473,14 @@ function piton.Parse ( language , code )
%
% Here is an example of an item beginning with |"Open"|.
%
-% |{ "Open" , "\begin{uncover}<2>" , "\end{cover}" }|
+% |{ "Open" , "\begin{uncover}<2>" , "\end{uncover}" }|
%
% In order to deal with the ends of lines, we have to close the environment
-% (|{cover}| in this example) at the end of each line and reopen it at the
+% (|{uncover}| in this example) at the end of each line and reopen it at the
% beginning of the new line. That's why we use two Lua stacks, called
% |left_stack| and |right_stack|. |left_stack| will be for the elements like
% |\begin{uncover}<2>| and |right_stack| will be for the elements like
-% |\end{cover}|.
+% |\end{uncover}|.
% \begin{macrocode}
if one_item[1] == "Open" then
tex.sprint( one_item[2] )
@@ -7813,7 +7892,7 @@ function piton.new_language ( lang , definition )
% |tag| (mainly for the language \textsc{html}) for the character |/| in the
% closing tags |</....>|).
% \begin{macrocode}
- other = other + P "c"
+ other = other + P ( c )
end
end
% \end{macrocode}
@@ -8208,12 +8287,7 @@ function piton.new_language ( lang , definition )
%
% \begin{macrocode}
local Main =
- space ^ 1 * -1
-% \end{macrocode}
-% The spaces at the end of the lines are discarded.
-% \begin{macrocode}
- + space ^ 0 * EOL
- + Space
+ Space
+ Tab
+ Escape + EscapeMath
+ CommentLaTeX
@@ -8249,7 +8323,7 @@ function piton.new_language ( lang , definition )
* BeamerBeginEnvironments
* Lc [[\@@_begin_line:]]
* SpaceIndentation ^ 0
- * LPEG1[lang]
+ * ( space ^ 1 * -1 + space ^ 0 * EOL + Main ) ^ 0
* -1
* Lc [[\@@_end_line:]]
)
@@ -8327,6 +8401,12 @@ end
%
% \verb|https://github.com/fpantigny/piton|
%
+% \subsection*{Changes between versions 3.0 and 3.1}
+%
+% New keys |line-numbers/format|, |detected-beamer-commands| and
+% |detected-beamer-environments|.
+%
+%
% \subsection*{Changes between versions 2.8 and 3.0}
%
% New command |\NewPitonLanguage|. Thanks to that command, it's now possible to
@@ -8396,61 +8476,6 @@ end
% The key |escape-inside| is deprecated: use |begin-escape| and |end-escape|.
%
%
-% \subsection*{Changes between versions 1.6 and 2.0}
-%
-% The extension \pkg{piton} now supports the computer languages OCaml and C
-% (and, of course, Python).
-%
-% \subsection*{Changes between versions 1.5 and 1.6}
-%
-% New key |width| (for the total width of the listing).
-%
-% New style |UserFunction| to format the names of the Python functions
-% previously defined by the user. Command |\PitonClearUserFunctions| to clear
-% the list of such functions names.
-%
-% \subsection*{Changes between versions 1.4 and 1.5}
-%
-% New key |numbers-sep|.
-%
-%
-% \subsection*{Changes between versions 1.3 and 1.4}
-%
-% New key |identifiers| in |\PitonOptions|.
-%
-% New command |\PitonStyle|.
-%
-% |background-color| now accepts as value a \emph{list} of colors.
-%
-% \subsection*{Changes between versions 1.2 and 1.3}
-%
-% When the class Beamer is used, the environment |{Piton}| and the command
-% |\PitonInputFile| are ``overlay-aware'' (that is to say, they accept a
-% specification of overlays between angular brackets).
-%
-% New key |prompt-background-color|
-%
-% It's now possible to use the command |\label| to reference a line of code in
-% an environment |{Piton}|.
-%
-% A new command |\|␣ is available in the argument of the command |\piton{...}| to
-% insert a space (otherwise, several spaces are replaced by a single space).
-%
-% \subsection*{Changes between versions 1.1 and 1.2}
-%
-% New keys |break-lines-in-piton| and |break-lines-in-Piton|.
-%
-% New key |show-spaces-in-string| and modification of the key |show-spaces|.
-%
-% When the class \cls{beamer} is used, the environments |{uncoverenv}|,
-% |{onlyenv}|, |{visibleenv}| and |{invisibleenv}|
-%
-%
-% \subsection*{Changes between versions 1.0 and 1.1}
-%
-% The extension \pkg{piton} detects the class \cls{beamer} and activates the
-% commands |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible|
-% in the environments |{Piton}| when the class \cls{beamer} is used.
%
% \tableofcontents
%
diff --git a/macros/luatex/latex/piton/piton.pdf b/macros/luatex/latex/piton/piton.pdf
index 537202a41c..d51bd87c64 100644
--- a/macros/luatex/latex/piton/piton.pdf
+++ b/macros/luatex/latex/piton/piton.pdf
@@ -473,143 +473,150 @@ endobj
<< /S /GoTo /D (subsubsection.0.10.3.1) >>
endobj
275 0 obj
-(\376\377\0001\0000\000.\0003\000.\0001\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000P\000y\000t\000h\000o\000n)
+(\376\377\0001\0000\000.\0003\000.\0001\000\040\000S\000p\000e\000c\000i\000a\000l\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000s\000\040\000d\000e\000a\000l\000i\000n\000g\000\040\000w\000i\000t\000h\000\040\000L\000P\000E\000G)
endobj
276 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.2) >>
endobj
279 0 obj
-(\376\377\0001\0000\000.\0003\000.\0002\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000O\000c\000a\000m\000l)
+(\376\377\0001\0000\000.\0003\000.\0002\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000P\000y\000t\000h\000o\000n)
endobj
280 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.3) >>
endobj
283 0 obj
-(\376\377\0001\0000\000.\0003\000.\0003\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000C)
+(\376\377\0001\0000\000.\0003\000.\0003\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000O\000c\000a\000m\000l)
endobj
284 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.4) >>
endobj
287 0 obj
-(\376\377\0001\0000\000.\0003\000.\0004\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000S\000Q\000L)
+(\376\377\0001\0000\000.\0003\000.\0004\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000C)
endobj
288 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.5) >>
endobj
291 0 obj
-(\376\377\0001\0000\000.\0003\000.\0005\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000`\000`\000M\000i\000n\000i\000m\000a\000l\000'\000')
+(\376\377\0001\0000\000.\0003\000.\0005\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000S\000Q\000L)
endobj
292 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.6) >>
endobj
295 0 obj
-(\376\377\0001\0000\000.\0003\000.\0006\000\040\000T\000w\000o\000\040\000v\000a\000r\000i\000a\000n\000t\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000\040\000P\000a\000r\000s\000e\000\040\000w\000i\000t\000h\000\040\000i\000n\000t\000e\000g\000r\000a\000t\000e\000d\000\040\000p\000r\000e\000p\000r\000o\000c\000e\000s\000s\000o\000r\000s)
+(\376\377\0001\0000\000.\0003\000.\0006\000\040\000T\000h\000e\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000\040\000`\000`\000M\000i\000n\000i\000m\000a\000l\000'\000')
endobj
296 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.7) >>
endobj
299 0 obj
-(\376\377\0001\0000\000.\0003\000.\0007\000\040\000P\000r\000e\000p\000r\000o\000c\000e\000s\000s\000o\000r\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000\040\000P\000a\000r\000s\000e\000\040\000f\000o\000r\000\040\000g\000o\000b\000b\000l\000e)
+(\376\377\0001\0000\000.\0003\000.\0007\000\040\000T\000w\000o\000\040\000v\000a\000r\000i\000a\000n\000t\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000\040\000P\000a\000r\000s\000e\000\040\000w\000i\000t\000h\000\040\000i\000n\000t\000e\000g\000r\000a\000t\000e\000d\000\040\000p\000r\000e\000p\000r\000o\000c\000e\000s\000s\000o\000r\000s)
endobj
300 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.8) >>
endobj
303 0 obj
-(\376\377\0001\0000\000.\0003\000.\0008\000\040\000T\000o\000\040\000c\000o\000u\000n\000t\000\040\000t\000h\000e\000\040\000n\000u\000m\000b\000e\000r\000\040\000o\000f\000\040\000l\000i\000n\000e\000s)
+(\376\377\0001\0000\000.\0003\000.\0008\000\040\000P\000r\000e\000p\000r\000o\000c\000e\000s\000s\000o\000r\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000f\000u\000n\000c\000t\000i\000o\000n\000\040\000P\000a\000r\000s\000e\000\040\000f\000o\000r\000\040\000g\000o\000b\000b\000l\000e)
endobj
304 0 obj
<< /S /GoTo /D (subsubsection.0.10.3.9) >>
endobj
307 0 obj
-(\376\377\0001\0000\000.\0003\000.\0009\000\040\000T\000o\000\040\000c\000r\000e\000a\000t\000e\000\040\000n\000e\000w\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000s\000\040\000w\000i\000t\000h\000\040\000t\000h\000e\000\040\000s\000y\000n\000t\000a\000x\000\040\000o\000f\000\040\000l\000i\000s\000t\000i\000n\000g\000s)
+(\376\377\0001\0000\000.\0003\000.\0009\000\040\000T\000o\000\040\000c\000o\000u\000n\000t\000\040\000t\000h\000e\000\040\000n\000u\000m\000b\000e\000r\000\040\000o\000f\000\040\000l\000i\000n\000e\000s)
endobj
308 0 obj
-<< /S /GoTo /D (section.0.11) >>
+<< /S /GoTo /D (subsubsection.0.10.3.10) >>
endobj
311 0 obj
-(\376\377\0001\0001\000\040\000H\000i\000s\000t\000o\000r\000y)
+(\376\377\0001\0000\000.\0003\000.\0001\0000\000\040\000T\000o\000\040\000c\000r\000e\000a\000t\000e\000\040\000n\000e\000w\000\040\000l\000a\000n\000g\000u\000a\000g\000e\000s\000\040\000w\000i\000t\000h\000\040\000t\000h\000e\000\040\000s\000y\000n\000t\000a\000x\000\040\000o\000f\000\040\000l\000i\000s\000t\000i\000n\000g\000s)
endobj
312 0 obj
-<< /S /GoTo /D (toc1.1) >>
+<< /S /GoTo /D (section.0.11) >>
endobj
315 0 obj
-(\376\377\000C\000o\000n\000t\000e\000n\000t\000s)
+(\376\377\0001\0001\000\040\000H\000i\000s\000t\000o\000r\000y)
endobj
316 0 obj
-<< /S /GoTo /D [ 317 0 R /FitBH 771.02165 ] >>
+<< /S /GoTo /D (toc1.1) >>
endobj
-322 0 obj
-<< /Filter /FlateDecode /Length 3357 >>
+319 0 obj
+(\376\377\000C\000o\000n\000t\000e\000n\000t\000s)
+
+endobj
+320 0 obj
+<< /S /GoTo /D [ 321 0 R /FitBH 771.02165 ] >>
+endobj
+326 0 obj
+<< /Filter /FlateDecode /Length 3347 >>
stream
-xڽ[K$ ﯨ.% vpNqf`8 !%J%T5ИzH$'JEE.߾W7Ћ5f7
-E-a*⻰|$ ROR}.޸|/O#fClI,+Ѱ(%wd!ŃD]fԴ8/tT (IԤ 84?!"hw, 8uگ4ב4E͢
-<moY52'_q.j!}| u <jk_GfDtQ/N N
-{F
-lY;rFQxEKΨaLyx)aw䌨afThV=C$=L중">5K u˃$;MciJ:N., Zj%K+bf`]ÑY<V[0]-cpruhW
-YGe"( {5KB:F?' Kx},E=H#QlMfKt(/$׉_xuЊHmЫOkԂq"E4Vي;Wv̄/2'; )iqx\N3&hk'k@2Ǒk}Vh_|$[^;B2(s1$)h!aG I> <}3~Q+s )4| D”6npUQ'Eh`B
--KAT$.wCOW;H $L5f#<jnWdW7ofnh
- zOS[-2al :@1@99]m;:|nf!kCBlN#'giMot3㡎AamS{51k."^))0WfH-q 7|,ڀj#EsnޡWyEۮk~&T/9%*O>ŠޫMBTIh5A16qة~"tkEP̿jk˚ӎF/PS*z^dH*FO؉Jh(f2I
-&w95?qC@i]fOPbbgu_Bfowj<ҲMZ1o] ~lr
-t
-9{7qwp9*5onqP\q_Kߦn `eGqZ!pQmt8ۖQޤ Daj:ːG-D)9_
-؊Kikqݴ)jϴ9gާ p~C/E)GMI/šJXFų$r'Ql.Ŧn{X,+ъ@u'4-$U+ahS4tH:@|<.1(|7ZXc[GȿUlMv`Ɓ4m!cܕ븎^gpes]iY%_]d5uՈhؓMݾ(!y~+_Vz%NmAU5Q]V/Al9JI-̤KK0yj2F3ढ़rwp݇sZx{5A PzK6[kײ<g]6?d@ȝi"gC}T| y!nZgl\`=
-aX.l#];QmرBlZ7YrH1~>>dNX Ku%J)N-n9߶`W6g>HT,ow\]SB8%u#wA>{
--ɬ5h1p ^ʉK:Gf]%\Ng4ՙA*)3V#Q2/2<5i-0J'+Yjђ BӜei?c#JĨ`QuDL"J[zZ%sWq%ZKPSVZۙnE%h]]5@B(2$y?^X֯\02Bǡy\Zx]\#w[,5D-pJ[x۝B_јJӷY /ƮCX԰rh 5iٺ\7IyM)%rQ{'4.C&C>GȔ/#+$A#<W+D\+3R*o2Q>WOHcc(=r:rV
-P!-%tttyod["D-ۄ hڳqIGme3hOޞ
+xڽ[KWq@4Y,ǀs >$
+#@S$lf`A.E.߿7ЋrA\>7rQ h/Nz痏^J}A)){}J~Cchq3H$@Vt}f2D0F80Id~n:ZhAщ4c <%#]G"q噳̣
+XgvuڭH:%ɒm/Y43+_W cb + +Ef鎘s}rOx(/\3#ɢ[tB2cr}!(gY#Ru0F%k{ha:"#A JQ/LQ"<˻, g]d4)dz?QƉ܉a[KdiCX5EgT2wX/!Da)"G^\tBE #2o1.tsnEtP? 'r{>aΒ]jCoIRg
+ >ύT^[OZ#XvX/#"8
+ M mHɂG MGe]'QԾHZ(9%̔.&(qpb"On7p*c nG~倡]"РHS lmeG\ά rOaWSJ|#a 7iLԘԶ7bk2X q/kN(DPY8#'gc)71j>lP S1wjけnZ>"τ$Y@7ZR/)8dljF "#'hdٓsFVy7][G^פlMW$) ޜA.QO&i"kc:mS@ 6̿$˪kRPei
+zrvwB
+ m]g|,
+gڐÃQJX$Sr}c2]mv7$$RGZ2Tp,ꊨ{
+1@絧o'ZN 8QּM]_!e1iz~qV+P-,oՁzt k/Ř57n²~k4}l+cTV0&f1.ƞlvnL\gNyq]|ZgF;9 ,aɮvkH&Zg`hL{҂=8n\Cpt i+݃/ZF*msZX{6A Pz3lveyv9lHbr'T`h0PHa6Aa:sUv6'
+{ Ij-5 Ue
+mAEYJӮ;aOA1"݂=( l<o=Z9p_{=[۵iq {h}Os}9/NtYx-#=$~&+hz,KIH<BO<iĨH3MGtMuh"%HwW%È)%}᝕m 63yQsEP}~Fro
+^PpB㨷
+TF+
+Cُ3ih+A#w@
+Njx-V؝l_u9ber\7IvMjK$jڥZG֑: nIAS1 0L(5Jcy"Q*0q{ѻ3K[=_zu҉1_TvL,Tʨ!f3V7;mUig7Pb[ n"~'qL'r*l!<z{V$Ro]-6v86" Rc+vMʹK2kspڲ*pst$e$oGc)WޡD]W|`YI7J~Ek ,<Z/狋-եO*06562;Θ0 y=cDoI4H ݞ(`^AC2xڨ2Tї#%#{
endstream
endobj
-317 0 obj
-<< /Type /Page /Contents 322 0 R /Resources 321 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 354 0 R >>
+321 0 obj
+<< /Type /Page /Contents 326 0 R /Resources 325 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 358 0 R >>
endobj
-354 0 obj
-[ 318 0 R 320 0 R 319 0 R 351 0 R ]
+358 0 obj
+[ 322 0 R 324 0 R 323 0 R 355 0 R ]
endobj
-318 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 276.15 522.003 282.609 534.294 ]/A << /S /GoTo /D (Hfootnote.1) >> >>
+322 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 276.15 521.872 282.609 534.163 ]/A << /S /GoTo /D (Hfootnote.1) >> >>
endobj
-320 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 377.606 293.321 384.065 307.269 ]/A << /S /GoTo /D (Hfootnote.2) >> >>
+324 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 377.606 293.189 384.065 307.137 ]/A << /S /GoTo /D (Hfootnote.2) >> >>
endobj
-319 0 obj
-<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 468.356 132.704 516.902 143.254 ]
+323 0 obj
+<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 468.356 132.572 516.902 143.122 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.inf.puc-rio.br/~roberto/lpeg/)>>
>>
endobj
-351 0 obj
-<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 79.37 123.166 202.6 131.536 ]
+355 0 obj
+<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 79.37 123.034 202.6 131.405 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.inf.puc-rio.br/~roberto/lpeg/)>>
>>
endobj
-323 0 obj
-<< /D [ 317 0 R /XYZ 78.37 808.885 null ] >>
+327 0 obj
+<< /D [ 321 0 R /XYZ 78.37 808.885 null ] >>
endobj
-324 0 obj
-<< /D [ 317 0 R /XYZ 79.37 771.024 null ] >>
+328 0 obj
+<< /D [ 321 0 R /XYZ 79.37 771.024 null ] >>
endobj
5 0 obj
-<< /D [ 317 0 R /XYZ 79.37 562.969 null ] >>
-endobj
-348 0 obj
-<< /D [ 317 0 R /XYZ 93.716 144.934 null ] >>
+<< /D [ 321 0 R /XYZ 79.37 562.837 null ] >>
endobj
352 0 obj
-<< /D [ 317 0 R /XYZ 93.716 125.842 null ] >>
+<< /D [ 321 0 R /XYZ 93.716 144.802 null ] >>
endobj
-321 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F23 325 0 R /F24 326 0 R /F32 327 0 R /F41 328 0 R /F52 329 0 R /F61 330 0 R /F60 331 0 R /F62 332 0 R /F64 333 0 R /F15 334 0 R /F65 335 0 R /F16 336 0 R /F74 337 0 R /F75 338 0 R /F77 339 0 R /F27 340 0 R /F30 341 0 R /F67 342 0 R /F66 343 0 R /F47 344 0 R /F53 345 0 R /F59 346 0 R /F71 347 0 R /F72 349 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+356 0 obj
+<< /D [ 321 0 R /XYZ 93.716 125.711 null ] >>
endobj
-364 0 obj
+325 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F23 329 0 R /F24 330 0 R /F32 331 0 R /F41 332 0 R /F52 333 0 R /F61 334 0 R /F60 335 0 R /F62 336 0 R /F64 337 0 R /F15 338 0 R /F65 339 0 R /F16 340 0 R /F74 341 0 R /F75 342 0 R /F77 343 0 R /F27 344 0 R /F30 345 0 R /F67 346 0 R /F66 347 0 R /F47 348 0 R /F53 349 0 R /F59 350 0 R /F71 351 0 R /F72 353 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+368 0 obj
<< /Filter /FlateDecode /Length 3884 >>
stream
xڵ\K$ ϯ?D
@@ -623,52 +630,52 @@ dgVd>Gi)5ѧ͵R ZC\`[k<SΝua)KDuSH qя,xr;6v%M
֒-ZpȧYs$ _|1¹6M;3 N(\6Q.oVBF{F*Da2=ME| #F(5sٔ;2_(Xӄ[fTSwu,֡ˌ
endstream
endobj
-363 0 obj
-<< /Type /Page /Contents 364 0 R /Resources 362 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 369 0 R >>
+367 0 obj
+<< /Type /Page /Contents 368 0 R /Resources 366 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 373 0 R >>
endobj
-369 0 obj
-[ 355 0 R 357 0 R 358 0 R 359 0 R 356 0 R ]
+373 0 obj
+[ 359 0 R 361 0 R 362 0 R 363 0 R 360 0 R ]
endobj
-355 0 obj
+359 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 237.308 470.236 243.767 482.526 ]/A << /S /GoTo /D (Hfootnote.3) >> >>
endobj
-357 0 obj
+361 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 157.533 437.917 164.506 449.872 ]/A << /S /GoTo /D (section.0.5) >> >>
endobj
-358 0 obj
+362 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 313.871 128.166 328.596 139.115 ]/A << /S /GoTo /D (subsection.0.4.3) >> >>
endobj
-359 0 obj
+363 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 341.547 128.166 348.521 139.115 ]/A << /S /GoTo /D (subsection.0.4.3) >> >>
endobj
-356 0 obj
+360 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 345.405 94.628 355.861 106.248 ]/A << /S /GoTo /D (subsection.0.9.5) >> >>
endobj
-365 0 obj
-<< /D [ 363 0 R /XYZ 78.37 808.885 null ] >>
+369 0 obj
+<< /D [ 367 0 R /XYZ 78.37 808.885 null ] >>
endobj
9 0 obj
-<< /D [ 363 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 367 0 R /XYZ 79.37 771.024 null ] >>
endobj
13 0 obj
-<< /D [ 363 0 R /XYZ 79.37 686.413 null ] >>
+<< /D [ 367 0 R /XYZ 79.37 686.413 null ] >>
endobj
17 0 obj
-<< /D [ 363 0 R /XYZ 79.37 620.171 null ] >>
+<< /D [ 367 0 R /XYZ 79.37 620.171 null ] >>
endobj
21 0 obj
-<< /D [ 363 0 R /XYZ 79.37 535.018 null ] >>
+<< /D [ 367 0 R /XYZ 79.37 535.018 null ] >>
endobj
25 0 obj
-<< /D [ 363 0 R /XYZ 79.37 294.886 null ] >>
+<< /D [ 367 0 R /XYZ 79.37 294.886 null ] >>
endobj
-368 0 obj
-<< /D [ 363 0 R /XYZ 93.716 107.928 null ] >>
+372 0 obj
+<< /D [ 367 0 R /XYZ 93.716 107.928 null ] >>
endobj
-362 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R /F80 366 0 R /F16 336 0 R /F22 367 0 R /F75 338 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+366 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F80 370 0 R /F16 340 0 R /F22 371 0 R /F75 342 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-375 0 obj
+379 0 obj
<< /Filter /FlateDecode /Length 4033 >>
stream
x\Id ?вD>%%?.m5cE IqW_<]>.3oߞ~/J_qOڗg92s,Oʹk ?O+ק֝LȋՖ9-/)|8S]`B˟~mՌnaqJ8($N"AL(74ir@@KbKL\ZQHEy! 8|ۉ~ZhyoIJ@7
@@ -685,40 +692,40 @@ Kt'3~RB@U:T:Jt 2fZzMO)+)BHTp˟oL!
ul{h9`6 eY yMv`oR}.c2O&xItt gwow%zRt{+b5]ђBa]1y } *}x[ s`kL@ol sq}?]QmYOJ+MAӨ6'-I-Q-m]6YM@̇#ڔ# 9=Ѧ9hSh3>h'm<{wv#DǕς8ikp E!%w Wԯۊ6]pEHF߅+5L⊔m\v8
endstream
endobj
-374 0 obj
-<< /Type /Page /Contents 375 0 R /Resources 373 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 380 0 R >>
+378 0 obj
+<< /Type /Page /Contents 379 0 R /Resources 377 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 384 0 R >>
endobj
-380 0 obj
-[ 360 0 R 361 0 R 370 0 R 371 0 R ]
+384 0 obj
+[ 364 0 R 365 0 R 374 0 R 375 0 R ]
endobj
-360 0 obj
+364 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 334.663 742.082 349.388 753.141 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
endobj
-361 0 obj
+365 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 365.109 742.082 377.064 753.141 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
endobj
-370 0 obj
+374 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 221.129 420.814 227.587 433.165 ]/A << /S /GoTo /D (Hfootnote.4) >> >>
endobj
-371 0 obj
+375 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 459.405 270.705 465.864 283.155 ]/A << /S /GoTo /D (Hfootnote.5) >> >>
endobj
-376 0 obj
-<< /D [ 374 0 R /XYZ 78.37 808.885 null ] >>
+380 0 obj
+<< /D [ 378 0 R /XYZ 78.37 808.885 null ] >>
endobj
29 0 obj
-<< /D [ 374 0 R /XYZ 79.37 660.929 null ] >>
+<< /D [ 378 0 R /XYZ 79.37 660.929 null ] >>
endobj
-378 0 obj
-<< /D [ 374 0 R /XYZ 93.716 113.357 null ] >>
+382 0 obj
+<< /D [ 378 0 R /XYZ 93.716 113.357 null ] >>
endobj
-379 0 obj
-<< /D [ 374 0 R /XYZ 93.716 103.729 null ] >>
+383 0 obj
+<< /D [ 378 0 R /XYZ 93.716 103.729 null ] >>
endobj
-373 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F64 333 0 R /F22 367 0 R /F16 336 0 R /F75 338 0 R /F77 339 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+377 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F81 381 0 R /F65 339 0 R /F64 337 0 R /F22 371 0 R /F16 340 0 R /F75 342 0 R /F77 343 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-390 0 obj
+394 0 obj
<< /Filter /FlateDecode /Length 5025 >>
stream
xڽ$1"o`ͭ
@@ -744,341 +751,324 @@ Gqvׇk
j%Ms!)t-QJI{1@U8esdQz
endstream
endobj
-389 0 obj
-<< /Type /Page /Contents 390 0 R /Resources 388 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 397 0 R >>
+393 0 obj
+<< /Type /Page /Contents 394 0 R /Resources 392 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 401 0 R >>
endobj
-397 0 obj
-[ 372 0 R 381 0 R 384 0 R 385 0 R 386 0 R 387 0 R 382 0 R 383 0 R ]
+401 0 obj
+[ 376 0 R 385 0 R 388 0 R 389 0 R 390 0 R 391 0 R 386 0 R 387 0 R ]
endobj
-372 0 obj
+376 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 386.12 665.921 392.579 678.212 ]/A << /S /GoTo /D (Hfootnote.6) >> >>
endobj
-381 0 obj
+385 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 510.443 411.645 516.902 425.244 ]/A << /S /GoTo /D (Hfootnote.7) >> >>
endobj
-384 0 obj
+388 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 338.658 276.94 345.117 289.669 ]/A << /S /GoTo /D (Hfootnote.8) >> >>
endobj
-385 0 obj
+389 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 387.236 237.308 393.694 249.818 ]/A << /S /GoTo /D (Hfootnote.9) >> >>
endobj
-386 0 obj
+390 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 244.218 185.283 258.942 197.239 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
endobj
-387 0 obj
+391 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 275.761 185.283 287.716 197.239 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
endobj
-382 0 obj
+386 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 334.199 93.186 340.423 103.996 ]/A << /S /GoTo /D (section.0.7) >> >>
endobj
-383 0 obj
+387 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 353.478 93.186 363.935 103.996 ]/A << /S /GoTo /D (section.0.7) >> >>
endobj
-391 0 obj
-<< /D [ 389 0 R /XYZ 78.37 808.885 null ] >>
+395 0 obj
+<< /D [ 393 0 R /XYZ 78.37 808.885 null ] >>
endobj
33 0 obj
-<< /D [ 389 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 393 0 R /XYZ 79.37 771.024 null ] >>
endobj
37 0 obj
-<< /D [ 389 0 R /XYZ 79.37 711.216 null ] >>
+<< /D [ 393 0 R /XYZ 79.37 711.216 null ] >>
endobj
-393 0 obj
-<< /D [ 389 0 R /XYZ 93.716 125.644 null ] >>
+397 0 obj
+<< /D [ 393 0 R /XYZ 93.716 125.644 null ] >>
endobj
-394 0 obj
-<< /D [ 389 0 R /XYZ 93.716 115.951 null ] >>
+398 0 obj
+<< /D [ 393 0 R /XYZ 93.716 115.951 null ] >>
endobj
-395 0 obj
-<< /D [ 389 0 R /XYZ 93.716 96.859 null ] >>
+399 0 obj
+<< /D [ 393 0 R /XYZ 93.716 96.859 null ] >>
endobj
-396 0 obj
-<< /D [ 389 0 R /XYZ 93.716 87.232 null ] >>
+400 0 obj
+<< /D [ 393 0 R /XYZ 93.716 87.232 null ] >>
endobj
-388 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R /F82 392 0 R /F16 336 0 R /F30 341 0 R /F81 377 0 R /F22 367 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+392 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F82 396 0 R /F16 340 0 R /F30 345 0 R /F81 381 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-412 0 obj
-<< /Filter /FlateDecode /Length 4588 >>
+413 0 obj
+<< /Filter /FlateDecode /Length 4467 >>
stream
-x\Ɏ$W Eh@5-@7s|-]u;̪jtW& ˋ%/]Oׯ~x,X|.J\UBZu_L+T{ID)g?+4!KOjSy~^H%#?.~pK7)G)[
-e^[znoNϠ5<;hg*ШFnU[y5<neZRПQijކ15h\_q [X PVBe89\D.'erl E&j41= zxymq3:A-tN, r&.;kBgKPNݧaE] 9V񯟍Ƹ#>dvl}bt.ϲ'2JDsBVZULz/nd1ɌoyNrc<2mj>;V
-Czl]Qo$,G]Vhf"C:
-kmldr[P `m&7-XwP$4+R] b^=M_#aLg^reCe++H+$S}wy!ݨeJ9UMyȀR  ;]ό=r204KΌ鴶qפbw68ხP3ZUxXG
-A.m_mnpjȡ Z#xCٖqX6\ΙeܺHHs4Q X`?Z c(qx%TsP6P[MXf`0Pm{ȓV#l9lmhϊϧ3az3z3 `f Uf²c:ގxߗqy:|R[&YVCP ֠x6Ye`Ut
-GՒ
-*4< 8)@@ m?h "BT+DZu(<
-IHtZF92%I mV޲jcL?-5jtj\z+ z)o(HL~>CբG H\EutC7콥,K8k"(P 0:ikHFZG[^ Ưg7q͟$YٴoԲqs6=.ecA<0nT z<9΢mC+ܔO\K `!i?xGhar
--ٞ0OȾխW3J#DGYSW[鄷Ipt^)J SE
-ϡY`6
-96cAMC>E3lVaq[({vLU\':o$gZǒS:h}rǭBN3[
-xBW[ Q cpceM Ts&DZ}Eu-}X)#:mlK%gޡY" y$[[lL
-`ϦoH\1PD3,oI*ɹ"qu] s\!:ډ0W`vAQK#@jY>3`z]Rݢm5nlԨ`1FUD4#ƢeS?¤اnݭrIlK ,!}IPVQΉTt7xRKY=8d
-F~~ފ`H|2:.pqE\ȮH}\p-XԢT8dVYOv[~LzJozSMJs[ax$woZZ5&;ht Eͺ\Ͼ zuV@| tUju Sd"l MSQ5`9%Uo]}M.GuXJ..-LԨtpvr^.+TN*O;aNNG)|
-w} ʩ}6
-i4JM6ָR Oz$c,<SvW}2+VkԷ9 =%?-6Lk}RO3>Q1.a ,V
-GV f{$*<cgFNNIs1 K
-2[6sM:3'צKH4)U_y7MMLǐOC(̣>;'(A/)z(-wPm-,}j{*ihlu5z %l'KX.4%se%qcU(\<ζ7v漤c@܋9pKC~tm*]HR)O <H*1Z]O_v{<)v?f&efvit{`S)KByyWJS3sz;otͿRl}L&9^,f4S ;աW.<TQc];RS>VA3">~>)(AD*|10?@=]mvhEI5Wv=Zldw, A yLcX,~a h{Yo:}v
-]A ;7tzha^m-¿yEUX-/_C))ʧ|6
-0OiwxW
+x\˒\ +D
+<Zʵ.5̨K!*?3AW,nhu- O"vQN(Dg, I:Apteݜ& nK;;:p˭z~L3eZԼw(OSݴ,ƮhF r"`UQo@,Aez,26k1MW16[;3-W;Js(|I)DW*q/qALg *TЍW!׮fOur@gω!2u*<d<ya3245]콜u! 8&y
+7j4 hi:l.i= uQ݂&+Bhj?uJ@V>V zVѹǴ:7nFB^Urň9xiޱH~>P`nNOr y 9DׄwyI#f6ת9l~i߭Jw P(\*ڰ$?ڹ%N[}uNgH5P ftbBԉ&Wn]BE"*D#".n 0&ywĉ$/+qF+ {|g<+m%<!CvG6T .;Ef,0ŀN
+B44 !D)Z?kfnYc}Jg 1:Z-kU1Ae/OÀ_cDz|{[TƴTA~<=C9V:zOsD:?GuBg=sW >;F`Gqk&
+P@g2c@ڳ,X~s.t-Ѹѽ[!1y UaN $?M݊rta-4VN>۠AO-8ާ}fK_Y/vc~s"X@"Z`Ι\z:j:j\yøjj{f?mH)eMRF{
+j"3s`Cwព/  I8 [V_O5;il+~; 9MΈnY%uLn>QS6:nÒm,M2R]e`l
+ p1Z~V L)? Ujy <r%7sAM9m˨ɏŨ\yŧe;5:\SK:y0NUx,\`_D;z:wMJ$[)h'& 5ql(‘CD&lkGEQ'ib,JSvw!dTα̩oetzNR S3x*uJ|8[P% xu"8UHu|KЏٍddl0IJ1WW"iºnjzPn/$Bj3p$
+Bu/KE.1j<eN@|׃ .ݾ LB=֝k.I{иtwedM6׆e#:1"634>ǧ!Il}cT@Ow5PX gJ\?$G|0Sjz:(.@,wPYbg9ͬy;c'\<vToqmyVSO#kv9.u \!J;z#Cp\^u/}S~N*~4}4)3#S' TPeH
+j&P0>3:}<^Ko_::sF{z랍k.8dRxibEpb`@+F ΋v㕳>򾪙iw
+fc  BC+NImfx4 ycx|F*'5Ah{/Yx;죴l|(m=p /r<$,+Z-VԲE\g 6{/V3'5M 2ƠJf.~<BEc}dz+}
+HOދPaѬd%ea<IMJ~S/ +%_l2R??ɕX䦭M?TuSvpH:2Oix6TݗVGYjR/bwooz(rup6^9̩GCŕM @u*ԀB7mt[ CN}`Xf04IS3֛l]&ÿj^BMF ˤ!d&cU d5Ѫ2nqTaac1g7S+.ё $7t߹ngұu  C
endstream
endobj
-411 0 obj
-<< /Type /Page /Contents 412 0 R /Resources 410 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 418 0 R >>
+412 0 obj
+<< /Type /Page /Contents 413 0 R /Resources 411 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 418 0 R >>
endobj
418 0 obj
-[ 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R ]
-endobj
-398 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 195.455 465.788 210.18 476.857 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
-endobj
-399 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 248.586 465.788 260.541 476.857 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
-endobj
-400 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 356.342 262.09 378.817 274.045 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
-endobj
-401 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 394.538 262.09 406.493 274.045 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
+[ 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R ]
endobj
402 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 331.385 223.094 341.812 235.265 ]/A << /S /GoTo /D (Hfootnote.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 195.455 435.223 210.18 446.291 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
endobj
403 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 333.577 207.451 348.302 218.4 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 248.586 435.223 260.541 446.291 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
endobj
404 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 364.023 207.451 375.978 218.4 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 356.342 228.558 378.817 240.513 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
endobj
405 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 506.475 186.774 516.902 200.29 ]/A << /S /GoTo /D (Hfootnote.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 394.538 228.558 406.493 240.513 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
endobj
406 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 317.437 164.208 327.864 176.38 ]/A << /S /GoTo /D (Hfootnote.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 331.385 189.265 341.812 201.436 ]/A << /S /GoTo /D (Hfootnote.10) >> >>
endobj
-413 0 obj
-<< /D [ 411 0 R /XYZ 78.37 808.885 null ] >>
+407 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 333.577 173.325 348.302 184.274 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
endobj
-415 0 obj
-<< /D [ 411 0 R /XYZ 93.716 127.979 null ] >>
+408 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 364.023 173.325 375.978 184.274 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+endobj
+409 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 506.475 152.055 516.902 165.571 ]/A << /S /GoTo /D (Hfootnote.11) >> >>
+endobj
+414 0 obj
+<< /D [ 412 0 R /XYZ 78.37 808.885 null ] >>
endobj
416 0 obj
-<< /D [ 411 0 R /XYZ 93.716 108.887 null ] >>
+<< /D [ 412 0 R /XYZ 93.716 120.649 null ] >>
endobj
417 0 obj
-<< /D [ 411 0 R /XYZ 93.716 89.795 null ] >>
+<< /D [ 412 0 R /XYZ 93.716 101.557 null ] >>
endobj
-410 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F83 414 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R /F72 349 0 R /F59 346 0 R >> /ProcSet [ /PDF /Text ] >>
+411 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R /F65 339 0 R /F83 415 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R /F72 353 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-423 0 obj
-<< /Filter /FlateDecode /Length 3283 >>
+426 0 obj
+<< /Filter /FlateDecode /Length 3507 >>
stream
-xڽɎܸ_0M>@kǷK~? iD}#gW&7K%o<1|A71*hiUl}R(@חs' =9o>QbZ_=R5h÷r/%4B8폧⋊r-+܊rFh4<x>S
-@OJ.
-V.E(`2h?/xզ< lYx'2e )ɀ quF%  h' A$]kMl)܃ȧV5a(yq+ :ƦӷE剃B[ mrقyátŜ
-鮷'j~R
-O Y4~~ͫ mn0,!
-DL"CӤAtV#ݭ  h6jAJbN24#\E2DT|@gF=Y~] xB\oPj} cBؔD8)٥)͛9,%݁[ab䑐@@$`Ԭ0B4rv4:-E%1l
-4
-*x)TC)Hl$HI
- RTbRh\xAL!ܡ#mM'R9L
-QSNk$4:L "P5 m͡x +OטWGjWkxAՠa#rx=-1I^izX2 .`AO!P&CB&A"L^н  /2 rc@
-twf:VcԌsN!yA5F ):bWԕsC&_EQEtSHjky"`MU֚6r!\3Ngkn5۵ٚ{v7YStR3;W9N[(-fgD^kbhq>C{
-xT7+N>7##b?"{=g|Ώ&WtϧO'|=sDyXd+ui.Sk'WyӑPb
-?zp>?'Oi?tOZBrr9=L! Qwӧ6?v{z9;b;-vu-rJ 6 KDZ;>=ҽbw=5H&pǛ>ϚOegĵ~={ BfY8W}%̐r2;?uEufrRRNh;ʆq ܂r^mƎ7] I[10Ւ~<JQ&wREj\] "J
-Zhaa-Ud;bAy([0!1LWHfJWZ`ƙx,6=/:\Tw@S,«huBA6t~9WѦ]@S詓)uemKMh/CԁB=AMu#cntЈGS+#SZgMpznĭ1rGffi篪a{7.J/Z =z\E6jƧUroh̸!Up]*C-)ܪ~X0_zzδLhU5OOj\~ "ۖRq7N i{*KM@OA
-m'˖t+}I#h7u$Y\7z{LR|Akceu(]zGT g00:Om#S fAsy9BZkV:u7tf16~fԺ
-ׯnĚ~w "({`tgt|ưfW9]=[N4F2${QJ6#.X-6
+xڽɎܸ_0M>@.{)o9%9$>d.<J@%)>n?=ݾ=}~cr*Pbtc֛VPŶo߷_) sTQw!|l%8"n1ArDz P-:h>Be^(#˯~"-ONHjSjnd-$ \QZ%!Ia(b0bț{oajyS`iT8wzp Ax_@9\VPR ?P+hG3m?:Sb?jlLEq-zA._̑_,a&Y4944sjQ/R"֡z,J$onHK$ m=5S|a(h`EG^$䤁7H`s
+QV<75qMWko䖯8X~,tʼQ&-G<GY)К~$UO@
+$7&[/aD>ԀBk[~/ n0O@̤eʋ9Iɀ*&,'es:X~UE2sJfRЪ>ifWb]S^XaŚ-}6wԝI)njieѦ$%T jzy 1LQco];.RRVX@UMKƗ,ƻ뺨iUW1z&ǗOd(ӯ[ 2DkZUi VcIJwH?(Vg^9k#OR8*Vad@C4uji$Mp[Z'Ŏ }Ҳi*BQu#FFXN|vP]I?KQrI PZ\CVWsMA4i)R3)_t"8"%+\D+^ƅt
+?t.UHs[pAF?JrN]2ښCW֞F1 <
+ #,xA0rx=je E*c, K%B-,h)DhI!! \0-L^Jн  /m D\ ) "ˍ "ʻU ;|Ӹ
+Dj8IF@U A6g$C`ܸҜ9%Dav`ɺQz2#j‚^F#"f._10sQzJwT*WGMZ4ܖ-v{J䙸tv#D^x}GX}U1Rx.r)QpЄ15Hr$&&Tg8ΦYc0W/x׆;bWo-jfP"P,%T+W1.򑑮RRJWpqG_ͩ5Χln,Q|-N9ss&u
+mN1SaW;un;1dPS;:OMkS9%L~+
+@4v}d-gs {y>ZT A q㠒Xvm$c^?ƾm4Ϛn4\:XCwy
+JP01T2U eJc<@I +-!p2/) KwLFSƜxHRP$aum%lЍK؁mCQ1}$|7EF3z$5<cp'Җ76<\-ͭE^>2py"s,CR,j"T4u3{B;jz.
+UXZA7]T2}~E~Ո
endstream
endobj
-422 0 obj
-<< /Type /Page /Contents 423 0 R /Resources 421 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 428 0 R >>
+425 0 obj
+<< /Type /Page /Contents 426 0 R /Resources 424 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 432 0 R >>
endobj
-428 0 obj
-[ 407 0 R 419 0 R 420 0 R 408 0 R 409 0 R ]
+432 0 obj
+[ 410 0 R 419 0 R 422 0 R 423 0 R 420 0 R 421 0 R ]
endobj
-407 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 352.892 745.619 363.319 758.348 ]/A << /S /GoTo /D (Hfootnote.13) >> >>
+410 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 317.437 758.132 327.864 770.303 ]/A << /S /GoTo /D (Hfootnote.12) >> >>
endobj
419 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 303.231 254.112 315.186 266.067 ]/A << /S /GoTo /D (subsection.0.6.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 352.892 713.738 363.319 726.468 ]/A << /S /GoTo /D (Hfootnote.13) >> >>
endobj
-420 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 225.413 165.945 235.839 178.306 ]/A << /S /GoTo /D (Hfootnote.14) >> >>
+422 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 303.231 222.231 315.186 234.187 ]/A << /S /GoTo /D (subsection.0.6.1) >> >>
endobj
-408 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 105.185 96.542 124.577 108.162 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
+423 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 225.413 134.065 235.839 146.425 ]/A << /S /GoTo /D (Hfootnote.14) >> >>
endobj
-409 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 135.281 96.542 145.737 108.162 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
+420 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 105.185 81.435 124.577 93.055 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
endobj
-424 0 obj
-<< /D [ 422 0 R /XYZ 78.37 808.885 null ] >>
+421 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 135.281 81.435 145.737 93.055 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
+endobj
+427 0 obj
+<< /D [ 425 0 R /XYZ 78.37 808.885 null ] >>
endobj
41 0 obj
-<< /D [ 422 0 R /XYZ 79.37 241.153 null ] >>
+<< /D [ 425 0 R /XYZ 79.37 209.273 null ] >>
endobj
45 0 obj
-<< /D [ 422 0 R /XYZ 79.37 220.864 null ] >>
+<< /D [ 425 0 R /XYZ 79.37 188.984 null ] >>
endobj
-426 0 obj
-<< /D [ 422 0 R /XYZ 93.716 109.842 null ] >>
+429 0 obj
+<< /D [ 425 0 R /XYZ 93.716 113.827 null ] >>
endobj
-427 0 obj
-<< /D [ 422 0 R /XYZ 93.716 100.155 null ] >>
+430 0 obj
+<< /D [ 425 0 R /XYZ 93.716 94.735 null ] >>
endobj
-421 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F16 336 0 R /F65 335 0 R /F84 425 0 R /F73 350 0 R /F75 338 0 R /F64 333 0 R /F22 367 0 R /F82 392 0 R /F71 347 0 R /F53 345 0 R >> /ProcSet [ /PDF /Text ] >>
+431 0 obj
+<< /D [ 425 0 R /XYZ 93.716 85.048 null ] >>
endobj
-435 0 obj
-<< /Filter /FlateDecode /Length 3737 >>
+424 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F16 340 0 R /F74 341 0 R /F65 339 0 R /F84 428 0 R /F73 354 0 R /F75 342 0 R /F64 337 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F59 350 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+439 0 obj
+<< /Filter /FlateDecode /Length 3857 >>
stream
-x\ɒ +!ApɈPT1>ĜltKs$
-$ gnen3uOGv+[Tdfj
-'X:,vܘ^O>z4THW%J+|ÿEp
-
-{EbHLeݦ
-3JyM5uh% lECAؓ}ʎBBs1
-disrs`s$<N40/@ܢgor!ʢс>}av|
-܈l>l€)%يO_+s 8Z@{𘄱`XM&I<U
-9^yBjesYi~;‘&^@ԽtϜcڜcPw]
-~8 iJb)Pac^u[?e[_>bsh*\dhTKNJqR;2z yz40'4GYR}.9MtHPRbHdcN4<zͺ8b}d\A]'+)1(\M#ܘӴ˯Iq@[q'SS
-Tl[no^
-OsҀ"S2#n 9=`@
-8:yyBF UӼv?5G*u1i\\LbҬ1Qy{4۠ʌ]Ō4aZ5d-57)s׻
-OkÛ`
-=.b8;R8Vμ׏$JiGA}û) #:"T’EHGS=_/RU.Ň/r_1KzgXK#%*ޡ50<(ѮE>Z9b 59_5h$dרP u l@,t4ٸ0hoĶo R{zYZJU)kIf1ԝwHuEEh;t^]J~gv*a:*s44
-_}\ޗ8cل]+-ؙruq4Ɩ&;q^fs3c-"Nπyg}Y pCI 6;7Diƽ{T|r:VΜ&thYnR}P9.hs0Ӟ7,)ZOXd$em([^bEyk1_;g}#<12$
-@Q3C 9KE)FWW[ߚ6&={ǭ`nmX:]h{ )/u Q +5#0aA@/1[R8Fa޺jZ@Nm|"gO2͵>KX(J}JcM!HTwȉg(-ȁWbLD[3$qځ|
-8^Rl ،WJ./?^ 7N 5}]1۫;Lݰ/kq+t36TMmp~3qAg/*nwpP5F },+u-TENnEhD\:boiryMߔsOQ꬙ޮ
-VxUmI8Ű&b]H'-UM=; 4q"e^ss /0Q_֭ \E4soWއW= D`<LX`&񶰡W@=m%[ԤNoT4"؄|:éW/ !"4
-sTkZ &y԰w?2;*7%*'&Z)GUW7:)o{<?ViϹBY:սF dx],FM`31HgKQtkNA]P]=`g=fN׶w01*4ӵ'O}*^ݛyZ28B[m9)C#)'jYjMNVlS4)T5vV:w-%KWuc1fn}å^ߔJ[ ]Q޴1RB2A[F69I'fP&
-XdC?WT
+xˎP'X@pNNt3|JK~?g%`./~xӠ7q3-ε%JwΕ\GHt/?t#WЅ4 ფ=OAF-"d7ۀKiMdDKW/iBS>77N+ZTc|L\\j\dx1wp=L4~ +Jt{N"a`҉Bb ':  W <uSΡ>Hy;O[a[h8q#fn3})|Mү(^
+tE'<~D9+ly3\~ԁG-`>KYuO2
+7'fG` pM6":pIrJ l K&!<ULHl6 ƪJ_0֎ c4k W-lkb)3e&TBt?ޅe$Scy`JL?d#Qśn-40he`Va3VJS%<#%LkdwO!-SR[GD/9$Hr
+UOڶ9RCه/[;9{5uak.(ym6n"?WS←=,Zy#ޭW*kS)(tQJyQU:y9v{WF#Gg7qGC(vym5*R)K*NW"Tu8Rrt"&/XK1Ņjy1.ˬ@.ZEmeݓHAL;4,{.'c?Khz6LX7!xI~!Emv¡A,NIt Mq6F6 !.p~yA
+7C96Xon U5ŅwgɿCCx 4,94(徭SSFHg)ijos9#9-w,%D_ǰtF9S.:<$fJiL3)n<L$eM$]QvھƓ^9&V3gK|Sn<A ;&>x㠒DK5bQZ(P Hezh-Šܭ/υJ!E<x@ ۣo}ymd\DV-!R{
+$Q`儓k
+)]-C@Э,)y\sEm³5Y8(07!(۰k_irSԈGckvb&Əb
+4YMwl#??~lQ/cؼ/Gd.+HI}i^ZgJ|WW{8|z;[D,^4CaՓ>?՛6_×'/ŔEezJK=JN2|>8@q(Si@Oɮkh|^:`.>sZ6tEyXf$7YdwA
+xJUT @[&)O؀'˗h]b\מ'LE.&>UR֘ten`(U5$)ZH"m ^
+42RLK).#׻шލŲ<!ݦ߼{{41ӵ>1
+.Rviq*bҕyw9|5[ufz
+]}jrU|VƂBnTc {1^[Z%sFB{\glVEC:O|]r[LKޯ\zGN\Pv< (&Jo,)X4V
+y5ƒJSRkfՋó}}M-nTVlk| `5>U`JhZM&f*T% ( I?*/MQV
+v"[i;݅+W=k| RSoMj͌uc$SqcV Zy :2w?Js
+ݭ}zAm)~ 9UpǍ ȍ*g[eG85ń0
+s7WqB\_~8R ~ٿnK$t5!oi Y#ɚ j]FsG)T1svWnW$fAoj
+:H
+5jJ
endstream
endobj
-434 0 obj
-<< /Type /Page /Contents 435 0 R /Resources 433 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 440 0 R >>
-endobj
-440 0 obj
-[ 429 0 R 430 0 R 431 0 R 432 0 R ]
+438 0 obj
+<< /Type /Page /Contents 439 0 R /Resources 437 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 444 0 R >>
endobj
-429 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 338.04 576.254 345.014 588.209 ]/A << /S /GoTo /D (section.0.9) >> >>
+444 0 obj
+[ 433 0 R 434 0 R 435 0 R 436 0 R ]
endobj
-430 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 438.852 576.254 450.807 588.209 ]/A << /S /GoTo /D (section.0.9) >> >>
+433 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 338.04 543.795 345.014 555.75 ]/A << /S /GoTo /D (section.0.9) >> >>
endobj
-431 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 504.396 294.837 514.823 307.566 ]/A << /S /GoTo /D (Hfootnote.15) >> >>
+434 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 438.852 543.795 450.807 555.75 ]/A << /S /GoTo /D (section.0.9) >> >>
endobj
-432 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 323.794 171.3 334.22 184.029 ]/A << /S /GoTo /D (Hfootnote.16) >> >>
+435 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 504.396 266.191 514.823 278.92 ]/A << /S /GoTo /D (Hfootnote.15) >> >>
endobj
436 0 obj
-<< /D [ 434 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 323.794 144.925 334.22 157.654 ]/A << /S /GoTo /D (Hfootnote.16) >> >>
+endobj
+440 0 obj
+<< /D [ 438 0 R /XYZ 78.37 808.885 null ] >>
endobj
49 0 obj
-<< /D [ 434 0 R /XYZ 79.37 449.94 null ] >>
+<< /D [ 438 0 R /XYZ 79.37 419.023 null ] >>
endobj
-438 0 obj
-<< /D [ 434 0 R /XYZ 93.716 115.197 null ] >>
+442 0 obj
+<< /D [ 438 0 R /XYZ 93.716 89.958 null ] >>
endobj
-439 0 obj
-<< /D [ 434 0 R /XYZ 93.716 105.57 null ] >>
+443 0 obj
+<< /D [ 438 0 R /XYZ 93.716 80.331 null ] >>
endobj
-433 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F75 338 0 R /F22 367 0 R /F85 437 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F59 346 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+437 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F82 396 0 R /F81 381 0 R /F65 339 0 R /F75 342 0 R /F22 371 0 R /F85 441 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F59 350 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-446 0 obj
-<< /Filter /FlateDecode /Length 3914 >>
+450 0 obj
+<< /Filter /FlateDecode /Length 3908 >>
stream
xˎ_1? d ,hS ؇DO==m`3|ԛ巋|y}}UKig._}RB^Gҩo( R[AI)ß}
_U_RGGD[h: IR,(Ri^Ɨ [ZHDo 3m
0eŢhIv}!"&ϱ;3m|!+Fd@~l~[<7<XIU4Êcn+:l\$:]:S*) ~dO_Hz#"X]dAhجRhJ^'esx/tEv[ƚn.<˫u͐E9XMGyc:
?ui:;9t̛ti\kQ4f!s ZS6
-r֮:a77j;cLAO%^=I*Ԯ^VcgceKk=6QzV8z&t
--Օ8'N5g$j<6R4F'h5%OPP"Э9QtUi_2=>:6eȪl[hsZx Hr {@1c-d{¹
-.ȣsB\}hL;oF)8,tN<!Q۝W5=/bNɣ`욠suynG۬b䏫 Slհ-Esӱ5Zr}H5>UJR0m~"!X*~m$'}7C*|ҙ0Jrc_uЯ}&1X)TQspa!j -$%7dWH3ϭJv6KY^.v1sW9l3(^o6
-zNӯ8U!H-xVQѾO .}PQP0Uj}
-ve{6U۞;^":3pÆ'YHhD9u%30@J1L)
-<\](dާBM t"c,.hoiW͔
-k8E׹[[pzUTpR-f} `ptx(>)18O2&98 q<$,! !D8uHzsԘ+0aN''ŕF~>KGx9&w@rC vW۩nC)0V$sg:U!bt~tqx`y͛6{˫ͫ}z^Ksޓ^^m?m;=n{lO*Rٓ@;<EjN +T敲nt}rJdaz<je70#'![i\{2wͅ"i[ gqj \^nVz=l&U<{g&k׎ƫAKfNbcM)*h`1^8|]KBK7܌RƢLK=vA,0+7WH%z2nŤ[\(}j枕= CșNt2ś?U,o,v7 @s|(]ũexp8Oz}9Emh5ԚDM%B̽ 52M0q -aa7FCQD΋48c?ףq,G)Kh+9:sO5L;2@(P_c9oC.6zxIǬju
-KK$p}J4]"u6Lc*P;j$bxA nQ~b6q(>V/vǚ=53;v)}p*vra7c#}]t7o26sf>md
+r֮:a77j;cLAO%^=I*Ԯ^VcgceKk=6QzV8z&t
+Oj δ .hlcI~cC Z`hyPg֜(j:̪A }Jh9o.}=H<7kQ. 1t+Ǹgb1
+6S("c Rr pQ3KҹGD5ow_\Stq;Q7&AkEn)^?Li6WrP?VZSkε*}8;eaDB&ӗUt' INnS3a\Mxj_L`ʭ%BԴZH'Knɮ-NU g[5Bj70i:9Щ\b^4r*Ӛ9&Ph;޶m>o[JƮpK[W4-``
+fL˵ X
+O[zRa3}[#T^U;+e]~UIK*sE@FZ]^p-g53lzXZiTsTw{JӐqf^Z h(ڮSq{j;%I$Sbםl%=Bf[Tǵ@`@ROp$}p\wăVhtyOXB (OR^|$yZk\ ɶ5^c'+Շ_yB%ƌUX$h:L˪3e+Uw4qB4e o 7x>hp
+ =ciCqY֪u&̬rv@2,-qlƲ磎 0kZJ
+sJg`f&cXG"9{J3DԻ:ceAĸL^$')Skt㱦;?IEf˞c>"evéK^ ȡ;
+x93dnI@ ,YHQU"Q}ـ-bCCv`Dͼ÷Tj]rvUX(\~Ot0A(ۨ^K'C*et7p55#4 svCR4(ћ]Lȣ4lwY16W&V]D+\ٸ<d Q܎B2Sa'׹h:woN
+\2ꡥQެ GG؜l $sjhIC
+D=bd"O~N-oڽo
+y]@@hhZ_b$LI@5r/<מ]saz .p܀/z-2E^|Iiųy뽫Iڵja򑙓}:X>AS~û'Xm̼).10i~| 7?ROU! $
+F{yM
+N-&6ɩ^~[_b- i\9U&mO{e5*(nJGm)cp#ʵ]ܪ%XC熫H_W3[GLM'p✙vذ_
endstream
endobj
-445 0 obj
-<< /Type /Page /Contents 446 0 R /Resources 444 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 452 0 R >>
+449 0 obj
+<< /Type /Page /Contents 450 0 R /Resources 448 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 456 0 R >>
endobj
-452 0 obj
-[ 441 0 R 442 0 R 443 0 R ]
+456 0 obj
+[ 445 0 R 446 0 R 447 0 R ]
endobj
-441 0 obj
+445 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 141.139 465.557 190.205 479.505 ]/A << /S /GoTo /D (piton:transpose) >> >>
endobj
-442 0 obj
+446 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 140.107 365.019 149.903 376.601 ]/A << /S /GoTo /D (Hfootnote.17) >> >>
endobj
-443 0 obj
+447 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 488.456 246.77 498.883 259.051 ]/A << /S /GoTo /D (Hfootnote.18) >> >>
endobj
-447 0 obj
-<< /D [ 445 0 R /XYZ 78.37 808.885 null ] >>
+451 0 obj
+<< /D [ 449 0 R /XYZ 78.37 808.885 null ] >>
endobj
53 0 obj
-<< /D [ 445 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 449 0 R /XYZ 79.37 771.024 null ] >>
endobj
-448 0 obj
-<< /D [ 445 0 R /XYZ 100.292 565.781 null ] >>
+452 0 obj
+<< /D [ 449 0 R /XYZ 100.292 565.781 null ] >>
endobj
-449 0 obj
-<< /D [ 445 0 R /XYZ 100.292 506.005 null ] >>
+453 0 obj
+<< /D [ 449 0 R /XYZ 100.292 506.005 null ] >>
endobj
57 0 obj
-<< /D [ 445 0 R /XYZ 79.37 352.144 null ] >>
+<< /D [ 449 0 R /XYZ 79.37 352.144 null ] >>
endobj
-450 0 obj
-<< /D [ 445 0 R /XYZ 93.716 99.422 null ] >>
+454 0 obj
+<< /D [ 449 0 R /XYZ 93.716 99.422 null ] >>
endobj
-451 0 obj
-<< /D [ 445 0 R /XYZ 93.716 89.795 null ] >>
+455 0 obj
+<< /D [ 449 0 R /XYZ 93.716 89.795 null ] >>
endobj
-444 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R /F75 338 0 R /F83 414 0 R /F60 331 0 R /F62 332 0 R /F84 425 0 R /F71 347 0 R /F64 333 0 R /F16 336 0 R /F53 345 0 R /F59 346 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+448 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F75 342 0 R /F83 415 0 R /F60 335 0 R /F62 336 0 R /F84 428 0 R /F71 351 0 R /F64 337 0 R /F16 340 0 R /F53 349 0 R /F59 350 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-456 0 obj
-<< /Filter /FlateDecode /Length 3233 >>
+460 0 obj
+<< /Filter /FlateDecode /Length 3236 >>
stream
-xˎ>_Q?0ZzAn ߂=F
-4yIM)6<+4#o
-% >ղ0 J
-,;AXS-؇"9Ħ^>kqEȺ+aƵDr:GJ)`/kVNdI M:5}KRp(IzX5kڥN5!UVͻ/wX^nmoϨA ko{Hn2X@2> ,7T ۗhk}e]ؔR T8&6hB B\6cd? !AiHD%2KDEzHHiRzL⬿owwU~q%?%Zq˱
-"z.3:1ȎY0EX6W[@ 4 4Ȓ, HD%{D L sx-BnE+C5×-|Hti/+G?C@%9ei;t+DX8!Jׯ^"rWrj8;c8Ĵyb#u$">?Eע쌸o u8N
-<4jȍȜP }9Yf @$6ND
->޽kv,,=-jf 97OHa}`EAJ1cWF]7ü ݣYI8l)ZukUzaGN/<*뼾eK;TG^te>juj4<ĤM6#a/8JQ[FQK呪D3zh"J&\
-9>J0%y192{nAg#W
-E*) ZPw]XJZ㫽4Sf^ԑO֚=E~cLc/|rñM^S,Ev8xFko#b5L˅7V#n15:+C4<FCYMs`nx=5 _^֜NĒO8sGDA9=ʩ]f&j3=8"n5FO{-\\!!vR@b!\OiR[Snn3XiGđb
+xˎ_?4Y|E4$C@ R;~"vϬr@W3]$b#OޝEtGҩ/Rz%)]R?=k詎
+0cqC(_
+Eڵ4 pvpi+F. ED|~%¯EQq=-vJ(9f\S* mS#5A&# 4Ϭ7Q녇=ȵ5ן&W:Xw-WpûmY= "e6.33{ղ&ьdM͖5H%pcyR,@B1<ŒWڵl T@I$ꌄE)P-yhԐ'9yNsRoڀI l}{L!+
a
->l-/QJ=,%yoyVYKP-&L>Pcu[0KN%2-C::Y0c2ZJmmtRN(u[1 < Cla̢p7ʈ9GItbgK1l_{َg4Si( C\YwVnCW1h3Wtݎ9K<DS<
-~`Z;Y0XxRl AOM႘$lb@5+=O%}^f_8$Grż̀.ljXՑWNHnti&^NӁR J-F nkdITڠiꙚC쫴UxJvCsB-R3fgK]KYjӺ~`tC`::^ӤǾd=8gXzۻt;[ڕU`&{ V뜡-ܢ(eܗB'vTTBd/R!Rh
-
-˴j_ZPR oXHoӝN"l;~_@
+>l-/QJ=,%yoyVYKP-&L>Pcu[0K&2-C:_0c2ZJmtRN(u[e < Dla̢p7ʌ9GItb7L1^νlqUUϩ4d!,;{a𴡫v^{`?왫on{`%z~ی)ZfkG?0ܓ,kg,TJ)ˠwJpAL|6Wp툧B.S/䈿CnqrJB bf@Zl5Y,xw+SD'M7WYt|~ HN)<5B$c}*m4LM!U:*<%9Ra%W.
+%,5ik?0Y!CmzIic?l3 S,A)]8ΖvFɞ;:s&ufK9(=@P%ĎJ*wEJ3D5=@r`G7u&;Pv)ïw"889(G, bXNܩ%β͟{vx%A juHYW-}ڋl8"Z^6g)٩55NܱHn:0vG5Y͘|SzR8[
+;&a$Lz*'A)6J`i$uF8pvܙQTwGQwg^B12.r$)zAk,:ff4~$ &yD!nȟBicP繴;{fݵs@^r{yuL$x.
+H s+3US=>No' ~bߟ%d~aFm*68 PǠ\\~UH5w>4Fni/|5LNx<F'g T R%]Mz 1!L|W|K&-:Il&j[6˪%^dWa /t|I
+V
+} LkAI-Bv0 `oc!_GOt fcݑ7cC
endstream
endobj
-455 0 obj
-<< /Type /Page /Contents 456 0 R /Resources 454 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R >>
+459 0 obj
+<< /Type /Page /Contents 460 0 R /Resources 458 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R >>
endobj
-457 0 obj
-<< /D [ 455 0 R /XYZ 78.37 808.885 null ] >>
+461 0 obj
+<< /D [ 459 0 R /XYZ 78.37 808.885 null ] >>
endobj
61 0 obj
-<< /D [ 455 0 R /XYZ 79.37 608.758 null ] >>
+<< /D [ 459 0 R /XYZ 79.37 608.758 null ] >>
endobj
-454 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F75 338 0 R /F77 339 0 R /F64 333 0 R /F22 367 0 R /F65 335 0 R /F81 377 0 R /F80 366 0 R /F84 425 0 R >> /ProcSet [ /PDF /Text ] >>
+458 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F75 342 0 R /F77 343 0 R /F64 337 0 R /F22 371 0 R /F65 339 0 R /F81 381 0 R /F80 370 0 R /F84 428 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-461 0 obj
+465 0 obj
<< /Filter /FlateDecode /Length 3584 >>
stream
xɎ,Im`
@@ -1096,34 +1086,34 @@ m's(.1njr(JwY.B+-aoٛ-;+1A{ʀ\h -g
e1%~_[ȡ<d."|KFE,{9!u N'tmld [A*s
endstream
endobj
-460 0 obj
-<< /Type /Page /Contents 461 0 R /Resources 459 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 353 0 R /Annots 464 0 R >>
-endobj
464 0 obj
-[ 453 0 R ]
+<< /Type /Page /Contents 465 0 R /Resources 463 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 357 0 R /Annots 468 0 R >>
endobj
-453 0 obj
+468 0 obj
+[ 457 0 R ]
+endobj
+457 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 496.645 745.828 507.072 758.348 ]/A << /S /GoTo /D (Hfootnote.19) >> >>
endobj
-462 0 obj
-<< /D [ 460 0 R /XYZ 78.37 808.885 null ] >>
+466 0 obj
+<< /D [ 464 0 R /XYZ 78.37 808.885 null ] >>
endobj
65 0 obj
-<< /D [ 460 0 R /XYZ 79.37 235.148 null ] >>
+<< /D [ 464 0 R /XYZ 79.37 235.148 null ] >>
endobj
69 0 obj
-<< /D [ 460 0 R /XYZ 79.37 209.22 null ] >>
+<< /D [ 464 0 R /XYZ 79.37 209.22 null ] >>
endobj
73 0 obj
-<< /D [ 460 0 R /XYZ 79.37 186.6 null ] >>
+<< /D [ 464 0 R /XYZ 79.37 186.6 null ] >>
endobj
-463 0 obj
-<< /D [ 460 0 R /XYZ 93.716 101.443 null ] >>
+467 0 obj
+<< /D [ 464 0 R /XYZ 93.716 101.443 null ] >>
endobj
-459 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F65 335 0 R /F74 337 0 R /F16 336 0 R /F75 338 0 R /F84 425 0 R /F77 339 0 R /F64 333 0 R /F22 367 0 R /F71 347 0 R /F53 345 0 R /F59 346 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+463 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F65 339 0 R /F74 341 0 R /F16 340 0 R /F75 342 0 R /F84 428 0 R /F77 343 0 R /F64 337 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F59 350 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-468 0 obj
+472 0 obj
<< /Filter /FlateDecode /Length 4258 >>
stream
x\9d WthC]55AժRf{3"Ru<uϮv@A r]gހQO/J_qW9~2sy?xUVe+[˧^8a&Ǘ>.fʻՖY'/op $N?/7ZU(Xh!
@@ -1147,153 +1137,142 @@ z
ykCd]ppUq\m]ˋ92V8h↞h.H\;w;ZT VS:{JN-4'&q-YtVouRJ'^#0=,f 58N=yD5y5c)yq{#gk
endstream
endobj
-467 0 obj
-<< /Type /Page /Contents 468 0 R /Resources 466 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R /Annots 473 0 R >>
+471 0 obj
+<< /Type /Page /Contents 472 0 R /Resources 470 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 477 0 R >>
endobj
-473 0 obj
-[ 458 0 R 465 0 R ]
+477 0 obj
+[ 462 0 R 469 0 R ]
endobj
-458 0 obj
+462 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 404.583 756.787 415.01 770.303 ]/A << /S /GoTo /D (Hfootnote.20) >> >>
endobj
-465 0 obj
+469 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 404.84 506.735 415.267 519.245 ]/A << /S /GoTo /D (Hfootnote.21) >> >>
endobj
-469 0 obj
-<< /D [ 467 0 R /XYZ 78.37 808.885 null ] >>
+473 0 obj
+<< /D [ 471 0 R /XYZ 78.37 808.885 null ] >>
endobj
77 0 obj
-<< /D [ 467 0 R /XYZ 79.37 493.776 null ] >>
+<< /D [ 471 0 R /XYZ 79.37 493.776 null ] >>
endobj
-470 0 obj
-<< /D [ 467 0 R /XYZ 93.716 115.635 null ] >>
+474 0 obj
+<< /D [ 471 0 R /XYZ 93.716 115.635 null ] >>
endobj
-471 0 obj
-<< /D [ 467 0 R /XYZ 93.716 106.008 null ] >>
+475 0 obj
+<< /D [ 471 0 R /XYZ 93.716 106.008 null ] >>
endobj
-466 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F16 336 0 R /F65 335 0 R /F30 341 0 R /F22 367 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R /F59 346 0 R /F72 349 0 R >> /ProcSet [ /PDF /Text ] >>
+470 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F16 340 0 R /F65 339 0 R /F30 345 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R /F59 350 0 R /F72 353 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-476 0 obj
+480 0 obj
<< /Filter /FlateDecode /Length 3279 >>
stream
xˎ#>_b K701[9qN>$H⻥X,E_$קׯO?ys":p'u(xtߟ#RE?%<FxwpRzh85qL}qS g l]'<dq-xM8њ]^ ks5 i8?IYӗOWZ?xZ(/c7|P Xv'fAXEr.ԌkH nP4GY-̤Y>K;%2('
-y$K3wp~TUk_:Eɂ}&Eohf$J:Sڱhd19#u'Hiw摱NXTΉG`Ҋ߬xD39p0*(+@7Ue7ѭ_~*K`O?Uتġ>8/ &HzH:UC9.>N92Sj)wI$5eLl?Hy_m|2#y6EG< tą.**U#@ݡL<g(hVȎGh&,ЛDq#!y$(f ?$r0'(DRĀl i7&ko
-6^V z:- kٽ|@[fY)0uw
-Q +]i"W-<KyFWYԡxF2-u([VwNRj:jn @z4Ec[[`y}22&E(Z%Ww)A* PQ
-',X}F
-Z:4k'KܲX qRO ݹfy) 1ss=%V*q]hcН|: 08J8{H{ \ybш_W[ȇ{'2 ϵ-#ٖrQ~սKV
-PVBv>u(erp*Ś3zvR1)S@g= F Zx^$ xj2">Ϯ_!(dʯgVklCD|B"IݱqNA^>i߇2n9 ۳ Gl| ; .gQۭθ2V`=B?:gg%_ι+>!YM`=}̤QD#rjLzM% gssW;cOrLI^>UzLX?eD˖I77l^>/x=))e-I!iqmuF ¼[b-[<-P}ڊ}ewǹo]You^
-+8 {OFs
-A je]`)MՆA*1{1u=9L{uW⠇?88wQ~AX"6<2;q+D3vHB3tDH\RmqFTj
-iEH_/ԕY YaXL
-Q]zR SˣJVA†a9s#]1ܶwh6bK4 e0~~8duČ^5ϟX qBNARTI MwҮӮ6&Bwr]mTg^6#fgj;\zvg2plQS_մ\U)u#Vڃތň݅?#M8w3IGLqw& ItbNѩCtFӫ;h4NX(tPoeJ}MĂnkCv8fZnaySV6veܒ(.-li[`2*v4yr7'輩`49ܦ͜Bq>7MUdJ)o6 /;CQv> i󚻠Q ,y)Oz7:MA.̀/[CBBtnل(U;1]l>RJ.Zr" "k=ְg$pi"ן eP2aS.Ơ
-'AziCxcxŗMhew6Vc)誴ʧ&h}@X.'2@OY[|> syʚ_!lxfz{
-<6Af8 ߺUy9Bv6RW8@iשּׂ^TA.x-a9tiY6Y4GMK"Ϧo
-V8WO|LBz.yٯ^I+; n"{qYtHsgG'AEdVww.CWZz
->jyA.
-!3.
-ٻ22 
-~vk|UNvij֯ݍڻ-`t+wگ3uXL)2"V\WG+NC{na|wtP,G,K_0-aēnLUf!^P
+y$K3wp~TUk_:Eɂ}&Eohf$J:Sڱhd19#u'Hiw摱NXTΉG`Ҋ߬xD39p0*(+@7Ue7ѭ_~*K`O?Uتġ>8/ &HzH:UC9.>N92Sj)wI$5eLl?Hy_m|2#y6EG< tą.**U#@ݡL<g(hVȎrDxMXL`Aw?2;
+YL=. )J!9A![BMe ׼?N0gZ`xv/.Ewv
+
+˖:m-\()bw5{ۆ(m=ʢ1-J>]Sw+iXMQͻJPk~(6i> D#\y#dg#F1<VH1em* nјQʳ"EۄH
+W&!X݅i.='] S]XS ۈcU:}
+Z:4k'KܲX RO ݹvy) 1ss=%V*s]hcп[|ԑ: vg/i#+OP{2'޾|qB)\;ڢrAmGWkG{K}aEFK0?1 '`N<X: N(4S|&ȃCY*<kr~J
+"dA Uٿ$_YMV̾TE
+h9Z8Tr/HkwܟO6|vBleC)&1}hـܝ#s.?`=3(rF] ,(je&b 4pшfSkReEFi=/yxcH*cWR@Ol9zsS?דH\֒$;H2VVgP.̻%؂Uσ) ѧWv'Xpѕ&YKHOӳ!ka4' "`t&^) 񙂼Oߔ]mdFPSϔWw+zS}tuqL-b#籼(I?j׍d)4OG48!e\jʻOvסVTP]iսVCź׶KbSت;T cAFn\Sz-Wuv6 >m m'+#[k(gX؜}
+Ykfct)'m%2|d׏`zGfO+үH H#;Ug&.A8k{yzuR?jGB ũHVյ'PQ8<zd5$l[f37mX+fC/FiݽTNPV 7LVGeX'4+E:z}д+}'J_:icr.tw\ץ&oIz6 l;jv
+nvA9N+G}Gs߭}, #!0:<}2IA TVGjvQfk+XRS\҆ߑwBȃ(\b陗лp)[!.יt&;x.KXO
+ݵOT8 jփO#>
+Zt k ˡK%8:nZ2 ~6~˗Źz,_ijs~:+ |\)Wtq2ߘȂCK=: .* c׳[uMU(nqEU jtQuQζޕ6^X'^͵z3tz7#~W-l٭Ч[k~;bJAAB8Z)uڬs Dhkw+M4dY&>bYz~?%x Jm($
endstream
endobj
-475 0 obj
-<< /Type /Page /Contents 476 0 R /Resources 474 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R >>
+479 0 obj
+<< /Type /Page /Contents 480 0 R /Resources 478 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R >>
endobj
-477 0 obj
-<< /D [ 475 0 R /XYZ 78.37 808.885 null ] >>
+481 0 obj
+<< /D [ 479 0 R /XYZ 78.37 808.885 null ] >>
endobj
81 0 obj
-<< /D [ 475 0 R /XYZ 79.37 543.021 null ] >>
+<< /D [ 479 0 R /XYZ 79.37 543.021 null ] >>
endobj
85 0 obj
-<< /D [ 475 0 R /XYZ 79.37 403.621 null ] >>
+<< /D [ 479 0 R /XYZ 79.37 403.621 null ] >>
endobj
89 0 obj
-<< /D [ 475 0 R /XYZ 79.37 323.559 null ] >>
+<< /D [ 479 0 R /XYZ 79.37 323.559 null ] >>
endobj
-474 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F74 337 0 R /F75 338 0 R /F77 339 0 R /F53 345 0 R /F30 341 0 R /F32 327 0 R /F64 333 0 R /F15 334 0 R /F81 377 0 R /F22 367 0 R /F84 425 0 R >> /ProcSet [ /PDF /Text ] >>
+478 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F74 341 0 R /F75 342 0 R /F77 343 0 R /F53 349 0 R /F30 345 0 R /F32 331 0 R /F64 337 0 R /F15 338 0 R /F81 381 0 R /F22 371 0 R /F84 428 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-481 0 obj
-<< /Filter /FlateDecode /Length 2821 >>
+485 0 obj
+<< /Filter /FlateDecode /Length 2820 >>
stream
-x[K6ϯ?`*
-hӼU]-!1VoE.|*6җKy IhƩ4b7hV/AOhYQfD1=QZ'JF.W
-]Sօk쵘U[Qpjz*&F$^
-դjsQv7( fT%b?Y&A5gڷBöiTT2^"vEe#ZSOad34V1LU{;8Yk#4gBnM P835kFqoO-nHf f_<rt%Oju~H?kU2 V`Vm78cYqn VT5}c
- P殔#9SlMCf1h4#e0=](@u~ckkX!Vu&E`:V@RڦݰqMRPnrOj.ffB+ `NfyZ,}$Ku> ;:eTdTƆH-w'4PZ{F.4@.2ćhlkJc ~OWcBuaw-c"+.>8BUU_Y+>mJOsK6V§0TKiUm"f^#kE)w1^D/P_2mJ-{ԒSxT:+UֆAD>lFW>ZX
-i9!C&iikSdn \Ԫ^3nca(ke6{E;4s҂<}6G7OVBPjn(4:
-
-0Bq0t3O%^Ѓ+^ǵ|my5P-7BnR?~Y.e99jQxK&s BJFX*#ʚ݋òR0E^֮^F=
-/<sr\@lfcmsRWA,[xi%JecWo6LL\Uauϧp/R(D]叧.Q<:+ջVr#C29-c
-t*:eKr83m{r^mNIq4ՆYr{.Tu8ch~#acۆLdPNV/rT13m~i~zs]'_fW[4(UA5/ƅ
-⏹._wZ v36m\6#1ypqP($C?+2j!(gƂ
- <Iؐv &[2F\hi&T*IGv2VK).lhW9o7hӍq.t{ ѯ^ؑͭ&q=hykicN49d!-N`{yL(}.z۹-^JsV>Rǖ9۹vt$oyяFhWFg(㶾@0p#as foC6%?k'֞C.$[nvs Ca1'yCZk7B> ڧqUo^zKZ%vZyqɂ%ZzcHa3{FԽ{CsdQF Q%e+ϑvP o[VƊE٭5IG=v(-Q8
-Baw Q15E܃̏ l Y-
-,G A.sp;<
-UD
-ɀFPM
-Z+^w+$,A\1_S;ÞÓ'AS+%ϵ2\,(j%PDS(Q7J<Dҫw@&=%F(Q7!(QoDOD#G؈|H䵴߁uk>rDs 黠Ds:swQ"&DNh" }%ށ4ΡD쇣DmNDh(Q?xku3uPn?IaPN#{ϵZX? Js(%
-'=v&wޏM/}Z8${nmz0Hޥ
-iwUxH@:Ux,$R+/EC Rm;}
-\Dc D}Gvc9#=MM)z]s3k3C 5(0KrXVՙ0Z%[hY#KPPxjMZl/[;HΜ ]&^\H${7(r 6_#S{vpxՊo ޺Ai̚y.;d{T+GSD,6 2qRLfM<nV<N jeyI7u(
-jn(r<{'k~N1;İIP<{ݏ k;X =$Qx>ᥥ6-oE[b
+x[Ɏ6W4MF7PesFs2s0MR*+ȮL X(yE^~}zӛ/C<)!/b@{F i럗=Kix
+J> p76(-
+v (lWT6H;5T (ƚ;
+73/IkCIUZ^k6B aJ{&aj ¹~[Aa$a}{le-ׅn1CRs0C~U3:BZ8UGsw[s"*UGS=OZubӾ@=(ks%X Dj2wəbJ0B 6UFØ{:Q(Hǀ,X9NtMtKKia¥С\=iAz`6_u8sR;ռwi~aݱݺNk`%WC*EPRv*c\a(^=#Yf KC B[$ܵrnC1^\vJ'ϫ1^1eq}M{ׯY
+8Kr~6%F~KST:JŴ*6_TiԵ"Mh{7(%kYM%G-Q I:G%SRkmOCķ p¢ExH; "IK[+u/rUR+v{ UY\wk.ݡðkn>Y `CuӻnW0)<z
+e+mT
+uz 4+p'r9f6Z.[NI~4U,1=n Baw4?ڑϱnC;'Z*f-0/Oon×KjM_8&Pp~E۸XA1…KNKv.Tsƾ-u;"&O.
+ _V5xe^7V2
+
+{
+a`wBQ15Y i-r-Lt=jƭ~LQ
+,H R.w- Qo tM y_ BKyy'B@¢$5H1l9<yV4EXKu]g#V~9#usOHC x!|GiCqi#u#z?4t>灍(x^K8RGi# ԭ}{۹֒#}[] QI;ѭu'4!8RGiqGf?GutGYő[lxK? sϸ$?S%u :~=r?Rka08Rϑ#S)}߭~$i}ɿwtr x3 9^72uxDIPJx$R+/E<D m}
+\f
+ }U&\j${p8r6_$S[vp
endstream
endobj
-480 0 obj
-<< /Type /Page /Contents 481 0 R /Resources 479 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R >>
+484 0 obj
+<< /Type /Page /Contents 485 0 R /Resources 483 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R >>
endobj
-482 0 obj
-<< /D [ 480 0 R /XYZ 78.37 808.885 null ] >>
+486 0 obj
+<< /D [ 484 0 R /XYZ 78.37 808.885 null ] >>
endobj
-479 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F85 437 0 R /F75 338 0 R /F77 339 0 R >> /ProcSet [ /PDF /Text ] >>
+483 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F81 381 0 R /F65 339 0 R /F85 441 0 R /F75 342 0 R /F77 343 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-487 0 obj
-<< /Filter /FlateDecode /Length 2765 >>
+491 0 obj
+<< /Filter /FlateDecode /Length 2764 >>
stream
-x[I\ϯx@Y܁
-J<BOȱ
-VV82cÅHH:X?&f&6½/KW lK`.,GJ~qC60Қŕ_x85+{VF* <Д9p
-JqYm.MC7fk8זO$$\ |p{c59Ei)dxS]-
- ;-'D_a(dkiI5Kd,^=ܟuK\
-zݜ^\[5=}DQ\0[dfǽd){moq&x}pN0 jgī"tZEINK}Ԧ!e⢇BA1˖7D{UٵaStNZhvCcUF{n\ݶ3ZVAnҺRRw>(Loz?m97K1h{3,k#n4
-Pv\SqN~QgaOu-!j &Iy uiUV>ܛq؇x-zﵱ]ي+` GOJY 7HQ8jH/i5kl&[%q=NѦ $|zd
-ݲWVʊ֕YԤ隄I+ w _#oEI^ rM7;LwmwtP0ן0IQoJ6LY,ZEo)
-Y· .ݗS:|wdw/p+[=̵$D|^xܪs$A ږ̣C.0B6G1m\ ]Vrҁ]r~BK"}g9ӥIւHx<98*/h !AކJ+K%S1/-^?,sW8ٶ#9,xs$"&|-Bqh5-L.SN1rgU.e҈, Xbx SyYP/9k }Is<<;
-4eA}x;<s-9z6qXzV}7K`H{ΖUnpN)_mo-h7@HQ?fi&~o{Q Qޥ KhzY'eup?Ar}v#e8zi{Ы<6bFl)qĺ+G0baer˴D[#zj?Ӧ,?8" v{XsT1Bд {?(t%~˯8H}&_<F8E{OO(fq115v-œ<X]xzDz!-*TT!r}keÈT
-is)ҋ.
+x[˒\ WE类ҨݪrVvfʉH7
+ 6*5c3l/e=!8m?OZ%QƟz"&Wis)~FPNL1^xPsd
+*rٶKCoMUfݙm-#K`ITyiEM4id֚WnO,`pMFEN <BO(H
+Aɯ󞤕Gd'{u Д> 5=%.dۜr=o1זO$\&zgRM]t2.\ґ{]
+L}Zg'~= ؋hԱFo9L%zVJֈ hw|HAr\%%A(kT"<u_+#;i8BZV4]|fB:0DK܊W瑗&ʜ[pԗZ)ʫ2{.+ :5\;Q*-LZdy̝E^N>%a%k_HKMSطS՟uq
+ ;-8M\cb0@"sҚ酄$?W?zϺ%AN
+i:k~-{F=S2+De#ƪlt-XjƐ호aveK  jڰ)6{j%EXv8f 㫎>~#mgL9LJZJ\ֲ p)֭Ք&~CBzӛIn̼\a,]lp8m MmiR_Yˁ|mkKwĤIׯ9{ ӱ Q,&s?zsΑX
+ݲVVʊ,fփtMӴ+KЯWGłQsq:rIkR怩׮x
+`7Pu TWi!.*<v;ӛL&QV.5/!OX>bgp7
+[㱴0i󍼰10y̰W0ʸ cǑu'=p:8`h p&5Am1>U8ö->+ȣk%N0QAN#$.0h:
+Fw酴 p 6 v|sMN#]q<.^Dz=ݑ:f>ki $:h[=P醦Ŵ+xxF{{Hc9JX>&ew)HG) Ƙ)o4*sti݋|V}xLu1
+9W`b=,-<[TBC`MWv)5}Դ;k(ݕO/q=/5GB;sz潗s{D_!TO(ǫ`r)\8552m?ԕ9ͦ"
endstream
endobj
-486 0 obj
-<< /Type /Page /Contents 487 0 R /Resources 485 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R /Annots 490 0 R >>
-endobj
490 0 obj
-[ 478 0 R 483 0 R 484 0 R ]
+<< /Type /Page /Contents 491 0 R /Resources 489 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 494 0 R >>
endobj
-478 0 obj
+494 0 obj
+[ 482 0 R 487 0 R 488 0 R ]
+endobj
+482 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 184.097 678.844 194.524 691.135 ]/A << /S /GoTo /D (Hfootnote.22) >> >>
endobj
-483 0 obj
+487 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 246.892 626.6 261.617 638.555 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
endobj
-484 0 obj
+488 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 274.568 626.6 281.542 638.555 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
endobj
-488 0 obj
-<< /D [ 486 0 R /XYZ 78.37 808.885 null ] >>
+492 0 obj
+<< /D [ 490 0 R /XYZ 78.37 808.885 null ] >>
endobj
93 0 obj
-<< /D [ 486 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 490 0 R /XYZ 79.37 771.024 null ] >>
endobj
-489 0 obj
-<< /D [ 486 0 R /XYZ 93.716 100.579 null ] >>
+493 0 obj
+<< /D [ 490 0 R /XYZ 93.716 100.579 null ] >>
endobj
-485 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F16 336 0 R /F81 377 0 R /F75 338 0 R /F77 339 0 R /F71 347 0 R /F53 345 0 R /F59 346 0 R >> /ProcSet [ /PDF /Text ] >>
+489 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R /F16 340 0 R /F81 381 0 R /F75 342 0 R /F77 343 0 R /F71 351 0 R /F53 349 0 R /F59 350 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-498 0 obj
+502 0 obj
<< /Filter /FlateDecode /Length 3467 >>
stream
x[ˎ% WhYh=k;'3rl2xUzf$3%CJ%oOO&g|O?ܝ,X}I7nҪ/__NJ+4JJ|{4y^<
@@ -1307,43 +1286,43 @@ S)Ri6v>Ka4W9-vcR ;36Uals2Տ!<j5SBc׆AByX(\
YՈ Qg,k;,zy5KyqJ$Z/KW~t]Iu|@;\h_Y_񓵠癒nc}3>3aNqd+\*KJHާ{vS'a?KF*Qۧގ-r蘉G@U]u=iQVŗ.""س6jV(K@XJ(i-?ܟ͞FYJ
endstream
endobj
-497 0 obj
-<< /Type /Page /Contents 498 0 R /Resources 496 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R /Annots 501 0 R >>
-endobj
501 0 obj
-[ 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R ]
+<< /Type /Page /Contents 502 0 R /Resources 500 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 505 0 R >>
endobj
-491 0 obj
+505 0 obj
+[ 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R ]
+endobj
+495 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 353.263 528.233 367.988 539.292 ]/A << /S /GoTo /D (subsection.0.6.5) >> >>
endobj
-492 0 obj
+496 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 380.939 528.233 392.894 539.292 ]/A << /S /GoTo /D (subsection.0.6.5) >> >>
endobj
-493 0 obj
+497 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 430.922 204.087 445.647 215.035 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
endobj
-494 0 obj
+498 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 458.598 204.087 470.553 215.035 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
endobj
-495 0 obj
+499 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 346.259 159.364 356.686 170.43 ]/A << /S /GoTo /D (Hfootnote.23) >> >>
endobj
-499 0 obj
-<< /D [ 497 0 R /XYZ 78.37 808.885 null ] >>
+503 0 obj
+<< /D [ 501 0 R /XYZ 78.37 808.885 null ] >>
endobj
97 0 obj
-<< /D [ 497 0 R /XYZ 79.37 694.453 null ] >>
+<< /D [ 501 0 R /XYZ 79.37 694.453 null ] >>
endobj
101 0 obj
-<< /D [ 497 0 R /XYZ 79.37 515.275 null ] >>
+<< /D [ 501 0 R /XYZ 79.37 515.275 null ] >>
endobj
-500 0 obj
-<< /D [ 497 0 R /XYZ 93.716 139.127 null ] >>
+504 0 obj
+<< /D [ 501 0 R /XYZ 93.716 139.127 null ] >>
endobj
-496 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F75 338 0 R /F74 337 0 R /F64 333 0 R /F15 334 0 R /F65 335 0 R /F22 367 0 R /F83 414 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R /F59 346 0 R >> /ProcSet [ /PDF /Text ] >>
+500 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F75 342 0 R /F74 341 0 R /F64 337 0 R /F15 338 0 R /F65 339 0 R /F22 371 0 R /F83 415 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R /F59 350 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-504 0 obj
+508 0 obj
<< /Filter /FlateDecode /Length 3211 >>
stream
xˎ#>_}6Y,
@@ -1359,25 +1338,25 @@ xˎ#>_}6Y,
M Dxl/絒wͧRWqK0)53>먀e
endstream
endobj
-503 0 obj
-<< /Type /Page /Contents 504 0 R /Resources 502 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R >>
+507 0 obj
+<< /Type /Page /Contents 508 0 R /Resources 506 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R >>
endobj
-505 0 obj
-<< /D [ 503 0 R /XYZ 78.37 808.885 null ] >>
+509 0 obj
+<< /D [ 507 0 R /XYZ 78.37 808.885 null ] >>
endobj
105 0 obj
-<< /D [ 503 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 507 0 R /XYZ 79.37 771.024 null ] >>
endobj
109 0 obj
-<< /D [ 503 0 R /XYZ 79.37 555.106 null ] >>
+<< /D [ 507 0 R /XYZ 79.37 555.106 null ] >>
endobj
113 0 obj
-<< /D [ 503 0 R /XYZ 79.37 186.744 null ] >>
+<< /D [ 507 0 R /XYZ 79.37 186.744 null ] >>
endobj
-502 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F75 338 0 R /F77 339 0 R /F30 341 0 R /F66 343 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+506 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R /F75 342 0 R /F77 343 0 R /F30 345 0 R /F66 347 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-508 0 obj
+512 0 obj
<< /Filter /FlateDecode /Length 3039 >>
stream
xڽɎ+7_hE4 LNy[` DUzmDqI_>^~xs ,XiE\\`][qRqn9 |]1mӻ, çiT<,>Q97HL酋qK<-MՃFBFe/ *L|g1^ s =f29<Fry5IdJ3#dDӈF2}$oq{]_R҈pQ(!C xٹYDqTh-daFx *Td6%4qE m 8+lhbC&%֊5) uŞZC lEryr{+Z^mA{>Oؗ( /uӌdRbNN\3nؼ3e{TvF2o5aWynЋV''fOqkA1/f\ZzǤwz|ʴuRTU*es׭=
@@ -1393,377 +1372,379 @@ qa22\ ڬr랠/ԶK^tw:N`Ҩ*\cdݏ,Bk1"(X
9QD}dZuLqɌTxc_N~sS?, gFzRI9*'"( %F"…qӺmC T93m@0tva/ mzr>[{9^j`i!vJYOerZk$Yrwig~WL{Ǽ=~ +UHT'$/D)+ x Ju?SeuZF1 vxYҦEgUIδ߰}xG0@q"><Vmz<Iy^۷W؅6paA3Y"F8N@bCRu݆.fw;hrK4`}I3J`nW=›%X^:lSnHDqf nq)Z}+Z3Ԅgֻ'_-sG3\Y@7B+>`g ,]6w^GUl
endstream
endobj
-507 0 obj
-<< /Type /Page /Contents 508 0 R /Resources 506 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R >>
+511 0 obj
+<< /Type /Page /Contents 512 0 R /Resources 510 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R >>
endobj
-509 0 obj
-<< /D [ 507 0 R /XYZ 78.37 808.885 null ] >>
+513 0 obj
+<< /D [ 511 0 R /XYZ 78.37 808.885 null ] >>
endobj
117 0 obj
-<< /D [ 507 0 R /XYZ 79.37 456.212 null ] >>
+<< /D [ 511 0 R /XYZ 79.37 456.212 null ] >>
endobj
-506 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F75 338 0 R /F81 377 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+510 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F75 342 0 R /F81 381 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-516 0 obj
-<< /Filter /FlateDecode /Length 4261 >>
+520 0 obj
+<< /Filter /FlateDecode /Length 3987 >>
stream
-x\K[Whi#0M 8r
-a}Ï'cg/ JKɌOcW #9›7sȃ6&qk&jF:7.NTBah𥳐7S'SU,mÄDk }xdO~-Bv+/B}+asX& †H-mQH'ta ?%K aH&+>XA2 }M
-iVlM8*MQ
-0 j~R"k2JFIkDkD=9^0^{}'&dKwW{
-Qм.9,sJ
-;j}Ž
-ktꉇ=Yڗ&\ nQp[R^FT8. &xOWmkP 3{Z(ziIrt.\b7?D)${E_z$^@Mn]K@f=sVB监uR6
-* t%՟h $to m2`MLoAO ,;i Up |RZ
-P φzI
-[|ïMb}='j,=@5tW]y5fɶ%(*O6e3WMYl ,mt K^#5BQc*XBy&&5|BϿ\ $pI߮f;Ab%bͤ^-қmgyFY
-Pc-
-ŋHcä8ƱLXx5k6&wÕGI V1+ p%Â637R-UjUwGn+5qIz${BVd 6Bgڻ
-Z@m0`l)fk!cͽt+y^&V[5If%CLrˈ9K:љ(p,D+i =LH%YUNdIRRn,
-~i{]f"
-
-`<p 0y.v7QxC΍Wh
-$ 2=;Z;u546kwY'_-]3'Ps")z9tWW2oa) .Q5YkEHį[TeŲ#CHO)N"Ӑi1ڏ*Ǔ/#VJyrywaV魵}f' 5ӖH-%C̊Q4iLȮEyϛx= ITT
-^M`vLˍ@+P!֪MoM6~ >vE5톾Th]M 3 ܸt89J4nYeegC<A5[:Sn5Lx40ZX{9Z"}PYZ~bR8nwdq
-_¦JH!-}x1#=?Xf Y$V;ҲbMw1/jo7bUKuAKHべ[e7NrMq>QM!bjT2&|Y1rJL0
-Ujv{+IkŐ-Q{ed?f4ڎ`Bۡ1
-;i!
-zj.i-tnR/-U67XQ\42mxBbҵ
-@ZEkO|AK
+x\K$5P{[Z;7b,HVZ~FmYUӭ5U;L~=qO.V, q˃8qWc¨5qw~?s O?~恓l2']?g
+iZϤ…s g;(CdxBLj\xJ_QTpV|9㧏sL 3vk͹U(Ṷd9AVS L{3#U-IVڵ́NFi4m|Fy&)sjVg mmse{z3a]h"fɮ՛>o޿-N[Jhۆ<PE312kd}um @M_<Ey(5_Q<0oizre u?O}^;zǜΝavZ*
+Oh&.o rCQ50aJvѷkdh3Cށ B2P`욾..]
+% %n^1jVQ,44а⺉SKC |3{ L4JZFs,olUoejAwfA/i¤,hglZњ@}?#al֟y9gDs7!_bkzߙic!νpƭw#W4.g{op0%`3&';`mYBRgܴNӗt}^h} Eh&M|Pȗ?wgǩd:Xә3!Ƚep<;owoۡe}/lK%iXuֶ8
+7cx˚5}%DwNBka'c\R& …L(NR1B$^<"|XƂOI/ |*zDBN'9186ѫ*M1Q 2bc3?iVIE`+yqL4B%0xEFm,G}-=uAcR2h(R$W`@z#-LeaSFW@>=H_l J^r+|G;d#U`3=<<tBM
+Q<$> N;Ӝ
+h*7̹ =&Ǝ# jb۹pP`">QIh6H?i(vP'ժ)XD~)rd+vľ LmkP#:Rc*P4ZB*̝DV!xXdڍÖrG)Eh;T\x߯a`Z#`Ԥ3O[=(gNjp]֎ 5=>OʮGCcKh
+r
+90 <(Nc栀v3I
+tAo]>!]>5т%kctV )dqIّ5)q] (\@O ﶩa ^ɮ?}ÔL<N樽cD6 WM6su%_ dY(~"K`îaPiX,@ȶRvlxI .Z(fZ1ri3Zf˦gnr+ ҺAim! =OAN6mm6oKԚ$Rb­^j
+ =19lg[gq]df0w m| ׊R; cjFQe<7q+繢g=T*C˒U8-o&U
+`E|g$0jFAaXs@3نĤ_݂WM._ }ˑ8/^ A&vhzy?
+\t[VL`O˳naȸvrfh<sCn14L(5U &i`i,'1(5yQt1G-ČQ[ ,jvt
+-^&g,]̨9F1'C,gKUCYNXne8LԨA2I͐.a,?NwTu1 ?5L*ɜ;<5&)7F s檦<?dϋ e> Am 1}q:u GiuI30)ULevCUS.:~p7sA[ZM 0XI@"?)\ Oz gR9ѱZō9{yU4mMurUc?0(eL}Pn|?(ILȯJ;@g 9ߞA:wn>*P;3CkN~{ !Ƈ;i4*A4{L02)ZYF(g.-NOckjٍaFĶMt dY園Q@ cñ$e.%x 5H0\'?O˚tLța$<8ZE`yw\6H%5\>L,C1ŴpKz#eo_687춉s*WեxVy/v<bc:aIhu몭}d
endstream
endobj
-515 0 obj
-<< /Type /Page /Contents 516 0 R /Resources 514 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R /Annots 524 0 R >>
-endobj
-524 0 obj
-[ 510 0 R 511 0 R 512 0 R 513 0 R ]
+519 0 obj
+<< /Type /Page /Contents 520 0 R /Resources 518 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 527 0 R >>
endobj
-510 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 264.586 580.299 275.012 592.889 ]/A << /S /GoTo /D (Hfootnote.24) >> >>
+527 0 obj
+[ 514 0 R 515 0 R 516 0 R ]
endobj
-511 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 318.325 558.936 328.752 571.226 ]/A << /S /GoTo /D (Hfootnote.25) >> >>
+514 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 264.586 579.8 275.012 592.39 ]/A << /S /GoTo /D (Hfootnote.24) >> >>
endobj
-512 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 250.957 312.804 261.384 325.255 ]/A << /S /GoTo /D (Hfootnote.26) >> >>
+515 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 318.325 556.119 328.752 568.41 ]/A << /S /GoTo /D (Hfootnote.25) >> >>
endobj
-513 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 184.327 222.282 194.753 234.656 ]/A << /S /GoTo /D (Hfootnote.27) >> >>
+516 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 250.957 297.982 261.384 310.432 ]/A << /S /GoTo /D (Hfootnote.26) >> >>
endobj
-517 0 obj
-<< /D [ 515 0 R /XYZ 78.37 808.885 null ] >>
+521 0 obj
+<< /D [ 519 0 R /XYZ 78.37 808.885 null ] >>
endobj
121 0 obj
-<< /D [ 515 0 R /XYZ 79.37 647.132 null ] >>
+<< /D [ 519 0 R /XYZ 79.37 646.632 null ] >>
endobj
125 0 obj
-<< /D [ 515 0 R /XYZ 79.37 536.464 null ] >>
+<< /D [ 519 0 R /XYZ 79.37 533.148 null ] >>
endobj
129 0 obj
-<< /D [ 515 0 R /XYZ 79.37 385.61 null ] >>
+<< /D [ 519 0 R /XYZ 79.37 373.105 null ] >>
endobj
-520 0 obj
-<< /D [ 515 0 R /XYZ 93.716 156.601 null ] >>
-endobj
-521 0 obj
-<< /D [ 515 0 R /XYZ 93.716 137.509 null ] >>
+524 0 obj
+<< /D [ 519 0 R /XYZ 93.716 180.908 null ] >>
endobj
-522 0 obj
-<< /D [ 515 0 R /XYZ 93.716 108.953 null ] >>
+525 0 obj
+<< /D [ 519 0 R /XYZ 93.716 161.816 null ] >>
endobj
-523 0 obj
-<< /D [ 515 0 R /XYZ 93.716 89.795 null ] >>
+526 0 obj
+<< /D [ 519 0 R /XYZ 93.716 133.26 null ] >>
endobj
-514 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F73 350 0 R /F75 338 0 R /F74 337 0 R /F30 341 0 R /F27 340 0 R /F32 327 0 R /F66 343 0 R /F68 518 0 R /F55 519 0 R /F67 342 0 R /F64 333 0 R /F81 377 0 R /F15 334 0 R /F16 336 0 R /F65 335 0 R /F22 367 0 R /F71 347 0 R /F53 345 0 R /F59 346 0 R >> /ProcSet [ /PDF /Text ] >>
+518 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F73 354 0 R /F75 342 0 R /F74 341 0 R /F30 345 0 R /F27 344 0 R /F32 331 0 R /F66 347 0 R /F68 522 0 R /F55 523 0 R /F67 346 0 R /F64 337 0 R /F81 381 0 R /F15 338 0 R /F16 340 0 R /F65 339 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F59 350 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-527 0 obj
-<< /Filter /FlateDecode /Length 2593 >>
+530 0 obj
+<< /Filter /FlateDecode /Length 2787 >>
stream
-xڽ[K8hDBJeks= _E,;NMucPĖvKa/H]?s ":?Eҩ.H RZW)MJHMRo?pi]{ǿgV
-%x%Zi5D'r]WoI&|tA"gg^YGz/C
- |d> P_=곶Ns-ؗH2ͽ;Ind巁s ..ZggנrRomdWI֜Ȋ=RɘՑ[<r1keǤl0B{L
-xdŤpbP{kJp4"9_/t?G:'7k6EoMꭖZ.k~;7:FGbz,Ҳ(U{,Qa8 Y5:_,? Da9g+Z*W&ӡ~ܕDi̶Yg;`F/DLWR)acrs(ȧ*5M\8A'aM=6pQwhʦ)uK?ެλL].k kDjڜy9xa]q9s j+gUd|lR
-E)΂V׸ιb@”zBU8J+,$)FKJYVj?91S`Fc>|ĒNK;"zZiM$x>\
-%|5
-G⇲NzʷBN=|ZƤɸdqZA.6W|Դ-+ nER(ę)GJ=v,C}@EL7vtM0)a%9pV>|X)o]Zx`v2^}"ީ 2U*TSr>JT6 \ENI e~gId7ΙkpIGTI*.
-;gctqAtFڍY~Mf2&9!nֺ=9h 'a徾1tִ=p'bV(o2l14V)iV̆4J{SZc:h3AC @acB.rۆY0~yZ/,[' 6r)R/8s(mpP
-N,2%=Orۊܘأ U;5szwz>.&2ׂomCw8Jz}&sNmBmB#'xީ@F"2y㜉ݐ0 _NQ
-3y
-R/
-<əSPVɍۭ/I/ 0i]|<vtJ,G=֨fQi}˖=e,?Ilaq  g:LepMK
- h4GGs
-2 ?恑=tRG[~H.]~}x~,'MMJYgUtFiBށ2 9 24CsX, %CL=Nd Aơ9$ BS >Mr͗U
-2e|eo/!k5,gn}9Åig,V}fF~y5}##uʶe(]=Z܉Nc&+fjY6߷⩢yt
-8qB'Q[VLmL֌I_<l"j7i63+Uº8d8uXt" (OU\~!̀C3i+6g6>46"Cc $&r݈ͥRu5D2ǨqȨU~o^8׍Sb'eZЌXZ+'(JԔwQ\iyzv`s;CQ=DA`1j64uDSjc\n^iK!jU{.ͭQJۙnL8>c w9Ν Ej̧a4డT}=xW
+xڽɲ6?`ZzUe*9eƷTN$e~)ɱsEݍ>˧7e O(z 7 m*!>}~z'R>@߯o=FI/>x%w<ù6&>º,bdp+ 2߽󪆾@C c+8h/Z%rS +`_Gd׺65k^Ŵz qHU
+ӑ @3Th
+ɒ[uLt&f(MlU=odㆤuA'b/тy5ᑬp ]#K19rʾwQ˳=_+כK>8vtAORc f awC-<\]$0/;$7O:g kh^Z߉♣\2_&Ȯ`ݬŒxpE@ӥ(%M`86U}KhEqr=㳺4֙GrxWJ jd*̀9JA[oLN
+|/r@>
+0Ccܛy:ͽMhCiy> V Zc˷LZŽm4;¶VCPD))wiH
+Tt3E"c(T95
+pwQ؀Fһ'ETv_<C OB-tut!ZjGף*k{XdT8rkJzO/Ne`sE}
+O=*53|čŮ8SnE]wnfs A y f($iv_m Hg%#RNB:,R#׫'=14N}ytyJ4x8l }¬CiǫZ Nu*rK;w48`䛞_+t&C@ U|PvRn]ߚ-i듚+;{6k52y褩w4;Э8įpJ2x|K'ik=ueP⤞>ymgJf ⊶]Wq8st.r0t_|s6T?^nsžӮ㳣>% >d *P{a??_w
+wf}&s(b8{>˻tk6K8A e6x@fO@kexD&3ma "8{
+uW*+$JsV{aGڽ^> NMpjڿ{{)=~&ܠqhpjU`i"?=!oU-ۮm;.p s ́J+Ҵ}'hܾ<|rbA
+ bPȯݼi'0G~JBq|iqn^,1{.xCfH%qfגoZ1k_/EH#ìO$XR/-i{(H-d80W:G9q@>>о
endstream
endobj
-526 0 obj
-<< /Type /Page /Contents 527 0 R /Resources 525 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R >>
-endobj
-528 0 obj
-<< /D [ 526 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-133 0 obj
-<< /D [ 526 0 R /XYZ 79.37 559.897 null ] >>
+529 0 obj
+<< /Type /Page /Contents 530 0 R /Resources 528 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 533 0 R >>
endobj
-525 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R /F65 335 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
+533 0 obj
+[ 517 0 R ]
endobj
-538 0 obj
-<< /Filter /FlateDecode /Length 4295 >>
-stream
-x\9d WT Yu# A{Uq0UDx׋|}~{4,\"ȋ vg&|W!B !ˏ*B|_B|AotUwnUD
-pe+=M0'dqH6oT.a4n;? kC+CBcDl-Hj__SzdI餓zg! ͲOĵ{Z(l>k6'3SN-`EYYkP]3-)iֳD8hisAMwa~m'.gTzz*;&Pj[y`/k#?)( ѹ; "S8+8fbbv෠:XGߌ3,i[Bs
-CRx9۩bЉ9q=?& l/>LHޗi\ Ċ߫!~jJhB =/o^ uRy07E //]ȥs{ S7[3ػy)mU\?v Wp^LjJ8G3% !YƂF/zIr9}3΂|
-#c
-x )n-1mѲϣP** 0(ϗ}}k~̛ƤX0}y,ѱ$75G `x
-S1
-&݋ tPDL W<cݴB6CA7cr f4 }SSJ}U.0!Pk"[0Ҩa]=ov016+] )ױ=%(e([V!Q!]|1?')K1R$EЪϮWNa6kQQ#4î&#e|4W?%[vR/wt*%#Nm @XZrO9l-g} ,nim6k9wu=sWA|LjAjA\OjmwT$\+9y29:i5|;7`x~|su̘Robin=9']"yP"q6:%:JRۜ<КZ <1·‸ [nq0P@f*ugV͹>Iάq&ߩ)J5ӈqerbxx*]y;cVڔ2:nIbd.ͺ' KĻC>)Ң) -{Pމm okb!ڑ?COu$zS5
-:`%na՘}>żOc %y?& $oMjVh['
-(gaW+TOZa2Kk
-puqfQݬDB
->5|
-Ѡ⠐;Eb'5}q5M9/`]ޛBWc@`cnA }Uuc紷*@Ny_9R%T 0d8z9ŗPz(}dG Zn58$>:)Tok (BIݽvf2=/øMױtG%c80ۅ>n>Eڥ0t뜺D:2</NWCT_HOFUF+;-ѓ!d;RcuQ9tЩ=X[%B1 !N 8UnȟT8]fXN"U#7g~ԺΦst7>98aTamY_㹦fL+Y$0]1#vη.'|s]3wheYӜO2bSZ&xn`'Fb+v9Sk9N-\%4?.$6)FnJdkMYOf.sz;_ADQ yL]ۈP`RLRYXVXo҈=>l-U4o>xAMYX{[Ξ4Xy,NQW=OPRqJ:oUgFJ41lZLN4<왊骋ueuZ~-r|Klץ}zd7
-<?jxUF_& 5W~L..r|)a`m;زS0[y/Ē]Q)GvzQr"ǔI@r+t}KϹ+RA"`bkasf3^&w$1]MK Ks/
-{K`Q4֛5$ņk͆s`b4u,OPSJ@XU:jZ8vK[f8Gi3GSX[M~K Udimm;Iq素Rrs?uA:r[2 %蝘%ӵa޸hV-/Pf,/e;qJ*}ږé'
-cxijqMnuw֦X[zL☬FN+JH .R{"}&GJd@Џ G:v>2.>']UÁQݏ<;`7' ?il}qaًqpYb' X>mZt#贛ntfՆN)S|N2^|z'U;  '8 moYDӧ` ;ΰ~ͫtnJ %@
-Qnә;+Ait<[f.fV\N5T
-co'
-F b)g87k$
-::ǼCR2tpؽT$6x{.?_i# :arLgUb+\]kD4 &ͩ8k?F#%4OXx^|Vsv^]c,3Vww(65oyds$Ys$pFuc_`j< Vo|ܪfǦym呧7=r=Q
-u ;%?U9opU%eWJ5KqTJkj btP:{ G{'^ 0=Ӳk1+L JEn ݥ|:Y EB˲5/5vGΙf û]nZl^/~?ߴSٸq6:vD'wlX 1] msyFpl۲kc6ʖ?~|Nj u8h7Ʌшmg*(ycIQGeo^ ~9k
-endstream
+517 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 494.44 746.057 504.867 758.432 ]/A << /S /GoTo /D (Hfootnote.27) >> >>
endobj
-537 0 obj
-<< /Type /Page /Contents 538 0 R /Resources 536 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 472 0 R /Annots 540 0 R >>
+531 0 obj
+<< /D [ 529 0 R /XYZ 78.37 808.885 null ] >>
endobj
-540 0 obj
-[ 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R ]
+133 0 obj
+<< /D [ 529 0 R /XYZ 79.37 465.978 null ] >>
endobj
-529 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 133.218 514.573 147.943 525.522 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
+532 0 obj
+<< /D [ 529 0 R /XYZ 93.716 89.795 null ] >>
endobj
-530 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 163.664 514.573 175.619 525.522 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
+528 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F16 340 0 R /F74 341 0 R /F84 428 0 R /F22 371 0 R /F65 339 0 R /F81 381 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-531 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 324.77 186.413 331.744 198.368 ]/A << /S /GoTo /D (subsection.0.4.1) >> >>
+539 0 obj
+<< /Filter /FlateDecode /Length 4149 >>
+stream
+xڽɎ,>_`Y xo ħ>!BZzI`<OTEwR-v_޾Etۯ/"?uQN JAJ4EngV%gp,y}?H-2 _i+gn^?:i~XW|Z-OM
+iMwk5D?+{B?S&|57VϙV/P2iԧѴ:{L<L>!i|j~陼bhnx7Қ
+=v蕆G3҈(Q%ah
+&O3JFXJthB=vwˑFIyD7=Ti}2H3q"hҦ;[T-yrBbxNg
+&(#˙ʎ !EʤyTI$a*[R k 擩5*9~0e>VNόϮn*?vyVvdj3.o3L?`2βhAu&LSuQ]j& ~ւb+ !'
+<wMsS+ZϮ6L#AHۼwQ͟3 k0]X0YYj\Z?"-+SD+M
+Su!^#{%3֟DT =!̀+|3+١D.
+r([k-
+kOfGR$bh=A
+v˹wv0|;l_ T{#B>YؔĸWǠʫwȖjT[W.缟jL J1m ~T&gf‰ \dZB3÷/cQʴ彡sn\[&6J*m)h?Gɂ;mN7ho<<S$cU
+DNYv0nTz*h[cUGCxB\õ [,8"9~O1вЀܪƞ2 L>O[Fh4:M0tY\iVlIc OQaŬGt56~dMA"Y0|,{'4^>l0. ȣ1<dH'tm%wcz<LԧAgKxnn^#:)5Fƣ/};w\Us;ǨSϢ n?PXt"P#>;*f(i<X̗|/MgSm3X lEbM. {K;uJM\*r>$#B%Ntn2>oy*pKi\U<1e6XDtXbXcgb&CL NH6oӷ7.~r*GyT.kfW ~2~= 0a
+@p'`?mI ʠQ
+i:ԡg=)cQ0B9lsc\+:Y1hK4/e|e|0aC'DW0˾PXsKןL
+^"8~FoZwR~1
+o"Vei~+t gu{eȽwcr֓F2ۖ3fpM󠦄fEgB¶"Qav
+]!W*t!9qg<7,*&nlD! yO-%nQWquWY0ޫ4 n]zm'Ӻp=k:*u
+y!5Jt)k/>SnCuδE.rYZ.J 3!n"E9JL]y\@?Pg xZ j=(ټWf&Ckaz4ut2T$IcOJ=yb+}CY<E{2teN]OmvE=NWC4_,W+ѓ1;B,sh%48lcaE?WR=m i'!ΣG~ HtUԈ-/5Ӷs&lj׺&&L&Z0Dv/=\sgS.Hde"Y;2|x/鸨}.L!jf̧AXk^q+zVLGBJ79o6:}.,TfDK vA^Xo# &)n;_5BŞEt75*ծ:8>./ݨN[NģB_✢mconNz9)
+n^UW -8GK^,љ0좹x]k _0T 6o[́K)c>uLI&3}@]XVԵq­rt,ut8_Wný4*Z*h?zP cs{'Ɲ" SmCAoVpZeQ<R"mREFCsV-+ oUR"BsrM=Q86Fo
+q|rӢJa}+}99$om9Üu:_z"jkSRO=ZvJgRD?T} PQ\f]
+endstream
endobj
-532 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 186.766 142.577 209.241 154.532 ]/A << /S /GoTo /D (subsubsection.0.6.4.3) >> >>
+538 0 obj
+<< /Type /Page /Contents 539 0 R /Resources 537 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 476 0 R /Annots 541 0 R >>
endobj
-533 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 487.781 142.577 510.257 154.532 ]/A << /S /GoTo /D (subsubsection.0.6.4.4) >> >>
+541 0 obj
+[ 534 0 R 535 0 R ]
endobj
534 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 354.688 73.058 369.413 84.346 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 133.218 341.869 147.943 352.818 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
endobj
535 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 385.134 73.058 397.089 84.346 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 163.664 341.869 175.619 352.818 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
endobj
-539 0 obj
-<< /D [ 537 0 R /XYZ 78.37 808.885 null ] >>
+540 0 obj
+<< /D [ 538 0 R /XYZ 78.37 808.885 null ] >>
endobj
137 0 obj
-<< /D [ 537 0 R /XYZ 79.37 732.66 null ] >>
+<< /D [ 538 0 R /XYZ 79.37 559.002 null ] >>
endobj
141 0 obj
-<< /D [ 537 0 R /XYZ 79.37 501.614 null ] >>
+<< /D [ 538 0 R /XYZ 79.37 329.047 null ] >>
endobj
145 0 obj
-<< /D [ 537 0 R /XYZ 79.37 352.065 null ] >>
+<< /D [ 538 0 R /XYZ 79.37 168.843 null ] >>
endobj
-536 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F64 333 0 R /F65 335 0 R /F30 341 0 R /F27 340 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+537 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F74 341 0 R /F15 338 0 R /F65 339 0 R /F64 337 0 R /F30 345 0 R /F27 344 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-543 0 obj
-<< /Filter /FlateDecode /Length 3534 >>
+548 0 obj
+<< /Filter /FlateDecode /Length 3636 >>
stream
-x\ˎcW&`4$
-,/_~TEдtE&yD~׍߾}y77L_8&h#R|s\9r=Zzkx?'҂9YЖ-PP@C/wO4?HAݏ1ބy5"1X9Y,4Ӑ)z~2ѷڳ}E]~7M
-_o_),Sg{ng
-\0y,U/p!< "*MNeO*|:JT$7HWCL&Ť]sͬYAL0Qʑu{Û] LY16y| K8rKY5b!s7DJǔLGd§ɄoSm ծ'or;4Ls;J*5h~II=R)6MI,K' sQ3Й&S)ֲ&Xq%m9JI
-Fy|s<KaA
-7R)&'A9My
-J`V*ީy&iL ADEv EnK4wrjr@<C^*;kOA3M8fSCATL88zLv`if GLʊ
-MO eY c/QEV:Т.Sq\mfмY@ OGƧaRB}@\r.1&^h gGQy\ÓPKz7[N@%;;Όq´}><Tki皜\ ڈk>_
- o@,kEمu)$bl>
-E~>]$
->w0 c1P+鰬J& +p,J'R:JjG*2K}'Ot5BbacX,̲8,n+Dqj' $X=/ݼgm>m܊ȫC^.Z T%`NtO߿g$9fLV CԷ뗿v!0sy>lc9ZItRq>5eH/"|dL6% *:ɆVoC7]{dMÐ̚Y4]NH6 j9Ȍ8ayi{ZmprC;HHuأw5%^i~HYM7R[llW"fh w~Wy)F)ӡqS814c##SHN hf#40+OWל>jnR2le})_at)-PMo|\]Af.cuk-]3F srFnN>ʾࢴ+]_#Cq(/51!g;_–[e?.P;p{?#G;A]9w(ҷ6+lY
-Ku}.q!zpBXÜژ\q&WQ4$}'CK*{
-
-cWyOl u
-&ρN0:lT A9jdYV
-o^‹9 HK6!'>q^Ld8DQq;!et4ȴԛpmj
->(pgR#)9ggXÅaRh}2%f۳L 9 Q9yɆ|U&!ڒy1/bf=
-٤H-EP݁"Pe`g?$|lO{10ΰȤ<Jī]ir %!-'QKV^M_'j]CRR@\6𣬈<.-[R
-_?E6ل88"a)O۱-줾Vil+#Bh|ˢ*xbYe9J"0%*&&W|5A+ blч !.LáK A2
-s2JO#pdzJQUTK1pSTƺ ?ʵ@DP}K!A9ClABa
-qR#c1<<C $-hpDI}jΦ< 0SkAƄ=-T,Ii>fN6<FeƙMJ
-@ OlTljJHtOᄸ$ yY- Q9;H!;Β\\ ;X!.rKyl
-`_j#v ,!%6^)\p,ܯL:)OQ诉yq$V+: !(SME6E iϗեJ2wv@5q=DVAEwQţJ{~t%ZhJ ̙eZ:- a
+x\Ɏ$ WڀB 'fdx`S GddUxȮʈEQ"F˯~rϼ.?~yx_ A_qo_4q;~++2}WpGsO X&uuO:K,Oq8HW? O?]Z8zküZsh8%VYdgw\,㯸Vf0o#ך 80iłg),_ăBDl߂ SaQ$vJªݭ-
+Py̮$I?p6<L-( b8'ٕ`JV)@IX*~#!FZQrDhkG$ d8$H+7e;(z',RWk/)gZ=QQǃ)1.ݼO]<I阛Z&dNa'Ai#߫1Hͬ1>٣q-2ل -Sd$ml<ccIG0t cg6ȪLQ+r03R5-QlM7]YeDSdi:sf82Bg,EIzb)JOMWfJ=T.TU w
+x݅a݅<nQc>('⥨ٵU
+%NJ8@%Fgei[;&\.t{AURȜCC7Ij #/y}FPhOqDؓN@2P'$@LZ4Li7]V
+:@reqvX5Q e)BЅ9dJ7
+TRV[ pfhv㓮IG7JMI&Ÿk4
+I(o(iڏqL]Av×#JNwJD5r,s aaZD[=SRUrJ@PdC03,]xB;/&VMDWqI4xVS<xlOT|1_F-APs,`:e"Em픯lpnʙeRf뷵I"zQ(vÉW T ۮB2GV%I $ST
+P@fS=/w%C*=oJ4Z [[ڕbǃ`x- <a[EV׾b+|D|'BBXƥǤS'k"_Hyd]$
+|(%m̲PN:Tw,eҰ"e>7pL&%<qJ<dN"+]%M$,Lڗ(̒Pl `+Dnn'$j=OVA@QoZhjl?[ay~N`y*zkUf l1JV}-!x^~w$/8%\ҡ;}V]B : Ք1HR3Yֲ+ cB-~{i@ƖeROĐ\|(0m1?][\(@1g'txPeZj4w4
+Hs3 8%ݴqK<T;8Nv#*^ii0ضLY-ӆ'VP]qۢz0I|y舚ŦV;1 asQ'*D]Q5J(8}ޫpJq#=T&P:܋4E8BJ cv:dvqTSyI}QS3q6nvw?4: Q4:-|* !"s<3v1wc̯4v&`>F2#Ewcqp=uO)Z?s}tO
+CqsDfVckQ_ŜoK!-?XIڗKj3vIBacj2=]=9lXF"QX?V͹~NVJWS3 >Zs~t1A\GSM 1<%ab0 X?r7Af !FQ,(ޏѩ=+R'5*7
+*iYE?4I S#R!ޅqg0q@sC1Ip0l
+,妁EJr$+ts_9\z'D76poY2͋]ڽeҴpVK]}5&}_]A5$f}}8Sa(2FPfҵ-mDfJBgj/1a:'^C MԀyuJjrB9Ie'"z:Mb_{nc|gytc[]#da{PLC w[<CVρM /o[_ wMq͵һFlޛ{mjw,m[51oZ27)vae2yb=fXZ >{-$(,Ai"AN& /sMTj( #hԇ4a
endstream
endobj
+547 0 obj
+<< /Type /Page /Contents 548 0 R /Resources 546 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 551 0 R >>
+endobj
+551 0 obj
+[ 536 0 R 542 0 R 543 0 R 544 0 R 545 0 R ]
+endobj
+536 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 324.77 713.738 331.744 725.694 ]/A << /S /GoTo /D (subsection.0.4.1) >> >>
+endobj
542 0 obj
-<< /Type /Page /Contents 543 0 R /Resources 541 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 186.766 669.903 209.241 681.858 ]/A << /S /GoTo /D (subsubsection.0.6.4.3) >> >>
+endobj
+543 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 487.781 669.903 510.257 681.858 ]/A << /S /GoTo /D (subsubsection.0.6.4.4) >> >>
endobj
544 0 obj
-<< /D [ 542 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 354.688 600.383 369.413 611.671 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
+endobj
+545 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 385.134 600.383 397.089 611.671 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
+endobj
+549 0 obj
+<< /D [ 547 0 R /XYZ 78.37 808.885 null ] >>
endobj
149 0 obj
-<< /D [ 542 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 547 0 R /XYZ 79.37 586.351 null ] >>
endobj
153 0 obj
-<< /D [ 542 0 R /XYZ 79.37 748.402 null ] >>
+<< /D [ 547 0 R /XYZ 79.37 558.031 null ] >>
endobj
157 0 obj
-<< /D [ 542 0 R /XYZ 79.37 403.167 null ] >>
+<< /D [ 547 0 R /XYZ 79.37 212.796 null ] >>
endobj
-541 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F84 425 0 R /F73 350 0 R /F75 338 0 R >> /ProcSet [ /PDF /Text ] >>
+546 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F64 337 0 R /F65 339 0 R /F84 428 0 R /F73 354 0 R /F75 342 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-552 0 obj
-<< /Filter /FlateDecode /Length 3275 >>
+556 0 obj
+<< /Filter /FlateDecode /Length 3466 >>
stream
-x˒>_,ƳjJU+U)\>9K~? 6@I5"Ft3}?\>^\:9wE8+N3'kF>~y\*5p$~ow?oo8+~4&w=>5 pljoqM~~R#V&  \luIJO/Y|?B9\|Pȴp Gz.]Ak>BsO5ѥlzo\7#</xrvSxW{;Ati$=fiialv.0`37euuMr&I^gBAk#jQ:އߑo ·Z&x]ݲɚ6U:&
-V.M#yz@61(⨀UI f~>c_՘j˴tVx37ŝ>Uq͌&%/4Fmi g ̲?5}\SIM-P=.L
-mދ=@ PD`osy]*
-;=2l
-XZؔ ?kfDC8Ƭ%yful**lOW+ -E䂻-Wf#VJy|ij
-d#pp:zI̼p˾zTBp&]6.qor$T_ZQLeC [^g+ RTx܅H5J[ B! 3̗c"2@Ɓ,:31*H%(Λ@Ւ`":P*
-ևC!D\Ńu
-둓|UΥ0zQZ&J5M! o(H:c+HuÅW#j`%Te
-@cUqLA&`݉&*MUB7d Cvr/#
-j
-r"(|9{:NCKΝJ>.(]co " ^&7<͝DѠ5vR!ceHa˩P"fnS?y՟5*Te FvsX2{o $c[ Oj9
+x\n$+%VdC7'1ndbɞATd06FGq/p/׏7Ǽ1]>~{wL^qWΕFϷ}q"e\՜ .K/Sk7-k•sS Vc?ޛLv2MXށlEgxI{Mb=SbgTъO)o 4^T'g>x7%/$S^]Kx 0E
+L^wHw:$:)G]=L4jL]ZYxҢ*&
+Թ>guv:e*Acڥ?%vv!@C<N&.C[ᤑZ|bh4*VÃ<N2r>OU[ Xe @#^8Z޾B:UTZ#-:@nW. &mI&R55(K%d.d*B1_铎iXҲ! .⊸R$c9mu̓[֑J $k1ov,kŤѕad9\ҌO15$]y$ˆMLfds
+}3ӯ ЕQ䫒X/y\Wނ
+$S)+s\kSGJJI:`Z9o ,b; Ed/UvB Biura}Lu [KC4. أsk=;mI*Sz. gk@'9i(4w{guʎ93ץ'zQ
+zٲa_ײ&ą&  ZUIUwD#</G-KےhvZWVkpsKmuF4[F--jGS?H0,>7?wJ4jh7F[M7߈0l-k+cQ{>^\j,qH̰
+_ЀtX'e..:<H"\BCߗxAN5؞SF$Fq֩beAo
+\[c( #@pe(船u49'1h
+S0UCذSoe^۞ӀS["DP#0Q<
+
+Np<pi-eK@܀8>$&#O͐츉C/d q~:Fq#Gc:i&b}@S0rTL[li{b_ *ALKt:r 0zv|;g=Wy]ŜE)9}zom} *uX!0ƒ=['jrvLY+q Q`a6:7FlY{D s i梆"jLFl)!H<(4.nP%ad)8
+Br=(FJ( V5j`'[o -w+JC.C[ڰfBedDNo
+V5}jGRA\G
+0ڈX)㱅DԧYgUefuB% 5yB Gc@,GؔVZ)vA"* !##uHU>2 Rw8wRubV$k[lLVl1q3J lX0vXPDb+.
+VNOkcg*'P6U.1h:ef$G!-y0fUKuT 2RRoW_ z jc)kU x#m4WP{#*3s$=x?ZJU*AiD.!FƻZx(j|qDaT L"6~,bfA6H|őF:NAqcz7Z`}S3I4Zy%tX/ w^jj=Raǽ zv;n ƈiѣwYW&:jQ2/ˀR/
+BWVt#<V(VwZH|nV{hT_CHTn1+.K{J7N6n0e7)
+%fnWt@x8My]gXd=CU3ujERo"zG寵!.oqvp6e7Ҏa4
endstream
endobj
-551 0 obj
-<< /Type /Page /Contents 552 0 R /Resources 550 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 556 0 R >>
-endobj
-556 0 obj
-[ 546 0 R 547 0 R 548 0 R 549 0 R ]
-endobj
-546 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 111.011 392.512 125.735 403.691 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
-endobj
-547 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 137.449 392.512 149.405 403.691 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
+555 0 obj
+<< /Type /Page /Contents 556 0 R /Resources 554 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 558 0 R >>
endobj
-548 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 219.345 189.952 229.772 203.9 ]/A << /S /GoTo /D (Hfootnote.28) >> >>
+558 0 obj
+[ 552 0 R 553 0 R ]
endobj
-549 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 255.958 166.042 266.385 179.989 ]/A << /S /GoTo /D (Hfootnote.29) >> >>
+552 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 111.011 190.916 125.735 202.094 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
endobj
553 0 obj
-<< /D [ 551 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 137.449 190.916 149.405 202.094 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
+endobj
+557 0 obj
+<< /D [ 555 0 R /XYZ 78.37 808.885 null ] >>
endobj
161 0 obj
-<< /D [ 551 0 R /XYZ 79.37 447.38 null ] >>
+<< /D [ 555 0 R /XYZ 79.37 245.783 null ] >>
endobj
554 0 obj
-<< /D [ 551 0 R /XYZ 93.716 120.649 null ] >>
-endobj
-555 0 obj
-<< /D [ 551 0 R /XYZ 93.716 111.021 null ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F84 428 0 R /F75 342 0 R /F74 341 0 R /F15 338 0 R /F81 381 0 R /F64 337 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-550 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F84 425 0 R /F75 338 0 R /F74 337 0 R /F81 377 0 R /F64 333 0 R /F15 334 0 R /F65 335 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-565 0 obj
-<< /Filter /FlateDecode /Length 3202 >>
+569 0 obj
+<< /Filter /FlateDecode /Length 3307 >>
stream
-xڽ[K?`,
-wFEd-HϴnjBs$N^ZMuy:{ѤbVȑӷ͈j2?pn4\qSO1E5B] f
-)?Lq_1轹gmH} 4ʻWugpdxL 3jMT{͌{FhzO?Pq a=V#kRf??ob~-?|A_SeÕC m%j:>+9R1YJZW_4}BMZ1Zu+q"2~ZN5N,q!k9ѹT[+chؐCQ{OXldB{ Y\'ܑ ~+.>GD naDab VCaNCZq^0cCɳz YgjMt3vttb =se&4-##?1 0[t
-m4
-@pr'0#Z{e$cy{D=3Zkt6oz{yͧ>m޾t)#qyX'CHl8Y7(;'}bO
-޲HꁻQ5pq_ 3=y4g&ԧpN-(9c7aN~龗}jZiP^2A'pQc>-0V:k-)0%~ F=ԩD}F%z ]:wRxfv޽dJAb@~dJ#km`di8U0Y
-ɧ;b'NGǵNc9:̉z 89Z=<Ժ*P[`+1)7 f`HI`͆܉Rԙp8F(!/i Np'Q']9:;#\@~BR
-~7'ETo-eCϱZ"ʧ\hDP%m-F.P]iOnH+V(H-̤*RFSe&XUbkV-X6@sAiG<lfH1Q{A']Z'>LԎ9 cn u@\R="MX˕[TQjx41Bv-&F[yo20 o(XWw*ԩ/Ql1SR}R[ $
-^z>Y|YDeVeR_];8I)eWqL< 1ѩ굮lֶRh9>hj̨/ZQSp)Canhs2m0mm/ӞsKge&ܭ`t̝>F5ŊFjdGe%f'ϓ,AAr#TtǂKVBN }Vzf7
-{5݌2EΐlN1v5QɆ LǶ,r8JT9 /نh
+x\͒# SK_TVT٧${s98{H.yljiZKE O#9$?|z<y:I_Ҫ_^-%z)ί׷_4uQ )Ե sheŧxҘzB }jJ?H̄͟e[su4pNE>CЖd :y%]/<z Pؓz+D -I$K߾}
+mEG#/kmy\<YF !8B:KZEKikv]}ΖYh3I XcS@''s|h(lZ-Fĺ0ziF)
+F"6!BM߉QPA>^KL:=$Po{<K9@}ֻo$5kZ4(XR<s-QR2IU~˻\Gx.Yjr!ynlB-Md]iNRVJ^)Rq$,;.sc`ՓXςmrX-k8RRm( ʹm<_&f Fq!y$[J<DcOx9Բ?Pd&|[FΔb)%h΄x̙)ˁBຍo!z\i.j@ݳ+)7]g˄i_^gIdW˩ԧu8BR&g=bƋVsGȬE|[GEG]\QiD:/0f_NJ'qQyLwriJ9:fz*o})";Q?U:m]gcb25eUR_kkMuA0KhY\R ,+L<^}
+@23)B!iV1E0RTʺ;*:
+S, -ŢFvc]reK y
+:RZV
+,K`Y绠d||Y,t8<wg4k4fLAs
+D1UxS1<HEbHed0n^RcL)<RIqbR8PQ8wQ)N'AuXiħHNg9q-iNFwXD'z7><ڸO\ÇX/utbo0X`:SXEX;Yg:A'{_3a!|$SB@ÙN\mS\'ى,P pBK5#BPk8ۉqۉf;u9dof=viZ?Kn.4 F 9iO 9-zvGc8N|z=Ćĵ8Gr'>#9Nw6ґΦ,'n{8N;!Z8NOh8g8ևrX-F )-}6g`rh8h8u}?lj|48qqz]9N`py 6aJF??E Rr% RZF5}^w ,>EQR)o+Q'kͷcŠefjh o־&1 _EĚqpk usR;p3Jіe Qj; W,Jjsv3UFM_(q9ePEn7PRGJ=M)kj(-a.p-УJdBĚBu6LͩR3/E߅&E',.+)iHf4+@"dx/]R31hz1ԴOz+ŸtԆ3߫%pK}eÃobºQ[b-\[-kK7eHM HM#Hl!>'j`H-A'&#XL~|cc{j4[Y15#t`h ^\2K2/N5*KCQS~C/$$R Ηe_ZH+>rj &ipԓzW</ɔ(@8έ[w6\aLBu
+sd{[j7bމ:rMuϦY~ -qَe=Lm.1$K0ETp<bfu?V50N;/v Cc~MEڲؒ[ܴ'ށk1BPoRXXx>6N9&91Df\(.@_`,ؗC
+WR545eD8o tb/)=IӠO
+ƚǯV_i3&j&$ m{IXIC&wi+cj#41 [qĊ#=[mk)[׭yp,WR FʱrʰGZzF`8.7εA 9/7S7൰s4ߜ30Hniiع$꫟.CJi
+J\(
+XT65FR
endstream
endobj
-564 0 obj
-<< /Type /Page /Contents 565 0 R /Resources 563 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 571 0 R >>
-endobj
-571 0 obj
-[ 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R ]
-endobj
-557 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 219.345 544.571 226.041 558.518 ]/A << /S /GoTo /D (Hfootnote.30) >> >>
+568 0 obj
+<< /Type /Page /Contents 569 0 R /Resources 567 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 577 0 R >>
endobj
-558 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 255.958 520.567 262.242 534.608 ]/A << /S /GoTo /D (Hfootnote.31) >> >>
+577 0 obj
+[ 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R ]
endobj
559 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 322.429 411.45 337.153 422.409 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 219.345 688.732 229.772 702.68 ]/A << /S /GoTo /D (Hfootnote.28) >> >>
endobj
560 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 352.875 411.45 359.848 422.409 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 255.958 664.822 266.385 678.769 ]/A << /S /GoTo /D (Hfootnote.29) >> >>
endobj
561 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 235.007 384.561 245.433 396.842 ]/A << /S /GoTo /D (Hfootnote.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 219.345 387.806 226.041 401.754 ]/A << /S /GoTo /D (Hfootnote.30) >> >>
endobj
562 0 obj
-<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 111.059 67.636 240.514 79.256 ]
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 255.958 363.802 262.242 377.843 ]/A << /S /GoTo /D (Hfootnote.31) >> >>
+endobj
+563 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 322.429 254.685 337.153 265.644 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
+endobj
+564 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 352.875 254.685 359.848 265.644 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
+endobj
+565 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 235.007 227.796 245.433 240.077 ]/A << /S /GoTo /D (Hfootnote.32) >> >>
+endobj
+566 0 obj
+<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 111.059 69.161 240.514 80.781 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://dejavu-fonts.github.io)>>
>>
endobj
-566 0 obj
-<< /D [ 564 0 R /XYZ 78.37 808.885 null ] >>
+570 0 obj
+<< /D [ 568 0 R /XYZ 78.37 808.885 null ] >>
endobj
-568 0 obj
-<< /D [ 564 0 R /XYZ 93.716 490.28 null ] >>
+572 0 obj
+<< /D [ 568 0 R /XYZ 93.716 333.515 null ] >>
endobj
-569 0 obj
-<< /D [ 564 0 R /XYZ 93.716 480.474 null ] >>
+573 0 obj
+<< /D [ 568 0 R /XYZ 93.716 323.709 null ] >>
endobj
165 0 obj
-<< /D [ 564 0 R /XYZ 79.37 442.26 null ] >>
+<< /D [ 568 0 R /XYZ 79.37 285.495 null ] >>
endobj
-570 0 obj
-<< /D [ 564 0 R /XYZ 93.716 80.936 null ] >>
+574 0 obj
+<< /D [ 568 0 R /XYZ 93.716 101.716 null ] >>
endobj
-563 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F84 425 0 R /F75 338 0 R /F93 567 0 R /F53 345 0 R /F64 333 0 R /F81 377 0 R /F16 336 0 R /F65 335 0 R /F71 347 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+575 0 obj
+<< /D [ 568 0 R /XYZ 93.716 92.088 null ] >>
endobj
576 0 obj
-<< /Filter /FlateDecode /Length 2303 >>
+<< /D [ 568 0 R /XYZ 93.716 82.461 null ] >>
+endobj
+567 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F84 428 0 R /F75 342 0 R /F74 341 0 R /F16 340 0 R /F15 338 0 R /F93 571 0 R /F53 349 0 R /F64 337 0 R /F81 381 0 R /F65 339 0 R /F71 351 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+582 0 obj
+<< /Filter /FlateDecode /Length 2786 >>
stream
-xڵn,񮯘܊ 4S ݜ p<O=05/*<v.w\N;{zN yR''N^8(y>?I|
-R'r>p">bz+%Np
-k*L׿ݑmJ:6=uWqGI# 3[LP ZB*tg35J`f"bȦCk0 C24r
-JR+[o(3os5, %`ʢR]Uu.QioFK=XrtCc?f #~Y؆V]$U=)F}8 ]*#nb wNgF8=cl|q
-5:0HXυvz?Dqp-CI? hi*Dey-L@Ipؗd`hk~pQd-qlN5}I*['vʙY}H L,F;ݤ{NNx֍ _#Iv=qy Wߔ_[2)4PV7-/rX+a}`Nb ,Z(=X̲<Stsm-7~$60 AcZW*74}O=4.f3e/d/{X (ԥ 3Y_PY(/hV}܅rbsx+oɡlb h4\fhϿ??m=ۄ XEp7C黢 l74QtA!qU4q3a40 aܟsTQGyǎ:NO,&t1th ?J)sƚ O..ݙGPyU9ϔ:1#ap_߭{҄1_W՘tywB*號۫cwz 5>ţ)~zHG
+xڵn#бlq4F 9%-a0!
+(Jjy{M^\Bn,y=y/ߵAg!Ya` ,̺ jaكGt?dqLvBff;q2*}*K
+k#$&^~,i3tzA Kʑ=eȹPuQwt"3/BM_"y|Requ
+<H@(M|&9_ʫՍؗN/5zsT2rm…%y826x,N*k,lcd68НaW,˔j`_h`nCM";`I`m9=eX9cӀk5
+e*:c ]fZxp,#(|#\!$s)p.QbDL_ɑW,V|W=8UU$iP9l~RJ#٦v14Z.O/#!
+
+fx==m`
+^N^ kn*D<+E4ab
+9f+Sj!WKqV"=Cq(Q&?${$)ka/BuXBŀ"v<FzKb9Ҥ%Ci)G1H%H93a@P-<Ő/#RM6%Ex{Jz oO<d'p/OY܌Ή_uԛ"5[Y&
+
+'d
+e{d{;QTЦV,{M̀1B]a`'khvdınu,I&5#]V˚6 1j$j$=ďɚ6KFa9kмa<i r_C W,:R=l.5ևᦚQoeӾQ/R?1%/?}?{e,_]F =H=
+z?Sha3*.ʊ`ԸX.k7k#B* V$1eh0u<q%&gRjTQfO*L WOj
+EdY ggTf
+27q!
+l\Ry֠,%^vSހŁk&v0ԵΒ7fķm'iʫUMaq~1w zdna=UvkK=H!n ?0
+xLn?VXb;a@s0j%~ܲyeQޱ!)}jH:z+0itgPI A'&Q?TzU3H<pSv^M<VcCw6*<^웋u\1U_m:Dޟ.@
endstream
endobj
-575 0 obj
-<< /Type /Page /Contents 576 0 R /Resources 574 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 581 0 R >>
-endobj
581 0 obj
-[ 572 0 R 573 0 R ]
+<< /Type /Page /Contents 582 0 R /Resources 580 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 587 0 R >>
endobj
-572 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 480.517 320.949 487.491 332.356 ]/A << /S /GoTo /D (section.0.7) >> >>
+587 0 obj
+[ 578 0 R 579 0 R ]
endobj
-573 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 502.177 320.949 514.132 332.356 ]/A << /S /GoTo /D (section.0.7) >> >>
+578 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 480.517 143.614 487.491 155.021 ]/A << /S /GoTo /D (section.0.7) >> >>
endobj
-577 0 obj
-<< /D [ 575 0 R /XYZ 78.37 808.885 null ] >>
+579 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 502.177 143.614 514.132 155.021 ]/A << /S /GoTo /D (section.0.7) >> >>
+endobj
+583 0 obj
+<< /D [ 581 0 R /XYZ 78.37 808.885 null ] >>
endobj
169 0 obj
-<< /D [ 575 0 R /XYZ 79.37 515.126 null ] >>
+<< /D [ 581 0 R /XYZ 79.37 337.791 null ] >>
endobj
-574 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F65 335 0 R /F81 377 0 R /F106 578 0 R /F105 579 0 R /F107 580 0 R /F27 340 0 R /F30 341 0 R /F64 333 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+580 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F74 341 0 R /F15 338 0 R /F65 339 0 R /F81 381 0 R /F106 584 0 R /F105 585 0 R /F107 586 0 R /F27 344 0 R /F30 345 0 R /F64 337 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-586 0 obj
+592 0 obj
<< /Filter /FlateDecode /Length 3557 >>
stream
xɮ$>_?0Di) ć}*x8~DQIQo?wyuIe7qI{3Ϸ\}z{/88?^ZMW
@@ -1785,36 +1766,36 @@ b4蛆_5lR4/n6) O0#wVSY;m6'ehJ+m`_þ.
AZIjh"u7r_ ?5l{=JXǦ(q>Pud}WK}H Jd-Gk4>_mO1\SF`O% CCaOISBSq}L e3wp0d(= kjZЄ`AF-@j#qShuG+oa/}MՕ3='VlUY5|7J>^q/Na]e"ޖAlcv9
endstream
endobj
-585 0 obj
-<< /Type /Page /Contents 586 0 R /Resources 584 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 589 0 R >>
+591 0 obj
+<< /Type /Page /Contents 592 0 R /Resources 590 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 595 0 R >>
endobj
-589 0 obj
-[ 582 0 R 583 0 R ]
+595 0 obj
+[ 588 0 R 589 0 R ]
endobj
-582 0 obj
+588 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 278.812 667.892 289.239 680.183 ]/A << /S /GoTo /D (Hfootnote.33) >> >>
endobj
-583 0 obj
+589 0 obj
<< /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [ 112.169 86.983 232.661 97.581 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://pygments.org/styles/)>>
>>
endobj
-587 0 obj
-<< /D [ 585 0 R /XYZ 78.37 808.885 null ] >>
+593 0 obj
+<< /D [ 591 0 R /XYZ 78.37 808.885 null ] >>
endobj
173 0 obj
-<< /D [ 585 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 591 0 R /XYZ 79.37 771.024 null ] >>
endobj
177 0 obj
-<< /D [ 585 0 R /XYZ 79.37 748.222 null ] >>
+<< /D [ 591 0 R /XYZ 79.37 748.222 null ] >>
endobj
-588 0 obj
-<< /D [ 585 0 R /XYZ 93.716 99.261 null ] >>
+594 0 obj
+<< /D [ 591 0 R /XYZ 93.716 99.261 null ] >>
endobj
-584 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R /F16 336 0 R /F81 377 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R /F59 346 0 R >> /ProcSet [ /PDF /Text ] >>
+590 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F16 340 0 R /F81 381 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R /F59 350 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-592 0 obj
+598 0 obj
<< /Filter /FlateDecode /Length 2900 >>
stream
xڵ\K ?0%؜maw9-[d=;=rᦔ*w{׋_M\*!Q~IJ.RRWH͓^q/o}зw~Un?oW%zP]%9!0HD++7 K8_J7U'm/cׇ+j jBɂI1iu*)WMN+h Ẕ
@@ -1840,19 +1821,19 @@ W!a+p]IL_ZDάB2#mN$>}
xjXd V>9 z؊h7:#,*V}$l8>⩩T _(K'xO~dڗ
endstream
endobj
-591 0 obj
-<< /Type /Page /Contents 592 0 R /Resources 590 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R >>
+597 0 obj
+<< /Type /Page /Contents 598 0 R /Resources 596 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R >>
endobj
-593 0 obj
-<< /D [ 591 0 R /XYZ 78.37 808.885 null ] >>
+599 0 obj
+<< /D [ 597 0 R /XYZ 78.37 808.885 null ] >>
endobj
181 0 obj
-<< /D [ 591 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-590 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 597 0 R /XYZ 79.37 771.024 null ] >>
endobj
596 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+602 0 obj
<< /Filter /FlateDecode /Length 3101 >>
stream
x[K$ ϯ?$R/`1dnO6CC*J*yA[%Goۏ/oB00?^7q3-g r^? 9}OxG~ FN#oI2^>~DY~C
@@ -1867,19 +1848,19 @@ pL{2\SIڟm*h2U
sܯt56c[9!KRkq!7Wuy0M \ 5$tH9*_&ĻD9#ޞ6}iSVKg?Oޡq[dd
endstream
endobj
-595 0 obj
-<< /Type /Page /Contents 596 0 R /Resources 594 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R >>
+601 0 obj
+<< /Type /Page /Contents 602 0 R /Resources 600 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R >>
endobj
-597 0 obj
-<< /D [ 595 0 R /XYZ 78.37 808.885 null ] >>
+603 0 obj
+<< /D [ 601 0 R /XYZ 78.37 808.885 null ] >>
endobj
185 0 obj
-<< /D [ 595 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-594 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F80 366 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 601 0 R /XYZ 79.37 771.024 null ] >>
endobj
600 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F80 370 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+606 0 obj
<< /Filter /FlateDecode /Length 2875 >>
stream
xڵ[$7+
@@ -1894,19 +1875,19 @@ _(Ra_?1J)>R?5' ?[<oR_~V&oXő D)RTߍ(>
Y7[^nkoĢ#Ft={~nAZ[zOe[΂)wNLiEi
endstream
endobj
-599 0 obj
-<< /Type /Page /Contents 600 0 R /Resources 598 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R >>
+605 0 obj
+<< /Type /Page /Contents 606 0 R /Resources 604 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R >>
endobj
-601 0 obj
-<< /D [ 599 0 R /XYZ 78.37 808.885 null ] >>
+607 0 obj
+<< /D [ 605 0 R /XYZ 78.37 808.885 null ] >>
endobj
189 0 obj
-<< /D [ 599 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 605 0 R /XYZ 79.37 771.024 null ] >>
endobj
-598 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+604 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-606 0 obj
+612 0 obj
<< /Filter /FlateDecode /Length 1294 >>
stream
xڵX7+&  G7ٰ{;x6ɾƫu;}x|upmӧФZ+;~RENj^QB5N_>HIRj'%R+| BF]o/,qKJ;!HW:N/?'/s0FW'y` j:? 73+Lb,UXf."9"H19TKk"Mvq 6`t1)r؃ZH·> , ]Hn=.
@@ -1917,28 +1898,28 @@ xڵX7+&  G7ٰ{;x6ɾƫu;}x|upmӧФZ+;~R
+bqFv C</2c
endstream
endobj
-605 0 obj
-<< /Type /Page /Contents 606 0 R /Resources 604 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 608 0 R >>
+611 0 obj
+<< /Type /Page /Contents 612 0 R /Resources 610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 614 0 R >>
endobj
-608 0 obj
-[ 602 0 R 603 0 R ]
+614 0 obj
+[ 608 0 R 609 0 R ]
endobj
-602 0 obj
+608 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 263.782 468.798 278.507 480.753 ]/A << /S /GoTo /D (subsection.0.6.3) >> >>
endobj
-603 0 obj
+609 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 294.754 468.798 306.709 480.753 ]/A << /S /GoTo /D (subsection.0.6.3) >> >>
endobj
-607 0 obj
-<< /D [ 605 0 R /XYZ 78.37 808.885 null ] >>
+613 0 obj
+<< /D [ 611 0 R /XYZ 78.37 808.885 null ] >>
endobj
193 0 obj
-<< /D [ 605 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 611 0 R /XYZ 79.37 771.024 null ] >>
endobj
-604 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+610 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-612 0 obj
+618 0 obj
<< /Filter /FlateDecode /Length 1309 >>
stream
xڵXɎ7+&; 4F|s 9ؗ~{m MV{H:4OnJ +%lj:A[#T6|9S*^)R%F)!?_n _qt9{ 0q6VyDK\?Î _3%Vb!3A83 rOqgMᗴAKҙph?pA0֫Գ  VX237NzE GQԒ?YX 9m-S$$nEB:/M$P (q摊&TѮ TǁGǶoļJy!`N`H!]~Xs~,'% :̯~eF+-7H43"&Wņ9m]]Jz>|]Zk(C-'EZU{S;lb)0B+z~U2¬0"|v|ߧm6p h>=l%?XLؒu4 Kn(gXM3TMCW$GZ)%$IZHk UglqD,Ai/lV[4Dj=P'q64Ѵ&sXc)'{ka;!7kmBxƁvXpS0@@VKdggv`vk?Jy K04?""m;lR;zd)bF߰'ra6:cFcC,t3 *>,<phGrL]MÌ"vnj$JMJ7!fʖۊn(% 2B!&SwBV6S1yc,1H<m>X RPc_Luu^=4wvbSZ-y]aGN ]ֶWa$ t+ե̮Yty͇%`x_ANgdMD%
@@ -1947,25 +1928,25 @@ fNj+xsn;]`X¡YbmD 'ySzyv=Q"4_
ܽu!CɈ3M
endstream
endobj
-611 0 obj
-<< /Type /Page /Contents 612 0 R /Resources 610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 545 0 R /Annots 614 0 R >>
+617 0 obj
+<< /Type /Page /Contents 618 0 R /Resources 616 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 620 0 R >>
endobj
-614 0 obj
-[ 609 0 R ]
+620 0 obj
+[ 615 0 R ]
endobj
-609 0 obj
+615 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 254.015 699.315 260.989 710.274 ]/A << /S /GoTo /D (section.0.5) >> >>
endobj
-613 0 obj
-<< /D [ 611 0 R /XYZ 78.37 808.885 null ] >>
+619 0 obj
+<< /D [ 617 0 R /XYZ 78.37 808.885 null ] >>
endobj
197 0 obj
-<< /D [ 611 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 617 0 R /XYZ 79.37 771.024 null ] >>
endobj
-610 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+616 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-621 0 obj
+627 0 obj
<< /Filter /FlateDecode /Length 3327 >>
stream
xˎ#>_X,
@@ -1982,49 +1963,49 @@ AbټVhs!?quyPBd m"s2 OVE4c`%ƜexFf6j&`pku[
>/7pZ%ynZf\ Y>L婗/={fbM}fϣ"UAp͌Q/69C5 -=. !XN<')U@M\v3ý9&rLɏc0}lB*C//'V(kz9\Y偔vƒMOqG@Mkg4n#7I.WF(vDkj{Tz+m„)[ 01a,}PaôU,jfz*L${Y3:s]UkvlFuJc5)ʶj FyVDZ}~q>)9̫0@S)e]_i/]Oןh8.ttȅNŜҎnI)l3F(w&A^vu=D DІ7Azvk5oPnZv2<wľ<P*ɗ3-rNQ2F6iFdg'U_AZ͌}! J@@5MMPd ^sNkj[[J X(Z!vHomٽSޕ9-T\Yf`lc`Jzu桌m  CrmsRaYt/L^ǜXVhyv+Ճ-`ݼJJ"]mN$(ޞ;'Л2
endstream
endobj
-620 0 obj
-<< /Type /Page /Contents 621 0 R /Resources 619 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R /Annots 628 0 R >>
+626 0 obj
+<< /Type /Page /Contents 627 0 R /Resources 625 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R /Annots 634 0 R >>
endobj
-628 0 obj
-[ 615 0 R 616 0 R 617 0 R 618 0 R ]
+634 0 obj
+[ 621 0 R 622 0 R 623 0 R 624 0 R ]
endobj
-615 0 obj
+621 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 384.187 623.97 394.614 636.42 ]/A << /S /GoTo /D (Hfootnote.34) >> >>
endobj
-616 0 obj
+622 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 219.594 531.297 226.29 542.485 ]/A << /S /GoTo /D (Hfootnote.35) >> >>
endobj
-617 0 obj
+623 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 224.825 519.352 231.109 532.078 ]/A << /S /GoTo /D (Hfootnote.36) >> >>
endobj
-618 0 obj
+624 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 308.511 508.283 314.795 518.575 ]/A << /S /GoTo /D (Hfootnote.37) >> >>
endobj
-622 0 obj
-<< /D [ 620 0 R /XYZ 78.37 808.885 null ] >>
+628 0 obj
+<< /D [ 626 0 R /XYZ 78.37 808.885 null ] >>
endobj
201 0 obj
-<< /D [ 620 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 626 0 R /XYZ 79.37 771.024 null ] >>
endobj
205 0 obj
-<< /D [ 620 0 R /XYZ 79.37 705.06 null ] >>
+<< /D [ 626 0 R /XYZ 79.37 705.06 null ] >>
endobj
-623 0 obj
-<< /D [ 620 0 R /XYZ 93.716 227.357 null ] >>
+629 0 obj
+<< /D [ 626 0 R /XYZ 93.716 227.357 null ] >>
endobj
-624 0 obj
-<< /D [ 620 0 R /XYZ 93.716 189.157 null ] >>
+630 0 obj
+<< /D [ 626 0 R /XYZ 93.716 189.157 null ] >>
endobj
-625 0 obj
-<< /D [ 620 0 R /XYZ 93.716 151.299 null ] >>
+631 0 obj
+<< /D [ 626 0 R /XYZ 93.716 151.299 null ] >>
endobj
-626 0 obj
-<< /D [ 620 0 R /XYZ 93.716 108.297 null ] >>
+632 0 obj
+<< /D [ 626 0 R /XYZ 93.716 108.297 null ] >>
endobj
-619 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R /F81 377 0 R /F83 414 0 R /F16 336 0 R /F75 338 0 R /F93 567 0 R /F53 345 0 R /F73 350 0 R /F59 346 0 R /F85 437 0 R /F71 347 0 R >> /ProcSet [ /PDF /Text ] >>
+625 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F81 381 0 R /F83 415 0 R /F16 340 0 R /F75 342 0 R /F93 571 0 R /F53 349 0 R /F73 354 0 R /F59 350 0 R /F85 441 0 R /F71 351 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-631 0 obj
+637 0 obj
<< /Filter /FlateDecode /Length 3060 >>
stream
xn$1WLx,,aFs3J;Gvp7V fMͪb_y_ׇ7/yF]^_z&?.>rn'/
@@ -2042,130 +2023,130 @@ b\\s˩M+=Z.n4^#;fz"B6 ӧM'0et&7O>sQ@%b``U &z@@
\ Q:`VL.NȠRrEr(#cpqzeqmnxrJ0UWurԽQ˻q6m6:̃ 5 -g Q&I>z)xUYZF=pVH'??JTD4H4
endstream
endobj
-630 0 obj
-<< /Type /Page /Contents 631 0 R /Resources 629 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+636 0 obj
+<< /Type /Page /Contents 637 0 R /Resources 635 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
-632 0 obj
-<< /D [ 630 0 R /XYZ 78.37 808.885 null ] >>
+638 0 obj
+<< /D [ 636 0 R /XYZ 78.37 808.885 null ] >>
endobj
209 0 obj
-<< /D [ 630 0 R /XYZ 79.37 639.908 null ] >>
+<< /D [ 636 0 R /XYZ 79.37 639.908 null ] >>
endobj
213 0 obj
-<< /D [ 630 0 R /XYZ 79.37 621.783 null ] >>
-endobj
-634 0 obj
-<< /D [ 630 0 R /XYZ 77.176 602.516 null ] >>
-endobj
-637 0 obj
-<< /D [ 630 0 R /XYZ 77.176 591.557 null ] >>
-endobj
-638 0 obj
-<< /D [ 630 0 R /XYZ 77.176 580.598 null ] >>
-endobj
-639 0 obj
-<< /D [ 630 0 R /XYZ 77.176 569.639 null ] >>
+<< /D [ 636 0 R /XYZ 79.37 621.783 null ] >>
endobj
640 0 obj
-<< /D [ 630 0 R /XYZ 77.176 558.68 null ] >>
-endobj
-641 0 obj
-<< /D [ 630 0 R /XYZ 77.176 547.721 null ] >>
-endobj
-642 0 obj
-<< /D [ 630 0 R /XYZ 77.176 536.762 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 602.516 null ] >>
endobj
643 0 obj
-<< /D [ 630 0 R /XYZ 77.176 525.803 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 591.557 null ] >>
endobj
644 0 obj
-<< /D [ 630 0 R /XYZ 77.176 497.908 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 580.598 null ] >>
endobj
645 0 obj
-<< /D [ 630 0 R /XYZ 78.499 486.949 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 569.639 null ] >>
endobj
646 0 obj
-<< /D [ 630 0 R /XYZ 78.499 475.99 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 558.68 null ] >>
endobj
647 0 obj
-<< /D [ 630 0 R /XYZ 78.499 465.031 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 547.721 null ] >>
endobj
648 0 obj
-<< /D [ 630 0 R /XYZ 78.499 454.072 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 536.762 null ] >>
endobj
649 0 obj
-<< /D [ 630 0 R /XYZ 78.499 443.113 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 525.803 null ] >>
endobj
650 0 obj
-<< /D [ 630 0 R /XYZ 78.499 432.154 null ] >>
+<< /D [ 636 0 R /XYZ 77.176 497.908 null ] >>
endobj
651 0 obj
-<< /D [ 630 0 R /XYZ 78.499 421.195 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 486.949 null ] >>
endobj
652 0 obj
-<< /D [ 630 0 R /XYZ 78.499 410.237 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 475.99 null ] >>
endobj
653 0 obj
-<< /D [ 630 0 R /XYZ 78.499 399.278 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 465.031 null ] >>
endobj
654 0 obj
-<< /D [ 630 0 R /XYZ 78.499 388.319 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 454.072 null ] >>
endobj
655 0 obj
-<< /D [ 630 0 R /XYZ 78.499 377.36 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 443.113 null ] >>
endobj
656 0 obj
-<< /D [ 630 0 R /XYZ 78.499 366.401 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 432.154 null ] >>
endobj
657 0 obj
-<< /D [ 630 0 R /XYZ 78.499 355.442 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 421.195 null ] >>
endobj
658 0 obj
-<< /D [ 630 0 R /XYZ 78.499 291.681 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 410.237 null ] >>
endobj
659 0 obj
-<< /D [ 630 0 R /XYZ 78.499 280.722 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 399.278 null ] >>
endobj
660 0 obj
-<< /D [ 630 0 R /XYZ 78.499 269.763 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 388.319 null ] >>
endobj
661 0 obj
-<< /D [ 630 0 R /XYZ 78.499 258.804 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 377.36 null ] >>
endobj
662 0 obj
-<< /D [ 630 0 R /XYZ 78.499 247.846 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 366.401 null ] >>
endobj
663 0 obj
-<< /D [ 630 0 R /XYZ 78.499 236.887 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 355.442 null ] >>
endobj
664 0 obj
-<< /D [ 630 0 R /XYZ 78.499 187.073 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 291.681 null ] >>
endobj
665 0 obj
-<< /D [ 630 0 R /XYZ 78.499 176.115 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 280.722 null ] >>
endobj
666 0 obj
-<< /D [ 630 0 R /XYZ 78.499 138.257 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 269.763 null ] >>
endobj
667 0 obj
-<< /D [ 630 0 R /XYZ 78.499 127.298 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 258.804 null ] >>
endobj
668 0 obj
-<< /D [ 630 0 R /XYZ 78.499 116.339 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 247.846 null ] >>
endobj
669 0 obj
-<< /D [ 630 0 R /XYZ 78.499 105.38 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 236.887 null ] >>
endobj
670 0 obj
-<< /D [ 630 0 R /XYZ 78.499 94.421 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 187.073 null ] >>
endobj
671 0 obj
-<< /D [ 630 0 R /XYZ 78.499 83.462 null ] >>
+<< /D [ 636 0 R /XYZ 78.499 176.115 null ] >>
endobj
-629 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F109 633 0 R /F64 333 0 R /F22 367 0 R /F59 346 0 R /F88 635 0 R /F111 636 0 R /F84 425 0 R >> /ProcSet [ /PDF /Text ] >>
+672 0 obj
+<< /D [ 636 0 R /XYZ 78.499 138.257 null ] >>
+endobj
+673 0 obj
+<< /D [ 636 0 R /XYZ 78.499 127.298 null ] >>
endobj
674 0 obj
+<< /D [ 636 0 R /XYZ 78.499 116.339 null ] >>
+endobj
+675 0 obj
+<< /D [ 636 0 R /XYZ 78.499 105.38 null ] >>
+endobj
+676 0 obj
+<< /D [ 636 0 R /XYZ 78.499 94.421 null ] >>
+endobj
+677 0 obj
+<< /D [ 636 0 R /XYZ 78.499 83.462 null ] >>
+endobj
+635 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F109 639 0 R /F64 337 0 R /F22 371 0 R /F59 350 0 R /F88 641 0 R /F111 642 0 R /F84 428 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+680 0 obj
<< /Filter /FlateDecode /Length 2245 >>
stream
x[ɒ6 WCV6U9-kr_ Hɶqrp,
@@ -2181,157 +2162,157 @@ TcG#: ;V<}2k ڶO6`xgN+dks*YT͇m⪞pxcj>݂X1
'vlôy^FH-\zx0좇3V@w|R:}eaܻo|Lgdmvf~}YΜM'yJx΍ZTȓeϕpY8Ŗ_0gɾBj^/]h_һ7@Xc騚ͻetϷ
endstream
endobj
-673 0 obj
-<< /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
-endobj
-675 0 obj
-<< /D [ 673 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-676 0 obj
-<< /D [ 673 0 R /XYZ 78.499 768.829 null ] >>
-endobj
-677 0 obj
-<< /D [ 673 0 R /XYZ 78.499 757.87 null ] >>
-endobj
-678 0 obj
-<< /D [ 673 0 R /XYZ 78.499 746.912 null ] >>
-endobj
679 0 obj
-<< /D [ 673 0 R /XYZ 78.499 735.953 null ] >>
-endobj
-680 0 obj
-<< /D [ 673 0 R /XYZ 78.499 724.994 null ] >>
+<< /Type /Page /Contents 680 0 R /Resources 678 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
681 0 obj
-<< /D [ 673 0 R /XYZ 78.499 714.035 null ] >>
+<< /D [ 679 0 R /XYZ 78.37 808.885 null ] >>
endobj
682 0 obj
-<< /D [ 673 0 R /XYZ 78.499 703.076 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 768.829 null ] >>
endobj
683 0 obj
-<< /D [ 673 0 R /XYZ 78.499 692.117 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 757.87 null ] >>
endobj
684 0 obj
-<< /D [ 673 0 R /XYZ 78.499 681.158 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 746.912 null ] >>
endobj
685 0 obj
-<< /D [ 673 0 R /XYZ 78.499 653.292 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 735.953 null ] >>
endobj
686 0 obj
-<< /D [ 673 0 R /XYZ 78.499 642.333 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 724.994 null ] >>
endobj
687 0 obj
-<< /D [ 673 0 R /XYZ 78.499 614.467 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 714.035 null ] >>
endobj
688 0 obj
-<< /D [ 673 0 R /XYZ 78.499 603.508 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 703.076 null ] >>
endobj
689 0 obj
-<< /D [ 673 0 R /XYZ 78.499 592.55 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 692.117 null ] >>
endobj
690 0 obj
-<< /D [ 673 0 R /XYZ 78.499 581.591 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 681.158 null ] >>
endobj
691 0 obj
-<< /D [ 673 0 R /XYZ 78.499 570.632 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 653.292 null ] >>
endobj
692 0 obj
-<< /D [ 673 0 R /XYZ 78.499 559.673 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 642.333 null ] >>
endobj
693 0 obj
-<< /D [ 673 0 R /XYZ 78.499 548.714 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 614.467 null ] >>
endobj
694 0 obj
-<< /D [ 673 0 R /XYZ 78.499 537.755 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 603.508 null ] >>
endobj
695 0 obj
-<< /D [ 673 0 R /XYZ 78.499 526.796 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 592.55 null ] >>
endobj
696 0 obj
-<< /D [ 673 0 R /XYZ 78.499 515.837 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 581.591 null ] >>
endobj
697 0 obj
-<< /D [ 673 0 R /XYZ 78.499 504.878 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 570.632 null ] >>
endobj
698 0 obj
-<< /D [ 673 0 R /XYZ 78.499 477.012 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 559.673 null ] >>
endobj
699 0 obj
-<< /D [ 673 0 R /XYZ 78.499 466.054 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 548.714 null ] >>
endobj
700 0 obj
-<< /D [ 673 0 R /XYZ 78.499 426.232 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 537.755 null ] >>
endobj
701 0 obj
-<< /D [ 673 0 R /XYZ 78.499 382.412 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 526.796 null ] >>
endobj
702 0 obj
-<< /D [ 673 0 R /XYZ 78.499 350.546 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 515.837 null ] >>
endobj
703 0 obj
-<< /D [ 673 0 R /XYZ 78.499 330.635 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 504.878 null ] >>
endobj
704 0 obj
-<< /D [ 673 0 R /XYZ 78.499 319.676 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 477.012 null ] >>
endobj
705 0 obj
-<< /D [ 673 0 R /XYZ 78.499 279.855 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 466.054 null ] >>
endobj
706 0 obj
-<< /D [ 673 0 R /XYZ 78.499 268.896 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 426.232 null ] >>
endobj
707 0 obj
-<< /D [ 673 0 R /XYZ 78.499 257.938 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 382.412 null ] >>
endobj
708 0 obj
-<< /D [ 673 0 R /XYZ 78.499 246.979 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 350.546 null ] >>
endobj
709 0 obj
-<< /D [ 673 0 R /XYZ 78.499 236.02 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 330.635 null ] >>
endobj
710 0 obj
-<< /D [ 673 0 R /XYZ 78.499 225.061 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 319.676 null ] >>
endobj
711 0 obj
-<< /D [ 673 0 R /XYZ 78.499 214.102 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 279.855 null ] >>
endobj
712 0 obj
-<< /D [ 673 0 R /XYZ 78.499 203.143 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 268.896 null ] >>
endobj
713 0 obj
-<< /D [ 673 0 R /XYZ 78.499 192.184 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 257.938 null ] >>
endobj
714 0 obj
-<< /D [ 673 0 R /XYZ 78.499 181.225 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 246.979 null ] >>
endobj
715 0 obj
-<< /D [ 673 0 R /XYZ 78.499 170.266 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 236.02 null ] >>
endobj
716 0 obj
-<< /D [ 673 0 R /XYZ 78.499 159.307 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 225.061 null ] >>
endobj
717 0 obj
-<< /D [ 673 0 R /XYZ 78.499 148.348 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 214.102 null ] >>
endobj
718 0 obj
-<< /D [ 673 0 R /XYZ 78.499 122.47 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 203.143 null ] >>
endobj
719 0 obj
-<< /D [ 673 0 R /XYZ 78.499 111.511 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 192.184 null ] >>
endobj
720 0 obj
-<< /D [ 673 0 R /XYZ 78.499 100.552 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 181.225 null ] >>
endobj
721 0 obj
-<< /D [ 673 0 R /XYZ 78.499 89.593 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 170.266 null ] >>
endobj
722 0 obj
-<< /D [ 673 0 R /XYZ 78.499 78.635 null ] >>
+<< /D [ 679 0 R /XYZ 78.499 159.307 null ] >>
endobj
-672 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+723 0 obj
+<< /D [ 679 0 R /XYZ 78.499 148.348 null ] >>
+endobj
+724 0 obj
+<< /D [ 679 0 R /XYZ 78.499 122.47 null ] >>
endobj
725 0 obj
+<< /D [ 679 0 R /XYZ 78.499 111.511 null ] >>
+endobj
+726 0 obj
+<< /D [ 679 0 R /XYZ 78.499 100.552 null ] >>
+endobj
+727 0 obj
+<< /D [ 679 0 R /XYZ 78.499 89.593 null ] >>
+endobj
+728 0 obj
+<< /D [ 679 0 R /XYZ 78.499 78.635 null ] >>
+endobj
+678 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+731 0 obj
<< /Filter /FlateDecode /Length 2002 >>
stream
xZr6+hU.WY4U959
@@ -2347,11675 +2328,11747 @@ sFC>M Z W1tq6B'^̩ET-0%^bR(R9iOE
1>.ƤR@(;- uc*PL3&*QG G/{8Pz!sduB3{;޿{<0YbKfF$#W.pH"Ө_f6p]޽r##OFIqZJn~
endstream
endobj
-724 0 obj
-<< /Type /Page /Contents 725 0 R /Resources 723 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
-endobj
-726 0 obj
-<< /D [ 724 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-727 0 obj
-<< /D [ 724 0 R /XYZ 78.499 768.829 null ] >>
-endobj
-728 0 obj
-<< /D [ 724 0 R /XYZ 78.499 757.87 null ] >>
-endobj
-729 0 obj
-<< /D [ 724 0 R /XYZ 78.499 742.255 null ] >>
-endobj
730 0 obj
-<< /D [ 724 0 R /XYZ 78.499 731.296 null ] >>
-endobj
-731 0 obj
-<< /D [ 724 0 R /XYZ 78.499 720.337 null ] >>
+<< /Type /Page /Contents 731 0 R /Resources 729 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
732 0 obj
-<< /D [ 724 0 R /XYZ 78.499 709.378 null ] >>
+<< /D [ 730 0 R /XYZ 78.37 808.885 null ] >>
endobj
733 0 obj
-<< /D [ 724 0 R /XYZ 78.499 698.419 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 768.829 null ] >>
endobj
734 0 obj
-<< /D [ 724 0 R /XYZ 78.499 687.461 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 757.87 null ] >>
endobj
735 0 obj
-<< /D [ 724 0 R /XYZ 78.499 676.502 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 742.255 null ] >>
endobj
736 0 obj
-<< /D [ 724 0 R /XYZ 78.499 665.543 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 731.296 null ] >>
endobj
737 0 obj
-<< /D [ 724 0 R /XYZ 78.499 626.667 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 720.337 null ] >>
endobj
738 0 obj
-<< /D [ 724 0 R /XYZ 78.499 601.576 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 709.378 null ] >>
endobj
739 0 obj
-<< /D [ 724 0 R /XYZ 78.499 590.617 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 698.419 null ] >>
endobj
740 0 obj
-<< /D [ 724 0 R /XYZ 78.499 579.658 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 687.461 null ] >>
endobj
741 0 obj
-<< /D [ 724 0 R /XYZ 78.499 568.699 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 676.502 null ] >>
endobj
742 0 obj
-<< /D [ 724 0 R /XYZ 78.499 541.778 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 665.543 null ] >>
endobj
743 0 obj
-<< /D [ 724 0 R /XYZ 79.822 530.819 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 626.667 null ] >>
endobj
744 0 obj
-<< /D [ 724 0 R /XYZ 79.822 515.204 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 601.576 null ] >>
endobj
745 0 obj
-<< /D [ 724 0 R /XYZ 79.822 504.245 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 590.617 null ] >>
endobj
746 0 obj
-<< /D [ 724 0 R /XYZ 79.822 493.286 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 579.658 null ] >>
endobj
747 0 obj
-<< /D [ 724 0 R /XYZ 79.822 482.327 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 568.699 null ] >>
endobj
748 0 obj
-<< /D [ 724 0 R /XYZ 79.822 471.368 null ] >>
+<< /D [ 730 0 R /XYZ 78.499 541.778 null ] >>
endobj
749 0 obj
-<< /D [ 724 0 R /XYZ 79.822 460.41 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 530.819 null ] >>
endobj
750 0 obj
-<< /D [ 724 0 R /XYZ 79.822 449.451 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 515.204 null ] >>
endobj
751 0 obj
-<< /D [ 724 0 R /XYZ 79.822 438.492 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 504.245 null ] >>
endobj
752 0 obj
-<< /D [ 724 0 R /XYZ 79.822 427.533 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 493.286 null ] >>
endobj
753 0 obj
-<< /D [ 724 0 R /XYZ 79.822 416.574 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 482.327 null ] >>
endobj
754 0 obj
-<< /D [ 724 0 R /XYZ 79.822 400.959 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 471.368 null ] >>
endobj
755 0 obj
-<< /D [ 724 0 R /XYZ 79.822 390 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 460.41 null ] >>
endobj
756 0 obj
-<< /D [ 724 0 R /XYZ 79.822 379.041 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 449.451 null ] >>
endobj
757 0 obj
-<< /D [ 724 0 R /XYZ 79.822 368.082 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 438.492 null ] >>
endobj
758 0 obj
-<< /D [ 724 0 R /XYZ 79.822 357.123 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 427.533 null ] >>
endobj
759 0 obj
-<< /D [ 724 0 R /XYZ 79.822 346.164 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 416.574 null ] >>
endobj
760 0 obj
-<< /D [ 724 0 R /XYZ 79.822 335.205 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 400.959 null ] >>
endobj
761 0 obj
-<< /D [ 724 0 R /XYZ 79.822 324.246 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 390 null ] >>
endobj
762 0 obj
-<< /D [ 724 0 R /XYZ 79.822 313.287 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 379.041 null ] >>
endobj
763 0 obj
-<< /D [ 724 0 R /XYZ 79.822 292.019 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 368.082 null ] >>
endobj
764 0 obj
-<< /D [ 724 0 R /XYZ 79.822 281.06 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 357.123 null ] >>
endobj
765 0 obj
-<< /D [ 724 0 R /XYZ 79.822 241.535 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 346.164 null ] >>
endobj
766 0 obj
-<< /D [ 724 0 R /XYZ 79.822 230.576 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 335.205 null ] >>
endobj
767 0 obj
-<< /D [ 724 0 R /XYZ 79.822 219.617 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 324.246 null ] >>
endobj
768 0 obj
-<< /D [ 724 0 R /XYZ 79.822 208.658 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 313.287 null ] >>
endobj
769 0 obj
-<< /D [ 724 0 R /XYZ 79.822 197.699 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 292.019 null ] >>
endobj
770 0 obj
-<< /D [ 724 0 R /XYZ 79.822 186.74 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 281.06 null ] >>
endobj
771 0 obj
-<< /D [ 724 0 R /XYZ 79.822 175.781 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 241.535 null ] >>
endobj
772 0 obj
-<< /D [ 724 0 R /XYZ 79.822 164.822 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 230.576 null ] >>
endobj
773 0 obj
-<< /D [ 724 0 R /XYZ 79.822 151.037 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 219.617 null ] >>
endobj
774 0 obj
-<< /D [ 724 0 R /XYZ 79.822 140.078 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 208.658 null ] >>
endobj
775 0 obj
-<< /D [ 724 0 R /XYZ 79.822 100.552 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 197.699 null ] >>
endobj
776 0 obj
-<< /D [ 724 0 R /XYZ 79.822 89.593 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 186.74 null ] >>
endobj
777 0 obj
-<< /D [ 724 0 R /XYZ 79.822 78.635 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 175.781 null ] >>
endobj
-723 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-780 0 obj
-<< /Filter /FlateDecode /Length 2716 >>
-stream
-x[Ko7 W=D(, d
-bmG3-շ?͙jX e ==89}hnC>
-z)OFeΩA;cGz24pl)\s77=9tp&1M3O=[
-^%9N85t<R$>Q3mq#;s?ʞҽh5hpSTvxP[2{Q~|brQn*Zy0Z> 6-&3:Ɔ4_K)$A{p"t/ħq:gdjj85vRl_U#\ j|;D 5Hu%:$Yê->§p\Ř`f!%;LS!$i>
-q֠Ռϳ8YCfnK43q9Q0H|aw982t<1|bôqce 359_ 2à7 z0(v-=3hx*m1 e%~(iax붗I N+a1[DZW.a09>vR8b{aoP' %
-s-lBQ7Hv$y|NS"1-Y{ϫw"E{K9DŽ }oa6)d*2P#)r̿wSR |PS3j^JYރD"~&S<FLfmTJ a(a<G [Es0tyEEFF^߭ umA#[:efUȜsg3=ʾEoU~#lÐ27?J=^m,X[sj>W(+q UK
-{4r(~bM+q|Lj6,׷wgh˕4R&BT")@յ;e/L*~9WjûJNsi$qG氽čc)LWsq@Sbs~U|X􊺅Ր
-*3tΜX) ?o#
-fWvz7Ӄ>6cu5x$/
-KuO
-0~%݅S}FF:cͮ'֭2ӆ(/\xo O2Au[^P|q.'mik]*~&E
-ΫIaTE%_)X-$L?:ZZᴄGTRD&K:56|/p?[Ja͇JUNsǀ-xaT%' s2%+UjeZb0?)I&SH%q'N\h%75Н ۨ ~x {8g9\s 8%p> \EխV|2@ٵ=˷ (/ ot]0o?^]A>8H^x!?FwqySd~UW}Kَm[832C[JYc
-endstream
+778 0 obj
+<< /D [ 730 0 R /XYZ 79.822 164.822 null ] >>
endobj
779 0 obj
-<< /Type /Page /Contents 780 0 R /Resources 778 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 730 0 R /XYZ 79.822 151.037 null ] >>
+endobj
+780 0 obj
+<< /D [ 730 0 R /XYZ 79.822 140.078 null ] >>
endobj
781 0 obj
-<< /D [ 779 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 100.552 null ] >>
endobj
782 0 obj
-<< /D [ 779 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 89.593 null ] >>
endobj
783 0 obj
-<< /D [ 779 0 R /XYZ 79.822 757.87 null ] >>
-endobj
-784 0 obj
-<< /D [ 779 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 730 0 R /XYZ 79.822 78.635 null ] >>
endobj
-785 0 obj
-<< /D [ 779 0 R /XYZ 79.822 735.953 null ] >>
+729 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
786 0 obj
-<< /D [ 779 0 R /XYZ 79.822 724.994 null ] >>
+<< /Filter /FlateDecode /Length 2920 >>
+stream
+x\$ +:7`kj'3ڑU]ꝵ W%#ԗu?(?߶ioX8ܾ\'zc7# yӊ߷)@I)7M2<b¸$Ҩ^
+JsR)emsm*~;wo9K*㾫?$H/-㩿S֍wW8<AR( (y !C/
+
+u3>y ķd3ɍ3LrUjϓUYo0Y1x\Z2_*閻 a<QIDTV 8?Oo8G 9fYT("k%J}|UwA`h)D]ho!nnņgſuSh"_ @<xْS)=E)
+2r_Sv
+-m7jOgOM?6ĄO"kc|qƘjJI9l>ls(,bЉuf
+а{#2ǯ.b ef 0*i43g6}0x9:. Љ%KYgɜBU}\+9۽hcjkuR
+J7yQO"?%f(8V¤-V⥶˓ƥmgSNJOSQ޸w|sHQywX>3^Xs( з EWO9
+.ܒ1bsD"Yztm F鐡Vt!ǁ6FڷŅl2JWy+hE!kΣ2jy{uX S3kѣR+f4Zy^VRbQZ3ȃAz%wY:!!,1ӊ gR]1q-!s9?D Z!3 JhĠ?cT;6:g,!Rxz3^(92ZҹN=;*!?gkВ(o*őj>8|9yF`U3a OP#,<%B
+qG,>XK^n$lBITIٜ#pkUR;b(}߾àvࠟK
+ d s0Vqqp]wTӪRD5} p/Go ED+R$#ic"aXD,LGꔼZG >DCtt"ʂ׌!tooI
+b[*ϭ㪪 p~33տ-EXi/B 6ճb憴s لZVOBo15aXV-ˉ#U5#~
+&ղ ӎ@%Z-":&%J\/vB0+r9ȭZwkD] Qg.ZvZ](wC|Ȧ$,qP0Wtq-1jMVӹԚ0583Hcąq I>ɷC9n.֡#plJ
+ȾܤOQfQrc:1'fҿRp$jf=\yW`ݼeri헂hބ{5X$(
+t/
+0^g,Ѷɋ|m#QV'df·ryK,ҷ5Xkk B+zX0- hbS/ޣ{MMK0bO) ty9̶cFxti-3q&HQgɢE%]b?Bj @δǮ]脼vW{kYŃ=FO Be.0򯢪Z-HKœyO? ̄b AO*lzM`T0nѹq܃K1sݪ<Y7Yitv}mAv'f[ )(GwbNm#y篧7V{L<S,BdaURݯ5diTh)Iؖ/) 3 :1d3\
+1!,a_YA큮}S]+\)S\ MSbK~?[P7>X J37[ʰZHw
+endstream
+endobj
+785 0 obj
+<< /Type /Page /Contents 786 0 R /Resources 784 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
787 0 obj
-<< /D [ 779 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 785 0 R /XYZ 78.37 808.885 null ] >>
endobj
788 0 obj
-<< /D [ 779 0 R /XYZ 79.822 664.222 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 768.829 null ] >>
endobj
789 0 obj
-<< /D [ 779 0 R /XYZ 79.822 653.263 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 757.87 null ] >>
endobj
790 0 obj
-<< /D [ 779 0 R /XYZ 79.822 642.304 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 746.912 null ] >>
endobj
791 0 obj
-<< /D [ 779 0 R /XYZ 79.822 631.345 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 735.953 null ] >>
endobj
792 0 obj
-<< /D [ 779 0 R /XYZ 79.822 620.386 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 724.994 null ] >>
endobj
793 0 obj
-<< /D [ 779 0 R /XYZ 79.822 609.427 null ] >>
-endobj
-217 0 obj
-<< /D [ 779 0 R /XYZ 79.37 583.978 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 714.035 null ] >>
endobj
794 0 obj
-<< /D [ 779 0 R /XYZ 79.822 534.244 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 665.27 null ] >>
endobj
795 0 obj
-<< /D [ 779 0 R /XYZ 79.822 523.285 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 654.311 null ] >>
endobj
796 0 obj
-<< /D [ 779 0 R /XYZ 79.822 474.468 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 643.352 null ] >>
endobj
797 0 obj
-<< /D [ 779 0 R /XYZ 79.822 427.644 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 632.393 null ] >>
endobj
798 0 obj
-<< /D [ 779 0 R /XYZ 79.822 380.819 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 621.434 null ] >>
endobj
799 0 obj
-<< /D [ 779 0 R /XYZ 79.822 345.95 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 610.476 null ] >>
endobj
800 0 obj
-<< /D [ 779 0 R /XYZ 79.822 334.991 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 599.517 null ] >>
endobj
801 0 obj
-<< /D [ 779 0 R /XYZ 79.822 288.167 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 588.558 null ] >>
endobj
802 0 obj
-<< /D [ 779 0 R /XYZ 79.822 259.275 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 577.599 null ] >>
endobj
803 0 obj
-<< /D [ 779 0 R /XYZ 79.822 218.428 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 566.64 null ] >>
+endobj
+217 0 obj
+<< /D [ 785 0 R /XYZ 79.37 542.449 null ] >>
endobj
804 0 obj
-<< /D [ 779 0 R /XYZ 79.822 171.604 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 493.134 null ] >>
endobj
805 0 obj
-<< /D [ 779 0 R /XYZ 79.822 112.824 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 482.176 null ] >>
endobj
-778 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R /F65 335 0 R /F30 341 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-808 0 obj
-<< /Filter /FlateDecode /Length 2898 >>
-stream
-x\ˎc7WZ7P( ndݻ`3mEז40^]Ço~
-}0DxOd=d`܈z
-5
-\<G'"ΜO\ޚ~1
-땂
-JZAV*ti3
-Xb=Y6@i8WO .&ֻ# tCnq')˽E2?w<%Ο3}-9ƺ(_"'2 PIGaү0Iژ_Y'Mw܃089S.Pt vCZuN˾u;yc9hzp}7%KR6Tsc4Sr/ ;E$D9ykgڼJ1 m]QǺ
-=2o5,6;3Z}3?ƹlpC0-yd0*<wCPI,qYj@
-:$tH(jmw18c Jff&ð`CyF"ɞilw9js!=`D3d2"ް`^M3DtR>]=TWQPݒsu^nr^V,ܐSŘHd[51)o7sW4얙GAR ^uϝ|[[:ڡQst{+mv Ue"|PJEB\iW Cj~H>YY~S,ϵܳ<p~2<j`%0 L^_']m,ȑcxvcwkEHWSelȦ0]-( &?^+JޚzZm9~#>@TLK16#\okj(P)/CH}B1U<P:M X`qMMn$GW^GU3Crj:UR Z+I1FiO:P1җ3s N G|u pP8!Z8F>姚*hp&ҜdD |C1u-BNxPJQ9JЯ%ƳSpLHM`˥\k(Jy7Sqʄ́= B($ȭ/! U
->L>@eqo&-D^#k?AN߮ ^΋jևu+2H
-t >A繅?@c4ɇU.WʑW316/NYJ%V oT* KW$+2nh",  n\ OgeRK5m ;*ș]Tjܟ{Oo\Oj@0ԤCjiX@~PXk:hصg8h30;
-X I;"! ^
-j%[d'̓|(M\QpdzI"^xYĔQ8Y1"  D݉s!"3?aJ2=g[:#[=&N"G )+"A/aխ@Ϭr,]L;+Дy+_9!3^oOK79d#r@]Yji{E/RQW \?>zo-!L,
-pK3ݩ&=C~44Wگt*]_MiVROFa=)9*޻o4HB
-״vH¤RXZ5+μ4oo@5
-endstream
+806 0 obj
+<< /D [ 785 0 R /XYZ 79.822 434.407 null ] >>
endobj
807 0 obj
-<< /Type /Page /Contents 808 0 R /Resources 806 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 785 0 R /XYZ 79.822 388.421 null ] >>
+endobj
+808 0 obj
+<< /D [ 785 0 R /XYZ 79.822 342.436 null ] >>
endobj
809 0 obj
-<< /D [ 807 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 308.405 null ] >>
endobj
810 0 obj
-<< /D [ 807 0 R /XYZ 79.822 730.975 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 297.446 null ] >>
endobj
811 0 obj
-<< /D [ 807 0 R /XYZ 79.822 720.016 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 251.461 null ] >>
endobj
812 0 obj
-<< /D [ 807 0 R /XYZ 79.822 673.207 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 222.988 null ] >>
endobj
813 0 obj
-<< /D [ 807 0 R /XYZ 79.822 638.352 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 182.561 null ] >>
endobj
814 0 obj
-<< /D [ 807 0 R /XYZ 79.822 567.632 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 136.575 null ] >>
endobj
815 0 obj
-<< /D [ 807 0 R /XYZ 79.822 520.823 null ] >>
-endobj
-816 0 obj
-<< /D [ 807 0 R /XYZ 79.822 509.864 null ] >>
+<< /D [ 785 0 R /XYZ 79.822 78.635 null ] >>
endobj
-817 0 obj
-<< /D [ 807 0 R /XYZ 79.822 475.01 null ] >>
+784 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R /F65 339 0 R /F30 345 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
818 0 obj
-<< /D [ 807 0 R /XYZ 79.822 428.2 null ] >>
+<< /Filter /FlateDecode /Length 2898 >>
+stream
+x\ˎc7WZ7P( ndݻ`3mEז40ZW(!o~
+}0DxOd=d`܈z
+5
+;40֥L^83Dn
+0T*y{hc*n\׌H읣&$ƺI07vM%:<T9"i6e&Y8s)*`іYqw0zH*:[G=H<@^ۉ,̔Y0y#3[5OI [ h*=|f8K˄nf4i9c)ߖZ4$FG%8I1lN3pdA2r#QI~τ
+Vvu|0oG@A7axAu_!`YN>jiE47q- ~K#*#?&kFc5Np,t+lM G`|[|w]k=d
+w4L@INJ-snJ$l><h_nH5/0?;yWXwA)8XW[%^f']bF1R⸛]o&u8=^ nmW Fnh5<)7"#1KHAW|
+" VTNX EYî+(n޹:/79/+WnbL$Zh;yvLʣ )YN>ɭPC]Ш9:ݶn֪2~>(%QZe!!5TPGVg3k-,O-ļ.!Oy9C L2s)I/tq
+<5E [h3Ya OU^Xz w\BN bGK ~Zq*^W+H郫|',+Y@q p*X@~]Ҏ%+y^7|sicDč4zw
+@{j腧+2ⶆxIW.Y5Ͻϧɷj'V
+V
+jR!\wDo, m?Ka54ڳ
+ it`h(í<\}
+v'̅+ɴfw3n*$y T,{eVB5hY~scU wr,]vzD[$͇T[ !|Jx]jCK1(
+״vH¤RXZ5+μhJ? 5
+endstream
+endobj
+817 0 obj
+<< /Type /Page /Contents 818 0 R /Resources 816 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
819 0 obj
-<< /D [ 807 0 R /XYZ 79.822 381.391 null ] >>
+<< /D [ 817 0 R /XYZ 78.37 808.885 null ] >>
endobj
820 0 obj
-<< /D [ 807 0 R /XYZ 79.822 370.432 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 730.975 null ] >>
endobj
821 0 obj
-<< /D [ 807 0 R /XYZ 79.822 335.578 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 720.016 null ] >>
endobj
822 0 obj
-<< /D [ 807 0 R /XYZ 79.822 300.723 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 673.207 null ] >>
endobj
823 0 obj
-<< /D [ 807 0 R /XYZ 79.822 289.764 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 638.352 null ] >>
endobj
824 0 obj
-<< /D [ 807 0 R /XYZ 79.822 254.91 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 567.632 null ] >>
endobj
825 0 obj
-<< /D [ 807 0 R /XYZ 79.822 243.951 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 520.823 null ] >>
endobj
826 0 obj
-<< /D [ 807 0 R /XYZ 79.822 197.142 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 509.864 null ] >>
endobj
827 0 obj
-<< /D [ 807 0 R /XYZ 79.822 186.183 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 475.01 null ] >>
endobj
828 0 obj
-<< /D [ 807 0 R /XYZ 79.822 151.328 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 428.2 null ] >>
endobj
829 0 obj
-<< /D [ 807 0 R /XYZ 79.822 140.369 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 381.391 null ] >>
endobj
830 0 obj
-<< /D [ 807 0 R /XYZ 79.822 105.515 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 370.432 null ] >>
endobj
-806 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-833 0 obj
-<< /Filter /FlateDecode /Length 3199 >>
-stream
-x9$џW" h40Jn&YȨ*&"s7y|*s "Xxț% JHnw׋oR/T~@>qƑw@rs]V}9$Dn!
-J ch%>+e\@Rs &y= }D<1OcY'f D0[c{fcd;ޫ0
-cq&}u&yU\4C3llkP I+|p"$
-p0%m%l$`K~(&Fx8(}WS|(4,T?ZM h߷0HaAnX+&P1D6d'jHU]Z`SqaL&δj,g,[$+P/8ĖG@~cpFϺ)lω īMë
-w)8c<Tj(*ۗeԵf+RejC7t7L؆x sgd so]޴Q =ϯ&TmvMk# z9ŪNiu՟< x* 6fBz\Q
- 
-@eeG^Xa2*jy-2tءG3mෲad<.JOq3)-N 1ZAWfT%bdsU=96}\,eP>48V%7 m\)J
-ډ3j|-Not^(
-bQ!j1*k. I@)j܌Wx%@xA6oCl7DZLwWNrQ9Ӏ/UB+V; ݊?ku>݁tͿ6\Y*^"3ˑqRZ5n%9nRP9cQq([jq!. ;sSCV\֨APSKV--}u2-co|M#â]:f̉hsKJNo(`Ix~f~T wPXB-gwK}BYidFz4sZq&{1;mZt um xo.ryzfՎRw zнw'T
-m6:dL/JODZYfx#|6^ZQڑGN^ @}£HlFh`ċ/>1P㘡:C #TNm׻`!5-l o5$땼JMw.dGW%=p\Ԕ.¿QE,塋ȳFh뎋IW" ˤJ&ŀLjt%_91OB{|Ar?rޱ_vRT)֒)l͡> ?R5ۑS'*&1(`/)h.8zBHX3+qk9Mhk]TijA!,l+ st\KH|,oϫ͊Y/LR*Ȃ*f(_@/yƀ<ǭu@
-endstream
+831 0 obj
+<< /D [ 817 0 R /XYZ 79.822 335.578 null ] >>
endobj
832 0 obj
-<< /Type /Page /Contents 833 0 R /Resources 831 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 817 0 R /XYZ 79.822 300.723 null ] >>
+endobj
+833 0 obj
+<< /D [ 817 0 R /XYZ 79.822 289.764 null ] >>
endobj
834 0 obj
-<< /D [ 832 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 254.91 null ] >>
endobj
835 0 obj
-<< /D [ 832 0 R /XYZ 79.822 650.274 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 243.951 null ] >>
endobj
836 0 obj
-<< /D [ 832 0 R /XYZ 79.822 577.547 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 197.142 null ] >>
endobj
837 0 obj
-<< /D [ 832 0 R /XYZ 79.822 542.677 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 186.183 null ] >>
endobj
838 0 obj
-<< /D [ 832 0 R /XYZ 79.822 459.987 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 151.328 null ] >>
endobj
839 0 obj
-<< /D [ 832 0 R /XYZ 79.822 425.118 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 140.369 null ] >>
endobj
840 0 obj
-<< /D [ 832 0 R /XYZ 79.822 390.249 null ] >>
+<< /D [ 817 0 R /XYZ 79.822 105.515 null ] >>
endobj
-841 0 obj
-<< /D [ 832 0 R /XYZ 79.822 355.38 null ] >>
-endobj
-842 0 obj
-<< /D [ 832 0 R /XYZ 79.822 344.421 null ] >>
+816 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
843 0 obj
-<< /D [ 832 0 R /XYZ 79.822 309.552 null ] >>
+<< /Filter /FlateDecode /Length 3384 >>
+stream
+x\Ɏ#WCP(U* 0'u/Af*Sj𡦥L2Bj~?B]s4^~/E\`
+h]q?\o(v <6v[g?5bdF"^g*"Qi+̀O2o +L» c= Id`Vb%1(# F϶3]if͏*yj1Ik9 ߿/s1lTwb l K)2ۮ*ft"˟Hl=y=vݷ&@&aڅ^d= #>5q̈́6ѳ&A^`5dab KۜZ+ D%/r#̀>0a.y8Y1:t@֥ʒ?&"V,80 @U'~9'фU*\ߕxkX?$eJ9CГ@ȫ.5/x̀}lfZMb",O;X1i`†ryE$x5f` Ӿ'EJ1SqɄt%lTV ~wx&q͎7gbKsd˔Fd.u6,fd #sKRkVJN2))V)v͎R=H͖R3SzTc+O7uM"F|/C@M p:rs.$EV 4t@W%p,F MG9d}`(|Ecs4mԡWg-K;+o>T2#]9|%}&J>^_Xu
+$Srkx(HQ!EOo>*Ii)w/JP>CWrBOO2gzE`7^Fb=2SXJ$G(G AU΅MH.rV<ѭ|ڹ^(=m0'cZq`(#mݔDe׾40$o* 2ڎ-=~*%Jc+N3fMCTkU*Cj}AULF{":55|^cH!KJ&JE'C]xKd3$=RdT7͙ui'I YlGLW[. 3RN1mto>uCKѓz +A=5 qt,b2b}%.I9Y9pb"d#aTQ BOƆho֒I]eV]V-6mLG%Dv7<K&wnAm,(8%vh}APE^Eb=<<Y4Bk.S⛵uDu)H(FR1Dgjex/VN㮥fC69ھ0$5[Wʿ"zhYž&Ȃx? *1vlyM6Kv̪:*ŅJ^m߮T3|&EwOx* :Q[/6yu*_zm]3?vb*ŌI;wZH;lk+1)ҋI6+'Ɠ0,
+,:8Sd~%*b
+?8X&
+"SdXAf~Qw*
+C&s !hɘ|UM.Hʹ*d0YɠAr/C';'rimm( }Kwp/+TTf T *\TJ? ]lR*❼6'õsMWo"<+Jxj,\2c;))8I5
+)b63.|i{US3)>J7웫IIoZ'UNBt.~N֭WuRW~.̭|Ї6Zg
+݂R?z(%"AhX:oLmP734> V
+ qW(bjJ%bIYb쩝ޤhw5?ػ  A՟o͆Ԓ@GWw4
+LvM,ƃj+#_,d##?a W@Hy0GiDKTz/O. ( KĂ ʨ%tnoro'梥_HC {9B1@|0qd92rbÞcckQv4'3SHd,P-h^}dGѬ_),0~\rȣ>J_3~ U?~8
+endstream
+endobj
+842 0 obj
+<< /Type /Page /Contents 843 0 R /Resources 841 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
844 0 obj
-<< /D [ 832 0 R /XYZ 79.822 238.817 null ] >>
+<< /D [ 842 0 R /XYZ 78.37 808.885 null ] >>
endobj
845 0 obj
-<< /D [ 832 0 R /XYZ 79.822 213.91 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 650.274 null ] >>
endobj
846 0 obj
-<< /D [ 832 0 R /XYZ 79.822 202.951 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 577.547 null ] >>
endobj
847 0 obj
-<< /D [ 832 0 R /XYZ 79.822 191.992 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 542.677 null ] >>
endobj
848 0 obj
-<< /D [ 832 0 R /XYZ 79.822 181.034 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 459.987 null ] >>
endobj
849 0 obj
-<< /D [ 832 0 R /XYZ 79.822 170.075 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 425.118 null ] >>
endobj
850 0 obj
-<< /D [ 832 0 R /XYZ 79.822 159.116 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 390.249 null ] >>
endobj
851 0 obj
-<< /D [ 832 0 R /XYZ 79.822 148.157 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 355.38 null ] >>
endobj
-831 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F81 377 0 R /F59 346 0 R /F84 425 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-854 0 obj
-<< /Filter /FlateDecode /Length 2254 >>
-stream
-xZr#W!wUhKe _lIٙ,dKM<x
-=|su{$WǫxEW/9k^z#c<B@Ä6N55 7P/c *]周i󬆷Yv"I?w?{+AʝCe\PwIBY^z{_|)&}W_s +J-ʳMKF[6Z8vř:&><" yyf/HRUWWg9_NHw+5ڡ*:N-Eݝ`5#]/[Q!-h?F{X U( ѠQrh0-1J S\Ipˤ*̶B2PT sM aՖFOd
-VP%0זe:]H8n!o7h}5JI.x/yca"06 &(
-kETUkFUc*ic"~zyu!Cu}i`Fh& _O5qJV/YJU7{PxIrVKj}6VG*esvs7c؜N=E궫ih\mW#B(GwC)Zkl
- uvW
-
-+xR^!!3Å!\^fay9S\P=gMN(l
-iW%p`
-*8|%/#LL^?(:S9ŸdṔ[jKGmg2nR/Kka<+c|=/ul֨Nʎo[/Hzx,g*z-$ ՛tjf0L
-gϝ/)L7mo[Tg ϗ>O޸r\05)rA~'Zƌg-VǟHIfB15qŞnMzQJMrǴj%+`Fփ%F=%Scܫ!9e'ƄGQ- Բq/f
-TP)Lx`Wrd\A:J
-endstream
+852 0 obj
+<< /D [ 842 0 R /XYZ 79.822 344.421 null ] >>
endobj
853 0 obj
-<< /Type /Page /Contents 854 0 R /Resources 852 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 842 0 R /XYZ 79.822 273.686 null ] >>
+endobj
+854 0 obj
+<< /D [ 842 0 R /XYZ 79.822 248.78 null ] >>
endobj
855 0 obj
-<< /D [ 853 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 237.821 null ] >>
endobj
856 0 obj
-<< /D [ 853 0 R /XYZ 79.822 742.926 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 221.88 null ] >>
endobj
857 0 obj
-<< /D [ 853 0 R /XYZ 79.822 731.968 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 210.921 null ] >>
endobj
858 0 obj
-<< /D [ 853 0 R /XYZ 79.822 721.009 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 199.963 null ] >>
endobj
859 0 obj
-<< /D [ 853 0 R /XYZ 79.822 710.05 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 189.004 null ] >>
endobj
860 0 obj
-<< /D [ 853 0 R /XYZ 79.822 699.091 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 178.045 null ] >>
endobj
861 0 obj
-<< /D [ 853 0 R /XYZ 79.822 688.132 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 167.086 null ] >>
endobj
862 0 obj
-<< /D [ 853 0 R /XYZ 79.822 677.173 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 156.127 null ] >>
endobj
863 0 obj
-<< /D [ 853 0 R /XYZ 79.822 666.214 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 145.168 null ] >>
endobj
864 0 obj
-<< /D [ 853 0 R /XYZ 79.822 655.255 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 134.209 null ] >>
endobj
865 0 obj
-<< /D [ 853 0 R /XYZ 79.822 644.296 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 123.25 null ] >>
endobj
866 0 obj
-<< /D [ 853 0 R /XYZ 79.822 609.427 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 112.291 null ] >>
endobj
867 0 obj
-<< /D [ 853 0 R /XYZ 79.822 574.558 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 101.332 null ] >>
endobj
868 0 obj
-<< /D [ 853 0 R /XYZ 79.822 563.599 null ] >>
+<< /D [ 842 0 R /XYZ 79.822 90.374 null ] >>
endobj
-869 0 obj
-<< /D [ 853 0 R /XYZ 79.822 528.73 null ] >>
-endobj
-870 0 obj
-<< /D [ 853 0 R /XYZ 79.822 503.823 null ] >>
+841 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F81 381 0 R /F59 350 0 R /F84 428 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
871 0 obj
-<< /D [ 853 0 R /XYZ 79.822 492.864 null ] >>
+<< /Filter /FlateDecode /Length 2837 >>
+stream
+x[Ɏ#9WJ-Qk
+~_qM6F]C".vc^q_oǹR+rʥu w+>'脻\M'ơqBOn ͯUeā5/ު %w 4PJQOOAo6'$f*ʢϊ +P7.γaklm(PUGA\3 xA.="}T2BPJ ]֒9jҘ`W|P3{*+fOCQU0[ahɼ99[Ad&$j05dj=`<C4u3J.~u`g[ZcO]+|W\ ܎ޫb Q9 fvj@ٽnԵPp`k.]6}Fwqg=2\=݄䊸i\t=t5.!B) mc+2PYe uI=*A?\+Q6<~U**VN1d63KXf=uJ~[&}l TtSQl
+)3Ox ݉Uv6uMTG GSҔjB!Η_
+ 1E~zWpG{8$>spa(tWAK3C8S\P>gM” l!TR4nfvb)BP;]P!l1])jq&LVDf8C9ŸOA%[Eo1ݪ-("L^.I3m Kg5텈wPMopކ
+nR[3}b+u"
+>/,ed*e(0)yѪ!1j&OP:Pb"TЍ>nn'k1R3)b߲Qlx[͓8S lra:QgP}Ou
+,6E `$q'sG<a*ܧ=pR+T(l7w/EI1e԰TTB %CWYcB`(;,#h>A ZϕdJS|+dىf/~)ys2}U 4rixRTYNܫY=HWB׎QHCHJJj̨b\i/ޞlߑT (Q;1[e,HB1RTM
+%71)W@(RZx
+)vCgD8Y~058莃yS:<9?{Gdp$:Q}<ہض\U4{˖
+rYMuMߺF7Ѻ]M6&fE
+<BXF?9/g+wzy$hPahnln"766m.f#+B63NUG'PjI=Jx'c+SԗA6Gy;K<
+6о`!6mb4ʱ*`kS)Aean|*cNi:,
+0FbE_?݃
+endstream
+endobj
+870 0 obj
+<< /Type /Page /Contents 871 0 R /Resources 869 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
872 0 obj
-<< /D [ 853 0 R /XYZ 79.822 420.137 null ] >>
+<< /D [ 870 0 R /XYZ 78.37 808.885 null ] >>
endobj
873 0 obj
-<< /D [ 853 0 R /XYZ 79.822 409.178 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 755.041 null ] >>
endobj
874 0 obj
-<< /D [ 853 0 R /XYZ 79.822 398.219 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 720.811 null ] >>
endobj
875 0 obj
-<< /D [ 853 0 R /XYZ 79.822 387.26 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 709.852 null ] >>
endobj
876 0 obj
-<< /D [ 853 0 R /XYZ 79.822 376.301 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 675.622 null ] >>
endobj
877 0 obj
-<< /D [ 853 0 R /XYZ 79.822 335.454 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 651.515 null ] >>
endobj
878 0 obj
-<< /D [ 853 0 R /XYZ 79.822 324.496 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 640.556 null ] >>
endobj
879 0 obj
-<< /D [ 853 0 R /XYZ 79.822 313.537 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 568.627 null ] >>
endobj
880 0 obj
-<< /D [ 853 0 R /XYZ 79.822 302.578 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 557.668 null ] >>
endobj
881 0 obj
-<< /D [ 853 0 R /XYZ 79.822 291.619 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 546.709 null ] >>
endobj
882 0 obj
-<< /D [ 853 0 R /XYZ 79.822 280.66 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 535.751 null ] >>
endobj
883 0 obj
-<< /D [ 853 0 R /XYZ 79.822 269.701 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 524.792 null ] >>
endobj
884 0 obj
-<< /D [ 853 0 R /XYZ 79.822 258.742 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 484.904 null ] >>
endobj
885 0 obj
-<< /D [ 853 0 R /XYZ 79.822 247.783 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 473.945 null ] >>
endobj
886 0 obj
-<< /D [ 853 0 R /XYZ 79.822 206.936 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 462.986 null ] >>
endobj
887 0 obj
-<< /D [ 853 0 R /XYZ 79.822 195.978 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 452.027 null ] >>
endobj
888 0 obj
-<< /D [ 853 0 R /XYZ 79.822 185.019 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 441.068 null ] >>
endobj
889 0 obj
-<< /D [ 853 0 R /XYZ 79.822 174.06 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 430.109 null ] >>
endobj
890 0 obj
-<< /D [ 853 0 R /XYZ 79.822 163.101 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 419.15 null ] >>
endobj
891 0 obj
-<< /D [ 853 0 R /XYZ 79.822 152.142 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 408.191 null ] >>
endobj
892 0 obj
-<< /D [ 853 0 R /XYZ 79.822 141.183 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 397.232 null ] >>
endobj
893 0 obj
-<< /D [ 853 0 R /XYZ 79.822 130.224 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 356.705 null ] >>
endobj
-852 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-896 0 obj
-<< /Filter /FlateDecode /Length 2975 >>
-stream
-xrܺ04PRIzU959Xg;9`FyMvoނhn?Mn.nn?sNjԟ1NJ4\Vzkiw^W˥(+ V,43iK1Đ@үUa~? ̎
-\lgZ%+rr~w6]uyeIf3l<o*N]8
-a7IMO2i|67P6GEr q@zrVI\EA9<r(pUn ]mIOMM4lb覐L@5BN%o9C2:Y1)Ј c͈0ފnN)[KJ4#uQENH$6B!fZn@AIvm֔ Y+C~d?u$*B eJ)ќh/QuAU=xK;wiYxoݪ~Oݲj
-Yꝶ!9(udf']^v4Xa3iu5e}}8FQ
- =:
-S\WLL\{KNt?Kyv_h '9cL_ " ,Wy'@@_vlIS[.k0./̬dpS7|Q Ckl9MYDGY^oªw}1Q3Tǐ (VS1]mVH؛㗝KhBk/eƳhˌbբ –uƕ Z'xTrE"nU^?Bf..[
-ufpJ%reC
-A?d6xS1=c5ߔ6q&亹wf'z(;D+ %YoDT~iOˀ@Ad<m񠣧KTȖ V-*~S{e"
-0Xb"V듙Yùc:}dAw(cuIh(^Gp@ZbƐTZPMl+S&fpff֟Jü,Cl5…`g{h[ r\XJJ᫡!ۓ5oXd8$aE;CzZ
-s]>Dc}]-9^õ` V,-}h\CS{c_iGy\dg 15;B+tPрtpJ: p(r {94
-g:g:bz(&(fa!9
-C8(mȀ,N-d:)4qk [rFH"(SV8AYO+gd:CuD/ aQ{Maf(_@ÂA/hK6Ai> ˍRf
-B-z7qg5}h2B1 )0E4$xٌxf ^+2 /(!14oj|P$;hW)^hʓ8rUjA?TR3y
-$B"
-/JeE1/ư
-n
-~^Kk`@I
-R
-jgQS!]F_:?i1MOs:0H
-2chl i [eՋ4ZKZ*C/}"q݄ 屳Jmg`nJ юyE%){!ғkD_AH셀a(1QȐy?{Ҕ>$GjgdL>\T{-ۡIi-ID-6+K҉e #\CLcfՖ)ۋK{>bIyo7cpkbkMԧ2DItrmJsgQ)= ᪑›g4z ]gg.; XLz[K[w=V=BY7f #uVl4F!BԋGSݧ^=>A)QiwPJsT汄 eF5#!s?a0ƺBYÉp6w%"PN!WQE5}@]] RF As RAE/
- 쥂rjRI%01#˃Uz~uGbeu*Xe(Q6LX7 #/W hmsp46O^7=ap8*03MuAA8}c`^#
-cdTy'$
-S"^ {mk uIY+JƱN@rng$a__fxh0OvgN*1fi`|~<3>= =g|rlw47x@18sZŻ&-bv\ȍ m&?
-endstream
+894 0 obj
+<< /D [ 870 0 R /XYZ 79.822 345.746 null ] >>
endobj
895 0 obj
-<< /Type /Page /Contents 896 0 R /Resources 894 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 870 0 R /XYZ 79.822 334.787 null ] >>
+endobj
+896 0 obj
+<< /D [ 870 0 R /XYZ 79.822 323.828 null ] >>
endobj
897 0 obj
-<< /D [ 895 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 312.869 null ] >>
endobj
898 0 obj
-<< /D [ 895 0 R /XYZ 79.822 719.071 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 301.91 null ] >>
endobj
899 0 obj
-<< /D [ 895 0 R /XYZ 79.822 708.112 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 290.952 null ] >>
endobj
900 0 obj
-<< /D [ 895 0 R /XYZ 79.822 667.591 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 279.993 null ] >>
endobj
901 0 obj
-<< /D [ 895 0 R /XYZ 79.822 656.632 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 204.239 null ] >>
endobj
902 0 obj
-<< /D [ 895 0 R /XYZ 79.822 592.201 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 193.28 null ] >>
endobj
903 0 obj
-<< /D [ 895 0 R /XYZ 79.822 536.574 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 153.392 null ] >>
endobj
904 0 obj
-<< /D [ 895 0 R /XYZ 79.822 525.615 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 142.433 null ] >>
endobj
905 0 obj
-<< /D [ 895 0 R /XYZ 79.822 514.656 null ] >>
+<< /D [ 870 0 R /XYZ 79.822 78.635 null ] >>
endobj
-906 0 obj
-<< /D [ 895 0 R /XYZ 79.822 503.697 null ] >>
-endobj
-907 0 obj
-<< /D [ 895 0 R /XYZ 79.822 492.738 null ] >>
+869 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F81 381 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
908 0 obj
-<< /D [ 895 0 R /XYZ 79.822 481.779 null ] >>
+<< /Filter /FlateDecode /Length 2546 >>
+stream
+x[Ɏ# SZ#Q ȹoA)jc풧G$"~8<MS׿BY%UyRw_MTK|/FaeC|rKO<tqO"5Dnq
+ r9!9(FT.!U8Ɔǩ
+Q]`nV7o7) [yF=s}Qp&`e|mB3⫲#!>
+73a#5˨
+TɃ7_@x.(wrU,}OuSZi0b~O^??b_\ (A{G>Fy2Qy)U.YO1;:7{o<f}P\ʈu1 8UƦP*{#Aܞ%u;Ʃur hz m$bC&nTټ"S+YYP6N7k̩Gg1sC*ZҤ&2*jTmVTL?Bw1KFI-wSVo]Jʼj }-l5֊iuCskU7ldL5:vdaԎV)Uk["R\hr<MSP
+QԵ`"r0 Yenuذ F6jf  `.eVq`Ǩ Z1#K4.O
+endstream
+endobj
+907 0 obj
+<< /Type /Page /Contents 908 0 R /Resources 906 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
909 0 obj
-<< /D [ 895 0 R /XYZ 79.822 470.82 null ] >>
+<< /D [ 907 0 R /XYZ 78.37 808.885 null ] >>
endobj
910 0 obj
-<< /D [ 895 0 R /XYZ 79.822 459.861 null ] >>
-endobj
-221 0 obj
-<< /D [ 895 0 R /XYZ 79.37 422.769 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 730.971 null ] >>
endobj
911 0 obj
-<< /D [ 895 0 R /XYZ 79.822 387.037 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 720.012 null ] >>
endobj
912 0 obj
-<< /D [ 895 0 R /XYZ 79.822 376.078 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 709.053 null ] >>
endobj
913 0 obj
-<< /D [ 895 0 R /XYZ 79.822 365.119 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 698.095 null ] >>
endobj
914 0 obj
-<< /D [ 895 0 R /XYZ 79.822 354.16 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 687.136 null ] >>
endobj
915 0 obj
-<< /D [ 895 0 R /XYZ 79.822 343.201 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 676.177 null ] >>
endobj
916 0 obj
-<< /D [ 895 0 R /XYZ 79.822 332.242 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 665.218 null ] >>
endobj
917 0 obj
-<< /D [ 895 0 R /XYZ 79.822 321.283 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 654.259 null ] >>
+endobj
+221 0 obj
+<< /D [ 907 0 R /XYZ 79.37 616.847 null ] >>
endobj
918 0 obj
-<< /D [ 895 0 R /XYZ 79.822 310.324 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 581.061 null ] >>
endobj
919 0 obj
-<< /D [ 895 0 R /XYZ 79.822 299.365 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 570.102 null ] >>
endobj
920 0 obj
-<< /D [ 895 0 R /XYZ 79.822 234.717 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 559.143 null ] >>
endobj
921 0 obj
-<< /D [ 895 0 R /XYZ 79.822 223.758 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 548.184 null ] >>
endobj
922 0 obj
-<< /D [ 895 0 R /XYZ 79.822 212.799 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 537.225 null ] >>
endobj
923 0 obj
-<< /D [ 895 0 R /XYZ 79.822 201.84 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 526.266 null ] >>
endobj
924 0 obj
-<< /D [ 895 0 R /XYZ 79.822 190.881 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 515.308 null ] >>
endobj
925 0 obj
-<< /D [ 895 0 R /XYZ 79.822 179.923 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 504.349 null ] >>
endobj
926 0 obj
-<< /D [ 895 0 R /XYZ 79.822 168.964 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 493.39 null ] >>
endobj
927 0 obj
-<< /D [ 895 0 R /XYZ 79.822 158.005 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 428.633 null ] >>
endobj
928 0 obj
-<< /D [ 895 0 R /XYZ 79.822 147.046 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 417.674 null ] >>
endobj
929 0 obj
-<< /D [ 895 0 R /XYZ 79.822 136.087 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 406.715 null ] >>
endobj
-894 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F59 346 0 R /F84 425 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-932 0 obj
-<< /Filter /FlateDecode /Length 2177 >>
-stream
-x[n#;+Hq|Ynp3]eJNUVQIR<$OHϗWO$SzQ<>Y4?Jiᢷ?EWG''1zoA \wu[j__.%tyAWd6Al;{EwwpZ:~J/~ 8
-m1 EŠ51V[5R<=pBzC=4?3d(<x)fc!*+
-<GdnAQe{hHBڈC{rXB[3 kD٧{F0M@-3B
-BbcHn˃l/0QdMmT_re+RiqK#[&V]:dIqVylDnV0l`Bb5Ԛ;9qº!B\G;SkIcV8@.jP"C){5pIʺe=۽ h֯)krSiΜSh*"SnPלm1{T7C>R9<TYXyV5A)Ll+VkiTh5hE%egϺ.unn<{CyZϻJ"oDH'%-%1`ED}
-Vtj@Sz3" )A&odI(LM e8Ҽ\R+n2Ev!1'A\UVfQ
-zG^_kD
-rR83y*-P
-y`6O7e :*m7>R
-:27xSd1 }8\m##66
-vPgeH\IE` v _OXF1F񤃽dV:ťf(Q{\^z{_0hCyB; Ho}r\s!M
-] e_K>n\aGn3'9`sxiN$cݑ)_u0.do!AAu_J!<͉d㛀x?~_^
-endstream
+930 0 obj
+<< /D [ 907 0 R /XYZ 79.822 395.756 null ] >>
endobj
931 0 obj
-<< /Type /Page /Contents 932 0 R /Resources 930 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 627 0 R >>
+<< /D [ 907 0 R /XYZ 79.822 384.797 null ] >>
+endobj
+932 0 obj
+<< /D [ 907 0 R /XYZ 79.822 373.838 null ] >>
endobj
933 0 obj
-<< /D [ 931 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 362.879 null ] >>
endobj
934 0 obj
-<< /D [ 931 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 351.92 null ] >>
endobj
935 0 obj
-<< /D [ 931 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 340.961 null ] >>
endobj
936 0 obj
-<< /D [ 931 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 330.002 null ] >>
endobj
937 0 obj
-<< /D [ 931 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 263.253 null ] >>
endobj
938 0 obj
-<< /D [ 931 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 252.294 null ] >>
endobj
939 0 obj
-<< /D [ 931 0 R /XYZ 79.822 664.222 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 241.335 null ] >>
endobj
940 0 obj
-<< /D [ 931 0 R /XYZ 79.822 653.263 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 230.376 null ] >>
endobj
941 0 obj
-<< /D [ 931 0 R /XYZ 79.822 642.304 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 219.417 null ] >>
endobj
942 0 obj
-<< /D [ 931 0 R /XYZ 79.822 631.345 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 158.645 null ] >>
endobj
943 0 obj
-<< /D [ 931 0 R /XYZ 79.822 620.386 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 147.686 null ] >>
endobj
944 0 obj
-<< /D [ 931 0 R /XYZ 79.822 609.427 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 136.727 null ] >>
endobj
945 0 obj
-<< /D [ 931 0 R /XYZ 79.822 598.468 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 125.768 null ] >>
endobj
946 0 obj
-<< /D [ 931 0 R /XYZ 79.822 587.509 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 114.809 null ] >>
endobj
947 0 obj
-<< /D [ 931 0 R /XYZ 79.822 576.55 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 103.851 null ] >>
endobj
948 0 obj
-<< /D [ 931 0 R /XYZ 79.822 565.591 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 92.892 null ] >>
endobj
949 0 obj
-<< /D [ 931 0 R /XYZ 79.822 536.7 null ] >>
+<< /D [ 907 0 R /XYZ 79.822 81.933 null ] >>
endobj
-950 0 obj
-<< /D [ 931 0 R /XYZ 79.822 525.741 null ] >>
-endobj
-951 0 obj
-<< /D [ 931 0 R /XYZ 79.822 514.782 null ] >>
+906 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
952 0 obj
-<< /D [ 931 0 R /XYZ 79.822 503.823 null ] >>
+<< /Filter /FlateDecode /Length 2442 >>
+stream
+x[n6+Cw0`[kr_í((ɶ= lb*_t< >l߯_NH C".N3pb`܈ߗ97Rrx1ot-!5P*%ϟi宼rScZs&8P64&,P*`߯B_|x j߲I{a|GP'p܆MJ~5x%“h-E3; +nXmd!_7R+姢-?Bn@ Qd!Y/(L$*;~+# <0-6Y,hQ/٪d,0wXV==3Z_Zj˓<tүY\O*+?ᖼ*ET]'u3YPg2
+,`nBk r%gKNR؏fD@<M5̺kX:fK/IPYwX
+^X(!)@kNBd;Xvm7T,w}h!&
+cqUqYjLBO =/y0B60;4%fۯ#lBe^*bָ~6sYn襴P̍֬پX2s^ K.Be#y :,BmghnïqivP ,]bBQ֗z"!K*(3.4e2/\
+ic/MV)O:垊-Rٔϔ~|㣫Pqo 2 $ec6jLU T~=@+6B޴cVJܵK
+ fmP*SMOKSK4, Y o'0d?W[^1<}!?UW݆3Be]SK4^:}7~\G0 uB\j`n]'ϱksMՊqmwM;6{w8Hs$ZK#.@>l|eIV)YV2zqۛaV[+F|AZug?@ k=JM|?9(m
+гяBFc}@"YdնL|[ --RB٢"ߩ{|'siu7!Vh#(Q+MZz=s#Ge|Kbw%GȏxPIgڜp
+ 8V-t-17P#WDsƴ d_jVqm28&:K(5Xpa܎oN |܉Xby;Ժ+c Z؈tEACO]62M_l)yݛQ|#P3gq8-!i6/wp``z7yJiѤ ;Swkh+oZL Az[+#ؿ01
+endstream
+endobj
+951 0 obj
+<< /Type /Page /Contents 952 0 R /Resources 950 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 633 0 R >>
endobj
953 0 obj
-<< /D [ 931 0 R /XYZ 79.822 492.864 null ] >>
+<< /D [ 951 0 R /XYZ 78.37 808.885 null ] >>
endobj
954 0 obj
-<< /D [ 931 0 R /XYZ 79.822 481.905 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 768.829 null ] >>
endobj
955 0 obj
-<< /D [ 931 0 R /XYZ 79.822 470.946 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 757.87 null ] >>
endobj
956 0 obj
-<< /D [ 931 0 R /XYZ 79.822 459.987 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 729.015 null ] >>
endobj
957 0 obj
-<< /D [ 931 0 R /XYZ 79.822 449.029 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 718.056 null ] >>
endobj
958 0 obj
-<< /D [ 931 0 R /XYZ 79.822 438.07 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 707.097 null ] >>
endobj
959 0 obj
-<< /D [ 931 0 R /XYZ 79.822 427.111 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 696.138 null ] >>
endobj
960 0 obj
-<< /D [ 931 0 R /XYZ 79.822 416.152 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 685.179 null ] >>
endobj
961 0 obj
-<< /D [ 931 0 R /XYZ 79.822 405.193 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 674.22 null ] >>
endobj
962 0 obj
-<< /D [ 931 0 R /XYZ 79.822 394.234 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 663.261 null ] >>
endobj
963 0 obj
-<< /D [ 931 0 R /XYZ 79.822 383.275 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 652.302 null ] >>
endobj
964 0 obj
-<< /D [ 931 0 R /XYZ 79.822 372.316 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 641.344 null ] >>
endobj
965 0 obj
-<< /D [ 931 0 R /XYZ 79.822 361.357 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 630.385 null ] >>
endobj
966 0 obj
-<< /D [ 931 0 R /XYZ 79.822 350.398 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 619.426 null ] >>
endobj
967 0 obj
-<< /D [ 931 0 R /XYZ 79.822 339.44 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 608.467 null ] >>
endobj
968 0 obj
-<< /D [ 931 0 R /XYZ 79.822 328.481 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 597.508 null ] >>
endobj
969 0 obj
-<< /D [ 931 0 R /XYZ 79.822 299.589 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 586.549 null ] >>
endobj
970 0 obj
-<< /D [ 931 0 R /XYZ 79.822 288.63 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 575.59 null ] >>
endobj
971 0 obj
-<< /D [ 931 0 R /XYZ 79.822 259.738 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 564.631 null ] >>
endobj
972 0 obj
-<< /D [ 931 0 R /XYZ 79.822 248.78 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 553.672 null ] >>
endobj
973 0 obj
-<< /D [ 931 0 R /XYZ 79.822 237.821 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 542.713 null ] >>
endobj
974 0 obj
-<< /D [ 931 0 R /XYZ 79.822 226.862 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 531.755 null ] >>
endobj
975 0 obj
-<< /D [ 931 0 R /XYZ 79.822 215.903 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 520.796 null ] >>
endobj
976 0 obj
-<< /D [ 931 0 R /XYZ 79.822 204.944 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 491.94 null ] >>
endobj
977 0 obj
-<< /D [ 931 0 R /XYZ 79.822 193.985 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 480.981 null ] >>
endobj
978 0 obj
-<< /D [ 931 0 R /XYZ 79.822 183.026 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 452.125 null ] >>
endobj
979 0 obj
-<< /D [ 931 0 R /XYZ 79.822 172.067 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 441.167 null ] >>
endobj
980 0 obj
-<< /D [ 931 0 R /XYZ 79.822 161.108 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 430.208 null ] >>
endobj
981 0 obj
-<< /D [ 931 0 R /XYZ 79.822 150.149 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 419.249 null ] >>
endobj
982 0 obj
-<< /D [ 931 0 R /XYZ 79.822 139.19 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 408.29 null ] >>
endobj
983 0 obj
-<< /D [ 931 0 R /XYZ 79.822 128.232 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 397.331 null ] >>
endobj
984 0 obj
-<< /D [ 931 0 R /XYZ 79.822 117.273 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 386.372 null ] >>
endobj
985 0 obj
-<< /D [ 931 0 R /XYZ 79.822 106.314 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 375.413 null ] >>
endobj
986 0 obj
-<< /D [ 931 0 R /XYZ 79.822 95.355 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 364.454 null ] >>
endobj
987 0 obj
-<< /D [ 931 0 R /XYZ 79.822 84.396 null ] >>
-endobj
-930 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 951 0 R /XYZ 79.822 353.495 null ] >>
endobj
-992 0 obj
-<< /Filter /FlateDecode /Length 2848 >>
-stream
-x[n\;IW@v pl0hq+.Ee~ ZjݥOUQ_~p]b L:}F0n?rnϕs- /4ޝ80-b%*|=P틖:ܑ*q]O>Qc3%e\O1& 0Rv{P0m۹mhŔ0JR1Y:Z) w$V߳e}0M^?Š[BIQQ_i:嚟{IoU• 9"\{DBrr|S2,,RO s +.('^3> 6 mCfTٔ}ߤ&ʕy6N1P~R517Rnk Ѷ-۶] ݪ{(+ōGMĿf;%INߊTa5^otkc#m5|mОT1} }-iT ,A3 5s)C0זbQY,Ћc'08Wnޤ})?a*J%ʼ#1񷤃ᇌh|W5EVVdR2-IdIQ|**O98Mm*ﲬ0>`GbEA]ՀW o_+jI,Ӻ7d|
-0o=ݘ^}(%3W:lH){IrՙfDfM*Ɠ~_;R^mOU封j
-=O~b=BMds[c&>dvۊz#E>l4[ߐ{*Ak>*Ҝ OmJ_-E[],AbbT4A'|EZtXSi"lֲ+
-fXo S7 ȅQ; qal)OD8
-fHfJ R`V-K*y"` H
-L-tAwUġ#\p$(`S:6cS|x&* ޮ9ELE],Z$ 6[:3>Qx|Z: c r=ScF* DC(s~UemEVl;@OM7}4{;wT"B̤5&T rz&"qT?V<|RPwɎ&J,e$X!Rm8Δgq dس "4rJU%![#"eѯ >Zoz"sfXCO!Զޖ7 n5a:\3cz(=BJ(%<Acx_ɕXa8ũ @={s|TZˡh0 a"}αQ?;LCWgH%[ȘeI,|{x2S 23ja(*cF\<Yrr&o&ɜZ`< +]|j*JWs0VptWJk+uElDE(>\%6>:|&kxV"SyĶ{=wZsy z})\kWk7I=մXZÜHĦsK*β4wsi.fyF\i4CMwqg!6h*G%
-WU?8ЦEWJ6P&֫&͢MZhC&@ Uq1^;\C;e39VhyrRFT7:y;Ŷz!~$gAS**R>+#u^{m
-lS0R!M!A8njقerLp/.
-endstream
+988 0 obj
+<< /D [ 951 0 R /XYZ 79.822 342.536 null ] >>
endobj
-991 0 obj
-<< /Type /Page /Contents 992 0 R /Resources 990 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R /Annots 1027 0 R >>
+989 0 obj
+<< /D [ 951 0 R /XYZ 79.822 331.578 null ] >>
endobj
-1027 0 obj
-[ 988 0 R 989 0 R ]
+990 0 obj
+<< /D [ 951 0 R /XYZ 79.822 320.619 null ] >>
endobj
-988 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 130.17 348.109 144.894 360.065 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+991 0 obj
+<< /D [ 951 0 R /XYZ 79.822 309.66 null ] >>
endobj
-989 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 160.615 348.109 172.571 360.065 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+992 0 obj
+<< /D [ 951 0 R /XYZ 79.822 298.701 null ] >>
endobj
993 0 obj
-<< /D [ 991 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 287.742 null ] >>
endobj
994 0 obj
-<< /D [ 991 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 276.783 null ] >>
endobj
995 0 obj
-<< /D [ 991 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 265.824 null ] >>
endobj
996 0 obj
-<< /D [ 991 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 254.865 null ] >>
endobj
997 0 obj
-<< /D [ 991 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 243.906 null ] >>
endobj
998 0 obj
-<< /D [ 991 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 232.947 null ] >>
endobj
999 0 obj
-<< /D [ 991 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 221.988 null ] >>
endobj
1000 0 obj
-<< /D [ 991 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 211.03 null ] >>
endobj
1001 0 obj
-<< /D [ 991 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 200.071 null ] >>
endobj
1002 0 obj
-<< /D [ 991 0 R /XYZ 79.822 681.158 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 189.112 null ] >>
endobj
1003 0 obj
-<< /D [ 991 0 R /XYZ 79.822 670.199 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 178.153 null ] >>
endobj
1004 0 obj
-<< /D [ 991 0 R /XYZ 79.822 581.532 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 167.194 null ] >>
endobj
1005 0 obj
-<< /D [ 991 0 R /XYZ 79.822 570.573 null ] >>
-endobj
-1006 0 obj
-<< /D [ 991 0 R /XYZ 79.822 529.726 null ] >>
+<< /D [ 951 0 R /XYZ 79.822 78.635 null ] >>
endobj
-1007 0 obj
-<< /D [ 991 0 R /XYZ 79.822 518.767 null ] >>
+950 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1008 0 obj
-<< /D [ 991 0 R /XYZ 79.822 477.92 null ] >>
+1010 0 obj
+<< /Filter /FlateDecode /Length 2679 >>
+stream
+x[Ɏ#9WJ%Q$H nN2  ٮ+X(")yᗟomBބ_*V]kq˿9ǿgo/9nDR@|S7pw\ ΥIq~.G;ܧᵗ6? _ھAOy5H߻g*D } uq2qLȄj]$J&|o \VQG M2
+m{z謣=ACTن'I-nNu:7~|VqCr5 
+" ܖ(o$US,
+A"ݕv.·!mPVn2t)^:"#bvD/!{̪ew2HGFQ&իFM`;Zd] iv T4ĘJ{͏3I&r%Q2-{j)
+`A:x/W+Ԧ~?^17ɹG)3``cg HGlEPb홥$DV/v\LT_
+$xk'ys_weSKHN65BMc`Cx(rccE$ڶF5XL5nt$8w̯Ij 705{鴒G'//rvkWG֚yiCi,Q>(E6]Vf(uwIpj}>%ih+8T7^>-
+DZ:
+hH$SQ89ۧU?ri19&b=LKjMbA AݖB R#hn,)&.n%R΁~H^`4(ќ>s}
+~cClNW7!}: )NA=ZƁDHjv+XʼwԄ ˝ݦq&4[@EMCGf  xأ$=c+ W@u`Auzy?;f)%B>"?
+e(^ "R~S;zg7dSjkE;BfBûDA5SBi,2">PE>e5
+ڍ*s۝/tEȔtu6i$βpDh"Lu4DJ_3׎atz?ç
+endstream
endobj
1009 0 obj
-<< /D [ 991 0 R /XYZ 79.822 437.073 null ] >>
+<< /Type /Page /Contents 1010 0 R /Resources 1008 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R /Annots 1053 0 R >>
endobj
-1010 0 obj
-<< /D [ 991 0 R /XYZ 79.822 426.115 null ] >>
+1053 0 obj
+[ 1006 0 R 1007 0 R ]
+endobj
+1006 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 130.17 546.366 144.894 558.321 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+endobj
+1007 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 160.615 546.366 172.571 558.321 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
endobj
1011 0 obj
-<< /D [ 991 0 R /XYZ 79.822 410.174 null ] >>
+<< /D [ 1009 0 R /XYZ 78.37 808.885 null ] >>
endobj
1012 0 obj
-<< /D [ 991 0 R /XYZ 79.822 399.215 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 768.829 null ] >>
endobj
1013 0 obj
-<< /D [ 991 0 R /XYZ 79.822 388.256 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 727.983 null ] >>
endobj
1014 0 obj
-<< /D [ 991 0 R /XYZ 79.822 345.417 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 717.024 null ] >>
endobj
1015 0 obj
-<< /D [ 991 0 R /XYZ 79.822 334.458 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 676.177 null ] >>
endobj
1016 0 obj
-<< /D [ 991 0 R /XYZ 79.822 323.499 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 635.33 null ] >>
endobj
1017 0 obj
-<< /D [ 991 0 R /XYZ 79.822 258.742 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 624.371 null ] >>
endobj
1018 0 obj
-<< /D [ 991 0 R /XYZ 79.822 247.783 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 608.431 null ] >>
endobj
1019 0 obj
-<< /D [ 991 0 R /XYZ 79.822 236.824 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 597.472 null ] >>
endobj
1020 0 obj
-<< /D [ 991 0 R /XYZ 79.822 225.865 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 586.513 null ] >>
endobj
1021 0 obj
-<< /D [ 991 0 R /XYZ 79.822 214.907 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 543.674 null ] >>
endobj
1022 0 obj
-<< /D [ 991 0 R /XYZ 79.822 203.948 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 532.715 null ] >>
endobj
1023 0 obj
-<< /D [ 991 0 R /XYZ 79.822 163.101 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 521.756 null ] >>
endobj
1024 0 obj
-<< /D [ 991 0 R /XYZ 79.822 152.142 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 456.999 null ] >>
endobj
1025 0 obj
-<< /D [ 991 0 R /XYZ 79.822 141.183 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 446.04 null ] >>
endobj
-990 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+1026 0 obj
+<< /D [ 1009 0 R /XYZ 79.822 435.081 null ] >>
endobj
-1030 0 obj
-<< /Filter /FlateDecode /Length 1816 >>
-stream
-xZn8 +WW"Phn0ۙv$Y%*i/f&c"i?yr|yQ7`
-Ah(!:|{UJK8hΠR+)-Vo`y w<Na1,re\#b-irk¡Ü+t|Υ;d3
-8:42hqO<0\UͽHV*E
-=\sZx=Mtt
-O2\,2 }fD*7Cd(dԌr>B#48>!sk eR Cԙ1%>)1޿V|ȩ&|r= 4bRj0T
- ݎ %"s
- e&2Ts|ONCbT_&T ⚓s%E<}.r)Q K
--V![ZfJM(ElʩQ{Ӵy!IEܼQARkQRŬZѶ45hX
-M4͝Ē.Er; M(!{
-"]z*j2y=B(ߙ1G CeNSA :V ʉ\1)MYc'"
-~t0]I?COLp@Ma(KLoeݶ'/ 妏
-\ 0V6w Ʊ]v`{DtQ˃_Zmӽ6"f'ZDhHhr-@Å5bs3F~.ʵ/ך4NF*%y<3%aJm-^Q cUzJ0fVAg` ݅vڞR%9ڲ[~o,a҇{֢܊LN[hOKhg$Pkj L1;a=)12y]{;Wz0"cl'"MNfWbrA]Z>C)gmTگy" [,^Vt>lI%ɝ7z+ 2Zx8A%L(C~lt޲o{;ZާCaF)0!l,]VysxF]o.̒($9iPE
-3oN0,I)zP 6PR~mW^xk!^Vܨvo-eqۿM]*
-endstream
+1027 0 obj
+<< /D [ 1009 0 R /XYZ 79.822 424.122 null ] >>
+endobj
+1028 0 obj
+<< /D [ 1009 0 R /XYZ 79.822 413.163 null ] >>
endobj
1029 0 obj
-<< /Type /Page /Contents 1030 0 R /Resources 1028 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1009 0 R /XYZ 79.822 402.204 null ] >>
+endobj
+1030 0 obj
+<< /D [ 1009 0 R /XYZ 79.822 361.357 null ] >>
endobj
1031 0 obj
-<< /D [ 1029 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 350.398 null ] >>
endobj
1032 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 742.926 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 339.44 null ] >>
endobj
1033 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 731.968 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 298.593 null ] >>
endobj
1034 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 721.009 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 287.634 null ] >>
endobj
1035 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 710.05 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 276.675 null ] >>
endobj
1036 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 699.091 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 265.716 null ] >>
endobj
1037 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 688.132 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 254.757 null ] >>
endobj
1038 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 677.173 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 243.798 null ] >>
endobj
1039 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 666.214 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 232.839 null ] >>
endobj
1040 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 655.255 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 221.88 null ] >>
endobj
1041 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 644.296 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 210.921 null ] >>
endobj
1042 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 613.412 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 199.963 null ] >>
endobj
1043 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 602.453 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 169.078 null ] >>
endobj
1044 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 591.494 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 158.119 null ] >>
endobj
1045 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 580.535 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 147.161 null ] >>
endobj
1046 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 569.577 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 136.202 null ] >>
endobj
1047 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 558.618 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 125.243 null ] >>
endobj
1048 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 547.659 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 114.284 null ] >>
endobj
1049 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 536.7 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 103.325 null ] >>
endobj
1050 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 525.741 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 92.366 null ] >>
endobj
1051 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 514.782 null ] >>
-endobj
-1052 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 503.823 null ] >>
+<< /D [ 1009 0 R /XYZ 79.822 81.407 null ] >>
endobj
-1053 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 492.864 null ] >>
+1008 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1054 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 481.905 null ] >>
+1056 0 obj
+<< /Filter /FlateDecode /Length 1820 >>
+stream
+xZMs6 W,gvv&N9NZ"$Aq"KO#<ҧNA+__ׇONd,^~0"}2$(ӟ?Ͽ^x%SR9Fr&p(`fT_7hmcOH?y{3}qQB.w=/I;R,Ǧ<
+0}6U`E\]S+VkFУlfRiD)?-6]q
+1sZ,wEnIEXY!X`+@ݠ
+V.q7oEX*dÉ csɶF8fQѺլ"~(5~xW}i3Z9g;R猁9;sO7vT SqFA
+9 .,ngtdú|T)g>j;$o6ݲd-(V=("[ck8mV3)H󘵆Dյ ^؟ q)?Pb
+rGm;Ww)j:4>;;CsIA4{Y^ѓ[--ኰ'h&z*$J[&8fmIN
+fp|jެv`)ҍzh[el9~ÞM{oǸKk#nRoṲY;{[8E6Q/Oa|Sfa97ֵ1dT*ȩDjZ8b QgJ1qjqMjltV2
+(ʼUr^MV&Q*F妖o,[a# $玒?>sn$"LaYG=Bds\/kY+<]OPW;kT ռ" FA 2
+>\<_^?x
+endstream
endobj
1055 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 470.946 null ] >>
-endobj
-1056 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 459.987 null ] >>
+<< /Type /Page /Contents 1056 0 R /Resources 1054 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1057 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 449.029 null ] >>
+<< /D [ 1055 0 R /XYZ 78.37 808.885 null ] >>
endobj
1058 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 416.152 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 768.829 null ] >>
endobj
1059 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 405.193 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 757.87 null ] >>
endobj
1060 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 394.234 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 746.912 null ] >>
endobj
1061 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 383.275 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 735.953 null ] >>
endobj
1062 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 372.316 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 724.994 null ] >>
endobj
1063 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 361.357 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 714.035 null ] >>
endobj
1064 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 350.398 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 703.076 null ] >>
endobj
1065 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 339.44 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 670.872 null ] >>
endobj
1066 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 328.481 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 659.913 null ] >>
endobj
1067 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 317.522 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 648.954 null ] >>
endobj
1068 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 306.563 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 637.995 null ] >>
endobj
1069 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 295.604 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 627.036 null ] >>
endobj
1070 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 284.645 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 616.078 null ] >>
endobj
1071 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 273.686 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 605.119 null ] >>
endobj
1072 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 262.727 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 594.16 null ] >>
endobj
1073 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 251.768 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 583.201 null ] >>
endobj
1074 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 240.809 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 572.242 null ] >>
endobj
1075 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 229.851 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 561.283 null ] >>
endobj
1076 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 218.892 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 550.324 null ] >>
endobj
1077 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 207.933 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 539.365 null ] >>
endobj
1078 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 196.974 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 528.406 null ] >>
endobj
1079 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 186.015 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 517.447 null ] >>
endobj
1080 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 175.056 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 506.488 null ] >>
endobj
1081 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 164.097 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 495.53 null ] >>
endobj
1082 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 153.138 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 484.571 null ] >>
endobj
1083 0 obj
-<< /D [ 1029 0 R /XYZ 79.822 142.179 null ] >>
-endobj
-1028 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1055 0 R /XYZ 79.822 473.612 null ] >>
endobj
-1086 0 obj
-<< /Filter /FlateDecode /Length 1621 >>
-stream
-x[r8+#uZRTBnլj;m%q }::3;q8D?6`;/?qh=#k?1N|J:Ư=x:+~˶?). 1X¥)7x
-Wl8Ba <4"eHUey`o^<p+YhxEW,(^27y՝|kCr|1>XF\xrc,VS'[LsyD߆38A6t\pq׉KgZMCYqY
-c$* 풢(Aw›G -oU gK Ggձ;^ɼ疻Q 9j,?su PnϪq qPS~#$"]A̍,,N#QO'nɒU&1x5_AZ@-J ctaNڤܼ-JVg|_mv^Iɋ e.st)k*sSMomofU
- x+XE犔O#IERZʬeDzێ&͔ ]e
-ZB
-ԷT Fq:*xm%f;vc- 7h"ѵVb Y۠9b;Vy\ץyfhm~%n)AU䁖\UVZf9U$+Ļ3oΠ7C}?cAgрR"AUR^ȳ[&m^נ\}3J
-endstream
+1084 0 obj
+<< /D [ 1055 0 R /XYZ 79.822 462.653 null ] >>
endobj
1085 0 obj
-<< /Type /Page /Contents 1086 0 R /Resources 1084 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1055 0 R /XYZ 79.822 451.694 null ] >>
endobj
-1087 0 obj
-<< /D [ 1085 0 R /XYZ 78.37 808.885 null ] >>
+1086 0 obj
+<< /D [ 1055 0 R /XYZ 79.822 440.735 null ] >>
endobj
-225 0 obj
-<< /D [ 1085 0 R /XYZ 79.37 771.024 null ] >>
+1087 0 obj
+<< /D [ 1055 0 R /XYZ 79.822 429.776 null ] >>
endobj
1088 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 745.834 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 418.817 null ] >>
endobj
1089 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 734.875 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 407.858 null ] >>
endobj
1090 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 723.916 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 396.899 null ] >>
+endobj
+225 0 obj
+<< /D [ 1055 0 R /XYZ 79.37 358.072 null ] >>
endobj
1091 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 712.957 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 331.421 null ] >>
endobj
1092 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 701.998 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 320.462 null ] >>
endobj
1093 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 691.039 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 309.503 null ] >>
endobj
1094 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 680.08 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 298.544 null ] >>
endobj
1095 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 669.121 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 287.585 null ] >>
endobj
1096 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 658.162 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 276.626 null ] >>
endobj
1097 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 631.412 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 265.667 null ] >>
endobj
1098 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 620.453 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 254.708 null ] >>
endobj
1099 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 609.494 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 243.749 null ] >>
endobj
1100 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 598.536 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 232.79 null ] >>
endobj
1101 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 587.577 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 221.832 null ] >>
endobj
1102 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 576.618 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 194.441 null ] >>
endobj
1103 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 565.659 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 183.482 null ] >>
endobj
1104 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 554.7 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 172.523 null ] >>
endobj
1105 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 543.741 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 161.564 null ] >>
endobj
1106 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 532.782 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 150.605 null ] >>
endobj
1107 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 506.032 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 139.646 null ] >>
endobj
1108 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 495.073 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 128.687 null ] >>
endobj
1109 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 484.114 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 117.728 null ] >>
endobj
1110 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 473.155 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 106.77 null ] >>
endobj
1111 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 462.196 null ] >>
+<< /D [ 1055 0 R /XYZ 79.822 95.811 null ] >>
endobj
-1112 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 451.237 null ] >>
-endobj
-1113 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 440.278 null ] >>
+1054 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1114 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 429.32 null ] >>
+<< /Filter /FlateDecode /Length 1753 >>
+stream
+x[r#)+SUEGX5{mc@7HM!ٍFȞv !Ghoc6? |۾}߹an^MpmX0b7o71M~;S0oD
+K!b ư$04ƧoI{雟io]Fzh.+aI}ZK9JyHE}sTǣ3` jVhb(fPˤ/a%<3q,ng#YK\v0[D *;<=-QjM'_1Ri Äc
+ *l
+j
+C;:ƔBHMq,N]⒅h>Zt˫Ryvdǀ;VPS(~Q]0ΉZu;1P* c-k{tUhuBc1EJl Z5YTrm[l nn-*?AQ.hj
+e-mmkƣ.y&i~բo^6 KDQ]y\++-ʧ\%#nl-T@7Z!V߳.g4͈cl(7GޫBM* T{
+E EgQh<qα L(1DJ >˦POxNmz爼TԉQړIDMf( u򇒰;D']ߋf
+ʛBGID
+[Ա^ u3KEFX/}rQ?=tt[:8<|m`c'Vqn ={K4rJVO 9L) QxW[j6%FyΛ5N@ؐ1P̶u[K&`9s%OZ'QKK~,:`nЋc
+4κM>܂yPG ?e<9<Bhrw1[֛}:
+By%_L3V~<ذx1ZsOcyp|pߺ+UN'HJ
+S*xq
+=P]RoB69I
+>WtxW̳ Bz<ag,DW?<;d 4Jۋ }]x뻨 WĈ N6l Vm͑' v
+endstream
+endobj
+1113 0 obj
+<< /Type /Page /Contents 1114 0 R /Resources 1112 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1115 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 418.361 null ] >>
+<< /D [ 1113 0 R /XYZ 78.37 808.885 null ] >>
endobj
1116 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 407.402 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 768.829 null ] >>
endobj
1117 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 396.443 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 757.87 null ] >>
endobj
1118 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 385.484 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 746.912 null ] >>
endobj
1119 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 374.525 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 735.953 null ] >>
endobj
1120 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 363.566 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 724.994 null ] >>
endobj
1121 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 352.607 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 714.035 null ] >>
endobj
1122 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 341.648 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 703.076 null ] >>
endobj
1123 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 330.689 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 692.117 null ] >>
endobj
1124 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 319.73 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 681.158 null ] >>
endobj
1125 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 308.772 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 670.199 null ] >>
endobj
1126 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 297.813 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 659.24 null ] >>
endobj
1127 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 286.854 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 648.281 null ] >>
endobj
1128 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 275.895 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 637.322 null ] >>
endobj
1129 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 264.936 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 626.364 null ] >>
endobj
1130 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 253.977 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 615.405 null ] >>
endobj
1131 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 243.018 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 604.446 null ] >>
endobj
1132 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 232.059 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 593.487 null ] >>
endobj
1133 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 221.1 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 582.528 null ] >>
endobj
1134 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 210.141 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 571.569 null ] >>
endobj
1135 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 199.183 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 560.61 null ] >>
endobj
1136 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 188.224 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 549.651 null ] >>
endobj
1137 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 177.265 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 538.692 null ] >>
endobj
1138 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 166.306 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 527.733 null ] >>
endobj
1139 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 155.347 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 516.775 null ] >>
endobj
1140 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 144.388 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 505.816 null ] >>
endobj
1141 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 133.429 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 494.857 null ] >>
endobj
1142 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 122.47 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 483.898 null ] >>
endobj
1143 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 111.511 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 472.939 null ] >>
endobj
1144 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 100.552 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 461.98 null ] >>
endobj
1145 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 89.593 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 451.021 null ] >>
endobj
1146 0 obj
-<< /D [ 1085 0 R /XYZ 79.822 78.635 null ] >>
-endobj
-1084 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F59 346 0 R /F84 425 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1113 0 R /XYZ 79.822 440.062 null ] >>
endobj
-1149 0 obj
-<< /Filter /FlateDecode /Length 2057 >>
-stream
-x[r#)+@pȶ&bϾmu]PFv4٭GgSIд<sORx|:~<}?;pIɃ:8#%%$ǿ?D/%寏?d~r'Bׂ(48(. c_XCxc=+? [
-&sy.J G6p6J#\=
-7GWlp16Ff"p
-KSƳ4%
-rJ>J k,GĞڃI`574چ2\/,9Sū$ګ]A ;jZ@ I
-]jiF]!NMGIc̹cXXD!:ڎ-&BN Ԟa`1HAG,_dQ azzJĔW^|1j`ǔb0U9 *~-qڣԤ3SSI㘚}<MOomA9w/C9zmΥ\MVs,YJ{rx3Pwt9{[vICXhUoS\KO[ I3 MꍦN$e
-Rt{ Fg 9wQLґzΙoZHr|wjKڍ
-Q4],!<kD*d:_;֤Znlrf-L/2hS+5Η֚9X=r\y CL<C3:#9-] Z+C} ]Ն
-_|r?WW̭v5w~.n]+]h 9ɹZ7<"HԐs|GPM\0xA Tkbv9e(zn_>6w"76-/N~ZHm8͓n|f;LB)7zC+i]"crCvB
-Zm֫nXVݕsIe'lQ<mRCܗP&nAXa7{a+ N Cu\sAj2/R*vmQ{=p~
-GCEK=H~\7Sn&T|Xa&:h)76d|x^oZ
-endstream
+1147 0 obj
+<< /D [ 1113 0 R /XYZ 79.822 429.103 null ] >>
endobj
1148 0 obj
-<< /Type /Page /Contents 1149 0 R /Resources 1147 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1113 0 R /XYZ 79.822 418.144 null ] >>
+endobj
+1149 0 obj
+<< /D [ 1113 0 R /XYZ 79.822 407.186 null ] >>
endobj
1150 0 obj
-<< /D [ 1148 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 396.227 null ] >>
endobj
1151 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 385.268 null ] >>
endobj
1152 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 374.309 null ] >>
endobj
1153 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 363.35 null ] >>
endobj
1154 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 352.391 null ] >>
endobj
1155 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 341.432 null ] >>
endobj
1156 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 330.473 null ] >>
endobj
1157 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 319.514 null ] >>
endobj
1158 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 308.555 null ] >>
endobj
1159 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 681.158 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 297.596 null ] >>
endobj
1160 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 670.199 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 286.638 null ] >>
endobj
1161 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 659.24 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 275.679 null ] >>
endobj
1162 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 648.281 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 264.72 null ] >>
endobj
1163 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 637.322 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 253.761 null ] >>
endobj
1164 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 626.364 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 242.802 null ] >>
endobj
1165 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 615.405 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 231.843 null ] >>
endobj
1166 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 604.446 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 220.884 null ] >>
endobj
1167 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 553.16 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 209.925 null ] >>
endobj
1168 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 542.201 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 198.966 null ] >>
endobj
1169 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 514.479 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 188.007 null ] >>
endobj
1170 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 503.52 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 177.049 null ] >>
endobj
1171 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 492.561 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 166.09 null ] >>
endobj
1172 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 481.602 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 155.131 null ] >>
endobj
1173 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 455.786 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 144.172 null ] >>
endobj
1174 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 444.827 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 133.213 null ] >>
endobj
1175 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 433.868 null ] >>
-endobj
-1176 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 422.909 null ] >>
+<< /D [ 1113 0 R /XYZ 79.822 81.407 null ] >>
endobj
-1177 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 411.95 null ] >>
+1112 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1178 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 400.991 null ] >>
+<< /Filter /FlateDecode /Length 2101 >>
+stream
+x[r+ ͫ*x'Uw٭;gtz
+Ƀ:8-5JH_*%A) ?/2c<9:8AW(ip0'>\ꫬhH(FJpg>;Xo?1.#+)mB{Qʙ')կ}KU \㩜|n~M7M ./ǀqed mlhǺ&{.FQ(cH#ieՖi2'u"|ñ:BOoI]1ҠcҲ¯pH˻LR89
+4
+eC}N݉
+/~sNxߢ2n ӱ-
+qLʟgU3 )1Z[?GS(iAc(R0QԜɏ}HB1kQ}F(
+mMc?Cy=6*FuIFEyw0v6_t=|glQE Mkj8Tm,i])A뙯ݓH{?(j֤:5%6ms~ &&* f\gu;!sBeƉ-C)1#rxa
+;2>rO{V Dis, (7仼nb
+MdÉ!CwUM!+l]i˺qֺVWG7Fh@ V0i50sSJrUOH˜R
+Rц>wWz߽hoM/$b`YmσV%yNk(}3D3a ({r`8VNRǑz4$ -Z-o-RIy79EREO]qrGi3Ή(̈J@4Ac Co܃fWaZj!J\*<U֛Z+R98忦tq9sR;
+0zf >ZTl4L'VxqqOt(Lы~Q)kHd_@ski~z(/0&-3)z| ¤`6ou?8
+endstream
+endobj
+1177 0 obj
+<< /Type /Page /Contents 1178 0 R /Resources 1176 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1179 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 390.032 null ] >>
+<< /D [ 1177 0 R /XYZ 78.37 808.885 null ] >>
endobj
1180 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 379.073 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 768.829 null ] >>
endobj
1181 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 368.114 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 740.934 null ] >>
endobj
1182 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 357.155 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 729.975 null ] >>
endobj
1183 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 346.197 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 719.016 null ] >>
endobj
1184 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 335.238 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 708.057 null ] >>
endobj
1185 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 324.279 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 697.098 null ] >>
endobj
1186 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 313.32 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 686.139 null ] >>
endobj
1187 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 302.361 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 675.181 null ] >>
endobj
1188 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 291.402 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 664.222 null ] >>
endobj
1189 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 280.443 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 653.263 null ] >>
endobj
1190 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 269.484 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 642.304 null ] >>
endobj
1191 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 258.525 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 631.345 null ] >>
endobj
1192 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 247.566 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 620.386 null ] >>
endobj
1193 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 236.608 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 594.483 null ] >>
endobj
1194 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 225.649 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 583.524 null ] >>
endobj
1195 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 214.69 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 572.565 null ] >>
endobj
1196 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 203.731 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 561.606 null ] >>
endobj
1197 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 192.772 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 550.648 null ] >>
endobj
1198 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 181.813 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 539.689 null ] >>
endobj
1199 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 170.854 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 528.73 null ] >>
endobj
1200 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 133.429 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 517.771 null ] >>
endobj
1201 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 122.47 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 506.812 null ] >>
endobj
1202 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 111.511 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 495.853 null ] >>
endobj
1203 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 100.552 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 484.894 null ] >>
endobj
1204 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 89.593 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 473.935 null ] >>
endobj
1205 0 obj
-<< /D [ 1148 0 R /XYZ 79.822 78.635 null ] >>
-endobj
-1147 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F81 377 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1177 0 R /XYZ 79.822 462.976 null ] >>
endobj
-1208 0 obj
-<< /Filter /FlateDecode /Length 2073 >>
-stream
-x[r6+ӃnUSFVr-kr_
-$,P@B*e>eF?syI7O'TAk=oNM=;LJr -J!ϓ"Q)sʼOL/-=!>-Qo<@(m
-H[aI ^'&,>C_ZǢM<5zgyXd"ÒOK՚ui'lA'KIokK%Q+QH[$R4IgC*5pˉ>,TJ˙qYD >teQ\}u7#M\cy~(F2y;8lz$`%\SEVJ\&EKGR}7q|I-m!HP;A %>'j\AcU7ݫ_tIē]{!I sjH]+(ɥ.5?DEĤY$dYf&<[ϧfwj'Xw|PeyhQ.-+jkbi3P9O{;CG79f#xWg98lA>v %
-JEQb̹5_!vk<X  qk8umӲ
-kQS\t@;3c(NJgVå
-`:?sc`YeU q?n<errc()eY:yJw;". NʯYg)pe]Jpq}dRҵ8* 'U[*W9n5.tnO~4La.-,B\
-9 p K^ŷnZr}6#qcĴ(|Um]mKEBEV=/;{1^!TcS,2m3[~9 e_@z|.t-
-9-ʚo;7>mRbOe2͖3bA 
- ePxfRTWpl]`lCY;h"vv{+ϵDPDC٦Yk{$ȎGPxТӱy C)ӲT>k!G~@+ݩj䞒h{~="w<Q8"=79'ZlPw Җ[l_z]-yogI0U6˿Fȯ
-endstream
+1206 0 obj
+<< /D [ 1177 0 R /XYZ 79.822 452.017 null ] >>
endobj
1207 0 obj
-<< /Type /Page /Contents 1208 0 R /Resources 1206 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1177 0 R /XYZ 79.822 441.058 null ] >>
+endobj
+1208 0 obj
+<< /D [ 1177 0 R /XYZ 79.822 430.1 null ] >>
endobj
1209 0 obj
-<< /D [ 1207 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 419.141 null ] >>
endobj
1210 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 408.182 null ] >>
endobj
1211 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 397.223 null ] >>
endobj
1212 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 386.264 null ] >>
endobj
1213 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 375.305 null ] >>
endobj
1214 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 364.346 null ] >>
endobj
1215 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 687.136 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 353.387 null ] >>
endobj
1216 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 676.177 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 342.428 null ] >>
endobj
1217 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 665.218 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 331.469 null ] >>
endobj
1218 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 654.259 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 320.511 null ] >>
endobj
1219 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 643.3 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 309.552 null ] >>
endobj
1220 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 632.341 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 271.694 null ] >>
endobj
1221 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 621.382 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 260.735 null ] >>
endobj
1222 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 610.423 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 249.776 null ] >>
endobj
1223 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 599.464 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 238.817 null ] >>
endobj
1224 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 588.506 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 227.858 null ] >>
endobj
1225 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 577.547 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 216.899 null ] >>
endobj
1226 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 566.588 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 205.94 null ] >>
endobj
1227 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 555.629 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 194.981 null ] >>
endobj
1228 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 544.67 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 184.022 null ] >>
endobj
1229 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 533.711 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 173.063 null ] >>
endobj
1230 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 522.752 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 162.105 null ] >>
endobj
1231 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 511.793 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 124.247 null ] >>
endobj
1232 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 500.834 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 113.288 null ] >>
endobj
1233 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 489.875 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 102.329 null ] >>
endobj
1234 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 478.917 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 91.37 null ] >>
endobj
1235 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 467.958 null ] >>
-endobj
-1236 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 456.999 null ] >>
+<< /D [ 1177 0 R /XYZ 79.822 80.411 null ] >>
endobj
-1237 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 446.04 null ] >>
+1176 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1238 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 435.081 null ] >>
+<< /Filter /FlateDecode /Length 1798 >>
+stream
+x[r6+h,U)WYckr-kr_H4EiFsEK#&vNjGB NR; h_(eBzE_zv :gDk<GGz%$JYP1eѤ%z!xyl!#L=gz|Q\"g_;Q\=?ǣ\
+'5}7Pp\\6,Qr}E"W[)BVܤ&w7ɕ&(Lj)rMނoѸ6 L.69&
+xc.[Ÿ_+gZ1^L3̎lR,Jw #VE
+a=e'8!&vr=?k$!>Z+Sx@Dp<i~N7GgGP1:󂨆2_nW䎨"u(\ e5v4&mBV$b('DщYw8,9آ@'v$sVcwZld$J$A3gYD~$/V!kMi`_/70Y@ba܏ZE+RI
+m{1v5 -%9ʹ:Pu.1Z&|߶s@]dPYd
+M,bs);TȈ[s 冨> aƀscToQF{|@#]FNr*6nۺ1׻RJoEdI7|7 P`(.&0D:QՅ>@pmb(P.fl`!? yVi R#Ly1ƦU`?R[e.ˬ# o\6ZՋg([4pwxFKJhAyT*R)\6|3[U~UB9Ѣ<v#%oܮ
+`Pwn#50ǯ ެ:m !P,/q`ղp#+ FZNS=$lp@Bݠ_H'jew[pqҞ#yna 8WrVPSwuD^^ ^!S4c`=.v1BT(5Ymtrdb&qvVA(Zhz'3
+endstream
+endobj
+1237 0 obj
+<< /Type /Page /Contents 1238 0 R /Resources 1236 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1239 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 424.122 null ] >>
+<< /D [ 1237 0 R /XYZ 78.37 808.885 null ] >>
endobj
1240 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 413.163 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 768.829 null ] >>
endobj
1241 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 402.204 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 757.87 null ] >>
endobj
1242 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 391.245 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 746.912 null ] >>
endobj
1243 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 380.286 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 735.953 null ] >>
endobj
1244 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 369.327 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 724.994 null ] >>
endobj
1245 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 358.369 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 714.035 null ] >>
endobj
1246 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 347.41 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 703.076 null ] >>
endobj
1247 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 336.451 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 692.117 null ] >>
endobj
1248 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 325.492 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 681.158 null ] >>
endobj
1249 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 314.533 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 670.199 null ] >>
endobj
1250 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 303.574 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 659.24 null ] >>
endobj
1251 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 292.615 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 648.281 null ] >>
endobj
1252 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 281.656 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 637.322 null ] >>
endobj
1253 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 270.697 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 626.364 null ] >>
endobj
1254 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 259.738 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 615.405 null ] >>
endobj
1255 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 248.78 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 604.446 null ] >>
endobj
1256 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 237.821 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 593.487 null ] >>
endobj
1257 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 226.862 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 582.528 null ] >>
endobj
1258 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 215.903 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 571.569 null ] >>
endobj
1259 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 204.944 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 560.61 null ] >>
endobj
1260 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 193.985 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 549.651 null ] >>
endobj
1261 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 183.026 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 538.692 null ] >>
endobj
1262 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 172.067 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 527.733 null ] >>
endobj
1263 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 161.108 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 516.775 null ] >>
endobj
1264 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 150.149 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 505.816 null ] >>
endobj
1265 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 139.19 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 494.857 null ] >>
endobj
1266 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 128.232 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 483.898 null ] >>
endobj
1267 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 117.273 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 472.939 null ] >>
endobj
1268 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 106.314 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 461.98 null ] >>
endobj
1269 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 95.355 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 451.021 null ] >>
endobj
1270 0 obj
-<< /D [ 1207 0 R /XYZ 79.822 84.396 null ] >>
-endobj
-1206 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1237 0 R /XYZ 79.822 440.062 null ] >>
endobj
-1273 0 obj
-<< /Filter /FlateDecode /Length 1834 >>
-stream
-x[&W 4PڪxU9-kr_,cmm<{Ќ-KOu H٩ݏ.J?^]YA}EjwA}wLHQ}*c
-zq3Lm oeQ
-?g F
-A;)Z-5Q(y5xkKukú8P)\f jhmnـgJ|Q[ 9Mѵ `P [p0lPFu(k;|@O ۥ$漴/whWM yH`/rit`$![c(f@%yg-^k 6 p慡֩d+ʀn2Q<WP|,PDp8GݲfEZ,h 9DyKw3uT(ٹ$BvVA\μ[?H ^)
-endstream
+1271 0 obj
+<< /D [ 1237 0 R /XYZ 79.822 429.103 null ] >>
endobj
1272 0 obj
-<< /Type /Page /Contents 1273 0 R /Resources 1271 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1237 0 R /XYZ 79.822 418.144 null ] >>
+endobj
+1273 0 obj
+<< /D [ 1237 0 R /XYZ 79.822 407.186 null ] >>
endobj
1274 0 obj
-<< /D [ 1272 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 396.227 null ] >>
endobj
1275 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 385.268 null ] >>
endobj
1276 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 374.309 null ] >>
endobj
1277 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 363.35 null ] >>
endobj
1278 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 352.391 null ] >>
endobj
1279 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 341.432 null ] >>
endobj
1280 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 330.473 null ] >>
endobj
1281 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 319.514 null ] >>
endobj
1282 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 308.555 null ] >>
endobj
1283 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 681.158 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 297.596 null ] >>
endobj
1284 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 670.199 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 286.638 null ] >>
endobj
1285 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 659.24 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 275.679 null ] >>
endobj
1286 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 648.281 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 264.72 null ] >>
endobj
1287 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 637.322 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 253.761 null ] >>
endobj
1288 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 626.364 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 242.802 null ] >>
endobj
1289 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 615.405 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 231.843 null ] >>
endobj
1290 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 604.446 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 220.884 null ] >>
endobj
1291 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 593.487 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 209.925 null ] >>
endobj
1292 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 582.528 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 198.966 null ] >>
endobj
1293 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 571.569 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 188.007 null ] >>
endobj
1294 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 560.61 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 177.049 null ] >>
endobj
1295 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 549.651 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 166.09 null ] >>
endobj
1296 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 538.692 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 155.131 null ] >>
endobj
1297 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 527.733 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 144.172 null ] >>
endobj
1298 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 516.775 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 133.213 null ] >>
endobj
1299 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 505.816 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 122.254 null ] >>
endobj
1300 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 494.857 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 111.295 null ] >>
endobj
1301 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 483.898 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 100.336 null ] >>
endobj
1302 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 472.939 null ] >>
-endobj
-1303 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 461.98 null ] >>
+<< /D [ 1237 0 R /XYZ 79.822 89.377 null ] >>
endobj
-1304 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 451.021 null ] >>
+1236 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1305 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 440.062 null ] >>
+<< /Filter /FlateDecode /Length 1797 >>
+stream
+x[r8 )AINf:̞siZR"MNYH~!
+vL6l@9[8b7;`쎡ԒѸy{({7Ճ5ŸJWw'(0c(aXypK rI1QUG\ 
+o'Sd"`q Qj0=m[ !6im
+A&-P0KnvK͇ͭ96qHG :AdqCʍ)1A!<Y[QE"O5Y0VGI1)Fc _أf`[=~A Oĥ,Z'
+GW]MĿ`(b[Z\ӭGEbU5XQܯu~MNa &U6KGZ><y` $!F ֵCϦI Ix qeRc1~Y iZ|?,Dze~DgҚ0Wښ0"8r; X>~4D
+endstream
+endobj
+1304 0 obj
+<< /Type /Page /Contents 1305 0 R /Resources 1303 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1306 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 429.103 null ] >>
+<< /D [ 1304 0 R /XYZ 78.37 808.885 null ] >>
endobj
1307 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 418.144 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 768.829 null ] >>
endobj
1308 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 407.186 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 757.87 null ] >>
endobj
1309 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 396.227 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 746.912 null ] >>
endobj
1310 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 385.268 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 735.953 null ] >>
endobj
1311 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 374.309 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 724.994 null ] >>
endobj
1312 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 363.35 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 714.035 null ] >>
endobj
1313 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 352.391 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 703.076 null ] >>
endobj
1314 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 341.432 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 692.117 null ] >>
endobj
1315 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 330.473 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 681.158 null ] >>
endobj
1316 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 319.514 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 670.199 null ] >>
endobj
1317 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 308.555 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 659.24 null ] >>
endobj
1318 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 297.596 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 648.281 null ] >>
endobj
1319 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 286.638 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 637.322 null ] >>
endobj
1320 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 275.679 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 626.364 null ] >>
endobj
1321 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 264.72 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 615.405 null ] >>
endobj
1322 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 253.761 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 604.446 null ] >>
endobj
1323 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 242.802 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 593.487 null ] >>
endobj
1324 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 231.843 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 582.528 null ] >>
endobj
1325 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 220.884 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 571.569 null ] >>
endobj
1326 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 209.925 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 560.61 null ] >>
endobj
1327 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 198.966 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 549.651 null ] >>
endobj
1328 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 188.007 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 538.692 null ] >>
endobj
1329 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 177.049 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 527.733 null ] >>
endobj
1330 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 166.09 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 516.775 null ] >>
endobj
1331 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 155.131 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 505.816 null ] >>
endobj
1332 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 144.172 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 494.857 null ] >>
endobj
1333 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 133.213 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 483.898 null ] >>
endobj
1334 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 122.254 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 472.939 null ] >>
endobj
1335 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 111.295 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 461.98 null ] >>
endobj
1336 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 100.336 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 451.021 null ] >>
endobj
1337 0 obj
-<< /D [ 1272 0 R /XYZ 79.822 89.377 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 440.062 null ] >>
endobj
-1271 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-1340 0 obj
-<< /Filter /FlateDecode /Length 2119 >>
-stream
-xZn#7+U\ÀeYr-59)M[3A[c<}ߞ0t|v5E
-דANҪ??^FJ Or)a
-d֨QɬKycs.ҵ|i[fMX('
-)/lE*O. uc,ZօD3$JYϘ^)REWnF=}Kؗb%wѬr[HR\KuƠNYo_TQ)۶̢i긜]{!}]a>2^M(l4Vh>ImHuݲ'.:j{wjjъ%[]-dOk -[i-JŌ*N<6F tZ.u<U;n0#,O:# K =ƙ9o,qIֱ}ejҽKSDtBe]H.4X}D\غoInnc/?T~?ꚹ٭iz-EqT1f՛1 }m!79RL.$?"T1,<:
-\J+=j
-]Znղzz&Vm,/ȣ0^-3xu , /rİij#h8J5HA\bqT`pE u#JRšT^FQ=? ~Me/:Ւ;^~o~'
-f"/4%V-)|IR67%Mƞaӿ+d
-endstream
+1338 0 obj
+<< /D [ 1304 0 R /XYZ 79.822 429.103 null ] >>
endobj
1339 0 obj
-<< /Type /Page /Contents 1340 0 R /Resources 1338 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1304 0 R /XYZ 79.822 418.144 null ] >>
+endobj
+1340 0 obj
+<< /D [ 1304 0 R /XYZ 79.822 407.186 null ] >>
endobj
1341 0 obj
-<< /D [ 1339 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 396.227 null ] >>
endobj
1342 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 385.268 null ] >>
endobj
1343 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 374.309 null ] >>
endobj
1344 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 363.35 null ] >>
endobj
1345 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 352.391 null ] >>
endobj
1346 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 341.432 null ] >>
endobj
1347 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 699.787 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 330.473 null ] >>
endobj
1348 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 688.828 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 319.514 null ] >>
endobj
1349 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 677.87 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 308.555 null ] >>
endobj
1350 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 666.911 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 297.596 null ] >>
endobj
1351 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 655.952 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 286.638 null ] >>
endobj
1352 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 644.993 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 275.679 null ] >>
endobj
1353 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 617.933 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 264.72 null ] >>
endobj
1354 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 606.974 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 253.761 null ] >>
endobj
1355 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 596.016 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 242.802 null ] >>
endobj
1356 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 585.057 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 231.843 null ] >>
endobj
1357 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 574.098 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 220.884 null ] >>
endobj
1358 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 563.139 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 209.925 null ] >>
endobj
1359 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 488.259 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 198.966 null ] >>
endobj
1360 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 477.3 null ] >>
-endobj
-229 0 obj
-<< /D [ 1339 0 R /XYZ 79.37 453.248 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 188.007 null ] >>
endobj
1361 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 399.385 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 162.105 null ] >>
endobj
1362 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 383.724 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 151.146 null ] >>
endobj
1363 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 372.765 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 140.187 null ] >>
endobj
1364 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 361.806 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 129.228 null ] >>
endobj
1365 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 350.847 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 118.269 null ] >>
endobj
1366 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 339.888 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 107.31 null ] >>
endobj
1367 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 324.227 null ] >>
+<< /D [ 1304 0 R /XYZ 79.822 79.415 null ] >>
endobj
-1368 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 313.268 null ] >>
-endobj
-1369 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 302.309 null ] >>
+1303 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1370 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 291.35 null ] >>
+<< /Filter /FlateDecode /Length 2288 >>
+stream
+xZKo6 WXD= 2=Vڞ%Dnۃ-S$GJE^~<Iax~<}bǟO
+ɋ+ ؋wJH._~|?>~{{0 th(6K_7|ƆBIlh} 儷SҪtT[o/c^YJTHsKVD)΄ϑ}iMzFs=8V^2+̼)EuI ޭ
+ʹUݜ~d81Bz ̩rԞR?)Ju=v^
+iBȥo<IqdgƩ$hQflQV TUmլ\N̵E< `-@qf1HnPjaڒz;IJ/|jy /BGa,q%zOZE?'Β-TMTw+OkٕGG5R vIk9asv_HNJXt{ֆ:I/T=$N&EΰNOTPCZ8tw6p> YCVHe=>j7+Bv[vE -YiZAWWS预֊UNc8 | p!y|SlXM WE~e'_)NsFʫk(c&f<.Aɸ2vD4ߢ^C6" "xYHס[Yjк5k^ޔ$D3J,Js<ᮇђ_TגXW[ZX*z@xpv:-b,^0o#O4Fk4D_4I(1&Qn/]{Jfu2qG&L [dR(@ˤ"BV 6%#6A&C0O{L]gSc{6Ԕgi4Sf-`l <.;[)qZ7P⋴ aVK`v"tVƵ%ɪ뒦Qv
+R` g-p18Ffρ:Snm~ը(w& (DDÈ$Xߚ3:5T\6
+)+
+Rm+:?Oc%8.Q rB 6=H& FL(G{$6 ~:ؒVTZ6 m:Zź͇D휚z*Gf3J )XǨ0C-E pF=
+C X8u&,󛛊6_[!N;]-*eoD sy<TT4ɍ<Fe+:ǵia^靾7MG#ܤ̯@@?f飀2H9"5=8DTit!ѦeO]\6v ۆEsJϒ4ArbY\?
+endstream
+endobj
+1369 0 obj
+<< /Type /Page /Contents 1370 0 R /Resources 1368 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1371 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 280.391 null ] >>
+<< /D [ 1369 0 R /XYZ 78.37 808.885 null ] >>
endobj
1372 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 269.432 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 768.829 null ] >>
endobj
1373 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 258.473 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 757.87 null ] >>
endobj
1374 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 247.514 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 746.912 null ] >>
endobj
1375 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 236.555 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 735.953 null ] >>
endobj
1376 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 225.596 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 724.994 null ] >>
endobj
1377 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 214.638 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 649.682 null ] >>
endobj
1378 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 203.679 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 638.723 null ] >>
endobj
-233 0 obj
-<< /D [ 1339 0 R /XYZ 79.37 165.23 null ] >>
+229 0 obj
+<< /D [ 1369 0 R /XYZ 79.37 614.312 null ] >>
endobj
1379 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 144.388 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 560.161 null ] >>
endobj
1380 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 133.429 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 544.356 null ] >>
endobj
1381 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 122.47 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 533.397 null ] >>
endobj
1382 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 111.511 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 522.438 null ] >>
endobj
1383 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 100.552 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 511.479 null ] >>
endobj
1384 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 89.593 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 500.52 null ] >>
endobj
1385 0 obj
-<< /D [ 1339 0 R /XYZ 79.822 78.635 null ] >>
-endobj
-1338 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1369 0 R /XYZ 79.822 484.715 null ] >>
endobj
-1388 0 obj
-<< /Filter /FlateDecode /Length 2422 >>
-stream
-x[n3 )/Qw0p:vݨ 5c7npl5߈d_'~3?]~ݵ?)材pIf~hΥ 򏯿1ot=Њ)a(
-9W.kx:+\Sw :akD~K@U(qhUr+#{C;3 ft}\͙@+1ɜ%J!py *$rhS-&\z&c+ž(7n*PgmHʹ30rq[pn9(rjOJsM
-sdO|EW^q5
-u< w
-#^-|-XӃf +̥<%ݝb[vV >+ +drI?!tO3IN* ֺ6g*!UiW<+癵z]%fOZ2$[4I$2ys z2ÓQG0K3ztm?Jx`2ҭ6dP;hd ʖNgz<s8&-Q`^f[-I3y&QK AI}/:_8H9y<4m{Ly)L2F`tf[ᶓak0Etߎ7b|<
-.2;|c!N] 0"(5xLsLPZރGi<GaȑF/KP_W|x.Y]s$W063 qBb?ZzGcpAnw0./$qk>3m(=o+`e*mÐ{/x]'uMiwP_A']Lʺ\0%4 >A~?wKjNY4E[|4q^bE)\,W1wSx7O0!a+j
-XJE)C z(dFtneZx4IC~mK~I^юYE'Aɠ{ˑ+T(/¥,n2$GU#Bo44́A9 3*[67;%Q_c>T?rzBGVhC|pke>סaի+2hܑ\C *\jXZsYL1 +s<w t5Si|&e:^
-PK{qV2>֭5D\!K0@+=Q(N-y&R ƝDT9LDD}&Nq&`rG[PH܈Ev t/IL{]c""DHYD,5Vm
-^o!Mi[ eFJM%[
-[ _
-%p+ q.s@[_(
-&fSl[^"JXNWv>FZ)Vц[:ArvlB)hJ5ѐi ?܋yD3LT5 ty!,k=eza b GhsqXv*yiR֚-Se{C)r8eZfL8~T.hzǘFD+u$~TL\bL\^k)0b8!ԬI˻2ܒ5/]4Lq~J<dKGl\X.w=м /?DcCY[0 TJx0@F,ൎ5 -EZdl#m!% ~?(+Or]"2\z@'
-m&*I6L[2_͢7GU''3O,F6+Pno[ծ 1b3Ridzf9غH~_
-endstream
+1386 0 obj
+<< /D [ 1369 0 R /XYZ 79.822 473.756 null ] >>
endobj
1387 0 obj
-<< /Type /Page /Contents 1388 0 R /Resources 1386 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1369 0 R /XYZ 79.822 462.797 null ] >>
+endobj
+1388 0 obj
+<< /D [ 1369 0 R /XYZ 79.822 451.838 null ] >>
endobj
1389 0 obj
-<< /D [ 1387 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 440.879 null ] >>
endobj
1390 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 429.92 null ] >>
endobj
1391 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 418.961 null ] >>
endobj
1392 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 408.002 null ] >>
endobj
1393 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 397.043 null ] >>
endobj
1394 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 386.084 null ] >>
endobj
1395 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 375.126 null ] >>
+endobj
+233 0 obj
+<< /D [ 1369 0 R /XYZ 79.37 336.183 null ] >>
endobj
1396 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 315.341 null ] >>
endobj
1397 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 663.562 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 304.382 null ] >>
endobj
1398 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 652.603 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 293.423 null ] >>
endobj
1399 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 641.644 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 282.465 null ] >>
endobj
1400 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 630.685 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 271.506 null ] >>
endobj
1401 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 619.727 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 260.547 null ] >>
endobj
1402 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 608.768 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 249.588 null ] >>
endobj
1403 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 597.809 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 238.629 null ] >>
endobj
1404 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 586.85 null ] >>
-endobj
-237 0 obj
-<< /D [ 1387 0 R /XYZ 79.37 563.674 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 227.67 null ] >>
endobj
1405 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 531.101 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 216.711 null ] >>
endobj
1406 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 520.142 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 205.752 null ] >>
endobj
1407 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 509.183 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 194.793 null ] >>
endobj
1408 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 481.4 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 183.834 null ] >>
endobj
1409 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 455.553 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 172.875 null ] >>
endobj
1410 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 444.594 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 133.429 null ] >>
endobj
1411 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 383.107 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 122.47 null ] >>
endobj
1412 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 357.484 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 111.511 null ] >>
endobj
1413 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 346.526 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 100.552 null ] >>
endobj
1414 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 335.567 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 89.593 null ] >>
endobj
1415 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 324.608 null ] >>
+<< /D [ 1369 0 R /XYZ 79.822 78.635 null ] >>
endobj
-1416 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 313.649 null ] >>
-endobj
-1417 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 302.69 null ] >>
+1368 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1418 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 291.731 null ] >>
+<< /Filter /FlateDecode /Length 2556 >>
+stream
+xr+) $peY1g&}J>ȖJ侑⧿Ng:x:>jwRY!If`ɠ`ӿ_8GŹz翞xj2(mD
+aHź=-Od"7<AEa]~ 4i%$|?k. R<u
+}I;U뽀^&<0jQy?}WFд*VO
+`y69
+Mϵ]R+dz)d(qH(ojSVkQa+8Ɲ:^ !{JիR]OQ.aY(ZSʣGz^_[˵1B9d >b`6)8RԼ$)(j_J dM#PhmʈӚ]} QɳFfDi/5kM
+kk;7E ")O;2)jZ1垨3:g-$?zx5u4K
+d黜)k$sĜe^o>ʬrV+s0#F'#'0z[jGƑF&Zto6vlJ{3 g'*m#0k5bf#p'q֣V)>Xc"@BeKkxeͻn&#y1=BAnF L/6L.7[-cw|i%)_vlr&P >9h䊏@Q 9m'+Fm~^jRU~_ D#9.k4CDJnB!@U5&3Lĭ5)}5'ػĎ}z
+ѨƑ\>J
+_8Fe".|LB~5G(@ڨn- Y3EN%r2.)zOG0q嚠HtI<ZQ&`
+ŕADX;:MXlڤv,V%>8c8(TeZ7(!ḯqk R
+`UGy(a8F%ċ:ZJ1dDz#POb w4 Fmw[|-1{4jff-dGtckEC{zi_>[JF2Ae¸I,7 geܪlv\2)Zu:g 9;vDiYƯs^rVȽ$j3hBER-Cn@+)_5r
+&iZ@ɝ}u)]#^4B긖8orcz1z|:%6lBt$ȨoM;oT\RȽ/X[s43;FV%# Efa c*C.z 脛&NEUT`hŔk\jU@3rKB`0`z.,w
+6m 7(={yS-%~D Vz8V(!PVDP+gC7Gݜ<B_
+vYNc-׋7>Q]A<}23^e(?A0>J5(|[RnPI1Nr[#Avc$(_Wϰ}}#~T`_l8ZQ6<x
+HVliF,NǵK>^U̪-v[7[1&,2V"խ2<ҧ5ڒyhB'PC,qe5{ZZVGdT-==W'#7Vs :enHʭ!)WQZ~1 mQ4a2p⏘]pNaX SQ:[k,bGK,
+YHD?E.jo# vQ92[q~) &*! 1L1
+gթKRUVU䶻qeO4X(b r ہ &n2B )ٚR=Mw~[*] ?tM _**惉&ETVծW
+1vĒbmhJ<~-K5gԋSx]@E
+endstream
+endobj
+1417 0 obj
+<< /Type /Page /Contents 1418 0 R /Resources 1416 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1419 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 280.772 null ] >>
+<< /D [ 1417 0 R /XYZ 78.37 808.885 null ] >>
endobj
1420 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 269.813 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 768.829 null ] >>
endobj
1421 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 258.854 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 757.87 null ] >>
+endobj
+237 0 obj
+<< /D [ 1417 0 R /XYZ 79.37 734.414 null ] >>
endobj
1422 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 247.895 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 701.616 null ] >>
endobj
1423 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 236.937 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 690.657 null ] >>
endobj
1424 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 225.978 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 679.699 null ] >>
endobj
1425 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 215.019 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 651.803 null ] >>
endobj
1426 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 204.06 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 625.9 null ] >>
endobj
1427 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 193.101 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 614.941 null ] >>
endobj
1428 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 182.142 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 553.173 null ] >>
endobj
1429 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 130.673 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 527.27 null ] >>
endobj
1430 0 obj
-<< /D [ 1387 0 R /XYZ 79.822 119.714 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 516.311 null ] >>
endobj
-1386 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-1433 0 obj
-<< /Filter /FlateDecode /Length 2893 >>
-stream
-xr ثT,sr-kr_XH엙l7. g:|ÿ>_~-_NH|E"~8}F0n^97
-?7Υ|?^xkq7FYm{(xΕuXW+Sk⽺>Ls&8S =0hHτ oxz vWd1]7 anjNGƽ:2޾6KppL 5;6SoC
-
-<^6;.t|zr7b[Cʬ*^Hpz
-nI҃9+aj61qp [Cxx^R@PVM M<RihR|Pj |3(]ܲeC>Jywx-⁕ dVԀMЕ*TG w~,~*&qnVݵXDY\爑 p4S5*Hq6XC
-*
-7ODC
-z(_@"th=HdڭՁBw(J<QY?+m9"45H={ӈ-ֆy?dg_Y;(Ql1eK rAPNe5?_˵JuP9bgRƟDޛT[|ZPNž=|j
-T%;f9󌐚a"3l%Tr*!P/Kd2R[jsk[ͤעRH"kU~Wҫ<j#7O,͖t<F%}kN1FoSzA.XUqSVTҝ*KDe]D{i7]zCu8cN%tR"eS
-uAzckU~U7P LXUL\ 
--|zl"|.0˓ٺhT[M977~Ф:9P~C≘bn9%Sٍr9ȫJeR3lוdTshW],FQYh r鷦!9`ra$Z\]XI-9Nی<ߊړ \'F1^*DP
-+=bzoU%1߶嘵J[m:^p%vt6VG\1)|ώӳ-}vCֈv7]U yA^2izZu0`c,fs]5
-tp-3,ea0{ك}ZudS\u?\ 8A_*STQu}ABBvzV9lE5docHnɷa[ }WHPqKWT7Fub(eICIQLNjm,!`29,ynj9XΜ1^pi<) f
-endstream
+1431 0 obj
+<< /D [ 1417 0 R /XYZ 79.822 505.352 null ] >>
endobj
1432 0 obj
-<< /Type /Page /Contents 1433 0 R /Resources 1431 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1417 0 R /XYZ 79.822 494.393 null ] >>
+endobj
+1433 0 obj
+<< /D [ 1417 0 R /XYZ 79.822 483.435 null ] >>
endobj
1434 0 obj
-<< /D [ 1432 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 472.476 null ] >>
endobj
1435 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 461.517 null ] >>
endobj
1436 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 450.558 null ] >>
endobj
1437 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 439.599 null ] >>
endobj
1438 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 428.64 null ] >>
endobj
1439 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 417.681 null ] >>
endobj
1440 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 699.133 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 406.722 null ] >>
endobj
1441 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 661.316 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 395.763 null ] >>
endobj
1442 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 611.545 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 384.804 null ] >>
endobj
1443 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 600.586 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 373.846 null ] >>
endobj
1444 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 586.68 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 362.887 null ] >>
endobj
1445 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 575.721 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 351.928 null ] >>
endobj
1446 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 564.762 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 300.122 null ] >>
endobj
1447 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 553.804 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 289.163 null ] >>
endobj
1448 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 542.845 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 239.35 null ] >>
endobj
1449 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 503.245 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 228.391 null ] >>
endobj
1450 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 492.286 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 217.432 null ] >>
endobj
1451 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 442.515 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 206.473 null ] >>
endobj
1452 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 431.556 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 195.514 null ] >>
endobj
1453 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 420.597 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 169.611 null ] >>
endobj
1454 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 409.638 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 131.753 null ] >>
endobj
1455 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 398.679 null ] >>
-endobj
-1456 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 348.908 null ] >>
+<< /D [ 1417 0 R /XYZ 79.822 81.94 null ] >>
endobj
-1457 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 323.047 null ] >>
+1416 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R /F81 381 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1458 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 312.088 null ] >>
+<< /Filter /FlateDecode /Length 2677 >>
+stream
+x[Ɏ#WM2 PJ7WJ%K]cϡJ3EO9o]2gӯ ?*&:-뿧99_xϻœeNk- #i '@Ä Cl8Ü#ȋ'&'xw]s)KkJ*,_|kaV4k pK{)Vg@?핾,4
+Gj{*R/!NulX/+w Qf4
+wbN}ŕQQeLܪ!{#DƓOZHOȮj뇡46?V@lfi>+pպ&d'WdIkF`lDmWI9!apkᓦ>Rg9[Q.3΍[\f㥽V&\S qAz6$#w渧q]ACy.rZkѰј&^tg%N4£xCiG%I*$=] }K>;9ғA9\4e^tᙏOrlau6tynRRBRLN A2du^ЛN
+m|iE_ IVk&A_}m,oQA\̣Q
+6s=
+p+Qzi;QyڴL֝n{SHF駱_":7((4Js0O_ - }u0qaVBhQ}'XgKLݮ$OO;}TwL_w ay) mr@?߈}jS˸1"C3ẽ=1"cƄ
+5g`HNoˬEltq֠u(_IXϽCeuȦ9n6LAôS(PS
+Frrb B<7#/)he7eHu VF-oKecG<Ëe*!djM=*{048k.S\3%dkgB pqFj H'DW|P&X<>5 ȏ V 2"zZ`{pqgON*՚N|?6*>!gnޥ'|{
+endstream
+endobj
+1457 0 obj
+<< /Type /Page /Contents 1458 0 R /Resources 1456 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1459 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 301.129 null ] >>
+<< /D [ 1457 0 R /XYZ 78.37 808.885 null ] >>
endobj
1460 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 275.435 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 768.829 null ] >>
endobj
1461 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 235.668 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 754.882 null ] >>
endobj
1462 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 224.709 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 743.923 null ] >>
endobj
1463 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 199.015 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 732.964 null ] >>
endobj
1464 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 188.056 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 722.005 null ] >>
endobj
1465 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 172.2 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 711.046 null ] >>
endobj
1466 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 161.241 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 671.195 null ] >>
endobj
1467 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 150.282 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 660.237 null ] >>
endobj
1468 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 139.323 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 610.423 null ] >>
endobj
1469 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 111.511 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 599.464 null ] >>
endobj
1470 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 100.552 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 588.506 null ] >>
endobj
1471 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 89.593 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 577.547 null ] >>
endobj
1472 0 obj
-<< /D [ 1432 0 R /XYZ 79.822 78.635 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 566.588 null ] >>
endobj
-1431 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F65 335 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-1475 0 obj
-<< /Filter /FlateDecode /Length 2185 >>
-stream
-xZr6+U-MUξrMNk%k2@"Gz#?uoOI~{Zޞ^=F |n? <h%W#!q'0^  JAPLKݣCš;?ss  2?_KnqR
-<)>Z&{oQf*U>Zc!KRm"aӉL9[DS0>_5؀G^_"HYf
-t+w 5-B<VX!K7m}pTYu~n*݌?%S0B1hiE)*KXOO
-FSs+Ec 1t(ah9R &MR]K먶vz|)1_kq"훧 ˤlpN/-
-4BzkώTb]LWǶa夠*
-ǖ=FPy$jc!qjeLIu/ѯ'he s#9F_n]F~y$+FB#${5s_z+&1Umf<'RDzS :" j;Ur`J1Py
-(ޙ6$lB"(v|mc) +D%0Y8D#+$81t+={)XzIGŤJ -NYQ %%]Ey6 :Kbm"ʻJ _nKnZ-ୈ!͍xj߿'&nuQ󥬮<Y@ :}"KI$ݚ8foR2zKe6M?Kw?Px/H2</ u|-@BJ `O\0şOH?r6%3z'si8S\x;d=RTqӡRm^0)d@wOݙq~QP0猏f/qY0FKZQ#unZ
-u! {.U)5\WeQ^4/q`urkk~%c7b Tڡ;7҆ dCj fB .fݡrctfvR1hW K
-ݯ.9u2=9KQk`\rGe^oY .vUO^gjQ>[;
-hKkeeܡg(՗}ݡ<\2ACp5PY]f& g+w `*'INuȬdY[FN_yĢ y`5Hoh䇐+_f&j$6)8صMHPL6;·]iayN!C6ߡGEBhFi;!bw(ZG,vFo Ձ<a$}Bf~ڂ]Vq_Cį q,))J(}~,j,qfu1 F%緧
-endstream
+1473 0 obj
+<< /D [ 1457 0 R /XYZ 79.822 516.775 null ] >>
endobj
1474 0 obj
-<< /Type /Page /Contents 1475 0 R /Resources 1473 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1026 0 R >>
+<< /D [ 1457 0 R /XYZ 79.822 490.872 null ] >>
+endobj
+1475 0 obj
+<< /D [ 1457 0 R /XYZ 79.822 479.913 null ] >>
endobj
1476 0 obj
-<< /D [ 1474 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 468.954 null ] >>
endobj
1477 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 443.051 null ] >>
endobj
1478 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 403.2 null ] >>
endobj
1479 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 392.242 null ] >>
endobj
1480 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 366.339 null ] >>
endobj
1481 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 355.38 null ] >>
endobj
1482 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 339.44 null ] >>
endobj
1483 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 328.481 null ] >>
endobj
1484 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 317.522 null ] >>
endobj
1485 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 681.158 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 306.563 null ] >>
endobj
1486 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 670.199 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 278.667 null ] >>
endobj
1487 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 659.24 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 267.709 null ] >>
endobj
1488 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 648.281 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 256.75 null ] >>
endobj
1489 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 637.322 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 245.791 null ] >>
endobj
1490 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 587.509 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 234.832 null ] >>
endobj
1491 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 576.55 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 223.873 null ] >>
endobj
1492 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 565.591 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 212.914 null ] >>
endobj
1493 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 554.633 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 201.955 null ] >>
endobj
1494 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 543.674 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 190.996 null ] >>
endobj
1495 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 532.715 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 180.037 null ] >>
endobj
1496 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 521.756 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 169.078 null ] >>
endobj
1497 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 507.808 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 158.119 null ] >>
endobj
1498 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 496.849 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 147.161 null ] >>
endobj
1499 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 485.89 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 136.202 null ] >>
endobj
1500 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 474.931 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 125.243 null ] >>
endobj
1501 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 463.973 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 114.284 null ] >>
endobj
1502 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 453.014 null ] >>
-endobj
-1503 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 442.055 null ] >>
+<< /D [ 1457 0 R /XYZ 79.822 103.325 null ] >>
endobj
-1504 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 431.096 null ] >>
+1456 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1505 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 420.137 null ] >>
+<< /Filter /FlateDecode /Length 2117 >>
+stream
+x[r6+tcrʲٷT) &6JC0d4@ᇿrR'o8kq+rWgʯ\ ѦGi{34UyO<K4@o6& k<z)mV;ލO˴Va1O/U*<hikz1u9 u:D`n3"D%|?[/KtLp2Q9Pπ0:PcmrKHG,Ũ3 ɵ~t+O
+ JZ"t7{TkԜ@ g*EOrd
+5aV1iḦ́ .|#Pv/WO6 o٣H=Mz2F(Q$&Q1kח&8x7W&"( 0P60LzO(^n#D
+Y[I(Sf.kWy^O,g6DP[C2g
+-=S&MhI`Z,r9[Z\NLfL.V'sk@d(߹.kQRy30T& +n1L;skPJBdХ-"+k{Tr-ki´+˙Ϲf1Ev̪C3LL&:%D78LYffe+4̎d׹
+c&4s\ T5ѡ\ TA)nIMBJ]ZŸSPzs)PU#gڟbi-K/}LN's[v0< kBVԢ \6=Tybwu?k3ckeҡ|uToPZer a20&31}-Cq'wkf%".2(J=׭=.nvl;]^ͿC$``9Fi0ׯZ52dYY& 2ӖIB+_)6gŵjvY\qal8LBbbk55JgQX4:ޘ&+7G+3d\&Ǻ w!jv\\j&-R
+6~-\[~Cd$*:0MngNCq'<
+N1,ݝ87N$SXDdSpym/ Xl-s-FK^)Hݩ4-NG
+endstream
+endobj
+1504 0 obj
+<< /Type /Page /Contents 1505 0 R /Resources 1503 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1052 0 R >>
endobj
1506 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 409.178 null ] >>
+<< /D [ 1504 0 R /XYZ 78.37 808.885 null ] >>
endobj
1507 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 398.219 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 733.96 null ] >>
endobj
1508 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 387.26 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 723.001 null ] >>
endobj
1509 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 376.301 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 712.042 null ] >>
endobj
1510 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 365.342 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 701.083 null ] >>
endobj
1511 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 354.384 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 690.124 null ] >>
endobj
1512 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 343.425 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 679.166 null ] >>
endobj
1513 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 332.466 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 668.207 null ] >>
endobj
1514 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 321.507 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 654.259 null ] >>
endobj
1515 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 245.791 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 643.3 null ] >>
endobj
1516 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 234.832 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 632.341 null ] >>
endobj
1517 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 223.873 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 621.382 null ] >>
endobj
1518 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 212.914 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 610.423 null ] >>
endobj
1519 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 201.955 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 599.464 null ] >>
endobj
1520 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 190.996 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 588.506 null ] >>
endobj
1521 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 180.037 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 577.547 null ] >>
endobj
1522 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 169.078 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 566.588 null ] >>
endobj
1523 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 158.119 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 555.629 null ] >>
endobj
1524 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 147.161 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 544.67 null ] >>
endobj
1525 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 136.202 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 533.711 null ] >>
endobj
1526 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 125.243 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 522.752 null ] >>
endobj
1527 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 114.284 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 511.793 null ] >>
endobj
1528 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 103.325 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 500.834 null ] >>
endobj
1529 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 92.366 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 489.875 null ] >>
endobj
1530 0 obj
-<< /D [ 1474 0 R /XYZ 79.822 81.407 null ] >>
-endobj
-1473 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1504 0 R /XYZ 79.822 478.917 null ] >>
endobj
-1533 0 obj
-<< /Filter /FlateDecode /Length 1964 >>
-stream
-xZKo6W,
-i
-4@-3( x)ɅpA@|pYzA8+F{nZ0eᤵ(+
-Tsʚ ;.)Wqº%$YkQYGn22U1FXRVxp$˚mZGZKۚRinެ KYr] 9TRjpf z*$00/@JSH_t\z>Tx*Q5-%mt>l֘8Ci~\Y{ ߪ)MwTD!ۣJj,g() JɄ_D HEd5 ,unrK-v]Zљ
-+BDd֠,HoQSB)u5Y3mVYeX)AOS{J%ull{l]{(Tݚr.nٳ7J{<rU\Pd(oUd]vdcEG.t
-/JܧYDH3͒TqV aoTG 0@iʯ䅑iJd(h@c.3Q0 8C8Ƃ Y[r@R kܰ8{Dq$޼WCޥz\j œF iL#PRxKnC !`jykyxаn2{$gPNHo'sT{AZ tiPvu6ƳZ0lĀO%V-\ Oh1.FV.
-~K2
-` \poN}Q7mP]61ʿ_oi {xy i;}xuݹ5 *3DpAacG^\ZUGO|"mM~
-h7Nc™>yQHF)2剛Bbt@9m~Y;T* =j6;
-q.9.dO
-?&"Dɭֱ*%Ah䜫{ݱMD]ޫZ:[%K1SG_5wl
-cprOЃ:W&ome|+Bg7+!„Zfp$Vҥ
-endstream
+1531 0 obj
+<< /D [ 1504 0 R /XYZ 79.822 467.958 null ] >>
endobj
1532 0 obj
-<< /Type /Page /Contents 1533 0 R /Resources 1531 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1504 0 R /XYZ 79.822 392.242 null ] >>
+endobj
+1533 0 obj
+<< /D [ 1504 0 R /XYZ 79.822 381.283 null ] >>
endobj
1534 0 obj
-<< /D [ 1532 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 370.324 null ] >>
endobj
1535 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 359.365 null ] >>
endobj
1536 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 348.406 null ] >>
endobj
1537 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 337.447 null ] >>
endobj
1538 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 326.488 null ] >>
endobj
1539 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 315.529 null ] >>
endobj
1540 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 304.57 null ] >>
endobj
1541 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 293.611 null ] >>
endobj
1542 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 282.653 null ] >>
endobj
1543 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 681.158 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 271.694 null ] >>
endobj
1544 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 670.199 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 260.735 null ] >>
endobj
1545 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 659.24 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 249.776 null ] >>
endobj
1546 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 648.281 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 238.817 null ] >>
endobj
1547 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 637.322 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 227.858 null ] >>
endobj
1548 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 626.364 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 216.899 null ] >>
endobj
1549 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 615.405 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 205.94 null ] >>
endobj
1550 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 565.591 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 194.981 null ] >>
endobj
1551 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 554.633 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 184.022 null ] >>
endobj
1552 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 543.674 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 173.063 null ] >>
endobj
1553 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 532.715 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 162.105 null ] >>
endobj
1554 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 521.756 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 151.146 null ] >>
endobj
1555 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 510.797 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 140.187 null ] >>
endobj
1556 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 499.838 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 129.228 null ] >>
endobj
1557 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 488.879 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 118.269 null ] >>
endobj
1558 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 477.92 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 107.31 null ] >>
endobj
1559 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 466.961 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 96.351 null ] >>
endobj
1560 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 456.002 null ] >>
-endobj
-1561 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 445.044 null ] >>
+<< /D [ 1504 0 R /XYZ 79.822 85.392 null ] >>
endobj
-1562 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 434.085 null ] >>
+1503 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1563 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 423.126 null ] >>
+<< /Filter /FlateDecode /Length 2659 >>
+stream
+xIn#9W"  X}̵%J%Uv
+ ?__OdNF Ƶ8}}s) 2=!43P(…s9W^?}o=a]ř0k 
+ϛP'S1Iɬm@OR$bѦKW0 g奬K^}Ix/l +9=%u{vF
+$i2C+{̹[^2qUmWŷJ9sQ%ꐒ;X
+$d#+aqhGKhsU tHEvEʎ*"
+ 
+VaGиF *F%Ph yiZN[?PUK."ƗBdL7,e@90odB%odj&<YeeIG+ (3Ćjѳ/oץKPjÜ(٤*B"ї5P-dĬ5fP~Q}þW!$Rf ۰
+&9ƒ$ե]}Tܺtĥe'&o@\+>p+^PeBT[26T1g\˩rɉiQHki|/iu]5r{>{d23bר| [׎I#l[)˔2iej
+0qH} n*)5dOZO1Q1f)$N!C)ʱkRqr4գٍzC$PR_|vMIdb-PŶ
+,L2ývptKnZۢ?ROȴ0BibȝK?Gѓv5BYG0',<r1j-(> gaB|8Q9f,t@yJ (` 7x<eA<I~xuӔG#}aWAyL;݋-P@{@Mh:!ހnrT싕h=
+ʽP2+VH+=OċPJRyS6^+lƭ*f.@mXS%h0 00ZSg5Ѭ:BqTIp@94YhѬO Zq-12k־BrQO;o먵c(
+Tz^}<zl@e)|V:I>7?>`B 4)u4{>@Yw Z<(PN_ڈs#tg4;iZv
+Cjoҳn哿fi5͇hT½ H_'LOQ3)]\=r|,f
+N .G
+Ej1XNg52GwGKCmƮwt<q
+ʗiǩú~ﺌv$r/Þ>z][gު)iL(mwr -3V<[BXafLX|C@Zx UQ0LJR?O([RLl_c7G'-%nIF<G!F̝l˄ ( m l-F<:ڏus~ISf*ąVP#zǤ|izL̯-H^Hk|o^'qf7IOYYmc|k_)*~L<3n؍^vD^A3&>-ٶ@6U)g."$2zm2QpHױN`GI&Ê*z12&ɒnmYz9r05˜;Ōf
+TLu3Rm@\!gI.fcWZyR!) 4"VJH&Jb=_LiOޖm_*
+endstream
+endobj
+1562 0 obj
+<< /Type /Page /Contents 1563 0 R /Resources 1561 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1564 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 412.167 null ] >>
+<< /D [ 1562 0 R /XYZ 78.37 808.885 null ] >>
endobj
1565 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 401.208 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 768.829 null ] >>
endobj
1566 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 390.249 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 757.87 null ] >>
endobj
1567 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 379.29 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 708.747 null ] >>
endobj
1568 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 368.331 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 697.789 null ] >>
endobj
1569 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 357.372 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 686.83 null ] >>
endobj
1570 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 346.413 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 675.871 null ] >>
endobj
1571 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 335.454 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 664.912 null ] >>
endobj
1572 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 324.496 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 653.953 null ] >>
endobj
1573 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 313.537 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 642.994 null ] >>
endobj
1574 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 302.578 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 632.035 null ] >>
endobj
1575 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 291.619 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 621.076 null ] >>
endobj
1576 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 280.66 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 610.117 null ] >>
endobj
1577 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 269.701 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 599.158 null ] >>
endobj
1578 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 258.742 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 588.2 null ] >>
endobj
1579 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 247.783 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 577.241 null ] >>
endobj
1580 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 236.824 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 566.282 null ] >>
endobj
1581 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 225.865 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 555.323 null ] >>
endobj
1582 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 214.907 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 544.364 null ] >>
endobj
1583 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 165.093 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 533.405 null ] >>
endobj
1584 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 154.134 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 522.446 null ] >>
endobj
1585 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 143.176 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 511.487 null ] >>
endobj
1586 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 132.217 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 500.528 null ] >>
endobj
1587 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 121.258 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 489.569 null ] >>
endobj
1588 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 110.299 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 478.61 null ] >>
endobj
1589 0 obj
-<< /D [ 1532 0 R /XYZ 79.822 99.34 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 467.652 null ] >>
endobj
-1531 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+1590 0 obj
+<< /D [ 1562 0 R /XYZ 79.822 456.693 null ] >>
endobj
-1594 0 obj
-<< /Filter /FlateDecode /Length 2841 >>
-stream
-xˎ(_?Ќ
-4f: A_kv폧47/<*~&o moXP~eVߵ mYeQO΄'#<bd/ VU*H0U7@-1B%<~m( b6k٢Ot:5PfJz<;' &3%CzY Og!C@04zC
-){l#eHى }z02Q3CI٪59ԤGV[АV J<i l+=ܘRj+t G5ѬI1
-
-YlF-:ǾMA ʸ.?.ǝs9a:ih J*ŊYp502GJOG%)uPm;sN:hq&f
-]: HtpsԎk5CZyEs#MIlx&m߿SXj5{pGZGB ބ}8[!i֜hCI-%wz1d61n Q)Nֆ0"+0P("LVcq.g2A80'Jγϱ%߽$ckBO1AZx!Y '>lI5Q)- qV
-jC\9z(׈?cI:a0\Dl{Œ#őUe#PGSݬ\+W~efCHzcbš({fR+-揚IuMƅֶ߸.uyݚ8MRP2̋|%z׶&ZZjy{+&$>Vun`QQ5iTj7|;Qb5SρĐS:! WJCH8)PzPx$;Tkd1x8DVEI)(}OJ%sba*5\f&`0di݈^};!;hiZƽ؊-쳋ĖgUPf2N;EqAC6R qPJ;kTCԃ`
-!ehX[Bz$7$j$ErqXwڟSh ki;tgNRZ1e) ?M "?]sNe)yYZ7&["|M@}n282Wt ڢhqMF7p'A,ƍkk` iƟҌr4(m{4M(AXR^j:ֺl'P%zN]A1M~*cPNapcR=bPv% ܨtͯ:32jwhb'̊p^n傖h)bObaB H?l-[i#I-iP!l Cq4ζ&L&A%V=L{~KU,XkrCAA9LiFg|h"|uJ[! ΉΤ >Vr(*o&Bա\Tc$jD;z. NrkA(75\\%5 1
-7c)9r6m(TT:v
-8m/b L/A5}SJ9굕o1wx{ֳ3WJzFZ_PwH7Sʅ@{6^LP0([CޥKvBVb꬧7Ӝl])N#U
-endstream
+1591 0 obj
+<< /D [ 1562 0 R /XYZ 79.822 445.734 null ] >>
+endobj
+1592 0 obj
+<< /D [ 1562 0 R /XYZ 79.822 434.775 null ] >>
endobj
1593 0 obj
-<< /Type /Page /Contents 1594 0 R /Resources 1592 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1562 0 R /XYZ 79.822 423.816 null ] >>
+endobj
+1594 0 obj
+<< /D [ 1562 0 R /XYZ 79.822 412.857 null ] >>
endobj
1595 0 obj
-<< /D [ 1593 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 401.898 null ] >>
endobj
1596 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 733.96 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 390.939 null ] >>
endobj
1597 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 723.001 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 379.98 null ] >>
endobj
1598 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 712.042 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 369.021 null ] >>
endobj
1599 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 701.083 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 358.063 null ] >>
endobj
1600 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 690.124 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 308.94 null ] >>
endobj
1601 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 679.166 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 297.981 null ] >>
endobj
1602 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 668.207 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 287.022 null ] >>
endobj
1603 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 657.248 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 276.063 null ] >>
endobj
1604 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 583.524 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 265.104 null ] >>
endobj
1605 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 572.565 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 254.145 null ] >>
endobj
1606 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 561.606 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 243.186 null ] >>
endobj
1607 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 550.648 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 193.511 null ] >>
endobj
1608 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 539.689 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 182.552 null ] >>
endobj
1609 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 528.73 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 171.593 null ] >>
endobj
1610 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 517.771 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 160.634 null ] >>
endobj
1611 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 506.812 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 149.675 null ] >>
endobj
1612 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 495.853 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 138.716 null ] >>
endobj
1613 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 484.894 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 127.758 null ] >>
endobj
1614 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 473.935 null ] >>
-endobj
-1615 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 462.976 null ] >>
+<< /D [ 1562 0 R /XYZ 79.822 116.799 null ] >>
endobj
-1616 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 452.017 null ] >>
+1561 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1617 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 441.058 null ] >>
+1619 0 obj
+<< /Filter /FlateDecode /Length 2958 >>
+stream
+x\K7ϯ0C߀05 -)e}\-5e{zlj~~?&3oDz&/_Ϝǹ| <J;pA|k]K OK>`dE7{$m~F|ilDKqN ./>Tc qt\AztgT[GJ<KFDϟi0jx'l3M~IR& ]pӯ6&'F᷈[~:_|Y3 )Lm}&ђOT2t,A^va*ߟhR;!8}1,rS
+HNQh鑕MmV;0$!A#WD[|)׆fv$ӾܻB<L3^TCC\ &C2Y&C)F##R2
+ʹ3%8<U_h.z;Oﴷ="dR]z=HY<k Lz
+?2=~FTec853NL+P+% 0$4Y`S>ޚ{Ge7f􊉂jEE;,$t:"(ΚW M&(6Y`-ѐhA`т@YT b}g)
+J;t`o1-4U?B`I(HLlP+Xx.%d" *]藾h*xx~Sv0Heq[
+ -ߩ+qw5ma/qQL_Ɇ(cFu`'q3x2y+Y
++2 `MNiF9rجX=(rfCT<Vl*'EX렭qDG#Up,^񐧗)k>vDQt
+LIJbg>Mo=
+0T8i GGE``/>F3"_O1CXfZc9ۑNiȓ x|w;j! tna 2J33ntz6q%BG$!myS7޴OT#:z͕`ێEOXͅ*|
+˯zHK6 R0- ٿE s*$EFٻRb;ެYà{)nS:>?LXkcC$RPQg4RT1ѥ.Pn3ڄ nLt5W@
+endstream
endobj
1618 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 430.1 null ] >>
+<< /Type /Page /Contents 1619 0 R /Resources 1617 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R /Annots 1664 0 R >>
endobj
-1619 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 419.141 null ] >>
+1664 0 obj
+[ 1616 0 R ]
+endobj
+1616 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 435.916 253.464 446.343 266.194 ]/A << /S /GoTo /D (Hfootnote.38) >> >>
endobj
1620 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 408.182 null ] >>
+<< /D [ 1618 0 R /XYZ 78.37 808.885 null ] >>
endobj
1621 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 397.223 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 745.915 null ] >>
endobj
1622 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 386.264 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 734.956 null ] >>
endobj
1623 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 375.305 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 723.997 null ] >>
endobj
1624 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 364.346 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 713.039 null ] >>
endobj
1625 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 353.387 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 702.08 null ] >>
endobj
1626 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 342.428 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 691.121 null ] >>
endobj
1627 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 331.469 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 680.162 null ] >>
endobj
1628 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 320.511 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 669.203 null ] >>
endobj
1629 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 246.787 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 658.244 null ] >>
endobj
1630 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 235.828 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 647.285 null ] >>
endobj
1631 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 224.869 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 636.326 null ] >>
endobj
1632 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 213.91 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 625.367 null ] >>
endobj
1633 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 202.951 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 614.408 null ] >>
endobj
1634 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 191.992 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 603.45 null ] >>
endobj
1635 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 166.09 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 592.491 null ] >>
endobj
1636 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 140.187 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 581.532 null ] >>
endobj
1637 0 obj
-<< /D [ 1593 0 R /XYZ 79.822 129.228 null ] >>
-endobj
-1592 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1618 0 R /XYZ 79.822 570.573 null ] >>
endobj
-1640 0 obj
-<< /Filter /FlateDecode /Length 3243 >>
-stream
-x\ˎc WZD=Br
-3M ,'v".ß~
-ܙaނ=w
-QHN1cM| Hg>~Z_UڗrqPN }'߭ P_Ra6$yWeԣ
- 0RQ8x,萄,(3"-""xoF?8eݲ^CǞ+Pa
-T t
-ib> s }NJ3dgx@ʅ縐 +)Ʊd›iOepx1.a
-O7G\(6¤-_E}i<2v=ud{Frg=NPY0[L+£akѿ+E> .w5׽+w"6
-x T?N>c]O|9OT~
-&Qgj~ ;˸Y0<" RY΄nFPKKo1}Ly%s%GZK8|PRf+-zݮ
-YA fH\nk\!m1P6/bugKް.+0-ݏ܅~ʞ;N̴ap\صE~I\X0Q#UDcHuB$6)1&y
-'i$*jGEɸIKt>r^>t%\Z?;H#r qFì 粒9T:؜IOGu7!fs[{Q1v
-^̉_3c.gnޅ&lkoP JLcQJ4{S Vc_
-yG~Ko P*l97lmFJ SfervaH5utW~+q=do;%mآ+zXD*O(&ޣz˳QLzE[=P%pq6TB%zβݲ{'^6`rb;RH@L%I"Znr3!ɢU>*S3 o 3t'wYV;`/2\(`IeZXjb0Rٱ Vҵ`8MBʹ<:'Glw]3E&$QcHsv%L,GwWޒd<JSbw aW\x0b9UVڵZtƊ\uUPFLNqS1J0TaKG|Z~lhr(^cr2SK PD@Hi(Erp.N* eU84_ke,<V'FtvT\ZKMja*#ٍfUž-ʳ:a}:D<Ig[7R|Fy 5u91 xPx7N; %z[0WV02T:W@&EVKV۠VR{1!SqC!x29GrΨ
-ofx@Ő
-p]P5.^N΅Mov\t,0[{ }2ga"ܑ>'e 5e,T3al#BL\HS"_<%bmiA3zOOG*O!*7J*P,)SSlBe(
-޹`/Wl+~FwŎyR1/ӿ⢙`h(2+p8tEW̢b9䇵Z%?KK3 HLyT=/0D/0aApK/P~<XO?
-tg )n&e- 4(PKlU"@yJqx,qIkkZZ8<Wg4f񕉯Jw<z O7
-endstream
+1638 0 obj
+<< /D [ 1618 0 R /XYZ 79.822 559.614 null ] >>
endobj
1639 0 obj
-<< /Type /Page /Contents 1640 0 R /Resources 1638 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R /Annots 1685 0 R >>
-endobj
-1685 0 obj
-[ 1591 0 R ]
+<< /D [ 1618 0 R /XYZ 79.822 548.655 null ] >>
endobj
-1591 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 435.916 757.574 446.343 770.303 ]/A << /S /GoTo /D (Hfootnote.38) >> >>
+1640 0 obj
+<< /D [ 1618 0 R /XYZ 79.822 537.696 null ] >>
endobj
1641 0 obj
-<< /D [ 1639 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 526.737 null ] >>
endobj
1642 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 745.915 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 515.778 null ] >>
endobj
1643 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 734.956 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 504.819 null ] >>
endobj
1644 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 723.997 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 493.86 null ] >>
endobj
1645 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 713.039 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 482.902 null ] >>
endobj
1646 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 702.08 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 409.178 null ] >>
endobj
1647 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 652.266 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 398.219 null ] >>
endobj
1648 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 641.308 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 387.26 null ] >>
endobj
1649 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 630.349 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 376.301 null ] >>
endobj
1650 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 619.39 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 365.342 null ] >>
endobj
1651 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 608.431 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 354.384 null ] >>
endobj
1652 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 597.472 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 328.481 null ] >>
endobj
1653 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 586.513 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 302.578 null ] >>
endobj
1654 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 575.554 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 291.619 null ] >>
endobj
1655 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 564.595 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 241.806 null ] >>
endobj
1656 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 553.636 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 230.847 null ] >>
endobj
1657 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 542.677 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 219.888 null ] >>
endobj
1658 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 531.719 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 208.929 null ] >>
endobj
1659 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 505.816 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 197.97 null ] >>
endobj
1660 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 494.857 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 148.157 null ] >>
endobj
1661 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 443.051 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 137.198 null ] >>
endobj
1662 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 432.092 null ] >>
+<< /D [ 1618 0 R /XYZ 79.822 126.239 null ] >>
endobj
1663 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 421.133 null ] >>
+<< /D [ 1618 0 R /XYZ 93.716 95.193 null ] >>
endobj
-1664 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 410.174 null ] >>
+1617 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F59 350 0 R /F84 428 0 R /F74 341 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1665 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 399.215 null ] >>
+1667 0 obj
+<< /Filter /FlateDecode /Length 2730 >>
+stream
+x[n#;+H=@.0YoG(Rrq{rERG$E. g*|z}ܔH@|EE\b`h^ʹ\/<cܬXFۂ炢P'_y\/ӵexҦ;AWl Qq[MBnI[F?D6I+RLp+ۣx T sb(ɤom,S\_X&ǚz+Wq@Jwmݒ͒0Ʈ*XZ <`̢(#dUx}y䚁Ty
+֔ףZ;Őb}["kV2n0@Q A
+<XyBiI;#3́ ޓ{GDnͰ v.. ˅2
+lG\pLFqIQ6;gPOVkP_0[4+wI۫Lդmbr0f6Lq?Io`lgҸ e\?O]#ձt88G.gk9c#8wATJ`z0j,?v jXA'RCϒQèbǢQGޗWѓ^McdCЊ-SeGT*`s~QawqTԌ #6–͡Mi'<ۇ=5p.*FxJQq43z,>;#vUD(ﴧ F:;XJӄ
+{17vSܗK fe|Δ0ɲiX}icy\Q#-&-8<#{y3Tg
+:c׶ju`kk\փǜPMNslc_(t2$ k=)%~@{C׋̵5cqS.{'g~Eg\&,vUzs64)w4(=
+ȦlvN+b3aԊ))gDEeSD;uR}MNXљ\m g{Vl]V>14
+E2CɋE_uOpEKAvV֣DjI5-G26jfTV,-u")l8D8jNh{S~c%0ZAY!h5qSwʙk\xzg<R-G LޒǮjJf.<!4kkA$AD Gq6+QIy%?Rb%U.
+R0.l8iw]%m)478:rFUx64t߃`9~3:b[
+qޖtփ<2Jq6qP$ņ_S3L5(.)Ij>lG@kA!y ƿ+;H$Seh!-Com\*S|Za_ :X$RvZ8 M96RTar-+ 4r9B+uxmڞT߬-?PLe刌<7>
+LI{xf=N|/GYTsX;zu$=8kEb(cGOom~U3t Ue<H%ָ҅ $uiQ{,3RCkg__}K^Vck<Pstӂ1Lm0-Ns䥡9 ?T0iiOdmoOTZ޻kpӴL~|8:'
+endstream
endobj
1666 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 388.256 null ] >>
-endobj
-1667 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 377.298 null ] >>
+<< /Type /Page /Contents 1667 0 R /Resources 1665 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1668 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 366.339 null ] >>
+<< /D [ 1666 0 R /XYZ 78.37 808.885 null ] >>
endobj
1669 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 355.38 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 768.829 null ] >>
endobj
1670 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 344.421 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 757.87 null ] >>
endobj
1671 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 294.608 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 746.912 null ] >>
endobj
1672 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 256.75 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 735.953 null ] >>
endobj
1673 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 245.791 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 724.994 null ] >>
endobj
1674 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 234.832 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 714.035 null ] >>
endobj
1675 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 223.873 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 703.076 null ] >>
endobj
1676 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 197.97 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 692.117 null ] >>
endobj
1677 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 187.011 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 681.158 null ] >>
endobj
1678 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 176.052 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 655.255 null ] >>
endobj
1679 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 165.093 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 644.296 null ] >>
endobj
1680 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 154.134 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 592.491 null ] >>
endobj
1681 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 143.176 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 581.532 null ] >>
endobj
1682 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 132.217 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 570.573 null ] >>
endobj
1683 0 obj
-<< /D [ 1639 0 R /XYZ 79.822 121.258 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 559.614 null ] >>
endobj
1684 0 obj
-<< /D [ 1639 0 R /XYZ 93.716 90.265 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 548.655 null ] >>
endobj
-1638 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F16 336 0 R /F59 346 0 R /F84 425 0 R /F85 437 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+1685 0 obj
+<< /D [ 1666 0 R /XYZ 79.822 537.696 null ] >>
endobj
-1688 0 obj
-<< /Filter /FlateDecode /Length 2713 >>
-stream
-x[n#9+" 0 XU}4KJ'5CVIieD0H˿.3>\^~ޕ sVH|""~Xu1Z0ߗrK/<c[X洖Z2+Evw|GLpЊsΑa$P
-xGݴx>wy~@ewHWlNv ~{Zv!||[1P9Z`ZS^^#V"ex>ǰ6kZpHx=tve /"3}ݒ
-R,N`I)lԻ_;jNLsPPh)# 1U bJ~qn ;L7NQwm M*,H=#JZǶs Wq"ky3gwYdL|3-#(;,ɴc,O
-+#JWz!^c3Ƙc_eBÛj::[nXugu kZgt&\
-JpW)&C;Hx}TSF֮ic,3MIGOZS3Gᑻ"@x]EBzg:"}g Q!Bރ#ZƑrnn1*i
-#'T?pvP|9N-9H׉;
-zzgsb6H~ѯ[6&yƻDK-
-/n[G"9^4%o8t@L J )R8Cq07=|S ҅y^))'=(]ֶ4_g".^hNNVl*ÔI՞ʏ(Ϟz.@ۦ$$#zO3j[ /Ay /I=v =2F,nk"2
-foygkE߆&XSZ!(q 4O9ǒ6PjwaDGN@EuDQtj/
-{MO# UX1PG zFHOlru&hҍ1}SR!`6t\SC'Yui6mCi𲴒e>QЯsQ||[3SMtTV4 b+Y r' >ﱀ놷֪W}+a%Lݵ.SZ Vd|qa ;dIH^& l,\k4J&FZm}4Jн ƛ&[y_F(<yՖ#)6e7މxδ>qv-@F%pXg@nԙPaɅh\{Ad>gǬsjrO"O9vu9m>ݶsz Īz>sCf4n Z>`d9`c=zawߎ[8
-B爭'P5vm;B4ioyXh
-p]"4Aٟ
-*2frLܞ
-i}|rܭ#(OH Ci&2V<|_뢒e;j^Md؃qnĢgEm{qUͺ+0VT Հ-l[4ﳅb{[jlE[2ly-60˙oKC@rڲ$ 3׬/H9{ϯ
-endstream
+1686 0 obj
+<< /D [ 1666 0 R /XYZ 79.822 526.737 null ] >>
endobj
1687 0 obj
-<< /Type /Page /Contents 1688 0 R /Resources 1686 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1666 0 R /XYZ 79.822 515.778 null ] >>
+endobj
+1688 0 obj
+<< /D [ 1666 0 R /XYZ 79.822 504.819 null ] >>
endobj
1689 0 obj
-<< /D [ 1687 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 493.86 null ] >>
endobj
1690 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 768.829 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 444.047 null ] >>
endobj
1691 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 757.87 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 406.189 null ] >>
endobj
1692 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 746.912 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 395.23 null ] >>
endobj
1693 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 735.953 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 384.271 null ] >>
endobj
1694 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 724.994 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 373.313 null ] >>
endobj
1695 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 714.035 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 347.41 null ] >>
endobj
1696 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 703.076 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 336.451 null ] >>
endobj
1697 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 692.117 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 325.492 null ] >>
endobj
1698 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 654.259 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 314.533 null ] >>
endobj
1699 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 643.3 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 303.574 null ] >>
endobj
1700 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 632.341 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 292.615 null ] >>
endobj
1701 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 621.382 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 281.656 null ] >>
endobj
1702 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 583.524 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 270.697 null ] >>
endobj
1703 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 557.621 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 259.738 null ] >>
endobj
1704 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 546.662 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 248.78 null ] >>
endobj
1705 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 535.704 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 237.821 null ] >>
endobj
1706 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 485.89 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 226.862 null ] >>
endobj
1707 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 474.931 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 215.903 null ] >>
endobj
1708 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 463.973 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 204.944 null ] >>
endobj
1709 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 453.014 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 193.985 null ] >>
endobj
1710 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 442.055 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 183.026 null ] >>
endobj
1711 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 431.096 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 145.168 null ] >>
endobj
1712 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 420.137 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 134.209 null ] >>
endobj
1713 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 409.178 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 123.25 null ] >>
endobj
1714 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 398.219 null ] >>
-endobj
-1715 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 387.26 null ] >>
+<< /D [ 1666 0 R /XYZ 79.822 112.291 null ] >>
endobj
-1716 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 376.301 null ] >>
+1665 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F85 441 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1717 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 365.342 null ] >>
+<< /Filter /FlateDecode /Length 2586 >>
+stream
+x[n#+!Y`p[]mo7Y$͝LmKfo/ ?_*&-߷rp Ϙo9 B!CG(JG(=}훒*Q"ᵑ.t
+Zx5"QM#ZCK107 a&\o
+uX S]^%f[hL87
+ nOh"]BO2gGtL$&9*@~)} .#JGR͇_ {G{Ni<=_Iԃ>X\&JXl*YN=1R| #q#Y<fYa^iq5(&D+ s'+[<Pk 43ʌ(AgR6X]O
+o5lyo0\崒 \񚉤_QxbEY51ʠ| (9'?ȡއh-~*UyuyE݊&)_FK%)ȣ-_Oiaܞ$eoo-m2>"+'2E+JtP-$99$W:xU.'{\fg%MUk];۞S}u~h),J+A+BD]8DTr>1Ҥdܥ˫경gF}[y3Ttl&2ʯz*Ԁ"K^Êsi-Ȍ3:{}҇* .yN;E0p_:PV,)՞(J)?YD
+/u(/ _>?z&JfĽ([L؍Ey=Y4} Vfw)܃O&HAQ()
+b:\<L1yH7em&wҨ!y PQ]?I$1-q =7&Q:f ԷI5zWBd^0*Bku&VLT9=N#B.'鱮 ~ʝ%>v5MkE!Ca7B}E)Yhebh3Yc*5bgAv/<m|n=WR5gjEuU?pkSl/EEDV8sO-H'k룎 bYZ,}'(:R&[m-44Y(_F cJl%d&r*9\ox][Zn(S}GJl-E<ko7,!W%rfڊb2#a"%8.8W2ףMC%vRH G}bv۠znfۤOL[f=HW! X!)ҥb㡸wsw/m'VʍF[jC\#|R0)jt8 mN* fV _T o \iN%aGVDb;kN9`6R G[c[&6,]?-ڳ)%ꆊ nNR_ҙ~_.yuNَ\AQ<+Xکg&B>Ն)h%hZ8B;]zF"LZ.n%8Ü#иب'݅+m7Ȫ-d_}_ )eZk&TL}kv6~$L/{:(PUɤ,XdܕU3=} ʥ wDtuT*jצ&\}DRHǙmw"ޅ|Htoe㲫׏K*@ޱִZt:.R>1@Yj.R^!>O{T=[G{棸ڭR J˫\,gֈ- j[Iru?iJЌRe]b;&@,wXaWt44V0t4a'NknH:[BFX@2qr eOa;((
+LjZ.2d߃ɮ
+ \n-6WJz\6{C~V-Jo7 KVqcO^!CmV]e`;vy)>}l㽾$*t+UR*`V3T}bF1 b/(>(W
+kj珗
+endstream
+endobj
+1716 0 obj
+<< /Type /Page /Contents 1717 0 R /Resources 1715 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1718 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 354.384 null ] >>
+<< /D [ 1716 0 R /XYZ 78.37 808.885 null ] >>
endobj
1719 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 343.425 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 768.829 null ] >>
endobj
1720 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 263.723 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 742.926 null ] >>
endobj
1721 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 252.765 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 731.968 null ] >>
endobj
1722 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 179.041 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 721.009 null ] >>
endobj
1723 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 168.082 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 671.195 null ] >>
endobj
1724 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 157.123 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 660.237 null ] >>
endobj
1725 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 146.164 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 649.278 null ] >>
endobj
1726 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 135.205 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 638.319 null ] >>
endobj
1727 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 124.247 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 627.36 null ] >>
endobj
1728 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 113.288 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 616.401 null ] >>
endobj
1729 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 102.329 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 605.442 null ] >>
endobj
1730 0 obj
-<< /D [ 1687 0 R /XYZ 79.822 91.37 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 594.483 null ] >>
endobj
1731 0 obj
-<< /D [ 1687 0 R /XYZ 81.145 80.411 null ] >>
-endobj
-1686 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1716 0 R /XYZ 79.822 583.524 null ] >>
endobj
-1734 0 obj
-<< /Filter /FlateDecode /Length 2425 >>
-stream
-x[n#7+0 X g߂\SRܚnjI(#Xk9ӗ/]b ϿąuF0n/kO<!ԏSǼ1ҵ8 F$톘/(ќ 3J%2`Dʔ }b[3i/$P1sy>K xEZIp\h
-[S O[
-WSFOw#f*Kx2{z"@ate9k0 <u+@tB7{$⚞ I(.jC PEZ!bp(갈Faj,pyM 'ܕH`"FJFPbݰNhnn"Occ@pӛ:9|Hĭ8@{ڗJ3:1SOH־,⎌d@']nxό(6o׈~R(/ +FrOLQM2oeׅVyl61y#R,`'^G Q0<y(5#c⃼Vd'od/N*kq-ZrNE+o7Q|T
-%jY8tuAH4ߞ꽝nⳖf~)H`V)1YsDvD,?} sZ3kR6 M)愝RQ"5lT=QVo;*Ɵ-r'%sMBCAҫ
-kN}G%Xĺ=Y
-b~;4+>OlUMg\8g m]7(cꈿ8IPj9 <b.%֞ӭzu@[Gڛ#Oۦ嬞vJ
-+MS3󪼯Mߕ{8@F4k$(FMo>@UI0n}eG3qjl`tǣd(6I?Uْ&ʉ4K HgS_EA92{t&2ʩw)חfڮ$S(Y H딈)%kƀ o
-endstream
+1732 0 obj
+<< /D [ 1716 0 R /XYZ 79.822 572.565 null ] >>
endobj
1733 0 obj
-<< /Type /Page /Contents 1734 0 R /Resources 1732 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1716 0 R /XYZ 79.822 561.606 null ] >>
+endobj
+1734 0 obj
+<< /D [ 1716 0 R /XYZ 79.822 550.648 null ] >>
endobj
1735 0 obj
-<< /D [ 1733 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 539.689 null ] >>
endobj
1736 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1716 0 R /XYZ 79.822 528.73 null ] >>
endobj
1737 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 449.029 null ] >>
endobj
1738 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 696.421 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 438.07 null ] >>
endobj
1739 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 685.462 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 364.346 null ] >>
endobj
1740 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 674.503 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 353.387 null ] >>
endobj
1741 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 663.544 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 342.428 null ] >>
endobj
1742 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 652.586 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 331.469 null ] >>
endobj
1743 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 641.627 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 320.511 null ] >>
endobj
1744 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 630.668 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 309.552 null ] >>
endobj
1745 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 619.709 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 298.593 null ] >>
endobj
1746 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 608.75 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 287.634 null ] >>
endobj
1747 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 597.791 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 276.675 null ] >>
endobj
1748 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 586.832 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 265.716 null ] >>
endobj
1749 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 575.873 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 254.757 null ] >>
endobj
1750 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 526.379 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 243.798 null ] >>
endobj
1751 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 515.42 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 182.03 null ] >>
endobj
1752 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 504.461 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 171.071 null ] >>
endobj
1753 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 493.502 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 160.112 null ] >>
endobj
1754 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 482.543 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 149.153 null ] >>
endobj
1755 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 471.585 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 138.194 null ] >>
endobj
1756 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 460.626 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 127.235 null ] >>
endobj
1757 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 449.667 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 116.276 null ] >>
endobj
1758 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 438.708 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 105.318 null ] >>
endobj
1759 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 427.749 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 94.359 null ] >>
endobj
1760 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 416.79 null ] >>
-endobj
-1761 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 405.831 null ] >>
+<< /D [ 1716 0 R /XYZ 81.145 83.4 null ] >>
endobj
-1762 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 394.872 null ] >>
+1715 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1763 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 383.913 null ] >>
+<< /Filter /FlateDecode /Length 2450 >>
+stream
+xn#7잯V@ϹzQ#i4כM(I{?})wB欐pzI'NƓтq-Nx\q/Kw'yPoO9L!I+d>Dq&8 10IRM/V2Is2 pIsc `MZ~%'Fp\+ c_~N a4/!d pPR -?x jV*=.\2nć6B&yVGhbg2]+:˸~ !-=wyG0-W@"+O4Y)AT_ 4d4“HiAccD `20V1EY)*:Ŭ~L:VnT:Tal(d"-g=Dc5Jkg}
+#AZ&DLb}W$_[rH=NY<&22"B3L*Ir*[+czt8
+ ,Yf(>aIjP %MEҼtfj~a"SVtuN+ hiF2;K4F%eqDI5Q>z@ kjUp?jD!z1d6/%|*e=%:ge27ȿ{Y2zH-ϣyZ~#+<&g 1sZX tQ9PToccb\APJ[f, e?tV C), dAj-Dxjf*Kw<"NYb PmEqyN9&5tS^ tWorJ!‰wᨡG-HT :s
++A}Ls;h=C!C{H#W%Sg#ը6+K.Iht#n7ZHGSOM{S=&eБ}6] bFrҦZHZđCL#iLI :ot?1C#ncsj!%>ZF0P>4;%3#D
+Ō8u
+puR
+nGΖUشu' f.~EQ>qPu hh|bz\-_=Gd}6Qӿ
+endstream
+endobj
+1762 0 obj
+<< /Type /Page /Contents 1763 0 R /Resources 1761 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1764 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 372.954 null ] >>
+<< /D [ 1762 0 R /XYZ 78.37 808.885 null ] >>
endobj
1765 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 361.995 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 768.829 null ] >>
endobj
1766 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 300.546 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 757.87 null ] >>
endobj
1767 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 289.587 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 708.057 null ] >>
endobj
1768 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 278.628 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 697.098 null ] >>
endobj
1769 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 240.834 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 686.139 null ] >>
endobj
1770 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 229.875 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 675.181 null ] >>
endobj
1771 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 218.916 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 664.222 null ] >>
endobj
1772 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 207.957 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 653.263 null ] >>
endobj
1773 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 196.999 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 642.304 null ] >>
endobj
1774 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 186.04 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 631.345 null ] >>
endobj
1775 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 175.081 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 620.386 null ] >>
endobj
1776 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 164.122 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 609.427 null ] >>
endobj
1777 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 153.163 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 598.468 null ] >>
endobj
1778 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 142.204 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 587.509 null ] >>
endobj
1779 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 131.245 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 576.55 null ] >>
endobj
1780 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 120.286 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 565.591 null ] >>
endobj
1781 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 109.327 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 554.633 null ] >>
endobj
1782 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 98.368 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 543.674 null ] >>
endobj
1783 0 obj
-<< /D [ 1733 0 R /XYZ 81.145 78.635 null ] >>
-endobj
-1732 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1762 0 R /XYZ 81.145 481.905 null ] >>
endobj
-1786 0 obj
-<< /Filter /FlateDecode /Length 2343 >>
-stream
-x[n6+ı]nU[>%٤).ty83#3u=ߟ~^;H@8$ L˃тq-x\q~?CXyi0#~@Oc9iS"w*rN8ϥsch]tڇ3 G`a4א%Ba?7 rm~kgEapNӅ@)y<x&2UpN>`+[އE(땤+pYNʼn3yP2Z
-khS } ߵ4WX{.Oj`ILbȵUi 舥r93ϗ)޲O1ڵN:vI`Ґ]˹"0ᨙsxѱefEW_~n-) :Ŋ^\j]%9 4+4.kN\3a\kL&K 3L4pfx
-Yp m._X| $Sf)⥌a]BaJ/5rqdmJkAXNkSr0]:| DŽ#u(R׍M 'TF\l@ug&}{6n*ܴ9K{rXǂ(#A1Kˆ_C>һMɹrSd0vG}|$yu6jYᦜ@Ŕ=RL]Wl/i$o@B}m-g/b=1Xԕyx\ئeKܒ dpjRCiJ;fXl&-H>54 k\+{&Ki14KRS^Nw>meV8ש!͏Df0ؿ(Z|$~!츽<cE}cWRb[nxRET.9sIRsHeQTD$ɉE8Ynm漇Q՜AKcGqP{-ҞJLNfjݯ.'u46Aj*3(NZ-b}V[ &5haEנ#Zf|s1\6>nYF0!-ۨvڽCj[\'p>WVph*,m3a-v" i&G-$:g t%)20Ȩ5CfG
-ƅbT%hrOdP %z)1aTrdZ ix}) $v&[i0ais]i~$V3dUYuH#1zUQT->qzZ2pdΝ!})B!k]P7 iWAGݦsI=lCrבhOyTH`h@Ru4in;CgWTg\d/P0 @q?sHI
-endstream
+1784 0 obj
+<< /D [ 1762 0 R /XYZ 81.145 470.946 null ] >>
endobj
1785 0 obj
-<< /Type /Page /Contents 1786 0 R /Resources 1784 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1762 0 R /XYZ 81.145 459.987 null ] >>
+endobj
+1786 0 obj
+<< /D [ 1762 0 R /XYZ 81.145 422.129 null ] >>
endobj
1787 0 obj
-<< /D [ 1785 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 411.171 null ] >>
endobj
1788 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 400.212 null ] >>
endobj
1789 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 752.889 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 389.253 null ] >>
endobj
1790 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 741.93 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 378.294 null ] >>
endobj
1791 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 730.971 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 367.335 null ] >>
endobj
1792 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 720.012 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 356.376 null ] >>
endobj
1793 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 709.053 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 345.417 null ] >>
endobj
1794 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 698.095 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 334.458 null ] >>
endobj
1795 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 323.499 null ] >>
endobj
1796 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 312.54 null ] >>
endobj
1797 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 621.382 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 301.582 null ] >>
endobj
1798 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 610.423 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 290.623 null ] >>
endobj
1799 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 599.464 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 279.664 null ] >>
endobj
1800 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 588.506 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 259.738 null ] >>
endobj
1801 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 577.547 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 248.78 null ] >>
endobj
1802 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 566.588 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 232.839 null ] >>
endobj
1803 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 555.629 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 221.88 null ] >>
endobj
1804 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 544.67 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 210.921 null ] >>
endobj
1805 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 533.711 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 199.963 null ] >>
endobj
1806 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 522.752 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 189.004 null ] >>
endobj
1807 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 511.793 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 178.045 null ] >>
endobj
1808 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 500.834 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 150.149 null ] >>
endobj
1809 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 489.875 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 139.19 null ] >>
endobj
1810 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 478.917 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 101.332 null ] >>
endobj
1811 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 467.958 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 90.374 null ] >>
endobj
1812 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 456.999 null ] >>
-endobj
-1813 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 446.04 null ] >>
+<< /D [ 1762 0 R /XYZ 81.145 79.415 null ] >>
endobj
-1814 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 435.081 null ] >>
+1761 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1815 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 424.122 null ] >>
+<< /Filter /FlateDecode /Length 2336 >>
+stream
+x[n#;+QK"
+_O$?uZX<9?^4ZJ?~$Xux"X ~QhjEhE, RBĆ⥟K:kvr9'}}п]S / aH&Yy2#-[K'>xz/XYIwՕIZ0k}ޥN[ϥ{pPqPNH|K*>DY[R}y5Xr?"Rr-WNhmH?5<gdy*yB>y^O/>w]zCOvXˋB[K<^f8r`q QVВݴ((>zg5˞G(ތԲci\ 濲8U)RsT7g 9 Q76:lodF#+kǭ&2uGTK̈́j(a4#Բhh܍Kl-Q]:nc?WF tv#+^ͬvMWcqMd{<1{7 4CW) |tgcV A:yٖ(/L0%5kX KA]hP+|yl18<R~V#} UwՀ VXH~ML<+-|2<95V$6#Q %}N{Cαn֡f9ɚjUMU2gAx6q\ 1ZxԔ%GUVdFb Jx%̚ۂwՔduw-5"ki:o>w~]A#)b FBlx83,nI</FHlDGaY z'%;Yy&ásH\=eM}QU))łZ֬*uNO1̮lcD)[ 13͹h[񃞪yr"Z %BZrTwfESCF
+"cƵx* L@ bi H"igs^5=ezFd!3?Z))`T
+DNlB shX(L'}Ұ|rAbpN`%΂ķZaȐyTTT70 FQ0׽UUd%1ԱP(b9|E
+Dag.Yfs>G%BO WhTB*E޶gcX 2zla7kYK2`0'T RfT_Fjj~pF)Tm wô&a"Qm#S^j
+bAI*9 u(Q'4)#+4Ĵ^ N?ߚsи' <=<37Oade7m3%j]P/5q~!xv˫Rɨݓ#eٺe!rJw9:]eMPTJVSN>?-G\pw羚<ړ u-;+W]Y`\$S/hb/0{SzCHPwytG~}ao卛yU|tdV(5PetPiHV~ U~p{ajZ<a̙ͽ7QkF&ݠG@@m/$͚S| ,_uǼ9 @ҡj3~͚gޗF"cBQ1+A⮧/x7Z#T,{~X74,q{ @cF$ns[0VM [ۍ ڿ2qJ;qN839AM5G ְʷ c`5~9a5m8-,'
+(%Mt+5?I_I:k 
+endstream
+endobj
+1814 0 obj
+<< /Type /Page /Contents 1815 0 R /Resources 1813 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1816 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 413.163 null ] >>
+<< /D [ 1814 0 R /XYZ 78.37 808.885 null ] >>
endobj
1817 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 402.204 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 768.829 null ] >>
endobj
1818 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 391.245 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 757.87 null ] >>
endobj
1819 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 380.286 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 746.912 null ] >>
endobj
1820 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 369.327 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 735.953 null ] >>
endobj
1821 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 358.369 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 724.994 null ] >>
endobj
1822 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 347.41 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 714.035 null ] >>
endobj
1823 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 336.451 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 703.076 null ] >>
endobj
1824 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 325.492 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 692.117 null ] >>
endobj
1825 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 314.533 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 681.158 null ] >>
endobj
1826 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 303.574 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 670.199 null ] >>
endobj
1827 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 292.615 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 659.24 null ] >>
endobj
1828 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 281.656 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 648.281 null ] >>
endobj
1829 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 270.697 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 637.322 null ] >>
endobj
1830 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 259.738 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 626.364 null ] >>
endobj
1831 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 248.78 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 615.405 null ] >>
endobj
1832 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 237.821 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 604.446 null ] >>
endobj
1833 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 226.862 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 593.487 null ] >>
endobj
1834 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 215.903 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 582.528 null ] >>
endobj
1835 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 204.944 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 571.569 null ] >>
endobj
1836 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 193.985 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 560.61 null ] >>
endobj
1837 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 183.026 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 549.651 null ] >>
endobj
1838 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 172.067 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 538.692 null ] >>
endobj
1839 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 161.108 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 527.733 null ] >>
endobj
1840 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 150.149 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 516.775 null ] >>
endobj
1841 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 139.19 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 505.816 null ] >>
endobj
1842 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 128.232 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 494.857 null ] >>
endobj
1843 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 117.273 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 483.898 null ] >>
endobj
1844 0 obj
-<< /D [ 1785 0 R /XYZ 81.145 106.314 null ] >>
-endobj
-1784 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1814 0 R /XYZ 81.145 472.939 null ] >>
endobj
-1847 0 obj
-<< /Filter /FlateDecode /Length 2747 >>
-stream
-x[n$+MwPJ4n_jn-Yd`i)G#yυ{"5oBb(qъ뿗J?R__|Aތba#T8$pH];t}SJ{>"=!4# u u&Ccow'O0
-C~\iT{ϴG`Y >9"fҜ3eȒg3YSɖjۿQZhz7&/1
-bu8.B4W?;ULs"ٮeO5<jQ^Cx=jCw@`
-tZ:Ç͞RHYb 3W#*\eҌdbFkڳ6|>@kN౾%_i4[gl
-PNn 0:+{6ZQh
-ߐU|-*Մ 葦G;,_O{B_hO)yO5rOo; Z~\
-V``2nJ0朘1 -tQI=eeh¤[{g';Qj*l4yڥ^ړn
-9
-nM(D*<^.Fl)[ 7e϶m%Wi҆\h'R¨*)=)4ޏ }kZ;s' anݸmÄًgTom?K@wмl:
-bfx}x)܋5#?.%yMp)­_Ďe"HG+eVLRRj5ZDFmaf grȇ`5^j"ګE>{iW+xإ~%{<0ScթOԺVbՔLʺʮk~('~L)WSٰX#I f Dw`*(x@MSQ>hW+Lk2dlW<ꖏLZpب(1R&bNy;>tzP-C^\r;&'%.]&#埌c=[qZsm-
-1Z͂D/l~WG-<}̢Wf").#Pm|ΰf%@ #+-ntH[4SXaH3Қ!%Дk+M/tqD}=9D>fctG:<~i#<u0YwqX_CZ
-endstream
+1845 0 obj
+<< /D [ 1814 0 R /XYZ 81.145 461.98 null ] >>
endobj
1846 0 obj
-<< /Type /Page /Contents 1847 0 R /Resources 1845 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1814 0 R /XYZ 81.145 451.021 null ] >>
+endobj
+1847 0 obj
+<< /D [ 1814 0 R /XYZ 81.145 440.062 null ] >>
endobj
1848 0 obj
-<< /D [ 1846 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 429.103 null ] >>
endobj
1849 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 418.144 null ] >>
endobj
1850 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 407.186 null ] >>
endobj
1851 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 396.227 null ] >>
endobj
1852 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 709.053 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 385.268 null ] >>
endobj
1853 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 671.195 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 374.309 null ] >>
endobj
1854 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 660.237 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 363.35 null ] >>
endobj
1855 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 649.278 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 352.391 null ] >>
endobj
1856 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 638.319 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 341.432 null ] >>
endobj
1857 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 627.36 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 330.473 null ] >>
endobj
1858 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 616.401 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 319.514 null ] >>
endobj
1859 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 605.442 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 308.555 null ] >>
endobj
1860 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 594.483 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 297.596 null ] >>
endobj
1861 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 583.524 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 286.638 null ] >>
endobj
1862 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 572.565 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 248.78 null ] >>
endobj
1863 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 561.606 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 237.821 null ] >>
endobj
1864 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 550.648 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 226.862 null ] >>
endobj
1865 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 539.689 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 189.004 null ] >>
endobj
1866 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 528.73 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 151.146 null ] >>
endobj
1867 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 517.771 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 140.187 null ] >>
endobj
1868 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 479.913 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 129.228 null ] >>
endobj
1869 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 468.954 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 118.269 null ] >>
endobj
1870 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 457.995 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 107.31 null ] >>
endobj
1871 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 447.036 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 96.351 null ] >>
endobj
1872 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 397.223 null ] >>
+<< /D [ 1814 0 R /XYZ 81.145 85.392 null ] >>
endobj
-1873 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 386.264 null ] >>
-endobj
-1874 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 360.361 null ] >>
+1813 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1875 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 349.402 null ] >>
+<< /Filter /FlateDecode /Length 2579 >>
+stream
+x[n:+a7hYg7j{*D)nŠ#KSzD{<mOvioX8>nc7DVPnR 6J9?sPv#nXqDSs@84ŗ̵;SV)n݋zg !=UM9JJ[0?9(g`2#ދ虥<lpK6(vg׼ &8`B-p eڎLkWx&(, +l:a.J%Ȳ5}VR4#6>D#9%RCI$Ei )أ~j%U̡2֠CEFS=bOG3[,Jl=*Ikgf:8*tm w؆ G kKDVӷ &ߧ<.θ%=AzA"2$CZcYA[|g -FLeXsy5"Γ窎旼sê~0
+΄#gy) y(C|/:,QsHwckI:Qz
+6HfTWT3"m&8Uc;ڕfRf[)QBB^Y6xBQK(Co sͪ9ץ_5FHg>dt%vf"E9}yV~R_mkF/ ViZ]|G֊Wr+,M)L,%^ O咡~V) -ŝM#wU*vOȩQt0Ck;hti \*Zpz"fP^BW;㡔PQ7(`wFuī b\/
+%3A\ \;Ea9lCU?=GabA}<IUWoEQv78 .ʤBSοDOK^槣tk,JHb0ܨSvy*$\;6!-R
+BfX@}̿P ;Tb9n%-qߎeP3p3,`kX"Tfpa$]̗Z &ħ'OMPr^!>>
+endstream
+endobj
+1874 0 obj
+<< /Type /Page /Contents 1875 0 R /Resources 1873 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1876 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 311.544 null ] >>
+<< /D [ 1874 0 R /XYZ 78.37 808.885 null ] >>
endobj
1877 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 300.585 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 768.829 null ] >>
endobj
1878 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 289.626 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 757.87 null ] >>
endobj
1879 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 278.667 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 746.912 null ] >>
endobj
1880 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 267.709 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 735.953 null ] >>
endobj
1881 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 256.75 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 724.994 null ] >>
endobj
1882 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 245.791 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 714.035 null ] >>
endobj
1883 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 234.832 null ] >>
-endobj
-241 0 obj
-<< /D [ 1846 0 R /XYZ 79.37 211.375 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 703.076 null ] >>
endobj
1884 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 169.611 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 665.218 null ] >>
endobj
1885 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 158.653 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 654.259 null ] >>
endobj
1886 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 147.694 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 643.3 null ] >>
endobj
1887 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 136.735 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 632.341 null ] >>
endobj
1888 0 obj
-<< /D [ 1846 0 R /XYZ 81.145 125.776 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 582.528 null ] >>
endobj
-1845 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-1891 0 obj
-<< /Filter /FlateDecode /Length 1860 >>
-stream
-xZˎWRC/`0@{lȺwA)TY%Ͻθ-ԃu.*ۗo]Ӡ|W,֏J9?TKP_.s&lqaBR' X ]5J]z5||͈͢n{Icw0uۻwc*)8n~+.x
-Bֽ)jHpL[?#h4'g+wQ^,#}|G[O.s/_T{-[1Na|HwG$·nyUesqbq[jFLhn{<zd2sU<DU,V#kqF{^/Vj <`u¨(OEh3qFn#|)E)4R.Z0srWk\zw+/[ư8
-;#ßZz*PYgC57)k|$.Tb5ϯ8P* Ȭr&׽,BGS(R\;7Oyջ@kdyTqB:}we@[6U*9!ڲyjAG.S {9X+ 4#BNH]_WޱdJ8!J]kJ3tPe6ўJNHnsTnI%gayVjҊQ Cl7 _۫f;oK}oRVN:dG{Yed1_mN.Nh.ĹĨ4-&gs`ssG0:~+6R|>3ZGd7吷 0^[ehhtRa
-endstream
+1889 0 obj
+<< /D [ 1874 0 R /XYZ 81.145 571.569 null ] >>
endobj
1890 0 obj
-<< /Type /Page /Contents 1891 0 R /Resources 1889 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1874 0 R /XYZ 81.145 545.666 null ] >>
+endobj
+1891 0 obj
+<< /D [ 1874 0 R /XYZ 81.145 534.707 null ] >>
endobj
1892 0 obj
-<< /D [ 1890 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 496.849 null ] >>
endobj
1893 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 485.89 null ] >>
endobj
1894 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 474.931 null ] >>
endobj
1895 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 463.973 null ] >>
endobj
1896 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 453.014 null ] >>
endobj
1897 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 442.055 null ] >>
endobj
1898 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 431.096 null ] >>
endobj
1899 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 420.137 null ] >>
+endobj
+241 0 obj
+<< /D [ 1874 0 R /XYZ 79.37 396.68 null ] >>
endobj
1900 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 354.917 null ] >>
endobj
1901 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 665.218 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 343.958 null ] >>
endobj
1902 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 654.259 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 332.999 null ] >>
endobj
1903 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 627.36 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 322.04 null ] >>
endobj
1904 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 616.401 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 311.081 null ] >>
endobj
1905 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 605.442 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 286.174 null ] >>
endobj
1906 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 594.483 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 275.215 null ] >>
endobj
1907 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 583.524 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 264.256 null ] >>
endobj
1908 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 572.565 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 253.298 null ] >>
endobj
1909 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 561.606 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 242.339 null ] >>
endobj
1910 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 550.648 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 231.38 null ] >>
endobj
1911 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 539.689 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 220.421 null ] >>
endobj
1912 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 528.73 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 209.462 null ] >>
endobj
1913 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 517.771 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 182.563 null ] >>
endobj
1914 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 506.812 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 171.604 null ] >>
endobj
1915 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 495.853 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 144.705 null ] >>
endobj
1916 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 484.894 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 133.746 null ] >>
endobj
1917 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 473.935 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 122.787 null ] >>
endobj
1918 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 462.976 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 111.828 null ] >>
endobj
1919 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 452.017 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 100.869 null ] >>
endobj
1920 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 441.058 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 89.91 null ] >>
endobj
1921 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 430.1 null ] >>
-endobj
-1922 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 419.141 null ] >>
+<< /D [ 1874 0 R /XYZ 81.145 78.951 null ] >>
endobj
-1923 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 408.182 null ] >>
+1873 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1924 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 397.223 null ] >>
+<< /Filter /FlateDecode /Length 1791 >>
+stream
+xZM6 ϯDR_bd')܊^S%Ŷ̸hQ,2&#ET ӟ'vzvsĐ%<}fO&oߍqXׯoeoȧ{Kk=F$fc _?TyM~GcBYHog”%;(X#qo[Sh*8oJ`DQ{Txc\m1r:H݆¿I6ֽ:n D[Xg]zqz/鸮s>sۃ?S<M{u =|U3 /F4%Wi8@@"]:+=B4x&+{Fu8Wn4|9$U*怴˗αWn<q6KN*H{|s<E:GSK=)c*<%>1>tj8 ϕTվV= (Vހ%v^q{C؄_բׅy z +IJ(QBMBdx+Us@z{# l!Fm)$페,qW$r+wt{xy25'ڡSI÷LM (ƎNuGSASpbR}⬂c
+9 u#"7Hk9ef*I!
+
+t_Qgm2Yݭ8Э$26{kp
+ru4zi!{Z))1ݍTGU}@(o>W/rp 8p|o3EMCY HEYHwMxlfB0h OAb
+a%OF)5@ƙF: O5u$7"q -Q^wui6,.ͩ!$5z%L"Z4 w {vs3*N_ӫQ&61E<YaH9c:+'
+~>ދ/WPjQJ9Fo`1
+endstream
+endobj
+1923 0 obj
+<< /Type /Page /Contents 1924 0 R /Resources 1922 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1925 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 386.264 null ] >>
+<< /D [ 1923 0 R /XYZ 78.37 808.885 null ] >>
endobj
1926 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 375.305 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 768.829 null ] >>
endobj
1927 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 364.346 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 757.87 null ] >>
endobj
1928 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 353.387 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 746.912 null ] >>
endobj
1929 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 342.428 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 735.953 null ] >>
endobj
1930 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 331.469 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 724.994 null ] >>
endobj
1931 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 320.511 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 714.035 null ] >>
endobj
1932 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 309.552 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 703.076 null ] >>
endobj
1933 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 298.593 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 692.117 null ] >>
endobj
1934 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 287.634 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 681.158 null ] >>
endobj
1935 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 276.675 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 670.199 null ] >>
endobj
1936 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 265.716 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 659.24 null ] >>
endobj
1937 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 254.757 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 648.281 null ] >>
endobj
1938 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 243.798 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 637.322 null ] >>
endobj
1939 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 232.839 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 626.364 null ] >>
endobj
1940 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 221.88 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 615.405 null ] >>
endobj
1941 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 210.921 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 604.446 null ] >>
endobj
1942 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 199.963 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 593.487 null ] >>
endobj
1943 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 189.004 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 582.528 null ] >>
endobj
1944 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 178.045 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 571.569 null ] >>
endobj
1945 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 167.086 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 560.61 null ] >>
endobj
1946 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 136.202 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 549.651 null ] >>
endobj
1947 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 125.243 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 538.692 null ] >>
endobj
1948 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 114.284 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 527.733 null ] >>
endobj
1949 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 103.325 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 516.775 null ] >>
endobj
1950 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 92.366 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 505.816 null ] >>
endobj
1951 0 obj
-<< /D [ 1890 0 R /XYZ 81.145 81.407 null ] >>
-endobj
-1889 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 1923 0 R /XYZ 81.145 494.857 null ] >>
endobj
-1954 0 obj
-<< /Filter /FlateDecode /Length 2090 >>
-stream
-x[n6)%g! .snE-EnRÏX
-s$\_??iB8N2S'ɒRRZ/%￿?>9qPz$LO$1R( #I0z$hoLuSJogƹa\} *|~.cջp2^(C4%ҚFU+cJN HpZ
-+$ЙݴSq2uh6
-
-ewZ(kŏֶݫڧJgU7W-BUZ97ćpԒY8)Mvit&e9f%eIZ7,@0v;U 8)r?pydW&% vH oBitzQZw^+?-N1^gtڂyq0-i_Tk<kOŘg
-)\+_',jxҳeEQh we
-kP ϚHkvu
-іվ=6RO,uMR\ -\Ѯ>Q\ :+<rBClY
-9BVX Cb"$@${:aQ*7"lA  >DHyZW}h7?-0
-kŝK#/
-EVzDCtoͫւjl
-P+my! )U&Z1f:aSP"L{!(CQ76#K},gFA&ĿCx'7҈^-[M=2)(AT(uCDQK-cd=U}r#/$h0ˀ%ЖV#71;UW#htdC楝&?VHڥ?Sv݊H#>F4Rq-G]Zř|]$
-:v!rDI
-S;44®xl}Qi;J9_)=N;(ޢe8k1~J_G|: <j~SkMc< *KNZ
-RtS轿 =
-endstream
+1952 0 obj
+<< /D [ 1923 0 R /XYZ 81.145 483.898 null ] >>
endobj
1953 0 obj
-<< /Type /Page /Contents 1954 0 R /Resources 1952 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1923 0 R /XYZ 81.145 472.939 null ] >>
+endobj
+1954 0 obj
+<< /D [ 1923 0 R /XYZ 81.145 461.98 null ] >>
endobj
1955 0 obj
-<< /D [ 1953 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 451.021 null ] >>
endobj
1956 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 440.062 null ] >>
endobj
1957 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 429.103 null ] >>
endobj
1958 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 418.144 null ] >>
endobj
1959 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 407.186 null ] >>
endobj
1960 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 396.227 null ] >>
endobj
1961 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 385.268 null ] >>
endobj
1962 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 354.384 null ] >>
endobj
1963 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 343.425 null ] >>
endobj
1964 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 332.466 null ] >>
endobj
1965 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 321.507 null ] >>
endobj
1966 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 310.548 null ] >>
endobj
1967 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 299.589 null ] >>
endobj
1968 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 288.63 null ] >>
endobj
1969 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 277.671 null ] >>
endobj
1970 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 266.712 null ] >>
endobj
1971 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 255.753 null ] >>
endobj
1972 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 244.794 null ] >>
endobj
1973 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 233.836 null ] >>
endobj
1974 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 222.877 null ] >>
endobj
1975 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 211.918 null ] >>
endobj
1976 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 200.959 null ] >>
endobj
1977 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 190 null ] >>
endobj
1978 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 179.041 null ] >>
endobj
1979 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 516.775 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 168.082 null ] >>
endobj
1980 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 505.816 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 157.123 null ] >>
endobj
1981 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 452.099 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 146.164 null ] >>
endobj
1982 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 410.338 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 135.205 null ] >>
endobj
1983 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 399.379 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 124.247 null ] >>
endobj
1984 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 388.421 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 113.288 null ] >>
endobj
1985 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 377.462 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 102.329 null ] >>
endobj
1986 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 366.503 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 91.37 null ] >>
endobj
1987 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 355.544 null ] >>
+<< /D [ 1923 0 R /XYZ 81.145 80.411 null ] >>
endobj
-245 0 obj
-<< /D [ 1953 0 R /XYZ 79.37 319.035 null ] >>
+1922 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1988 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 275.895 null ] >>
+1990 0 obj
+<< /Filter /FlateDecode /Length 2156 >>
+stream
+x[ˎ6 WD g]Ϯ]%Ѳe%&>HHaNdo/ϫ '-WϿ^IɃҪ??^4 u۟HP?^֢_(e3nR$Q1^*"u?}|*)!\~0y(&t!U ﶗ{ 7R( =cA:y'GaQf<2c;24Gg P1HleAE
+abrk93PZ$
+a&Q8NNó]v!'`v6
+Gᘝj.K ey T&toA:G)XOL:yH5H)'BS^HщĹ݆&,\)Ðkg.u{^9qq]>j3ql?fָby]uu2ja3M Ҝn'gq\v\(+㩬6#_[Luү|GI1[]x0gVLJiu,p1tdvZU۷_sH(Nuz7(9dГf7QX]#[輋ٻ-U1Gv%ebT7)N,q,%X?VQG
+ݥn mWgך(hf+#nq=SFB&&D0xSGcCSׂaR0=RvJ͙5Rh.8X#k#P3Wi/<m{%)ӶFM[֝ɬgs
+QZwKnH+/5ajW`2qϕJ YiEPG5RK-_:Ra,<OvZEw)j~LVG|0D
+c9 RBh.Kfώ&i!GQKTcq#h(Wp1H±!y}3 Uaj@(u@t+LiC2g8Pvj~ sCMyuR6Q_ RF[fQeLT/h#fp IHĤA?NG1[$Y+=i;K!@p=BytrE}="@֦!!:Wj8#FĘt^i4M|O =4 P#"\ڧ}T΁;:xtCnLY7H0WOpx#qTO.\=5mI)M4D`isd4]A9JXZf!nn8 lsnuS
+͑a@
+&qt?#5Y?[* ȓA&;7u(CjL;B{fM]D
+opqBZ$4ٱ/G&RHw¡Q6$8M!iYf[:mr5=E3\1$4G]'پ~T7D|EZx7Ze:dhzK;&h-tS }_37næhAbם4q5t,b 2+e_UEKr*a""hGylAm yyw f?=XXРyR
+9Kz!@ҊZI{cr|ws7
+endstream
endobj
1989 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 264.936 null ] >>
-endobj
-1990 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 253.977 null ] >>
+<< /Type /Page /Contents 1990 0 R /Resources 1988 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
1991 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 243.018 null ] >>
+<< /D [ 1989 0 R /XYZ 78.37 808.885 null ] >>
endobj
1992 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 232.059 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 768.829 null ] >>
endobj
1993 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 221.1 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 757.87 null ] >>
endobj
1994 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 210.141 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 746.912 null ] >>
endobj
1995 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 199.183 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 735.953 null ] >>
endobj
1996 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 188.224 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 724.994 null ] >>
endobj
1997 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 177.265 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 670.199 null ] >>
endobj
1998 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 166.306 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 627.36 null ] >>
endobj
1999 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 155.347 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 616.401 null ] >>
endobj
2000 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 144.388 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 605.442 null ] >>
endobj
2001 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 133.429 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 594.483 null ] >>
endobj
2002 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 122.47 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 583.524 null ] >>
endobj
2003 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 572.565 null ] >>
+endobj
+245 0 obj
+<< /D [ 1989 0 R /XYZ 79.37 535.154 null ] >>
endobj
2004 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 491.397 null ] >>
endobj
2005 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 480.438 null ] >>
endobj
2006 0 obj
-<< /D [ 1953 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 469.479 null ] >>
endobj
-1952 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2009 0 obj
-<< /Filter /FlateDecode /Length 2727 >>
-stream
-x[Ɏ8WEFp =i:܂(J)]=( X sN>q?ޮ_oʝ$sV &N' L˓тq-N_9q\9ZV?1OʓeNk-!43\zzS?pKʿ m:"Y~{~
-P$ayg/(`h
- x)܌):JKgފ/M=75 B1eG cÜhh|aT$ƉFTqZ 2"skI(e2jA!sַq\=B&Q qs8,)AiOP /k4h%МrΞXy|0]& re͡J,Idҿ%p8ݹ?ɒch!bz*RrsqO #:Cj ϲ,,SnDMf=& ٳ\"1lmQ"~i\'Yr:)耯 ɑricF,;J/gL
-`W1hڭUlNs͈5$+N_`J[ViL#Gc̒O %\E(=^A)ƭ|.[4bwEL B(rirɉVU4CJ5/NєaBc%:Z!c>PhA;>}0bsn ynpGu
-!*p'Uo2M22ݝ:Ě"=^╾$}0QHaSlI $/$]q%#D I5,2>ЉvM>4Fj[lח`^?
-ءm.RsU3&^)<^{B1JJ9 ;Qs}Slnua#1<Yqua C8>[_uh <4
-?vdV,ì%rQ"Ϥ]ƜfodK‹F᥹Ӂ&Pq<Kֳ$XUEȫN:Ȉ޺OdYS0-1:_^ht@rEJ[G)FsjGTA hq]*ҽ9vqq<}#s)Zv؆YzJ^B2VԢA"U+کn其H3e<XLs5q7_YȒRYl/cz?λ݃@qWf3}A87y-Zђ'E. ͭ~Z74xq _]F4Xif%Dt%i F:|xIh9nBeGvJ~D;f誧o )׹%(cc|Pdvuk<kz<_?/ނ=Z̈́Ҽ>
-; ¨aɽazwQ6~VW'FBh.(ϼDOi?uBS3Jǖk)(sb%By5ɒҴA 9SQf܊FJm##Fҙiuwi`èrtm gĕsM++CubPECߨ`VFQ sS} j5F'0mܦEs435IKO#0cp\mI2H*kGiS\9Zu9{P\89+{GWO2FaQmUPJn/i j7 f9tsGӿ,t%_8ۡ(%Fe:-8ym['Be<ȡ䔻(mI/^ iC9QzYIDab8uu{ 
-endstream
+2007 0 obj
+<< /D [ 1989 0 R /XYZ 81.145 458.521 null ] >>
endobj
2008 0 obj
-<< /Type /Page /Contents 2009 0 R /Resources 2007 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1590 0 R >>
+<< /D [ 1989 0 R /XYZ 81.145 447.562 null ] >>
+endobj
+2009 0 obj
+<< /D [ 1989 0 R /XYZ 81.145 436.603 null ] >>
endobj
2010 0 obj
-<< /D [ 2008 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 425.644 null ] >>
endobj
2011 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 414.685 null ] >>
endobj
2012 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 403.726 null ] >>
endobj
2013 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 392.767 null ] >>
endobj
2014 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 381.808 null ] >>
endobj
2015 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 370.849 null ] >>
endobj
2016 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 359.89 null ] >>
endobj
2017 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 348.931 null ] >>
endobj
2018 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 337.973 null ] >>
endobj
2019 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 327.014 null ] >>
endobj
2020 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 316.055 null ] >>
endobj
2021 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 305.096 null ] >>
endobj
2022 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 294.137 null ] >>
endobj
2023 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 283.178 null ] >>
endobj
2024 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 272.219 null ] >>
endobj
2025 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 261.26 null ] >>
endobj
2026 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 250.301 null ] >>
endobj
2027 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 239.342 null ] >>
endobj
2028 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 497.689 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 228.384 null ] >>
endobj
2029 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 486.73 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 217.425 null ] >>
endobj
2030 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 475.771 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 206.466 null ] >>
endobj
2031 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 464.812 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 195.507 null ] >>
endobj
2032 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 453.853 null ] >>
-endobj
-249 0 obj
-<< /D [ 2008 0 R /XYZ 79.37 406.142 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 184.548 null ] >>
endobj
2033 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 379.658 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 173.589 null ] >>
endobj
2034 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 368.699 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 162.63 null ] >>
endobj
2035 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 357.74 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 151.671 null ] >>
endobj
2036 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 346.781 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 140.712 null ] >>
endobj
2037 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 335.822 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 129.753 null ] >>
endobj
2038 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 324.863 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 118.794 null ] >>
endobj
2039 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 313.904 null ] >>
+<< /D [ 1989 0 R /XYZ 81.145 107.836 null ] >>
endobj
-2040 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 302.945 null ] >>
-endobj
-2041 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 291.986 null ] >>
+1988 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2042 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 281.028 null ] >>
+<< /Filter /FlateDecode /Length 2997 >>
+stream
+x[K#)hdY*WGsVs=.$ӉZ3{MB
+zYBKLc8 -'X`8dId4
+D*'AV‚t-oG"kD/|wp-,rASkȤUNg*Йqq" J(O"Yt`h3
+'%jyJ{HqÀtE9өsr9GJACzpΆDb5(@+GIL
+V?
+e|[3 j*!=o]vـ6Kv@WeȈyk$\|.
+VMvr>BhE1gxvG**,ll6Yf۲S0%7\2ky3
+"nܛ)kEH }JeQjK!2v 3hXJO)ڪƻ=oϜ%ߐ9 WO FJ JN9y;Y5ΌBE&q5j&,04R30̽UWTi5 oxo_C dݒ9c68)-{2,SNԒ "(`YϪv2a6:BQ3}nVi-UnjsrM=銛؂²{p_"{=^ɆɧXt$g$O=c+jmvk ?!fDqL 9?ois6)$;)Upa3yzJ{Qxnv@^șVց2'浚r򶴛(sb|1oBy3ZooE{Qw0 -
+m
+˭xIfj@zi9PmH
+l?6
+v6dH-@i?_MdXbpF'le"2 qxH7P*G_Xmk#"kJr35 Ft7t{p].i|8( gyxomnSK?'\{IO*" ^]t
+pZp4&'P)Kb
+ybvB4x/QV’f%S{o.:!߭
+*¢)JnI![CrV6u47Tߑ6Zh4&wee+9
+D5u[̺y5^T:58-
+TvԴ^G/i:9 i+⨾"0BV:EnrX9-JzWDOԍjU)Tg_A,.=_R{M?9;;pa?\HVtXL ik6$w R>~3^>K`3i &ǹ݌RCrΐZzJ}Yq" :5zil9>ѯa0-/@>ߎ3ĒjT*K Zv*[=
++hբmۻכN "&gGI֕uǖ ]s۞S50Aտ:*JIX^ 'wSoL!R;5O^홐f\9?V:@z -Dd1_'Bq43?[OJ_x,)hQF!* vv|)m)4!iB(g镈&UƗbg)BF05KGY] FAY>ȸG=H0"~=bM?ʱ8f)kEqP@`{뽲99ym/nqW%hԞb4mUk>}QIB:rdAS@[{dD5:E'.͎4go{r<L]ˁNÞжOs@waëq"n(=位ykemt|e4,?]?|/ ܝ
+endstream
+endobj
+2041 0 obj
+<< /Type /Page /Contents 2042 0 R /Resources 2040 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1615 0 R >>
endobj
2043 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 270.069 null ] >>
+<< /D [ 2041 0 R /XYZ 78.37 808.885 null ] >>
endobj
2044 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 259.11 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 689.128 null ] >>
endobj
2045 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 248.151 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 678.169 null ] >>
endobj
2046 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 237.192 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 667.21 null ] >>
endobj
2047 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 226.233 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 656.252 null ] >>
endobj
2048 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 215.274 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 645.293 null ] >>
+endobj
+249 0 obj
+<< /D [ 2041 0 R /XYZ 79.37 595.926 null ] >>
endobj
2049 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 199.67 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 569.106 null ] >>
endobj
2050 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 188.711 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 558.147 null ] >>
endobj
2051 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 177.752 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 547.188 null ] >>
endobj
2052 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 166.793 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 536.229 null ] >>
endobj
2053 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 155.834 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 525.27 null ] >>
endobj
2054 0 obj
-<< /D [ 2008 0 R /XYZ 81.145 144.875 null ] >>
-endobj
-2007 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2041 0 R /XYZ 81.145 514.311 null ] >>
endobj
-2057 0 obj
-<< /Filter /FlateDecode /Length 2498 >>
-stream
-x[n#9+" .a[cӧks nIIIYB5jRK9ß3b
- hr~ܸy_x
-I,f'e$= {&U3>3A3"U\S!hВ#َ0;LZ{ o``D-Mu$ydo,~eXzpr@=BWHOu6uiF}4&%OcmX53j64G|:0hz퍣|:_T'Dz
-LK ~'L"'-zt^hV7x1]m$0b|"?
-<)UuxY.#f]P)
-ɥU4xۈ&0d`gIԼO&,AVMci>F2m&6SJOsr
-0-d'LʼӜ ݟ{{efI髹\MR7+)VJKpnC* Y3oԐU -7ۻ]=*p$M=;
-cvwSҫY *Iz[i#ܥ繷EdS-~bȲ,\+ߊC((si( H+ 88]c|.;
-Vi*Յ:)]ΙnKWЀk|am}KZ[U+f-ᲦH*YxE'j)shìȵi}%
-SNv99U~T鉐5b}@Zd8]ڍÚ\;ozk)ڀ5b8GfF,t7Oѳ>9ԤsˈYYVwZ+%{í{V'_!ř3^5UZ
-endstream
+2055 0 obj
+<< /D [ 2041 0 R /XYZ 81.145 503.352 null ] >>
endobj
2056 0 obj
-<< /Type /Page /Contents 2057 0 R /Resources 2055 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2041 0 R /XYZ 81.145 492.393 null ] >>
+endobj
+2057 0 obj
+<< /D [ 2041 0 R /XYZ 81.145 481.435 null ] >>
endobj
2058 0 obj
-<< /D [ 2056 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 470.476 null ] >>
endobj
2059 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 459.517 null ] >>
endobj
2060 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 448.558 null ] >>
endobj
2061 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 720.161 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 437.599 null ] >>
endobj
2062 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 670.496 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 426.64 null ] >>
endobj
2063 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 659.537 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 415.681 null ] >>
endobj
2064 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 621.828 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 404.722 null ] >>
endobj
2065 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 610.869 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 388.782 null ] >>
endobj
2066 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 599.91 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 377.823 null ] >>
endobj
2067 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 562.2 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 366.864 null ] >>
endobj
2068 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 551.242 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 355.905 null ] >>
endobj
2069 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 540.283 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 344.946 null ] >>
endobj
2070 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 515.122 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 333.988 null ] >>
endobj
2071 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 504.163 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 258.271 null ] >>
endobj
2072 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 493.204 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 247.313 null ] >>
endobj
2073 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 453.651 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 209.455 null ] >>
endobj
2074 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 442.692 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 159.641 null ] >>
endobj
2075 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 431.733 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 148.682 null ] >>
endobj
2076 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 406.573 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 110.824 null ] >>
endobj
2077 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 395.614 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 99.865 null ] >>
endobj
2078 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 384.655 null ] >>
-endobj
-2079 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 373.696 null ] >>
+<< /D [ 2041 0 R /XYZ 81.145 88.907 null ] >>
endobj
-2080 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 362.737 null ] >>
+2040 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F81 381 0 R /F59 350 0 R /F84 428 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2081 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 351.778 null ] >>
+<< /Filter /FlateDecode /Length 2038 >>
+stream
+x[Ɏ7WB0F䚜pm.]#d 9-_W*B~_]>x uxEAgqxwέxu2|JxC
+̙s^
+f$$&FE0$$yp3P"-\2Ѱ |[6W^iMbR(qLqJr$ jpH=gmI%)a 7J] NF Bx*)% Kw
+VhIcnܐnZI[ '9Y7TE353k^afF_HlUOh2uoV*=bn^3YHŀcZsIzR"Dڧ諻(w,ދtq=τeڣK:#]5txY\Xߍ7sM,vYEIP2ЩUZ|V:kL_ N$xf->%ɺ9@j5_T틱%fWQTv u1XQ}9{\/+)-NjI~ooOmqƬ̎ZYB]_#6G$
+4cTj.}ޠW{/ qBS"}Y'OKZğmG$$Yk'o+t3 Tq,& 8T-4 4$|&_FYu^Jj0Mnjo}0#կZiτPK/RV^(KS-jw<oo{Qu}"(S6 s*֌FFb~VG^8Ňti[VnŗK-zgmm ۞(~:DkA<wPEcbkUq7$\*Z}
+Yr$LHjk! HŴ$=RU.Q;<٪SXFLjC6!V%iuLj4 TH[ 7mnMl&.ofŬ ciT^£\飾 2#)LHtIcf%] .
+}B"0S,N[%m<]ixzEd!F<AMp
+endstream
+endobj
+2080 0 obj
+<< /Type /Page /Contents 2081 0 R /Resources 2079 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2082 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 340.819 null ] >>
+<< /D [ 2080 0 R /XYZ 78.37 808.885 null ] >>
endobj
2083 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 313.815 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 745.915 null ] >>
endobj
2084 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 302.856 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 734.956 null ] >>
endobj
2085 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 263.302 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 723.997 null ] >>
endobj
2086 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 252.344 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 698.095 null ] >>
endobj
2087 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 241.385 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 687.136 null ] >>
endobj
2088 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 230.426 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 676.177 null ] >>
endobj
2089 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 219.467 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 636.326 null ] >>
endobj
2090 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 208.508 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 625.367 null ] >>
endobj
2091 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 197.549 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 614.408 null ] >>
endobj
2092 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 186.59 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 588.506 null ] >>
endobj
2093 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 175.631 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 577.547 null ] >>
endobj
2094 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 150.471 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 566.588 null ] >>
endobj
2095 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 139.512 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 555.629 null ] >>
endobj
2096 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 128.553 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 544.67 null ] >>
endobj
2097 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 117.594 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 533.711 null ] >>
endobj
2098 0 obj
-<< /D [ 2056 0 R /XYZ 81.145 106.635 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 522.752 null ] >>
endobj
-2055 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+2099 0 obj
+<< /D [ 2080 0 R /XYZ 81.145 494.857 null ] >>
endobj
-2102 0 obj
-<< /Filter /FlateDecode /Length 1996 >>
-stream
-xZMo#7 WVE.snEZI#$ g43~#=R|$%)L>}x1"דO]g.)!s㇔t?QJ|If%#N"B@`kI`&&6]w2Uo\{z߽7 !LX^V}~ϯY=:])S|>+@g}Jz `$pܑ(Hrl$ o=F|gn2v\V~p,i^F+6Z3[XZ_}A>"_2r-AD1e<KH%2/Lfr
-ס-r&am WfESĎ9]CQr5Á2e+);;-j.?vx :#1aOٳpVȡi}t(Uf/!jN#/p1]<C @2I"$߈YJe45cf/!cD-BGj!*6R'S=YsaB57Zy=jK $rƬg$tˆR$fl!$Y<sRDzK4pʇƍq6#Z\{YR;0l:YFvU:
-d!v Sn _=y<֟߷Eַx DUD"&!B9^}Ηաy)Jӛ
-endstream
+2100 0 obj
+<< /D [ 2080 0 R /XYZ 81.145 483.898 null ] >>
endobj
2101 0 obj
-<< /Type /Page /Contents 2102 0 R /Resources 2100 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2080 0 R /XYZ 81.145 444.047 null ] >>
+endobj
+2102 0 obj
+<< /D [ 2080 0 R /XYZ 81.145 433.088 null ] >>
endobj
2103 0 obj
-<< /D [ 2101 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 422.129 null ] >>
endobj
2104 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 411.171 null ] >>
endobj
2105 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 400.212 null ] >>
endobj
2106 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 389.253 null ] >>
endobj
2107 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 378.294 null ] >>
endobj
2108 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 724.994 null ] >>
-endobj
-253 0 obj
-<< /D [ 2101 0 R /XYZ 79.37 701.537 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 367.335 null ] >>
endobj
2109 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 680.695 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 356.376 null ] >>
endobj
2110 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 669.736 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 330.473 null ] >>
endobj
2111 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 658.777 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 319.514 null ] >>
endobj
2112 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 647.818 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 308.555 null ] >>
endobj
2113 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 636.859 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 297.596 null ] >>
endobj
2114 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 625.9 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 286.638 null ] >>
endobj
2115 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 614.941 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 246.787 null ] >>
endobj
2116 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 603.983 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 235.828 null ] >>
endobj
2117 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 593.024 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 224.869 null ] >>
endobj
2118 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 582.065 null ] >>
-endobj
-257 0 obj
-<< /D [ 2101 0 R /XYZ 79.37 556.616 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 213.91 null ] >>
endobj
2119 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 535.773 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 202.951 null ] >>
+endobj
+253 0 obj
+<< /D [ 2080 0 R /XYZ 79.37 179.495 null ] >>
endobj
2120 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 524.814 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 158.653 null ] >>
endobj
2121 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 513.855 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 147.694 null ] >>
endobj
2122 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 502.897 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 136.735 null ] >>
endobj
2123 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 491.938 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 125.776 null ] >>
endobj
2124 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 480.979 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 114.817 null ] >>
endobj
2125 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 470.02 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 103.858 null ] >>
endobj
2126 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 454.08 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 92.899 null ] >>
endobj
2127 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 443.121 null ] >>
+<< /D [ 2080 0 R /XYZ 81.145 81.94 null ] >>
endobj
-2128 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 432.162 null ] >>
+2079 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2129 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 421.203 null ] >>
+2131 0 obj
+<< /Filter /FlateDecode /Length 1983 >>
+stream
+x[Mo#7 W"Q":c9G-'IbD>R"=}ߞoOWOFĠ4zR'S
+؂4vWby}.:|K+ /tgL7\EGz ʿe.G<{p~ѐQ]e[ZS7aы@".<~Y{|`+S\\*q}Y3f{uL\4<-% R9ip8Ò~`6zZOj#R jOf{YfͶgo > E{[}.8*(%jzM\{*1SX7#Q51\ S}r{-&=d)[%5YU\M~k浩շXsQ{)[`w0z&<Ce:vv:
+0O%G$^N_HRfd5Ui-OAmh`nNӜ"8oG$~ji@hf@H
+C6z?,:-u
+aGkKH#ZN? S`6&)kv¸^H|E
+C+) 'tDb +(中zY$Ĺ
+j#A:֠L=']"865\jl o,g闭Zc#-bm -pW>TI Эx2Q|%YG\5-m7}P݇˾1v>$Hdyo!,Qg+æ]m&i-x4q^G
+髛̲_fy!,Ү"]si!-̘dsalMYrl ol6E[wPcb N0m7pvK"%63e$AzTʻ1F$~RFx9W Igur<JbCpZӽ›4Nxm@%q?,A
+endstream
endobj
2130 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 410.244 null ] >>
-endobj
-2131 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 399.285 null ] >>
+<< /Type /Page /Contents 2131 0 R /Resources 2129 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2132 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 388.326 null ] >>
+<< /D [ 2130 0 R /XYZ 78.37 808.885 null ] >>
endobj
2133 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 372.386 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 768.829 null ] >>
endobj
2134 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 361.427 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 757.87 null ] >>
+endobj
+257 0 obj
+<< /D [ 2130 0 R /XYZ 79.37 733.821 null ] >>
endobj
2135 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 350.468 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 712.978 null ] >>
endobj
2136 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 339.509 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 702.019 null ] >>
endobj
2137 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 328.55 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 691.061 null ] >>
endobj
2138 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 317.591 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 680.102 null ] >>
endobj
2139 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 301.651 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 669.143 null ] >>
endobj
2140 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 290.692 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 658.184 null ] >>
endobj
2141 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 279.733 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 647.225 null ] >>
endobj
2142 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 268.775 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 631.751 null ] >>
endobj
2143 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 257.816 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 620.792 null ] >>
endobj
2144 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 246.857 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 609.833 null ] >>
endobj
2145 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 235.898 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 598.874 null ] >>
endobj
2146 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 219.958 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 587.916 null ] >>
endobj
2147 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 208.999 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 576.957 null ] >>
endobj
2148 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 198.04 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 565.998 null ] >>
endobj
2149 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 187.081 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 550.524 null ] >>
endobj
2150 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 176.122 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 539.565 null ] >>
endobj
2151 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 165.163 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 528.606 null ] >>
endobj
2152 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 149.223 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 517.647 null ] >>
endobj
2153 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 138.264 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 506.688 null ] >>
endobj
2154 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 127.305 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 495.729 null ] >>
endobj
2155 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 116.346 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 480.256 null ] >>
endobj
2156 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 105.387 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 469.297 null ] >>
endobj
2157 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 94.428 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 458.338 null ] >>
endobj
2158 0 obj
-<< /D [ 2101 0 R /XYZ 81.145 83.469 null ] >>
-endobj
-2100 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2130 0 R /XYZ 81.145 447.379 null ] >>
endobj
-2161 0 obj
-<< /Filter /FlateDecode /Length 1945 >>
-stream
-x[ˎ6 W+Q%@׳+mWm%Y%1t2DsHZW+x_\trjs?sНќ;WYk` %ST=1 M/ﴆEksY޿t\}S|1}qܺOZ ue֍HVdʛ\˯5=yܛYRKn:("A&ewd
-jHJ
-Xoʼ9" *Mdüy+[Z\2YԢ7{˫כ[
-yNWiGT@ tbUZEA(YY`U'@%%Ze Xm{VKٮХۖNy `%JX$ࣞ KJ;+kŒHli_5?Ee5K{ jAJ-Z\>op/UPqDٰ}m'vOQ,t>ؼSXD{rKO%D^ۍ+/x;<>*!aJlVd~՚>r iϿj׸Ru4ދC+ҵ2,AswSWˮU"ip%ܒu0tbJPmT9 {+!#X<gW"w$.$Q:FXleLBo AX7ɺZu:"O4'$.fnm&ym7ZL7y.;LڧTdVHl2`۾I4AF<'Y.|LȋeVI<.LI"YY V&@Oh}ȥe7\ZtƤw7m܈$&jZpȭDX%$g
-ZmgpF@n?A}a^(+uWFzz]d)gum_=x[F`xޮSxǿrlQ8T\RuG;VrS~/@4=l5w/XְΕ X ,g'> L-Ҏ'v@ ET:(&65Xbh}_&Rzmоt"_U` faK+c%Ve
-<p^I"-ip\zK-`r2䪧B[q0}c>cBk#X!B6$x
-ʲAKpR|6FEkm飑~uA3Еn=7U ,
-$9XnpvIʭ#1j6(p"8=K*g8OږHrN͸DXx4(,klF&vx?d3'| ѧRO@reF[m6G=Ӭ=+REyDX38)7!^ĎIGm`W"$1O0Y9FyO=,E u#PwXSRNWgp|܄ Q<#Hsɹ;QaE<vrzI 5©Abφk~Jyl:5r+VI)1oU@?)u e$YpgS_ɴ#Q\N@fd[H9b?@\^ಝâɦy;}biJ(E@xrZMk_
-endstream
+2159 0 obj
+<< /D [ 2130 0 R /XYZ 81.145 436.42 null ] >>
endobj
2160 0 obj
-<< /Type /Page /Contents 2161 0 R /Resources 2159 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2130 0 R /XYZ 81.145 425.461 null ] >>
+endobj
+2161 0 obj
+<< /D [ 2130 0 R /XYZ 81.145 414.502 null ] >>
endobj
2162 0 obj
-<< /D [ 2160 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 399.028 null ] >>
endobj
2163 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 388.07 null ] >>
endobj
2164 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 377.111 null ] >>
endobj
2165 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 366.152 null ] >>
endobj
2166 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 731.287 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 355.193 null ] >>
endobj
2167 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 720.328 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 344.234 null ] >>
endobj
2168 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 709.369 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 328.76 null ] >>
endobj
2169 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 698.41 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 317.801 null ] >>
endobj
2170 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 687.451 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 306.842 null ] >>
endobj
2171 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 676.492 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 295.883 null ] >>
endobj
2172 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 665.533 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 284.925 null ] >>
endobj
2173 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 654.575 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 273.966 null ] >>
endobj
2174 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 638.95 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 263.007 null ] >>
endobj
2175 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 627.991 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 252.048 null ] >>
endobj
2176 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 617.032 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 241.089 null ] >>
endobj
2177 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 606.073 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 230.13 null ] >>
endobj
2178 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 595.114 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 214.656 null ] >>
endobj
2179 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 584.155 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 203.697 null ] >>
endobj
2180 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 573.196 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 192.738 null ] >>
endobj
2181 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 557.572 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 181.78 null ] >>
endobj
2182 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 546.613 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 170.821 null ] >>
endobj
2183 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 535.654 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 159.862 null ] >>
endobj
2184 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 524.695 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 148.903 null ] >>
endobj
2185 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 513.736 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 137.944 null ] >>
endobj
2186 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 502.777 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 122.47 null ] >>
endobj
2187 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 487.152 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 111.511 null ] >>
endobj
2188 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 476.194 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 100.552 null ] >>
endobj
2189 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 465.235 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 89.593 null ] >>
endobj
2190 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 454.276 null ] >>
-endobj
-2191 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 443.317 null ] >>
+<< /D [ 2130 0 R /XYZ 81.145 78.635 null ] >>
endobj
-2192 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 432.358 null ] >>
+2129 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2193 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 421.399 null ] >>
+<< /Filter /FlateDecode /Length 1880 >>
+stream
+x[K6 ϯ(W L&=ϭ=_+ʖ-Ӝb[,8/|~(pb\_C lb/ %E &??~5&8c|1&^￿P_/J>8FH!q*H2{G>z>՟^f^k;>=_{eҋ9~obt}>' F5NpIq$xl(!IJ2"7!uu Lަ==9ܙp7,ϫ<dD E(%r$Y|[$)(^f;'"%]YK[͓sm"9>%mM:Qdܵ6FnC?,Eb,M$=]7gcڻB*xD OY}K$Jq@Zu2m5HR܅\ce^ I<1"$S$I𛆀г]s7ƕi9SODkUD[ 5MGtQH _#D-d$$]-Rdn .Y,D4vqx= i EkꬹEE`}\J?B-ߖĉpyN87e"䑈k(dNţ|zŢd\i2V/T(Z7H!A,n. YųR}+I4ER-$_dH?l
+.CNeHm
+D%I]
+CxAr9CL(1݊E=ϣ}k%s)b5~'Gt>%H6H~Rߗl4FʷՎ+58%ieHTFoSA黲=j[=nwN,Yfl5xawe*J޲ZE\oN<|*vdHj&nƐ<=d$nl lg{x þbYk̻Gsyǹwr`ǐƷ5-|Zm$VatA=cH$Y?|y hiS F8xs'$m'$wŀ
+uĐH%goV~o<-y*`EA1$h~.fy(CgiСi*Ғѷa:x[cR?tf '`z,Đ0#n{֋㞳T͘@K -emX5wp</9' ꆆ!=ml'c\?Xו C:q/TҸ33 I|+1)l¡Tw, kNf$SaHxvkc,QZץ0J2$)ChctZL# 4g'I#"T7[.quqNn
+dϐxY,j`hzefHu9/PG
+ːI TQ#)^]Pn?%[*ɦ, Mn1J2+ #y݆KNUeU)F4Pd˿Z]
+endstream
+endobj
+2192 0 obj
+<< /Type /Page /Contents 2193 0 R /Resources 2191 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2194 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 405.774 null ] >>
+<< /D [ 2192 0 R /XYZ 78.37 808.885 null ] >>
endobj
2195 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 394.815 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 768.829 null ] >>
endobj
2196 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 383.857 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 757.87 null ] >>
endobj
2197 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 372.898 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 742.571 null ] >>
endobj
2198 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 361.939 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 731.612 null ] >>
endobj
2199 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 350.98 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 720.653 null ] >>
endobj
2200 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 340.021 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 709.694 null ] >>
endobj
2201 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 329.062 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 698.736 null ] >>
endobj
2202 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 313.437 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 687.777 null ] >>
endobj
2203 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 302.478 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 672.477 null ] >>
endobj
2204 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 291.52 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 661.519 null ] >>
endobj
2205 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 280.561 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 650.56 null ] >>
endobj
2206 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 269.602 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 639.601 null ] >>
endobj
2207 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 258.643 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 628.642 null ] >>
endobj
2208 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 243.018 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 617.683 null ] >>
endobj
2209 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 232.059 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 606.724 null ] >>
endobj
2210 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 221.1 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 591.425 null ] >>
endobj
2211 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 210.141 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 580.466 null ] >>
endobj
2212 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 199.183 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 569.507 null ] >>
endobj
2213 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 188.224 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 558.548 null ] >>
endobj
2214 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 177.265 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 547.589 null ] >>
endobj
2215 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 166.306 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 536.63 null ] >>
endobj
2216 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 155.347 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 525.671 null ] >>
endobj
2217 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 144.388 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 514.712 null ] >>
endobj
2218 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 133.429 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 499.413 null ] >>
endobj
2219 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 122.47 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 488.454 null ] >>
endobj
2220 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 477.495 null ] >>
endobj
2221 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 466.537 null ] >>
endobj
2222 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 455.578 null ] >>
endobj
2223 0 obj
-<< /D [ 2160 0 R /XYZ 81.145 78.635 null ] >>
-endobj
-2159 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2192 0 R /XYZ 81.145 444.619 null ] >>
endobj
-2226 0 obj
-<< /Filter /FlateDecode /Length 1846 >>
-stream
-xڭZ͎6 SV#QbfynE]I-f6'Xx'v/HZ']|r*'c9ϜN19}I?MW$wJ*`ӌcLPGfvT0~rP^{ ")prd2x*Nf-J\MrQBmid2rY+hd'_l]m>LÏV)2ZL-ժj~HlTKg[$8ĶGQA=K8=Ȥ"Tʐ:rRHJtHcpuf[*X!ZeYa,ķ@>@9kXL-&yBC87E`Di3Fy|XVRUwu9 Yyh1*Er[ Ig!3R$o:`<HT|U%--C/Lo>b42*Ajs ֗ɫh'Q RFOactS $!an$rϓ
-~Uz:6B%HVWҼRX qRɱU)۴N;Rl ӮE8dV Fi&̕&ug&orг'clɍj-iuVV)v>Y{zαOB-\NJY<&% D$( 'ɓc D8[yiIy罤TsB7|Q v wͮU~wXOl
-l)lJ6|d3C%z^-wɄf<.[[iXz-%g-(kc ԖaHf>Շϡ,*2F\O欗U-ٔqyU>s ]t7.6^\l'BE݆cEgz.ڗQ`|a74oH[qWa.|7ϒ%AO*ޟP(U;y@w,L>ΫT}
-ABmZL$Դ>Ot}p,9 T<. Aoi6jYǶyiH5O dn>'~Fk֕ 5ªM~J^W>րj-l RHf+=,BWcoL)mU6*jdEsiUڏ\-W!@jVZk#eB)vl<@*[]Ru$q3T, L:hfe{ 6'<߷RK:Pڰ%l kfpoĦ҆1_}%Gs2VԺ(<Q&eôS
-cw5&{,(ZGa96?,xAoO eJ|R<u%@{ {*PW2Wkny5?g4<zh(礕 {*q.4cH׾E<߬ze[Pf=?1w
-n:/U`]J2{qɵ؛P&~wc0lvz:5$HbIJiMIR x+W[<lڱIjN<o[yρ;yR8l!V<Mlw}E})&CˏprQ\аI
-endstream
+2224 0 obj
+<< /D [ 2192 0 R /XYZ 81.145 429.32 null ] >>
endobj
2225 0 obj
-<< /Type /Page /Contents 2226 0 R /Resources 2224 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2192 0 R /XYZ 81.145 418.361 null ] >>
+endobj
+2226 0 obj
+<< /D [ 2192 0 R /XYZ 81.145 407.402 null ] >>
endobj
2227 0 obj
-<< /D [ 2225 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 396.443 null ] >>
endobj
2228 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 385.484 null ] >>
endobj
2229 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 374.525 null ] >>
endobj
2230 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 363.566 null ] >>
endobj
2231 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 352.607 null ] >>
endobj
2232 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 341.648 null ] >>
endobj
2233 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 330.689 null ] >>
endobj
2234 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 319.73 null ] >>
endobj
2235 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 308.772 null ] >>
endobj
2236 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 297.813 null ] >>
endobj
2237 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 286.854 null ] >>
endobj
2238 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 275.895 null ] >>
endobj
2239 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 264.936 null ] >>
endobj
2240 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 253.977 null ] >>
endobj
2241 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 243.018 null ] >>
endobj
2242 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 232.059 null ] >>
endobj
2243 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 221.1 null ] >>
endobj
2244 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 210.141 null ] >>
endobj
2245 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 199.183 null ] >>
endobj
2246 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 188.224 null ] >>
endobj
2247 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 177.265 null ] >>
endobj
2248 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 166.306 null ] >>
endobj
2249 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 155.347 null ] >>
endobj
2250 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 144.388 null ] >>
endobj
2251 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 516.775 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 133.429 null ] >>
endobj
2252 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 505.816 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 122.47 null ] >>
endobj
2253 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 478.919 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 111.511 null ] >>
endobj
2254 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 467.96 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 100.552 null ] >>
endobj
2255 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 457.001 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 89.593 null ] >>
endobj
2256 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 446.042 null ] >>
-endobj
-2257 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 435.084 null ] >>
+<< /D [ 2192 0 R /XYZ 81.145 78.635 null ] >>
endobj
-2258 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 424.125 null ] >>
+2191 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2259 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 397.228 null ] >>
+<< /Filter /FlateDecode /Length 1879 >>
+stream
+xڭZn6+!o"@Yή]%)88%Y:Ϝ-{?^/#bP.L%pҩ~KiAJKKEfs ":CɄ\~-RvXrg+Je<+Gl^ҧc#k6dy:
+e4iyY>"q,ϟ\r;^B*OUy9"G&lcPoן*%6<G$+A:|_ܻ['
+\儻sBis-FXmIKuE0A7n%yPr8,o,ã\XBBKÞ5}qhavV`G9T - )iB1n٢[8.{{TVuϡRU\U ^/ǝL(guK$0ÄVa  p>񞫻绕=SPe)zVW076J$̀cuƪFֹw<~T+%ڡE0=z5J6[7$B9&$6YD0$1'R~bpR4'(B7dt^abF$6[%%L3!2,SFG;ɦvwXpA>-MfMhZ lfudF΄1\!8o3ev[|96kFrh,Av=Z*,ݛ t؇*'2B'ꪴ(y﹔:6 M6^{.ɍnpBF ˓z?GmoNV=[&O8NH.%̾d,J]} IT1 au ݛv<'ES*OI"AdK 86̙pΧ+4Na 1TߙKҳikgF://~*k_Kn$FI$~fغ NLjצ"VhB={dˌ TtqB
+endstream
+endobj
+2258 0 obj
+<< /Type /Page /Contents 2259 0 R /Resources 2257 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2260 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 386.269 null ] >>
+<< /D [ 2258 0 R /XYZ 78.37 808.885 null ] >>
endobj
2261 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 375.31 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 768.829 null ] >>
endobj
2262 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 364.352 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 757.87 null ] >>
endobj
2263 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 353.393 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 746.912 null ] >>
endobj
2264 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 342.434 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 735.953 null ] >>
endobj
2265 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 331.475 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 724.994 null ] >>
endobj
2266 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 320.516 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 714.035 null ] >>
endobj
2267 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 309.557 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 703.076 null ] >>
endobj
2268 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 282.661 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 692.117 null ] >>
endobj
2269 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 271.702 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 681.158 null ] >>
endobj
2270 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 260.743 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 670.199 null ] >>
endobj
2271 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 249.784 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 642.304 null ] >>
endobj
2272 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 238.825 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 631.345 null ] >>
endobj
2273 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 227.866 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 620.386 null ] >>
endobj
2274 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 216.907 null ] >>
-endobj
-261 0 obj
-<< /D [ 2225 0 R /XYZ 79.37 192.457 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 609.427 null ] >>
endobj
2275 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 160.326 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 598.468 null ] >>
endobj
2276 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 149.367 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 587.509 null ] >>
endobj
2277 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 138.408 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 559.614 null ] >>
endobj
2278 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 127.449 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 548.655 null ] >>
endobj
2279 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 116.49 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 537.696 null ] >>
endobj
2280 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 526.737 null ] >>
endobj
2281 0 obj
-<< /D [ 2225 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 515.778 null ] >>
endobj
-2224 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2284 0 obj
-<< /Filter /FlateDecode /Length 2605 >>
-stream
-x[Ic9Cw@i@}\m q+.zzT{ִD~U8ӧN<۷'żNfy\ſֿoRNHGaնs({>Zʁ:| 'jq =%0Hτ3N'R3LO@ sS֠YCy4Gn2D`xھZJ~5Dqo?mƆ i <y=wincyegIxYXg}s0PE^"LdoG]d;J>gBNgVO#u5憁1S RȉInΤq-
-zJow <I{22}IԂ9
->_t\=D]K|OrGHyfZ&!y<~릁 ~69DƷH-VYSKK̷ ŷ-\k|DU,SUK
-D`ML$ x~:B5 @XkRN ,v(
-rSb4I  a
-$[M([w8B\X2`'~P/іH#m6$"[̇q1͐VޓX ꕰ$nRnU9ϴh*P/Kyny9nob~(82{ GPGSk'2
-?ә\kgu^.,Hfa`E-PT:P= ~SL["C.sZ"5͂5G~dw'- P\mKGO.T
-.y O Kq z>G{x\]H~^JH7t0"D[K duG.B5U9)䳓mn Z~7 ^9r=$fVs&I=j*<E^p{u-"͂,c=ˬk$KbH=9;)gzB78ژ`$tTc %uk&=;,p֑G^tجj jRڹFliqEJۯӻh3gbI0+2S6ʨd9*Y֙QJ?Zzxb?yTJ@o$8c@e "|%horJKͺry4Cc斎hHFws*ooٰKZ\H>f| trtWK</>9<  Yjrq "nyd:Rz̒^:pA/8^疋n@E+ kU R{|/Vo^KX~8t6=<swJ4fDkܻˊ(5-FczK^mڙx
-iQROf|=DU_m?Jg$mJ@N>'Sc3W~2ܤsc{:иAVa@qiv^S\>*xfbx
-endstream
+2282 0 obj
+<< /D [ 2258 0 R /XYZ 81.145 504.819 null ] >>
endobj
2283 0 obj
-<< /Type /Page /Contents 2284 0 R /Resources 2282 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2258 0 R /XYZ 81.145 493.86 null ] >>
+endobj
+2284 0 obj
+<< /D [ 2258 0 R /XYZ 81.145 482.902 null ] >>
endobj
2285 0 obj
-<< /D [ 2283 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 471.943 null ] >>
endobj
2286 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 444.047 null ] >>
endobj
2287 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 433.088 null ] >>
endobj
2288 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 422.129 null ] >>
endobj
2289 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 411.171 null ] >>
endobj
2290 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 400.212 null ] >>
endobj
2291 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 389.253 null ] >>
endobj
2292 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 378.294 null ] >>
endobj
-265 0 obj
-<< /D [ 2283 0 R /XYZ 79.37 678.299 null ] >>
+261 0 obj
+<< /D [ 2258 0 R /XYZ 79.37 352.845 null ] >>
endobj
2293 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 657.456 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 320.047 null ] >>
endobj
2294 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 646.497 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 309.088 null ] >>
endobj
2295 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 635.539 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 298.129 null ] >>
endobj
2296 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 624.58 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 287.171 null ] >>
endobj
2297 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 613.621 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 276.212 null ] >>
endobj
2298 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 602.662 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 248.316 null ] >>
endobj
2299 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 591.703 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 237.357 null ] >>
endobj
2300 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 580.744 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 226.398 null ] >>
endobj
2301 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 569.785 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 215.44 null ] >>
endobj
2302 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 558.826 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 204.481 null ] >>
endobj
2303 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 547.867 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 193.522 null ] >>
endobj
2304 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 536.908 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 182.563 null ] >>
endobj
2305 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 525.95 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 171.604 null ] >>
endobj
2306 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 486.323 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 160.645 null ] >>
+endobj
+265 0 obj
+<< /D [ 2258 0 R /XYZ 79.37 135.196 null ] >>
endobj
2307 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 475.364 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 114.354 null ] >>
endobj
2308 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 464.405 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 103.395 null ] >>
endobj
2309 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 453.446 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 92.436 null ] >>
endobj
2310 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 442.487 null ] >>
+<< /D [ 2258 0 R /XYZ 81.145 81.477 null ] >>
endobj
-2311 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 431.528 null ] >>
+2257 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2312 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 420.569 null ] >>
+2313 0 obj
+<< /Filter /FlateDecode /Length 2283 >>
+stream
+xˎ6_a9d"tAk6{_IhYTNY#{~:?}?iB8N2N'kF<,%4y?OP_NƠ+(0BYh!~'o:#V9|ߘekV_so3?yNw<,DrG$Г}PFX- ;\x /aCܭg&](I1(إRHnSif.h!QɍuFS N~϶hT9SGX ԅw#% v;f٫-.kx $-
+e
+ R~(J8\IF5E]| vV]W6y)0rwk v_?5f<~*:@>[/0iv1(^69
+iVp}N{&|2V0P`&JaTL]{㞣1+xLcOٿe|.+\r ! lQdBܤhV2`1m) P7Gx9<+Dz)z 62Dl
+]b<[g2td9N2I_Ȋ~QWm,DL4yQC fX~1̮exWXFWؿ'!4AK!eSoT dI*c51ZCBKfn=Tz~!"򡓷CɅ߇
+G[:ѓ Tkl5۞l6aZټw? TuaoRRCN>EJ@gboaK nGo;'7PsB:96h 眵"ήnR # Ը64=H ـ]P>BzPCU ൻ ߵwNO2kHim<9hh#5`f@z|j$?Z)zܛew@z|*ݔ0Sv:5:/4F;+oCZ@Kb]֔=\SGKpht_e[n З?v #JGTx=G̏?šH >'Rv=vDmQ IƸb@c.r|4jXj=vR h*Y%""DUK'7iu1MA 5%9Zz={M9rJ8հu3Juy /3|^fF/_I}lR,,sMgԉ/% [/
+x9υҸ.J9
+W+7k||m%qoSE-2IVI)(ߨKFOԾjkG'wl+=P2Ƶ1ߢϙR{4ȇ"RÏU6l Z 3q6͉h$pk/(~nL6h31$kBJ^=q54De#m.T[Ҥ$u6Q!f4B-vgP@&__.Y?-㌦[C}`VſK9-|./Е+5J0]JW"tȲV+%CWO)Sf*lCDLlα;}ۙ&z6 ~ZV^\Y0ojP׎w׀>7TĹKQ҉8YPpDȈ@IDŽ%͕.P^
+#`g/It8$ج5=v2B5x>_T&N.#
+@I+U!7P 裗nI W'_vJEC]>tzfK #-jW\Lo@nҹ/].O]^UFo89 ;at}{ T
+endstream
endobj
-269 0 obj
-<< /D [ 2283 0 R /XYZ 79.37 396.175 null ] >>
+2312 0 obj
+<< /Type /Page /Contents 2313 0 R /Resources 2311 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2314 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 322.708 null ] >>
+<< /D [ 2312 0 R /XYZ 78.37 808.885 null ] >>
endobj
2315 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 311.749 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 768.829 null ] >>
endobj
2316 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 300.79 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 757.87 null ] >>
endobj
2317 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 258.734 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 746.912 null ] >>
endobj
2318 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 247.776 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 735.953 null ] >>
endobj
2319 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 236.817 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 724.994 null ] >>
endobj
2320 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 225.858 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 714.035 null ] >>
endobj
2321 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 214.899 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 703.076 null ] >>
endobj
2322 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 203.94 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 692.117 null ] >>
endobj
2323 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 188.224 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 681.158 null ] >>
endobj
2324 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 177.265 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 641.308 null ] >>
endobj
2325 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 166.306 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 630.349 null ] >>
endobj
2326 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 155.347 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 619.39 null ] >>
endobj
2327 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 144.388 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 608.431 null ] >>
endobj
2328 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 133.429 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 597.472 null ] >>
endobj
2329 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 122.47 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 586.513 null ] >>
endobj
2330 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 575.554 null ] >>
endobj
2331 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 564.595 null ] >>
endobj
2332 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 553.636 null ] >>
endobj
2333 0 obj
-<< /D [ 2283 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 539.689 null ] >>
endobj
-2282 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F74 337 0 R /F88 635 0 R /F87 2313 0 R /F111 636 0 R /F64 333 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2336 0 obj
-<< /Filter /FlateDecode /Length 3184 >>
-stream
-x\Ɏ$ WZ"*;' \7Wڗbia j2#BAqH13uSd
-翾f`\nx\h㟖7O+o9Ѷta손ys
-hzw%}I'}OJh:Iq&8dB$SOHʠgZ
-ăGҢzW1^iy~W(0JTvu6d:y4x5bI~Ք蘐83){BkSa\ub
-\2crz \RM$V2e]͔8:(cGYz
-w!ܪ
-#Il5{ue٘(xw!OX/AzL[ ^R"ٕ7Mi43ORz`x稳L!vPf^RhTtQbۨ îjYӻgƴ'0'6rdetV얼:]6x,_U˟;;@\/%%2tr2LBD21\WKFkIk&Ïϒ=j jD`&^~? "plKSO7
-H"C]2~OR80019%ċ>}W(0oʡOy7S)p9p͸̕u9#+EUI3z_.6g2 G6:Ȁ<3E*>OH۲[K1G4~'_<K"ր%)Az-E$6{3nSG#Hz%ddS&z)zsۥc%.Iԗi; K2Ug`,.
-:
-y:fpB['[?Y"{&`\i
-](ܔLT=>qVq#q"HGe֨uk%9;oT 2߰L|rMʶI2즞ѿ,u ` zx5z0?X!2W/a&yؒij9օ%MS .,*!XsHup,B[=M^t
-Rکz/(Ŕ/B^9iG*IA EEOAVS~V)YC9 vj>͡i}Dycݨ -i`z wcԬrq/sMP*$]`9F։5r:֩@FF'6PVȌ3](-EeF)w:RZ%d*&FZ-el:?l?.m6Zg3<>:(γI飛JbIS ~-`.rkS_;\JsC=Kk=N=5xCk+*y7zjﲑR1jcD">c,mcC0{ՆfT &NHu=M9WQ2j
-FLD7-9ij"19ihdh5ve@ڦ=rFAJ\I.T+v#
-G 歰m{eݦ%
-f_ L2bys$|z C_p")̓N$B_-AJBhk_Rz浮9zB'?Tq}Uт0Pj$pW
-endstream
+2334 0 obj
+<< /D [ 2312 0 R /XYZ 81.145 528.73 null ] >>
endobj
2335 0 obj
-<< /Type /Page /Contents 2336 0 R /Resources 2334 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2312 0 R /XYZ 81.145 517.771 null ] >>
+endobj
+2336 0 obj
+<< /D [ 2312 0 R /XYZ 81.145 506.812 null ] >>
endobj
2337 0 obj
-<< /D [ 2335 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 495.853 null ] >>
endobj
2338 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 484.894 null ] >>
endobj
2339 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 473.935 null ] >>
endobj
2340 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 462.976 null ] >>
endobj
2341 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 452.017 null ] >>
endobj
2342 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 669.203 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 441.058 null ] >>
endobj
2343 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 658.244 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 430.1 null ] >>
endobj
2344 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 647.285 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 419.141 null ] >>
endobj
2345 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 558.618 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 408.182 null ] >>
endobj
2346 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 547.659 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 397.223 null ] >>
endobj
2347 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 536.7 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 386.264 null ] >>
endobj
-2348 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 448.032 null ] >>
+269 0 obj
+<< /D [ 2312 0 R /XYZ 79.37 359.317 null ] >>
endobj
2349 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 437.073 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 285.178 null ] >>
endobj
2350 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 274.219 null ] >>
endobj
2351 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 349.402 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 263.26 null ] >>
endobj
2352 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 338.443 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 220.421 null ] >>
endobj
2353 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 327.484 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 209.462 null ] >>
endobj
2354 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 316.525 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 198.503 null ] >>
endobj
2355 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 305.567 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 187.544 null ] >>
endobj
2356 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 294.608 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 176.585 null ] >>
endobj
2357 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 283.649 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 165.626 null ] >>
endobj
2358 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 183.026 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 149.686 null ] >>
endobj
2359 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 172.067 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 138.727 null ] >>
endobj
2360 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 161.108 null ] >>
-endobj
-2361 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 150.149 null ] >>
+<< /D [ 2312 0 R /XYZ 81.145 127.768 null ] >>
endobj
-2362 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 139.19 null ] >>
+2311 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F88 641 0 R /F87 2348 0 R /F111 642 0 R /F64 337 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2363 0 obj
-<< /D [ 2335 0 R /XYZ 81.145 128.232 null ] >>
-endobj
-2334 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F83 414 0 R /F81 377 0 R /F65 335 0 R /F85 437 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2366 0 obj
-<< /Filter /FlateDecode /Length 2583 >>
+<< /Filter /FlateDecode /Length 3363 >>
stream
-x[n#=SZ#896i:ڨTt7CIQGR^xuqiw\kq_/k9<| 0+9ī4H=?da&R"5 j(y0HA8ok_}!}[ -
-<D(H)Q$%j? :hfoߙtU<ƾZ86Pt)|#*uc7)f_h\2*  5IL2DК =I愹af#:{ h /(eL-P 2g
-d, hY^ oSh^f sҎ@GIz'Uz )+ѨO"%^Oh.~Mld^dLTb%qG'`dʆES>sѪ'kwI+$ Us))LSL n)}6 <ǧ(s4_k>;Dkǐ'kOIbf"u}*#_y3=cI}=*GǞ3ZYa4S\$rOnkhp@2Hs$YbJ{-MT:xIҴz^:;SψzV1c<su2M< )ȷc;>uShz@' ' M-1MJ4hdc E*-z(惬J}ja:Ǖ;zJ_BPs͎GZ`]SOw)>B(uKԁRצ,2scASwf !񧂆[@ː2)C{} tMZ=ggXLfᖸ=
-ExGs-u)ٻ9}6'@i&7񹳦[H鷝o+[n&Ȅ)Q\L5a#ssU؀v-d|'4c)ZSEҩVL\/so8JθD*߉T~G嘏kB/S
-cؽJL絡jrr
-))5LHےGp+X6'N4xN1|bI#Q |#׫@UQ2{w8IY5nVVC>b`αyX(^}뢤8T rjR+`\K~g+=
+x\Ɏ$7W,Q;P(Ӏ}3:sZ-X `gBAqH1s߿| p0_>7qI{F0noqsqn>ҧs ~jU~8+'S8H3OHch&<~f;ͰF Q+h#HQ~(;rJÌ$SDIݬpaԼ%) м8hGTV|+#Y@ O҅Ok2f)pǤJG 7"Cb<2vOԞ$~Tq)2
+1 ?ݻ#26.gy.]+-*GUM#@*6;V5@ 5rںT\u% H{dǙaDZFN4D;n5Lݎ}Bbމz 
+άSf
+?eύߞ8͡oZ:ޢkPPD&hF {-ͷg >oA);}J6F>Ug3zN3G3zW3z)tMig̔S֦@Fy 9cu(qjU9ǜ zB;{yrw<OKU.hx eJq Dž &̅K
+W`Oz8?J靠ҡ@Fɓގkdc4$KLr)Sv#yo[ D( F
+=$Hp
+t"uoEtҮ'Pmx2/IM1Yc'z,]c
+p9F٥+p 4c\He;J8#89(ˎ9״{[igfP^"zJg mkk+gڮIaҨފ}BK#&9j{9B4#1Qj1!XD";DfRհ*'2F6f=f+ӅXezH!vP:&=(1ܹ mTPT.)yy3SZ`s9\?a\22*Q#)^P<zӈ/ת 1,L mR
+Hv"y຀0B >ّf-[ؤ5
+?$E'ʦ24/Wqv/Pf7F}\AHPw](
+whVi3ٍ|$Tmz0!ڹ&i$D4
+[?)yPy^u =><̯!VES惡;Sl`~e ьms5 u;8L/S .%,2`(鵈OXpҸ" |4s䏅H9xI4Jȑ
+o&6evw6Iʵ[c魮Zz\dYw ײAX4rs_̳(Yb+|GDӕ!kQ)ӌ-hzSR
+[JdL?*ՈRJZ+vCE gʙN^j/#j*&IOJ2YF \s$g͵[Х$@2#, TB]
+E߹ԇ<:4U~٪%$PY8weV*H\(AWcI[Q-<dl#f,384mc :ܮ&WfnBf9 !ȑ}.axT˿6\0-oUK9Lpp_ޗp-j{dKݦ%f_Lh|@`ђ-`Ν ב%^Nӱkב N8?F!0oy;́OQ&ܝ3ntl1~bC#<eq#{R2Pj*%pW' jO9o
+ct3N 9Y5
endstream
endobj
+2362 0 obj
+<< /Type /Page /Contents 2363 0 R /Resources 2361 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
+endobj
+2364 0 obj
+<< /D [ 2362 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+273 0 obj
+<< /D [ 2362 0 R /XYZ 79.37 771.024 null ] >>
+endobj
2365 0 obj
-<< /Type /Page /Contents 2366 0 R /Resources 2364 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2362 0 R /XYZ 81.145 718.553 null ] >>
+endobj
+2366 0 obj
+<< /D [ 2362 0 R /XYZ 81.145 707.594 null ] >>
endobj
2367 0 obj
-<< /D [ 2365 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 696.635 null ] >>
endobj
2368 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 742.926 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 631.878 null ] >>
endobj
2369 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 731.968 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 620.919 null ] >>
endobj
2370 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 721.009 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 609.96 null ] >>
endobj
2371 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 710.05 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 521.293 null ] >>
endobj
2372 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 699.091 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 510.334 null ] >>
endobj
2373 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 688.132 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 499.375 null ] >>
endobj
2374 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 677.173 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 410.707 null ] >>
endobj
2375 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 666.214 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 399.748 null ] >>
endobj
2376 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 625.367 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 388.789 null ] >>
endobj
2377 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 614.408 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 312.077 null ] >>
endobj
2378 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 603.45 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 301.118 null ] >>
endobj
2379 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 592.491 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 290.159 null ] >>
endobj
2380 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 581.532 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 279.2 null ] >>
endobj
2381 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 565.591 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 268.242 null ] >>
endobj
2382 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 554.633 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 257.283 null ] >>
endobj
2383 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 543.674 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 246.324 null ] >>
endobj
2384 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 532.715 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 145.701 null ] >>
endobj
2385 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 521.756 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 134.742 null ] >>
endobj
2386 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 510.797 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 123.783 null ] >>
endobj
2387 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 499.838 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 112.824 null ] >>
endobj
2388 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 488.879 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 101.865 null ] >>
endobj
2389 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 477.92 null ] >>
+<< /D [ 2362 0 R /XYZ 81.145 90.907 null ] >>
endobj
-2390 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 466.961 null ] >>
-endobj
-2391 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 407.731 null ] >>
+2361 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R /F65 339 0 R /F59 350 0 R /F84 428 0 R /F74 341 0 R /F83 415 0 R /F81 381 0 R /F85 441 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2392 0 obj
-<< /D [ 2365 0 R /XYZ 79.37 371.063 null ] >>
+<< /Filter /FlateDecode /Length 2576 >>
+stream
+x[n#=SZ#Z ?0s9_GJH\")H .9 Z^>C~тq-.sm9LJןȝoAùKx ^O&7 )Tj|W&û
+s^6L(;Rs+޷ BoIpߢkONE}ORJR A͌;7W /cE*?p$XC<Fqb.s>`A1u&IIZ>#'oaN,{d#6:Vgw|oPC }{
+gzBcI}=*ˤԣçq{z)
+%4%2a'%|v#^3E# G'S:dcGn!oŒ
+tU0:U oC- SG
+d ȶRGOR:* =Y[h+@R,#-3g&T"J|`@\1="U|R7O{cHRo ܛ# I2N & '-o5L8IuZdnw&YsL
+
+ߵKQz{[K[:C%̢)ބ#3yn<9hx,?$üY+楍
+&wIFS+;53޺S>W1]Qc@nCUBըo{w8IY5nVVu1yuidαyX(^}yErjR+bTK~m
+endstream
+endobj
+2391 0 obj
+<< /Type /Page /Contents 2392 0 R /Resources 2390 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2393 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 352.929 null ] >>
+<< /D [ 2391 0 R /XYZ 78.37 808.885 null ] >>
endobj
2394 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 341.97 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 742.926 null ] >>
endobj
2395 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 301.123 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 731.968 null ] >>
endobj
2396 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 290.164 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 721.009 null ] >>
endobj
2397 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 279.205 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 710.05 null ] >>
endobj
2398 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 268.246 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 699.091 null ] >>
endobj
2399 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 257.287 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 688.132 null ] >>
endobj
2400 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 204.485 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 677.173 null ] >>
endobj
2401 0 obj
-<< /D [ 2365 0 R /XYZ 81.145 169.616 null ] >>
-endobj
-2364 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F83 414 0 R /F59 346 0 R /F84 425 0 R /F74 337 0 R /F22 367 0 R /F65 335 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2391 0 R /XYZ 81.145 666.214 null ] >>
endobj
-2404 0 obj
-<< /Filter /FlateDecode /Length 2021 >>
-stream
-xZn6 S V"? d2 [k{_+ǖeّ&zdƖ?)2)/]o?nJ_ ] yQڋ5JH.o_~Ҁ>,VR5|=~/]F0"5=t}O2E˿T~xl6#\\<oAnK=ЄS}myJ"1٭)'ͬ|jZ3W~hHO%}uM.@zd>uf#{O;res9/2YA꥖DZk9sE䅒j!S\"Dşr'QZV#Aƫ^AXHXSP1[ؗaڌn9cvʷݠj}5BsN!Z;Z(XJ]'N~]\`Ϡq\ Ċ`H4oXl4yY).Ҭ@ByUP
-$hBP2|
-PO1BSZEnKh(w"eb 7v0u?n4Bf;"\KTlz#;xvf'従A[αbвbWYi}>aR'iP\D ReŻ-
-颶;$sDd 'vIԣÜ 0%?|71M򧩰"('ESy- *?pNډ2p6[;"v/-.jJu-h"΃9<i<riP8)Pm4(/_<fM995p-R EyɻhV&dQ`+ KwֿS,@/$y:O6RL
-m Wm_$ BY׵Mˇ@ @u|-")݀3󕥶oVW .C?_6HoGDe@w ڗSY*
-c,)U[H-Lc,mDESah`T9U.+Ep
-Z; PR
-Żvv$[.q4l7A(_q{B7(LiOX#_i kw2_V4}LW<hBY'`߲y):IFo}G·/xO]rI$xpͅ{`:^}M5
-endstream
+2402 0 obj
+<< /D [ 2391 0 R /XYZ 81.145 625.367 null ] >>
endobj
2403 0 obj
-<< /Type /Page /Contents 2404 0 R /Resources 2402 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2391 0 R /XYZ 81.145 614.408 null ] >>
+endobj
+2404 0 obj
+<< /D [ 2391 0 R /XYZ 81.145 603.45 null ] >>
endobj
2405 0 obj
-<< /D [ 2403 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 592.491 null ] >>
endobj
2406 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 742.926 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 581.532 null ] >>
endobj
2407 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 731.968 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 565.591 null ] >>
endobj
2408 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 721.009 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 554.633 null ] >>
endobj
2409 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 710.05 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 543.674 null ] >>
endobj
2410 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 699.091 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 532.715 null ] >>
endobj
2411 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 688.132 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 521.756 null ] >>
endobj
2412 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 677.173 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 510.797 null ] >>
endobj
2413 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 666.214 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 499.838 null ] >>
endobj
2414 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 613.412 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 488.879 null ] >>
endobj
2415 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 602.453 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 477.92 null ] >>
endobj
2416 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 591.494 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 466.961 null ] >>
endobj
2417 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 580.535 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 407.731 null ] >>
endobj
2418 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 569.577 null ] >>
+<< /D [ 2391 0 R /XYZ 79.37 371.063 null ] >>
endobj
2419 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 558.618 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 352.929 null ] >>
endobj
2420 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 547.659 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 341.97 null ] >>
endobj
2421 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 536.7 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 301.123 null ] >>
endobj
2422 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 525.741 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 290.164 null ] >>
endobj
2423 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 514.782 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 279.205 null ] >>
endobj
2424 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 503.823 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 268.246 null ] >>
endobj
2425 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 492.864 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 257.287 null ] >>
endobj
2426 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 481.905 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 204.485 null ] >>
endobj
2427 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 470.946 null ] >>
+<< /D [ 2391 0 R /XYZ 81.145 169.616 null ] >>
endobj
-2428 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 459.987 null ] >>
-endobj
-2429 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 449.029 null ] >>
+2390 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F83 415 0 R /F59 350 0 R /F84 428 0 R /F74 341 0 R /F22 371 0 R /F65 339 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2430 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 438.07 null ] >>
+<< /Filter /FlateDecode /Length 2015 >>
+stream
+xZn6 +DR/ d.uvE-D$-ť-S!EN onȓ:Y/ОQBuzg).x0B wF ,?H~-Rzu
+,eΧ?~ z[ &l5'[ ` +Cݚj'p9<s=T HO'z5z\f\zNE4˱?(C8wgЂqnPT-$#)#(r.j'q<kUDjuд"~|(/WJI($ )^h=Ղ0m6ertʷ:` jc-Bs?N!V;Z(X`y$+WG'3j9
+ĆblHtoXl4yY!.Ҭ@By5 P
+$h%u#^Y
+ c& ,!#.Qы74.8ا(vZѐ4mrG~k Mc`H$ID{Зs_D8)Pς"j$UYۨSP9ezj{w{v'4^=<yFHNcz@I27ID"Cڅ ' dzO/1!$
++2θ>)`k!4><m:MZj'ƤMotlE$nuQPoa gw<4Q\Oi
+\=-'%GBcVBhJu^T fe2Q\XrSjz!Iy:|t3<t̓ZC+7$fot36bKrdS%ۄ~SǀFWXѹ$tB ,klIM0sp0dB
+wbHIŴ lP!ΖA}$&zhx?-N
+:v
+b,Pʭ}i$uJP6sy"")W4SEaT5ZVd
+[MΕaեwz,
+pjtF;i_K獝
+$P{lgkKGAXS)Bmsx/-QOa k72_V4}ٛLW"hBY'`ߢżgAF}G΃/tFX|H.D0p1ڜH
+w7o
+endstream
+endobj
+2429 0 obj
+<< /Type /Page /Contents 2430 0 R /Resources 2428 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2431 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 427.111 null ] >>
+<< /D [ 2429 0 R /XYZ 78.37 808.885 null ] >>
endobj
2432 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 396.227 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 742.926 null ] >>
endobj
2433 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 385.268 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 731.968 null ] >>
endobj
2434 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 374.309 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 721.009 null ] >>
endobj
2435 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 363.35 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 710.05 null ] >>
endobj
2436 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 699.091 null ] >>
endobj
2437 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 341.432 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 688.132 null ] >>
endobj
2438 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 330.473 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 677.173 null ] >>
endobj
2439 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 297.596 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 666.214 null ] >>
endobj
2440 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 264.72 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 613.412 null ] >>
endobj
2441 0 obj
-<< /D [ 2403 0 R /XYZ 81.145 186.015 null ] >>
-endobj
-2402 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F65 335 0 R /F59 346 0 R /F84 425 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2429 0 R /XYZ 81.145 602.453 null ] >>
endobj
-2444 0 obj
-<< /Filter /FlateDecode /Length 2171 >>
-stream
-xZr,' +A)WgnUޥMVmxCL|}XMG
-WxH+nb̂ yyq`ڕ 캵 R~U@4uI=y$|@ r$%r bj(YhOhA[Gzp0!]AGO|z):/l/1Ic~8χ@Q kL?fh?WO3gQְcLCbGCHS үƼQ#uxyUR^9~&'\G!i=tZ24Wv<\-Eͨ18~SܞZ9G{T]!ÜVirמ.;p$TszG<x :T
-P<{><Zg4%FU胆c˙>Bғ4A>\;#!UN€vbΑ2oI:aj)Й܂:LE74r4^FoPߚ@x{hgI3 DQ1]9MpLqm\G[y`0 X{
-}<!V 1;Z4Ҥ K_8#TUׁnzG{jZGSlo@duOQh̀)o=8
-ރ{o B)fO*ЪQN[vFymI ov;BJ
-V##M-Ya{B'HonU9&͗9H(ō]HUMk3cIi==L7[x4=S>%Gxq#``ut\)gV<ٜޟ r
-endstream
+2442 0 obj
+<< /D [ 2429 0 R /XYZ 81.145 591.494 null ] >>
endobj
2443 0 obj
-<< /Type /Page /Contents 2444 0 R /Resources 2442 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2429 0 R /XYZ 81.145 580.535 null ] >>
+endobj
+2444 0 obj
+<< /D [ 2429 0 R /XYZ 81.145 569.577 null ] >>
endobj
2445 0 obj
-<< /D [ 2443 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 558.618 null ] >>
endobj
2446 0 obj
-<< /D [ 2443 0 R /XYZ 79.37 773.016 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 547.659 null ] >>
endobj
2447 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 536.7 null ] >>
endobj
2448 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 525.741 null ] >>
endobj
2449 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 514.782 null ] >>
endobj
2450 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 503.823 null ] >>
endobj
2451 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 633.337 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 492.864 null ] >>
endobj
2452 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 622.379 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 481.905 null ] >>
endobj
2453 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 611.42 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 470.946 null ] >>
endobj
2454 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 600.461 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 459.987 null ] >>
endobj
2455 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 589.502 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 449.029 null ] >>
endobj
2456 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 578.543 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 438.07 null ] >>
endobj
2457 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 567.584 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 427.111 null ] >>
endobj
2458 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 556.625 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 396.227 null ] >>
endobj
2459 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 545.666 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 385.268 null ] >>
endobj
2460 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 534.707 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 374.309 null ] >>
endobj
2461 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 523.748 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 363.35 null ] >>
endobj
2462 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 512.789 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 352.391 null ] >>
endobj
2463 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 471.943 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 341.432 null ] >>
endobj
2464 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 460.984 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 330.473 null ] >>
endobj
2465 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 450.025 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 297.596 null ] >>
endobj
2466 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 439.066 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 264.72 null ] >>
endobj
2467 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 428.107 null ] >>
-endobj
-2468 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 417.148 null ] >>
+<< /D [ 2429 0 R /XYZ 81.145 186.015 null ] >>
endobj
-2469 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 406.189 null ] >>
+2428 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F65 339 0 R /F59 350 0 R /F84 428 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2470 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 395.23 null ] >>
+<< /Filter /FlateDecode /Length 2234 >>
+stream
+x[rc'+@wrʊTe]*d߆}Hؚ,lK\8t78p<sߟO߯
+PMFpyL=x"wҧoho9
+(by0ѯ/$f ߿i"B @YB),,?~ +Ct=ƒdu5蝸a-|yT>Bh4UuI-q4<V!By=SB[
+GxB*-(tIx~*};gY.4/5n,SGA|^= P-G<V>3fy)oisL[Rb;{c(-2jB/RWf,Q URxy3=gpRl: Z-AY!/K,cj Ⱦw9X(yJ+a)YTCIܴ)5o=KMu1zˆI3=PKŔv*GYDDyZ\EP?}t6ך]y6K3_2(ZYY8ܳGA\%sY`$RmT9 'iUgℹ)OA䔕E҂8L04 R(,Gurӵ$y),%$q9s9',,s'6pŖ{>
+pW%qlnӌw$1N4"q,툹Y_?-dC4IÚN_$Sf&#*i!,JLN8mI< -p$Ej&m|SmTltQ0£b}@YR]'lek
+B@')Zj!AM=
+%ﲶe~(^z!=J-)Mtn)p!XC<P8w[fSv냽P[iޢhg8ݼa@otp`3qsS qzBKBMAcc
+'@b^{ns_tՇڲ8ðErfDj$^%t v@XʿP Ub-Roq?Ei Kzt4AZ euj\RzXkw=8Q
+gd^c)%2>cu_hvI繑dn5ooUT,(1-oan93-qAzI-66RCy|&dCjK
+=꙱:Lkvf
+endstream
+endobj
+2469 0 obj
+<< /Type /Page /Contents 2470 0 R /Resources 2468 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2471 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 384.271 null ] >>
+<< /D [ 2469 0 R /XYZ 78.37 808.885 null ] >>
endobj
2472 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 353.387 null ] >>
+<< /D [ 2469 0 R /XYZ 79.37 773.016 null ] >>
endobj
2473 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 342.428 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 754.882 null ] >>
endobj
2474 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 331.469 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 743.923 null ] >>
endobj
2475 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 320.511 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 732.964 null ] >>
endobj
2476 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 309.552 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 722.005 null ] >>
endobj
2477 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 298.593 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 633.337 null ] >>
endobj
2478 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 287.634 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 622.379 null ] >>
endobj
2479 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 276.675 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 611.42 null ] >>
endobj
2480 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 265.716 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 600.461 null ] >>
endobj
2481 0 obj
-<< /D [ 2443 0 R /XYZ 79.37 215.101 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 589.502 null ] >>
endobj
2482 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 185.011 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 578.543 null ] >>
endobj
2483 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 174.052 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 567.584 null ] >>
endobj
2484 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 163.093 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 556.625 null ] >>
endobj
2485 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 132.209 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 545.666 null ] >>
endobj
2486 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 121.25 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 534.707 null ] >>
endobj
2487 0 obj
-<< /D [ 2443 0 R /XYZ 81.145 110.291 null ] >>
-endobj
-2442 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F59 346 0 R /F84 425 0 R /F15 334 0 R /F81 377 0 R /F74 337 0 R /F83 414 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2469 0 R /XYZ 81.145 523.748 null ] >>
endobj
-2490 0 obj
-<< /Filter /FlateDecode /Length 1813 >>
-stream
-xZM6 ϯV")JLVڞ+ْ-D;آ&gCO:ӗWN7IɃb:96J9ww-hVkz| ,B}yt*0qS| D>ᢵ~͂g >!Y_c麈@W]:X.}琮/O@*,.r3, Ah;J&e.Bߵ|s2iR^d&m%g%"@h6ttEX5Y<Je%0tgSH"=2~l<>0xe"u~(@@Px4U1vĠ 8^J|Kc3K6u;%tԥ,-zt @[
-34bv{-fc= ZiQBhԿT&HAp
-,6/</1q軂ҋ a녟R/D𹿏zAz^0z}k$)I#06FMf:X?4H=6ѹ("}~)׹)la|#Վc=AYq|3m Ô#hiN{UӍ/oO
-endstream
+2488 0 obj
+<< /D [ 2469 0 R /XYZ 81.145 512.789 null ] >>
endobj
2489 0 obj
-<< /Type /Page /Contents 2490 0 R /Resources 2488 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2099 0 R >>
+<< /D [ 2469 0 R /XYZ 81.145 471.943 null ] >>
+endobj
+2490 0 obj
+<< /D [ 2469 0 R /XYZ 81.145 460.984 null ] >>
endobj
2491 0 obj
-<< /D [ 2489 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 450.025 null ] >>
endobj
2492 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 439.066 null ] >>
endobj
2493 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 428.107 null ] >>
endobj
2494 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 417.148 null ] >>
endobj
2495 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 406.189 null ] >>
endobj
2496 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 395.23 null ] >>
endobj
2497 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 384.271 null ] >>
endobj
2498 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 373.313 null ] >>
endobj
2499 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 342.428 null ] >>
endobj
2500 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 331.469 null ] >>
endobj
2501 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 320.511 null ] >>
endobj
2502 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 309.552 null ] >>
endobj
2503 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 298.593 null ] >>
endobj
2504 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 287.634 null ] >>
endobj
2505 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 276.675 null ] >>
endobj
2506 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 265.716 null ] >>
endobj
2507 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 254.757 null ] >>
endobj
2508 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 243.798 null ] >>
endobj
2509 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 2469 0 R /XYZ 79.37 193.183 null ] >>
endobj
2510 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 495.853 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 163.093 null ] >>
endobj
2511 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 455.006 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 152.134 null ] >>
endobj
2512 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 444.047 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 141.176 null ] >>
endobj
2513 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 433.088 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 125.235 null ] >>
endobj
2514 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 422.129 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 114.276 null ] >>
endobj
2515 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 411.171 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 103.318 null ] >>
endobj
2516 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 400.212 null ] >>
+<< /D [ 2469 0 R /XYZ 81.145 92.359 null ] >>
endobj
-2517 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 389.253 null ] >>
-endobj
-2518 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 378.294 null ] >>
+2468 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F59 350 0 R /F84 428 0 R /F15 338 0 R /F81 381 0 R /F74 341 0 R /F83 415 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2519 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 367.335 null ] >>
+<< /Filter /FlateDecode /Length 1714 >>
+stream
+x[͎#'SR UER4GynQ) 4M
+Inl(
+[[ӵU2I2vWFw@4SsܷK$h IB
+ɌJ- $' (C?T/Jjdz?՟zQ;2C%"4yHVJW4Z;yaN d5I0EHٖ3VgLH2*c -I4'
+xQK@mC
+NEBm`MnU`bH?(u/ d{%$ l
+8beKDVtc+
+|ʣ9sxgS~<#ZЦU] ;-dv@,w']fSrbnm&9jЀ |PҤLjFD0%B;n
+[u(|*<8;_)կvq%Dr"4c5%Bg,r`|b}$^?E"U;HNjUPFF:ʐcJ1HãJt"mv!}Qg}GɈQeގ*[ttnh/!^}X>62j ?@*@knY3 DZ} +r2ɳxFZ{uuƁD7=^cf `TF
+i41 MIx,H8+ÇN 9pvRX
+hXcY{O~I *Zxzʰ슀gN\=X*$3FݷG6u
+#e[-[,6]V91]A¾/s7dKwIg5ݧ; pONOol$˶G>d]3߮B3n9#IMݾtInnq&D媙ɧa^+uyӡr6CԞ}:r&^)D
+e&T6mor푾~}2=ң p*yGo;GyQ T3_
+({(|ֽ>{駵F DzvηjKC
+endstream
+endobj
+2518 0 obj
+<< /Type /Page /Contents 2519 0 R /Resources 2517 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2128 0 R >>
endobj
2520 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 356.376 null ] >>
+<< /D [ 2518 0 R /XYZ 78.37 808.885 null ] >>
endobj
2521 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 345.417 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 768.829 null ] >>
endobj
2522 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 334.458 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 757.87 null ] >>
endobj
2523 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 323.499 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 746.912 null ] >>
endobj
2524 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 282.653 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 735.953 null ] >>
endobj
2525 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 271.694 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 724.994 null ] >>
endobj
2526 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 260.735 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 714.035 null ] >>
endobj
2527 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 249.776 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 703.076 null ] >>
endobj
2528 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 238.817 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 692.117 null ] >>
endobj
2529 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 227.858 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 681.158 null ] >>
endobj
2530 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 187.011 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 648.281 null ] >>
endobj
2531 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 176.052 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 637.322 null ] >>
endobj
2532 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 165.093 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 626.364 null ] >>
endobj
2533 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 154.134 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 615.405 null ] >>
endobj
2534 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 143.176 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 604.446 null ] >>
endobj
2535 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 132.217 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 561.606 null ] >>
endobj
2536 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 121.258 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 520.76 null ] >>
endobj
2537 0 obj
-<< /D [ 2489 0 R /XYZ 81.145 110.299 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 509.801 null ] >>
endobj
-2488 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+2538 0 obj
+<< /D [ 2518 0 R /XYZ 81.145 498.842 null ] >>
endobj
-2541 0 obj
-<< /Filter /FlateDecode /Length 2864 >>
-stream
-x[r, +LT\i\]syT]؛~7VSM#Mh
-:
-W;Z_T0f 8N-9->Pf'e(jO;%m:'VJôYFb
-">}ַɳ/ ߼En$pق# /)+F"mv% r
-'F* Ы$34-m2mD$EkVK0
-)"
-
-%T+іP!x&/KRW*NԴNV
-mb!TUVdqhRF򒕍9;7
-&fvL*x+^m^2[HKZmIĻ%F.%siL
-wn0ήN9NAhX!/>P7dPi'VrovGJ˿ν:5|gvH$Hc
-;:B Mz>Kr̨jVi1xCvqi  ρ"%Lb2:
-1>{Tl/hErqz
-)H~> hy*`e
-*T'a{7}$=ަ{P0@G;M&OL/
-endstream
+2539 0 obj
+<< /D [ 2518 0 R /XYZ 81.145 487.883 null ] >>
endobj
2540 0 obj
-<< /Type /Page /Contents 2541 0 R /Resources 2539 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R /Annots 2579 0 R >>
-endobj
-2579 0 obj
-[ 2538 0 R ]
+<< /D [ 2518 0 R /XYZ 81.145 476.924 null ] >>
endobj
-2538 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 256.954 157.029 267.381 169.618 ]/A << /S /GoTo /D (Hfootnote.39) >> >>
+2541 0 obj
+<< /D [ 2518 0 R /XYZ 81.145 465.965 null ] >>
endobj
2542 0 obj
-<< /D [ 2540 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 455.006 null ] >>
endobj
2543 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 444.047 null ] >>
endobj
2544 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 433.088 null ] >>
endobj
2545 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 422.129 null ] >>
endobj
2546 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 411.171 null ] >>
endobj
2547 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 711.046 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 400.212 null ] >>
endobj
2548 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 700.087 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 389.253 null ] >>
endobj
2549 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 689.128 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 348.406 null ] >>
endobj
2550 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 678.169 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 337.447 null ] >>
endobj
2551 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 326.488 null ] >>
endobj
2552 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 315.529 null ] >>
endobj
2553 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 645.293 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 304.57 null ] >>
endobj
2554 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 634.334 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 293.611 null ] >>
endobj
2555 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 282.653 null ] >>
endobj
2556 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 271.694 null ] >>
endobj
2557 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 230.847 null ] >>
endobj
2558 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 219.888 null ] >>
endobj
2559 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 208.929 null ] >>
endobj
2560 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 197.97 null ] >>
endobj
2561 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 497.846 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 187.011 null ] >>
endobj
2562 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 486.887 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 176.052 null ] >>
endobj
2563 0 obj
-<< /D [ 2540 0 R /XYZ 79.37 438.264 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 165.093 null ] >>
endobj
2564 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 372.309 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 154.134 null ] >>
endobj
2565 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 361.35 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 143.176 null ] >>
endobj
2566 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 290.615 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 132.217 null ] >>
endobj
2567 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 249.768 null ] >>
+<< /D [ 2518 0 R /XYZ 81.145 121.258 null ] >>
endobj
-2568 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 238.809 null ] >>
+2517 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F83 415 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2569 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 227.851 null ] >>
+2571 0 obj
+<< /Filter /FlateDecode /Length 2871 >>
+stream
+x[r$ +"PT17}`_Lf*S%U.Ȓ?neoQDܾIyS77Nݾ~,%|ҪR귗1x墔]|o]IOs!
+WZw՗>.
+/I
+K_Po bPFsy(/2UKt
+j_rw!<, 
+
+ ZaN
+Bu)FM4RkIdjk
+SSgˆYfiQa%r6\m#-p=B
++P9em4&mW4AYcZ|5&CtN7CV}V հYi`o(k ^
+S$w3Q[(r݆U~,9%Q7Щ?N~Զ!Z{:Fz?\%`(S.)CTJ <z2\ Mq~ ^Bz:xlCtc Ze~
+_k=i\)sGڹw[(/-D|bo{D* 4㟻"H z%*pzfܔ/:jTvTYnEKyQ%J.+!< $MP2-?%8;v
+R o͖?gthy
+{9' DTƒ[
+
+R+`nN1YC3þ /{>a>n"DL#ogT'22fIބcKc(uԉK8niF5 VK̠5j3߶+;7ퟚnBoϺkץI-0rS.[/q6ҋ{Pbbo'"dy];==&%O -#2
+Jdfp_tCojS4xL>2*(b 0qpTpbe2QHMr
+t݊ _kanIjk8.!+<M\Hv>݆/5S]Wˌ
+UhHa» km?zD6²U3m76C>)Buc\bqq=I>hO:on<ʕoc(@nk)]9>ζ7159S8<ͽn<=.6PX;)j=^k"]LE*xe.h{drȟ-DI˫8+N.ΔrҖ<X3%vcN]3'b7d`(-;{@
+6'҈[Fzd{:#tr6mȩPs KwwO ~G`@1`y!Fe332Ǭ㟫̲eJӛŔ l
+endstream
endobj
2570 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 216.892 null ] >>
+<< /Type /Page /Contents 2571 0 R /Resources 2569 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R /Annots 2609 0 R >>
endobj
-2571 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 205.933 null ] >>
+2609 0 obj
+[ 2568 0 R ]
+endobj
+2568 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 256.954 113.193 267.381 125.783 ]/A << /S /GoTo /D (Hfootnote.39) >> >>
endobj
2572 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 194.974 null ] >>
+<< /D [ 2570 0 R /XYZ 78.37 808.885 null ] >>
endobj
2573 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 154.127 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 754.882 null ] >>
endobj
2574 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 143.168 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 743.923 null ] >>
endobj
2575 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 132.209 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 732.964 null ] >>
endobj
2576 0 obj
-<< /D [ 2540 0 R /XYZ 81.145 121.25 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 722.005 null ] >>
endobj
2577 0 obj
-<< /D [ 2540 0 R /XYZ 93.716 91.444 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 711.046 null ] >>
endobj
-2539 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F59 346 0 R /F84 425 0 R /F74 337 0 R /F22 367 0 R /F65 335 0 R /F81 377 0 R /F83 414 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+2578 0 obj
+<< /D [ 2570 0 R /XYZ 81.145 700.087 null ] >>
endobj
-2582 0 obj
-<< /Filter /FlateDecode /Length 2791 >>
-stream
-xڵ\ɎW4dp
-Z|}_[pEc 4)!"lJSڇ 0uDVP{R)U"^os~?xbSa
-SR}\x/r./E)w}¸+0?b/I |ėj)q<qbnbUe'esgeWK!k|kt#~R*Jku5K _Q1Ǔ ^^i¹hxl)wcD|~<iG|*•ڼ\OK ,UYIZŽJASJju%FvhUpo%@@iy% "-j
-^)-kOڋCw<ɇuNt%
-$r
-Z )hJ{
-| 2)JT1!'R6wYޞBfN Y,u-7juTH.+"Y @> BIs<գ(rH)>Xoq1uāH(Q~[^Hfr? g[ vw-,AXyB1.@lΎ0 )~TA1j̾>Gjm0
-4Z]
-FJ!Ϳ^`q!!9v
-g(jV
-=>ObсkKu7GXp%h7[rNeH;JDy%4 ^_*U3YAKijU:^<T#km)*kѡ*V꿟*rB΋Nޠ>_Oѽv x/AD$糬[=;wF RB::VN:쨰gXHL6а)IQ00
-նX񚘇}t'%}ncĠ6ȪܮpO% g
-PW,PT@^`،|q֥즹@BN>N ™ ^7*l~H8S ݈vˌt AOKS^n'lC`JKsTGL?O1,֎%+> Wӄpż0n+RAz97υ#s?jNsboϞ+4^i^0B_)c:g>[QXܣ}dQF,q<XJV7 d:B? 2N |0P4!JDŽꈥB>dgc
-ށcK 'FLS†͒adRȄ U&(4abbIQ:3s^y
-}qrzu@>H=hݘEqI8:J֟`j`ܕn vϯcw:NQZ\ЅF dESJsPd0K93}
-^v}qC*cT$;q{s\ӇDE
-h2)w2z'em2.|ilέ羲
-3.g LYTZt?ɿj]m!p?] AOO #`HkJ7+ #4/Jm't 󸴡5`bQ:5?`Z|0D!kf)buZJ{Y'πa
-2K#`OVR~U;1@^1/'mia2Tm`wz[>|1&ޮUS® ^ú MeDԼ;&1 kVO+6vޓCWdpͭ|njݜQ1 _xO5
-۾,ʨ:x5F_/[}dEGK=2 Q:f\f;c?QSM!NXtmz7ORwmHcw:J{AW)iZɁ9zNNuSXԝĀsMw A;/?^ox>241eUm}N?a,^5zi.YcV[DlȊ׎Zg/aѾgP˭%FBvrtZv!r[Dvq+CIZrH]Z.l{1B/|ږQsGhz5R0Elߕ.f%̉=czJQЎW(O2#-^!P~OԱh dڦxN=R=?T/)
-endstream
+2579 0 obj
+<< /D [ 2570 0 R /XYZ 81.145 689.128 null ] >>
+endobj
+2580 0 obj
+<< /D [ 2570 0 R /XYZ 81.145 678.169 null ] >>
endobj
2581 0 obj
-<< /Type /Page /Contents 2582 0 R /Resources 2580 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2570 0 R /XYZ 81.145 667.21 null ] >>
+endobj
+2582 0 obj
+<< /D [ 2570 0 R /XYZ 81.145 656.252 null ] >>
endobj
2583 0 obj
-<< /D [ 2581 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 645.293 null ] >>
endobj
2584 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 634.334 null ] >>
endobj
2585 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 623.375 null ] >>
endobj
2586 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 612.416 null ] >>
endobj
2587 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 601.457 null ] >>
endobj
2588 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 590.498 null ] >>
endobj
2589 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 579.539 null ] >>
endobj
2590 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 568.58 null ] >>
endobj
2591 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 557.621 null ] >>
endobj
2592 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 546.662 null ] >>
endobj
2593 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 505.816 null ] >>
endobj
2594 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 605.442 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 494.857 null ] >>
endobj
2595 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 594.483 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 454.01 null ] >>
endobj
2596 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 583.524 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 443.051 null ] >>
endobj
2597 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 572.565 null ] >>
+<< /D [ 2570 0 R /XYZ 79.37 394.428 null ] >>
endobj
2598 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 561.606 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 328.473 null ] >>
endobj
2599 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 550.648 null ] >>
-endobj
-273 0 obj
-<< /D [ 2581 0 R /XYZ 79.37 513.236 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 317.514 null ] >>
endobj
2600 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 453.539 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 246.78 null ] >>
endobj
2601 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 442.58 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 205.933 null ] >>
endobj
2602 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 431.621 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 194.974 null ] >>
endobj
2603 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 420.662 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 184.015 null ] >>
endobj
2604 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 409.704 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 173.056 null ] >>
endobj
2605 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 398.745 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 162.097 null ] >>
endobj
2606 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 387.786 null ] >>
+<< /D [ 2570 0 R /XYZ 81.145 151.138 null ] >>
endobj
2607 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 376.827 null ] >>
-endobj
-2608 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 365.868 null ] >>
+<< /D [ 2570 0 R /XYZ 93.716 89.907 null ] >>
endobj
-2609 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 354.909 null ] >>
+2569 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F59 350 0 R /F84 428 0 R /F74 341 0 R /F22 371 0 R /F65 339 0 R /F81 381 0 R /F83 415 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2610 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 343.95 null ] >>
+2612 0 obj
+<< /Filter /FlateDecode /Length 2700 >>
+stream
+xڵ[n,-)lRRtzYg7j; EQE:N߰?™x{|~)wYpϛqO,0-oF Ƶ}wp%sb7˜h[:Bhf)@W%Z k'|)_Z]KrnG))Oi*蘐8S|L%F5N~jIa%?Y=`dI-y%2D _SzK+.gfu+"ƅϚ\[JY&4!%<<y-D Or*?9iXS;Ő
+(]3GcU^+J7W?R* <'y#ߞg%t!np}8H߃IU 2&PMh_30ړqF3^lI#(]U^`׋[I&QҫbFάq;J˜cJ!'s27~Ž2'2:ɖR򤜏7-,Da$S͔_W> [^y1R'^ou}Kv+юq M9+SQ$MҦw09Px,V/ZX)9`8V)tE]!FK'q @ͬܭ3N!'A A_'vV𧘙cl}cb  l&7:$ W bDV!w E)yNW%Q)U] cI%^EvTu'U3H;O_|1j?u<Ycu!2~􇯪|'Of@NUd1~DO)P4x3q|(<#NV%v׆[CGcVDl'x)vR;\LMOv;y@ P2IPLjRG7=$Gh`/k]K(XH",2P:gxjn2n9ΤKi6m`tIRib+:4Q*@T;&rgJ%e< `" ?s0z0:рc6He@o#$܆PL]k^%R-@cIjn|ZyyBV-V<E
+7Z_)):v
+UOe^Ň>F$:BP*$ȟ&tBSDBkGIaLiOE e;(m3Mrv{}{6?|?d}hk>y,y>9+;Tf5)S:![$Q$Ɋ~ؕd(0.W_hiq!#;rHłc{ٺ04aOј4 sPXr<]<ӄ6[޷ ɰeUjygf"|ps Tg !NP'^8o -m=WrD#*[vnG+ڡM4ӛ-<* Ej?nl0\p席nҫ+.amn`zXwYE8´UV%8MDFTZC~P
+ UtQ~|ºʣLxwA<n)5?e?4V.q#ntJJj FòaJ 1T.u+CkRP:**6p_k#!^+c3/%f<)a0
+w8Sm^ 1z>؉漹<[WȖ K\ĪY8zY4'v*'>]8+"kQU^۽w`١?֬Qz2r-:󘍭e&tm&,-xB 9Aˋo=%#eQ!P,=Y0*7~{:8 G/pC\m5/ <h
+vte=P!?! D]p^dz?C흵/<7^PVjD;WN/SwgǢfދFֻZ:Jϐp!34Bl[^o+Pgyn76'.ErqˬPsO dϕNƘy=
+6uOgSE)種`xx 6,Q߷K}0ͽR56mݜQ0j9,?eBۑГ#Ilo=r]yCYȿ0ٓ
+ͥMʗ,vz?_߶
+endstream
endobj
2611 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 332.991 null ] >>
-endobj
-2612 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 322.032 null ] >>
+<< /Type /Page /Contents 2612 0 R /Resources 2610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2613 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 311.073 null ] >>
+<< /D [ 2611 0 R /XYZ 78.37 808.885 null ] >>
endobj
2614 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 300.115 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 768.829 null ] >>
endobj
2615 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 289.156 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 757.87 null ] >>
endobj
2616 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 278.197 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 746.912 null ] >>
endobj
2617 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 267.238 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 735.953 null ] >>
endobj
2618 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 256.279 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 724.994 null ] >>
endobj
2619 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 245.32 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 714.035 null ] >>
endobj
2620 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 234.361 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 703.076 null ] >>
endobj
2621 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 223.402 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 692.117 null ] >>
endobj
2622 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 212.443 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 681.158 null ] >>
endobj
2623 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 201.484 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 670.199 null ] >>
endobj
2624 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 190.525 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 659.24 null ] >>
endobj
2625 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 179.567 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 648.281 null ] >>
endobj
2626 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 168.608 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 637.322 null ] >>
endobj
2627 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 157.649 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 626.364 null ] >>
endobj
2628 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 146.69 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 561.606 null ] >>
endobj
2629 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 135.731 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 550.648 null ] >>
endobj
2630 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 124.772 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 539.689 null ] >>
endobj
2631 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 113.813 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 528.73 null ] >>
endobj
2632 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 102.854 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 517.771 null ] >>
endobj
2633 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 91.895 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 506.812 null ] >>
endobj
-2634 0 obj
-<< /D [ 2581 0 R /XYZ 81.145 80.936 null ] >>
+277 0 obj
+<< /D [ 2611 0 R /XYZ 79.37 469.4 null ] >>
endobj
-2580 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R /F22 367 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
+2634 0 obj
+<< /D [ 2611 0 R /XYZ 81.145 409.704 null ] >>
endobj
-2637 0 obj
-<< /Filter /FlateDecode /Length 3232 >>
-stream
-x\Io#h6˶1[kr%0WTX ܖJǷm̙ÿE1̨5q#.s 8ss?<_7.ycq&,l> (7
-Vp.{+ȿ5{AG__4܄(U/=8]y1Hjc1 ;<ЇLpmMi3HX7ܚ^"$b2fYn|]Fz&F5$B7L/$l_q_E}ڻxIY+k{H={)bDgA35B{яH&~Ɇ}s,o6!m)γ ca'&cyM;?d_DZ0!a cQk!HڸLdshy@ړb3Ê~gbКLr;UrIOiXLq$_3.Һ.b}]ԜSL*?Ӝ\Ai/G6QbR Z{?xYYR4%+*)$1v-U#@{Jѓ=soD
-b@
-o(gD~RC(̠<wupNq%_ifzYP~|4ZuW_[GjWc ǴS]u(҄K?ۙN^猾SueW}Gh[fE"]W"V0g}^<9ݹ[Ӊk:YPR~*~ J_[ˋӞ}֞^ԅ
-7WkJGjv*?V1;\&ÍdokFk`Nl2[Q>UB
-_)]۫$BA=?q$4a-up>WF\9э9oO^99S6⃲!Lpg^KԬK/nϹ? H#KL+nt'#dRg໊T3og
-`GKڲ5{)fym%$8U3QIN(@YsKi$7^37-?/y+fv緷^mlFjp8^,9z-2_3 #ueurq7uk
-1TB, ݪGI&Zլ$ofp,$]Kd;n?{5AcLƹ
-?ۥYFEW*Sr"CZ
-lDw 냪R24]JWT] 8nc<iGRgl+ӡ&Hv~ZL]:xAf N޶Fb1ϝBi#ȉ1utRyLSr怿/MCa$%㕠3[wA?rz]D:18{YIi|>cg*na3j%}tlnl=,jq(BW*dFQ(XFFYG$z,lm4<
- Ԏ
-endstream
+2635 0 obj
+<< /D [ 2611 0 R /XYZ 81.145 398.745 null ] >>
endobj
2636 0 obj
-<< /Type /Page /Contents 2637 0 R /Resources 2635 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2611 0 R /XYZ 81.145 387.786 null ] >>
+endobj
+2637 0 obj
+<< /D [ 2611 0 R /XYZ 81.145 376.827 null ] >>
endobj
2638 0 obj
-<< /D [ 2636 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 365.868 null ] >>
endobj
2639 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 354.909 null ] >>
endobj
2640 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 343.95 null ] >>
endobj
2641 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 300.115 null ] >>
endobj
2642 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 289.156 null ] >>
endobj
2643 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 278.197 null ] >>
endobj
2644 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 267.238 null ] >>
endobj
2645 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 256.279 null ] >>
endobj
2646 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 245.32 null ] >>
endobj
2647 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 234.361 null ] >>
endobj
2648 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 223.402 null ] >>
endobj
2649 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 212.443 null ] >>
endobj
2650 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 201.484 null ] >>
endobj
2651 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 190.525 null ] >>
endobj
2652 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 179.567 null ] >>
endobj
2653 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 168.608 null ] >>
endobj
2654 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 157.649 null ] >>
endobj
2655 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 146.69 null ] >>
endobj
2656 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 135.731 null ] >>
endobj
2657 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 124.772 null ] >>
endobj
2658 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 113.813 null ] >>
endobj
2659 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 102.854 null ] >>
endobj
2660 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 496.849 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 91.895 null ] >>
endobj
2661 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 429.103 null ] >>
+<< /D [ 2611 0 R /XYZ 81.145 80.936 null ] >>
endobj
-2662 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 418.144 null ] >>
-endobj
-2663 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 272.69 null ] >>
+2610 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F83 415 0 R /F74 341 0 R /F22 371 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2664 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 261.731 null ] >>
+<< /Filter /FlateDecode /Length 3112 >>
+stream
+x\Io#ϯY\0 X#+@܂\S.p+f/lAރ߳׵6LuqS/7'$q9`Fݬq8g|_
+HlTU;PEYRM*XP έ: og$ tf1#q}ʍ{$IUk`BK x `[1s4I' CIk
+)$IA*Y=߀/2eE tXPɝ
+ ~-?pPh uM9EC8=yso#{(Q wFqfZ7sjmK#6sEm Ąܐ^J~raq67ÐaF!\޿^Ћaa,S2ǥGe
+7qnnNCz|:>Oз5T94r_xeؐb}Sbv>K@Y"1JfpXΈZ)(9=h6;&d$s\tMF3uH;2\mJTMv{g5!+N=׵㬍&'=R{-c%@G1͔^~Wý-cD*|¦'sN479N
+=ߥG 8^Xg}W&-F6HY:ٺ۞qATVlWxd
+
+yy!%zbZn]Kz' Lz&gE4{ZdUx `4 '=pE*\''|m\˻eٓ4`"ex%-8VZbWjA =!$gw"|k\OVkH ( dbD6dz(^$MivrQRt& V ܎@D\3]XZ!3?!㋿o< m5p6clDJœؐHd}sYm6ʈc.2Hר , p;ㄻǙ5\,_^<F>/Sǀ
+wT8USDaPO{bEQ_ HS6&|E(r|gz/K<t,:a7zF)*}S TuRULL`rĿzLN|' ӊgFIu\*-Q{,rUϸVHmWR]RBwY8Jb~U
+j3'~ge_Ct䐺y%/]e@Ɋ0E}S'ꞌ/ xͧK:+_2M~@DZڡaWM'&V0kv{˺B'2>"=zr7qߎ|
+endstream
+endobj
+2663 0 obj
+<< /Type /Page /Contents 2664 0 R /Resources 2662 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2665 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 250.772 null ] >>
+<< /D [ 2663 0 R /XYZ 78.37 808.885 null ] >>
endobj
2666 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 239.813 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 768.829 null ] >>
endobj
2667 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 228.854 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 757.87 null ] >>
endobj
2668 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 217.895 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 746.912 null ] >>
endobj
2669 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 206.936 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 735.953 null ] >>
endobj
2670 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 195.978 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 724.994 null ] >>
endobj
2671 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 185.019 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 714.035 null ] >>
endobj
2672 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 174.06 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 703.076 null ] >>
endobj
2673 0 obj
-<< /D [ 2636 0 R /XYZ 81.145 163.101 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 692.117 null ] >>
endobj
-2635 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F83 414 0 R /F65 335 0 R /F75 338 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2678 0 obj
-<< /Filter /FlateDecode /Length 3158 >>
-stream
-xڵ[Ɏ7W&;h@ef2:/}Y-@Yՙd0vF<Ʒ^<tz0j'/&6뙴5q#/_ߞ9s8oW5~W_p6S1_a ןq%\Ifºi-˹ḆkeډmabclU<Z0)ǩA νcL@a-Sn*<($(SJ3z0wBBKCV/Itrdkx<P d+I`ZOX*FI'WIyJ -
-FJJO~{SXdB=[s!<+oUy3j%z?'0j;RN<)HUj无%gFkͅ Z -rx 5=5iо_dO;i~N4 oc$KĽT9Y0 U| VkH8-swx?"͋$' 8L#S0Wrӭֵ&SEoeRB4(8p
-*h:W')# ?ɷkŔ.^x&Q+Z:Z^6[8H4hӜ_Ź1in+^>S80"]xqa,sIsQ׮sKcB^nhlM%E@1/h*øR0d(;o
-PfkR6jN[! c a ZN1-&
-e]1FStӳ(H7
-eJyj^\yqG5S(vV^l[W"Z׺
-|d\!h2gtE}[uKkj 7%~le;b>eZ>8Ͼv5zQ#5&=!KJ<fiëo)CӒ6ҧ3qj1tCKV1D% usjM;Q)}SY+_\V9Ύՙyw'Mk*?V˚{$L+`L8ZUҗ9ܵ1H4sƠA]:D@[fVf>
-91 IǯH6 ]o2AR"h{mk{1l3bB\?;2f\[2a9NY/q ofaMҰ.~7ů\\x`:ߣ>ٓ@(8_ԙCM;)d@T"RP!8R#WV`9 eqНbEPDWJ o诪A5űfACfX>tf^Us!nu1w4) 1
-i0;A>r]D^}@rYBK@@i 3b]DP@(1Rð(Ӷx3IR+RfbEslnkUpkif(S9kw*詧ғD!fzHpy$&wo>SZG0,}o<-W)Ɓ[ӗp lzJ!4b?pOMi jxZi Ytk|neSd/sy;e}E3AHVN{+lE JO
-f(}y?tɝ:އOBaӵą,&ARPr7gKG1LH>]UߵVuy60(Z}r Aן .]GW+t0]/WU{o$uK_jT50TL+1У
- 6\= s"\t>J3au
-x|݈LJxl_(wVO#G<-=)a^QЋ)'msϱ0>YA
-$|Pl]tdR
-oOz#QOwrvO[ Tg+"}ȩ)~`윰9gƕ~IR.?y[5p-?K8Kd:lv*m"\J}O먓\QQN$5SqGc,X
-endstream
+2674 0 obj
+<< /D [ 2663 0 R /XYZ 81.145 681.158 null ] >>
endobj
-2677 0 obj
-<< /Type /Page /Contents 2678 0 R /Resources 2676 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R /Annots 2712 0 R >>
+2675 0 obj
+<< /D [ 2663 0 R /XYZ 81.145 670.199 null ] >>
endobj
-2712 0 obj
-[ 2674 0 R 2675 0 R ]
+2676 0 obj
+<< /D [ 2663 0 R /XYZ 81.145 659.24 null ] >>
endobj
-2674 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 244.87 541.675 255.296 553.846 ]/A << /S /GoTo /D (Hfootnote.40) >> >>
+2677 0 obj
+<< /D [ 2663 0 R /XYZ 81.145 648.281 null ] >>
endobj
-2675 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 106.14 342.303 116.567 354.594 ]/A << /S /GoTo /D (Hfootnote.41) >> >>
+2678 0 obj
+<< /D [ 2663 0 R /XYZ 81.145 637.322 null ] >>
endobj
2679 0 obj
-<< /D [ 2677 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 626.364 null ] >>
endobj
2680 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 749.9 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 615.405 null ] >>
endobj
2681 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 738.941 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 604.446 null ] >>
endobj
2682 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 727.983 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 593.487 null ] >>
endobj
2683 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 717.024 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 582.528 null ] >>
endobj
2684 0 obj
-<< /D [ 2677 0 R /XYZ 79.37 678.364 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 571.569 null ] >>
endobj
2685 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 502.559 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 560.61 null ] >>
endobj
2686 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 491.601 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 549.651 null ] >>
endobj
2687 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 480.642 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 538.692 null ] >>
endobj
2688 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 469.683 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 527.733 null ] >>
endobj
2689 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 458.724 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 516.775 null ] >>
endobj
2690 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 447.765 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 505.816 null ] >>
endobj
2691 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 436.806 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 494.857 null ] >>
endobj
2692 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 425.847 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 483.898 null ] >>
endobj
2693 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 414.888 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 472.939 null ] >>
endobj
2694 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 403.929 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 461.98 null ] >>
endobj
2695 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 339.172 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 451.021 null ] >>
endobj
2696 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 328.213 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 440.062 null ] >>
endobj
2697 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 299.322 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 429.103 null ] >>
endobj
2698 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 288.363 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 418.144 null ] >>
endobj
2699 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 277.404 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 366.217 null ] >>
endobj
2700 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 266.445 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 299.49 null ] >>
endobj
2701 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 255.486 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 288.531 null ] >>
endobj
2702 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 244.527 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 144.388 null ] >>
endobj
2703 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 233.568 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 133.429 null ] >>
endobj
2704 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 222.609 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 122.47 null ] >>
endobj
2705 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 211.65 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 111.511 null ] >>
endobj
2706 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 200.691 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 100.552 null ] >>
endobj
2707 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 189.733 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 89.593 null ] >>
endobj
2708 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 178.774 null ] >>
+<< /D [ 2663 0 R /XYZ 81.145 78.635 null ] >>
endobj
-2709 0 obj
-<< /D [ 2677 0 R /XYZ 81.145 167.815 null ] >>
+2662 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F65 339 0 R /F75 342 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2710 0 obj
-<< /D [ 2677 0 R /XYZ 93.716 138.708 null ] >>
+2713 0 obj
+<< /Filter /FlateDecode /Length 3539 >>
+stream
+x\K7ϯd_`h@n-)e}\S|?=!Kjbc9S/ӗrd
+yNJb`\o_^8Wsׯ?=qOH}[X5n솙(KN'%OZp^D[a;Jyz+ntQ(8&V
+B7;kѩ\IaL&_X5jaFS`82RX2$5+IP/Hq́l "9hiz_~EQ[0vռWbCS)hS4$?Ge>geLҌ[ThGr;B$_F'?-Sn6֒? #e賾Xh<+G\ 䱂&OQg lFu!~!pI*˫HJ^}=&(3RꁛG%PrR Ro4S4 ?[Ǚ}K*\?BIaRVT&%i(GpNjtnZKgX:8",šè_zy*j$tm*$PRYYу8:k0R,V+6qUc) h<ʶ)Ke&tJNbQp0CUT.?0S\?V_k *ص;RCل^
+zі6}ؗǖzI޲"{he*AoPm!
+|eEg[-gžHȕe' ,R<Qȫ,f0 **;WHCVQ +aRsGͧ# "T>T||}_Mk%g@KoOJ?^?m~#k#)=3mTfYC>4m5YS
+hXv>r1S2<+5PpB
+ aI'Uu*U j͙{,6T;C `+ Na=m3%&Y? ÂL% ;mC0@i bqW>;)
+w  (A )S\khSj:TǥZw96:wUa^l73g -5{0멧ғ@ZUH=~T3c!$_Oi%_y
+J_GВJ׃1d~'HaY|degҁ&I~
+*Łv>Y@l\.}W\8P2?|w\c*#cL5`9ernxxƍ=GFCw, ϾW
+D@brT>F1Ü̚Р:pf"'FveP8
+9 g͔
+8<>_<eGz>N1_
+dZYe5TJ%dYi L
+ N
+U.hzk 8ZdW`A} G`D36 =XǑcN:zQzy2֝u9~MB}~&tTQwl]5>˜L_Cl -(Gtu#PG
+(G:DAA,I"1y`55^~ar'#W{WX$՜%=_/G.)M>txzɒDZԾS#!տ
+endstream
endobj
-2711 0 obj
-<< /D [ 2677 0 R /XYZ 93.716 119.616 null ] >>
+2712 0 obj
+<< /Type /Page /Contents 2713 0 R /Resources 2711 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R /Annots 2742 0 R >>
endobj
-2676 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F75 338 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F22 367 0 R /F83 414 0 R /F16 336 0 R /F65 335 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+2742 0 obj
+[ 2709 0 R 2710 0 R ]
endobj
-2715 0 obj
-<< /Filter /FlateDecode /Length 1531 >>
-stream
-xZɎ6Wp<@} rMNkHkJ2qMIZXǒߓ9x|}=E>yt#?y`>;1aw
-icQi<C|d {$r(Ƴn7hyLRlF͒|G 錟8iwJ%3{{=cc-]j? G
-'i@b" sR%[7K64i]lu{\wZ.m(k Ik?#pFF]s/|5ۢ{,`'<i# i݆>tJg?=uGb.]/Kؽ\\dǣL^Rs0-恏mHQiVi"cԴTw $eVvk!+.MEa ؚy;V!+B<GM^H`U>hԭ&CPT)gd˨䢐W,yO$TtDbiu>9ΪV. pHf;s>e ˤ@҄-8Im@zHuSeH񚕵hiEtU |s/ĶϪ嫘aK~*.6x\P
-endstream
+2709 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 244.87 419.135 255.296 431.306 ]/A << /S /GoTo /D (Hfootnote.40) >> >>
+endobj
+2710 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 106.14 219.762 116.567 232.053 ]/A << /S /GoTo /D (Hfootnote.41) >> >>
endobj
2714 0 obj
-<< /Type /Page /Contents 2715 0 R /Resources 2713 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2712 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2715 0 obj
+<< /D [ 2712 0 R /XYZ 81.145 768.829 null ] >>
endobj
2716 0 obj
-<< /D [ 2714 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 757.87 null ] >>
endobj
2717 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 746.912 null ] >>
endobj
2718 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 735.953 null ] >>
endobj
2719 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 627.36 null ] >>
endobj
2720 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 616.401 null ] >>
endobj
2721 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 711.046 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 605.442 null ] >>
endobj
2722 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 700.087 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 594.483 null ] >>
endobj
2723 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 689.128 null ] >>
+<< /D [ 2712 0 R /XYZ 79.37 555.823 null ] >>
endobj
2724 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 678.169 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 380.019 null ] >>
endobj
2725 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 369.06 null ] >>
endobj
2726 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 358.101 null ] >>
endobj
2727 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 645.293 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 347.142 null ] >>
endobj
2728 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 634.334 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 336.183 null ] >>
endobj
2729 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 325.224 null ] >>
endobj
2730 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 314.266 null ] >>
endobj
2731 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 303.307 null ] >>
endobj
2732 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 292.348 null ] >>
endobj
2733 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 579.539 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 281.389 null ] >>
endobj
2734 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 568.58 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 216.632 null ] >>
endobj
2735 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 557.621 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 205.673 null ] >>
endobj
2736 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 546.662 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 176.781 null ] >>
endobj
2737 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 535.704 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 165.822 null ] >>
endobj
2738 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 524.745 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 154.863 null ] >>
endobj
2739 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 513.786 null ] >>
+<< /D [ 2712 0 R /XYZ 81.145 143.904 null ] >>
endobj
2740 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 502.827 null ] >>
+<< /D [ 2712 0 R /XYZ 93.716 112.912 null ] >>
endobj
2741 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 491.868 null ] >>
+<< /D [ 2712 0 R /XYZ 93.716 93.82 null ] >>
endobj
-2742 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 480.909 null ] >>
+2711 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F65 339 0 R /F81 381 0 R /F75 342 0 R /F22 371 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2743 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 469.95 null ] >>
+2745 0 obj
+<< /Filter /FlateDecode /Length 1666 >>
+stream
+xZˎ6 WD+ qynA)d)Ӷq2U"mN|F*ptgnwFignUk ZSWo:%o@s8ơ
+hj$XyG.|dNGiw\ia<3+ ?tK,#ӍGi^gIwg E8bFY$˰e'O}HB:6{>P4AB60*Cȱml؄
+
+ "k5Z "ߗ6p-ңBH6#Qc T4EnG~s;6k/,đyer~o˫0Y3pr^@?}dgl2D?_8,6O,v#?V`̦ gu[!BQydBpH*MBqv7|ʴ+C{chgKDcU FeP!v$Ydgy,DsFm"u5RIDDdV<:n<Ja P!W=ϺX+^Q5&Ox ƣK
+9x9>VUpR⹹Q*Sـ~H
+
+QКA\P6T!ͫ錗 5XlHxO{yB~Vd8aCklr^%QzYkG68Xʭ=m%Js1IJAPY!Ie%WֲA2ZF)Ym-nv5ZR!Pqe͕e=iR沞ATÈgP
+B;}z5^k$1cިYP-s7}kdLn]Si\ςįj#hRTa,Vko!&sO{eF?cwLeHWx5ϛ8_tIVN%7C
+!bկ8 DtCR 71w]
+hKR7nqx7 'SO?ʹ?O2KEK:hN$)@1U5M+$aQB[nwBQ7Q;P8`oN HSH?Sş5!``Bb!!;ruZ3=]p}Yj(`1HLo\
+8KZuȸұu‡L>t0f1#^WTmM#k$3XO||hcvj))Kt׭}j !t!2Ye߶iU*zj\ͪ|Ŵptͬ9O!z빷ŸؚXC³AfEo3WBc&Ī)U βAY8Y!3_r/GaBL+as'VŹhۿPm
+endstream
endobj
2744 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 458.991 null ] >>
-endobj
-2745 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 448.032 null ] >>
+<< /Type /Page /Contents 2745 0 R /Resources 2743 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2746 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 437.073 null ] >>
+<< /D [ 2744 0 R /XYZ 78.37 808.885 null ] >>
endobj
2747 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 768.829 null ] >>
endobj
2748 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 415.156 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 757.87 null ] >>
endobj
2749 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 404.197 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 746.912 null ] >>
endobj
2750 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 393.238 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 735.953 null ] >>
endobj
2751 0 obj
-<< /D [ 2714 0 R /XYZ 79.37 356.57 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 724.994 null ] >>
endobj
2752 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 338.436 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 714.035 null ] >>
endobj
2753 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 327.477 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 703.076 null ] >>
endobj
2754 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 316.518 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 692.117 null ] >>
endobj
2755 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 305.559 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 681.158 null ] >>
endobj
2756 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 294.6 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 653.543 null ] >>
endobj
2757 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 283.641 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 642.584 null ] >>
endobj
2758 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 272.682 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 631.625 null ] >>
endobj
2759 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 261.723 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 620.666 null ] >>
endobj
2760 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 250.765 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 609.707 null ] >>
endobj
2761 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 239.806 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 598.748 null ] >>
endobj
2762 0 obj
-<< /D [ 2714 0 R /XYZ 79.37 203.138 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 587.789 null ] >>
endobj
2763 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 185.004 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 576.83 null ] >>
endobj
2764 0 obj
-<< /D [ 2714 0 R /XYZ 79.37 148.336 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 565.872 null ] >>
endobj
2765 0 obj
-<< /D [ 2714 0 R /XYZ 81.145 130.202 null ] >>
-endobj
-2713 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F59 346 0 R /F84 425 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2744 0 R /XYZ 81.145 554.913 null ] >>
endobj
-2768 0 obj
-<< /Filter /FlateDecode /Length 1719 >>
-stream
-x[r6+AoXTeSo\S%lɀ$;ADBFvvn.Aen.xq9r>"b~.G=W/rۓ-_v)"#A&$
-bwl g%Յ_QIZrsꓛ@:IX!þ|>|eu\~Tj ԱOjq@it[G99
-@ EêwM^Ku3.>0&SҧAdKPsЬ1zך8#\r$Uﯟ#3:u7!"\ 
-,4 3迧gMCKrScWov$WF&d)2bId,S.F9X`8X:l:kGԫes
-_4%aǭn.rwk2C%EzD (R2-Yr6HYK
-Ld݃xdx.MzE 2bMRKv:IAcP:g|XecP71h
-[rf:mF,)dҙYA 7~GɃPU>fK&SgPA"}<\A@j"c4Dj lW\Z#+SLsȘ9H'{̉Ǘ a dY 4<5Ǟ_Ȳ x6[l͂ hmO";ʤA;#s}1`̻wUs Ұ ]bҽsLH7 )w!EQg%y/p=!ESIuߖwb-0M5uχzv`?M[}CYtL k;TRΗa Tt8c_J^ ӣyLo ph1A ,&%E,Mۡ#iX
-dMǘ. fA"}LRu" "L:~6@góڇ>A䢚ooRYIOOO!O)#~cOul>3_"ut}I2G(*w e4}bVhP/gfe-gi:ġkO]Y؟=]|ŧS-E[݅:<+@[8\E9뤍Irt5Q!J ]l}:.'sk5=Ir,5ɦ9kڷݡcZRIι`z>l9r㺣3Z#~uJ,JY(Zduz /(j:UMgK7zI1W f:p̘^sHuEp[[N=K:k;N"S
-endstream
+2766 0 obj
+<< /D [ 2744 0 R /XYZ 81.145 543.954 null ] >>
endobj
2767 0 obj
-<< /Type /Page /Contents 2768 0 R /Resources 2766 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2744 0 R /XYZ 81.145 532.995 null ] >>
+endobj
+2768 0 obj
+<< /D [ 2744 0 R /XYZ 81.145 522.036 null ] >>
endobj
2769 0 obj
-<< /D [ 2767 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 511.077 null ] >>
endobj
2770 0 obj
-<< /D [ 2767 0 R /XYZ 79.37 773.016 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 500.118 null ] >>
endobj
2771 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 489.159 null ] >>
endobj
2772 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 478.2 null ] >>
endobj
2773 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 467.241 null ] >>
endobj
2774 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 456.283 null ] >>
endobj
2775 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 711.046 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 445.324 null ] >>
endobj
2776 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 700.087 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 434.365 null ] >>
endobj
2777 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 689.128 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 423.406 null ] >>
endobj
2778 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 678.169 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 412.447 null ] >>
endobj
2779 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 401.488 null ] >>
endobj
2780 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 390.529 null ] >>
endobj
2781 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 645.293 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 379.57 null ] >>
endobj
2782 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 634.334 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 368.611 null ] >>
endobj
2783 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 357.652 null ] >>
endobj
2784 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 346.693 null ] >>
endobj
2785 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 335.735 null ] >>
endobj
2786 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 324.776 null ] >>
endobj
2787 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 579.539 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 313.817 null ] >>
endobj
2788 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 568.58 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 302.858 null ] >>
endobj
2789 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 557.621 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 291.899 null ] >>
endobj
2790 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 546.662 null ] >>
+<< /D [ 2744 0 R /XYZ 79.37 258.972 null ] >>
endobj
2791 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 535.704 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 241.476 null ] >>
endobj
2792 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 524.745 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 230.517 null ] >>
endobj
2793 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 513.786 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 219.558 null ] >>
endobj
2794 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 502.827 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 208.599 null ] >>
endobj
2795 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 491.868 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 197.64 null ] >>
endobj
2796 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 480.909 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 186.682 null ] >>
endobj
2797 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 469.95 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 175.723 null ] >>
endobj
2798 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 458.991 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 164.764 null ] >>
endobj
2799 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 448.032 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 153.805 null ] >>
endobj
2800 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 437.073 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 142.846 null ] >>
endobj
2801 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 2744 0 R /XYZ 79.37 109.919 null ] >>
endobj
2802 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 415.156 null ] >>
+<< /D [ 2744 0 R /XYZ 81.145 92.423 null ] >>
endobj
-2803 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 404.197 null ] >>
-endobj
-2804 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 393.238 null ] >>
+2743 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2805 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 382.279 null ] >>
+<< /Filter /FlateDecode /Length 1489 >>
+stream
+xZrF+nOoT\EE|͕kr_3
+-thQcݦX2vKp5Ht>2%֓{@PZMA|uEⓉ<X=W,
+Y8 r21 )̵Hko)[$$}ErjJ">IH7`3Fn*-#JPy0ɛ30o9$k$g[2޲%\˹DBkYF~療6@秠:=G4ho o>Ƞ"5m-+f5]3VAo
+;MM. Bhj+>mHw45BbEa̹ 쭩qtը@fl&ȁv!C:Dq|+5X&1X%:zOD7HwRU>NYAr'()Ħ$;$k$]b<3FPY<KFHHBPJ4j!GBbڏ҉ -Wڐi9vuh ~t;~@J
+1"bZ]ɟB]e!,
+dBɝ h5Q\K M9:n
+=}Z4I^QF^QR8Hr"_x}'^
+endstream
+endobj
+2804 0 obj
+<< /Type /Page /Contents 2805 0 R /Resources 2803 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2806 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 371.32 null ] >>
+<< /D [ 2804 0 R /XYZ 78.37 808.885 null ] >>
endobj
2807 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 360.361 null ] >>
+<< /D [ 2804 0 R /XYZ 79.37 773.016 null ] >>
endobj
2808 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 349.402 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 754.882 null ] >>
endobj
2809 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 338.443 null ] >>
+<< /D [ 2804 0 R /XYZ 79.37 718.214 null ] >>
endobj
2810 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 327.484 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 700.08 null ] >>
endobj
2811 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 316.525 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 689.121 null ] >>
endobj
2812 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 305.567 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 678.162 null ] >>
endobj
2813 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 294.608 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 667.203 null ] >>
endobj
2814 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 283.649 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 656.244 null ] >>
endobj
2815 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 272.69 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 645.285 null ] >>
endobj
2816 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 261.731 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 634.326 null ] >>
endobj
2817 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 250.772 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 623.367 null ] >>
endobj
2818 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 239.813 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 612.408 null ] >>
endobj
2819 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 228.854 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 601.45 null ] >>
endobj
2820 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 217.895 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 590.491 null ] >>
endobj
2821 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 206.936 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 579.532 null ] >>
endobj
2822 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 195.978 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 568.573 null ] >>
endobj
2823 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 185.019 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 557.614 null ] >>
endobj
2824 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 174.06 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 546.655 null ] >>
endobj
2825 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 163.101 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 535.696 null ] >>
endobj
2826 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 152.142 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 524.737 null ] >>
endobj
2827 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 136.202 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 513.778 null ] >>
endobj
2828 0 obj
-<< /D [ 2767 0 R /XYZ 81.145 81.407 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 502.819 null ] >>
endobj
-2766 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F59 346 0 R /F84 425 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-2831 0 obj
-<< /Filter /FlateDecode /Length 2983 >>
-stream
-x[n#9+"#۲\gN}?Lp_JeTcIFG&g xz|yS"'qX`Z^kqgp.?Ǹ}=1"f25ږeFJRP<jAGNcӮݳWty\|,*D/u(y;Q:J(gL) fHh[Z}I>}ɍ{ f7"!*8ʋdV 3sF#ʛ&ՊwS12zCI
-a
--r٘%|
-6YIapW4S!,) #S]et]}"hT%R'Z|K4kP2 +t䓃Ƽh}RT WT%Ǥ}EV!b7Ǧ'm"h?R&e?yՠJeOɠQ٤l]VQ!{
-6k3f|8,k!3{~F,:2QYpf^yOM1kc974.>g7!f&oMІXlU5ri[JWu6^.ꕪT546I\3_nlI2π6'rPN{i%C9%V҈sYAUX,Uvr)'TfyBN)+R3e /_X(Df筵XY 'kcIuV(Utׯ^,YFJ(nk\PM
-J{;i(48R,w2ϩ
-LL7sKtnyw3)'j:N3zRd@q~HiScN0aٮvUz&:&|xYFm@ԆƯwm`VF.
-:œWBwB<5iRN]s{B߄債g(c'`jrB:vgOY ^֬1pYٞ ®]
-Q|]\v [𝝄zV5J|=3<)L{j)=_tJf}'%y? 7P;H+v&[٣2յ=@햞0g4mK]?~ID]e?جVjfv[{Y׈L[3"7P:ʋRoh`?%it
-~z̾;_&~2!U_7>kֆъtП{pyܜ"#"
-9pyD^3jJ>׳IW8ϖe*gl Z>+vNxD'p.]txFQ\lMH'W
-xnkoIX[Ӫ"y
-Jr=Ik|ŐUV7t)LShλwͤ#U IKf3mN7&i t>QdL4d:{$,!K=Նj_NKI uSQ@R.R uvjs:☼>7Gf$Nh״SFʩsj!{3%ȉ*9Td$rOd8ZO
-8 =@#0>D~CiŨY|qk
-endstream
+2829 0 obj
+<< /D [ 2804 0 R /XYZ 81.145 491.86 null ] >>
endobj
2830 0 obj
-<< /Type /Page /Contents 2831 0 R /Resources 2829 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2804 0 R /XYZ 81.145 480.902 null ] >>
+endobj
+2831 0 obj
+<< /D [ 2804 0 R /XYZ 81.145 469.943 null ] >>
endobj
2832 0 obj
-<< /D [ 2830 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 458.984 null ] >>
endobj
2833 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 448.025 null ] >>
endobj
2834 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 437.066 null ] >>
endobj
2835 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 426.107 null ] >>
endobj
2836 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 415.148 null ] >>
endobj
2837 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 404.189 null ] >>
endobj
2838 0 obj
-<< /D [ 2830 0 R /XYZ 79.37 691.303 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 393.23 null ] >>
endobj
2839 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 661.722 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 382.271 null ] >>
endobj
2840 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 650.763 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 371.313 null ] >>
endobj
2841 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 639.804 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 360.354 null ] >>
endobj
2842 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 628.845 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 349.395 null ] >>
endobj
2843 0 obj
-<< /D [ 2830 0 R /XYZ 79.37 595.155 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 338.436 null ] >>
endobj
2844 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 541.663 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 327.477 null ] >>
endobj
2845 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 530.704 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 316.518 null ] >>
endobj
2846 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 519.745 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 305.559 null ] >>
endobj
2847 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 508.786 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 294.6 null ] >>
endobj
2848 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 497.827 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 283.641 null ] >>
endobj
2849 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 486.868 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 272.682 null ] >>
endobj
2850 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 475.909 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 261.723 null ] >>
endobj
2851 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 464.95 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 250.765 null ] >>
endobj
2852 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 453.992 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 239.806 null ] >>
endobj
2853 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 443.033 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 228.847 null ] >>
endobj
2854 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 432.074 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 217.888 null ] >>
endobj
2855 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 421.115 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 206.929 null ] >>
endobj
2856 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 410.156 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 195.97 null ] >>
endobj
2857 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 318.168 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 185.011 null ] >>
endobj
2858 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 307.209 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 174.052 null ] >>
endobj
2859 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 296.25 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 163.093 null ] >>
endobj
2860 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 285.291 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 152.134 null ] >>
endobj
2861 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 274.332 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 141.176 null ] >>
endobj
2862 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 263.373 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 130.217 null ] >>
endobj
2863 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 252.414 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 119.258 null ] >>
endobj
2864 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 241.455 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 108.299 null ] >>
endobj
2865 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 230.496 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 97.34 null ] >>
endobj
2866 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 155.347 null ] >>
+<< /D [ 2804 0 R /XYZ 81.145 81.4 null ] >>
endobj
-2867 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 144.388 null ] >>
-endobj
-2868 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 133.429 null ] >>
+2803 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F59 350 0 R /F84 428 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
2869 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 122.47 null ] >>
+<< /Filter /FlateDecode /Length 3062 >>
+stream
+x[Ɏ9+(Pt5džoΜ2R,ҙ!1J{߿ۇ7ϼn?E ~7뙴7kF~u V:^J!+8ww|gLHZ'
+k.)HgNV޴DMC=߅pkqġ8+\W% =eSkd}Bx i3Bѧ$0U٧GG[L$UK
+3&i6ZT3>GnT<gv){rޏ@h0"+T*e|s28k
+i 0/RՉҨ,M#3H5iUߊAP1$)E>I9&)LT)-C  ZA&:3O(9dHגyp"&zW k AGJ+
+(R,ey$YmGJJgtXZyhl2__HA{Wtltՠ p YhPkB=_UKkNM-leW5nW%I$kL
+4fr:RіNa
+r) &Z/%ڙҁ7sIܩ-(Um.F2qn&p<%a~s838SF.%&4+wCJ 5},W,]E!"1wrNNOoqDN?/nL0rp;$ØVdP[-ɒjr5ˡ=CVvn'2&[f˝i t3J͕ nەe[&1(YѺA]@9_-2 ➜Orխr/)vT킷vSo66#Z0>..V{ԻV$ߵn4\LspnFMsKL޼<] ͙rx@9jрA NXb NroW#QЎ!FaS}oEX['Hv0xq3Nus6etS'PI,Kya->56S* A虣
+rpepsG{a*nD1s[JFN*j|K5&5g4 w?N>SPfm&5]-{&-drHG!G~~Tjт;{5,oέr]<M!LMІXuBo&`ޯJ iz%U]J $Wyw3WnlII2_]K0*WL)=.+iUFTZߔQ`2rj< - RʫpЕ$J`e6BOv)V.e]B+bU Sr0(IhpNﱘ9/f&`&ݼ&އSNzeFRqI@(5/:]`Qzmcx 9ߞҠ_֭`T`NjfZJ)҅OI3ҁbel=zJܧm矑+ GYR#A|PGkVHp_(
+az5=$zA,`W1DK‘J)\#ai<Z
+'\OZ%WCyS'(XjҘJpk0)[)X^*C(T2vyv5+1#70F
+$Xڣ4u#L>4e2ͩHەJXuV}
+YJ6
+LH'%-&  tk?)Zq '6GLa4mcjYS1Be)jwϾ#v1;2 I9)r
+N RL3 r9-l2;9>m!G% _E)E7&4\vK2N<7f]G,$Zi+G9^vӶս3v{JЅ+]όc/ Dd[_SwG)KZ!^m]Yz(ʛbr.9{}et ~
+6zb&~RP)g2HG
+? :
+Yۢp8'yQ3mqb! &-T&KbxF(C1}?"H] B*^jkRi
+lYxr8*vNN*o;6kY!vF<jVQ,Z+P]Z4x_AI f$^+ЌF=e]QxM!t^"kf87 KJVWPtf&$ģ{iӭ%46,)AյsjyN VMyEJtGCl80.#&S/HMS'X<xp?XҨ6x~$]<j& LC Dd[ǧŭ’I? et1G=ׇgGIhqBj+XzB5n6:jW9sf]Fg=[/G [¼*_S
+endstream
+endobj
+2868 0 obj
+<< /Type /Page /Contents 2869 0 R /Resources 2867 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2870 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 2868 0 R /XYZ 78.37 808.885 null ] >>
endobj
2871 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 742.958 null ] >>
endobj
2872 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 731.999 null ] >>
endobj
2873 0 obj
-<< /D [ 2830 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 721.04 null ] >>
endobj
-2829 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R /F81 377 0 R /F75 338 0 R >> /ProcSet [ /PDF /Text ] >>
+2874 0 obj
+<< /D [ 2868 0 R /XYZ 81.145 710.081 null ] >>
endobj
-2877 0 obj
-<< /Filter /FlateDecode /Length 2875 >>
-stream
-x[I\ ?0DQ`4`nI|i%>d.j{zեsCo>Œ?.ӧ2 zRtC^Y%U.~R2矴t3gs7<Z.WUF 5H⺁HPYcW mL&
-ϐ LHGGNlQ]5_X 1Sv-SkƪDO6{A˪EyymA
-qZDž2><^<~H 0S@Ro}{{4G RLP׮(wK Vb`]nVQG<%QݒHּ\]R fʑR4-
-`B#\W#Yj!G>Xzfw?Zg Ͳ9hk$`°B::ݺ_t8Rj:Azx(
-{xGJ' İ0F} z:t/[,kvbNԃM-<KRTCyoa
- ji1Y+K%)Sg.V` Sʣ\ET(\h'=.RMw]|)~Q̌l޼WMWTµᮨ;@?`b^Yh]By\*l mլ1uMCM`h~"hη*ӹOhfQu/WÎ`0Ry j_Pg=3zҸQB%i:wΓToTk{өAN)Z[^GKںk@"愬\<(k(2ptj^Cv` #Y63adYrEB='2g.NN$w>N͔Fuq`JI~jc /DKb7^iV61u*>gyj46eV_IyLza'fF>PKmVG3&(WN"|k>є©<ik賓~ ȉp@@r%^er4ZHJ"Ъdjp"ާ|39Hޭjkn5~ŇD
-T).#4> Ov_RРP0>c-GJ֟F_b{6Rjآn9F{5k? \X7m~&~Z1| ԡrւtB["s|k|XI~;j>Pʥ䘟R]+R1,Ks{GJlbuN_fGs*c)Ǜ|Ѯ?巳D ufNxb1nf͉R9Gp'QmxbnfЉңxh8+v]u
-N)iy3NTKwOX|2(oqli1qb`}3鏄o!m՜VK{}نmC6)Zָj-pV'JlomV[v7$
-lF ][%B+{8;=lȟ[:=>ػYu3q 'ގ>$]%+5>Qby)/{7OBu]CaU|ߗ<-ЩK*
-endstream
+2875 0 obj
+<< /D [ 2868 0 R /XYZ 81.145 699.123 null ] >>
endobj
2876 0 obj
-<< /Type /Page /Contents 2877 0 R /Resources 2875 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R /Annots 2921 0 R >>
-endobj
-2921 0 obj
-[ 2874 0 R ]
+<< /D [ 2868 0 R /XYZ 81.145 688.164 null ] >>
endobj
-2874 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 142.077 246.868 154.681 ]/A << /S /GoTo /D (Hfootnote.42) >> >>
+2877 0 obj
+<< /D [ 2868 0 R /XYZ 79.37 651.682 null ] >>
endobj
2878 0 obj
-<< /D [ 2876 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 621.624 null ] >>
endobj
2879 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 730.971 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 610.665 null ] >>
endobj
2880 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 720.012 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 599.706 null ] >>
endobj
2881 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 709.053 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 588.747 null ] >>
endobj
2882 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 698.095 null ] >>
+<< /D [ 2868 0 R /XYZ 79.37 552.266 null ] >>
endobj
2883 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 687.136 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 498.297 null ] >>
endobj
2884 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 676.177 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 487.338 null ] >>
endobj
2885 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 665.218 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 476.379 null ] >>
endobj
2886 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 654.259 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 465.421 null ] >>
endobj
2887 0 obj
-<< /D [ 2876 0 R /XYZ 79.37 578.737 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 454.462 null ] >>
endobj
2888 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 560.603 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 443.503 null ] >>
endobj
2889 0 obj
-<< /D [ 2876 0 R /XYZ 79.37 523.935 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 432.544 null ] >>
endobj
2890 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 505.801 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 421.585 null ] >>
endobj
2891 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 494.842 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 410.626 null ] >>
endobj
2892 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 483.883 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 399.667 null ] >>
endobj
2893 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 472.924 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 388.708 null ] >>
endobj
2894 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 461.965 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 377.749 null ] >>
endobj
2895 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 451.006 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 366.79 null ] >>
endobj
2896 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 440.047 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 266.707 null ] >>
endobj
2897 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 429.088 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 255.748 null ] >>
endobj
2898 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 418.129 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 244.789 null ] >>
endobj
2899 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 407.171 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 233.83 null ] >>
endobj
2900 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 396.212 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 222.871 null ] >>
endobj
2901 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 385.253 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 211.912 null ] >>
endobj
2902 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 374.294 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 200.953 null ] >>
endobj
2903 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 363.335 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 189.994 null ] >>
endobj
2904 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 352.376 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 179.035 null ] >>
endobj
2905 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 341.417 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 100.552 null ] >>
endobj
2906 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 330.458 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 89.593 null ] >>
endobj
2907 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 319.499 null ] >>
+<< /D [ 2868 0 R /XYZ 81.145 78.635 null ] >>
endobj
-2908 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 308.54 null ] >>
+2867 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F83 415 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F22 371 0 R /F81 381 0 R /F75 342 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-2909 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 297.582 null ] >>
+2911 0 obj
+<< /Filter /FlateDecode /Length 2596 >>
+stream
+xڽ[n$ )F#ZÀc[kr/yCQ{Wf<ZX).Y2g E2g/?q-埯+qo ¼w+/9Ѷr7 %P7蛪>΅&jܛ? D:{8ߣ,dSV0{143)tҼ1+*KVAk!3h т1!qY~a%U| k/äFXHr eQܦ` Jk>%Ʌf{{Ie6[Zq5N9ݳ
+1:ɌǾ#oH f{ uqގ8b80%gMC3Cco`^%Pׄ3.Q񑟪O
+9>7%tN0֣%AīSE+I%p O:(z^S,0F&Hվ&XF!q`]Gิ4B$S*C1B ҏ\-?
+"E
+IϋDzvxuoC-ƕf$PEsO~Pp$=Q٠6KZ{TvNj5
+YЃf(iڐL9W#z)&{zf;gl*js?j͒)6j"QQMcm[XXgs _e2N&R^F&^+`ez&#niCϜG.ke_6%BE#C#JڹO&tQ3ۖ.
+2yОpQo5
+jaƟh-JʓQ1oIgRNt_nB @]uC8UC|w@皙wًb8+kOs <*tGA+>$~*O0jBHC\3BEP},HŬ.\iqlFd6=
+ṞJEhG`*#@HKl2#Frb4y$N#Ķ~dͽ$_QF q r %]06G- ͅ.ׇZ],CS19Q׸4S?p#c$AN;NV{p4 *C|qzeIin=q5x3hRA+?օ,j<O8Hb[I/ ~G_f]%2xCv,A1Uֳ7;-gx?
+;7X>pNU
+1+pu Ц^2JJ;H:$a֩%ƽZ9HjH:6ƞJ3z+{ttoHj\zr[*YWI syѷ"@ŸX;H:l71&/j 붦1EV.ƲJ1!ЦcL1]8J;HZcՉE%.^˙w%޽j;H}ЎV+ls԰#?Ʌ Tuܫ_߭B]hf3{Uw1&3׺f8:UAR{ԟBl2l^P:X *BƷ vTq9ȃ2Cwδ~vȃ6qňp#<7L(1j6*L{[ߏ$`~ez΁_ӾÇvr^O/Ԑϯj
+endstream
endobj
2910 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 286.623 null ] >>
-endobj
-2911 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 275.664 null ] >>
+<< /Type /Page /Contents 2911 0 R /Resources 2909 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
2912 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 264.705 null ] >>
+<< /D [ 2910 0 R /XYZ 78.37 808.885 null ] >>
endobj
2913 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 253.746 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 768.829 null ] >>
endobj
2914 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 242.787 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 757.87 null ] >>
endobj
2915 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 231.828 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 746.912 null ] >>
endobj
2916 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 220.869 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 735.953 null ] >>
endobj
2917 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 191.978 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 724.994 null ] >>
endobj
2918 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 139.176 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 672.192 null ] >>
endobj
2919 0 obj
-<< /D [ 2876 0 R /XYZ 81.145 128.217 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 661.233 null ] >>
endobj
2920 0 obj
-<< /D [ 2876 0 R /XYZ 93.716 98.405 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 650.274 null ] >>
endobj
-2875 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F65 335 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F81 377 0 R /F83 414 0 R /F75 338 0 R /F22 367 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+2921 0 obj
+<< /D [ 2910 0 R /XYZ 81.145 639.315 null ] >>
endobj
-2924 0 obj
-<< /Filter /FlateDecode /Length 2165 >>
-stream
-x[n6+!Y 0
-%9x{61ǷtOls0^12Ng {K2B
-aͳH-Yd[O^@e]t%{8si/T|¯Q~=Yޒo.?*Xz[s􍥉;apY*'63DzG̊\9ک<9{UNƜѢ},{,8`H7z#{PfWOG)bK60Lxr&C[bYt%/ek@PSrxVH>w/!f Ʊո"Ϣo7"4_^$ 瓓QIKQTgwxk22g)J(ٱ$8H|*ػظz`zgּu-q6] EsF$CHv32iY`9
-|6;#KuY.EvgrrNH8tɲj);m-3L)pM#س"ڏan;*2n^sGVkLgrڄ].,.iۦjZm&=ܭ(<{UdHQWj|f;o-1)+~f+ P_ύ܌=MjD.e!# +_[.`A6{x;/ H;x
-ow@@/e`&(:
-fNzF[{ rH%@Mގ
-J8 Si K%8nŞ_9An<6k?tRȍl><"ӗxpm#ҭGcOe&&2Ӏėx$a69wF/:Ὗɜۗ}}AAvN2SW7ΖRS:GGҒ+Dwa@2)I
-endstream
+2922 0 obj
+<< /D [ 2910 0 R /XYZ 81.145 628.356 null ] >>
endobj
2923 0 obj
-<< /Type /Page /Contents 2924 0 R /Resources 2922 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2910 0 R /XYZ 81.145 617.397 null ] >>
+endobj
+2924 0 obj
+<< /D [ 2910 0 R /XYZ 81.145 606.438 null ] >>
endobj
2925 0 obj
-<< /D [ 2923 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 595.479 null ] >>
endobj
2926 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2910 0 R /XYZ 79.37 519.958 null ] >>
endobj
2927 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 501.823 null ] >>
endobj
2928 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2910 0 R /XYZ 79.37 465.156 null ] >>
endobj
2929 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 447.021 null ] >>
endobj
2930 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 418.129 null ] >>
endobj
2931 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 407.171 null ] >>
endobj
2932 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 396.212 null ] >>
endobj
2933 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 385.253 null ] >>
endobj
2934 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 374.294 null ] >>
endobj
2935 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 670.199 null ] >>
-endobj
-277 0 obj
-<< /D [ 2923 0 R /XYZ 79.37 632.787 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 363.335 null ] >>
endobj
2936 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 611.945 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 352.376 null ] >>
endobj
2937 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 596.005 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 341.417 null ] >>
endobj
2938 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 556.154 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 330.458 null ] >>
endobj
2939 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 542.207 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 319.499 null ] >>
endobj
2940 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 531.248 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 308.54 null ] >>
endobj
2941 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 503.352 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 297.582 null ] >>
endobj
2942 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 492.393 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 286.623 null ] >>
endobj
2943 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 454.535 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 275.664 null ] >>
endobj
2944 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 443.577 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 264.705 null ] >>
endobj
2945 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 432.618 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 253.746 null ] >>
endobj
2946 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 421.659 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 242.787 null ] >>
endobj
2947 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 410.7 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 231.828 null ] >>
endobj
2948 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 399.741 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 220.869 null ] >>
endobj
2949 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 388.782 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 209.91 null ] >>
endobj
2950 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 377.823 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 198.951 null ] >>
endobj
2951 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 366.864 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 187.992 null ] >>
endobj
2952 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 355.905 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 177.034 null ] >>
endobj
2953 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 344.946 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 166.075 null ] >>
endobj
2954 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 333.988 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 155.116 null ] >>
endobj
2955 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 323.029 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 144.157 null ] >>
endobj
2956 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 309.081 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 133.198 null ] >>
endobj
2957 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 298.122 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 122.239 null ] >>
endobj
2958 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 287.163 null ] >>
+<< /D [ 2910 0 R /XYZ 81.145 93.347 null ] >>
endobj
-2959 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 276.204 null ] >>
+2909 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F65 339 0 R /F74 341 0 R /F81 381 0 R /F83 415 0 R /F75 342 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2961 0 obj
+<< /Filter /FlateDecode /Length 2562 >>
+stream
+x[KoW CV t -o=mdڢ؃X'ŗt}{۫PcNۿ,F ƵX޾-|܈gDiN8+sioxG|>߯tG~M]yBO.wH_ҏf"M[ F&B=Kq s ȝz,,gBQ+M"fI<|7^FT獸׷`c烈 ϻq/Yc%^ӄxyHЎI шZE?~_DE3gЪIf`di_ R1k6+g3EBPnYP#X`Ҡb`J8)
+tXXOF[8vz%Gx+{[β!+z CR .qEK Ycd!k: OGlEޖdȊ;➿~+'dm%/poL
+1b-R
+cw;{v8
+HRV|Dt&eBYR^I5XR6MsBx}M;Pi p`z_1 6:8-'
+/M'ٹiM0M!ww}_\lWr¢m̯Q4lR2uљn֦߹}^ls+WM)NZ~B
+,w/^&3ZDքZiڙ»~fEg4Shw$S ZsЙ*^EVToC*u#е[eH&5mE>SCB1>X5ziΨ$ګ6:,*`:t;p zO<K5@]Y~ʹ3I͸Cs-RǝL\J~NkVP;L9lԪO4L wo95k4={R f-ArN-r]:Y&qfP|$w4- vL\SCBú 0$:ڣΊ".``1xW8q!N?!wG#]9x5<)sF295
+͌2=YJbJ!%SAv>)[<pN,±1;2`L91|4ˢo5TJt,ꨖҁ9]cYEdoHQ;L#ek:F2QpiׇԌzR?gV¶Tsl*~iˎsp΄`F!gr霎i|^yd3Qsk>qq&oxcōsD7[κӮFhö'iZ JU#Me!@'(^Ðg-Ҩ k[TC=pfI5AQXG*%B/^߷!^mD ^V[*G+'dO;q)+b S4O@ƭ0C޽v!oO/Bg?oHMϧǗ3X4F5ZMx мp~pzePꋥޚMu~a<5×l6w:mp
+N% 0nWNmӡjGQ4L#X;i2i`'?x6%Y7>Z_ ,@u`G9z%7:flrԕAka=ٯZ5sבIﴂ’{BJ&
+endstream
endobj
2960 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 265.245 null ] >>
+<< /Type /Page /Contents 2961 0 R /Resources 2959 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R /Annots 3010 0 R >>
endobj
-2961 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 254.286 null ] >>
+3010 0 obj
+[ 2908 0 R ]
+endobj
+2908 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 745.828 246.868 758.432 ]/A << /S /GoTo /D (Hfootnote.42) >> >>
endobj
2962 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 243.327 null ] >>
+<< /D [ 2960 0 R /XYZ 78.37 808.885 null ] >>
endobj
2963 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 232.369 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 743.056 null ] >>
endobj
2964 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 221.41 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 732.097 null ] >>
endobj
2965 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 210.451 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 721.138 null ] >>
endobj
2966 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 199.492 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 710.18 null ] >>
endobj
2967 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 188.533 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 699.221 null ] >>
endobj
2968 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 177.574 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 688.262 null ] >>
endobj
2969 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 166.615 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 677.303 null ] >>
endobj
2970 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 155.656 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 666.344 null ] >>
endobj
2971 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 144.697 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 655.385 null ] >>
endobj
2972 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 133.738 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 644.426 null ] >>
endobj
2973 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 122.78 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 633.467 null ] >>
endobj
2974 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 111.821 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 622.508 null ] >>
+endobj
+281 0 obj
+<< /D [ 2960 0 R /XYZ 79.37 585.858 null ] >>
endobj
2975 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 100.862 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 565.015 null ] >>
endobj
2976 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 89.903 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 549.335 null ] >>
endobj
2977 0 obj
-<< /D [ 2923 0 R /XYZ 81.145 78.944 null ] >>
-endobj
-2922 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 2960 0 R /XYZ 81.145 509.744 null ] >>
endobj
-2980 0 obj
-<< /Filter /FlateDecode /Length 2294 >>
-stream
-x[ˮ#'ޟ U\ёi;Rge6@Csq5)FU3u߅}}|(wYpC\'.Z\ƹݸ?~C}XyiB3L"ř@Q%0#)JmI]?)P2=}uq+z
-@m?: 6.X>'1.q.iVU2p#|8O.IH@a].ikiD%?E20eY bV" ~&I 9xժ'D5i#qrLѕ^uVgE7ڹ|[*$zohƢfASP^VetMz7fIRm$D e䖟#D,dKWŜ?kы)v9=P *p$luouY*S覂T,%Z1Im̈́H-XOU_&:sQM#s.rA-SLf7
-fӚVI:juN<==sTH4wSO"<G2:,̚bq}Z$f)5()J}餾'9Zzzp"RRWZST-jRr&N.pLT2 %Cf%)Q"Qq,>> Y.(TR_(}e]mr.fJz"|GI^`"ij*wH
-k#ǰ;i4j_ڣᵻ~˃qy0޸Hf|RȽwHRrN-RO__{H~ᵫ>֟r} }^?K_YLuROSX%:KdI;B
-vtqѝ.R^M
-i v[{fdl7䓟Y^;:[07ͶmDs*J-r+73N>3;>#
-4g5}rfڨR
-ja!M^q+s>??*4¼J\^Fܺ[TH۪ɾդƤ~4"E[(K󂌪#/^,2{ `^,ޗ1.7ZO(~SVl$oVwNrk PoW~m+AE JuE`1D~}5Gݳۊ-O۝9g!',.+ehP_kv_΀IR^ 7wSP
- ێ;xIGĕ,E=}m*]4PQF=J&&WW"/d
-L*Mi}<\h|KRRlRZ0R3 ZŒ'z%.8m9*M2CBK]v 6.uԱ8Ea YZrf9?E ΐ:tKmEg۪~^΃:nҀZ!_a%_} +j6
-endstream
+2978 0 obj
+<< /D [ 2960 0 R /XYZ 81.145 495.926 null ] >>
endobj
2979 0 obj
-<< /Type /Page /Contents 2980 0 R /Resources 2978 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2578 0 R >>
+<< /D [ 2960 0 R /XYZ 81.145 484.967 null ] >>
+endobj
+2980 0 obj
+<< /D [ 2960 0 R /XYZ 81.145 457.331 null ] >>
endobj
2981 0 obj
-<< /D [ 2979 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 446.372 null ] >>
endobj
2982 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 408.644 null ] >>
endobj
2983 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 397.685 null ] >>
endobj
2984 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 386.726 null ] >>
endobj
2985 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 695.106 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 375.767 null ] >>
endobj
2986 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 684.147 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 364.808 null ] >>
endobj
2987 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 673.188 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 353.85 null ] >>
endobj
2988 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 662.229 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 342.891 null ] >>
endobj
2989 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 651.27 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 331.932 null ] >>
endobj
2990 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 640.311 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 320.973 null ] >>
endobj
2991 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 629.352 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 310.014 null ] >>
endobj
2992 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 618.393 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 299.055 null ] >>
endobj
2993 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 607.435 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 288.096 null ] >>
endobj
2994 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 596.476 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 277.137 null ] >>
endobj
2995 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 585.517 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 263.319 null ] >>
endobj
2996 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 252.36 null ] >>
endobj
2997 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 241.402 null ] >>
endobj
2998 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 230.443 null ] >>
endobj
2999 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 219.484 null ] >>
endobj
3000 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 208.525 null ] >>
endobj
3001 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 516.775 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 197.566 null ] >>
endobj
3002 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 505.816 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 186.607 null ] >>
endobj
3003 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 494.857 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 175.648 null ] >>
endobj
3004 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 483.898 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 164.689 null ] >>
endobj
3005 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 472.939 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 153.73 null ] >>
endobj
3006 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 461.98 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 142.771 null ] >>
endobj
3007 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 451.021 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 131.812 null ] >>
endobj
3008 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 440.062 null ] >>
+<< /D [ 2960 0 R /XYZ 81.145 120.854 null ] >>
endobj
3009 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 429.103 null ] >>
+<< /D [ 2960 0 R /XYZ 93.716 89.795 null ] >>
endobj
-3010 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 418.144 null ] >>
+2959 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F16 340 0 R /F59 350 0 R /F84 428 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3011 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 407.186 null ] >>
+3013 0 obj
+<< /Filter /FlateDecode /Length 2278 >>
+stream
+x[n,)߯h.D<$˒URvf5m !H2){U]g8AKA^d_ׯ_/Zx._.2S5JH._MJs@JY믾?I$pS_^ o
+.
+-аFGiEHY|0z4r
+)5HJ| dy2Atx'{u"N hOOi̓(+
+M(6)QFSYCΒXI$-RWlW8  ȭe3;hXtˡPhے4۔rNQ%m#Voyt0s i&|2G$G3 Hj0ve? y>%FBth@"#pl4H^-8E3U9f#{љ́oYhbmb2K &hh_%*r  o쭭/fm# iNnKZ~sF"$f˨>`&96Xu`ݷ ʓ Cqd:msU41h7Za^k4ZPXdUq'DŽ<7?g7RHGGBSU|2!%pϵ7Jy)[$5i55~G]zr%ԯQz;իYEr\&KZ Kx4 Qx$\C:҆IҺ9n~6k]Eڤɩ˧)2;iIBZzNI!,+=r-m
+V˓&hu)*L4m('=_ g'5!-@YS}DX80;7RTDZGgwmޯ󠝖^ʟ}ҒrrY>7 ]ȱiyړ} k*sC3T=R'%ʢz J []%ZwSz5l~D {}HsBcSN!EbS$ϼ:$ga̩F}>u1v3lXB{φ2ab3)kqR ak@K&d.{cuHρf`pN,~tgsv P7w^ .rrFIj;Gx#0Fs6;˻HIhaKnl"Aμڝ&MuAݎŚ@XI>"ӆuyjNqGť[BԮ3mh >*8 ٺ k>V΢8Y Z$^
+lDe<R=}ӷ#Qteܶ3ǔ@:˚͙E*+颷ϑM3q{裠L2h>wܽ>g2|MҢ(cԮǶ(-lQ]8spܝIY'v;ZN aW
+ǟb|oiCg+/}.3JFxb4/0O[~z1JGS\po\
+u]kLg㈝Bu!ïH̉v Xo JeU]&tkR__<rVwn״
+ǎTg:L卿| nmk"9_I(ɕth?Q
+]W:pߨpM<e2>7k~ڢ7͈}L
+͐5+kV˪}I( k17g)$Msi_eHo{O$hou.kC_]L{ fôrtYmq߱M4ga+_,q6o;SJ2;%6ڶ(
+Ԫ\Y
+?jo ܲR, Vփö'}E۹Ae|*ɸ0` 2-W'e_
+endstream
endobj
3012 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 396.227 null ] >>
-endobj
-3013 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 385.268 null ] >>
+<< /Type /Page /Contents 3013 0 R /Resources 3011 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2608 0 R >>
endobj
3014 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 374.309 null ] >>
+<< /D [ 3012 0 R /XYZ 78.37 808.885 null ] >>
endobj
3015 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 363.35 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 768.829 null ] >>
endobj
3016 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 757.87 null ] >>
endobj
3017 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 341.432 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 746.912 null ] >>
endobj
3018 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 330.473 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 735.953 null ] >>
endobj
3019 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 290.623 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 724.994 null ] >>
endobj
3020 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 279.664 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 714.035 null ] >>
endobj
3021 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 268.705 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 703.076 null ] >>
endobj
3022 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 257.746 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 692.117 null ] >>
endobj
3023 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 246.787 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 681.158 null ] >>
endobj
3024 0 obj
-<< /D [ 2979 0 R /XYZ 79.37 224.075 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 670.199 null ] >>
endobj
3025 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 205.94 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 659.24 null ] >>
endobj
3026 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 194.981 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 607.435 null ] >>
endobj
3027 0 obj
-<< /D [ 2979 0 R /XYZ 79.37 146.359 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 596.476 null ] >>
endobj
3028 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 128.224 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 585.517 null ] >>
endobj
3029 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 117.265 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 574.558 null ] >>
endobj
3030 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 106.306 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 563.599 null ] >>
endobj
3031 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 95.347 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 552.64 null ] >>
endobj
3032 0 obj
-<< /D [ 2979 0 R /XYZ 81.145 79.407 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 541.681 null ] >>
endobj
-2978 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3035 0 obj
-<< /Filter /FlateDecode /Length 2599 >>
-stream
-xڽ[Ko#7 WD+zFx9-~f<r"{F("?
-gܾ^~ܕH@|".h.\97oŹ|w+/9ѶtaHH"w"9qi;- ~YszGQ" x۫EQOqJ]CTO|¸?Ώ4PA?
-Sz{'בxu O7ţ* f\
-{\1R[^?XKoyro`0xRyR^o4ŽK!7RQ8ٕL槞3O[
-\=~mce,Zo<ѱjqC$oV@(0-GrͬYܘLr;ۘSș5nNCXp&okK Zȓrls,ImC4>겢^W[A1c=%V9AÔ)'vRcmj:YE$eV
-RMsA85!&ҺFbZ)'r5JL;=\H=ͪ#@pf4Pjѯf#~04e>yFg;Ǻs>',-g \H-x"Q˯c19kĝn+QiEJf˳Q~\Z~E#xp.01NpF])zAESx @zގ3Xč.n
- "\\B9XuPu;܃Fk70vSkU,?^7綨VGOvMyb ,iBNOyޡ 1Vzw0dUFz0JZCA&5Yy Lo˛ӹٜmdJݦ.+Ma!en{&:'ү0?xobmc4@{Rbf6JݧqTnxͫc2+1γO^v%nsݤH$/2D'KF+5X|>Q'Los$ٮ5tZ'A)(]u2jeԑcs|zPq:$ `Fo% fw]'̊s/xeoȿ9M{UhtqL4
-`` K$,ّGlc -P6׾H8[N b,Nd􄎫BYc"֪}a7ZsZW!6Gu
-vjc'*Y=}aZ{U{=#]!g΄KI@hEH9>]s)iMqPH[~ce'GYy,I6)H%LTCk+}9yնDi>4JNfap)Dhlqg#8 ;CbgY~*=ԸؘtIJ:P}N0 LK@HGOjcr_uozpɽ ⾍_fӥQ̈́rBvԒK٭ۊÀqvݖ8)-ɾg9Wˌt~]#?m 埓x{Jz
-!e5OMWch?新jW4]Z+Mnk?DLj>{Hrːt2~!380K5d2ь8V7 Ӷ[MRyɬY=G5K-rX5ٹW+k x 0h-yP8~"?Ng$l5*䷧dӉJzڷ!=AztB7u6߁C܁#wݸT)`"Y8i=:vJK}*ڹzpFWڞb+.~\x2x&=Z:U̢jzٴ֍V#(ʊ@?RE1N -;ë5Hz76Bm[PnBY7c*¤GPĝ6~{J݅F@rר]0?:/ O[@#fR5R{@Ӫ*.Ƴ
-n앗Pөb# {Ԑ So q@`uxĊi =2Dn ;nwsM8:yQ;ƍY]p{#Ui{8,*wU!(._vIO6'a2%u[~tݢ 3-mUE4Wң a<L!gww<iaojz:=@1]1|/AՁҳE=~*dlg @I^ !Ogk@)o]!pU^r\cFDK
-fA8>[S ,'άSnO Ʒ
-ȵt;5l>B2tz 0M`,ϙR~h.|~ y!
-endstream
+3033 0 obj
+<< /D [ 3012 0 R /XYZ 81.145 530.722 null ] >>
endobj
3034 0 obj
-<< /Type /Page /Contents 3035 0 R /Resources 3033 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3012 0 R /XYZ 81.145 519.763 null ] >>
+endobj
+3035 0 obj
+<< /D [ 3012 0 R /XYZ 81.145 508.804 null ] >>
endobj
3036 0 obj
-<< /D [ 3034 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 497.846 null ] >>
endobj
3037 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 483.898 null ] >>
endobj
3038 0 obj
-<< /D [ 3034 0 R /XYZ 79.37 730.218 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 472.939 null ] >>
endobj
3039 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 700.135 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 461.98 null ] >>
endobj
3040 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 689.176 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 451.021 null ] >>
endobj
3041 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 678.217 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 440.062 null ] >>
endobj
3042 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 667.258 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 429.103 null ] >>
endobj
3043 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 656.3 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 418.144 null ] >>
endobj
3044 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 645.341 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 407.186 null ] >>
endobj
3045 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 634.382 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 396.227 null ] >>
endobj
3046 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 623.423 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 385.268 null ] >>
endobj
3047 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 612.464 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 374.309 null ] >>
endobj
3048 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 601.505 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 363.35 null ] >>
endobj
3049 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 585.579 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 352.391 null ] >>
endobj
3050 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 494.968 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 341.432 null ] >>
endobj
3051 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 484.009 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 330.473 null ] >>
endobj
3052 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 473.051 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 319.514 null ] >>
endobj
3053 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 462.092 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 308.555 null ] >>
endobj
3054 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 451.133 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 297.596 null ] >>
endobj
3055 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 440.174 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 286.638 null ] >>
endobj
3056 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 405.333 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 275.679 null ] >>
endobj
3057 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 394.374 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 264.72 null ] >>
endobj
3058 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 383.415 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 253.761 null ] >>
endobj
3059 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 372.456 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 242.802 null ] >>
endobj
3060 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 361.497 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 202.951 null ] >>
endobj
3061 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 350.538 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 191.992 null ] >>
endobj
3062 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 339.579 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 181.034 null ] >>
endobj
3063 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 328.621 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 170.075 null ] >>
endobj
3064 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 317.662 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 159.116 null ] >>
endobj
3065 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 270.865 null ] >>
+<< /D [ 3012 0 R /XYZ 79.37 136.403 null ] >>
endobj
3066 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 259.907 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 118.269 null ] >>
endobj
3067 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 248.948 null ] >>
+<< /D [ 3012 0 R /XYZ 81.145 107.31 null ] >>
endobj
-3068 0 obj
-<< /D [ 3034 0 R /XYZ 79.37 212.322 null ] >>
-endobj
-3069 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 144.388 null ] >>
+3011 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3070 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 133.429 null ] >>
+<< /Filter /FlateDecode /Length 2163 >>
+stream
+xڽZɎ#7 WF#Qh=nȹoA)Xgr-OIT~pqiכE\c\kqǕs
+y:1@&Rf931
+fn8}&^e:Rsc{n¹j+ïU:NW$)+ے@ekig8Z& Sb{R0%G^h/C"r)B8;9'%?겼e#%snHk2F9&i ܖMYd 㨼-ȡ<CtdR
+>0Qج5a/;Z)(cfl,bmԕMVVSPfo0h8_{(?7tmTx^+|ƀlx?*Ѕ44*GY^f0t(r#K<Ǿ5wG;(Pj|~ѷ3+euYIۚU.-
+Z(eX`F.؋Ԧ/RgbH]SI
+;{"`Զd}ewytݿ*qږC
+=]%WZRJZBVT2=G :uvf'6({\!!SUlNR8g Idmс FP[8vciб(EH5l~PK
+A O@}y1~;PzI}{1yV0~[.=M6Mu a}zc~ڲ0Ԫ>Yjd5*2A
+
+endstream
+endobj
+3069 0 obj
+<< /Type /Page /Contents 3070 0 R /Resources 3068 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3071 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 122.47 null ] >>
+<< /D [ 3069 0 R /XYZ 78.37 808.885 null ] >>
endobj
3072 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 3069 0 R /XYZ 79.37 773.016 null ] >>
endobj
3073 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 754.882 null ] >>
endobj
3074 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 743.923 null ] >>
endobj
3075 0 obj
-<< /D [ 3034 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 732.964 null ] >>
endobj
-3033 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+3076 0 obj
+<< /D [ 3069 0 R /XYZ 81.145 722.005 null ] >>
endobj
-3079 0 obj
-<< /Filter /FlateDecode /Length 1826 >>
-stream
-x[n6+3@ݶHJ"Eۤ(.|ey8T;vVn$}"w;ygBc|j/"y554IBI!c!_zOB
-?I:9W*ܐ_ %J <"c5ߵ!=_ *?=g:ا"3kYˇmȩt~'?X˷>[]Yg%1r Z!OUҌʆ!ɦ-(?T!nܨt
-
-:(ˢ9m)kR#XdB#VEh.ģJxIM%};BR4kb${Z~ö`§v+E!LɐG\9ַJqtiDPrCV]6yLAtL9Sj%7cU"]ZYXȜjtŴ6Vdƞ߮\>h !@fb%*t])N\HbLY5W^&5ejL~%㗺VИ%KY1 c[Y#$40:Mcx|~N( VڲYD3+v2aS[;>9ޗJo*Z=I'kH#ky0?LΆ[+Fqd:j]*HϣW6=_ՇHy^Z<TnhAV B7MG> D8ʟ}^HK|cqsy?YjeV'Ѱ
-
-{)+[Jund2 ._u
-$CK@i]D*kC5 lKDr#"V@-]j-)I5lil{QfpSAj_!}[N%x'.~u&PϏ@ZlslCQ!}gDjUEc`M1Gl8-sSlia`WH+Feĺ%SwSS@k߽=>LiYe˖Hë
-9F۔0$It7(%`ZRRnTdqC2J6MaLQ
-1jncw9jJcH7Z_Rݭ&nƤ,~ude~1\Y -h\G{zϔ5RKpcP0r_Q4X#uo`u@ܓ_ 7]pԵ{cZM܆Aj29xF0㈣Hs'\b/+vVqi@DrkM<G!3c_ke
-J¹<iE/\QyYnTbNtn;ObP!pL5l7}O }vʵpVuڽmȢ`m]ㅾC+=Lv{ʠBǗPZ>Cvv0O݄I^;FxYjSD:n{4bTH?xd
-pۙ#_0 7S//ξ*}? /Z۲i/_6-T%T*:)Y HoK1'%/zp&<Re޳de92>&Ƭ["-֍q0x+ Yt_<eeymڶv&!@jP6=
-h "
-jJO8?
--xpˣbDs]zw
-endstream
+3077 0 obj
+<< /D [ 3069 0 R /XYZ 81.145 706.065 null ] >>
endobj
3078 0 obj
-<< /Type /Page /Contents 3079 0 R /Resources 3077 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3069 0 R /XYZ 81.145 673.188 null ] >>
+endobj
+3079 0 obj
+<< /D [ 3069 0 R /XYZ 79.37 634.528 null ] >>
endobj
3080 0 obj
-<< /D [ 3078 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 604.438 null ] >>
endobj
3081 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 593.479 null ] >>
endobj
3082 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 582.521 null ] >>
endobj
3083 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 571.562 null ] >>
endobj
3084 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 560.603 null ] >>
endobj
3085 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 549.644 null ] >>
endobj
3086 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 538.685 null ] >>
endobj
3087 0 obj
-<< /D [ 3078 0 R /XYZ 79.37 675.375 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 527.726 null ] >>
endobj
3088 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 657.24 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 516.767 null ] >>
endobj
3089 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 646.281 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 505.808 null ] >>
endobj
3090 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 630.341 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 489.868 null ] >>
endobj
3091 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 619.382 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 399.208 null ] >>
endobj
3092 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 608.423 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 388.249 null ] >>
endobj
3093 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 597.464 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 377.29 null ] >>
endobj
3094 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 586.506 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 366.331 null ] >>
endobj
3095 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 575.547 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 355.372 null ] >>
endobj
3096 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 564.588 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 344.413 null ] >>
endobj
3097 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 533.704 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 309.544 null ] >>
endobj
3098 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 522.745 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 298.585 null ] >>
endobj
3099 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 511.786 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 287.626 null ] >>
endobj
3100 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 500.827 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 276.667 null ] >>
endobj
3101 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 489.868 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 265.709 null ] >>
endobj
3102 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 478.909 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 254.75 null ] >>
endobj
3103 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 467.95 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 243.791 null ] >>
endobj
3104 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 456.991 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 232.832 null ] >>
endobj
3105 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 446.032 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 221.873 null ] >>
endobj
3106 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 435.073 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 175.049 null ] >>
endobj
3107 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 424.115 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 164.09 null ] >>
endobj
3108 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 413.156 null ] >>
+<< /D [ 3069 0 R /XYZ 81.145 153.131 null ] >>
endobj
-3109 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 402.197 null ] >>
+3068 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F81 381 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3110 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 391.238 null ] >>
+3112 0 obj
+<< /Filter /FlateDecode /Length 2231 >>
+stream
+x[n#7+U 0 X#k} rMNk7ɦZqKXN
+p*PtI$N2'J>=¹2}uW̹9~+
+uq(y&ӽIrƹLC&VE$7i!H В$,(pfUIRyI$WdzǧQG ) VSY1e4қdmt?Y ~d~8oLp:eT7)~!UxEg$j KՇVQ1yt7zP*FAx׽v4$W|%rwpy>6Un>> \\UxM<x y|57Ȑ2ysr +\MlF;gԔ\t9^ /E4EQLsO]7Nr󪿝C\KÏI0:Jθ~dk:&|7Շd: 97[g&|ӻgP)֍̓{_S *Xe%\#P_e)\Q|5~‚[;!Kg^HpȒ֜I3ܿ\8H{"f@h
+?0jd]:T
+M[0-L,mP_V
+NO *`s98TL GҢJaa3QQf)˷#b˪OJ IbIʤ GќLę=t>.Kbv&[$Ufo20HfzY:!9湋UueN^{yg\=T4T (-6<~Gu~ޏlMe]:`gpO35;Hzvb}cߪ2v$:"U_QMJطbvX1#1/i S4VoKi6:ҫʹ#& PIwCY=׬ybZP:T;o7*ТJ2mqIm{$p\ZHB5n?ZYR@{TVU}_2 lfv\hv@ Q_nfJn<̈%!aP!nXW"$vT[f+vZ澻ܟaݚdr)a&R'|._"-oK-ҭ%ٷJe[řܽh řo-fIXE4$G+JU\BRbQ3 8,=~=}
+KatKYEI~~Wk6KIJf-Dܶ%ާ{1^pm_z'fo;e͚e[[1S[ZLTR|;w+ K:/)
+.n]ySŭO~۱񪆺xGɤ#{sSjG tGkM"|`>$gXRӕٺY׭3~1HFjVOnwx|4=JeHtʨ/iK:B.c܋P$ ٭
+3,8 7n?~.Ke=W)7nk<z,K׋b¼)*/bpkbd-A~AʸF;DmQ&-8 ^FH-Gzxk8}CwWGk4,YEZ^S@ ,SɒHw}R0kk,YIgkk~Y]g4G-ZT
+k3i髛 8Ž$]-ҝךmpC)ߖ~_|em?>XF])i$?ϖ1p(Z =@ŰzG~_}3®qبVͅw#GIWoq? UY?kFS4o j^@DT@9kY)0 g]-K+b滫Diu9x?O~Pҫ/EPqpԽzl:o•o2jXb:o\mx押!%Xl@_o;\b|jw%\!1Y|Ǡ7\V|H;mq{%voRB,d?.|
+endstream
endobj
3111 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 380.279 null ] >>
-endobj
-3112 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 369.32 null ] >>
+<< /Type /Page /Contents 3112 0 R /Resources 3110 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3113 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 358.361 null ] >>
+<< /D [ 3111 0 R /XYZ 78.37 808.885 null ] >>
endobj
3114 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 347.402 null ] >>
+<< /D [ 3111 0 R /XYZ 79.37 773.016 null ] >>
endobj
3115 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 336.443 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 705.068 null ] >>
endobj
3116 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 325.484 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 694.11 null ] >>
endobj
3117 0 obj
-<< /D [ 3078 0 R /XYZ 79.37 288.817 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 683.151 null ] >>
endobj
3118 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 258.727 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 672.192 null ] >>
endobj
3119 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 247.768 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 661.233 null ] >>
endobj
3120 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 236.809 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 650.274 null ] >>
endobj
3121 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 225.851 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 639.315 null ] >>
endobj
3122 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 214.892 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 628.356 null ] >>
endobj
3123 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 203.933 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 617.397 null ] >>
endobj
3124 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 192.974 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 606.438 null ] >>
endobj
3125 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 182.015 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 595.479 null ] >>
endobj
3126 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 171.056 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 584.52 null ] >>
endobj
3127 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 160.097 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 573.562 null ] >>
endobj
3128 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 149.138 null ] >>
+<< /D [ 3111 0 R /XYZ 79.37 534.901 null ] >>
endobj
3129 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 138.179 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 516.767 null ] >>
endobj
3130 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 127.22 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 505.808 null ] >>
endobj
3131 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 116.261 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 489.868 null ] >>
endobj
3132 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 105.303 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 478.909 null ] >>
endobj
3133 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 94.344 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 467.95 null ] >>
endobj
3134 0 obj
-<< /D [ 3078 0 R /XYZ 81.145 83.385 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 456.991 null ] >>
endobj
-3077 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
+3135 0 obj
+<< /D [ 3111 0 R /XYZ 81.145 446.032 null ] >>
endobj
-3138 0 obj
-<< /Filter /FlateDecode /Length 1659 >>
-stream
-xZM6 ϯX$
-}4뺭ksxTjGޚ[-R[ٺJv~:<|3BD,wНm=*V+K=ޖyU։M\Ӡ楌Va%(-4 .fz,}O~~$y܉YȱdumJWk3n o~VqhX\긿He!κI\ΦDX L.X&a&S <WϦhbY9IkxCS|bK)+& h0?iќ5tnm2BH{x8q).̽^ j#â5+k:";c G{R"''Z`3T,j"l2[7H2-Ҏc.+܈*? qk*).zg^+>Fjb_Ty}N)ţo>/ hmm7.RԢ5839-RB=$A)pǩlavTlhʒ%e/
-ޟv\
-eTyޟu~pCu`.]ޱ=:k^fſ.!v,04<\&:v`$FןVR+SBRkaQi^Kl?K4ɽLuHU|EezCN~]:]d
-  [P,@;o9g.i(KM@n2C<J,XM8|RmNW<0??& ~xzrmd{"UǻWkz
-endstream
+3136 0 obj
+<< /D [ 3111 0 R /XYZ 81.145 435.073 null ] >>
endobj
3137 0 obj
-<< /Type /Page /Contents 3138 0 R /Resources 3136 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3111 0 R /XYZ 81.145 424.115 null ] >>
+endobj
+3138 0 obj
+<< /D [ 3111 0 R /XYZ 81.145 393.23 null ] >>
endobj
3139 0 obj
-<< /D [ 3137 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 382.271 null ] >>
endobj
3140 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 371.313 null ] >>
endobj
3141 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 360.354 null ] >>
endobj
3142 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 349.395 null ] >>
endobj
3143 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 338.436 null ] >>
endobj
3144 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 327.477 null ] >>
endobj
3145 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 316.518 null ] >>
endobj
3146 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 305.559 null ] >>
endobj
3147 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 294.6 null ] >>
endobj
3148 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 283.641 null ] >>
endobj
3149 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 272.682 null ] >>
endobj
3150 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 261.723 null ] >>
endobj
3151 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 250.765 null ] >>
endobj
3152 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 239.806 null ] >>
endobj
3153 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 228.847 null ] >>
endobj
3154 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 217.888 null ] >>
endobj
3155 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 206.929 null ] >>
endobj
3156 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 195.97 null ] >>
endobj
3157 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 185.011 null ] >>
endobj
3158 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 3111 0 R /XYZ 79.37 148.344 null ] >>
endobj
3159 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 118.254 null ] >>
endobj
3160 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 107.295 null ] >>
endobj
3161 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 96.336 null ] >>
endobj
3162 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 3111 0 R /XYZ 81.145 85.377 null ] >>
endobj
-3163 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 516.775 null ] >>
-endobj
-3164 0 obj
-<< /D [ 3137 0 R /XYZ 79.37 480.107 null ] >>
+3110 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F83 415 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3165 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 461.973 null ] >>
+<< /Filter /FlateDecode /Length 1579 >>
+stream
+xZn#7+Kn>
+9|0.OƕKHL4+cV<1}J~P>]4ޓ)d=Rdb!L.;HeMuLB&6>9&]htDk,ƃs0 ܈T9y_qDqtv@5?5[]`=\sxU`=:,G9v>ŰiD[ JLf; 
+#Pn6K2L)iDXK_K6
+'/+9%} |@,K}.? ɛbQmU3 *3)EuϾPbEQb2[3 VBxf%PU%\lDy:y{keM:%ſoXMIT7рNq>n$IF1qf tz q4Q2+N΋:j=~Xf¤G"xE&O0 UxnGV
+ o_g O{}.)
+mZ7|55V.ͧ2._'<Ob_:9,끮{}Lgo);/6 ?϶FGoyVa# -!yPrs!Iܦ4r|ߊHA>nG Rm9J<Dt>-) <0;1 Gl1^tb61ʏ9/Crl|^ڮ}DDPCzoN\=6Ep/֩[} ie?OZ[keګfg}9վEEԦťU^b5DbX+KoWԈKnv`DHXWK;˽#Iu>e_ty17z:0
+endstream
+endobj
+3164 0 obj
+<< /Type /Page /Contents 3165 0 R /Resources 3163 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3166 0 obj
-<< /D [ 3137 0 R /XYZ 79.37 425.305 null ] >>
+<< /D [ 3164 0 R /XYZ 78.37 808.885 null ] >>
endobj
3167 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 407.171 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 768.829 null ] >>
endobj
3168 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 396.212 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 757.87 null ] >>
endobj
3169 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 385.253 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 746.912 null ] >>
endobj
3170 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 374.294 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 735.953 null ] >>
endobj
3171 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 363.335 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 724.994 null ] >>
endobj
3172 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 352.376 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 714.035 null ] >>
endobj
3173 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 341.417 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 703.076 null ] >>
endobj
3174 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 330.458 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 692.117 null ] >>
endobj
3175 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 319.499 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 681.158 null ] >>
endobj
3176 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 308.54 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 670.199 null ] >>
endobj
3177 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 297.582 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 659.24 null ] >>
endobj
3178 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 286.623 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 648.281 null ] >>
endobj
3179 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 275.664 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 637.322 null ] >>
endobj
3180 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 264.705 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 626.364 null ] >>
endobj
3181 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 253.746 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 615.405 null ] >>
endobj
3182 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 242.787 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 604.446 null ] >>
endobj
3183 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 231.828 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 593.487 null ] >>
endobj
3184 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 220.869 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 582.528 null ] >>
endobj
3185 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 209.91 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 571.569 null ] >>
endobj
3186 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 198.951 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 560.61 null ] >>
endobj
3187 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 187.992 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 549.651 null ] >>
endobj
3188 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 177.034 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 538.692 null ] >>
endobj
3189 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 166.075 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 527.733 null ] >>
endobj
3190 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 155.116 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 516.775 null ] >>
endobj
3191 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 144.157 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 505.816 null ] >>
endobj
3192 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 133.198 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 494.857 null ] >>
endobj
3193 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 122.239 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 483.898 null ] >>
endobj
3194 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 111.28 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 472.939 null ] >>
endobj
3195 0 obj
-<< /D [ 3137 0 R /XYZ 81.145 100.321 null ] >>
-endobj
-3136 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 3164 0 R /XYZ 81.145 461.98 null ] >>
endobj
-3198 0 obj
-<< /Filter /FlateDecode /Length 2718 >>
-stream
-xڵn+<
-ܖ5ܒ6K!í(vSF&Y}! }&1A?_q1-+FYo?4q.>86|¨ Ώ҈v&O`{F#qW#@IO32VPR%3*i <y} H`K5 i2Be2 f•h Thׯ^FND+\h>3ۊHVD~GkF+M)B;&% n KV_4s4L(`vFX<[#zA*fʦLoE2gB  *l uXy5g
-ڧh= =6t-3<
-TP@JH0 Bd{ /VP^ <&)(WI#3;wZIуR_- XbH]#T(^nّv(A ÷W츒g6:HvI5$U%R;H`Mߓ>zڕTZΤ!rRR^=΢ZJ)'$ZH
-PiqR+/'"2eԈFG aZmּaiR3ieFoONI 4K9͔V Ͳo?<x@ΖcX߸ճ})c'1e-
-&f\ǥKg~u>*}QW>A1eu`&0GB$#3x YP]N7dFO&Z@OrӉ1ܞw 18"d#
-9}=Z_1qʕ2!M\|hXr'|rϥPÀEq`VZH+eTGAwxخ|2"4 VAtn#Tγ%GtYrKr A%Lx?T ǣ9T^+hRɹ>RLVq͵TcT~Gf3f1՚ZH3ȹ\R|\ݙ>1laa;=XeC5jZ"tO}&VСF69'10=SYwv(+n
-Ӻr1/˪>/{4"9K2Ac7w !5!B3Li\@4LK9w
-מʡ-k~<{?&hJnJ9,2H2 tFD6~ײEJX$Dr4V4dT%}$D.3Azm}Tt}L ѶXpttQ1QLI=.ܘ}Ք!7CΏaCvKǦ>K^ "vAZ1tlӚPo0ab{PIwŦ{u&kim&tn0_99 [H=jh:)zY4kT£5dOxP ⭺uAU.J SB!ymp4v/=hO|o߸#d䈯LbʩLtܿ\Gn8FoˡK84!Qk_ XYdژVVhuf8`F!v Ҫ?}3VZþT-$/sNsdu^
-wa9,} VGeneuQgq R%xA=͛(KEUo3Ħ!>x'<i:|Uz,=3@»U-78p%
-endstream
+3196 0 obj
+<< /D [ 3164 0 R /XYZ 81.145 451.021 null ] >>
endobj
3197 0 obj
-<< /Type /Page /Contents 3198 0 R /Resources 3196 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R /Annots 3248 0 R >>
-endobj
-3248 0 obj
-[ 3135 0 R ]
+<< /D [ 3164 0 R /XYZ 81.145 440.062 null ] >>
endobj
-3135 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 745.828 246.868 758.348 ]/A << /S /GoTo /D (Hfootnote.43) >> >>
+3198 0 obj
+<< /D [ 3164 0 R /XYZ 81.145 429.103 null ] >>
endobj
3199 0 obj
-<< /D [ 3197 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 418.144 null ] >>
endobj
3200 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 743.055 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 407.186 null ] >>
endobj
3201 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 732.097 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 396.227 null ] >>
endobj
3202 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 721.138 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 385.268 null ] >>
endobj
3203 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 710.179 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 374.309 null ] >>
endobj
3204 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 699.22 null ] >>
+<< /D [ 3164 0 R /XYZ 79.37 337.641 null ] >>
endobj
3205 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 688.261 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 319.507 null ] >>
endobj
3206 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 677.302 null ] >>
+<< /D [ 3164 0 R /XYZ 79.37 282.839 null ] >>
endobj
3207 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 666.343 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 264.705 null ] >>
endobj
3208 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 655.384 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 235.813 null ] >>
endobj
3209 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 644.425 null ] >>
-endobj
-281 0 obj
-<< /D [ 3197 0 R /XYZ 79.37 607.769 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 224.854 null ] >>
endobj
3210 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 586.927 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 213.895 null ] >>
endobj
3211 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 571.245 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 202.936 null ] >>
endobj
3212 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 520.213 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 191.978 null ] >>
endobj
3213 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 509.254 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 181.019 null ] >>
endobj
3214 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 498.295 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 170.06 null ] >>
endobj
3215 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 487.336 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 159.101 null ] >>
endobj
3216 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 476.377 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 148.142 null ] >>
endobj
3217 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 465.418 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 137.183 null ] >>
endobj
3218 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 454.459 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 126.224 null ] >>
endobj
3219 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 443.5 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 115.265 null ] >>
endobj
3220 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 432.541 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 104.306 null ] >>
endobj
3221 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 421.582 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 93.347 null ] >>
endobj
3222 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 410.624 null ] >>
+<< /D [ 3164 0 R /XYZ 81.145 82.389 null ] >>
endobj
-3223 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 399.665 null ] >>
+3163 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3224 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 388.706 null ] >>
+3226 0 obj
+<< /Filter /FlateDecode /Length 2512 >>
+stream
+x[K D 
+
+mK\eս`L$E#L-/rd
+/bX,0-Z,?_/뛿^ӅO/<?\,sZLn%)w@Oe U6K`?8VR 3^Y蘐8©VR)Ui<@ V>O{s:eƒ(tl%ULxFua
+q ͢d 4j7LM v| Wk/iz
+=Ƈ_vAw94; 1,Y~r=VQƅ|MB+}7a/ZF\@Fj![`2
+1a%d#\ˁ2?"]9ފKוֹi$<;RvoЎI 0Rv[ߗB/9V4>(flYFb/HŬ Wv2)kp=asv%.jPۡ'i*T$ UUf̳4w%y$S! rR{!I5o+}ZBLkjYnI7
+~孔{P>IWv,$=L-(J*h|SԧSi1%"S#-ϒVҲTԢɉRꭽ4( DŽ
+7E _*2=KDO^=![yx z8J,FOQXK59MȋzOz)Ȱ^J$,u2%R*X庺7jSV @U2Z#UTDfUK'(d054~{)F3nVra<
+mNbXYimިYe&v6_so޵+|j$M_@e
+iԫUWm99c5}<γ7q>wrYWv^˾e{c9g0g8r9H~NZsfP | ezIłcFHYdI~A!:GMaQ];ϸG<tveM-"g9`}l,}lІY决sjSt<tA(fcu4rv[{ N]T
+b̹Z@L{Ӽ9`W|}BRP!󱑚Rb# Ts؀ -6`;Aa= '|d\Ɇk'i&|Z]!nƯ@o?^~w5Fgā?|.`|C(ao«(q2˫X0<ygAڸ MrTԶ_G
+endstream
endobj
3225 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 377.747 null ] >>
+<< /Type /Page /Contents 3226 0 R /Resources 3224 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R /Annots 3277 0 R >>
endobj
-3226 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 366.788 null ] >>
+3277 0 obj
+[ 3223 0 R ]
+endobj
+3223 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 598.894 246.868 611.414 ]/A << /S /GoTo /D (Hfootnote.43) >> >>
endobj
3227 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 355.829 null ] >>
+<< /D [ 3225 0 R /XYZ 78.37 808.885 null ] >>
endobj
3228 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 344.87 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 768.829 null ] >>
endobj
3229 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 333.911 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 757.87 null ] >>
endobj
3230 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 322.952 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 746.912 null ] >>
endobj
3231 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 311.993 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 735.953 null ] >>
endobj
3232 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 301.034 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 724.994 null ] >>
endobj
3233 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 290.076 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 714.035 null ] >>
endobj
3234 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 279.117 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 703.076 null ] >>
endobj
3235 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 268.158 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 692.117 null ] >>
endobj
3236 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 257.199 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 681.158 null ] >>
endobj
3237 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 246.24 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 670.199 null ] >>
endobj
3238 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 235.281 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 659.24 null ] >>
endobj
3239 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 224.322 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 648.281 null ] >>
endobj
3240 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 213.363 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 596.095 null ] >>
endobj
3241 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 202.404 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 585.136 null ] >>
endobj
3242 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 191.445 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 574.177 null ] >>
endobj
3243 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 180.487 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 563.218 null ] >>
endobj
3244 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 169.528 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 552.259 null ] >>
endobj
3245 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 158.569 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 541.301 null ] >>
endobj
3246 0 obj
-<< /D [ 3197 0 R /XYZ 81.145 147.61 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 530.342 null ] >>
endobj
3247 0 obj
-<< /D [ 3197 0 R /XYZ 93.716 89.795 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 519.383 null ] >>
endobj
-3196 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F16 336 0 R /F59 346 0 R /F84 425 0 R /F22 367 0 R /F81 377 0 R /F83 414 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+3248 0 obj
+<< /D [ 3225 0 R /XYZ 81.145 508.424 null ] >>
endobj
-3251 0 obj
-<< /Filter /FlateDecode /Length 1917 >>
-stream
-xZɎ6W!Y h
-"Xm盢N.p'gV>>.Rƒ.} 8)}:kGNsn4zWB-Jhj D#{YM4KFTąWA
-GJVh8{+{c I@u#i5޷s-Tp3>]RFD1+T \ꪄ; [`f
-61u.HP*Vp&)g} η '}Ix
-CM&6?>ͬZ \#- LkxxW Z 5ȣn0~=4|
-endstream
+3249 0 obj
+<< /D [ 3225 0 R /XYZ 81.145 497.465 null ] >>
+endobj
+285 0 obj
+<< /D [ 3225 0 R /XYZ 79.37 460.655 null ] >>
endobj
3250 0 obj
-<< /Type /Page /Contents 3251 0 R /Resources 3249 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3225 0 R /XYZ 81.145 439.812 null ] >>
+endobj
+3251 0 obj
+<< /D [ 3225 0 R /XYZ 81.145 424.077 null ] >>
endobj
3252 0 obj
-<< /D [ 3250 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 372.887 null ] >>
endobj
3253 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 730.971 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 361.929 null ] >>
endobj
3254 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 720.012 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 350.97 null ] >>
endobj
3255 0 obj
-<< /D [ 3250 0 R /XYZ 79.37 673.39 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 340.011 null ] >>
endobj
3256 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 655.255 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 329.052 null ] >>
endobj
3257 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 644.296 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 318.093 null ] >>
endobj
3258 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 633.337 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 307.134 null ] >>
endobj
3259 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 622.379 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 296.175 null ] >>
endobj
3260 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 611.42 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 285.216 null ] >>
endobj
3261 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 600.461 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 274.257 null ] >>
endobj
3262 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 589.502 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 263.298 null ] >>
endobj
3263 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 578.543 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 252.34 null ] >>
endobj
3264 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 567.584 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 241.381 null ] >>
endobj
3265 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 556.625 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 230.422 null ] >>
endobj
3266 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 545.666 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 219.463 null ] >>
endobj
3267 0 obj
-<< /D [ 3250 0 R /XYZ 79.37 497.043 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 208.504 null ] >>
endobj
3268 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 478.909 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 197.545 null ] >>
endobj
3269 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 467.95 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 186.586 null ] >>
endobj
3270 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 452.01 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 175.627 null ] >>
endobj
3271 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 436.07 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 164.668 null ] >>
endobj
3272 0 obj
-<< /D [ 3250 0 R /XYZ 79.37 397.41 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 153.709 null ] >>
endobj
3273 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 379.275 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 142.75 null ] >>
endobj
3274 0 obj
-<< /D [ 3250 0 R /XYZ 79.37 342.608 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 131.792 null ] >>
endobj
3275 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 312.518 null ] >>
+<< /D [ 3225 0 R /XYZ 81.145 120.833 null ] >>
endobj
3276 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 301.559 null ] >>
+<< /D [ 3225 0 R /XYZ 93.716 89.795 null ] >>
endobj
-3277 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 290.6 null ] >>
+3224 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F16 340 0 R /F22 371 0 R /F81 381 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3278 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 279.641 null ] >>
+3280 0 obj
+<< /Filter /FlateDecode /Length 2371 >>
+stream
+x[6)?0`
+qԍX(&5gKR9MH#>AݴK ˁg^sp^gdwzZ<^fnZ ab4{Krۦ$g$qz1ڥ;wN@QrukX/,RIb" F"{w`J/6/h PBIcH1▁+$"Zy&2f-j@FeDK<4N E#
+nz Vī{=GG*J7Wʯ)\g(ф݇O.($hBJ) 8뙔LqT=Ro$iZ-hri?DOBĖHRmd0Ë#utz^x> gՀ֩k Dʜ(iQr,R7P\q&`R)o`ӓ'dmceCʡu
+t.4z6ɠBK 6PS{!9jR<$c$_iXtbUsʷM]6dgqHk0RH3dAMʃB&&kڔK^&}rqUC׀#(_LZjZ
+LmZnF2,& mhS[Akh6MRf>EGjڣEќϦ)25#\m*͐Fҋ];"2K ~fa`EMHMqƚӢPŧ6/x,\oo&<<V6
+r! ڎH˸
+*os.HҷUmt?;,Q`
+endstream
endobj
3279 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 268.682 null ] >>
-endobj
-3280 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 257.724 null ] >>
+<< /Type /Page /Contents 3280 0 R /Resources 3278 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3281 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 246.765 null ] >>
+<< /D [ 3279 0 R /XYZ 78.37 808.885 null ] >>
endobj
3282 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 235.806 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 768.829 null ] >>
endobj
3283 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 224.847 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 757.87 null ] >>
endobj
3284 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 213.888 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 746.912 null ] >>
endobj
3285 0 obj
-<< /D [ 3250 0 R /XYZ 81.145 202.929 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 735.953 null ] >>
endobj
-3249 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F83 414 0 R /F74 337 0 R /F65 335 0 R /F75 338 0 R /F59 346 0 R /F84 425 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+3286 0 obj
+<< /D [ 3279 0 R /XYZ 81.145 724.994 null ] >>
endobj
-3289 0 obj
-<< /Filter /FlateDecode /Length 2228 >>
-stream
-x[Ɏ6WL4=1[>%/!".bŇ4TzU,Z(—OO
-\&WCYhЄ'Z6|ӋqzB]9 KҾ:{}ph+P TsT^RD%fͅ`<x`R)3 bùE(mYNE 6wIs^PE =Ȟ -ƅܥqK˙b
-EC"Ԟ)S/45c^DUf+(ǔS}M^R23&F*-Ӡ>"iX{IG||UzJFsY`6u4={I{|"f эv ̈>S1gD\%FAR=bUPS{Ɍ3:H9pr
-H{A{ĺsmnZyTV0k :1HؑJ*;kriS8H)k\Zog WyscIng♻{&5ͯrgΈ AsfB;fgty5/-$y`Bֲ0Jfe^)rARP\2#*x00o1'$5_a.' bgh EӊROyxZsXSl0 j;ei:kە5Fbn_ݏV0 Ǚ~D5lr˄;4q r`^uQxM*ƣotwx]Kk
-M)/-}zUYh#
-1%-~~2sqr;-WF%u]m/ϷQ7UY
-ʓ  \+aeZ&Z۷JRۄxMmDع-IےN~ŵ(̂4.X!
-msy%nrIP3^9X^
-L=} ,q{IX
-590ŧ4}p&{eWڤh$ duJMS` 2oLdn}Y^7J;ll _5M^Rd#חYfzzFQU@TKEӲTܗ-)A/Ri5[AG혞; @ED,3B`AI?)aFBx4$Q
-endstream
+3287 0 obj
+<< /D [ 3279 0 R /XYZ 81.145 714.035 null ] >>
endobj
3288 0 obj
-<< /Type /Page /Contents 3289 0 R /Resources 3287 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R /Annots 3339 0 R >>
+<< /D [ 3279 0 R /XYZ 81.145 703.076 null ] >>
endobj
-3339 0 obj
-[ 3286 0 R ]
-endobj
-3286 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 434.994 246.868 447.514 ]/A << /S /GoTo /D (Hfootnote.44) >> >>
+3289 0 obj
+<< /D [ 3279 0 R /XYZ 81.145 692.117 null ] >>
endobj
3290 0 obj
-<< /D [ 3288 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 681.158 null ] >>
endobj
3291 0 obj
-<< /D [ 3288 0 R /XYZ 79.37 773.016 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 670.199 null ] >>
endobj
3292 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 659.24 null ] >>
endobj
3293 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 571.038 null ] >>
endobj
3294 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 560.08 null ] >>
endobj
3295 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 3279 0 R /XYZ 79.37 513.845 null ] >>
endobj
3296 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 711.046 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 495.788 null ] >>
endobj
3297 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 700.087 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 484.829 null ] >>
endobj
3298 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 689.128 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 473.87 null ] >>
endobj
3299 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 678.169 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 462.911 null ] >>
endobj
3300 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 451.952 null ] >>
endobj
3301 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 440.994 null ] >>
endobj
3302 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 645.293 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 430.035 null ] >>
endobj
3303 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 634.334 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 419.076 null ] >>
endobj
3304 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 408.117 null ] >>
endobj
3305 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 397.158 null ] >>
endobj
3306 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 386.199 null ] >>
endobj
3307 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 3279 0 R /XYZ 79.37 338.342 null ] >>
endobj
3308 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 579.539 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 320.285 null ] >>
endobj
3309 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 568.58 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 309.326 null ] >>
endobj
3310 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 557.621 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 293.541 null ] >>
endobj
3311 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 546.662 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 277.756 null ] >>
endobj
3312 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 535.704 null ] >>
+<< /D [ 3279 0 R /XYZ 79.37 239.628 null ] >>
endobj
3313 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 524.745 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 221.572 null ] >>
endobj
3314 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 513.786 null ] >>
+<< /D [ 3279 0 R /XYZ 79.37 185.359 null ] >>
endobj
3315 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 484.894 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 155.347 null ] >>
endobj
3316 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 432.092 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 144.388 null ] >>
endobj
3317 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 421.133 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 133.429 null ] >>
endobj
3318 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 410.174 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 122.47 null ] >>
endobj
3319 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 399.215 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 111.511 null ] >>
endobj
3320 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 388.256 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 100.552 null ] >>
endobj
3321 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 377.298 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 89.593 null ] >>
endobj
3322 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 366.339 null ] >>
+<< /D [ 3279 0 R /XYZ 81.145 78.635 null ] >>
endobj
-3323 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 355.38 null ] >>
+3278 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F65 339 0 R /F75 342 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3324 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 344.421 null ] >>
+3326 0 obj
+<< /Filter /FlateDecode /Length 2139 >>
+stream
+xڵZɎ7W , @idnO K|H.%MSa^bk#9ׅ<ߟ^޴_NHXz bqZ[>87gΥ\z0zysjq#]#co H4^i]"G\Fkoozu5WPT}\.bpiD;RHPx)W}k}ZKT#0O(iQcoګM2 %)8sjŔ0#RG[=JQ_
+] h\fdRst@g(HBM,wrGr=R0Ŭw;+/=EϨBg+Tc[G~B
+zW\XOΔ̒5{ȹNY'%493>Ck-džjewdRG8wk^
+
+ZPHdޯY7!אyHsq{@<~@0^{6Zc~x1m
+Kfމg^ެ8 \Qߓ eBlzV_al)}[rb
+=kWRQ_poC~?`F zoqTG$/917$iv5h<A[RM<ܚ,aN0d!Ouabc D7r=79‡ P3 @wػm^;dQ6:>D1蕪e
+R܅`Ihk?"Zܬ*ӓ|G;'Mou.ԛnHEq$R$z@
+endstream
endobj
3325 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 333.462 null ] >>
+<< /Type /Page /Contents 3326 0 R /Resources 3324 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R /Annots 3375 0 R >>
endobj
-285 0 obj
-<< /D [ 3288 0 R /XYZ 79.37 296.05 null ] >>
+3375 0 obj
+[ 3323 0 R ]
endobj
-3326 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 275.208 null ] >>
+3323 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 366.47 246.868 378.99 ]/A << /S /GoTo /D (Hfootnote.44) >> >>
endobj
3327 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 264.249 null ] >>
+<< /D [ 3325 0 R /XYZ 78.37 808.885 null ] >>
endobj
3328 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 253.29 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 768.829 null ] >>
endobj
3329 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 242.331 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 757.87 null ] >>
endobj
3330 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 231.372 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 746.912 null ] >>
endobj
3331 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 220.413 null ] >>
+<< /D [ 3325 0 R /XYZ 79.37 710.696 null ] >>
endobj
3332 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 209.455 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 692.638 null ] >>
endobj
3333 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 198.496 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 663.901 null ] >>
endobj
3334 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 187.537 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 652.942 null ] >>
endobj
3335 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 176.578 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 641.983 null ] >>
endobj
3336 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 136.727 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 631.024 null ] >>
endobj
3337 0 obj
-<< /D [ 3288 0 R /XYZ 81.145 125.768 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 620.065 null ] >>
endobj
3338 0 obj
-<< /D [ 3288 0 R /XYZ 93.716 94.776 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 609.106 null ] >>
endobj
-3287 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F15 334 0 R /F59 346 0 R /F84 425 0 R /F74 337 0 R /F16 336 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+3339 0 obj
+<< /D [ 3325 0 R /XYZ 81.145 598.147 null ] >>
endobj
-3342 0 obj
-<< /Filter /FlateDecode /Length 2522 >>
-stream
-x[n$-)`MɲTiξ:s[%I/j˕A`J7j. an_yc7jM+FbNzP7ywu`n͐M)nJF5Z$} o/th''v?@8"9R38B˥%%BWc5|#L=z0YŔ7M60-W B JIQ=VQjŪ&
-%p}s^KW(VBƧ[xP߃A ؝#W-0DOY=wOMҙ=?#d*WorO{8 !]@pjԎMeڝ9)G0aN;;4O܅pk՚:c6{^şiK@8䶥hhMA*AagvꌌVB~yN
-pQr{ O<現ޅp<J={:~:+\"&CG'S[Z8@A
-XC@D)1֚^hʻfe ЌW̋ǜx7M]I]]IӲ@\H Dd/e -kLWɍIѥEb>u/
-.h>b4
-9E:1/y KY\|}Z81i˴5MՀG={flꮁ<{^ށ!{D؋=hy*7~3Ƣ9?ԢjM4;[GV8%sFOE1 ~ {!d-][ "ij\mc=Q5g;qev5S)r3g3z_L?ŸC(|['S]*iW#T'vȶ-1ѥ_jvȽcWnVzG!6¤*ij!! ar5@Uǥ ף0X>tr8L5FF>q{S E M,< V%u_ +f1]S9L&U3Qɯ4%`a2EXaݭ|b=g^aB-/ rC|l9i;H(l\xxs,
-~$b1Kkxo-a0;mq)""'9y7-Yrȇ`%OhuɬX=DBg{9 ?pFy9}2Duv5A
-endstream
+3340 0 obj
+<< /D [ 3325 0 R /XYZ 81.145 587.188 null ] >>
endobj
3341 0 obj
-<< /Type /Page /Contents 3342 0 R /Resources 3340 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3325 0 R /XYZ 81.145 576.229 null ] >>
+endobj
+3342 0 obj
+<< /D [ 3325 0 R /XYZ 81.145 565.271 null ] >>
endobj
3343 0 obj
-<< /D [ 3341 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 554.312 null ] >>
endobj
3344 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 543.353 null ] >>
endobj
3345 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 532.394 null ] >>
endobj
3346 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 521.435 null ] >>
endobj
3347 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 510.476 null ] >>
endobj
3348 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 499.517 null ] >>
endobj
3349 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 663.225 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 488.558 null ] >>
endobj
3350 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 652.266 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 477.599 null ] >>
endobj
3351 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 641.308 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 466.64 null ] >>
endobj
3352 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 630.349 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 455.681 null ] >>
endobj
3353 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 619.39 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 444.723 null ] >>
endobj
3354 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 608.431 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 415.985 null ] >>
endobj
3355 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 597.472 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 363.645 null ] >>
endobj
3356 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 586.513 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 352.686 null ] >>
endobj
3357 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 575.554 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 341.727 null ] >>
endobj
3358 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 564.595 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 330.769 null ] >>
endobj
3359 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 553.636 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 319.81 null ] >>
endobj
3360 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 542.677 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 308.851 null ] >>
endobj
3361 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 531.719 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 297.892 null ] >>
endobj
3362 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 520.76 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 286.933 null ] >>
endobj
3363 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 509.801 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 275.974 null ] >>
endobj
3364 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 498.842 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 265.015 null ] >>
+endobj
+289 0 obj
+<< /D [ 3325 0 R /XYZ 79.37 228.055 null ] >>
endobj
3365 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 487.883 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 207.213 null ] >>
endobj
3366 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 476.924 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 196.254 null ] >>
endobj
3367 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 465.965 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 185.295 null ] >>
endobj
3368 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 455.006 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 174.336 null ] >>
endobj
3369 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 444.047 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 163.377 null ] >>
endobj
3370 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 433.088 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 152.418 null ] >>
endobj
3371 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 395.23 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 141.459 null ] >>
endobj
3372 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 384.271 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 130.5 null ] >>
endobj
3373 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 373.313 null ] >>
+<< /D [ 3325 0 R /XYZ 81.145 119.542 null ] >>
endobj
3374 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 362.354 null ] >>
+<< /D [ 3325 0 R /XYZ 93.716 89.795 null ] >>
endobj
-3375 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 351.395 null ] >>
+3324 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R /F74 341 0 R /F16 340 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3376 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 325.492 null ] >>
+3378 0 obj
+<< /Filter /FlateDecode /Length 2714 >>
+stream
+x[n$)+3L;^{7jۼ. Vr$syz&f؍
+x7K^9%1 \<EEh͑uGsXuRrJ!F5ZA^ ,'I
+z
+bm6sy@5u皥(!RX}f?q۩HJAnPiw-'wW?&g
+^D=[)e*WwR?)#ҿJB$`YQ2yL'B8$V@P d5̮]h:PDOs[MҋV& F"2#n:rT0#P0&+'<>?~a󧧱!>/c0J1 9bI0:u00b4=&c"+."Ё
+A@"IKR@v[؂*Pepʝ+"+
+uYro Ŏ:w\E*^x.xOn&L]]~4+# Il-ri7H˽(غ!~,B5|+0 T7|ѭi 5H퐠hyhsjR dQ,9/\\ '^c`( h"|)`ny>+7sZ
+]m!:N ۺ
+C5Hp-]vjksj7^vdzrQ,6r٫LY[n)cRQ12Z"ov@g*uiEZ6(u}Q.Q]y,UC{i1&*倽ĿҥvLu .gwWQի/[)@FCkJd 7"jP1C@ /$0*[
+]|77.ADq3qv){ß
+0
+˭HFLs=(mմlз^/bLkWlj>ZWo *#P{ !7^o,^5R7:T>^l*6Q&sFŽz _M~&h]Lvr# ͗L|Kqb#v7͉X$&bEf[1̒o#(B) R]^ cC5C
+[׎b5?5C |\/Fz'0 .g6ѓh' %˞D(hҷ
+÷WPR݄h8_K]
+endstream
endobj
3377 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 314.533 null ] >>
-endobj
-3378 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 303.574 null ] >>
+<< /Type /Page /Contents 3378 0 R /Resources 3376 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3379 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 292.615 null ] >>
+<< /D [ 3377 0 R /XYZ 78.37 808.885 null ] >>
endobj
3380 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 281.656 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 768.829 null ] >>
endobj
3381 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 270.697 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 733.542 null ] >>
endobj
3382 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 259.738 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 722.583 null ] >>
endobj
3383 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 248.78 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 711.625 null ] >>
endobj
3384 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 237.821 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 700.666 null ] >>
endobj
3385 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 226.862 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 689.707 null ] >>
endobj
3386 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 215.903 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 678.748 null ] >>
endobj
3387 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 204.944 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 667.789 null ] >>
endobj
3388 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 193.985 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 606.781 null ] >>
endobj
3389 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 183.026 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 595.822 null ] >>
endobj
3390 0 obj
-<< /D [ 3341 0 R /XYZ 79.37 160.314 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 584.863 null ] >>
endobj
3391 0 obj
-<< /D [ 3341 0 R /XYZ 81.145 142.179 null ] >>
-endobj
-3340 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F83 414 0 R /F74 337 0 R /F81 377 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 3377 0 R /XYZ 81.145 573.904 null ] >>
endobj
-3394 0 obj
-<< /Filter /FlateDecode /Length 1761 >>
-stream
-xZn9+aXE0 ER96i^.,EAC[2ZH}rzzE<D:{x }w_Fڤ imOoe{¤x*0 K
-̘.t V!$n΄-N*bd2 !^E
-EhƲȵH@wqV%"}967-*5j(2S J*&__[%kRֹ{˟'Gh
-mz&LYd$9VuU?=~N4f~^p)/X޾w>5r-3m)biBǬy$5Űkp { =Wm[0kqٟg}o7U:A0cAAip-HtW"af<yHhSRaq[R,m,UZ
-}h-wc޶aI` )B>I0&@QSQ-WM.{hiM.4$hkZPr[.vvLNLοG>/\].JN pZ*"e%Vgit]֢l\h?<F&tLg8{,q>F|[\eGتhKdkqv!A9k؋huH5r6']rXA/Rct͗5_09U4F_6
-Pb @{pAQڰ\i
-3D,~-pdZZ/NbH*b-dk6;М)[ޱ?XU\AFYo }Q,Ѧ˛GM+#M7T T9mgu
-< :UrS:7m+,cx}85v >Xt=%>oFV\dsk2,1cKKkBbhS bϲzjiа 9menv1Jۺa(Lnqn/)7|ML1(:$")`S!dI&{$ɋW}\X;'HV[AqZփ놼!\ 4+m:HOM
-+D$pkʹGjem` m$s EQYJ6" 5T`k1pmη["1O9،TrgxIPۆgs,-RW#4Z ^`kĨ4"3Z*go49SꂕFF+d EF?^Irc)
-endstream
+3392 0 obj
+<< /D [ 3377 0 R /XYZ 81.145 562.946 null ] >>
endobj
3393 0 obj
-<< /Type /Page /Contents 3394 0 R /Resources 3392 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3377 0 R /XYZ 81.145 551.987 null ] >>
+endobj
+3394 0 obj
+<< /D [ 3377 0 R /XYZ 81.145 541.028 null ] >>
endobj
3395 0 obj
-<< /D [ 3393 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 530.069 null ] >>
endobj
3396 0 obj
-<< /D [ 3393 0 R /XYZ 79.37 773.016 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 519.11 null ] >>
endobj
3397 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 508.151 null ] >>
endobj
3398 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 497.192 null ] >>
endobj
3399 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 727.983 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 486.233 null ] >>
endobj
3400 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 712.042 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 475.274 null ] >>
endobj
3401 0 obj
-<< /D [ 3393 0 R /XYZ 79.37 673.382 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 464.315 null ] >>
endobj
3402 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 643.293 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 453.357 null ] >>
endobj
3403 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 632.334 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 442.398 null ] >>
endobj
3404 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 621.375 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 431.439 null ] >>
endobj
3405 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 610.416 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 420.48 null ] >>
endobj
3406 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 599.457 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 409.521 null ] >>
endobj
3407 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 588.498 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 398.562 null ] >>
endobj
3408 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 577.539 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 387.603 null ] >>
endobj
3409 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 566.58 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 376.644 null ] >>
endobj
3410 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 555.621 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 339.547 null ] >>
endobj
3411 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 544.662 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 328.588 null ] >>
endobj
3412 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 533.704 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 317.629 null ] >>
endobj
3413 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 522.745 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 306.67 null ] >>
endobj
3414 0 obj
-<< /D [ 3393 0 R /XYZ 79.37 486.077 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 295.711 null ] >>
endobj
3415 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 467.943 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 270.569 null ] >>
endobj
3416 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 456.984 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 259.61 null ] >>
endobj
3417 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 446.025 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 248.651 null ] >>
endobj
3418 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 435.066 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 237.692 null ] >>
endobj
3419 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 424.107 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 226.733 null ] >>
endobj
3420 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 413.148 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 215.774 null ] >>
endobj
3421 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 402.189 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 204.815 null ] >>
endobj
3422 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 391.23 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 193.857 null ] >>
endobj
3423 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 380.271 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 182.898 null ] >>
endobj
3424 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 369.313 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 171.939 null ] >>
endobj
3425 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 358.354 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 160.98 null ] >>
endobj
3426 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 347.395 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 150.021 null ] >>
endobj
3427 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 336.436 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 139.062 null ] >>
endobj
3428 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 325.477 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 128.103 null ] >>
endobj
3429 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 314.518 null ] >>
+<< /D [ 3377 0 R /XYZ 79.37 109.194 null ] >>
endobj
3430 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 303.559 null ] >>
-endobj
-3431 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 292.6 null ] >>
+<< /D [ 3377 0 R /XYZ 81.145 91.82 null ] >>
endobj
-3432 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 281.641 null ] >>
+3376 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F81 381 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3433 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 270.682 null ] >>
+<< /Filter /FlateDecode /Length 1784 >>
+stream
+xZɎ7WBp$kd &5d*id4aka=˗ !o؃;d0wzwx׫
+Y oP1۲*}"]# .Zp"MU4@քm)/חވ3\=OY(d TB)!fO(Ǔ?y@9>|]|[i]&~I-K]YF2
+e摢Úw­;5k]Bxn^d;ep\=iaҠIQ
+B*CP9,9I <a'j
+nKZ?9q-J=ogJ@H_6N8:5LT*%ViBFV-_ARAtBGsh.n1" WlfǒFF>_^k+ n$jN$6ffwnIbds5֞"(&Ʊ mO&'5_09U4n?!l2GJE=o697eGyh@æŋ/w1(~}cZXXin?);DJƀMBw6oXN)˷X2- 9?"}QA8
+꾟qm%H
+inZ1tOyۿ=nȻx[EFep6 Jpƣ>_ƃ9MȌVXe,T--TĶ]K8{[_E>]
+endstream
+endobj
+3432 0 obj
+<< /Type /Page /Contents 3433 0 R /Resources 3431 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3434 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 259.724 null ] >>
+<< /D [ 3432 0 R /XYZ 78.37 808.885 null ] >>
endobj
3435 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 248.765 null ] >>
+<< /D [ 3432 0 R /XYZ 79.37 773.016 null ] >>
endobj
3436 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 237.806 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 754.882 null ] >>
endobj
3437 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 226.847 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 743.923 null ] >>
endobj
3438 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 215.888 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 727.983 null ] >>
endobj
3439 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 204.929 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 712.042 null ] >>
endobj
3440 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 193.97 null ] >>
+<< /D [ 3432 0 R /XYZ 79.37 673.382 null ] >>
endobj
3441 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 183.011 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 643.293 null ] >>
endobj
3442 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 172.052 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 632.334 null ] >>
endobj
3443 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 161.093 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 621.375 null ] >>
endobj
3444 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 150.134 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 610.416 null ] >>
endobj
3445 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 139.176 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 599.457 null ] >>
endobj
3446 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 128.217 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 588.498 null ] >>
endobj
3447 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 117.258 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 577.539 null ] >>
endobj
3448 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 106.299 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 566.58 null ] >>
endobj
3449 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 95.34 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 555.621 null ] >>
endobj
3450 0 obj
-<< /D [ 3393 0 R /XYZ 81.145 84.381 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 544.662 null ] >>
endobj
-3392 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F59 346 0 R /F84 425 0 R /F15 334 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+3451 0 obj
+<< /D [ 3432 0 R /XYZ 81.145 533.704 null ] >>
endobj
-3454 0 obj
-<< /Filter /FlateDecode /Length 2169 >>
-stream
-xڵZn#7+IW`YV%m0K\aqiza~Ekmz8?<]?(
-h2HL&r6lNh{f-܌aJN$n=RoP/Ĺf#qu'{EOk_W^z[$S2sluK^nߜh{Lܢ ` g||E=َ/:Dy!Y)^N;EGk杁ZblpYB03(#ͫ>:z#,M#UyXXcN3aɗe#!?d *OUz49 5bWsλt~jcuKDRdA/eRR-ֆ99{$GR3z %+(R^G$2|g 0!G7v<~֬icW4sƭ֙y H < wyn +c@XZɨmX-fQjFܫ[nj1m༤ws,+qͧU+NqY-Ώ$܆\LizqøXڏVΡd@N4ӺS9Kߤ]w{UbSu+ύ
-l bSH<S[T#_ʝ4;HؔI}|VݭdʣKge~MG?do:C}NܫT[iW59:!.]p-js퟼ E32</E3o~a|[K0 7)%oq,0f׹%Կ/Cbltg2՞3kkn}_*\;UQzeUv&<٪ @UA]VH_I&Yߙ = @0A
-IP>}W1 +MJ.\)>[^K%6^`ᖋ7*v@MF;_Ơ}+qMfEOͲRzNRbRLpf%a@ Ӻ^@2`҃S"cԯ,!" FʹR+^{S«Gop)Z1RZZit@)EaHL2܀C>^]J*̗N(q
-5/FQmiuM 8<E5g/]XMSn
-Sa -)iCn~+O_C,k~<|yƸ8GPpŌ<sيCX'ku7.\aLH(C.^;lX{ߖ TJ@z:ϝxPzE J7rbI@Xن&
-endstream
+3452 0 obj
+<< /D [ 3432 0 R /XYZ 81.145 522.745 null ] >>
endobj
3453 0 obj
-<< /Type /Page /Contents 3454 0 R /Resources 3452 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R /Annots 3507 0 R >>
-endobj
-3507 0 obj
-[ 3451 0 R ]
+<< /D [ 3432 0 R /XYZ 79.37 486.077 null ] >>
endobj
-3451 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 463.885 246.868 476.475 ]/A << /S /GoTo /D (Hfootnote.45) >> >>
+3454 0 obj
+<< /D [ 3432 0 R /XYZ 81.145 467.943 null ] >>
endobj
3455 0 obj
-<< /D [ 3453 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 452.002 null ] >>
endobj
3456 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 441.044 null ] >>
endobj
3457 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 430.085 null ] >>
endobj
3458 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 728.979 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 419.126 null ] >>
endobj
3459 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 718.02 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 408.167 null ] >>
endobj
3460 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 707.061 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 397.208 null ] >>
endobj
3461 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 696.102 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 386.249 null ] >>
endobj
3462 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 685.143 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 375.29 null ] >>
endobj
3463 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 674.184 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 364.331 null ] >>
endobj
3464 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 663.225 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 353.372 null ] >>
endobj
3465 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 652.266 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 342.413 null ] >>
endobj
3466 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 641.308 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 331.455 null ] >>
endobj
3467 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 630.349 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 320.496 null ] >>
endobj
3468 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 619.39 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 309.537 null ] >>
endobj
3469 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 608.431 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 298.578 null ] >>
endobj
3470 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 597.472 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 287.619 null ] >>
endobj
3471 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 586.513 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 276.66 null ] >>
endobj
3472 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 575.554 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 265.701 null ] >>
endobj
3473 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 564.595 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 254.742 null ] >>
endobj
3474 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 553.636 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 243.783 null ] >>
endobj
3475 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 542.677 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 232.824 null ] >>
endobj
3476 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 513.786 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 221.865 null ] >>
endobj
3477 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 460.984 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 210.907 null ] >>
endobj
3478 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 450.025 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 199.948 null ] >>
endobj
3479 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 439.066 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 188.989 null ] >>
endobj
3480 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 428.107 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 178.03 null ] >>
endobj
3481 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 417.148 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 167.071 null ] >>
endobj
3482 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 406.189 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 156.112 null ] >>
endobj
3483 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 395.23 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 145.153 null ] >>
endobj
3484 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 384.271 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 134.194 null ] >>
endobj
3485 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 373.313 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 123.235 null ] >>
endobj
3486 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 362.354 null ] >>
-endobj
-289 0 obj
-<< /D [ 3453 0 R /XYZ 79.37 339.886 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 112.276 null ] >>
endobj
3487 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 319.044 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 101.318 null ] >>
endobj
3488 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 308.085 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 90.359 null ] >>
endobj
3489 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 297.126 null ] >>
+<< /D [ 3432 0 R /XYZ 81.145 79.4 null ] >>
endobj
-3490 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 286.167 null ] >>
+3431 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F59 350 0 R /F84 428 0 R /F15 338 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3491 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 275.208 null ] >>
+3493 0 obj
+<< /Filter /FlateDecode /Length 2188 >>
+stream
+xZKo6W,C _@ {k[S{h/S-f(^92p^zHEw
+ayA-Ł0X4jy$9I:|} C=^-Nxc8
+Pz$?i,cTq?|ՊR%<0L
+%a(La푴e^(9&-Ȭ5+چ01yEV}ʠI*0k]|ϭ:
+6٘K`_:>S5J]0qR[ rB]fXiSStzceԊill`Nq͢F8 0~|],<4N8x%R4}y:nDƉf_ 1ȘGӜPꑢfz+@;$~-RtՔl'`kVߠEy4uou"˼8MGn&M\]XSd!R C1ȣJ-L{`=]WN>M'a3,
+-PJN(K:&cGd\{ |npNN[A8EǙfS
+IRO}?ϊc:/āyL*׀krS-MKB@-`w-C9&Pjhh)WFz''[muN
+)}G?:VώB$΢:`/
+endstream
endobj
3492 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 264.249 null ] >>
+<< /Type /Page /Contents 3493 0 R /Resources 3491 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R /Annots 3545 0 R >>
endobj
-3493 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 253.29 null ] >>
+3545 0 obj
+[ 3490 0 R ]
+endobj
+3490 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 236.441 456.911 246.868 469.501 ]/A << /S /GoTo /D (Hfootnote.45) >> >>
endobj
3494 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 242.331 null ] >>
+<< /D [ 3492 0 R /XYZ 78.37 808.885 null ] >>
endobj
3495 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 231.372 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 768.829 null ] >>
endobj
3496 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 220.413 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 757.87 null ] >>
endobj
3497 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 209.455 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 746.912 null ] >>
endobj
3498 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 198.496 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 730.971 null ] >>
endobj
3499 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 187.537 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 700.087 null ] >>
endobj
3500 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 176.578 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 689.128 null ] >>
endobj
3501 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 165.619 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 678.169 null ] >>
endobj
3502 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 154.66 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 667.21 null ] >>
endobj
3503 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 143.701 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 656.252 null ] >>
endobj
3504 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 132.742 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 645.293 null ] >>
endobj
3505 0 obj
-<< /D [ 3453 0 R /XYZ 81.145 121.783 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 634.334 null ] >>
endobj
3506 0 obj
-<< /D [ 3453 0 R /XYZ 93.716 90.677 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 623.375 null ] >>
endobj
-3452 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F16 336 0 R /F22 367 0 R /F71 347 0 R /F53 345 0 R /F73 350 0 R >> /ProcSet [ /PDF /Text ] >>
+3507 0 obj
+<< /D [ 3492 0 R /XYZ 81.145 612.416 null ] >>
endobj
-3510 0 obj
-<< /Filter /FlateDecode /Length 2056 >>
-stream
-x[K6r
-(a{~XMi:ܮ6aƫҲe[G]`lEfoִ0rBO0=Cxu˔-vќl݅Sicz9^Norqk,'i6(T0e׋R;CfQ":Ck CdZ}yq.gű1<yl2eO!O8Y2"&'IHc :p4̏#RGcX3Rڼ?ӎ6
-B0,g#RGk퓐#Z#tHi1XZi/
-շ,MHƃտn@cf hm>' 3Ԩx2f4KP#GޚѦ
-$N@#\/Ru߹T˔orX!#\dE#ښHLK8l=9+Ψl"Xje;P#Y@z`o+Mv`cn3I!cI< ?_TjZKv(ʲ3lۉ
-h bܵ|8W%@gv{E4Wڝv xztؤ-'PU7!giZP)VOa{lJ@ Wq9
-뛚VO((y:GӔQֺQڱ*O@M9hTK]A g;r]= YL7
-9X>8E/QxE4 [#
-endstream
+3508 0 obj
+<< /D [ 3492 0 R /XYZ 81.145 601.457 null ] >>
endobj
3509 0 obj
-<< /Type /Page /Contents 3510 0 R /Resources 3508 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3076 0 R >>
+<< /D [ 3492 0 R /XYZ 81.145 590.498 null ] >>
+endobj
+3510 0 obj
+<< /D [ 3492 0 R /XYZ 81.145 579.539 null ] >>
endobj
3511 0 obj
-<< /D [ 3509 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 568.58 null ] >>
endobj
3512 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 557.621 null ] >>
endobj
3513 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 546.662 null ] >>
endobj
3514 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 535.704 null ] >>
endobj
3515 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 506.812 null ] >>
endobj
3516 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 454.01 null ] >>
endobj
3517 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 443.051 null ] >>
endobj
3518 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 432.092 null ] >>
endobj
3519 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 421.133 null ] >>
endobj
3520 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 410.174 null ] >>
endobj
3521 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 399.215 null ] >>
endobj
3522 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 388.256 null ] >>
endobj
3523 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 377.298 null ] >>
endobj
3524 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 366.339 null ] >>
endobj
3525 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 355.38 null ] >>
+endobj
+293 0 obj
+<< /D [ 3492 0 R /XYZ 79.37 332.912 null ] >>
endobj
3526 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 312.07 null ] >>
endobj
3527 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 301.111 null ] >>
endobj
3528 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 290.152 null ] >>
endobj
3529 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 279.193 null ] >>
endobj
3530 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 268.234 null ] >>
endobj
3531 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 257.275 null ] >>
endobj
3532 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 246.316 null ] >>
endobj
3533 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 235.357 null ] >>
endobj
3534 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 224.398 null ] >>
endobj
3535 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 516.775 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 213.44 null ] >>
endobj
3536 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 505.816 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 202.481 null ] >>
endobj
3537 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 494.857 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 191.522 null ] >>
endobj
3538 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 483.898 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 180.563 null ] >>
endobj
3539 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 472.939 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 169.604 null ] >>
endobj
3540 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 461.98 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 158.645 null ] >>
endobj
3541 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 451.021 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 147.686 null ] >>
endobj
3542 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 440.062 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 136.727 null ] >>
endobj
3543 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 429.103 null ] >>
+<< /D [ 3492 0 R /XYZ 81.145 125.768 null ] >>
endobj
3544 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 418.144 null ] >>
+<< /D [ 3492 0 R /XYZ 93.716 96.602 null ] >>
endobj
-3545 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 407.186 null ] >>
+3491 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F16 340 0 R /F22 371 0 R /F71 351 0 R /F53 349 0 R /F73 354 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3546 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 396.227 null ] >>
+3548 0 obj
+<< /Filter /FlateDecode /Length 2111 >>
+stream
+x[n8WLdp d: ٷ\gN&ER\i+U QOoŋ~J% 8{Nr˿P)E ?TKP?^DLqaBR-]'P
+]9]kmZc\aeb!Z!'G"@4wl ߄PΌfmcZf<]{#8]^7aoo_4~LS[1!Uaf7e=Ig |UffǬ]h%/%R{@$N5SrέoEOgUܷ"OOҳpF|i]YFZ]$0sj"dc#$j]6vuaXgZ
+(a~X,u_¶%7ee=c]zϋ0Į5[oD
+.;";;S!fQ6sL1HDQt1X_OFقD{sgG[M$i:m9:"vO}_Q
+v)ނw{'ԩ^k)Jyi^g (͒?# 󍊐NB9:gB~ O3#)FxkY!3QCrҨc,4Z3ɅN!Az72:gNgn<lXHRdhx<p4&4>hŒ u:.5Ҍfy5-jd_%6y𝦝ѿYk
+̱":
+R
+>HCO3Halmryj۪ Nsnb{R9_:|1L07뽵P&I:#u^_egލ'.?mcA9q>!ރΧԹ>6%]RwZk2E 8N,͎ 9?&<qCj\ȞBKO[\̐K(hNg{& )!]ւCu5#}1kvAO "xE,%h :VO!D~R=8u5H >x\+"w$aۏYDZBe*pcq6W~[V7P4" E3Ą
+ǽ.Q1nj*0>ܘȟUɠc})Q%9vlm|-=>须i`+'k=,wF.\J'
+l_7xǨ_$C$`hZm+o!吱oj:jNCs5})tܸn_><|1ҟMz>Gu)P"ZP8,@]9h4KAgj8qx?ImWo|ghF-BY7 Vq̊yNJ}0)P [lOڱM yY4y6:7u
+:j1:(ʁuhU?@îA2ǍHZ/@'K''hEqJs.F'D 0 6-^4֒~+PedG j{~Nل7#GMRkY0M_u}v^B G9vS\j3nic%z~:֪z=v/fϩquc̥vs7fq 2I/Hl13NI Vۖ9\2ϝZ(/m|Fz/ 2@YㅵD$ŷvu i<" 6]gOEUaTd9"g#;g1 Yp xîOd)woJawv0iʑXw0
+endstream
endobj
3547 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 385.268 null ] >>
-endobj
-3548 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 374.309 null ] >>
+<< /Type /Page /Contents 3548 0 R /Resources 3546 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3109 0 R >>
endobj
3549 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 363.35 null ] >>
+<< /D [ 3547 0 R /XYZ 78.37 808.885 null ] >>
endobj
3550 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 768.829 null ] >>
endobj
3551 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 341.432 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 757.87 null ] >>
endobj
3552 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 330.473 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 746.912 null ] >>
endobj
3553 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 319.514 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 735.953 null ] >>
endobj
3554 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 308.555 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 724.994 null ] >>
endobj
3555 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 297.596 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 714.035 null ] >>
endobj
3556 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 286.638 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 703.076 null ] >>
endobj
3557 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 275.679 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 692.117 null ] >>
endobj
3558 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 264.72 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 681.158 null ] >>
endobj
3559 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 253.761 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 670.199 null ] >>
endobj
3560 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 242.802 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 659.24 null ] >>
endobj
3561 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 231.843 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 648.281 null ] >>
endobj
3562 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 220.884 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 637.322 null ] >>
endobj
3563 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 209.925 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 626.364 null ] >>
endobj
3564 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 198.966 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 615.405 null ] >>
endobj
3565 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 188.007 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 604.446 null ] >>
endobj
3566 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 177.049 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 593.487 null ] >>
endobj
3567 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 166.09 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 582.528 null ] >>
endobj
3568 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 155.131 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 571.569 null ] >>
endobj
3569 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 144.172 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 560.61 null ] >>
endobj
3570 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 133.213 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 549.651 null ] >>
endobj
3571 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 122.254 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 538.692 null ] >>
endobj
3572 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 111.295 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 527.733 null ] >>
endobj
3573 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 100.336 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 516.775 null ] >>
endobj
3574 0 obj
-<< /D [ 3509 0 R /XYZ 81.145 89.377 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 505.816 null ] >>
endobj
-3508 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3577 0 obj
-<< /Filter /FlateDecode /Length 2474 >>
-stream
-xڽ[n8+& x96i:,.URv ul|Zh)ߓr|y5"xϋ:O<'gV>;*=H}I`ɋ`-NhFEÀ! .K <~!sEw~3(Uxh]|wf1}!##ЕHYHDvc8&~/t-inĈI$_VI'ׂt^Pz{B9Hcj"sɂkti>ghe- ?䥍0-ȵ@ly`lœH Y`m"sm~5q l0BKד=OY#GǸӄ./SgH:-t =<@gmZuE!~hkfN[vq]"(*Rٿ*s
-A jG_'ZbvRU]lu zy~S P #]^;hi=!?sk(
-#ګN!/2WJX`ۈC>
-'C^DUg#\
- ls վ3- ؜ AU6X쵾>IdNet2f}7jFF%E"bk~:V>eԟ3~ZnZq-&_ҨNc㶞j5
-5 f+gՙG(zjL;l.UzNn]th٩Ն\Il*3q%Ӥl-D${?{jni@H:ՎڢD+'[rڬ4bN( hZ Y.+r i<؀3/l7;Ր@z 4n[*>`<nL.U^ e,<ߣ 60/6/@7>_LqrN/ϊ%a> 5M\T֩&eqŬ A89VjLVnLK >ѹ:wP6wZuAgOQg 0u~ˆz ^4eݍ@U&K| CENJ-L8Pzph[-EpsKhYrːMDy/%hIbRF Uf A'd6Ze)LӄqRRuz%Czw=auBO
-E!- [r^'btj4V~76xךhM 9o3`zJy-c u,S!lWLFh pѝR5N7GqN=4.0=:Nt"QХhlNt?6)5E%emzZ>uiݯC9\kAQSQymXt"<0_(o*NISMy^3rce$걖x_&G~^%Q`·]JgYa.ŹmeJIq)5U[EyVGwY[pQ۳2/j7#o8ڷ^7xV@[t=
-[i+.!O[v3{[)NvE4(`H)Z}.(k_<OPS!LQVEJos-,>\rޯ=WIzsU-C_4y tZ*.Q
-endstream
+3575 0 obj
+<< /D [ 3547 0 R /XYZ 81.145 494.857 null ] >>
endobj
3576 0 obj
-<< /Type /Page /Contents 3577 0 R /Resources 3575 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3547 0 R /XYZ 81.145 483.898 null ] >>
+endobj
+3577 0 obj
+<< /D [ 3547 0 R /XYZ 81.145 472.939 null ] >>
endobj
3578 0 obj
-<< /D [ 3576 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 461.98 null ] >>
endobj
3579 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 451.021 null ] >>
endobj
3580 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 440.062 null ] >>
endobj
3581 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 429.103 null ] >>
endobj
3582 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 418.144 null ] >>
endobj
3583 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 407.186 null ] >>
endobj
3584 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 396.227 null ] >>
endobj
3585 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 385.268 null ] >>
endobj
3586 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 374.309 null ] >>
endobj
3587 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 363.35 null ] >>
endobj
3588 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 352.391 null ] >>
endobj
3589 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 341.432 null ] >>
endobj
3590 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 330.473 null ] >>
endobj
3591 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 560.664 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 319.514 null ] >>
endobj
3592 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 549.705 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 308.555 null ] >>
endobj
3593 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 538.746 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 297.596 null ] >>
endobj
3594 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 527.788 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 286.638 null ] >>
endobj
3595 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 516.829 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 275.679 null ] >>
endobj
3596 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 505.87 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 264.72 null ] >>
endobj
3597 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 494.911 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 253.761 null ] >>
endobj
3598 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 483.952 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 242.802 null ] >>
endobj
3599 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 472.993 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 231.843 null ] >>
endobj
3600 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 462.034 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 220.884 null ] >>
endobj
3601 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 451.075 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 209.925 null ] >>
endobj
3602 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 440.116 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 198.966 null ] >>
endobj
3603 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 429.157 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 188.007 null ] >>
endobj
3604 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 418.198 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 177.049 null ] >>
endobj
3605 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 407.24 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 166.09 null ] >>
endobj
3606 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 396.281 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 155.131 null ] >>
endobj
3607 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 334.647 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 144.172 null ] >>
endobj
3608 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 323.688 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 133.213 null ] >>
endobj
3609 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 312.73 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 122.254 null ] >>
endobj
3610 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 301.771 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 111.295 null ] >>
endobj
3611 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 290.812 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 100.336 null ] >>
endobj
3612 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 279.853 null ] >>
+<< /D [ 3547 0 R /XYZ 81.145 89.377 null ] >>
endobj
-3613 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 268.894 null ] >>
-endobj
-3614 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 257.935 null ] >>
+3546 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3615 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 246.976 null ] >>
+<< /Filter /FlateDecode /Length 2472 >>
+stream
+xڽ[n6)o@n:ݶJ䈖I
+i Ù:s]~ߔ;!sVH8}&N'NƓтq-N_ι\ʏ}xi-m#fF/R_WU}MwKѿ_㿃+O@.χg=' ˝rHJ
+ HUK6'=[aiE
+ ޴ `g,Eh.+P>=Q72Jlk*:E78fޓ:gG$yyZBRrRq6-> 9FϯٹWeY'n~y rS}n%۬\3Ҟ>mϜ}V 2ZQ3}%K %xl7A識O5BfݦE*an#Mr'qhpKw* 禅{iQ!? 3ə3'dAzRfMIpƅ<[ZNb*ﺻtδ{YC{ .Blp\hnؒ6q+F|9YHcowx}eSKt-l~{]q{cꍧȩAd7
+TnE7h?@l:C#H(I=&8E(Q HpF兠͟/ @14G s`)!h֖LٮU)>4mU~'(s_BG8 LJKD}SKcCѥq]hu""BipģP.3ض9<DY/k V%^`ƺMӴHgYi}w,.x.Q$-j:24IuLE=2&)% _'O黝I/jg"8T6kI>g!EUF
+9 'n2yʘ }#JDN3$͵ I9qKCݷ'
+endstream
+endobj
+3614 0 obj
+<< /Type /Page /Contents 3615 0 R /Resources 3613 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3616 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 236.017 null ] >>
+<< /D [ 3614 0 R /XYZ 78.37 808.885 null ] >>
endobj
3617 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 210.141 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 768.829 null ] >>
endobj
3618 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 199.183 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 757.87 null ] >>
endobj
3619 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 188.224 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 746.912 null ] >>
endobj
3620 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 177.265 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 735.953 null ] >>
endobj
3621 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 166.306 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 724.994 null ] >>
endobj
3622 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 155.347 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 714.035 null ] >>
endobj
3623 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 144.388 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 703.076 null ] >>
endobj
3624 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 133.429 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 692.117 null ] >>
endobj
3625 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 122.47 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 681.158 null ] >>
endobj
3626 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 111.511 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 670.199 null ] >>
endobj
3627 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 100.552 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 659.24 null ] >>
endobj
3628 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 571.623 null ] >>
endobj
3629 0 obj
-<< /D [ 3576 0 R /XYZ 81.145 78.635 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 560.664 null ] >>
endobj
-3575 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+3630 0 obj
+<< /D [ 3614 0 R /XYZ 81.145 549.705 null ] >>
endobj
-3633 0 obj
-<< /Filter /FlateDecode /Length 2430 >>
-stream
-x[ˎWXH=A3
-%a&?%`D9,Q*8RPFJE:ٸچmb,I1J-w,y
-Oq,\Y(O<
-QI$"q-F\jqғYsOxf/fGޠly^Sܵ%YMHG@E[ V[A)qjJ=SF[DDkouVQECXO)JÚ'4bD{e]0W[o YSu ~T+u,DOhBaf)\4#R־^៨(oT~io Խn1'uVz}7K7KzzKu:3A_v_~_m_yv+&q8N+XbMJ<y4u,4hn*4gBEНVA^r&HDٍ0̂ʜ?)SgJйFrlc^n$ֹgn|†K3f&,UV&h?Hdw!P-40ChVgQ ~<ĎuӲsZAS2#E4Enw4?-dn@wIAwxr]cPh]|#m,[V*!E m;YoD!~[P^Q6.kٖr[*EFF jjsiG1Tll'=EPC#β̍*Cs]B(L1J*D:~d^UZ_ \B{ 3BVjA
-%#yۇ
-g/GOȊ~>&@܇^Vr@h܇R}t=1#/<i>)}T8
-_Y
--S>,zaP[gJ(4O/2k)ӓ
-WG Q -s]PCSe.rI8*e*ŮQrRTІMg(PM];jJ]m`P´D6j(CӞ2{lS4K¡Z:2Ǡwmh&ži:Hܗʜ&&@9 A
-jU^rqjdQ7^=g W4xE)ݺ) t{axPv\k{we4\>hKvg8wb,WgwR `'Kt t;qq(LgKh*/J5ee) 9!5',Bʁ$d/x2Ӂ2LV O_8R:
-j`gueml)D`YFсҧe0ϸ;
- w[J}!QO/a B~}i98AxS'eč=cJ'1?29
-endstream
+3631 0 obj
+<< /D [ 3614 0 R /XYZ 81.145 538.746 null ] >>
endobj
3632 0 obj
-<< /Type /Page /Contents 3633 0 R /Resources 3631 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3614 0 R /XYZ 81.145 527.788 null ] >>
+endobj
+3633 0 obj
+<< /D [ 3614 0 R /XYZ 81.145 516.829 null ] >>
endobj
3634 0 obj
-<< /D [ 3632 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 505.87 null ] >>
endobj
3635 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 494.911 null ] >>
endobj
3636 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 483.952 null ] >>
endobj
3637 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 472.993 null ] >>
endobj
3638 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 462.034 null ] >>
endobj
3639 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 724.994 null ] >>
-endobj
-293 0 obj
-<< /D [ 3632 0 R /XYZ 79.37 702.177 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 451.075 null ] >>
endobj
3640 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 653.796 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 440.116 null ] >>
endobj
3641 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 642.837 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 429.157 null ] >>
endobj
3642 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 631.878 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 418.198 null ] >>
endobj
3643 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 620.919 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 407.24 null ] >>
endobj
3644 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 544.207 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 345.606 null ] >>
endobj
3645 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 503.36 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 334.647 null ] >>
endobj
3646 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 492.401 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 323.688 null ] >>
endobj
3647 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 481.442 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 312.73 null ] >>
endobj
3648 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 470.483 null ] >>
-endobj
-297 0 obj
-<< /D [ 3632 0 R /XYZ 79.37 433.711 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 301.771 null ] >>
endobj
3649 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 349.464 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 290.812 null ] >>
endobj
3650 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 338.506 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 279.853 null ] >>
endobj
3651 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 327.547 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 268.894 null ] >>
endobj
3652 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 316.588 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 257.935 null ] >>
endobj
3653 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 305.629 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 246.976 null ] >>
endobj
3654 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 294.67 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 221.1 null ] >>
endobj
3655 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 283.711 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 210.141 null ] >>
endobj
3656 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 272.752 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 199.183 null ] >>
endobj
3657 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 261.793 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 188.224 null ] >>
endobj
3658 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 250.834 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 177.265 null ] >>
endobj
3659 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 209.988 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 166.306 null ] >>
endobj
3660 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 199.029 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 155.347 null ] >>
endobj
3661 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 188.07 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 144.388 null ] >>
endobj
3662 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 177.111 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 133.429 null ] >>
endobj
3663 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 166.152 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 122.47 null ] >>
endobj
3664 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 155.193 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 111.511 null ] >>
endobj
3665 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 144.234 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 100.552 null ] >>
endobj
3666 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 133.275 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 89.593 null ] >>
endobj
3667 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 122.316 null ] >>
-endobj
-3668 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 111.357 null ] >>
-endobj
-3669 0 obj
-<< /D [ 3632 0 R /XYZ 81.145 100.398 null ] >>
+<< /D [ 3614 0 R /XYZ 81.145 78.635 null ] >>
endobj
-3631 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F22 367 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+3613 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-3672 0 obj
-<< /Filter /FlateDecode /Length 2406 >>
+3671 0 obj
+<< /Filter /FlateDecode /Length 2384 >>
stream
-x[;#7 WLS$zui*ec뼀|Iq?凫P'ǜ_zOdd`\履_8זsy~i8Ws+o 9dl&!8W@C?W0UhÄjy|[;]ߞ]ڿYwjݲ~=W/q,5ׯ"L˞M( alOۙfqA?\xlz\cH|i,%aj?f,<23_:K 0Li]ȀN:$xIO&E;|)N
-w HQZQŷ/ 1EC"- c%pCL$|D4̉$Af`J4i$;Wž;d rF`gNPɍobb/lT;yrQ2jjeZ!)Dƙ BB< i@28G_G+Ɠ%!h #AׯlQ<Yk[%ϿX`>򭼉
-JL[bh h?WiA(jp<NsL)
-VǐB$EJ?#
-vKV '9qNtMwldDڍ& ,,8W4{OEe( 89 Ӈ8)@kiCG`H-qdجckYa 
-ajM=y;P)Ef=I*Z\0 -AV h'*ݤnOi/57_ ;(W3f 5@q>o,w\׷ihdhO(Ow%-N+* ȧ *
-I᷒Ю͵y|6 l}Dݑi
-Lj=Ӿn={닰$x[6u~A>u.G\[|?ũG{G.oa@ZS'ymЫs
-X|k #R̀L{D>P)/ϡųv ~ӏё;u.Rgju7%Ge*K7‡9955)7kvL3i)N`vk'A=PF/'tj̖~ ~k|]nop4QmQ#(}BΜ"/B
+xZn# )HI#x9)Q#ۣlvŬ'3/?R#9$\>^~ތ?iB8}E$S'fV>sǫB_~_d F~ޜ>9EQʊl;J $Q{}{O1'\)oRn``.]D+\_VA,hh$I c’EWpikY.֏4=(}G]}X7<pc<A<' _z4άd&PHJ8h Gr# n$40p4hfƐJ3yNQ5WEdѝ a:@<[Zm]G{ZȣqE[IQK.H^t-Ti5Tn<#IϠq$6銮YIW-s8k`k`aㄋ-/aLXIH/x]8螵-r;2>kMԄZ rQQ9d&xpP(525o0t4iDej}RR<*D!/٤Xĵw[(>5ho`γw Myb0f{?5lBJ7
+o-,2Z+;o+v ,T03wjp _D%.(M jv>?NMHK!fB,JŪ'(<ViQ冷>;,w2wƗVgNq߿wXg1C&}uSK5K Rʋ'y݇oh4h?fivQZ7D4m%fY]]VvYLgS2clߦfh2U3hŸ$>nb&<)m慳ԭ[hhT4;Iq>CG) hj%%
+M`nzP)|4E}3 ?񨧂$;/a
+j(MB&͙@i&+:r JG@Q,Pzzoq
endstream
endobj
-3671 0 obj
-<< /Type /Page /Contents 3672 0 R /Resources 3670 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+3670 0 obj
+<< /Type /Page /Contents 3671 0 R /Resources 3669 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
+endobj
+3672 0 obj
+<< /D [ 3670 0 R /XYZ 78.37 808.885 null ] >>
endobj
3673 0 obj
-<< /D [ 3671 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 768.829 null ] >>
endobj
3674 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 730.971 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 757.87 null ] >>
endobj
3675 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 720.012 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 746.912 null ] >>
endobj
3676 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 709.053 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 735.953 null ] >>
+endobj
+297 0 obj
+<< /D [ 3670 0 R /XYZ 79.37 713.136 null ] >>
endobj
3677 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 693.113 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 664.755 null ] >>
endobj
3678 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 682.154 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 653.796 null ] >>
endobj
3679 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 671.195 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 642.837 null ] >>
endobj
3680 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 660.237 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 631.878 null ] >>
endobj
3681 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 649.278 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 555.166 null ] >>
endobj
3682 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 638.319 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 514.319 null ] >>
endobj
3683 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 627.36 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 503.36 null ] >>
endobj
3684 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 616.401 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 492.401 null ] >>
endobj
3685 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 561.606 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 481.442 null ] >>
+endobj
+301 0 obj
+<< /D [ 3670 0 R /XYZ 79.37 444.725 null ] >>
endobj
3686 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 550.648 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 360.423 null ] >>
endobj
3687 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 539.689 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 349.464 null ] >>
endobj
3688 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 528.73 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 338.506 null ] >>
endobj
3689 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 517.771 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 327.547 null ] >>
endobj
3690 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 506.812 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 316.588 null ] >>
endobj
3691 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 495.853 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 305.629 null ] >>
endobj
3692 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 484.894 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 294.67 null ] >>
endobj
3693 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 473.935 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 283.711 null ] >>
endobj
3694 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 462.976 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 272.752 null ] >>
endobj
3695 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 452.017 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 261.793 null ] >>
endobj
3696 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 441.058 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 220.946 null ] >>
endobj
3697 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 430.1 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 209.988 null ] >>
endobj
3698 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 419.141 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 199.029 null ] >>
endobj
3699 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 408.182 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 188.07 null ] >>
endobj
3700 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 397.223 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 177.111 null ] >>
endobj
3701 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 356.376 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 166.152 null ] >>
endobj
3702 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 345.417 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 155.193 null ] >>
endobj
3703 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 334.458 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 144.234 null ] >>
endobj
3704 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 305.567 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 133.275 null ] >>
endobj
3705 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 294.608 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 122.316 null ] >>
endobj
3706 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 283.649 null ] >>
+<< /D [ 3670 0 R /XYZ 81.145 111.357 null ] >>
endobj
-3707 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 272.69 null ] >>
-endobj
-3708 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 261.731 null ] >>
+3669 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F22 371 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3709 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 250.772 null ] >>
+<< /Filter /FlateDecode /Length 2414 >>
+stream
+x[;#7 WLS$zui*ec뼀|Iq?凫P'ǜ_zOdd`\履_8זsy~i8Ws+o 9dl&!8W@C?W0UhÄjy|[;]ߞ]ڿYwjݲ~=W/q,5ׯ"L˞M( alOۙfqA?\xlz\cH|i,%aj?f,<23_:K 0Li]ȀN:$xIO&E;|)N
+w HQZQŷ/ 1EC"- c%pCL$|D4̉$Af`J4i$;Wž;d rF`gNPɍobb/lT;yrQ2jjeZ!)Dƙ BB< i@28GBE+Ɠ%!h #AׯlQ<Yk[%ϿX`>򭼉
+2%>[J(5#J{]I/JlqE1lIPq˴0h)F|Er/Y7!ϳt?4`u )$MPԩо=
+a/\|pN3rr>z)1T8h1.J Fc4nR7ӧn4y\tU rzۯ?XЎ}wpik87;U Lvy[442'̒rJ'cP[IhhWYZ<>lٿԾS]C4wz:&:o(0<:E[yڷj^-Pߗ ߚdJ2H Z*+#_dJQOI^H@0㦍Ѡynel%h. -!<nG XH#ŵ6mXi-)/dD1E]ƕTgE)qty4riv]>9XXƴ~ydBnĵfqɏHs_jfԺm@)4)fT1r
+Kr:9Ki#_w\7Sr4Me@ŧSzw/hk q>zR9Z\1ϝZˆdm3`5рTJK>s({z݂_ey#htdNzݶԙZDrsmhGQY
+ǵxzҍaj@FNM".\WtK?>#2q5ebSHыߝ(LIPrk3_vnv:i[g|';MT[yTH0J3gjqV? B
+endstream
+endobj
+3708 0 obj
+<< /Type /Page /Contents 3709 0 R /Resources 3707 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3710 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 239.813 null ] >>
+<< /D [ 3708 0 R /XYZ 78.37 808.885 null ] >>
endobj
3711 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 228.854 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 730.971 null ] >>
endobj
3712 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 217.895 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 720.012 null ] >>
endobj
3713 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 206.936 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 709.053 null ] >>
endobj
3714 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 154.134 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 693.113 null ] >>
endobj
3715 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 143.176 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 682.154 null ] >>
endobj
3716 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 132.217 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 671.195 null ] >>
endobj
3717 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 116.276 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 660.237 null ] >>
endobj
3718 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 105.318 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 649.278 null ] >>
endobj
3719 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 94.359 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 638.319 null ] >>
endobj
3720 0 obj
-<< /D [ 3671 0 R /XYZ 81.145 83.4 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 627.36 null ] >>
endobj
-3670 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F83 414 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F30 341 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3723 0 obj
-<< /Filter /FlateDecode /Length 2452 >>
-stream
-x[9+7߯P LƓNty_]i5@3R,ͯ?O}!1AOdd`\O97Ε p˯҅O?I?Y
-~ Omyfii>ݬ}^>|Yf M$CBk ,2L%z hJ
-Z:،]8)v䏞ݻE
-rO~Jʲ&vI
-$Î mfBfEG(ycl{p0hF0cp͒JV&k3+̻mZ)]NO}8^!Ny5l9"mJwrq{2'*(fܧ@.}pWiBN[Ea2cRnGSVSa}$x[Y/}]Y<~b\̂<2ʾPND{#hﺮ5lTsY]YzfD>K}V:.7gu<$_Nvǔ^9JPQ^)7q}8kctW'䪑5Ylf(
-9)DBFŅ
-KU2n8 (IWpi]?C.JI4 O:<w[omɃ1OM#8l&}.Sb^A$!Uk mJLV43n#Q2=_zoB:iTsY7ΦhM0^*_n/_<T /_/G(a@wԹ} jh'vhҎ =!WSF)> )r@
-2Hӊd`R }Cj~Rpig(-ަ(-af쯥O#.h|MlQ0 "Ȝ(u^qAI\Kf);9i
-Em"i uS@gJ=ikQJqIIy8)GJMxGz!|٥nD?}BpVrHK+!B\'JHxx/Pa_qmP[Bm/Hg;}Ƴ]`F#gδ_KJ?[J
-endstream
+3721 0 obj
+<< /D [ 3708 0 R /XYZ 81.145 616.401 null ] >>
endobj
3722 0 obj
-<< /Type /Page /Contents 3723 0 R /Resources 3721 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3708 0 R /XYZ 81.145 561.606 null ] >>
+endobj
+3723 0 obj
+<< /D [ 3708 0 R /XYZ 81.145 550.648 null ] >>
endobj
3724 0 obj
-<< /D [ 3722 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 539.689 null ] >>
endobj
3725 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 742.926 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 528.73 null ] >>
endobj
3726 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 731.968 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 517.771 null ] >>
endobj
3727 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 721.009 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 506.812 null ] >>
endobj
3728 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 710.05 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 495.853 null ] >>
endobj
3729 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 699.091 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 484.894 null ] >>
endobj
3730 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 688.132 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 473.935 null ] >>
endobj
3731 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 462.976 null ] >>
endobj
3732 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 452.017 null ] >>
endobj
3733 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 441.058 null ] >>
endobj
3734 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 430.1 null ] >>
endobj
3735 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 579.539 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 419.141 null ] >>
endobj
3736 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 568.58 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 408.182 null ] >>
endobj
3737 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 557.621 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 397.223 null ] >>
endobj
3738 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 546.662 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 356.376 null ] >>
endobj
3739 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 535.704 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 345.417 null ] >>
endobj
3740 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 524.745 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 334.458 null ] >>
endobj
3741 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 495.853 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 305.567 null ] >>
endobj
3742 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 455.006 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 294.608 null ] >>
endobj
3743 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 283.649 null ] >>
endobj
3744 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 415.156 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 272.69 null ] >>
endobj
3745 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 404.197 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 261.731 null ] >>
endobj
3746 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 363.35 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 250.772 null ] >>
endobj
3747 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 239.813 null ] >>
endobj
3748 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 341.432 null ] >>
-endobj
-301 0 obj
-<< /D [ 3722 0 R /XYZ 79.37 304.66 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 228.854 null ] >>
endobj
3749 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 277.2 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 217.895 null ] >>
endobj
3750 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 266.242 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 206.936 null ] >>
endobj
3751 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 255.283 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 154.134 null ] >>
endobj
3752 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 244.324 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 143.176 null ] >>
endobj
3753 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 233.365 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 132.217 null ] >>
endobj
3754 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 217.425 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 116.276 null ] >>
endobj
3755 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 206.466 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 105.318 null ] >>
endobj
3756 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 195.507 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 94.359 null ] >>
endobj
3757 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 184.548 null ] >>
-endobj
-3758 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 173.589 null ] >>
+<< /D [ 3708 0 R /XYZ 81.145 83.4 null ] >>
endobj
-3759 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 162.63 null ] >>
+3707 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F83 415 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F30 345 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3760 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 151.671 null ] >>
+<< /Filter /FlateDecode /Length 2449 >>
+stream
+x[;okPK߀ @vM6|?ȤW-dKGpfHOǏL,
+8}s_;iK>iUӿΔ7J%q5P
+On'>q>>)>= Gb0rO^~
+-Q `랚zJãI,#
+u4<Tm6E o"L}v{1 0{V|T5X)S\9n ^-rqC\vgEo͞z-V7*Bk(`_ʏB ;v57A1].1>=WD,Sjf IFJXby.)-#־i-U+7]㣚8Ŀ_|28+#i.|$$TKq9. <7鿱(B ;㫁W3Hrj' 禃sk͜y0tD+I03HqTk u'Nq°QܪdRm'Y )yTRe=l8SciӸ)#16T\PŜ|%ZJ<Vc#\YRzsps :BV 9*ݣLۡK78oLh"OJBAz jܩo
+Y c?D#˖F`"uu\{ij츀 j,tr֞Д
+endstream
+endobj
+3759 0 obj
+<< /Type /Page /Contents 3760 0 R /Resources 3758 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3761 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 140.712 null ] >>
+<< /D [ 3759 0 R /XYZ 78.37 808.885 null ] >>
endobj
3762 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 129.753 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 742.926 null ] >>
endobj
3763 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 118.794 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 731.968 null ] >>
endobj
3764 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 107.836 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 721.009 null ] >>
endobj
3765 0 obj
-<< /D [ 3722 0 R /XYZ 81.145 79.94 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 710.05 null ] >>
endobj
-3721 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F59 346 0 R /F84 425 0 R /F27 340 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3768 0 obj
-<< /Filter /FlateDecode /Length 2348 >>
-stream
-xI8EFpt}`3o
-9EEQ{r.p//.9+.yh]ʹqyP_V^,sZnJ!I˹$
-kZ wݯv򫼻#:gE5:FHh2(pGq
-O);3J̥[SʳG=oŒ<V mA޸o[ z%ǧ{!k/M;AOFyfC\x[x8N¸Ow('LxPrz;$'g;:83BB#p^ ?ؤ~N9IzRHg4jgtY+P5;uM2. OxԄ!S1B{ k$FHԠqr[_Xݷ{''4OZwd-9P xLʭAk|Ӵ*Ej!1EP^Dj%cԀ`r רm9֜ $FQ w^͏ȵɗã- -)yFsP1CC6(+"a9`;$mqW0xB[Y@•`&(]qUlH
-w
-i_BsH̿o1Aɕ,<hF
-*Uw'A*"i&IB&usjv"׳gUZń9-9&HxO4"EI/͐I^6{JUm-MzIhL*vYkNXE:0m骟>}yFGܢ#$>e"g,?& }Oze}?݄c-mKX5k L?(N&9Aj. yfJw1Ae4iv9 籖KR-vN&H8AL[Eѵ82C"m۱>Ѷ;4UJk}mNIj/QL7ޫtoLE9I`4)59U].DGܥ!4> ܑk!ܱV:e Z h}_kC %z4L!RW3ϝmLo229CFHc,44?hch͸NbknM6JI @Zv ;goR)lqNk[LS,wXL[csPrbi꺳Lz$[VN-8bz"eGmW $45" "BP"<;>tL G@MJr\@
-128"N}J39#:@ã:̀#ICiH.\ΉcA=}Fd }֬7<-HOAU'n}S, ;
-/Lx^o٭hBӅ8ECfNX_[⨤ͯ+&*hAϰ4 oJ2gd?G;BBz }.bXf'APjr⁛O<dr,%y
-PRÕ5=O k>I*a{/fTk?!D,If&Ha;Mu>s:SKX-mź|D;5Ȝ
-endstream
+3766 0 obj
+<< /D [ 3759 0 R /XYZ 81.145 699.091 null ] >>
endobj
3767 0 obj
-<< /Type /Page /Contents 3768 0 R /Resources 3766 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3759 0 R /XYZ 81.145 688.132 null ] >>
+endobj
+3768 0 obj
+<< /D [ 3759 0 R /XYZ 81.145 623.375 null ] >>
endobj
3769 0 obj
-<< /D [ 3767 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 612.416 null ] >>
endobj
3770 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 601.457 null ] >>
endobj
3771 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 590.498 null ] >>
endobj
3772 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 579.539 null ] >>
endobj
3773 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 568.58 null ] >>
endobj
3774 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 708.604 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 557.621 null ] >>
endobj
3775 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 697.645 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 546.662 null ] >>
endobj
3776 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 686.686 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 535.704 null ] >>
endobj
3777 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 675.727 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 524.745 null ] >>
endobj
3778 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 664.768 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 495.853 null ] >>
endobj
3779 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 653.809 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 455.006 null ] >>
endobj
3780 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 642.85 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 426.115 null ] >>
endobj
3781 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 631.891 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 415.156 null ] >>
endobj
3782 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 620.932 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 404.197 null ] >>
endobj
3783 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 569.673 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 363.35 null ] >>
endobj
3784 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 558.714 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 352.391 null ] >>
endobj
3785 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 547.755 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 341.432 null ] >>
+endobj
+305 0 obj
+<< /D [ 3759 0 R /XYZ 79.37 304.66 null ] >>
endobj
3786 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 536.796 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 277.2 null ] >>
endobj
3787 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 525.837 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 266.242 null ] >>
endobj
3788 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 514.878 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 255.283 null ] >>
endobj
3789 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 503.92 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 244.324 null ] >>
endobj
3790 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 492.961 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 233.365 null ] >>
endobj
3791 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 482.002 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 217.425 null ] >>
endobj
3792 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 471.043 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 206.466 null ] >>
endobj
3793 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 460.084 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 195.507 null ] >>
endobj
3794 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 449.125 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 184.548 null ] >>
endobj
3795 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 438.166 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 173.589 null ] >>
endobj
3796 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 427.207 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 162.63 null ] >>
endobj
3797 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 416.248 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 151.671 null ] >>
endobj
3798 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 405.289 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 140.712 null ] >>
endobj
3799 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 394.331 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 129.753 null ] >>
endobj
3800 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 383.372 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 118.794 null ] >>
endobj
3801 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 372.413 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 107.836 null ] >>
endobj
3802 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 361.454 null ] >>
-endobj
-3803 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 350.495 null ] >>
+<< /D [ 3759 0 R /XYZ 81.145 79.94 null ] >>
endobj
-3804 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 339.536 null ] >>
+3758 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 338 0 R /F74 341 0 R /F59 350 0 R /F84 428 0 R /F27 344 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3805 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 328.577 null ] >>
+<< /Filter /FlateDecode /Length 2352 >>
+stream
+xI6^MFp
+ TvVnΜWsի.B1L]{>^<H@|E\O\,0-/F Ƶ|WsD+yP_V^,sZnJ!
+D5'"
+
+Ey0ȯtNW˶1k;BBS](rΒ$:AOIWgpL#i<oi˔_ jliD_]ed@0
+A`_8mcxzhӵ[7a7+a!$Sr MW_ܯ=)2b?6ӿO$%OK]vW8w6E>`6v_?Az N6-&뢸6+Q&6k'&zfR{|xf_VE~``OHT7w9yϐ_
+u}%:qfbANXQxaŻO2;nEҞ.y>,:v0p:<l%m\1QqH zXxT*dU޿#Y$RT{fxsq2 > RD|!ˤc)[͓$|-(o.AE}/u}o\kLP |1\K ."8hȈlm>jt,=U1g9-n
+!5l;? \ht?ާЗpRps>v<HoML-}xQ
+endstream
+endobj
+3804 0 obj
+<< /Type /Page /Contents 3805 0 R /Resources 3803 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3806 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 317.618 null ] >>
+<< /D [ 3804 0 R /XYZ 78.37 808.885 null ] >>
endobj
3807 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 306.659 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 768.829 null ] >>
endobj
3808 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 295.7 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 757.87 null ] >>
endobj
3809 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 284.741 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 746.912 null ] >>
endobj
3810 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 273.783 null ] >>
-endobj
-305 0 obj
-<< /D [ 3767 0 R /XYZ 79.37 251.421 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 735.953 null ] >>
endobj
3811 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 229.939 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 708.604 null ] >>
endobj
3812 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 218.98 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 697.645 null ] >>
endobj
3813 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 191.631 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 686.686 null ] >>
endobj
3814 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 180.672 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 675.727 null ] >>
endobj
3815 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 117.458 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 664.768 null ] >>
endobj
3816 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 106.499 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 653.809 null ] >>
endobj
3817 0 obj
-<< /D [ 3767 0 R /XYZ 81.145 95.54 null ] >>
-endobj
-3766 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F22 367 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 3804 0 R /XYZ 81.145 642.85 null ] >>
endobj
-3820 0 obj
-<< /Filter /FlateDecode /Length 2916 >>
-stream
-x[n$+W
-<CAHU=?yP͜D~֮ΤcBIgs4p]蛣@6c܌
-\~1^8I'.>w8r{ 9벾I6OJK.yN^<v: oN5|ŷŭʘ"WZҪ0ύF
-r'$e;Y;$8t.ĩI.8~SsvL ;ҺZZ1 <2yfAM=9ڍQR^!?@⠍'dOfDk5S&_~]bJOR \X l)rt\52iŻl]YmW(5QҦL g#V.ӫꁚJzY TsfSʲCMͪYܧ8bLH3ѻp}c^3c# 9
-x{Huqx'T@0i״|2Eq jǔ ѰHJOc<P
-,C)Zp:.CmB]Ef\j `>#`^#]2 X:Xq#=WH$]p}'>U6;
-¶w P/JD`Dmo,^8'F*c}x*Ct~rVp8}yf3QuDګL(=+[퓨2N~^á罆3Td>e'f|giATNb32c-Y\t-7>s̀
-:CuYaB-7\͜l<I&\6y^JF5RF@knz/hVٔodʨ @`%\<=(m5wGpjoM.X(<]k[3bZyD8I1>Dg'fPJ/Ư]eUZ]s]uQ㼦OVPU:ѬfRi*n|iQ3PS'XJ*{R*'ϵ? tQ,;Zi #|GA9QvDFUZ4Eue q0𖻾M8jPٟfϔML äwZ͸Qܜnmc4^b4t4q/Iץ0vn
-dFR5Qmv@WTuő ;{'@tMپ<h&NZ8?DpEYW
-I{_՛%.X*bFJN$R咩ǯ*g &˄b.Cf77r=D)fr\L=(XQ *y?')G7 5ͬrj˸saQJG[eړDͧ_N'$sZT35q'v5-:PN;z™fN%nUBާ}ԫ9:A7y3eW]+(|`kyzSB$²T_m:'h1P&h!5XLzV^W.6=:y_uH+jSZC-BmVL+B#^hUhorg 5,cbHJL/̾
-&:m4CV|i6"I^m_E(ԌF`rg_3P"Ŋ-/`bp'VWmEGf՝7P(;w7#L ᬏ$%gFm$JrIc{IrRyguێ o*DB}0v!:O$' -KMAU(`۸&Gt}uֻ7@PZkt\./#ܺ4."&ǵvAhqrƖB^.]rGm2=,k˼8P|c-GyD9z8w3yiNAJ; µaد
-l^l(]K03_Lh]4,WP9OmVM{r2-؞ukikkB&ۛ Oy˴Z t_MgQ79N|hn26ooSf ԯl;-Li{CΙyzrƍ>{Vx@7XFiɷ㻧}E7yEG+v,rמwX#W6wXu9-'XY0/堞Ѐ ٦m{dv$>yuO黣S XwO88dZ/*HbYV3 {Lhþ]d>_GjQuS:>~j
-endstream
+3818 0 obj
+<< /D [ 3804 0 R /XYZ 81.145 631.891 null ] >>
endobj
3819 0 obj
-<< /Type /Page /Contents 3820 0 R /Resources 3818 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3804 0 R /XYZ 81.145 620.932 null ] >>
+endobj
+3820 0 obj
+<< /D [ 3804 0 R /XYZ 81.145 569.673 null ] >>
endobj
3821 0 obj
-<< /D [ 3819 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 558.714 null ] >>
endobj
3822 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 547.755 null ] >>
endobj
3823 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 536.796 null ] >>
endobj
3824 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 525.837 null ] >>
endobj
3825 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 514.878 null ] >>
endobj
3826 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 503.92 null ] >>
endobj
3827 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 642.304 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 492.961 null ] >>
endobj
3828 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 631.345 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 482.002 null ] >>
endobj
3829 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 603.45 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 471.043 null ] >>
endobj
3830 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 565.591 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 460.084 null ] >>
endobj
3831 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 554.633 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 449.125 null ] >>
endobj
3832 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 543.674 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 438.166 null ] >>
endobj
3833 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 481.905 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 427.207 null ] >>
endobj
3834 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 470.946 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 416.248 null ] >>
endobj
3835 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 459.987 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 405.289 null ] >>
endobj
3836 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 449.029 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 394.331 null ] >>
endobj
3837 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 438.07 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 383.372 null ] >>
endobj
3838 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 388.256 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 372.413 null ] >>
endobj
3839 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 377.298 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 361.454 null ] >>
endobj
3840 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 366.339 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 350.495 null ] >>
endobj
3841 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 355.38 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 339.536 null ] >>
endobj
3842 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 344.421 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 328.577 null ] >>
endobj
3843 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 333.462 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 317.618 null ] >>
endobj
3844 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 322.503 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 306.659 null ] >>
endobj
3845 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 254.757 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 295.7 null ] >>
endobj
3846 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 243.798 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 284.741 null ] >>
endobj
3847 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 232.839 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 273.783 null ] >>
+endobj
+309 0 obj
+<< /D [ 3804 0 R /XYZ 79.37 251.421 null ] >>
endobj
3848 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 218.892 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 229.939 null ] >>
endobj
3849 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 207.933 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 218.98 null ] >>
endobj
3850 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 196.974 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 191.631 null ] >>
endobj
3851 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 186.015 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 180.672 null ] >>
endobj
3852 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 175.056 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 117.458 null ] >>
endobj
3853 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 164.097 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 106.499 null ] >>
endobj
3854 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 148.157 null ] >>
+<< /D [ 3804 0 R /XYZ 81.145 95.54 null ] >>
endobj
-3855 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 137.198 null ] >>
-endobj
-3856 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 126.239 null ] >>
+3803 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F22 371 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3857 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 115.28 null ] >>
+<< /Filter /FlateDecode /Length 2914 >>
+stream
+x[n$+W
+o^QXډIgL:&\LÞ~~}s4hfqL@…Z{yRRz ܣg{#B;{TMtL`̨g)Y Lظ_,vcdI``Ml6?&~ޢxufoѾXȢ˴o N癤Elj__
+ctspgL?/ȹ 3.?d)-
+*m4[Ç\|[ܪ)ru%
+ܸj*9qBYcCI7Bz 7%<kJJ@pkJΔ,E#wa$ߔٓμ뼬hK)Ӹd/xMkdMIYc9Ea'%/} EQ"G')ɵ[#P&5vſ!kqZIR%MN.m$
+rFJ>b2jI0d ˙ő@5ga6,;~٬z5}#Dߎ4 7>153F:>R籇T׍g]wBӚ|Mk('S4wvL% (E?1@Ts 
+Ưh=ٜ >SOq8{6ƕ3Ż_gOW%=~-#հL%= 5r!fǚ=a,OfWZz%t{:?BL\JnC?z1@^E.imFv N
+,C)Zp:.CmB]Ef\j `>#`^#]2 X&4} ZFJ{RݧEI4"|T3yO|mQwPm@l_{ >0*¹ަYpNTqTu "804pg mi-W;}9
+#QzV'QeFC){ g.|N.ރ$ӂPfFeB[hGZn|au<% Y6noZo98x^A!NM<fpm>h<k&hg^V)]'Ьak,a5J e/I@i7#*SԊlvE9͇Fus؎ 9[̓`|0Opv9ݣMmȨL|ButP{JU:Z?j՚רe]G5kzVYm5UjZ+URG@9hlZ[ X>5'-=3\{P~I9ʾJ? ܛ5[ؐ:r}%EiGTTT]g]֨pbGyO o\N_\tpE%
+{V3މ4K嚹ԇP(=B1URsMOSh0jpYdԖq t瘣Ds<ʴ\OלNW1<Hϥ2tOjZtlw~ 30͜KܠO*zos'tnZyw#/-g. s+JǸ"߬(Xkޔɺ.z Z ZHM8v .wVb ]mzu$6V(L) ZښwAיV[~G21Ѫ(fSjXjHJL/̾
+&7:m4C7 ChS{)3޼:P:M'*".TgDX?-/`bp'VnEGf՝7P(;w7#L ᬏ$%gFm$JrIco$a9<ҳɺm ~|7">y'x V¥c*0m\%#>: |\ Jq:.n`JxZ;w IHaOk9WcYi/GAw0b#6}5^(1dգ<=P<4'ۋ Trao0W[%aN#{k qF8a<i} H5L'ߋZégζ1no6/NZ/)ֈZ.O+{ނlߎۏnV= \cFlO5455-zfħRځu?RC('v~4WL
+W7wڷ)ݳe lvJ
+wWg!Lr/ٓ(5nIDXǀ/›Jܸ2NK{|&Ůxdʼ[za)}ۅ_[:%O Wa^A=M (/I|wG#[nFcO88dZ/*HbYV3]nHO2Q ~FիNϨ?'
+endstream
+endobj
+3856 0 obj
+<< /Type /Page /Contents 3857 0 R /Resources 3855 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3858 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 104.321 null ] >>
+<< /D [ 3856 0 R /XYZ 78.37 808.885 null ] >>
endobj
3859 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 93.362 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 768.829 null ] >>
endobj
3860 0 obj
-<< /D [ 3819 0 R /XYZ 81.145 82.403 null ] >>
-endobj
-3818 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F83 414 0 R /F81 377 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 3856 0 R /XYZ 81.145 757.87 null ] >>
endobj
-3863 0 obj
-<< /Filter /FlateDecode /Length 2562 >>
-stream
-x[ˎ8WFWP( $ vά0XEv9}LIINۯr'd
- d`\O~\_8ko<y_w'˜Ҷ8BrfKWJ+Q%xt+ _ιח6yYp\sx~Wc]ts{ӐTL
-a+2ExGsA{"E|~>.`P]%.uDyg,;1Cy"L+5(+O/E{}TsQQ]_J
-C9ǴǜJ40MF}Qiԥ\tw680GP>vvuߛ{V`.9h¹Rpٸw%?=mS
-']y40Nw2zXVxVQ|l~&plzǧ~e-I9Tj1 mFd p\MΦOf o&~Uúu-̒(T?(xg'&(,
-O=R;&eoE%(JmzUy{H'yRY*bGK9=6M#afw'4?h "Ǔ=Ga>P=?ZŖy9Q|,l ֏$tW((E@#>-mER2'$RTLxD0
-ɞlG*ԣY||휢:\zHEoYc@dHoo^.-JzqI9kꑞgҾԬ0 =/<D8'Q<8ߙvmRs}T<iʾ׶3{r#<'mPe95z?WW #ce5Zj1djE8z8HF",I|ML4@&)ڋnúiT!6stY*k\A[mLZʄ%)IHs#=?p`5%L!WGA+i ú?c"fC9VǪoBN3Ů`m*D/D
-41sH/[,H,Ҽ,k#X(Z<(`K#alZB,X(q9Wf ˅E@c/v O3]F3əh-y@ڮ;MjN~8sn׹\k@BjmKm}PȔG8< H}EZz]:71xfKLFmz9"y$-`fyFfs18>I.X8.z9.V[5&z*W cz$r[*nWVryKVKߦyBSp?RtM
-д=I 1%dl= M#X,JR<: =^W,Ӳlosuv=]Csm`Y{ 눠%s@:8,G1R_6j-NՑ8sWs=җFt~LG=gcd` dԆds? ==#9wO8hrC֥:ג{&P?lӳ"wLwGH{<J @zZ %SvmlP;SĔ,!69;z9Î>w0jG/.;=sBCX`CkK4Nn;3\\̅~hͥT\ I.4gR d= LG9knicQTl9 p&lxo(3>Cbd9-HFЉI]~bщBK k3R3k=1c%#9-SMͶ SHb ״Jxg\0rܬ,T\drTp^&ݣJw-v9߲2xgrL">խQ_B+V͕MJdcL;Z+cr*2YWGDr'Va
-9㫩گeAxrU&עf\tW>Ƀi:5;H
-cacQZg:E߾#
-{
-endstream
+3861 0 obj
+<< /D [ 3856 0 R /XYZ 81.145 746.912 null ] >>
endobj
3862 0 obj
-<< /Type /Page /Contents 3863 0 R /Resources 3861 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3856 0 R /XYZ 81.145 667.21 null ] >>
+endobj
+3863 0 obj
+<< /D [ 3856 0 R /XYZ 81.145 656.252 null ] >>
endobj
3864 0 obj
-<< /D [ 3862 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 642.304 null ] >>
endobj
3865 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 631.345 null ] >>
endobj
3866 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 752.889 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 603.45 null ] >>
endobj
3867 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 741.93 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 565.591 null ] >>
endobj
3868 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 730.971 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 554.633 null ] >>
endobj
3869 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 715.031 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 543.674 null ] >>
endobj
3870 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 704.072 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 481.905 null ] >>
endobj
3871 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 693.113 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 470.946 null ] >>
endobj
3872 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 682.154 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 459.987 null ] >>
endobj
3873 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 671.195 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 449.029 null ] >>
endobj
3874 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 660.237 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 438.07 null ] >>
endobj
3875 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 596.476 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 388.256 null ] >>
endobj
3876 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 585.517 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 377.298 null ] >>
endobj
3877 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 574.558 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 366.339 null ] >>
endobj
3878 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 563.599 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 355.38 null ] >>
endobj
3879 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 552.64 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 344.421 null ] >>
endobj
3880 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 541.681 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 333.462 null ] >>
endobj
3881 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 530.722 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 322.503 null ] >>
endobj
3882 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 519.763 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 254.757 null ] >>
endobj
3883 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 508.804 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 243.798 null ] >>
endobj
3884 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 497.846 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 232.839 null ] >>
endobj
3885 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 486.887 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 218.892 null ] >>
endobj
3886 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 475.928 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 207.933 null ] >>
endobj
3887 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 464.969 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 196.974 null ] >>
endobj
3888 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 454.01 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 186.015 null ] >>
endobj
3889 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 443.051 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 175.056 null ] >>
endobj
3890 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 432.092 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 164.097 null ] >>
endobj
3891 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 421.133 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 148.157 null ] >>
endobj
3892 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 410.174 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 137.198 null ] >>
endobj
3893 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 384.271 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 126.239 null ] >>
endobj
3894 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 373.313 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 115.28 null ] >>
endobj
3895 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 362.354 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 104.321 null ] >>
endobj
3896 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 351.395 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 93.362 null ] >>
endobj
3897 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 340.436 null ] >>
-endobj
-3898 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 329.477 null ] >>
+<< /D [ 3856 0 R /XYZ 81.145 82.403 null ] >>
endobj
-3899 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 318.518 null ] >>
+3855 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F81 381 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3900 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 307.559 null ] >>
+<< /Filter /FlateDecode /Length 2558 >>
+stream
+x[ˎ8WFWP( $ vάe=L;R*uqѸ]IlDRg Bodi<-ӿ99?_
+@m?.*ͷT~ޑG MRa)ϒ᭚([2Yf]}.OM`ދt&C*j5 H\HJGMr2`ZVdpsA{"E|& ﯮPï>K\:B~3"Qrl|]Z̾Gqj4R0m95=6˸/)o|uTο4
+_v᰼cP&|.luM=+0x4S)zTl܇Ȃ)O<y,^cvI>v_ yzSLTi!#rgIpBMΖOfLo&ұA*cDf-}qu| M<3ɓEux""c"mY-Wx7-ǩʶǁt'i尔R)|,%j]}Ou9Zf>JFlhD6X;Ѕ:|oi{Kɜ$ロ%qGa
+\٩HItt%aXg_lh M>u_ M-ǍH&Hz8R>7ӳz Kk^5kW6,\m<h`Ko#ǡWka-!6;tf /˅Y@ѽq.w3F3CMyr ~̜q|/qVkn׹ZCBjmOp&uPȔG89yڎ(]%tn@Q;c̖2"8P1/BTm{AMr"7 uKEbUcB?Wn) Fs1-V4ީܲ%eg%oӼ!O)):G Lg4sRs8A=[wHV1DέuHsnAU\
+CL}~ᚖ&-<g\VzU*A.29d*|+\UQ
+o8GezL"լQ_BM)gs?a^Ufų$n
+endstream
+endobj
+3899 0 obj
+<< /Type /Page /Contents 3900 0 R /Resources 3898 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3901 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 293.611 null ] >>
+<< /D [ 3899 0 R /XYZ 78.37 808.885 null ] >>
endobj
3902 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 282.653 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 768.829 null ] >>
endobj
3903 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 271.694 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 752.889 null ] >>
endobj
3904 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 260.735 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 741.93 null ] >>
endobj
3905 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 249.776 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 730.971 null ] >>
endobj
3906 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 238.817 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 715.031 null ] >>
endobj
3907 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 227.858 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 704.072 null ] >>
endobj
3908 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 216.899 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 693.113 null ] >>
endobj
3909 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 205.94 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 682.154 null ] >>
endobj
3910 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 194.981 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 671.195 null ] >>
endobj
3911 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 179.041 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 660.237 null ] >>
endobj
3912 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 168.082 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 596.476 null ] >>
endobj
3913 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 157.123 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 585.517 null ] >>
endobj
3914 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 105.318 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 574.558 null ] >>
endobj
3915 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 94.359 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 563.599 null ] >>
endobj
3916 0 obj
-<< /D [ 3862 0 R /XYZ 81.145 83.4 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 552.64 null ] >>
endobj
-3861 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F83 414 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3919 0 obj
-<< /Filter /FlateDecode /Length 2993 >>
-stream
-x\n$ S F" 0
-OT~%g9hz LpQsmפ)Uiѳ[Խ ;٦WњIEp)>an}Nnէqp NЉ>>3JXCzR%k˯{zﬡ]}>3U.[qvB3
-;mQ(BbQz"f<DvGFJOw[8d)='sY4t\s(\}VF!r&Y фR˵q^n9E{J0j8r4p' 5+"~R{? ?QZ*OF#D|QG`g::˳zJ{R@3v)_9d[Zcx=Cm .[:=<
-jlZJK4$
-~&>^B
->F|멓ĩ̚zJ}Z]!̚fqpPd$#=n K0!'OlRtD
-<E MܒY|m#W%+?,́YwS""oAFz4bz g&+e'7aO03ݝkzJ]ȕLJ;,)|<*.|`)餞i&ep[8gVb| a>6Ǎv .Lۅ3(lHx@ʕ^{"M"/Y2L߯:g;1*bw YSD=xY^Y;,˜^Ǿ9q?SdAeNqdjPт󰖮)nuEqٸX,7|B ~Y Ns1<~+DU_$ëoĦ$@I`{gLwra80JTШmqҽL4)+z *oSbKB#)3Fޒ8F4'8ǹwX Lo}fi
-2Ԭpaz[ JyRU<i|`432^pObf9R9(^,Jstnx(_xV́~`u鐛
-u|fz \^i\Qj-jq3_知)@iaܖH<b Q v+ªqAxmkqD<jF
-jA %;S
-ȮL *,NX;O 464m8m8U,dG] i4 ЁBI[\
-fBmUVwOힿ͡+Oi#t+,o/{|`#kO(uyJ]$ (Un
-)%.7Bjl=
-endstream
+3917 0 obj
+<< /D [ 3899 0 R /XYZ 81.145 541.681 null ] >>
endobj
3918 0 obj
-<< /Type /Page /Contents 3919 0 R /Resources 3917 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3899 0 R /XYZ 81.145 530.722 null ] >>
+endobj
+3919 0 obj
+<< /D [ 3899 0 R /XYZ 81.145 519.763 null ] >>
endobj
3920 0 obj
-<< /D [ 3918 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 508.804 null ] >>
endobj
3921 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 497.846 null ] >>
endobj
3922 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 486.887 null ] >>
endobj
3923 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 475.928 null ] >>
endobj
3924 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 464.969 null ] >>
endobj
3925 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 454.01 null ] >>
endobj
3926 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 699.091 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 443.051 null ] >>
endobj
3927 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 688.132 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 432.092 null ] >>
endobj
3928 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 677.173 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 421.133 null ] >>
endobj
3929 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 666.214 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 410.174 null ] >>
endobj
3930 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 655.255 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 384.271 null ] >>
endobj
3931 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 644.296 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 373.313 null ] >>
endobj
3932 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 633.337 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 362.354 null ] >>
endobj
3933 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 622.379 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 351.395 null ] >>
endobj
3934 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 611.42 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 340.436 null ] >>
endobj
3935 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 600.461 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 329.477 null ] >>
endobj
3936 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 574.558 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 318.518 null ] >>
endobj
3937 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 563.599 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 307.559 null ] >>
endobj
3938 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 552.64 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 293.611 null ] >>
endobj
3939 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 541.681 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 282.653 null ] >>
endobj
3940 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 530.722 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 271.694 null ] >>
endobj
3941 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 519.763 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 260.735 null ] >>
endobj
3942 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 508.804 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 249.776 null ] >>
endobj
3943 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 494.857 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 238.817 null ] >>
endobj
3944 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 483.898 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 227.858 null ] >>
endobj
3945 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 472.939 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 216.899 null ] >>
endobj
3946 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 461.98 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 205.94 null ] >>
endobj
3947 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 451.021 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 194.981 null ] >>
endobj
3948 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 440.062 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 179.041 null ] >>
endobj
3949 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 429.103 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 168.082 null ] >>
endobj
3950 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 413.163 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 157.123 null ] >>
endobj
3951 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 402.204 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 105.318 null ] >>
endobj
3952 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 391.245 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 94.359 null ] >>
endobj
3953 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 380.286 null ] >>
+<< /D [ 3899 0 R /XYZ 81.145 83.4 null ] >>
endobj
-3954 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 369.327 null ] >>
-endobj
-3955 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 317.522 null ] >>
+3898 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F81 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
3956 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 306.563 null ] >>
+<< /Filter /FlateDecode /Length 2989 >>
+stream
+x\n$ S F" g߂\SkߊU]gǽXT3u]d
+~ b`\.z\_9_Ǹ<_w+/9trL
+J{4\q3Rg:V:.@ vߊT֮y]@{y5qCh'=00SJk~`ϯtU VH [a+CM'>-iYk$'C[s ͌23%EҰ/,R,RJsý!W";Rt PRɯ5FJQdM!
+lG4I&z=@1Yމ:'B9gK=o#L+5FJ{T{v\{Xio~zWQr@Ie'J+l٠d@# 9fd49A
+X.9p~Q\?"-_?W ="gf$7Din4wm\UBڣȜBGA9iw*%"(KT7MRtMi ϽEOAOe59Q
+<kE
+GCy(2EwGgJOw[H<RzN3r0$%Y\)F"_Q朚e ş $(u^\+*.GMqu͏aq++ƭ4pg L5P*qhR??2)U34$Gl .7:XH5{B^*cf.ݢu1Pmw+_)-+FB\1ux`ܴՖhmgMrM
+}Bܶ3-jU
+JN)DieHT<b vyێׄAiצtmtkD<jKF
+HjAȳ * vOxmUmZ0a"72
+ W!5
++= . Q*S8kKϽp tOZGjx)iO
+>C6n"vEBz(S5OoJ 'h&9SQdzuO dw7)jQD'pf
+# a|uhK읤2?a]㙾~l Q_A;>|`x4 45%q IW12_^C7YgIp.|S6-p uvFN9zQ~hF?D?^k"T؍(VrG݆x)&U ZhzMȼCO\i=L`چ󖈤b%0#ݬ<4:Q(#1 q˞H?Ք";n(;3joKhʄyMb{n%C]w{|yf ew>/DiA0IU&(DLo+Sxkoޙ-5)!fegRZB2)LoX&)dy>hV\~B"gXM`R бpxny!*d|UKVU]_=eÇC
+`*ˍ 0E2@RsQB)< ՠ$w
+Mx4(ޕx{8'\2iLVMi}w
+endstream
+endobj
+3955 0 obj
+<< /Type /Page /Contents 3956 0 R /Resources 3954 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
3957 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 295.604 null ] >>
+<< /D [ 3955 0 R /XYZ 78.37 808.885 null ] >>
endobj
3958 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 284.645 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 768.829 null ] >>
endobj
3959 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 273.686 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 757.87 null ] >>
endobj
3960 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 262.727 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 746.912 null ] >>
endobj
3961 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 251.768 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 735.953 null ] >>
endobj
3962 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 240.809 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 724.994 null ] >>
endobj
3963 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 112.291 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 699.091 null ] >>
endobj
3964 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 101.332 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 688.132 null ] >>
endobj
3965 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 90.374 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 677.173 null ] >>
endobj
3966 0 obj
-<< /D [ 3918 0 R /XYZ 81.145 79.415 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 666.214 null ] >>
endobj
-3917 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F81 377 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-3969 0 obj
-<< /Filter /FlateDecode /Length 2428 >>
-stream
-x[n#+!/ 0` ܵwA* g&7[bY͙]?~>F \>&.LE+_74{0abU
-M#@08(QO( 3<G z!/֭j E2-e^K8[;@)~Qs?oKQHE]Z >4{r J
-xFюլCEs^֤R2by*:
-6]k1qwu}ݚyOk"aG=ᇼW+IT9BxRJ|@EQ_p95ɵH}]<zIϋl)g'L#-*B0#vd-җ
-CSh¦STM-o|Jc왤 L qIx-:o1gxImiVu6L6!̲ɏ>ՊwK% rE+Hz̓wHK)1G9@۽L+r(ý!JR"
-3Փy801mDtx*x#MSٔfp햲[Jt˿ C<T̀7V_E솵L.'HH\XRn޲*[!:U{۩U[ꬡZ]kYUikN]mw`^@8ximyJ&weیP$3\(yC=XFbޥKGܠ&7ǽ-ܴٸPwጘ>"\IB[tꑍ'/759ۂɢwـ9%xv-KGJ5yQ"")=='"-NDv$KLVwH_.[yKvFba!]^s -PkYJ*ҧ!QkC}$RFĤA{ͧ蕷Y-H8M)6]sdg [}MS"CZ*Pw͹x&DӨ1'iG5!S-l#\HOT/Ow Iwds*^-rim< 쀴cGԹĖ*רkxq}ՎZΨ? &;{,-7pm=s'q,AO_ǻ
-^m1L*5٬2KE:;C+FxkU+V͘9P7';dBHgDcԶGo*ҽ@ RXةS“kp$=]骆#jZ6+e없KPZf,&4]Z[9W?Hٱ/WIeGYm5G"GY #duyni9;dSBOP9m zJ-o/qa("Uqe!Ik6@ϩ&.pS#ј='&&f-{uH_ fnWwhv6s" aDs`t^{J{:2pj!zIlN%"}:?XÜhToNњԓۼ׭8:G3+@ݏkÉK䱕8]z^}0}-dcUIM$b4q=7q}+`ėw YtC8.OތxZ`k<}Ϣ>R&f@sO6!Ϗ$Ro_J10zj8a!%CC? D >j~; 3/9cl|
-endstream
+3967 0 obj
+<< /D [ 3955 0 R /XYZ 81.145 655.255 null ] >>
endobj
3968 0 obj
-<< /Type /Page /Contents 3969 0 R /Resources 3967 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 3955 0 R /XYZ 81.145 644.296 null ] >>
+endobj
+3969 0 obj
+<< /D [ 3955 0 R /XYZ 81.145 633.337 null ] >>
endobj
3970 0 obj
-<< /D [ 3968 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 622.379 null ] >>
endobj
3971 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 611.42 null ] >>
endobj
3972 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 600.461 null ] >>
endobj
3973 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 717.686 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 574.558 null ] >>
endobj
3974 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 706.727 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 563.599 null ] >>
endobj
3975 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 695.768 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 552.64 null ] >>
endobj
3976 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 684.81 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 541.681 null ] >>
endobj
3977 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 673.851 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 530.722 null ] >>
endobj
3978 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 662.892 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 519.763 null ] >>
endobj
3979 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 651.933 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 508.804 null ] >>
endobj
3980 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 640.974 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 494.857 null ] >>
endobj
3981 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 630.015 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 483.898 null ] >>
endobj
3982 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 619.056 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 472.939 null ] >>
endobj
3983 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 608.097 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 461.98 null ] >>
endobj
3984 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 597.138 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 451.021 null ] >>
endobj
3985 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 586.179 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 440.062 null ] >>
endobj
3986 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 575.22 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 429.103 null ] >>
endobj
3987 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 534.595 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 413.163 null ] >>
endobj
3988 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 523.636 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 402.204 null ] >>
endobj
3989 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 512.677 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 391.245 null ] >>
endobj
3990 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 501.718 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 380.286 null ] >>
endobj
3991 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 490.759 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 369.327 null ] >>
endobj
3992 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 479.8 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 317.522 null ] >>
endobj
3993 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 468.841 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 306.563 null ] >>
endobj
3994 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 440.17 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 295.604 null ] >>
endobj
3995 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 429.211 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 284.645 null ] >>
endobj
3996 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 418.253 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 273.686 null ] >>
endobj
3997 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 407.294 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 262.727 null ] >>
endobj
3998 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 396.335 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 251.768 null ] >>
endobj
3999 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 367.664 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 240.809 null ] >>
endobj
4000 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 356.705 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 112.291 null ] >>
endobj
4001 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 345.746 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 101.332 null ] >>
endobj
4002 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 334.787 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 90.374 null ] >>
endobj
4003 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 323.828 null ] >>
-endobj
-4004 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 312.869 null ] >>
+<< /D [ 3955 0 R /XYZ 81.145 79.415 null ] >>
endobj
-4005 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 301.91 null ] >>
+3954 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R /F81 381 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
4006 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 290.952 null ] >>
+<< /Filter /FlateDecode /Length 2436 >>
+stream
+x[ˮ# WZ- .`fݻ dFҳʥ{ݙ \ۥbG$uH8]nxJ{!f@7q?q1]+qƹrm?~{aNԏaV)4( ss(RF3aӈkNO!/ 2 ȴ^ɹ`g;"oWoyۯ|uAJQ뿡ޗD&?Ɡ\FId\i>TK
+p+),ۼYBR86r?wx֌!#a VRQ7ԛ'o%J(8
+2=nXI) pRs8 咣%#~&[
+uct5C{5DT$s[yWzף 2vmZIyqƿ/#
+ʫD^!<#~ ."Ȁ)rf VRs>yS0 =ݓeJ&%-uUk!W쳥EVҧg
+CS5ZIoe OQYwŘooh/>9Π˙IPM;K@x3u*#gxSImU|3\'w3:G<+ʺ[8o‹+H L6X+i!SF(7Tc|_C9ƆUXě( "HuМ^&o&*) ڭ?)crmopXGn+yZA51 Tjx]}e7eHBq7ƒ"vscڪl 2s-r36ꬡ登(ֳhkXWfIm[щԉ1N]-;tE
+fR#>݂I߲9^-Zuה<p< i'sĖ ʹ;[.gZIP2h-sδ?J{,-!7pk=I<e{k"C6&]CtwVqELc֪V1;DBݜ".̋sB ꟼpJ<Mm+{MEUH{TЩi5S87w#I/jdWa5'ł-J%(-3v|I~'iɔ.[%w?HرY+6:I=Mv\NfZ"l%5(Y]a[Zvv])!l'PmR{ڪ__4N5[I:yȪ6ZϹ%,p3βt4鞇 ϥqN52ȄFmw]= @gmtph  URt92T8z!z"v]C`ahTGߦ&{?So^ܖ?$ F;x6$x[En yoyilټ h_ h2kBV"i3>{kMu\
++/;y/:C8.OތxY`-k|ϢT&f@Lvt~^gH£~[("udN.sNpAPNgvs0|gY -
+ڏ8n>AqH'm@'<(~ۃ/VS>3_=#1-hx[v>~P<jkZuw<kfޮVw~F`r UTGljOI,IgHy򹄸Tv{xN씟L)ϻ.SUPW̟abQwmۀU4f-:b䭠w֢,3VlV}̫l՚[sfƭ0 kV[g"`֙(Յx;Fil
+endstream
+endobj
+4005 0 obj
+<< /Type /Page /Contents 4006 0 R /Resources 4004 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
4007 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 279.993 null ] >>
+<< /D [ 4005 0 R /XYZ 78.37 808.885 null ] >>
endobj
4008 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 269.034 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 768.829 null ] >>
endobj
4009 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 258.075 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 757.87 null ] >>
endobj
4010 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 247.116 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 717.686 null ] >>
endobj
4011 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 236.157 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 706.727 null ] >>
endobj
4012 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 225.198 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 695.768 null ] >>
endobj
4013 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 185.014 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 684.81 null ] >>
endobj
4014 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 174.055 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 673.851 null ] >>
endobj
4015 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 163.096 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 662.892 null ] >>
endobj
4016 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 152.137 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 651.933 null ] >>
endobj
4017 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 141.178 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 640.974 null ] >>
endobj
4018 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 130.219 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 630.015 null ] >>
endobj
4019 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 89.593 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 619.056 null ] >>
endobj
4020 0 obj
-<< /D [ 3968 0 R /XYZ 81.145 78.635 null ] >>
-endobj
-3967 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F81 377 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 4005 0 R /XYZ 81.145 608.097 null ] >>
endobj
-4023 0 obj
-<< /Filter /FlateDecode /Length 1999 >>
-stream
-x[n#7 )e$`=VڞJ3#kvlD*
-xN}99w蝊#X9AY{{7^)2>ۋJ`i!XkGEZ)<(o0Uʯ+$(קe;BMy^pB~-6^^ً<_EĻv+W|VJ~`ylEɪ΂bldں7ޯ ɈZXHe5[G'^-&*б;r3_OQROL~tF:NZf5gt(MtZt_;@dI:mabu<#SNaA򔃺tpFj^ˏv򸜻w ͜[,gQN\#k:z6 %91 Ih!kb:p-HڗT*%*ђ^:)&IaRz8 ֨Q8Fv~(@u%t%(YT3aLI.DHn=4k - 4zT*F * (F*Ƀa
-dഗK!kYn' 2 _dQҢH*h
-P&-@gY%WN>{?Ȯ4xoD!@Ÿ+9(Q@$p#qte2(,JGc+FOKU JB,b^0YH_*
-bIҕ5HDށfL?H$5x09 %{! OBrJe__=EC{E!ƜiP(hCeUCZ$9 'L ` Q>FJ"I]-{0(/j0ŀ
--g?AkvC3Y ;ηHqfƙ%_`&ŌIr4HBR<|P*MI٨H>:E)ɮ٭119atfL8ͣ}:) -m\Ml?n2 [ r2p'EZ%'%;i%k'U X4l}c: j1&ٝ"iN(6H8eCľAȸTy'6vA{׌>G/ %rRogA[pZF׳]j
-aZjn"cڡ59c߼CGqV|YNYgicc<-U|*kvͷ4~7pB:B+f:5_ut>M|\6V}\Yi1.\-"q5ݖW%-.;y\)vCtcuD]K|b<gCjv"x=c`o-t:1ȧسQKdK iQ˹F;̰&oa+G
-z\@Qyf\'>,w!Ǩ=ctvaPU?cpb{jPgYY֣Fo3{2c8et=Xh
-aC"JѽU45D[gS,YrjC Q:
-endstream
+4021 0 obj
+<< /D [ 4005 0 R /XYZ 81.145 597.138 null ] >>
endobj
4022 0 obj
-<< /Type /Page /Contents 4023 0 R /Resources 4021 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3630 0 R >>
+<< /D [ 4005 0 R /XYZ 81.145 586.179 null ] >>
+endobj
+4023 0 obj
+<< /D [ 4005 0 R /XYZ 81.145 575.22 null ] >>
endobj
4024 0 obj
-<< /D [ 4022 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 534.595 null ] >>
endobj
4025 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 523.636 null ] >>
endobj
4026 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 512.677 null ] >>
endobj
4027 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 501.718 null ] >>
endobj
4028 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 490.759 null ] >>
endobj
4029 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 479.8 null ] >>
endobj
4030 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 468.841 null ] >>
endobj
4031 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 440.17 null ] >>
endobj
4032 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 429.211 null ] >>
endobj
4033 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 418.253 null ] >>
endobj
4034 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 407.294 null ] >>
endobj
4035 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 396.335 null ] >>
endobj
4036 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 367.664 null ] >>
endobj
4037 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 356.705 null ] >>
endobj
4038 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 345.746 null ] >>
endobj
4039 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 334.787 null ] >>
endobj
4040 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 323.828 null ] >>
endobj
4041 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 312.869 null ] >>
endobj
4042 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 301.91 null ] >>
endobj
4043 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 290.952 null ] >>
endobj
4044 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 279.993 null ] >>
endobj
4045 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 269.034 null ] >>
endobj
4046 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 258.075 null ] >>
endobj
4047 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 247.116 null ] >>
endobj
4048 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 516.775 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 236.157 null ] >>
endobj
4049 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 505.816 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 225.198 null ] >>
endobj
4050 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 494.857 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 185.014 null ] >>
endobj
4051 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 483.898 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 174.055 null ] >>
endobj
4052 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 472.939 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 163.096 null ] >>
endobj
4053 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 461.98 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 152.137 null ] >>
endobj
4054 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 451.021 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 141.178 null ] >>
endobj
4055 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 440.062 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 130.219 null ] >>
endobj
4056 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 429.103 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 89.593 null ] >>
endobj
4057 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 418.144 null ] >>
-endobj
-4058 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 407.186 null ] >>
+<< /D [ 4005 0 R /XYZ 81.145 78.635 null ] >>
endobj
-4059 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 396.227 null ] >>
+4004 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R /F81 381 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
4060 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 385.268 null ] >>
+<< /Filter /FlateDecode /Length 1995 >>
+stream
+x[Ko#7 WH,k@Ϲkg$юd;lE6|×Oک/׳ ;5Sy;g5(w~+RDڼۋJ`y!XK~ɀFbJA)=~Š6*>㐞%W+$(SĢ΄pgx?[Q/8!_6$+{܊UL+^M۸?ZC<H"dzgzynhiגh&IKh+8JF'Q[LV E-6cwg,sc?E6bX>gC0zt4f TIb>MtZ^|hmsq  Z>MKHI~6L jaPetK ּUImFIy\;m3gk7tOqߘl0@IҎXBJr$PL0.g 1Ke^[_SѦL/T꭫c6o&kѽR\o2# 4?J2Iz'(YI1J$)Hω]= ih`*餬hAG
+)֣Rq&Q**(FPؔA01,M'icQ:oc;>36e+f= RAJW!]'q
+}W9Tν.[PX7r9I^g |Zy~D+xN{2[D { cp%Yh#(*-K3!KGسԬN>{?Ȯ k
+Vz}(,=j8V+CC<BĞ)Q>HRW˞ ʋ(o@T@:H/ <Nf
+>ڃApFƎ33,L!|,fNcB`LRiJ3Fe4E)ɮncV<jpCdL8ͣ}9) -m\M7z|Ò;)&I?=&LZy?% Iu`LA5HO٫Q;E.O+9Nfh[!ᰗV}qN@ݻf<G+%rmҾ-8jJ׳6´ֻ]i `ȾyCGq7˳`Kdcl*b> OU[h?+T8g!f!;4šut>_M|k}g
+q0IBn^?Fkq/ tRL;0b*v,#Z/YbI>i҄+t}R
+ h3g׺ 4WӜ17˧
+endstream
+endobj
+4059 0 obj
+<< /Type /Page /Contents 4060 0 R /Resources 4058 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3668 0 R >>
endobj
4061 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 374.309 null ] >>
+<< /D [ 4059 0 R /XYZ 78.37 808.885 null ] >>
endobj
4062 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 363.35 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 768.829 null ] >>
endobj
4063 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 757.87 null ] >>
endobj
4064 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 341.432 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 746.912 null ] >>
endobj
4065 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 330.473 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 735.953 null ] >>
endobj
4066 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 319.514 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 724.994 null ] >>
endobj
4067 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 308.555 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 714.035 null ] >>
endobj
4068 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 297.596 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 703.076 null ] >>
endobj
4069 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 286.638 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 692.117 null ] >>
endobj
4070 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 257.746 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 681.158 null ] >>
endobj
4071 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 246.787 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 670.199 null ] >>
endobj
4072 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 235.828 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 659.24 null ] >>
endobj
4073 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 224.869 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 648.281 null ] >>
endobj
4074 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 213.91 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 637.322 null ] >>
endobj
4075 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 202.951 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 626.364 null ] >>
endobj
4076 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 191.992 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 615.405 null ] >>
endobj
4077 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 181.034 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 604.446 null ] >>
endobj
4078 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 170.075 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 593.487 null ] >>
endobj
4079 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 159.116 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 582.528 null ] >>
endobj
4080 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 148.157 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 571.569 null ] >>
endobj
4081 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 137.198 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 560.61 null ] >>
endobj
4082 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 126.239 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 549.651 null ] >>
endobj
4083 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 115.28 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 538.692 null ] >>
endobj
4084 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 104.321 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 527.733 null ] >>
endobj
4085 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 93.362 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 516.775 null ] >>
endobj
4086 0 obj
-<< /D [ 4022 0 R /XYZ 81.145 82.403 null ] >>
-endobj
-4021 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 4059 0 R /XYZ 81.145 505.816 null ] >>
endobj
-4089 0 obj
-<< /Filter /FlateDecode /Length 2095 >>
-stream
-xZˎWH@v`ֽvv[EEwNtꐔCIRN2Մ+?/$u >9_Rw) o"XyEZ &~3~Y)1~%o3|֯ca82}oOm>8W }|gP(!|7#uAĴaΓ/w{$i4Rm35.0r61ڵBA;`r"%+rP,F3NQoTsnW빴 i$vq4i6x6sV!{TG;Ko|e9NGUi Ft-,[Y@ًg6"!P]#4 1O֡@\ T-2Qcb }%/F 퀴W0#=b[[)$H)g, y8
-7\c!c quԁ¾Zie&ud'52'Ww a2H}\|AY {~\THw#e̕ }TT3o,h_F% VXX`% Ro\'H*8-9EW@Og:cQxHB"=ȀT?q =H+=>Yڣ4SY0#ݮhJY;H0id˹̨#sQ%Q}1#EtZ>9CBH!"}kZ
-?1?.Gǭ΅{t3US*otA;iOD$g\a=1ICoh3BKmSfՐ9ئ52ֈû5RxVqDՅ}TmĴ)ց
-T3~6tx[pf;\x߮dyFqujr:1}3R}R׮p/Uc'ޑ54/ZwuLk G <Ԍ5=Y稚H gX ӵSo>gz[~5 .](¨ݛ(,UjD9d2"׾g-·1-7;8[A{aKeK!-0WZan>*jD1F%qZɿYQOzQm76)+N*#DGOU,һ*ޫK/ՆwF k(]a2[wq2ظ lZ Kh#k،4 ވz9*iK޹B
- nIȂ4K={Xq_zf἞܍<Ttܬ.5`Ys*HY y}٣ʟ-Ot~r+1&GYz&htFnYV=A{j4L|(4q3Mdp% H4<3yR+q~*S @c2֟*5R;)~/
-endstream
+4087 0 obj
+<< /D [ 4059 0 R /XYZ 81.145 494.857 null ] >>
endobj
4088 0 obj
-<< /Type /Page /Contents 4089 0 R /Resources 4087 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R >>
+<< /D [ 4059 0 R /XYZ 81.145 483.898 null ] >>
+endobj
+4089 0 obj
+<< /D [ 4059 0 R /XYZ 81.145 472.939 null ] >>
endobj
4090 0 obj
-<< /D [ 4088 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 461.98 null ] >>
endobj
4091 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 768.829 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 451.021 null ] >>
endobj
4092 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 757.87 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 440.062 null ] >>
endobj
4093 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 746.912 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 429.103 null ] >>
endobj
4094 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 735.953 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 418.144 null ] >>
endobj
4095 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 724.994 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 407.186 null ] >>
endobj
4096 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 714.035 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 396.227 null ] >>
endobj
4097 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 703.076 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 385.268 null ] >>
endobj
4098 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 692.117 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 374.309 null ] >>
endobj
4099 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 681.158 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 363.35 null ] >>
endobj
4100 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 670.199 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 352.391 null ] >>
endobj
4101 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 659.24 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 341.432 null ] >>
endobj
4102 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 648.281 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 330.473 null ] >>
endobj
4103 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 637.322 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 319.514 null ] >>
endobj
4104 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 626.364 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 308.555 null ] >>
endobj
4105 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 615.405 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 297.596 null ] >>
endobj
4106 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 604.446 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 286.638 null ] >>
endobj
4107 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 593.487 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 257.746 null ] >>
endobj
4108 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 582.528 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 246.787 null ] >>
endobj
4109 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 571.569 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 235.828 null ] >>
endobj
4110 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 560.61 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 224.869 null ] >>
endobj
4111 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 549.651 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 213.91 null ] >>
endobj
4112 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 538.692 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 202.951 null ] >>
endobj
4113 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 527.733 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 191.992 null ] >>
endobj
4114 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 511.793 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 181.034 null ] >>
endobj
4115 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 500.834 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 170.075 null ] >>
endobj
4116 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 469.95 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 159.116 null ] >>
endobj
4117 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 458.991 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 148.157 null ] >>
endobj
4118 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 448.032 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 137.198 null ] >>
endobj
4119 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 437.073 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 126.239 null ] >>
endobj
4120 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 115.28 null ] >>
endobj
4121 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 415.156 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 104.321 null ] >>
endobj
4122 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 404.197 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 93.362 null ] >>
endobj
4123 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 393.238 null ] >>
-endobj
-4124 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 352.391 null ] >>
+<< /D [ 4059 0 R /XYZ 81.145 82.403 null ] >>
endobj
-4125 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 341.432 null ] >>
+4058 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
4126 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 330.473 null ] >>
+<< /Filter /FlateDecode /Length 2278 >>
+stream
+x[n#+D @܎uv=K/ږ4N:ERyH)OUb
+Ͽ_ĉd%Cu2(Gq?;Zr?_x
+U]aRjJ"<I#rXPJkͯî<O㮭7a=a \λrd}M_L[ˬ<[GM߫.4n(]m2 }ܩ;rvM_vBZ#4e1OG 4Tv@EweBR(7ẂLIMBtFG 2"Qrv`a=O0dzztL): @ao=Wj;Ž ahN!0>_`b(,NS_e0=R; ܫ<#qDZ50TCƐs5RƹK{g@TY(f%Jr)=4\~H2͈DZ2$)"<€DJ0kOd\eEv(bw2#dp˴p^9u&Ql#ݶ7Zۺwl^BBFS^fmV|Mt6!k;͘6%W+ jmDb}AXNs%{ߓGmve3 e)ٖ{ Yg!KO fr&#{HU{2Ym($3+0K|WJLA9s6^ Ky>nXc>=Қ3USH8ҋؼ8?eě״$د{5!)IcJw]~Q{ bzS%W"n^bzW|0"hCZFˏ|KPӌ[=U*_+TUŦaRkh/=(gb8Ũӂs<7zyqTǝI?
+:Ff) r1jo{A';<eJk̷
+%n90t9ږO϶Zj2Γd|n4]3 HUN#hsJ'u؃Ԥg-Pg|5<|Llx *p#I*TzLV LSz"cJw]0)n]?Fɦ"&ZK%*SJU} CN, Mx ~{}d+@AWxS,J{zQ9l Gڅtlڞy.}v1`xvkUjf|A5
+qI)icmh8%jŒ~ismS.*zEtRSw_:y fB!eՊؠGj@fd禪Uɕf:j @PVDY9`mݰ'l0kuk@aK(nVNjilO(2(ɹW7<F2VDլ+֪?ܨu w3[yl>'MmLMvڔJsk&*bHn:O$5ۂ4.H!SuOu·pyQFo(Ƃ%.m*()|&oy<z;d4͒b}V7^m.#mi{
+9iϑ޳ #6"p#ԑƳ/"&ف >|5_e?mH5l0İ1t?Z{o4܊jYmQ+ho %^t{3xegϗ
+endstream
+endobj
+4125 0 obj
+<< /Type /Page /Contents 4126 0 R /Resources 4124 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4182 0 R >>
endobj
4127 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 319.514 null ] >>
+<< /D [ 4125 0 R /XYZ 78.37 808.885 null ] >>
endobj
4128 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 308.555 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 768.829 null ] >>
endobj
4129 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 297.596 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 757.87 null ] >>
endobj
4130 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 286.638 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 746.912 null ] >>
endobj
4131 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 275.679 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 735.953 null ] >>
endobj
4132 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 234.832 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 724.994 null ] >>
endobj
4133 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 205.94 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 714.035 null ] >>
endobj
4134 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 194.981 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 703.076 null ] >>
endobj
4135 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 184.022 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 692.117 null ] >>
endobj
4136 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 173.063 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 681.158 null ] >>
endobj
4137 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 162.105 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 670.199 null ] >>
endobj
4138 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 151.146 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 659.24 null ] >>
endobj
4139 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 140.187 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 648.281 null ] >>
endobj
4140 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 129.228 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 637.322 null ] >>
endobj
4141 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 118.269 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 626.364 null ] >>
endobj
4142 0 obj
-<< /D [ 4088 0 R /XYZ 81.145 107.31 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 615.405 null ] >>
endobj
-4087 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 346 0 R /F84 425 0 R /F15 334 0 R /F74 337 0 R /F83 414 0 R >> /ProcSet [ /PDF /Text ] >>
+4143 0 obj
+<< /D [ 4125 0 R /XYZ 81.145 604.446 null ] >>
endobj
-4146 0 obj
-<< /Filter /FlateDecode /Length 2218 >>
-stream
-x[;#7 WLS$z
-QG|\1wȏ-O맟^9,X<I/I\ڝUBZuz:eC%^P}Dwt_"C_
-tj|a/G)8v]"K]#[-l\G; .= Z'|F_H"_I#YH󚳘(dMFHowm*e`() 9UkD0"xE "C'#͎3'%w/#f8o l[]j756Z'M0z87"4{$o"5X>)އysMnhMgL;l;zl8׾+q-#ytZ
-ЖYGj43w?Ad(YgOopV2j<k1[6״)Plau~tJH}cOP?a|r-,]a7|^jmBITB66*pӡÒH#.jעk
-u@}=DNIT}CN
-]:f)Hxޚ=˩Lr(]&Io"!VvDlLIV̡:K;H5hzMɄ}j(P4"nU'%EIM:-V;QS"cȘ}lrIEʦs,)7ݻyWDBwz*7-?_Uݖ]=B:?&ha}`?/? 5C-jvPӜz{F[e5*;*8 wvusUǯ#+e-íf.c
-X1kH|<.# 2u@2+96U> kYt@r?/,*au4e;.^P66~ 84۲Ű͔#X)6Xry`.PK&ޖs4xAW (q2.]f>niS^\xs1q e[a9-
-`DOB%F֩ I?"5SFȕXzou=:
- ngT7DDN0wG9Hq@7ܝ(~{oIҐ"V>j_X
-ʑd[iuM }iߴ+] wiuSO[@nݰMiwVSFaw-;w[*1ևɻXá&: i)o$V5z3C|O6JN?Fߒd4lSSnjMn
-Ȋ^70GR]|[[? ;5ŹZE:䲂lʸI&U0|=c>y Kssr=N,- %P5 
-eiRefs?
-endstream
+4144 0 obj
+<< /D [ 4125 0 R /XYZ 81.145 593.487 null ] >>
endobj
4145 0 obj
-<< /Type /Page /Contents 4146 0 R /Resources 4144 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R >>
+<< /D [ 4125 0 R /XYZ 81.145 582.528 null ] >>
+endobj
+4146 0 obj
+<< /D [ 4125 0 R /XYZ 81.145 571.569 null ] >>
endobj
4147 0 obj
-<< /D [ 4145 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 560.61 null ] >>
endobj
4148 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 754.882 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 549.651 null ] >>
endobj
4149 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 743.923 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 538.692 null ] >>
endobj
4150 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 732.964 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 527.733 null ] >>
endobj
4151 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 722.005 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 511.793 null ] >>
endobj
4152 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 711.046 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 500.834 null ] >>
endobj
4153 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 700.087 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 489.875 null ] >>
endobj
4154 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 689.128 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 478.917 null ] >>
endobj
4155 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 678.169 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 467.958 null ] >>
endobj
4156 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 667.21 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 456.999 null ] >>
endobj
4157 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 656.252 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 446.04 null ] >>
endobj
4158 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 645.293 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 435.081 null ] >>
endobj
4159 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 634.334 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 392.242 null ] >>
endobj
4160 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 623.375 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 381.283 null ] >>
endobj
4161 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 612.416 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 370.324 null ] >>
endobj
4162 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 601.457 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 359.365 null ] >>
endobj
4163 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 590.498 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 348.406 null ] >>
endobj
4164 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 579.539 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 337.447 null ] >>
endobj
4165 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 568.58 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 326.488 null ] >>
endobj
4166 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 557.621 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 315.529 null ] >>
endobj
4167 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 546.662 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 274.682 null ] >>
endobj
4168 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 535.704 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 245.791 null ] >>
endobj
4169 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 524.745 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 234.832 null ] >>
endobj
4170 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 513.786 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 223.873 null ] >>
endobj
4171 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 502.827 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 212.914 null ] >>
endobj
4172 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 491.868 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 201.955 null ] >>
endobj
4173 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 480.909 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 190.996 null ] >>
endobj
4174 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 469.95 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 180.037 null ] >>
endobj
4175 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 458.991 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 169.078 null ] >>
endobj
4176 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 448.032 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 158.119 null ] >>
endobj
4177 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 437.073 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 147.161 null ] >>
endobj
4178 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 426.115 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 118.269 null ] >>
endobj
4179 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 415.156 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 107.31 null ] >>
endobj
4180 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 404.197 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 96.351 null ] >>
endobj
4181 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 393.238 null ] >>
+<< /D [ 4125 0 R /XYZ 81.145 85.392 null ] >>
endobj
-4182 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 382.279 null ] >>
+4124 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-4183 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 371.32 null ] >>
+4185 0 obj
+<< /Filter /FlateDecode /Length 2099 >>
+stream
+xZˎc5Wd 1v)DJ&$IJY!<?I3
+qsOUOondY#wA+9Wgp{77#Y8HFvWΥ{rz6rkw8z,2V' 0}dtOGm%Ȟ1lE7-'A 8 $H7NѮE[{}-B˄ęEh,jE1ho[|,S玮 GzfgPL9k--w?~~k'"{
+Oz= gyi7!j؋;Y|-zCXg ͼWcdoHy4NDrjSLˎbVYSMM27|zz4&zmIlZ|ь3e:lGjiT)<ۑբj>dGyYcuHfJd@8㺨b:JNN*6ߞWg+jYIV<W?,"mgO$CZ{>"w[2w4H/֭=SoH47=Ru;bf&l~dڕ]$i\њZkJ' tNmnZ>;Dvj\E&3{;M wyY[7xMJG koRM^ɑ mc}g Y}7C$bdĽ$"*6,r)=$soQ""SJx!W>{ .
+f} .,+YŸ77UA:MDӛ=N[[y}@0ÂR>{֢SiJi'$UYKSIwJ5Ub9 xegZP9ku{|Mȴ3N@rUbϨG}=9].ܳ;Kb`HnkDŽRղJz_P
+endstream
endobj
4184 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 360.361 null ] >>
-endobj
-4185 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 349.402 null ] >>
+<< /Type /Page /Contents 4185 0 R /Resources 4183 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4182 0 R >>
endobj
4186 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 338.443 null ] >>
+<< /D [ 4184 0 R /XYZ 78.37 808.885 null ] >>
endobj
4187 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 327.484 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 768.829 null ] >>
endobj
4188 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 316.525 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 757.87 null ] >>
endobj
4189 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 305.567 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 746.912 null ] >>
endobj
4190 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 294.608 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 735.953 null ] >>
endobj
4191 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 283.649 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 724.994 null ] >>
endobj
4192 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 272.69 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 714.035 null ] >>
endobj
4193 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 261.731 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 703.076 null ] >>
endobj
4194 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 250.772 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 692.117 null ] >>
endobj
4195 0 obj
-<< /D [ 4145 0 R /XYZ 81.145 239.813 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 681.158 null ] >>
endobj
-309 0 obj
-<< /D [ 4145 0 R /XYZ 79.37 183.439 null ] >>
+4196 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 670.199 null ] >>
endobj
-4144 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F74 337 0 R /F83 414 0 R /F59 346 0 R /F84 425 0 R /F88 635 0 R /F87 2313 0 R /F111 636 0 R /F64 333 0 R /F65 335 0 R >> /ProcSet [ /PDF /Text ] >>
+4197 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 659.24 null ] >>
endobj
4198 0 obj
-<< /Filter /FlateDecode /Length 2168 >>
-stream
-xn+'t?
-(RǕή]=< u9a~<s~v%<)%1ʞ<Bۓ%%$׿?_w)UJ!%^3? %ۋ&z-m᭮/eǨ`L8ީJ!u{c__0oʜ5Ad
-k`Z_9qNO/A])
-}tx_vf/0k)zCK W.iWX#emNv8X,훘Ml 54V\9:{#Dp|e&)H(R}T4{Z;L;&h\eL kZa_y}{aw(GfƋY܄Y9$}8;%/@{/)1 <QR"IJK:NJdAjTneTc'"eaM]'f0@6
-XҌ8Èu2$kƻg
-8$s؞
-HA}H>Ђp)B -*h z7^A ~`:,%rհ+
-+vm8\=S/&lLؘ!.8gOgoMR F
-!:17# ޔ8:ift^m)D+Z:s,̶SٳWg$% qX4aJ#&C'vb2af
-0[dV0Ǒk^ N8;pЕ걋7}h0N8I|Ǎ9(
-#H*#xu~aȭh,OUG_i^jW͒X؇*0<OG;="޹QJ bwfE pb*;om#a1s.pDM?qzOkI\*z%7Y
-[)J'=WҪYZX,0rE0}xᩪ4M,(i0ʇnq%̓ϯH LvMWe Yߠ#IN<sbQ<in
-"tݴ"|Wr6b.We !ˁsݮWC+?I5;Vì-tBv-e4 c ߏG4
-pۃԣ{o-9F<w^8UZ|, l]]^s{).~_ YT6u:gi*$⯭,z&?xU
-endstream
-endobj
-4197 0 obj
-<< /Type /Page /Contents 4198 0 R /Resources 4196 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R >>
+<< /D [ 4184 0 R /XYZ 81.145 648.281 null ] >>
endobj
4199 0 obj
-<< /D [ 4197 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 637.322 null ] >>
endobj
4200 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 775.009 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 626.364 null ] >>
endobj
4201 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 704.799 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 615.405 null ] >>
endobj
4202 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 646.545 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 604.446 null ] >>
endobj
4203 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 600.246 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 593.487 null ] >>
endobj
4204 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 553.948 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 582.528 null ] >>
endobj
4205 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 507.649 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 571.569 null ] >>
endobj
4206 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 425.484 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 560.61 null ] >>
endobj
4207 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 355.275 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 549.651 null ] >>
endobj
4208 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 273.111 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 538.692 null ] >>
endobj
4209 0 obj
-<< /D [ 4197 0 R /XYZ 79.37 167.036 null ] >>
-endobj
-4196 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F65 335 0 R /F81 377 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-4228 0 obj
-<< /Filter /FlateDecode /Length 3835 >>
-stream
-x͝ˎ#E~
-]RػL36Y !*lLj[;еwbmWLg7M]2 /Z\!&|_s<B1S+:7RRtpW!_h;0A kGp*ӮNsi [}=ZEcJubWzfIxҳEMعCWV^wZ9څ'-^2ޗбI`MC 6iqE ?]{ppD2eqXӦbi7-efX, ٝe[{8
-+@**>H(9Zs @hpa]Ch﬙b:Rc:-jq$ǣ:ZWea@[3Ɠ 0=K46c'_pjd
-~7~gN͋BN.
-%<xJh>k*KF$~/6k]T!mXTr*h;m(X[^<>n#8xl
-~ \
-F~0>G;kmd:+Z:E}sbQ)ji{+g }*<H烳T䩲zU|ʰw˫},WyI2'o;T_ܬTdrH(S %M-Lڮyڞey1} ̺/V
-:5 )\YWX;U !ubkfIA>Ͷ_T~g,Dd5}GVL^7G[[9[$'?s{ݍ,Wf8 uɎͲ,
-Z˗M}jv"݄۲Ff;[g}ݕr)!3hE6kC)㯓M dw@/*'}pST2+qI38f܊ú&y} 3'TPV%/=e Uw=xbFkSzS4lVWr6/FR~b3[ᕈ`04@/wci!OKI^tg[>$1-v@2M3!<xE3`$lR4x͜Nڰktx އ}H/}~\D%I_?a^ӑ)}vysfr~7Q@+xE|*LPS`PŤQPVұɼݩ|<'忞8"7bnOϻzpb|{'1lKF[{;ѻgd
-9ߕv~ŝ +&$a~^h#<a,U9|qFHewlu"wygJf\+/D4w^`yqH,ߙ7Kݾc^ܨ(w3-`}OI(4cE7 J<pީT`}/71ڃn~vѤy-?&k͙݊*$Ԍk72jˠ#JG;GyyzEq(O2͓}>ԋ&lzfpyݭlOfO+^Z#m}_Q|_q1so&Ca0fO"JHP{iJ^]*(]c9Ӕ†ΠtveP`:(t$=JWi]"/|0ӤGtF4q42g=:M\t)SiTӄiu"i)4&&U.04ٝ`:4>{T0)I)~0]OshtbntT1-vG_F]<ILrx.JO٦Y;eC{ccǫ8Vbۀ+h
-f-ZѢ ZѢ-ZѢZ¬-ZѢ-ZҬݵE+0ZE+@E+0iƊV4kFV`hFV@t׊Z'%lZ1{o*a˝M6|ztq-ȶWF` H@t}hf}h}hf}a}h}iѢ/-Ѣ/ Ѣ/cE_@E_0ZE_ ˤ\~\_xBP3_PˏBӓ3>5³cxvfQyvfA=;H7ώͳ4{vfQyvA=;HgGA=;H/dٳt ͞ٳ4{vϾ/
-iK)oOu)Gc/W/ؾN꡿+k1.\ Z=z[ͧ
-iݕ@`0<@8@0kƲ4@(0@, pWQ`I`VA*r,b
-0Z
-F`H
-H@tIhfIhIhfIaIhIi")-") ͒")$cER@%ER0Z$ER K$ P
-endstream
-endobj
-4227 0 obj
-<< /Type /Page /Contents 4228 0 R /Resources 4226 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R /Annots 4237 0 R >>
-endobj
-4237 0 obj
-[ 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R ]
+<< /D [ 4184 0 R /XYZ 81.145 527.733 null ] >>
endobj
4210 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 287.863 168.645 296.75 ]/A << /S /GoTo /D (section.0.1) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 516.775 null ] >>
endobj
4211 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 265.945 162.18 274.912 ]/A << /S /GoTo /D (section.0.2) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 505.816 null ] >>
endobj
4212 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 242.085 199.908 253.053 ]/A << /S /GoTo /D (section.0.3) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 494.857 null ] >>
endobj
4213 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 230.08 217.99 241.039 ]/A << /S /GoTo /D (subsection.0.3.1) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 483.898 null ] >>
endobj
4214 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 218.124 271.838 229.193 ]/A << /S /GoTo /D (subsection.0.3.2) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 472.939 null ] >>
endobj
4215 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 206.289 260.909 217.128 ]/A << /S /GoTo /D (subsection.0.3.3) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 461.98 null ] >>
endobj
4216 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 193.776 282.11 205.731 ]/A << /S /GoTo /D (subsection.0.3.4) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 451.021 null ] >>
endobj
4217 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 174.239 177.731 183.285 ]/A << /S /GoTo /D (section.0.4) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 440.062 null ] >>
endobj
4218 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 159.903 307.764 171.858 ]/A << /S /GoTo /D (subsection.0.4.1) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 429.103 null ] >>
endobj
4219 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 148.396 172.561 159.345 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 418.144 null ] >>
endobj
4220 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 136.441 214.364 147.499 ]/A << /S /GoTo /D (subsubsection.0.4.2.1) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 407.186 null ] >>
endobj
4221 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 124.486 276.302 135.544 ]/A << /S /GoTo /D (subsubsection.0.4.2.2) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 396.227 null ] >>
endobj
4222 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 112.53 251.943 123.479 ]/A << /S /GoTo /D (subsubsection.0.4.2.3) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 385.268 null ] >>
endobj
4223 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 102.398 258.917 111.634 ]/A << /S /GoTo /D (subsection.0.4.3) >> >>
+<< /D [ 4184 0 R /XYZ 81.145 374.309 null ] >>
endobj
4224 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 78.697 378.259 89.666 ]/A << /S /GoTo /D (section.0.5) >> >>
-endobj
-4229 0 obj
-<< /D [ 4227 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 4184 0 R /XYZ 81.145 363.35 null ] >>
endobj
-4230 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 775.009 null ] >>
+4225 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 352.391 null ] >>
endobj
-4231 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 704.799 null ] >>
+4226 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 341.432 null ] >>
endobj
-4232 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 658.501 null ] >>
+4227 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 330.473 null ] >>
endobj
-4233 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 588.291 null ] >>
+4228 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 319.514 null ] >>
endobj
-4234 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 482.217 null ] >>
+4229 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 308.555 null ] >>
endobj
-4235 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 400.052 null ] >>
+4230 0 obj
+<< /D [ 4184 0 R /XYZ 81.145 297.596 null ] >>
endobj
313 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 343.689 null ] >>
+<< /D [ 4184 0 R /XYZ 79.37 241.223 null ] >>
endobj
-4236 0 obj
-<< /D [ 4227 0 R /XYZ 79.37 328.77 null ] >>
+4231 0 obj
+<< /D [ 4184 0 R /XYZ 79.37 132.958 null ] >>
endobj
-4226 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 333 0 R /F15 334 0 R /F74 337 0 R /F81 377 0 R /F65 335 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+4183 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 350 0 R /F84 428 0 R /F88 641 0 R /F87 2348 0 R /F111 642 0 R /F64 337 0 R /F15 338 0 R /F74 341 0 R /F83 415 0 R /F65 339 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-4295 0 obj
-<< /Filter /FlateDecode /Length 7667 >>
+4239 0 obj
+<< /Filter /FlateDecode /Length 2165 >>
stream
-xώV~G񽟢_$`@{,l3ls%R%T ;R|;O~koնn؎?o۩|<6oya{Nmϗ1ܵ{w]ʏbMx.?6o
-(I) Ia0ur8q2IaҤ0eR09.)L.UR(9&)LH
-$kָ]z"w^=4AsOF-oDmojm&fNS3KgN4)IҵiN5ɚti4es:i8ms9Mݜ&oRoJ9M&qN89%s9:)ӤiZtFvv&=8v?Z?!k }ՏUҤc;HKMNN$.5R99I\JpBp:p2p%BA'A@
-Ӝ Vqz&T~Қ,_-Uln۬# Ώrk>l/?{Db1dFtF)ӤFib4q8H8Mq&9Nku&;N )Ӥgԩi4Rh>l47~z-mȡBҘW Ŵ }=O,YIW~KߌՓ8J ɅBaZ0PR(P8N(L&
- k"
-ɃAEiI”Aa 0]0fa*\鏳,<}3^K4o~u/g8g ߷&fdE߀ab45qH(]4EqH8MT*N)Ӥi"uti4:q8],:q8Mg&4JlR7|{]R2~rײC Nk NiӴit q4mp68MNmp68M R NK R NiӴAچnj6LCc^nCI>> _~N0h+]grRg;,wY4r3˝f;,wY.ufu;,wY4\rNY,\rN3˝f+]gFjOn/'/g q|sl-Z?УEN#pH(]+4qH8ME"NSSSTi*"u*tTi*4:q8]*,:q8ME"J׊l*2UEkY Lۂ?Jׁ4iN3Нf;@w:] tN3НfKtN3Нf;@:ie;@:i tJׁGí;me\}9߿^.x[B{9viK>K9voy;S:ai"u"ubu %,HHHX]4a:a:a:aEE%,&,VHHH8MXzН) ty>_w}:+޿7"+eukXJ8|%Js|$!>ijh%WwcxnWBͅ^mBF?i4iL#3iL#FRg94rL#gFRg94ri4H:6Shz4z8˥} 6X>^Z_gL{1_-M
-NSSk
-NSԩTRgԩTi4UPVa**L}op
-|7fn?Я7 ߛls9Jlf4/|9Kr͗di2+u2tͬdi2+u24u:MfNf%Nf&NYɬɬ5NYɬdVdi2tɬdVdi24u*]3sfӟ~z*P沺pac}6koM+/_0n?Z}}8+MwwJ`~6z|:%烫1>9;_1ay0+ Ґ:+ ҰzYiHYiHe4+ Ґ:+ JC4JC4.+ JC4JC4.+ YiHYiHe!uVR/+ iҰ4JC4JiVǧNt>8 o7(NBIӤPBIӤiR(uRtMӤiR(uR4)t:M
-N
-%N
-&NBII5NBIӤPiRtIPiR4)t*]S˱ҞigpWSؾ(^Zc-~Gqa4qr8I8)]4qr8I89M&NN'''i$uti4q:qr89],q:qr89M&NJ8'{7Oqq=\7Ws&NWK^&NWɫɫ5NWɫɫi4yu:y8yu:M^&R'J׼:M^&NWWɫ%ΒWWɫitZ/A;~z?~5}-^mXib4ab4sI)]c4sI9M&vN;;;ib'ubtib4:s9]b,:s9M&vJح;}!nj8O:/nuo.ڬuvx]i_\cY~Gifәug9ͬsY4N:sY4ifԙuN3.YfԙuN3f9ͬSκ߾|)y)v__#hp{dX59rGI={qr ơ|\CpI ?w?x\u_iP&5"@94{3ٛ9ifR͜fo4{37S͜fo4{37sӬWft+g4Y8zEWY8zi+Rg4zY+Rg4Y8zE^YoNG^m.D.^p*kw?u9!?$a`uI$A$A$K,.I:I:I:I$i u u u`uIIKM.I:I:I:Ip$l+cev$~c%q{wá-@L\w>ԄBB
- ӄBiB4pP8PHP8M(&N
-
-k(&N
- ӄ
-g ӄiB4Pb?q<ݚ~/bwc^`y[BHqh9>[}:j7`JQ4iFӌZ3j%ΨuQ4iFJQ4iFӌZ3jf:]FZ3jf:ͨuQtk=2j kpL\hԵcӞE,ҝf.uJEӔi!u4pr8M9N9$N9NS))ҵNS)ӔCit)Ci4pr(]˱s9O}w^9/H>jr%tccs\|l.u>6z\b4UuJ*]4UuJ:MUNSUSUSUTi*utTi4U:Uu:],U:Uu:MUJתuw3%]svGUcO}m$}M{e4aqH(]4aqH8MX&,N ӄi"u¢t ӄi4a:aq8],a:aq8MX&,Jװކηn@:,;~|~|\>]ylޭɖ?kw`gx0<fx:ttN3<fx::S:<fx:t)u Ot)u ON3<s?7<WZʧ_+둺a'-F;}x#{/WDow߿?Ӽ4_u,_uӼt}=*F޿mz\w?ӯɛ1s\:GQps\z9X!qVHR``:+zޖ:mޖ:mzޖ:mޖ:mKRRRV^K^KZkkkkFwOu̓^37kOv2nANSF)ԥSF)ӔQQZF)ӔQi4et2:2J2:MNSFSFkNSF))ӔRFg))Ӕi4eTq'κj.ͩtߡ`:v?Ko[~c{?>n+_x< 2`<B uBt ӄiB uB4!p8MN$N&N 5N ӄ@iBt @iB4!p(]Cs= S\BlCz!ýfmf9]}:͡O9)u6xNs lf'u9i4]:]Wvi4]:]w;MםNNut]t]uti.u4]wtY.u4]w;Mו]_M?}M_[ \Hͳ;N3Pv4Cig(;Pv4CY ePv4CiN3.CYN3f(;PVPn;l.CҔoʯJ1epzOߋ] ]<lWf4va+N]qٮ(]4et2J2:MNSFSFSF)Ӕi(uʨt-Ӕi4e:et2:],e:et2:MJ2\NlS?nWyu_rswyDrnI]0rn9MNrn9MN[N-ti4ݒ:Rvi4rnIn9M.rnIn9M[N-kzU^iSxGvpyW2qzY zwA4^ zN3f;A/q zN3ΠWzN3fKA42eKA4i z_k7A^Cm{/y|9s~oRg߱yX]t8=)%D
-!!S!KNNN.GI) %;:/q4͑$Farcpjspks~(rwa8dI%K&K'K'K,)LNN$.Yr8Yr8Yr8YrdIڒ%%%%K&K'K'K'K,9,9ddI%%%%Y\_R{!쟆pNkp85t85t85xQ*L N N %.5t85t85t85tPRCSCSCSCK ::PRCSCSCSCw朅rfvyDU"uJ
+xn+'tp
+@5lq0d8%p-]$]@{̊+tA6WR.4R*{Yy<5@O'u} S+aϏ!EWF\ /YX AZ
+[!o
+BbKrlm . }Ҳ +GgoD/$6eI Y*fOkY?2iGdk_VI9aMVZW=a_ig|_vw]i5/<QbVi{0+7aVrp#Il Pk(KJC8()$%q'% P5*2*JZ10 .Md3 l[Rd<ѽS%IHXc"~aű
+NXo `ՕV3]>
+t_Ҍ8Èu2$kƻqH=
+pۃ|59R5܅
+A6Z%TZc(wJKG$Hu7YKaWPW,ژq$N13acj=15I-DL)2KOoKșip>ȝ4iEkk}ۦ;ӝ֢QU)CɦmSNF'jU7cƃZsGc͜ft^ + ^&03Bkfg `ge ޡEhޏLZGjZ80J>(#:hn3­`1aVDKQ<JR)it`{͸覄wfHb}r*
+\V`\]A[BfhoD܎X
+ک6hnva ͨ2@hd98udh/𾁾Ys_Dx@S NP\F~d7J牪e"qhΉ
+]:pJpiz{h26yK.o:z97oMQ{ŸΏT`7͕@&6]gnkțܭ!^Ȝjpy L8yìSy{k!,GDVQw
+]=h7'1</`D
+4H(h܁<N |dgP-PH[!ٍ9 ~B;ZoɎR
endstream
endobj
-4294 0 obj
-<< /Type /Page /Contents 4295 0 R /Resources 4293 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R /Annots 4297 0 R >>
-endobj
-4297 0 obj
-[ 4225 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R ]
+4238 0 obj
+<< /Type /Page /Contents 4239 0 R /Resources 4237 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4182 0 R /Annots 4251 0 R >>
endobj
-4225 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 759.955 197.477 769.031 ]/A << /S /GoTo /D (section.0.6) >> >>
+4251 0 obj
+[ 4232 0 R 4233 0 R ]
endobj
-4238 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 746.057 249.98 757.016 ]/A << /S /GoTo /D (subsection.0.6.1) >> >>
+4232 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 125.056 168.645 133.943 ]/A << /S /GoTo /D (section.0.1) >> >>
endobj
-4239 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 734.102 202.349 745.061 ]/A << /S /GoTo /D (subsubsection.0.6.1.1) >> >>
+4233 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 103.138 162.18 112.105 ]/A << /S /GoTo /D (section.0.2) >> >>
endobj
4240 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 723.98 200.416 733.106 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
+<< /D [ 4238 0 R /XYZ 78.37 808.885 null ] >>
endobj
4241 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 710.311 243.704 721.26 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 775.009 null ] >>
endobj
4242 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 700.07 231.559 709.195 ]/A << /S /GoTo /D (subsubsection.0.6.2.1) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 704.799 null ] >>
endobj
4243 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 688.114 244.312 697.24 ]/A << /S /GoTo /D (subsubsection.0.6.2.2) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 646.545 null ] >>
endobj
4244 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 674.326 252.591 685.395 ]/A << /S /GoTo /D (subsection.0.6.3) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 600.246 null ] >>
endobj
4245 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 662.491 269.318 673.33 ]/A << /S /GoTo /D (subsection.0.6.4) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 553.948 null ] >>
endobj
4246 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 652.249 256.257 661.375 ]/A << /S /GoTo /D (subsubsection.0.6.4.1) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 507.649 null ] >>
endobj
4247 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 638.471 267.465 649.42 ]/A << /S /GoTo /D (subsubsection.0.6.4.2) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 425.484 null ] >>
endobj
4248 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 626.515 283.794 637.464 ]/A << /S /GoTo /D (subsubsection.0.6.4.3) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 355.275 null ] >>
endobj
4249 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 614.67 259.216 625.509 ]/A << /S /GoTo /D (subsubsection.0.6.4.4) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 273.111 null ] >>
+endobj
+317 0 obj
+<< /D [ 4238 0 R /XYZ 79.37 178.71 null ] >>
endobj
4250 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 602.715 285.228 613.554 ]/A << /S /GoTo /D (subsubsection.0.6.4.5) >> >>
+<< /D [ 4238 0 R /XYZ 79.37 165.963 null ] >>
endobj
-4251 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 592.473 260.89 601.599 ]/A << /S /GoTo /D (subsection.0.6.5) >> >>
+4237 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 337 0 R /F15 338 0 R /F74 341 0 R /F65 339 0 R /F81 381 0 R /F22 371 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4304 0 obj
+<< /Filter /FlateDecode /Length 6396 >>
+stream
+x͎X~}_o`4\
+iiiӴiZ4:PiZ4pVHV8M+.pVHV8M+N
+k+v3_7lߊe?Y?4C!Xf/kޱZ*_%z5,m ˻}8q8M_N_}q8M_N_/Ni4}:}Qi4}qH8M_.}qH8M_/Nk_v}iwy2Oi\vJ?.,;S!}ҥRGr4 c]a u3f+DWp湳
+3f+,w8:f+W1p q Wp& p
+3 {7_+-q~σr8zeN9 LZDzF_{i\{n_McNrt}tӴ] v VHHHH]z`q )Ii%
+NSKN^ m`uɃ aV8Ni3 Cc9|y>?]Ӌ\G6V_sZ/nüٽsv:g%X]J:g%HY R#H9(uv.{N(5+Y)HӬf4+R8+Y)8JiV
+Rgt])8JiV
+NR:+Y)8]V
+βR:+Y)8JiV
+JוVJNRa8R+k~YvÞ%Gs!Gth:M4&NMK4&NMԉ5NMԉDi4t:є8th:M4&R'Jh:M4&NMM%MMDitVhi8fhv?J<]?^.wrG/6Gtk&NɁirtr qr49p8MN9p8M&R'NK%R'NɁ@隃{9 }{Եן_8o‡z }l7`a>&7Nkn&7Nɍirtr#qr4q8MnNnq8Mn&7R'7NKn%7R'7NɍF際]6:^s= !7?6$Zs>=!A5>]{;ۏE[|WIvˏ4IqH(]4IqH8MR&)NI$i"utM$i4I:Iq8],I:Iq8MR&)Jפ}:]nHds6qyr5M\.ǟC!UNt^_ԟm%_1ԭy=]h#?&X>5gM۲xC_0,?9r}mx8sŜsm(x|г}w6:ōYHōYX]7N:,nF,nF겸,nF,n겸qōYHōYX]7Rgq#6F,nF,n?~wYz8zwe*uN0#uN:'HM&R;L&N``k&N``I$it,q4 v;MN v;M&R'N`K%R'N`I$XT{QsfkH=GU:*Ly&
+]ɮå]i$\Vab0U*:*Lg&
+SYYkc&
+SX URWEi¤Uaʪ0a5vuuԽ<=}Գ\Hdn~\^xz I]0Ir&9MNYr.9MN&MN&өɓi4:R6i"4rLIN9M.rTIV9MVN+kv5c?p~az8;57~߼XAZK*vD^~kaG^
+:)%t9ɜTD8INa0yS)9)Ll
+65kj
+5iIM4EəLab0-3l?UyRvwHyʸ:N~+-ڻќEGRɎti#uʣtMӴi#u4q8MN$NAN!ɐҵCN")ӤHibtHi4Er$)]'.|ФۇC?J֓[~voxrv-ͻ]yGJ>@Φ?'?>(L{NzNy$.q8q8q8qDGSKo&76'6588tFSIӼ_OB-~>rܟLM{SFK|WսQui uʠtMӴi u4yp>8M N!$N"N ɄҵN
+)ӤBibtBi4pd(]@w_Op}>Hi~u/'?~,}*8Lj&5Nkj&5NIӤiRtR#qR4q8MjNjq8Mj&5R'5NKj%5R'5NIӤF隚TjԞW{[F3
+NkX&,N ӄit"q4aq8MXNXaq8MX&,R',NKX%,R',N ӄEn}7]S^p
+S;.};f z%rr5JK|$is(>$=ijh%Ww7:]4[{iL#34:2fIi$uԙFVi$u4624:HL#F{i4o_?uY.݀^jN/{nFW\|_o_i^N,i^NpeӟzYLih^F \X^
+e~Xmf/Vs=h}95m'5d:d:e\]\P\P\I|N~y?A꼟`uy?p%,i
+NSԩTi4Up:U8Up*8M
+R
+J*8M
+NSSӥ
+RSTitVUa0C\;Wwr7z ʆ~;AeߧnTRgivfivfK0;_NYɬɬ5NYɬɬdi24u:8u:Mf&R'J:Mf&NYYɬ%ΒYYɬdi2tV/vNvTOl.t1ZO} k?n䝩+/߿|[\&݇:%gX4pJΓk1ʏԕvcVNpӬ4.+ Yi8JiVRgt]i8JiVRg4+ Yi8J4$JiVNpYi(]WNpӬ4JiVN4JiVNpuoa3?/1_\݆PPP5'R'R'V:M
+N
+N
+.):):):)BBBBK
+&R'R'R'VJJPڤBBBBINǶtj=ûGUt5v#$ui4q:qRi4q:qr89M&NN'N'NN'II'i$u4qrY$u4qr89Mq5N<va?ti\>c7\wps}?s:M^.yu:M^&R'J׼:M^&R'NWɫUi4yuJ*]4yu:M^N^&N:K^N^&NWɫ5[l^yۇ^j^}9uGp˛ib4ab4sI)]c4sI9M&vN;;;ib'ubtib4:s9]b,:s9M&vJm;}fw@mLՁ~6C_UxDgWަ>أY4:3f9ͬsY'ufu9ͬsY4N:uNY,N:uN3f)]gV?v[ou\nsNk[Oz?
+endstream
+endobj
+4303 0 obj
+<< /Type /Page /Contents 4304 0 R /Resources 4302 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4182 0 R /Annots 4306 0 R >>
+endobj
+4306 0 obj
+[ 4234 0 R 4235 0 R 4236 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R ]
+endobj
+4234 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 758.062 199.908 769.031 ]/A << /S /GoTo /D (section.0.3) >> >>
+endobj
+4235 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 746.057 217.99 757.016 ]/A << /S /GoTo /D (subsection.0.3.1) >> >>
+endobj
+4236 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 734.102 271.838 745.17 ]/A << /S /GoTo /D (subsection.0.3.2) >> >>
endobj
4252 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 578.246 356.78 590.202 ]/A << /S /GoTo /D (subsubsection.0.6.5.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 722.266 260.909 733.106 ]/A << /S /GoTo /D (subsection.0.3.3) >> >>
endobj
4253 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 566.291 423.071 578.246 ]/A << /S /GoTo /D (subsubsection.0.6.5.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 709.753 282.11 721.708 ]/A << /S /GoTo /D (subsection.0.3.4) >> >>
endobj
4254 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 554.336 434.598 566.291 ]/A << /S /GoTo /D (subsubsection.0.6.5.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 690.217 177.731 699.263 ]/A << /S /GoTo /D (section.0.4) >> >>
endobj
4255 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 542.939 298.12 553.888 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 675.88 307.764 687.835 ]/A << /S /GoTo /D (subsection.0.4.1) >> >>
endobj
4256 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 532.697 179.455 541.823 ]/A << /S /GoTo /D (subsection.0.6.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 664.373 172.561 675.322 ]/A << /S /GoTo /D (subsection.0.4.2) >> >>
endobj
4257 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 509.066 226.618 519.965 ]/A << /S /GoTo /D (section.0.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 652.418 214.364 663.477 ]/A << /S /GoTo /D (subsubsection.0.4.2.1) >> >>
endobj
4258 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 487.148 153.283 497.987 ]/A << /S /GoTo /D (section.0.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 640.463 276.302 651.522 ]/A << /S /GoTo /D (subsubsection.0.4.2.2) >> >>
endobj
4259 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 475.073 196.72 486.032 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 628.508 251.943 639.457 ]/A << /S /GoTo /D (subsubsection.0.4.2.3) >> >>
endobj
4260 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 463.118 285.168 474.187 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 618.376 258.917 627.611 ]/A << /S /GoTo /D (subsection.0.4.3) >> >>
endobj
4261 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 451.163 215.52 462.122 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 594.675 378.259 605.644 ]/A << /S /GoTo /D (section.0.5) >> >>
endobj
4262 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 439.208 278.842 450.386 ]/A << /S /GoTo /D (subsection.0.8.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 574.65 197.477 583.726 ]/A << /S /GoTo /D (section.0.6) >> >>
endobj
4263 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 427.263 207.39 438.212 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 560.752 249.98 571.711 ]/A << /S /GoTo /D (subsection.0.6.1) >> >>
endobj
4264 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 405.385 343.181 416.354 ]/A << /S /GoTo /D (section.0.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 548.797 202.349 559.756 ]/A << /S /GoTo /D (subsubsection.0.6.1.1) >> >>
endobj
4265 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 393.38 222.155 404.339 ]/A << /S /GoTo /D (subsection.0.9.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 538.675 200.416 547.801 ]/A << /S /GoTo /D (subsubsection.0.6.1.2) >> >>
endobj
4266 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 381.425 221.168 392.493 ]/A << /S /GoTo /D (subsection.0.9.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 525.006 243.704 535.955 ]/A << /S /GoTo /D (subsection.0.6.2) >> >>
endobj
4267 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 369.031 250.508 380.986 ]/A << /S /GoTo /D (subsection.0.9.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 514.765 231.559 523.89 ]/A << /S /GoTo /D (subsubsection.0.6.2.1) >> >>
endobj
4268 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 357.514 209.691 368.583 ]/A << /S /GoTo /D (subsection.0.9.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 502.809 244.312 511.935 ]/A << /S /GoTo /D (subsubsection.0.6.2.2) >> >>
endobj
4269 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 345.559 235.007 356.518 ]/A << /S /GoTo /D (subsection.0.9.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 489.021 252.591 500.09 ]/A << /S /GoTo /D (subsection.0.6.3) >> >>
endobj
4270 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 333.166 331.933 345.121 ]/A << /S /GoTo /D (subsection.0.9.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 477.185 269.318 488.025 ]/A << /S /GoTo /D (subsection.0.6.4) >> >>
endobj
4271 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 311.806 184.546 322.645 ]/A << /S /GoTo /D (section.0.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 466.944 256.257 476.07 ]/A << /S /GoTo /D (subsubsection.0.6.4.1) >> >>
endobj
4272 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 301.564 182.752 310.69 ]/A << /S /GoTo /D (subsection.0.10.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 453.165 267.465 464.114 ]/A << /S /GoTo /D (subsubsection.0.6.4.2) >> >>
endobj
4273 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 287.895 281.114 298.844 ]/A << /S /GoTo /D (subsection.0.10.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 441.21 283.794 452.159 ]/A << /S /GoTo /D (subsubsection.0.6.4.3) >> >>
endobj
4274 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 275.821 266.498 286.889 ]/A << /S /GoTo /D (subsubsection.0.10.2.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 429.365 259.216 440.204 ]/A << /S /GoTo /D (subsubsection.0.6.4.4) >> >>
endobj
4275 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 265.699 308.71 274.934 ]/A << /S /GoTo /D (subsubsection.0.10.2.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 417.41 285.228 428.249 ]/A << /S /GoTo /D (subsubsection.0.6.4.5) >> >>
endobj
4276 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 253.743 268.292 262.979 ]/A << /S /GoTo /D (subsubsection.0.10.2.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 407.168 260.89 416.294 ]/A << /S /GoTo /D (subsection.0.6.5) >> >>
endobj
4277 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 240.075 208.436 251.024 ]/A << /S /GoTo /D (subsubsection.0.10.2.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 392.941 356.78 404.897 ]/A << /S /GoTo /D (subsubsection.0.6.5.1) >> >>
endobj
4278 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 229.833 258.718 239.068 ]/A << /S /GoTo /D (subsubsection.0.10.2.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 380.986 423.071 392.941 ]/A << /S /GoTo /D (subsubsection.0.6.5.2) >> >>
endobj
4279 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 217.878 316.441 227.113 ]/A << /S /GoTo /D (subsubsection.0.10.2.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 369.031 434.598 380.986 ]/A << /S /GoTo /D (subsubsection.0.6.5.3) >> >>
endobj
4280 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 205.923 397.756 215.158 ]/A << /S /GoTo /D (subsubsection.0.10.2.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 357.634 298.12 368.583 ]/A << /S /GoTo /D (subsection.0.6.6) >> >>
endobj
4281 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 192.144 194.479 203.093 ]/A << /S /GoTo /D (subsubsection.0.10.2.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 347.392 179.455 356.518 ]/A << /S /GoTo /D (subsection.0.6.7) >> >>
endobj
4282 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 180.189 223.271 191.138 ]/A << /S /GoTo /D (subsubsection.0.10.2.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 323.761 226.618 334.66 ]/A << /S /GoTo /D (section.0.7) >> >>
endobj
4283 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 168.224 274.508 179.293 ]/A << /S /GoTo /D (subsubsection.0.10.2.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 301.843 153.283 312.682 ]/A << /S /GoTo /D (section.0.8) >> >>
endobj
4284 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 156.279 185.562 167.337 ]/A << /S /GoTo /D (subsubsection.0.10.2.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 289.768 196.72 300.727 ]/A << /S /GoTo /D (subsection.0.8.1) >> >>
endobj
4285 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 144.314 300.033 155.382 ]/A << /S /GoTo /D (subsubsection.0.10.2.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 277.813 285.168 288.882 ]/A << /S /GoTo /D (subsection.0.8.2) >> >>
endobj
4286 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 132.478 227.614 143.317 ]/A << /S /GoTo /D (subsubsection.0.10.2.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 265.858 215.52 276.817 ]/A << /S /GoTo /D (subsection.0.8.3) >> >>
endobj
4287 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 122.236 238.005 131.362 ]/A << /S /GoTo /D (subsubsection.0.10.2.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 253.903 278.842 265.081 ]/A << /S /GoTo /D (subsection.0.8.4) >> >>
endobj
4288 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 108.568 286.653 119.517 ]/A << /S /GoTo /D (subsection.0.10.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 241.958 207.39 252.906 ]/A << /S /GoTo /D (subsection.0.8.5) >> >>
endobj
4289 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 96.493 244.073 107.452 ]/A << /S /GoTo /D (subsubsection.0.10.3.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 220.08 343.181 231.048 ]/A << /S /GoTo /D (section.0.9) >> >>
endobj
4290 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 84.538 240.317 95.606 ]/A << /S /GoTo /D (subsubsection.0.10.3.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 208.075 222.155 219.033 ]/A << /S /GoTo /D (subsection.0.9.1) >> >>
endobj
4291 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 72.583 219.285 83.651 ]/A << /S /GoTo /D (subsubsection.0.10.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 196.119 221.168 207.188 ]/A << /S /GoTo /D (subsection.0.9.2) >> >>
endobj
-4296 0 obj
-<< /D [ 4294 0 R /XYZ 78.37 808.885 null ] >>
+4292 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 183.726 250.508 195.681 ]/A << /S /GoTo /D (subsection.0.9.3) >> >>
endobj
4293 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 367 0 R /F15 334 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 172.209 209.691 183.278 ]/A << /S /GoTo /D (subsection.0.9.4) >> >>
endobj
-4306 0 obj
-<< /Filter /FlateDecode /Length 1098 >>
+4294 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 160.254 235.007 171.213 ]/A << /S /GoTo /D (subsection.0.9.5) >> >>
+endobj
+4295 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 147.86 331.933 159.816 ]/A << /S /GoTo /D (subsection.0.9.6) >> >>
+endobj
+4305 0 obj
+<< /D [ 4303 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4302 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4332 0 obj
+<< /Filter /FlateDecode /Length 4209 >>
stream
-xڽn#7EU|ь=,l3lE^zo 0nwJyOy;~9^>5ײ丝xBq"u+98vsI/Ͷj;|1{>v$|7;z4_l$-/~i5|_fWK>ctAO$NKc].҅
-K*MW+g;tVwbi;tiZnјnNjuDmRU.GvhN;MF"Mۤ&Y4X4!Y46jiVwju$lu|IEFhi;KͩYX,I>V5Nyw~wV›Udq^Y|ܷM`؆amHzچm8h؆m8h؆a!im8h؆m(zنam8!im8z؆cah؆am(zmn̵ls1ER;`)~dXhQɺ+-j2$Au6"F1631kˎr]ʴcHqG_y9y>zq<8z, <8˃<8˃}>GvyEXITWEc<:rGDǣ?kM: Os4:GC$=NK s4:IhGXIhG#8E+[ARo~Li[>Ot8EgC?6hAG8w{ׯfgգ`tzFgGh(]<e P0L@O0
-Frp4$=Ã=c$= hdE)R7G_lory)k Dg[S]Gcw @w!g[ zw7;?
+x͎Ὧo4/0h{5@wA3lrT)T|`0󸛲Hu/mto?ڬS? /?_2M_kک{ֶc߶ c:tCqio?~>im}ϟ־[ r[^K7>Z.~~/`X/ l_~ڴ߷_/>Etko<KeB3#}0垩 c{zjrs=7 ^ylQ&,t5׮^MJ,TvMW qj>.&!qNƸX!.7]MB\fj +]M24݀u\&&C;妫Ѝqj2ĕjYm\%.7]MaM懸Ra8k3XsӍt-:t->.7]Kسu>W=
+OivL^R}Wc쟥F_)p$N
+%L;L;P+L;L;L;L++L;L;L;P+HP0P0P0P@P0P0CCBCCCt ^-]h։t;1<oJ6N^veHHbP߱X珫inI'aY=fECaXf5bEaW5^ .aW=[heXaV\EcaMU=TLE#2Qw8 ԰ЁvMTI<Qu٦b\;xϻYt2ci^ɮ8ZH]q] ] 
+]
+
+
+K,v-v.v/V0v1`̀Z```@cS9OXiY8+uW3'^m88ú0ΰ3 8EqfSRRsIvHVGVF!eXeX eX e8POOUOs<v;V:V9V8!dXdx&&Ĺ + +{/+IIrh]U:Q} U9~UK>v?v@VAvBvCvDVE VFvGvHvIVJ.-a1a5a9Z=aAa:Y'j5iGiWigҕ2аLcW yWI|
+oxv $?\DM}r+CZ~V}v_DؓaN=7dVSaM=3dX20DaOK5,D8JD=)֠DsaI=% .Cr6#0կov=kʷWJfzR_/YNQvrG -u2mioL{Z-n.r֦˴]2u~C5cVwvVM׷~?9-^Z jf籡։l}&if粙l9 }Ni`$9 9 }NiWCkgʹw5ڹX{L{i_3lkKvvvVvνfֽZfڽfڽfڽFz84Ʊ=|VOeVRriii\F]F]F]FUFKvvVvvvV!VvvvV.edededeZeded:YjiiiRƽW5׵~ٲ1|m]WnϯgFԾO Ӡn%WCpx'!Z!@ii
+:\z;\X+PpjPW.ededeZededededZeXedededeZeDiiiji\Ff]FUF]F]F]FK:1Ӑc|󼜕1Q~X7}vD'b݂:wawiwiw ju -------------KvvvVvb݂ZbbbBtkYq3|Dv'<HރN=e3Aϴ=L{3Aϴ=k3Aϴ=Pk#]=L{3A=LAϬ=L{3Aϴ=e6*Ǹa/{$(3=Tᇄ^J;.tC|rۙг:Vx2i֤eړiOZ=i֤XiOZ=iZ2ieړiOZ5ie:OZf=i֤eړiOZ=i.v$#!v6iWk\OwfޱRv}\'xΧx)}iC=˞?ҥGLGLGLGPGLGL1A111!]z}׬cuأ<_8, ].svvvV.bbZbbbbZXbbbZBiii ji\.f].U.].].].K: jZrofPoji7i7i7LLLLLK3v3v3V3v3v3v3V3!V3v3v3v3V3.ddd̈́Zdd:7Y7j5i7i7i7̽ oDkoPڷF7777sߘvߠVߠVߨ}Z}Z}Z}:7777sߘvߠVߠVߠVߨ}Z}zչoPoPoPoLo Դk~Է>gm
endstream
endobj
-4305 0 obj
-<< /Type /Page /Contents 4306 0 R /Resources 4304 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4143 0 R /Annots 4308 0 R >>
+4331 0 obj
+<< /Type /Page /Contents 4332 0 R /Resources 4330 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4182 0 R /Annots 4334 0 R >>
endobj
-4308 0 obj
-[ 4292 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R ]
+4334 0 obj
+[ 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R ]
endobj
-4292 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 758.012 231.609 769.081 ]/A << /S /GoTo /D (subsubsection.0.10.3.4) >> >>
+4296 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 758.132 184.546 768.971 ]/A << /S /GoTo /D (section.0.10) >> >>
+endobj
+4297 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 747.89 182.752 757.016 ]/A << /S /GoTo /D (subsection.0.10.1) >> >>
endobj
4298 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 746.057 257.761 757.016 ]/A << /S /GoTo /D (subsubsection.0.10.3.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 734.222 281.114 745.17 ]/A << /S /GoTo /D (subsection.0.10.2) >> >>
endobj
4299 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 734.102 432.127 745.17 ]/A << /S /GoTo /D (subsubsection.0.10.3.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 722.147 266.498 733.215 ]/A << /S /GoTo /D (subsubsection.0.10.2.1) >> >>
endobj
4300 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 722.147 350.832 733.215 ]/A << /S /GoTo /D (subsubsection.0.10.3.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 712.025 308.71 721.26 ]/A << /S /GoTo /D (subsubsection.0.10.2.2) >> >>
endobj
4301 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 712.025 276.381 721.26 ]/A << /S /GoTo /D (subsubsection.0.10.3.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 700.07 268.292 709.305 ]/A << /S /GoTo /D (subsubsection.0.10.2.3) >> >>
endobj
-4302 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 698.236 373.667 709.305 ]/A << /S /GoTo /D (subsubsection.0.10.3.9) >> >>
+4307 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 686.401 208.436 697.35 ]/A << /S /GoTo /D (subsubsection.0.10.2.4) >> >>
endobj
-4303 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 676.378 142.892 687.198 ]/A << /S /GoTo /D (section.0.11) >> >>
+4308 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 676.159 258.718 685.395 ]/A << /S /GoTo /D (subsubsection.0.10.2.5) >> >>
endobj
-4307 0 obj
-<< /D [ 4305 0 R /XYZ 78.37 808.885 null ] >>
+4309 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 664.204 316.441 673.439 ]/A << /S /GoTo /D (subsubsection.0.10.2.6) >> >>
endobj
-4304 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 334 0 R /F22 367 0 R >> /ProcSet [ /PDF /Text ] >>
+4310 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 652.249 397.756 661.484 ]/A << /S /GoTo /D (subsubsection.0.10.2.7) >> >>
+endobj
+4311 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 638.471 194.479 649.42 ]/A << /S /GoTo /D (subsubsection.0.10.2.8) >> >>
+endobj
+4312 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 626.515 223.271 637.464 ]/A << /S /GoTo /D (subsubsection.0.10.2.9) >> >>
+endobj
+4313 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 614.55 274.508 625.619 ]/A << /S /GoTo /D (subsubsection.0.10.2.10) >> >>
+endobj
+4314 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 602.605 185.562 613.664 ]/A << /S /GoTo /D (subsubsection.0.10.2.11) >> >>
+endobj
+4315 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 590.64 300.033 601.708 ]/A << /S /GoTo /D (subsubsection.0.10.2.12) >> >>
+endobj
+4316 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 578.804 227.614 589.644 ]/A << /S /GoTo /D (subsubsection.0.10.2.13) >> >>
+endobj
+4317 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 568.563 238.005 577.689 ]/A << /S /GoTo /D (subsubsection.0.10.2.14) >> >>
+endobj
+4318 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 554.894 286.653 565.843 ]/A << /S /GoTo /D (subsection.0.10.3) >> >>
+endobj
+4319 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 542.819 311.739 553.888 ]/A << /S /GoTo /D (subsubsection.0.10.3.1) >> >>
+endobj
+4320 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 530.864 244.073 541.823 ]/A << /S /GoTo /D (subsubsection.0.10.3.2) >> >>
+endobj
+4321 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 518.909 240.317 529.977 ]/A << /S /GoTo /D (subsubsection.0.10.3.3) >> >>
+endobj
+4322 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 506.954 219.285 518.022 ]/A << /S /GoTo /D (subsubsection.0.10.3.4) >> >>
+endobj
+4323 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 494.999 231.609 506.067 ]/A << /S /GoTo /D (subsubsection.0.10.3.5) >> >>
+endobj
+4324 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 483.043 257.761 494.002 ]/A << /S /GoTo /D (subsubsection.0.10.3.6) >> >>
+endobj
+4325 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 471.088 432.127 482.157 ]/A << /S /GoTo /D (subsubsection.0.10.3.7) >> >>
+endobj
+4326 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 459.133 350.832 470.202 ]/A << /S /GoTo /D (subsubsection.0.10.3.8) >> >>
+endobj
+4327 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 449.011 276.381 458.246 ]/A << /S /GoTo /D (subsubsection.0.10.3.9) >> >>
+endobj
+4328 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 435.223 373.667 446.291 ]/A << /S /GoTo /D (subsubsection.0.10.3.10) >> >>
+endobj
+4329 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 413.365 142.892 424.184 ]/A << /S /GoTo /D (section.0.11) >> >>
+endobj
+4333 0 obj
+<< /D [ 4331 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4330 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F22 371 0 R /F15 338 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1 0 obj
<< /pgf@ca1.0 << /ca 1.0 >>>>
@@ -14026,28 +14079,28 @@ endobj
3 0 obj
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
-4310 0 obj
+4336 0 obj
[513.9 ]
endobj
-4312 0 obj
+4338 0 obj
[686.7 0 0 0 0 0 0 0 0 0 0 560.2 0 0 0 0 0 0 571 702.2 706.8 0 0 0 686.7 ]
endobj
-4314 0 obj
+4340 0 obj
[513.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 399.7 399.7 ]
endobj
-4315 0 obj
+4341 0 obj
[525 ]
endobj
-4316 0 obj
+4342 0 obj
[ 3 [ 602.1 ] 5 [ 602.1 ] 11 [ 602.1 602.1 ] 38 [ 602.1 ] 68 [ 602.1 602.1 602.1 ] 72 [ 602.1 602.1 ] 75 [ 602.1 602.1 ] 79 [ 602.1 602.1 602.1 602.1 602.1 ] 85 [ 602.1 602.1 602.1 602.1 602.1 ] 91 [ 602.1 ] ]
endobj
-4318 0 obj
+4344 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xڛ"w
endstream
endobj
-4319 0 obj
+4345 0 obj
<< /Filter /FlateDecode /Length 11571 >>
stream
x| |UﭺU%tv& &Av"J  IL,cC@D ""(.({TԙqGapF'>PVu6P~Ҟ>n{sJxr%*oܱ?3oԵF{1B׭+8EH4̽Pr~cC;zEBү%$ƀϯvTM(OjĄeuG6Wƿ.ŵ7| T%2Za-mO2/VZ}-Zq}W}[{mJtZBbtMD&D/A& ^U1`T1D+ɪDPeRQ_'QQC*l3,#/h? ىDF1+yJ,|^2y Fˑ+ׄC'·?E bqG|EW35NgEG;e
@@ -14083,10 +14136,10 @@ R kBX_"PSU;~@1~1nc̍1c|$a=b[0\Hx $Nchbo
iLOׯ+WkuWJ^)_^[ ]IVU[شVW
endstream
endobj
-4317 0 obj
-<< /Type /FontDescriptor /FontName /GMFTGJ+DejaVuSansMono-Oblique /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 4319 0 R /CIDSet 4318 0 R >>
+4343 0 obj
+<< /Type /FontDescriptor /FontName /GMFTGJ+DejaVuSansMono-Oblique /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 4345 0 R /CIDSet 4344 0 R >>
endobj
-4320 0 obj
+4346 0 obj
<< /Filter /FlateDecode /Length 477 >>
stream
xڍOo0=8!h"TD
@@ -14097,22 +14150,22 @@ xڍOo0=8!h"TD
1|g:0[7K{>w_ZŻ+j7ZIjl{|6K/?'
endstream
endobj
-580 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /DescendantFonts [ 4321 0 R ] /ToUnicode 4320 0 R >>
+586 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /DescendantFonts [ 4347 0 R ] /ToUnicode 4346 0 R >>
endobj
-4321 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /FontDescriptor 4317 0 R /W 4316 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4347 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /GMFTGJ+DejaVuSansMono-Oblique /FontDescriptor 4343 0 R /W 4342 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4322 0 obj
+4348 0 obj
[ 3 [ 602.1 ] 6 [ 602.1 ] 11 [ 602.1 602.1 602.1 602.1 602.1 602.1 ] 18 [ 602.1 602.1 602.1 602.1 ] 29 [ 602.1 ] 31 [ 602.1 602.1 602.1 ] 68 [ 602.1 ] 70 [ 602.1 ] 72 [ 602.1 ] 74 [ 602.1 602.1 602.1 ] 78 [ 602.1 602.1 602.1 602.1 ] 83 [ 602.1 ] 85 [ 602.1 602.1 602.1 602.1 602.1 ] 91 [ 602.1 ] ]
endobj
-4324 0 obj
+4350 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xڛ$
endstream
endobj
-4325 0 obj
+4351 0 obj
<< /Filter /FlateDecode /Length 12930 >>
stream
x |E7^3I&3!!Lgd8$KE@Hb.cLH
@@ -14163,10 +14216,10 @@ WT.Ϭ/kKK+k0O/w)XUI܃,K+,m V<e aぜXW/
Mguv#Kݢe׳oZܬNvΖ :[E:kW"YC%~\2Z]UW+YU@Ud u ]4V#,J9R#veu6Wgst6*2f5oqqu4ʀlΦlj>4VbʥPg,_gSPe٤8e(Ʊ9qDMՄ
endstream
endobj
-4323 0 obj
-<< /Type /FontDescriptor /FontName /FGWDXK+DejaVuSansMono /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 4325 0 R /CIDSet 4324 0 R >>
+4349 0 obj
+<< /Type /FontDescriptor /FontName /FGWDXK+DejaVuSansMono /Flags 4 /FontBBox [ 0 -208 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -208 /ItalicAngle 0 /StemV 86 /XHeight 547 /FontFile2 4351 0 R /CIDSet 4350 0 R >>
endobj
-4326 0 obj
+4352 0 obj
<< /Filter /FlateDecode /Length 507 >>
stream
x}Ko0]8oZH@`F}N!09ɂ?i
@@ -14178,22 +14231,22 @@ PZ0= 0/¼
- fp_ ePdt&4{vծzw;fyC*uWk^?p4
endstream
endobj
-579 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FGWDXK+DejaVuSansMono /DescendantFonts [ 4327 0 R ] /ToUnicode 4326 0 R >>
+585 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FGWDXK+DejaVuSansMono /DescendantFonts [ 4353 0 R ] /ToUnicode 4352 0 R >>
endobj
-4327 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /FGWDXK+DejaVuSansMono /FontDescriptor 4323 0 R /W 4322 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4353 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /FGWDXK+DejaVuSansMono /FontDescriptor 4349 0 R /W 4348 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4328 0 obj
+4354 0 obj
[ 68 [ 602.1 ] 70 [ 602.1 602.1 602.1 602.1 ] 76 [ 602.1 ] 79 [ 602.1 602.1 602.1 602.1 602.1 ] 85 [ 602.1 602.1 602.1 602.1 ] ]
endobj
-4330 0 obj
+4356 0 obj
<< /Filter /FlateDecode /Length 15 >>
stream
xk`
endstream
endobj
-4331 0 obj
+4357 0 obj
<< /Filter /FlateDecode /Length 10706 >>
stream
x{ xTչ{=3I& .3gd ( $@$7pS&I2d̄-
@@ -14249,10 +14302,10 @@ L/"hB_l
_Q UzEێ4Cێ*mk]#m[`ܺK6xX㹴kZM6ARҨ_*mPo3]K3Tzi&6F^MWeӕdR+rY4Zgg˵{5iٴ&V/W~Ze*<Ch-ϠK%gʹ4C.LK3Zb VEo_ysй[c-z~4yz;/Ξ#^Fg̔gЙhF\3zF^S-O/9
endstream
endobj
-4329 0 obj
-<< /Type /FontDescriptor /FontName /WYCBGG+DejaVuSansMono-Bold /Flags 4 /FontBBox [ 0 -207 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -207 /ItalicAngle 0 /StemV 150 /XHeight 547 /FontFile2 4331 0 R /CIDSet 4330 0 R >>
+4355 0 obj
+<< /Type /FontDescriptor /FontName /WYCBGG+DejaVuSansMono-Bold /Flags 4 /FontBBox [ 0 -207 1000 760 ] /Ascent 760 /CapHeight 729 /Descent -207 /ItalicAngle 0 /StemV 150 /XHeight 547 /FontFile2 4357 0 R /CIDSet 4356 0 R >>
endobj
-4332 0 obj
+4358 0 obj
<< /Filter /FlateDecode /Length 434 >>
stream
xڅMo@+K΁4T8+mxwnevD ü33;/UM=Fk/ؙ
@@ -14260,22 +14313,22 @@ xڅMo@+K΁4T8+mxwnevD ü33;/UM=Fk/ؙ
wXq==mRl
endstream
endobj
-578 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WYCBGG+DejaVuSansMono-Bold /DescendantFonts [ 4333 0 R ] /ToUnicode 4332 0 R >>
+584 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WYCBGG+DejaVuSansMono-Bold /DescendantFonts [ 4359 0 R ] /ToUnicode 4358 0 R >>
endobj
-4333 0 obj
-<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /WYCBGG+DejaVuSansMono-Bold /FontDescriptor 4329 0 R /W 4328 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4359 0 obj
+<< /Type /Font /Subtype /CIDFontType2 /CIDToGIDMap /Identity /BaseFont /WYCBGG+DejaVuSansMono-Bold /FontDescriptor 4355 0 R /W 4354 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4334 0 obj
+4360 0 obj
[ 28 [ 603 ] 35 [ 544 ] 43 [ 544 ] ]
endobj
-4336 0 obj
+4362 0 obj
<< /Filter /FlateDecode /Length 14 >>
stream
xc``
endstream
endobj
-4337 0 obj
+4363 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 852 >>
stream
xmS]LYʈʦ;0sŰb[!Y0vd
@@ -14284,39 +14337,39 @@ xmS]LYʈʦ;0sŰb[!Y0vd
|M -#=ڴJj 6eF>'0TCbddt Yl2ZoV*99Ց!93Dc)|'a
endstream
endobj
-4335 0 obj
-<< /Type /FontDescriptor /FontName /HSGBBJ+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 4337 0 R /CIDSet 4336 0 R >>
+4361 0 obj
+<< /Type /FontDescriptor /FontName /HSGBBJ+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 4363 0 R /CIDSet 4362 0 R >>
endobj
-4338 0 obj
+4364 0 obj
<< /Filter /FlateDecode /Length 370 >>
stream
x}R]k0}ϯ{(E]7A-c6vM$Ƈ%0 sܣ]<su`:FaX5 JA{N+"]R-^u_4Ǔ7{ e{ޫ*OAjR:AҊՁ%> ~'F(9hL)^$_ʭא>t!$חptI4. eəscJeHCdcgp9j!O0JKtq$lBvOe9Qr8..S:gsyB
h AsZA;k7'Z9>FCi&wht#ǽvݍZ|> .$^U\߭ڮP|
endstream
endobj
-567 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HSGBBJ+LMRoman7-Italic /DescendantFonts [ 4339 0 R ] /ToUnicode 4338 0 R >>
+571 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HSGBBJ+LMRoman7-Italic /DescendantFonts [ 4365 0 R ] /ToUnicode 4364 0 R >>
endobj
-4339 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HSGBBJ+LMRoman7-Italic /FontDescriptor 4335 0 R /W 4334 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4365 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HSGBBJ+LMRoman7-Italic /FontDescriptor 4361 0 R /W 4360 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4340 0 obj
+4366 0 obj
[758.1 ]
endobj
-4341 0 obj
+4367 0 obj
[892.9 ]
endobj
-4342 0 obj
+4368 0 obj
[ 28 [ 525 ] 50 [ 525 ] 55 [ 525 ] 66 [ 525 ] 72 [ 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 ] 96 [ 525 ] 98 [ 525 ] 105 [ 525 ] 110 [ 525 ] 112 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-4344 0 obj
+4370 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc````PdP

endstream
endobj
-4345 0 obj
+4371 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1970 >>
stream
xڍV PTroWYQ-UB<JL|:ʣa>.+^]
@@ -14334,10 +14387,10 @@ n(Ի!ss.w #ro>^Gr!^D|㳅)@/#" Ts`
P
endstream
endobj
-4343 0 obj
-<< /Type /FontDescriptor /FontName /OMFOSG+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 4345 0 R /CIDSet 4344 0 R >>
+4369 0 obj
+<< /Type /FontDescriptor /FontName /OMFOSG+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 4371 0 R /CIDSet 4370 0 R >>
endobj
-4346 0 obj
+4372 0 obj
<< /Filter /FlateDecode /Length 437 >>
stream
xڍj0z
@@ -14346,22 +14399,22 @@ u¢k
|Q4N.[Y4r^x4@',kmSr0:YqJ (+u<!:̆,Od.c$4 ͐H@}l!=#H@ih-&Hs1EZ"#mз}Xz@#-S5{+xgۇp œ3ƻxo,x
endstream
endobj
-437 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OMFOSG+LMMonoSlant10-Regular /DescendantFonts [ 4347 0 R ] /ToUnicode 4346 0 R >>
+441 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OMFOSG+LMMonoSlant10-Regular /DescendantFonts [ 4373 0 R ] /ToUnicode 4372 0 R >>
endobj
-4347 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OMFOSG+LMMonoSlant10-Regular /FontDescriptor 4343 0 R /W 4342 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4373 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OMFOSG+LMMonoSlant10-Regular /FontDescriptor 4369 0 R /W 4368 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4348 0 obj
+4374 0 obj
[ 27 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 138 [ 525 525 ] 162 [ 525 525 ] 201 [ 525 525 ] 245 [ 525 525 ] 251 [ 525 525 ] 265 [ 525 525 ] 271 [ 525 525 ] 337 [ 525 525 ] 341 [ 525 525 ] 420 [ 525 525 ] 564 [ 525 525 ] 568 [ 525 525 ] 602 [ 525 ] ]
endobj
-4350 0 obj
+4376 0 obj
<< /Filter /FlateDecode /Length 44 >>
stream
xc``
endstream
endobj
-4351 0 obj
+4377 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 9128 >>
stream
x{`
@@ -14423,10 +14476,10 @@ kUepB|t¶0X؊N`tڧ"cpd`W}zk^P/,{B_ki"r
a)@_1\ẍFӱ< ;?2=e\gb&R؀J5 qzuԈUMӪhXdϑ
endstream
endobj
-4349 0 obj
-<< /Type /FontDescriptor /FontName /FVYUVB+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4351 0 R /CIDSet 4350 0 R >>
+4375 0 obj
+<< /Type /FontDescriptor /FontName /FVYUVB+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4377 0 R /CIDSet 4376 0 R >>
endobj
-4352 0 obj
+4378 0 obj
<< /Filter /FlateDecode /Length 855 >>
stream
x}N8F $$JmH˒6M7
@@ -14435,23 +14488,23 @@ x}N8F $$JmH˒6M7
ʠ5tsjԶd>D唟/M!d's"!/?13]~$?֏ kddR35$?~)Ls"RV%ωKuO$?e?'('~ n>?'ϰ*?K-~HG,~ YV◐P |e"O%]%DY~H,N1~=G'?*#~?3JJLEɏ,D#u&?֏5ʴ~",+|g~H+r+%Yrz.R@9ق#y:9D Y1uNȒő&[ASDi(qLi HF^@"e)!ezB,'JtWDzC.EI~/xݍZ~Y}?ǛiS foe/ߓ-
endstream
endobj
-425 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FVYUVB+LMMono9-Regular /DescendantFonts [ 4353 0 R ] /ToUnicode 4352 0 R >>
+428 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FVYUVB+LMMono9-Regular /DescendantFonts [ 4379 0 R ] /ToUnicode 4378 0 R >>
endobj
-4353 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FVYUVB+LMMono9-Regular /FontDescriptor 4349 0 R /W 4348 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4379 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FVYUVB+LMMono9-Regular /FontDescriptor 4375 0 R /W 4374 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4354 0 obj
+4380 0 obj
[ 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 59 [ 641 ] 63 [ 613 ] 72 [ 513 ] 75 [ 747 ] 77 [ 613 ] 81 [ 636 ] 84 [ 558 ] 96 [ 602 ] 98 [ 458 ] 105 [ 591 ] 112 [ 613 ] 116 [ 613 ] ]
endobj
-4356 0 obj
+4382 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc````Td
B
endstream
endobj
-4357 0 obj
+4383 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2190 >>
stream
x}V TS!܈k\+^"jX]H@_$
@@ -14470,31 +14523,31 @@ $᷹?͢LtWS09t`&iJBo=ݖNFh2+-Ri?rtzx,-W<
sY%r,F2 ;lv>k#C^t:O
endstream
endobj
-4355 0 obj
-<< /Type /FontDescriptor /FontName /SJLYVB+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 4357 0 R /CIDSet 4356 0 R >>
+4381 0 obj
+<< /Type /FontDescriptor /FontName /SJLYVB+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 4383 0 R /CIDSet 4382 0 R >>
endobj
-4358 0 obj
+4384 0 obj
<< /Filter /FlateDecode /Length 441 >>
stream
xڍ_k0)BwጶӾ]2]o&Mrt1ş9'92z-7jdּAu/
endstream
endobj
-414 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SJLYVB+LMRomanCaps10-Regular /DescendantFonts [ 4359 0 R ] /ToUnicode 4358 0 R >>
+415 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SJLYVB+LMRomanCaps10-Regular /DescendantFonts [ 4385 0 R ] /ToUnicode 4384 0 R >>
endobj
-4359 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SJLYVB+LMRomanCaps10-Regular /FontDescriptor 4355 0 R /W 4354 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4385 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SJLYVB+LMRomanCaps10-Regular /FontDescriptor 4381 0 R /W 4380 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4360 0 obj
+4386 0 obj
[ 28 [ 500 ] 50 [ 444 ] 52 [ 778 ] 70 [ 528 ] 72 [ 278 ] 109 [ 556 ] 112 [ 528 ] 118 [ 528 ] ]
endobj
-4362 0 obj
+4388 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``````j````i
endstream
endobj
-4363 0 obj
+4389 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1359 >>
stream
x}Lg
@@ -14505,10 +14558,10 @@ KRm),4Yf:6ͿljYQ[u65 d#&9%uSZEF#gx*{Q
UBuxBS/sEBT!oS_<ߝrl=X^_V1 t@Xx$jZBl!<wIP ,/`<</¤ixa y050m x8`Wc>gL (/zruKձMbF14b_6m =؁6p(#Q CLi(P;:TgyIKa9 hS 7a?ñ x04^k!a1oY6m!^]8p$|澛U\mjKkk>u0|BPP-E=!9Nbh&29qJ3jW#t`|Z:Y|?ž!(cJkC 95`FX$:m~
endstream
endobj
-4361 0 obj
-<< /Type /FontDescriptor /FontName /ZUCODC+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 4363 0 R /CIDSet 4362 0 R >>
+4387 0 obj
+<< /Type /FontDescriptor /FontName /ZUCODC+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 4389 0 R /CIDSet 4388 0 R >>
endobj
-4364 0 obj
+4390 0 obj
<< /Filter /FlateDecode /Length 406 >>
stream
xڍ_K0)Pn
@@ -14517,22 +14570,22 @@ xڍ_K0)Pn
nN'Z$4ǮJ,l 4ţRZz=Tg:Ifסt@W.=MsOPt(4=̓oN& ](b6%^>7}j_TGGH
endstream
endobj
-392 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZUCODC+LMRomanSlant10-Regular /DescendantFonts [ 4365 0 R ] /ToUnicode 4364 0 R >>
+396 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZUCODC+LMRomanSlant10-Regular /DescendantFonts [ 4391 0 R ] /ToUnicode 4390 0 R >>
endobj
-4365 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZUCODC+LMRomanSlant10-Regular /FontDescriptor 4361 0 R /W 4360 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4391 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZUCODC+LMRomanSlant10-Regular /FontDescriptor 4387 0 R /W 4386 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4366 0 obj
+4392 0 obj
[ 28 [ 511 ] 35 [ 460 ] 42 [ 716 460 ] 46 [ 755 511 ] 49 [ 678 460 ] 54 [ 653 307 ] 59 [ 460 ] 63 [ 511 358 ] 66 [ 307 ] 68 [ 307 ] 70 [ 460 627 256 ] 74 [ 897 818 ] 77 [ 562 ] 81 [ 511 ] 83 [ 678 511 ] 91 [ 460 ] 96 [ 422 562 409 ] 104 [ 716 332 ] 109 [ 537 ] 111 [ 743 460 ] 114 [ 664 743 464 ] 118 [ 486 ] 125 [ 562 ] 502 [ 307 ] ]
endobj
-4368 0 obj
+4394 0 obj
<< /Filter /FlateDecode /Length 28 >>
stream
xc``0N\%B], $&
endstream
endobj
-4369 0 obj
+4395 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4953 >>
stream
xڭY \w'j-3:mףVS[뮷Dk+@8 !!$$ >"w@nQzEۭ֭G}۽wm޾7v%\A&ND8 {nڲo᎝{$Km͊M gs@0ADY@\Z0x `noh&w?: A8g4a߅ ~)p/?B& ddrr_ [d4W&JJdɲWϯ և ƧJr2SEXq`[`g`$=*̗qشD$Q)< 2I2I4sA 2Y)ȑRL&& B +Y(زoo`D%!3ELP%}}0,iq"i?\8o]vlݰiMaY,AD&HfŊ2þןwIdi$q­ Bq(+ao3HY@V" kFd3yنlGv"^$9 HtDHd!r ={$a"bTp>A]0qD}3iڤ:0ǧ̞OK?Avzv泎i].ŌgP!j/n-zbob
@@ -14562,31 +14615,31 @@ mf^FHaVb]|[՗kuG buZHSzrި>_j
o3Oa:$d
endstream
endobj
-4367 0 obj
-<< /Type /FontDescriptor /FontName /OSSEGU+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 4369 0 R /CIDSet 4368 0 R >>
+4393 0 obj
+<< /Type /FontDescriptor /FontName /OSSEGU+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 4395 0 R /CIDSet 4394 0 R >>
endobj
-4370 0 obj
+4396 0 obj
<< /Filter /FlateDecode /Length 535 >>
stream
x}Ko0]8ĥBx"MK0ن0%a禕arѷ_#g磌mKxѦ.RRA[[xnR]&8*:3al彮rp?KYܞ:D?QKK]Yg<r͋뺲vބdSeKm B&ˢ'rEe[׫*է[,݈]\dJՖwz41ٵi.ø$LIm<z+&vTo|<s54\RuM^6g- <a$qxt>HşIy$)(-ͦ4-h 4 EQ - hDTA(瓣wn@s TW TAOЈh>IՉ6;\8k?cd`:iDEDLP"  I4m<x``ܾUckۚvWRԍ=wmKFa
endstream
endobj
-377 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OSSEGU+LMRoman10-Italic /DescendantFonts [ 4371 0 R ] /ToUnicode 4370 0 R >>
+381 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OSSEGU+LMRoman10-Italic /DescendantFonts [ 4397 0 R ] /ToUnicode 4396 0 R >>
endobj
-4371 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OSSEGU+LMRoman10-Italic /FontDescriptor 4367 0 R /W 4366 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4397 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OSSEGU+LMRoman10-Italic /FontDescriptor 4393 0 R /W 4392 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4372 0 obj
+4398 0 obj
[ 27 [ 869 559 ] 34 [ 818 639 575 ] 38 [ 575 575 ] 42 [ 831 511 ] 45 [ 319 882 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 904 575 ] 62 [ 900 639 383 436 319 ] 70 [ 607 692 319 ] 74 [ 1092 958 900 639 575 ] 80 [ 864 575 575 786 639 ] 88 [ 319 ] 90 [ 864 607 ] 95 [ 863 474 639 454 ] 100 [ 575 575 ] 104 [ 800 447 575 575 885 639 869 ] 112 [ 607 1189 831 869 607 ] 118 [ 607 ] 120 [ 511 575 671 ] 125 [ 639 ] 284 [ 575 ] 499 [ 571 571 ] ]
endobj
-4374 0 obj
+4400 0 obj
<< /Filter /FlateDecode /Length 32 >>
stream
xc``6/xߏoz€ 8p
endstream
endobj
-4375 0 obj
+4401 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6950 >>
stream
xڕzXW;4ײ3Q 5 EwgYz"(RDQ#%?&Ƙb, 1 ς1ɛ|}\8ٙ繟vgPD" [&X.dwSCv,Hdɉ8B"rDLlZ]4ǧeKwKGPِc?ArMr`1ݏPC(zB2?>rSg,
@@ -14621,10 +14674,10 @@ wU:-kX Ѭ.<Fpy<A߀ƀ7]M^9osȮq>Jꭇ
5y"@-۰ked9P
endstream
endobj
-4373 0 obj
-<< /Type /FontDescriptor /FontName /XTBITZ+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 4375 0 R /CIDSet 4374 0 R >>
+4399 0 obj
+<< /Type /FontDescriptor /FontName /XTBITZ+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 4401 0 R /CIDSet 4400 0 R >>
endobj
-4376 0 obj
+4402 0 obj
<< /Filter /FlateDecode /Length 651 >>
stream
x}]0+s1JA?Fv>PYMt ^7{
@@ -14633,22 +14686,22 @@ x}]0+s1JA?Fv>PYMt ^7{
{Oa&ȅ$"Q<`@0D0Kp&h <l%bt`Q$ .=ù tD`P1 %UP?L)I LIaJ&!$yE'M .iJD`r 3z"oO\cE
endstream
endobj
-367 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XTBITZ+LMRoman10-Bold /DescendantFonts [ 4377 0 R ] /ToUnicode 4376 0 R >>
+371 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XTBITZ+LMRoman10-Bold /DescendantFonts [ 4403 0 R ] /ToUnicode 4402 0 R >>
endobj
-4377 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XTBITZ+LMRoman10-Bold /FontDescriptor 4373 0 R /W 4372 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4403 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XTBITZ+LMRoman10-Bold /FontDescriptor 4399 0 R /W 4398 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4378 0 obj
+4404 0 obj
[ 89 [ 1161 ] ]
endobj
-4380 0 obj
+4406 0 obj
<< /Filter /FlateDecode /Length 12 >>
stream
xc`
endstream
endobj
-4381 0 obj
+4407 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 514 >>
stream
xmQkQ~/Yl݀&(Px1%- i4J=%Kvɺ/n nl%(("^=&GЃx7Ϧwso#A@cq1_9[8/ۊy1f721y I !M}"쎍>cg!|~r#A qT4XzUs`*: -AVY]A1UJ0/A5 KTS
@@ -14656,31 +14709,31 @@ xmQkQ~/Yl݀&(Px1%- i4J=%Kvɺ/n nl%(("^=&GЃx7Ϧ
"4ljPXn64U/ZԠMUh*(X( 3Դ)$
endstream
endobj
-4379 0 obj
-<< /Type /FontDescriptor /FontName /XNTVGR+LMRoman5-Bold /Flags 4 /FontBBox [ -630 -325 2006 1163 ] /Ascent 1163 /CapHeight 686 /Descent -325 /ItalicAngle 0 /StemV 145 /XHeight 444 /FontFile3 4381 0 R /CIDSet 4380 0 R >>
+4405 0 obj
+<< /Type /FontDescriptor /FontName /XNTVGR+LMRoman5-Bold /Flags 4 /FontBBox [ -630 -325 2006 1163 ] /Ascent 1163 /CapHeight 686 /Descent -325 /ItalicAngle 0 /StemV 145 /XHeight 444 /FontFile3 4407 0 R /CIDSet 4406 0 R >>
endobj
-4382 0 obj
+4408 0 obj
<< /Filter /FlateDecode /Length 358 >>
stream
x}Qk0)n;"ڮCXa&gD> /d}޹:`Z쳊L&[es@^V L76s,Yr\5ބ|Z`Żg}UfrU=jSR cgԵPrRj6>$ߨ6V  5ȽYi&dO]`\0?1bΈ7é- PE17u\YۮcnTt?ҮBX8QXWCдO#wJG}5Cc>Aa?uouܾhg!Z8!1JU6-w.հqG~:T
endstream
endobj
-366 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XNTVGR+LMRoman5-Bold /DescendantFonts [ 4383 0 R ] /ToUnicode 4382 0 R >>
+370 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XNTVGR+LMRoman5-Bold /DescendantFonts [ 4409 0 R ] /ToUnicode 4408 0 R >>
endobj
-4383 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XNTVGR+LMRoman5-Bold /FontDescriptor 4379 0 R /W 4378 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4409 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XNTVGR+LMRoman5-Bold /FontDescriptor 4405 0 R /W 4404 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4384 0 obj
+4410 0 obj
[ 27 [ 531 531 ] 31 [ 531 ] 33 [ 531 ] 35 [ 531 531 ] 38 [ 531 531 531 531 531 531 531 ] 47 [ 531 ] 50 [ 531 531 531 ] 54 [ 531 531 531 531 ] 59 [ 531 ] 61 [ 531 531 531 531 531 531 ] 68 [ 531 ] 70 [ 531 531 531 ] 74 [ 531 531 ] 77 [ 531 531 531 531 531 531 531 531 531 531 ] 88 [ 531 ] 93 [ 531 531 ] 96 [ 531 531 531 ] 100 [ 531 531 531 531 531 531 531 531 ] 109 [ 531 531 ] 112 [ 531 ] 114 [ 531 ] 116 [ 531 ] 118 [ 531 ] 121 [ 531 ] ]
endobj
-4386 0 obj
+4412 0 obj
<< /Filter /FlateDecode /Length 25 >>
stream
xc``i}m■r
endstream
endobj
-4387 0 obj
+4413 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 5721 >>
stream
xڍY \֟2J]㒩wRVۺ ԥ*Tqi]XNIH  "ִ֢Vmj_{gMj%ܙ{9s@Dў6z^SRϝV棱>Z?ϏNljx4ļ$"c;9<z>-[2DÄA0i׸&ZoqzrDs]7AT$t3PGht3X?_SOS, U
@@ -14713,10 +14766,10 @@ dWg`+ErK6(aeZZX/ =ݴ^Wٚ.=-=1Qtjtյ{
n`*3%M+aLJq 앥K*h/BC&$`
endstream
endobj
-4385 0 obj
-<< /Type /FontDescriptor /FontName /MOXNPT+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 4387 0 R /CIDSet 4386 0 R >>
+4411 0 obj
+<< /Type /FontDescriptor /FontName /MOXNPT+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 4413 0 R /CIDSet 4412 0 R >>
endobj
-4388 0 obj
+4414 0 obj
<< /Filter /FlateDecode /Length 645 >>
stream
x}Mo0=8ih%Czİp߯wJ+v+aƞgz?xGg>LSաzEݮƶkcrwm2ۙK^rM8if΅NuXo>s?WҖÜoCsh_<qM~)JʆϜsśyM譣a"kMkK{* \i{p~:7uaϬXѥnUu1^h2a9]ևaeE{GaI!t27MuL}g] $26+αx_%PP3phHo!29H 3nҠhL(6E"`@"I3
@@ -14727,22 +14780,22 @@ OA@TDݕ֚HbO] IX'p0Kp{$tWE#"ࢉ:Tx
r Q5yLSMo ^WϦM0ŒӡkUeW0)i)v
endstream
endobj
-350 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MOXNPT+LMMono8-Regular /DescendantFonts [ 4389 0 R ] /ToUnicode 4388 0 R >>
+354 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MOXNPT+LMMono8-Regular /DescendantFonts [ 4415 0 R ] /ToUnicode 4414 0 R >>
endobj
-4389 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MOXNPT+LMMono8-Regular /FontDescriptor 4385 0 R /W 4384 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4415 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MOXNPT+LMMono8-Regular /FontDescriptor 4411 0 R /W 4410 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4390 0 obj
+4416 0 obj
[ 28 [ 549 ] 47 [ 549 ] 50 [ 494 ] 59 [ 494 ] 66 [ 329 ] 75 [ 878 ] 77 [ 603 ] 81 [ 549 ] 84 [ 549 ] 91 [ 494 ] 96 [ 453 ] 98 [ 439 ] 105 [ 357 ] 109 [ 576 ] 116 [ 495 ] ]
endobj
-4392 0 obj
+4418 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc````TPX
endstream
endobj
-4393 0 obj
+4419 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2201 >>
stream
xڭV PQ#E Y]ȏS[[C
@@ -14755,10 +14808,10 @@ bEeli2vRӣ%IH=Ҫp P"S|TRQ$OI\%Q b-N(JC
`F7fgid]{7?uꨤʱA# vvPvW2ILh> oұ1ѷS؇A 6kZ mn
endstream
endobj
-4391 0 obj
-<< /Type /FontDescriptor /FontName /GAKDMK+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 4393 0 R /CIDSet 4392 0 R >>
+4417 0 obj
+<< /Type /FontDescriptor /FontName /GAKDMK+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 4419 0 R /CIDSet 4418 0 R >>
endobj
-4394 0 obj
+4420 0 obj
<< /Filter /FlateDecode /Length 432 >>
stream
x}j0z
@@ -14766,23 +14819,23 @@ uHeC7Ӧ-I(:$GKFyJshFWA=DF7p!QyW
@i4 1$˰!H! !9vY׼l~,~/wƸK',|I`æ{z[/4?
endstream
endobj
-349 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GAKDMK+LMRoman8-Italic /DescendantFonts [ 4395 0 R ] /ToUnicode 4394 0 R >>
+353 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GAKDMK+LMRoman8-Italic /DescendantFonts [ 4421 0 R ] /ToUnicode 4420 0 R >>
endobj
-4395 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GAKDMK+LMRoman8-Italic /FontDescriptor 4391 0 R /W 4390 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4421 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GAKDMK+LMRoman8-Italic /FontDescriptor 4417 0 R /W 4416 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4396 0 obj
+4422 0 obj
[ 51 [ 611 ] 56 [ 611 611 ] 78 [ 611 ] 82 [ 611 ] 100 [ 611 611 ] 106 [ 611 611 ] 121 [ 611 ] ]
endobj
-4398 0 obj
+4424 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`
< 
endstream
endobj
-4399 0 obj
+4425 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1695 >>
stream
xuU}PSW%+4-}O{BkQP`@E ZyI
@@ -14797,33 +14850,33 @@ E0Hw/l:NhW$
{>4`YQ$4d쭗6}hб{F}p$pxse\ɦ|D;2ukwW j@FQCCsA*<O0'Niu
endstream
endobj
-4397 0 obj
-<< /Type /FontDescriptor /FontName /XENFPT+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 4399 0 R /CIDSet 4398 0 R >>
+4423 0 obj
+<< /Type /FontDescriptor /FontName /XENFPT+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 4425 0 R /CIDSet 4424 0 R >>
endobj
-4400 0 obj
+4426 0 obj
<< /Filter /FlateDecode /Length 404 >>
stream
x}K0w.jSH'fTT5:]'0S=799Im\0)Pf?Ӝ4 Ū eFj1Vl%4"lq"ٵX"Sbq^mNe;TTvDy5`
n/ԅPr QRj~,%̮ %ﳐ\߭'Q`ܓe&*ۼ%f<+2@hfEouQ y FPl6 !O*g#tG0S<eSyA21!&+s%Uthg(Tہ]3yĿ=<FOASSS>K.#?Vims=UnG}P-mV
endstream
endobj
-347 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XENFPT+LMRoman6-Regular /DescendantFonts [ 4401 0 R ] /ToUnicode 4400 0 R >>
+351 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XENFPT+LMRoman6-Regular /DescendantFonts [ 4427 0 R ] /ToUnicode 4426 0 R >>
endobj
-4401 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XENFPT+LMRoman6-Regular /FontDescriptor 4397 0 R /W 4396 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4427 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XENFPT+LMRoman6-Regular /FontDescriptor 4423 0 R /W 4422 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4402 0 obj
+4428 0 obj
[ 28 [ 510 ] 35 [ 549 ] 43 [ 472 ] 50 [ 472 531 ] 55 [ 325 531 531 ] 63 [ 549 ] 66 [ 253 ] 70 [ 519 ] 72 [ 253 ] 75 [ 844 ] 77 [ 549 531 ] 81 [ 531 531 ] 84 [ 549 ] 96 [ 363 ] 98 [ 407 ] 100 [ 531 531 ] 105 [ 384 531 531 ] 112 [ 490 ] 114 [ 726 ] 116 [ 490 ] 121 [ 531 ] ]
endobj
-4404 0 obj
+4430 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc``0<4-aM

endstream
endobj
-4405 0 obj
+4431 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2548 >>
stream
xmV TW!L&jL+1Z-*`h "Q0$PѢ
@@ -14844,10 +14897,10 @@ b`BSK)i$mE CbcTEYz,ڿѿ+8+rZnc[GL@
+_\DeշS?|f5t) MXm-92TNf#2˄~ȹS}&6߹|VT&c5|:&)O8$`?0ݼrW wk7 '&c
endstream
endobj
-4403 0 obj
-<< /Type /FontDescriptor /FontName /PTIWQK+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 4405 0 R /CIDSet 4404 0 R >>
+4429 0 obj
+<< /Type /FontDescriptor /FontName /PTIWQK+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 4431 0 R /CIDSet 4430 0 R >>
endobj
-4406 0 obj
+4432 0 obj
<< /Filter /FlateDecode /Length 496 >>
stream
x}O0=dqH`"-]Am!h$p"'9k9REʏy3ƞsYGGީ{U~)o4e%ٽ C}b{U9ul6-dy +)1}@!%/d;_
@@ -14857,97 +14910,96 @@ A3 94D\b
*l@ET@aR-ic(LC0%cψ<P3q8/8ĝOq_~՚XWJo]d+fK*Iԍɲ_ o/()
endstream
endobj
-346 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PTIWQK+LMSans8-Regular /DescendantFonts [ 4407 0 R ] /ToUnicode 4406 0 R >>
+350 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PTIWQK+LMSans8-Regular /DescendantFonts [ 4433 0 R ] /ToUnicode 4432 0 R >>
endobj
-4407 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PTIWQK+LMSans8-Regular /FontDescriptor 4403 0 R /W 4402 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4433 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PTIWQK+LMSans8-Regular /FontDescriptor 4429 0 R /W 4428 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4408 0 obj
-[ 27 [ 796 531 ] 34 [ 752 590 ] 42 [ 767 472 295 295 ] 47 [ 590 ] 49 [ 723 472 ] 54 [ 693 325 531 531 834 531 ] 62 [ 796 590 354 383 295 ] 70 [ 561 664 295 ] 74 [ 973 885 ] 77 [ 590 531 ] 80 [ 826 531 531 723 590 413 413 ] 88 [ 295 826 ] 91 [ 561 ] 95 [ 782 414 590 419 ] 100 [ 531 531 531 ] 104 [ 767 413 531 531 ] 109 [ 590 ] 112 [ 561 1091 767 796 561 ] 118 [ 561 ] 121 [ 531 ] 123 [ 885 ] 125 [ 590 ] 284 [ 531 ] 499 [ 502 502 ] 502 [ 295 ] ]
+4434 0 obj
+[ 27 [ 796 531 ] 34 [ 752 590 ] 42 [ 767 472 295 295 ] 47 [ 590 ] 49 [ 723 472 ] 54 [ 693 325 ] 57 [ 531 834 531 ] 62 [ 796 590 354 383 295 ] 70 [ 561 664 295 ] 74 [ 973 885 ] 77 [ 590 531 ] 80 [ 826 531 531 723 590 413 413 ] 88 [ 295 826 ] 91 [ 561 ] 95 [ 782 414 590 419 ] 100 [ 531 531 531 ] 104 [ 767 413 531 531 ] 109 [ 590 ] 112 [ 561 1091 767 796 561 ] 118 [ 561 ] 121 [ 531 ] 123 [ 885 ] 125 [ 590 ] 284 [ 531 ] 499 [ 502 502 ] 502 [ 295 ] ]
endobj
-4410 0 obj
+4436 0 obj
<< /Filter /FlateDecode /Length 32 >>
stream
-xc``0Mxۿ
-a 8
+xc``0M.~w_~0`@
+
endstream
endobj
-4411 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6724 >>
+4437 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6547 >>
stream
-xڝZ\׺eTd-3:-b"e KY@@X:eYzeaY `oQވDch<; x_r}-v9+ !,ڰ6)\gmy]̟-G'9!/Z [vDE_wF w
-mqpw66Qz,9C"1,C_b ~y7#֍hM]Ma.0AͪWq(/Q^:+ WG%q(( 6tlƇ՟L}PL6
-ևt@}Ce@wEּ!֠<
-IJ8ka-ʎ@al'\m<Gv `$#!f&亿5/ޕm 3>7M+QnOhf[@NU%4FԂb9yPW{-2CM]M /a6-Y1ǣKF23ѦO-W\VBn_$: rB | ΃pvcMc'uJ I)j64A1o<nZ;
-7rd( 3K+g?^L6pd#Yv
-`Gɭ) 8t>uml5`ۃq]8ϙ`} =ި1RqIb4)0t>Zɠo)<CK&`̛$%9e 3aZ(x[ ?)ވUYA]'̸*g:;:Fa'yP3ʎq~Ggu4lΝh1h @b<!uU.ҬM 웆F*ؾUؾ#&bs6qFap~GO unLo`w\^g|'0𣒵hHN L00~Q#^ťaᴭRsuU` ng@%s!p0r&g?V&4
-w~~utϪ rD]po=pS7d3e.)BZz(MWsK-\y-tMtaÝwJ4\>+)npؕ92/رګ, ]K,E(Ww'z/P8Zsڷ٧5n &2r]P~2=+# j>T<v@D}p5k*;LV'%EyEY,D*H
-ĭCP2{Cy(20߁B8(KwR_ptY{8z4܍®r/&Rsn&1Fu"rP#էOR1q"#́7PλbzZiM' QVN7MO|wd-Ж#mKW/x`Z5|\F!lH
-j\MZn0LSg0;.[ͶU#[lv%yG+3-ScayHF
-6AbfaV'r<ARhَϲ(U19&X7VV$=]wH *z<FA?ɡp9٬\QTg·,IINC"Y4Y
-{;@kmnA8^Rn$NOgzfv )K
-̿)7Z)X
-v%*X,5>gWy u$07Ǡ~#'!Hhi=QɆH,]6nXё4)SVu} Gp8a?x,vYSKY*@ |4fW՗1׮Jqe;a9FfBؕKځx)pip7;S 4f($@#i0 $ਏ<bi8h $P4t "0j"|J~}Ӳ$N-
--`w3ե1 :>v>
-}/L!IRy,%p=Lð?dNeZ=OΈܱ=.E4*JdE#=/AH(^wN*d*hrUah !Lowb14Kt مOdeR\ ^8#o<+~s~&lI*B@`8+ kGdTP*A>U8
-TT|62T`+ƈno:9H~ڧLJS>֚y' e<p衺J-`S =y3svWsബ5$ Fm=i :[I:ȋ1 )$5(¹sאE=#ܴ&;K߶:8Іaj}Zك=Z&2_ޫ3/L \Q, jmNfՃR
-xi=m4v.yP6奘@=@~i%&+iyeTieY?< 5>upfe첐$7ud[/ZSx"
-4SgcR yLa5k̎5[Ա Z\Jr=MzV6yYfTy珞;,,>D0dD1 ~/ 6/Se-7_)f?<Q_%h< N y
-J$EɌ<ñ]W=죟He^M(l&.N
-1Ե#dr% QYPM
-[RԬZP@ qa a)7~z_p|+\![ 
-.`x(67~b e/,|rջ4esw9xTEVKk|C[b9U}3~2HOԬOܛMGe"84K=,,=aJ,WV("l^pw4 pu;j@suX^ AŐօͦa]8- d5oʴˌ8b;j?:|>ы~=٠"*C4A4ωh-#б8,$-&gl[pFrq~擛@=C%~d,=o{>'5 F~y-KN#1idDб8'=+Ey U G tX>ѻsѾ|&?# G/*65iY Btz9#V|$InW4%Tm< j\n7=UᲢ?t
-M^#i6~?_dy~%ҧ2Yyi\g¥4U!Svo7T]
-we:+A> 5&'0V5 -J
-zm= q:?{RJL4
-@j]iԖUܽ-Yע-c"sZSKB B”rӝXQu)ۄcApV`K^\r+lQb̈́m*ݸ좣7b<?5]u^J6Q>—\9$} 5 s*ZĔR.w XeSӼtuaף
- I2,EQ  5]K[xWڷ:<!m39gkW1DbYW$~#I`!ٜrPɟu/ƍ&ܨ7( t.>%d,gkD4xyscݿU'
+xڝY\׺eʸFgtf%%X=v+ e KY@@z,˂ޖeA,-j1$z1DMxw[ 73sĀ@ yLJwnyg
+׀ve^r`X~b?F<'[VƒVzѢ/{DcB7-a<XM0a5 Hb    /:~ƌ)#}Y3fkk>Γ.quSH]<kt"@&v{JҭYp+X2^'D25D! K2m[JW(u>N* ɤJeӕ^`X&d_(d>mjn7l^O)TK=dJWy%
+7jYGAC&i;-aGL'f9<b>XH,"K
+b%XC%&b3Jl#Nb7B%\ 7ƒ7C~?HD$ˆ"<<bObbgD`A"pP.|:szŕ2ò[+i tjյ'b!D)PaTY6wG $NF;l$7kTMр7z詣ƈ,&&`;LpAa$gr((?EDS8{OwKjOs&ETVKgt]`,"łd@o
+֗㴢%@uCP_yCAyט 6 wa.#>o%Gyc, ؞1wjjqnYٳ89IJa廲M47k]mGTN/kerCNJiܷ4vU8CZ$aC\4MOS?QzV/A
+X0T^U{f{Voyr%:n!ۊ)>ג-Db̈́Ic,m 7rzd'H*vRg5p 8k~
+c<v
+PCCEE]p߈AG|#d8bB əS}C˃+
+Z[UTd:!;Ymh34svQ#LĬ3IKESAÐp!?N6M:Z  u8Kո+B0NUM!\죕lSU$~L6pCiFz<_"iAa *M}EɧqFX&?^81u/%Q
+L5(:"?8EI%)A8 ~I )?T4e\e!AQXmZ:tcEr?k`߄/?to<$0 m| ٔ{0dV}" ޓpNƁ0@o^ō>
+-^(x&?IG.QkcACɯeuGb
+|_zK+aj/_Xw"Lk`{5!y
+'"?0Cfaڶ*dծ"hefex6+O˽ 7.ԯPh -tQ`>jM0$&$;~xT9iςB&cj䨁SPe@@72XAz}íz/phD9լ֌ ܘ]њtΗ,MˈI#Y4Y@sL):]W;EZ"0((ܲ <h?Og6|ǡ23~mW_ AkW[o= [}v3+<je KRff/]_+|9O} T"8$*KL*'A`$ځѷUsrshb23
+|]^z4Q
+CɯO0vVIUʺ:G0\\Q!𱱅m7cЧZ+W6wOpc#䷌0y<&uws CWM'9kzG6>Pgwu^nr7x\$y2M`{W"$nzD\C!pН,"²~6L $p6 r4w 2q ݔe2lҏhǦ;K$u0|Kvze.Ԇ'bF rN'Ň<Ry2s$Pf\_Q$#MϢ1P74<
+A1 _ѺԬ;YD#BV4R>Bwy GB~%|@_F0x,IXJѨz:Fpbc05KSI9E'Nf`! 
+Zcȫ's>ff2Dv @R BAFpxDGJPQNTJ~ūJBߪv|Otww:aa82~H]T- }qo|yˎ[qXVL
+f[1HEpI!e?G?EhMeѝ7b.pQ y䙘}+u`o'KuxMe*[g^ژ!A^X̼3zMnd׃2 dlY}eU7v/pZgpYkK\LuqVMO!?7Bt\ǒS*x:8Np2|rY'V-s"J4Gc5ILQGժ${ε[4ݙz!|/PẻEp\jY|rlQȊf@>m'@|MzNmhrF .ՂN))(t `2=G躊
+ѷɰSv޸u.Ȼ-;^U !'ɏωJMaQJ
+]LN|~QfF,D/ty ~p<oY!Go98cQRAAe5ckF>jbDgeA5A0-jL2ryJWRZP@`Af;aYܔ? /W8LrV\!XhSM#)o8mRAR]^zq,>= '0<#͍>Ls3j?$_9cp byVGeM~L-m CٜLakt/W7ZKKLA1{B|ĦqՉirOǭN{cRi3땕~Hw۟C1OL69=UwLL^B h]Tl**u܅3p[hKmDV3f:TPn,<QvXw_ D9dF8yNl^j
+SZcq[Id{m[J޾nԖ,Օ@5Cel{>75 F~y-[g=@+dzN:;4W&=@X%J
+Az]eT!:TZVYh2QyJ̭ aKggwNj gWk1azih톕xމ%/~e~6NvhkzvzvRvɱN3
+kг$-츰Ѿϊa\9} 5 sjZ2.o+Xtw.aσ
+9mTZ 4
+OkTWnn>!s\V$8m`Lgw!1,ǚ+ I`1ٜʡ?] pKryEI,.P@>r]]bD?XӾSш]mv<
+m)̠(x׻:Y7դ1A6o؄
+"@]U>-`54 4YY5,mNi5 V
endstream
endobj
-4409 0 obj
-<< /Type /FontDescriptor /FontName /SEKAPH+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 4411 0 R /CIDSet 4410 0 R >>
+4435 0 obj
+<< /Type /FontDescriptor /FontName /RXERYS+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 4437 0 R /CIDSet 4436 0 R >>
endobj
-4412 0 obj
-<< /Filter /FlateDecode /Length 638 >>
+4438 0 obj
+<< /Filter /FlateDecode /Length 635 >>
stream
-x}M0=dɧ + 
-9d;i)/J1}(LMݽܮYzfձ:LGك(e~ʶ+kg*Vuev9d\%Uv2{"?ýeUڙDw.['g-Յ8íi0IVȳ.gUMdey]Ȯrf"F%T_qNgNh忳򗺐E~bie
-'BpJ-釖6Ȍ,> D1Mс2g IfDfDkĦ rE<S@dF3,"q"rB5f!:p6 p"8X, ;bXǘ`Sqff1ΝL%9\B'%q"L00 ;&(+d] s43" LI/ t~>~=O|oMZ"P
-YԾ6wV_7J%?︦n*pQ8
+x}Mk0C =-[jJ0td llq e<̣Qя?/cvmKxѪίR*h:߫VIr-Ԑ串:+aweWW~w|dU'2ew̕ڮ3  0ֺX֕aMȒMSTъ{aĊ22WVjo6cӹ[[g6hrצ(/MYNkV)6&Z{sZs5ECu&UffAfzJVO@0||
+PahH##A"PA+G档 2cG<D~H &@1):Pr r!Z#8
+D.SE,@p#Sňȅj &! qtHo@pDp8`8I;XG'`%SJpff NZLc.'&;pIp~.TfcIf %0I3#Ĕ$0OI'C9Iޛ(s%(@4M^о61kۚ]YNAԍ]>:fKo/e
endstream
endobj
-345 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SEKAPH+LMRoman8-Regular /DescendantFonts [ 4413 0 R ] /ToUnicode 4412 0 R >>
+349 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RXERYS+LMRoman8-Regular /DescendantFonts [ 4439 0 R ] /ToUnicode 4438 0 R >>
endobj
-4413 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SEKAPH+LMRoman8-Regular /FontDescriptor 4409 0 R /W 4408 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4439 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RXERYS+LMRoman8-Regular /FontDescriptor 4435 0 R /W 4434 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4414 0 obj
+4440 0 obj
[638.9 ]
endobj
-4415 0 obj
+4441 0 obj
[446.4 446.4 0 877 0 0 0 0 0 569.4 569.4 ]
endobj
-4416 0 obj
+4442 0 obj
[668 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 607.3 ]
endobj
-4417 0 obj
+4443 0 obj
[570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 500 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520.6 0 0 600.2 0 0 0 0 0 0 0 0 0 571.5 ]
endobj
-4418 0 obj
+4444 0 obj
[388.9 388.9 0 777.8 0 0 0 0 500 500 500 0 500 0 0 0 0 0 0 0 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444.5 0 0 0 0 0 0 0 0 0 0 555.5 0 0 0 391.7 0 388.9 ]
endobj
-4419 0 obj
+4445 0 obj
[ 28 [ 525 ] 35 [ 525 525 ] 40 [ 525 525 525 525 ] 47 [ 525 ] 49 [ 525 525 ] 55 [ 525 ] 59 [ 525 ] 61 [ 525 ] 63 [ 525 ] 65 [ 525 525 ] 72 [ 525 525 ] 75 [ 525 ] 77 [ 525 ] 79 [ 525 ] 81 [ 525 525 ] 84 [ 525 525 525 ] 91 [ 525 ] 93 [ 525 525 ] 96 [ 525 525 525 ] 102 [ 525 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-4421 0 obj
+4447 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``(p5OK
endstream
endobj
-4422 0 obj
+4448 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4150 >>
stream
xڭXyT[UnJ[Z8ܫvZZ:tigKG(!%B Co2a
@@ -14969,10 +15021,10 @@ FR+擛T4Yhڔ5LV\nĉ |5*I1?bT`km^~R.w:}]!s
k:vYP+`/@pKYvm
endstream
endobj
-4420 0 obj
-<< /Type /FontDescriptor /FontName /YWBYKK+LMMono10-Italic /Flags 4 /FontBBox [ -491 -316 834 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -15 /StemV 175 /XHeight 431 /FontFile3 4422 0 R /CIDSet 4421 0 R >>
+4446 0 obj
+<< /Type /FontDescriptor /FontName /YWBYKK+LMMono10-Italic /Flags 4 /FontBBox [ -491 -316 834 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -15 /StemV 175 /XHeight 431 /FontFile3 4448 0 R /CIDSet 4447 0 R >>
endobj
-4423 0 obj
+4449 0 obj
<< /Filter /FlateDecode /Length 538 >>
stream
x}[o@+Ha}[Y
@@ -14982,22 +15034,22 @@ ZZV RzNA#!ȑS 1b(!Xag rP:8K^襮z!v@Vpd"&z
uf=i۱b</G]^V_}ݚ}>wMݘ*auC
endstream
endobj
-339 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YWBYKK+LMMono10-Italic /DescendantFonts [ 4424 0 R ] /ToUnicode 4423 0 R >>
+343 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YWBYKK+LMMono10-Italic /DescendantFonts [ 4450 0 R ] /ToUnicode 4449 0 R >>
endobj
-4424 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YWBYKK+LMMono10-Italic /FontDescriptor 4420 0 R /W 4419 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4450 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YWBYKK+LMMono10-Italic /FontDescriptor 4446 0 R /W 4445 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4425 0 obj
+4451 0 obj
[ 28 [ 525 ] 35 [ 525 ] 43 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 63 [ 525 ] 66 [ 525 ] 70 [ 525 ] 72 [ 525 ] 75 [ 525 ] 77 [ 525 ] 81 [ 525 ] 84 [ 525 ] 96 [ 525 ] 98 [ 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 114 [ 525 ] 118 [ 525 ] ]
endobj
-4427 0 obj
+4453 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``TdTe
endstream
endobj
-4428 0 obj
+4454 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2337 >>
stream
xڕV{TW
@@ -15016,10 +15068,10 @@ fTKw0V&Q+<NnV-LWN]uIMa&#?/
aA\PQRA HC qp*)9 q\_~R$r
endstream
endobj
-4426 0 obj
-<< /Type /FontDescriptor /FontName /ESZHGF+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4428 0 R /CIDSet 4427 0 R >>
+4452 0 obj
+<< /Type /FontDescriptor /FontName /ESZHGF+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4454 0 R /CIDSet 4453 0 R >>
endobj
-4429 0 obj
+4455 0 obj
<< /Filter /FlateDecode /Length 459 >>
stream
x}n0~
@@ -15031,22 +15083,22 @@ x}n0~
yJNp]e=k:u:H3}Ȱ_nf>SΝT1{n]NM^
endstream
endobj
-338 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ESZHGF+LMMonoLt10-Bold /DescendantFonts [ 4430 0 R ] /ToUnicode 4429 0 R >>
+342 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ESZHGF+LMMonoLt10-Bold /DescendantFonts [ 4456 0 R ] /ToUnicode 4455 0 R >>
endobj
-4430 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ESZHGF+LMMonoLt10-Bold /FontDescriptor 4426 0 R /W 4425 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4456 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ESZHGF+LMMonoLt10-Bold /FontDescriptor 4452 0 R /W 4451 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4431 0 obj
+4457 0 obj
[ 27 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 61 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 101 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 118 [ 525 ] 120 [ 525 525 ] 139 [ 525 ] 163 [ 525 ] 202 [ 525 ] 294 [ 525 ] 602 [ 525 ] ]
endobj
-4433 0 obj
+4459 0 obj
<< /Filter /FlateDecode /Length 36 >>
stream
xc```b`P`&
endstream
endobj
-4434 0 obj
+4460 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8560 >>
stream
xzy\D$*EeLŌu[wQPu ;B , Kؙ}DVmmX]3=?Bpܙ{=|aiI[w\?e<@ie!~n
@@ -15077,33 +15129,33 @@ e"c|*dV
b54IRgo&}}E.d4i1t/,3ߊ晓Hm\RB"%,VN;]0J-nؓŦ0IBMRn&Scؘ) ?}q-r: rnj)a9ItF ,vQ) e#">"F 33y6;&AB{SmbU$?#D[fX dgL?YVViٺ2]<׸%;TG
endstream
endobj
-4432 0 obj
-<< /Type /FontDescriptor /FontName /VSFYBK+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4434 0 R /CIDSet 4433 0 R >>
+4458 0 obj
+<< /Type /FontDescriptor /FontName /VSFYBK+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 4460 0 R /CIDSet 4459 0 R >>
endobj
-4435 0 obj
+4461 0 obj
<< /Filter /FlateDecode /Length 757 >>
stream
x}]K@+f/MS e*Vd&nMJ^d޷
˺89g:syTc}jrߛ,ׇjZ秽G _\F⹩od1]Te{&/|w*eֿ'>tq{[~,uUgioOuKUe ?QQŨۼXՃn4 ̪bR;cg{SVET{xIQyK}(Uxu>~6u2~\IOMᛲڊ/r sVa|D uzE_al_s!.}>"C1a70ス MQ6Ά&,iIZ,H9e3I)D i9I1ȁ;=c#S YOk,HяD?%O݁৐Du4gIS~@#H+F̅F M#dit F50$iAȒ`Q] #KF̅F$tLHϒ৘'$:m>?KB N#cD<?Idf'Q ?xs$HfoDo , ~~\,Ι[;SgaH0R
endstream
endobj
-337 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VSFYBK+LMMono10-Regular /DescendantFonts [ 4436 0 R ] /ToUnicode 4435 0 R >>
+341 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VSFYBK+LMMono10-Regular /DescendantFonts [ 4462 0 R ] /ToUnicode 4461 0 R >>
endobj
-4436 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VSFYBK+LMMono10-Regular /FontDescriptor 4432 0 R /W 4431 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4462 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VSFYBK+LMMono10-Regular /FontDescriptor 4458 0 R /W 4457 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4437 0 obj
+4463 0 obj
[ 51 [ 569 ] 56 [ 569 569 ] 78 [ 569 ] 82 [ 569 ] 100 [ 569 569 ] 106 [ 569 569 ] 121 [ 569 ] ]
endobj
-4439 0 obj
+4465 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`
< 
endstream
endobj
-4440 0 obj
+4466 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1685 >>
stream
xuUkPTGÈ(uG^QWCZ` 00 j3GAG@^X"")E0kZ]CP*X,PѾncgVmwӧ;uXL cLqs`<&N~9*
@@ -15113,31 +15165,31 @@ GKtdžmBEx}gZ5g:\~Bc"ZOI
NbC^r`)|*+%M 1=U8⦈kQʁR y Ķ˚Jmѹpr~_9&꾩R58WCW%#B)_o-Zȫ=%-/7l|D%2]DCbTߙir8lkQ(\-:Kϗ:Y
endstream
endobj
-4438 0 obj
-<< /Type /FontDescriptor /FontName /TFIASI+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 4440 0 R /CIDSet 4439 0 R >>
+4464 0 obj
+<< /Type /FontDescriptor /FontName /TFIASI+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 4466 0 R /CIDSet 4465 0 R >>
endobj
-4441 0 obj
+4467 0 obj
<< /Filter /FlateDecode /Length 405 >>
stream
x}]K0+wQSetPpC풳X$Q xzޓy[ͥc4ڴV`XhKQ#Y#rlv=gZ5}gZZwyvn,z]mMYic{*l]N5'R/UüяqNj S,}PZڋU;,Trn bYՍ={}oDw۪:)H<ДѺ(bLRU5rٝ+$Fb]mfOa+e:]C@tɵ$> i zݧ,<=yz4J<MFƁ&恆 <M/34܂\@Fiqe*o8hd_K}O
endstream
endobj
-336 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TFIASI+LMRoman7-Regular /DescendantFonts [ 4442 0 R ] /ToUnicode 4441 0 R >>
+340 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TFIASI+LMRoman7-Regular /DescendantFonts [ 4468 0 R ] /ToUnicode 4467 0 R >>
endobj
-4442 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TFIASI+LMRoman7-Regular /FontDescriptor 4438 0 R /W 4437 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4468 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TFIASI+LMRoman7-Regular /FontDescriptor 4464 0 R /W 4463 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4443 0 obj
+4469 0 obj
[ 28 [ 481 ] 35 [ 517 ] 43 [ 444 ] 47 [ 517 ] 50 [ 444 ] 55 [ 306 ] 59 [ 500 ] 63 [ 517 333 ] 66 [ 239 ] 72 [ 239 ] 75 [ 794 ] 77 [ 517 ] 81 [ 500 ] 84 [ 517 ] 96 [ 342 556 383 ] 105 [ 361 ] 109 [ 517 ] 116 [ 461 ] 118 [ 461 ] ]
endobj
-4445 0 obj
+4471 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``T\0Ń 
endstream
endobj
-4446 0 obj
+4472 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2056 >>
stream
xuV Pgf.qj[m`
@@ -15152,31 +15204,31 @@ xuV Pgf.qj[m`
L8.;1m(`.)p
endstream
endobj
-4444 0 obj
-<< /Type /FontDescriptor /FontName /YSFAMU+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 4446 0 R /CIDSet 4445 0 R >>
+4470 0 obj
+<< /Type /FontDescriptor /FontName /YSFAMU+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 4472 0 R /CIDSet 4471 0 R >>
endobj
-4447 0 obj
+4473 0 obj
<< /Filter /FlateDecode /Length 464 >>
stream
x}n0<)=P I" iV%jĞd-8V6(?cg:@ z5jak`6*6 g
endstream
endobj
-335 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YSFAMU+LMSans10-Regular /DescendantFonts [ 4448 0 R ] /ToUnicode 4447 0 R >>
+339 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YSFAMU+LMSans10-Regular /DescendantFonts [ 4474 0 R ] /ToUnicode 4473 0 R >>
endobj
-4448 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YSFAMU+LMSans10-Regular /FontDescriptor 4444 0 R /W 4443 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4474 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YSFAMU+LMSans10-Regular /FontDescriptor 4470 0 R /W 4469 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4449 0 obj
+4475 0 obj
[ 27 [ 750 500 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 41 [ 278 722 444 278 278 764 556 ] 49 [ 681 444 500 778 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 778 528 472 ] 95 [ 736 392 556 394 278 500 500 ] 104 [ 722 389 500 500 750 556 ] 112 [ 528 1028 722 750 528 ] 118 [ 528 ] 120 [ 444 500 583 833 ] 125 [ 556 556 ] 168 [ 500 ] 199 [ 778 ] 251 [ 444 ] 277 [ 444 ] 280 [ 670 ] 284 [ 500 ] 319 [ 556 556 ] 499 [ 472 472 ] 502 [ 278 ] 612 [ 500 ] ]
endobj
-4451 0 obj
+4477 0 obj
<< /Filter /FlateDecode /Length 49 >>
stream
xc``߿
endstream
endobj
-4452 0 obj
+4478 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8702 >>
stream
xڽzx׶Yƀ!{ J лŽ&WlEV*ɖ 7'@HB )'$$d}wG6 '{?ٞͬ5# @-F-_69`1k=e~! h ]8VY=V"X!A
@@ -15213,31 +15265,31 @@ hO bFcFLX?o H<#Ҍ! z<UD\ ІT&UL1|zHތ
\!0RY10{~L* J ^c=C XZo+3r Q@vQ gZw7wݨYH筭MM4]^OM3Xo?
endstream
endobj
-4450 0 obj
-<< /Type /FontDescriptor /FontName /GHZSST+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 4452 0 R /CIDSet 4451 0 R >>
+4476 0 obj
+<< /Type /FontDescriptor /FontName /GHZSST+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 4478 0 R /CIDSet 4477 0 R >>
endobj
-4453 0 obj
+4479 0 obj
<< /Filter /FlateDecode /Length 759 >>
stream
xڅ_o0)J%V lH4M{a A!<94ZV׾\7^qټٞū=6q}nnMqۺ{y ^ڦXN颮.xQSiQmU_C|q?z_\.Wo~]'qnOuۋU\"Mw~]n`Vy&QBE,}SeKkTUёb/ߏ/M 2WǮ}?G綴mUoG"]t8$h4ݸ]{+V.ZH'\4=օmFCWx$s3l]5c__oLFqQ<)RIrd& IcO BvMBv9M0:cH&@PIP- "3d[ JAX=H2;٩bdE z B]<h<(T^&B<hU3;Upj9hI(AAI Q ܂@`H<%:E O/KԂg] ՆzPC!{O{p%:DCgiH)'tJf Qk2ԉ :P'E Kⷉz4N91{fȥ:ʑu5Fv}'B4Ǯ6IP
endstream
endobj
-334 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GHZSST+LMRoman10-Regular /DescendantFonts [ 4454 0 R ] /ToUnicode 4453 0 R >>
+338 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GHZSST+LMRoman10-Regular /DescendantFonts [ 4480 0 R ] /ToUnicode 4479 0 R >>
endobj
-4454 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GHZSST+LMRoman10-Regular /FontDescriptor 4450 0 R /W 4449 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4480 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GHZSST+LMRoman10-Regular /FontDescriptor 4476 0 R /W 4475 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4455 0 obj
+4481 0 obj
[ 27 [ 850 547 ] 34 [ 800 625 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 54 [ 707 344 563 563 ] 59 [ 563 ] 62 [ 880 625 ] 65 [ 419 313 ] 70 [ 594 676 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 90 [ 845 ] 96 [ 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 112 [ 594 ] 114 [ 813 850 594 ] 118 [ 594 ] 120 [ 500 563 656 ] 125 [ 625 ] 499 [ 551 551 ] ]
endobj
-4457 0 obj
+4483 0 obj
<< /Filter /FlateDecode /Length 29 >>
stream
xc``0.߂7v=a H
endstream
endobj
-4458 0 obj
+4484 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6187 >>
stream
xڝY XSWھr Bw:u+u [NINadY%(jjZZgZ֎u*aOn3I|y=Q֔H$r^x5=V E~+8a%
@@ -15262,32 +15314,32 @@ Iqr0ӫ^h4mtMfw7+'o~,xa4 챎F
 4mcG
endstream
endobj
-4456 0 obj
-<< /Type /FontDescriptor /FontName /XVCDCQ+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 4458 0 R /CIDSet 4457 0 R >>
+4482 0 obj
+<< /Type /FontDescriptor /FontName /XVCDCQ+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 4484 0 R /CIDSet 4483 0 R >>
endobj
-4459 0 obj
+4485 0 obj
<< /Filter /FlateDecode /Length 619 >>
stream
x}]0+sѱ mGv>VeDii~GAVP|zN&_k&ǀTߜJ[zQTûRRKa]SXzx0K]NR]'վַEj#5z81cwc̕R]_7AZ{&ǻZˎLu5hdKkMV&9~&T]l|סXxYƤڙf6Qm|)M'p[9ECTWf
z]}Čެ%>\XG pɲ-:u9rܞZ6]r\>?r{
endstream
endobj
-333 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XVCDCQ+LMRoman12-Bold /DescendantFonts [ 4460 0 R ] /ToUnicode 4459 0 R >>
+337 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XVCDCQ+LMRoman12-Bold /DescendantFonts [ 4486 0 R ] /ToUnicode 4485 0 R >>
endobj
-4460 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XVCDCQ+LMRoman12-Bold /FontDescriptor 4456 0 R /W 4455 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4486 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XVCDCQ+LMRoman12-Bold /FontDescriptor 4482 0 R /W 4481 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4461 0 obj
+4487 0 obj
[ 66 [ 245 ] 77 [ 531 ] 81 [ 514 ] 84 [ 531 ] 105 [ 371 ] ]
endobj
-4463 0 obj
+4489 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc`
endstream
endobj
-4464 0 obj
+4490 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 764 >>
stream
xmRkHQNmZVf,ac6 !
@@ -15296,31 +15348,31 @@ JjB.Ԩ+S- %Eh/(~UvFȚLOlٹiI}̐UQu5;
KWVWv^w4ZybX4=MQ#ch3z6FE:
endstream
endobj
-4462 0 obj
-<< /Type /FontDescriptor /FontName /BLRUUF+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 4464 0 R /CIDSet 4463 0 R >>
+4488 0 obj
+<< /Type /FontDescriptor /FontName /BLRUUF+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 4490 0 R /CIDSet 4489 0 R >>
endobj
-4465 0 obj
+4491 0 obj
<< /Filter /FlateDecode /Length 382 >>
stream
x}R]k0}ϯ{6u_X{ڤ~Ij[!'ܓsOy%W'^XZ3f \:GYm9ZN`K,RT=C%j-9i!{tMWqI*˱Kڣ ̐)"8OԥPrARj6Tn+~k,$7pI0
endstream
endobj
-332 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BLRUUF+LMSans9-Regular /DescendantFonts [ 4466 0 R ] /ToUnicode 4465 0 R >>
+336 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BLRUUF+LMSans9-Regular /DescendantFonts [ 4492 0 R ] /ToUnicode 4491 0 R >>
endobj
-4466 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BLRUUF+LMSans9-Regular /FontDescriptor 4462 0 R /W 4461 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4492 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BLRUUF+LMSans9-Regular /FontDescriptor 4488 0 R /W 4487 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4467 0 obj
+4493 0 obj
[ 28 [ 514 ] 35 [ 571 ] 43 [ 457 286 286 ] 47 [ 571 ] 49 [ 699 457 ] 55 [ 314 ] 58 [ 807 514 ] 63 [ 571 ] 65 [ 371 286 ] 70 [ 542 642 286 ] 75 [ 856 ] 77 [ 571 ] 80 [ 799 514 ] 83 [ 699 571 400 400 ] 88 [ 286 ] 91 [ 542 ] 96 [ 402 ] 98 [ 405 ] 104 [ 742 400 ] 109 [ 571 ] 112 [ 542 1056 742 771 542 ] 118 [ 542 ] 125 [ 571 ] 251 [ 457 ] 502 [ 286 ] ]
endobj
-4469 0 obj
+4495 0 obj
<< /Filter /FlateDecode /Length 32 >>
stream
xc``M4Lro‚#XP
endstream
endobj
-4470 0 obj
+4496 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4535 >>
stream
xڵXy\׾PQ;Τ.Tq^.*miqU
@@ -15337,31 +15389,31 @@ qn0[CAF"xG+ 3 ,YUL݇{,U,x wZ~/$]T
3B9$.sN8S1zgj^.GIptWW9h]j3I%ttf97~'v͖`[z} knMqz w} WV a>n
endstream
endobj
-4468 0 obj
-<< /Type /FontDescriptor /FontName /KLWBRP+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 4470 0 R /CIDSet 4469 0 R >>
+4494 0 obj
+<< /Type /FontDescriptor /FontName /KLWBRP+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 4496 0 R /CIDSet 4495 0 R >>
endobj
-4471 0 obj
+4497 0 obj
<< /Filter /FlateDecode /Length 548 >>
stream
x}[0 炱 qbH<QHK"o۷8f]޴'O)ًU!{xѺ.JC.m_NAtdڮtVמ!IKq)WCGsoߋK͕OMձ:DGɃ(m~Ֆ|%3T?H+aMJ2tKɕJNFEnm'<|N&zrvfU?yOŅ*兌h9i!KSY} hUs5.j.&/ExsmM<ӟ::aC+(XF&Aj(B4!s
endstream
endobj
-331 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /KLWBRP+LMRoman9-Regular /DescendantFonts [ 4472 0 R ] /ToUnicode 4471 0 R >>
+335 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /KLWBRP+LMRoman9-Regular /DescendantFonts [ 4498 0 R ] /ToUnicode 4497 0 R >>
endobj
-4472 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KLWBRP+LMRoman9-Regular /FontDescriptor 4468 0 R /W 4467 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4498 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KLWBRP+LMRoman9-Regular /FontDescriptor 4494 0 R /W 4493 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4473 0 obj
+4499 0 obj
[ 27 [ 893 575 ] 35 [ 657 ] 43 [ 526 ] 96 [ 488 ] 98 [ 467 ] 105 [ 460 ] ]
endobj
-4475 0 obj
+4501 0 obj
<< /Filter /FlateDecode /Length 18 >>
stream
xc```
endstream
endobj
-4476 0 obj
+4502 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1258 >>
stream
xmTmLSW~"]^Gd-DeNNM)R*]mXAQc`lR>TmM [21 ?̖,f{em̖,9=9xiJ*hen(Hγdmo[M ˰)q)-rQ"/J"dZ)}qLKeK)nSO 21w+(&) POh  kګ=҅Vy-4W* 2L(Ӏ (ZJ FkW8jTPiq"Q«C
@@ -15369,32 +15421,32 @@ F`B56@Jm{7
jг{qU 9L*6bӈ<|Hn;`}]{Xn_M3&b-|,#c|)̺nЬ!0d*veX?`=D~M_Ͻ}Z[b# eɶ
endstream
endobj
-4474 0 obj
-<< /Type /FontDescriptor /FontName /RMWBFT+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 4476 0 R /CIDSet 4475 0 R >>
+4500 0 obj
+<< /Type /FontDescriptor /FontName /RMWBFT+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 4502 0 R /CIDSet 4501 0 R >>
endobj
-4477 0 obj
+4503 0 obj
<< /Filter /FlateDecode /Length 388 >>
stream
x}RMk@ﯘ=lTEVT+^.ݰIQ(@B^ޛf{WNXV3 Vۼ"ZD9׊*]R4#N%;sQg!;~WɂAڒL4#Ggk!|x|J&BHodh\ܓfCx,SY(\Bx0d; 樅<CA#8UuAk(cXf/DmV4קٵB9yLqħ1,7 JTxhcOm(1}(DC+<ء)uh9#q=~e]U7Z:y6x?JU͢ 
endstream
endobj
-330 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMWBFT+LMRoman9-Bold /DescendantFonts [ 4478 0 R ] /ToUnicode 4477 0 R >>
+334 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMWBFT+LMRoman9-Bold /DescendantFonts [ 4504 0 R ] /ToUnicode 4503 0 R >>
endobj
-4478 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMWBFT+LMRoman9-Bold /FontDescriptor 4474 0 R /W 4473 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4504 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMWBFT+LMRoman9-Bold /FontDescriptor 4500 0 R /W 4499 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4479 0 obj
+4505 0 obj
[ 28 [ 515 ] 33 [ 515 ] 47 [ 515 ] 55 [ 515 ] 59 [ 515 ] 66 [ 515 ] 77 [ 515 ] 81 [ 515 ] 84 [ 515 ] 88 [ 515 ] 96 [ 515 ] 105 [ 515 ] 114 [ 515 ] 118 [ 515 ] ]
endobj
-4481 0 obj
+4507 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``p`dP`hhpP
D)
endstream
endobj
-4482 0 obj
+4508 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1845 >>
stream
xuV}TW!@5ʚiZ3K- _EAE%1LBD<u
@@ -15409,77 +15461,78 @@ oRWɧ<| ƠP"{nPq%e}Gܮ(WȗN)QuoYUO&Pn^
g48ԂE>*`zK@E%1άxh@,+&p_(N(/?=u0ݕLDB0O>`R Fon0km(V׮Җ ֐F"3DgϷ^?@%xSEV!6¶M:GӞ`x#qNf4e'_%#l|ZQuJeq?HR@8(fu\o!du8iw6s;YpoۚiPH&Ng y[j;rgRsJcOt~w@[fk9RM
endstream
endobj
-4480 0 obj
-<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 4482 0 R /CIDSet 4481 0 R >>
+4506 0 obj
+<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 4508 0 R /CIDSet 4507 0 R >>
endobj
-4483 0 obj
+4509 0 obj
<< /Filter /FlateDecode /Length 428 >>
stream
x}]O0+`Dpf!q%Df,[֞&%.m{&F%pk z:=A[2,5P3
endstream
endobj
-329 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 4484 0 R ] /ToUnicode 4483 0 R >>
+333 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 4510 0 R ] /ToUnicode 4509 0 R >>
endobj
-4484 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 4480 0 R /W 4479 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4510 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 4506 0 R /W 4505 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4485 0 obj
-[ 28 [ 490 ] 45 [ 272 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 ] 74 [ 897 ] 77 [ 544 ] 83 [ 666 ] 88 [ 272 ] 105 [ 381 490 490 ] 118 [ 517 ] 121 [ 490 ] ]
+4511 0 obj
+[ 28 [ 490 ] 45 [ 272 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 503 ] 72 [ 272 ] 77 [ 544 ] 83 [ 666 ] 88 [ 272 ] 105 [ 381 490 490 ] 109 [ 544 ] 118 [ 517 ] 121 [ 490 ] ]
endobj
-4487 0 obj
+4513 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc````a
-PPh`(`r
+0hh`(ar
endstream
endobj
-4488 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2153 >>
+4514 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2238 >>
stream
-xuV Pgai81ӎݦ('XQPrD%^!sDp`.aFQhPITp5R-TjfFkT_3"D<<|!Hz2E6)R5y~ \ a
-X‰%,
-ϻ:OZD7h.N?y~~p?) 9D)@3R]_JP˼/<WS~T`dt2M@E1T'ݓ
-VjI2
-S즴jJMũ"O*,>AM)UU)jE c*JCè-JZC%D+h(BAk4)k48O*+Q{%SR{MylspfOMU&2!I_IN Ȥ1(Id rC<Ujd-"ۑPd7B!Ld$H!';8
-uqxg}+p/uRqaT ekP4D
-MVH].lVɺj2w$$O*i&e=Aw ľ/o 鯺so8M4VA+-VyuIuE%ts#=xIl}A%Ϭ8zl#,DN!d_^Հ4UXqVX!!21M߽^:J[9"օ;!:&c40A(vs"Hݟ 55^ ~"Bײ&EiSRmچ&NH`)`E<H;A`6g* %=q;"Kn[
-wɤ׆ucɠKEɞ+DLeT&sU %‰~2o.Y󦅹,H/5|{TAh4ޒ]iZY{ݲ\ WBv|C`׾k7oV&KQRLJ}taYdcCNp?OFy§S̅{GIّs>Gw2*
-0ԟ
-| YJ$$`}|Ⴜl j sG|6Mbl`jXwUS3˞A!Q>4<~oFv>уX.ɴ9a?d熀d.v}}{@ڕWrz?\8+wEֆt2]ЖzW6ys:Nmӵ;hFjvAt&Hטx1k2FC3֋UR ZA-F
-l7}|x;㉁5PNf Aܩsx{f<%SLw]"ɹꬬTVYD`X{u:3wd.,,).4uVsT\R:r`
+xuV PWai8I$NcwkW!cE@E\ z`N0с10\ #&Fk *W\1еԾ֦vє٪}}~ ŅGQg3f(Ux2v;xNK
+YʓSx {{48DԾ;:_zJ'_cxxy dB O
+P8T agV3s453(h'<*,OLSiT<DEPQT[SijJPħ'Sd*Vk-ҨTlJ25i(ӕZeJ׭iJߟJ%e Uj*0ߣ LI8z٪XkuTZC%)uڀɷh&#>}q:A"IIRu9?|d.2Y!
+d9E6 6$ @ HO(?t4H '(x <S= =orEGѭܿ$fK,7޿k&;,XvA**sKњz >/r]mmpչSKd"m*
+ ^$B7ֲk]}ʦmp.wJHFP.
+Ű'pu@Cܵ*@KՅeլ>%e}Rڎ\!#e<|QL[rN[~ގ:IMSi&6}I^l( >;wqץU 9x.`!MU;y]y]U5~zvsA{Z+q2؜PSٔ/ϭʫ9 n! 3 :;dg X]3U
+YȚeþNp?UJ(>r}`q.4?p?<'> &86ʐh*  adYF&1h UcrrF/zN~w{XTA':n,E/.WyQCԝ9t:!14?~ '%$| &BX"eu:Qߙa&,qjܭjn (."8ԻczvZz+%( sdl8!~ؾԏ0<%y WhV3ó;Yʙà(
+x=~v ~
+pNr]$dQn
+Gn^:|m$9_4
+ۈ,ױ3x]+`LCm;@%[ihgӌ~ ܂0)kfi|+e.Gb.4s66FjPXlS8@=]iNO#[&Kaxzv= A[Yܕ?jLh ǺzH]$|ĎKeQpV y
+ܐ=0S8|dRioEؑ%DHG,n<r[OzȎN"  n^"֝95ޭc'ǀrh{O[dh 58XE TWU:DDlz=ywj+))/+vx{;R{ M>O
endstream
endobj
-4486 0 obj
-<< /Type /FontDescriptor /FontName /ZYVUUY+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 4488 0 R /CIDSet 4487 0 R >>
+4512 0 obj
+<< /Type /FontDescriptor /FontName /HUZGNI+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 4514 0 R /CIDSet 4513 0 R >>
endobj
-4489 0 obj
-<< /Filter /FlateDecode /Length 443 >>
+4515 0 obj
+<< /Filter /FlateDecode /Length 452 >>
stream
-xڅMk0C =ޖ`h "Ivo4Idd_Il؀;3F3x]Bo1LӃOuL&K͇U(P^kaZVJҊ+Qo>0GM$\~8&d.m#G 6 V7_1{%JݸCvAt2
-h}'0'uރ8!y";->v=6`v]oeF=LϙжtEws DnQώ'isl1YZ`M,X+T8
-x>gm\Q,#Έ(/4Kn)oID5{OӜ~˨CN2D/M<,~+ln,;&,~J[d;zy
+xڅQo0H@k!ݐִJ/`#}ECwLnå{ [`8sJAկ1ë|=LjU)Xqi8-zT;|m]?7U<ڄ̥d(Z|74[ƘD..F!{' $/䟼rscS lg}ыh:I+m{BgXP `k9!r|uIsx2hju`a
+X<٫P⌲B+_| ߵqb, GSRzJ3OS:#z,!#J)oIbTsFGOsR)e/~ْD=Mf>뜼׬9u">cnR9ju?8zy
+
endstream
endobj
-328 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZYVUUY+LMRoman12-Regular /DescendantFonts [ 4490 0 R ] /ToUnicode 4489 0 R >>
+332 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HUZGNI+LMRoman12-Regular /DescendantFonts [ 4516 0 R ] /ToUnicode 4515 0 R >>
endobj
-4490 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZYVUUY+LMRoman12-Regular /FontDescriptor 4486 0 R /W 4485 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4516 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HUZGNI+LMRoman12-Regular /FontDescriptor 4512 0 R /W 4511 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4491 0 obj
+4517 0 obj
[777.8 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ]
endobj
-4492 0 obj
+4518 0 obj
[ 66 [ 223 ] 77 [ 484 ] 81 [ 470 ] 84 [ 484 ] 105 [ 340 ] ]
endobj
-4494 0 obj
+4520 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc`
endstream
endobj
-4495 0 obj
+4521 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 759 >>
stream
xuR]HQםuM'״$u&JfZnc;N;23EPaPQ(*YFB>XD܉1h%{{A
@@ -15488,10 +15541,10 @@ xuR]HQםuM'״$u&JfZnc;N;23EPaPQ(*YFB>
'5;լ{k-MW<sϞ>ҍyPs-T2LDf_LeqgF, .r
endstream
endobj
-4493 0 obj
-<< /Type /FontDescriptor /FontName /BTPEXR+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 4495 0 R /CIDSet 4494 0 R >>
+4519 0 obj
+<< /Type /FontDescriptor /FontName /BTPEXR+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 4521 0 R /CIDSet 4520 0 R >>
endobj
-4496 0 obj
+4522 0 obj
<< /Filter /FlateDecode /Length 383 >>
stream
x}R]k0}ϯ{6u:kMn]&%mKR0
@@ -15499,22 +15552,22 @@ x}R]k0}ϯ{6u:kMn]&%mKR0
OdPWBCJXIP"%\HoVd`\ܛ&*ۜ\X抄!dQ\g?h8IS~(6mTE}}ã'#0S2c3yFh<Aiu[h礫L[P9lʡIТuMCq;=Ćz5Z]n4;xR-wfnM~
endstream
endobj
-326 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTPEXR+LMSans17-Regular /DescendantFonts [ 4497 0 R ] /ToUnicode 4496 0 R >>
+330 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BTPEXR+LMSans17-Regular /DescendantFonts [ 4523 0 R ] /ToUnicode 4522 0 R >>
endobj
-4497 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTPEXR+LMSans17-Regular /FontDescriptor 4493 0 R /W 4492 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4523 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BTPEXR+LMSans17-Regular /FontDescriptor 4519 0 R /W 4518 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4498 0 obj
+4524 0 obj
[ 28 [ 459 ] 43 [ 406 ] 50 [ 406 ] 59 [ 459 ] 63 [ 511 ] 70 [ 485 ] 84 [ 511 ] 104 [ 668 ] ]
endobj
-4500 0 obj
+4526 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xc```PdR
endstream
endobj
-4501 0 obj
+4527 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1482 >>
stream
x}UkPW@Eh{uHרԱTBЊm!%$,y`
@@ -15526,10 +15579,10 @@ x}UkPW@Eh{uHרԱTBЊm!%$,y`
6aV<4QB;@U]axs.H~,.?2-®it]SXGH&1))UUU5UGmznv8Ngd{0
endstream
endobj
-4499 0 obj
-<< /Type /FontDescriptor /FontName /RKQUSG+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 4501 0 R /CIDSet 4500 0 R >>
+4525 0 obj
+<< /Type /FontDescriptor /FontName /RKQUSG+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 4527 0 R /CIDSet 4526 0 R >>
endobj
-4502 0 obj
+4528 0 obj
<< /Filter /FlateDecode /Length 401 >>
stream
xڅ_O0)$0ց
@@ -15537,13 +15590,13 @@ xڅ_O0)$0ց
ag=[[$9Ҥec`\ B}tI/4ZC@ImrzJ&pSb?Mc0tyLqddfb1̖ JN}>h狼Lyһ(4{9 =z:ƞ&n<8SGF~q+[
endstream
endobj
-325 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RKQUSG+LMRoman17-Regular /DescendantFonts [ 4503 0 R ] /ToUnicode 4502 0 R >>
+329 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RKQUSG+LMRoman17-Regular /DescendantFonts [ 4529 0 R ] /ToUnicode 4528 0 R >>
endobj
-4503 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RKQUSG+LMRoman17-Regular /FontDescriptor 4499 0 R /W 4498 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+4529 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RKQUSG+LMRoman17-Regular /FontDescriptor 4525 0 R /W 4524 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-4505 0 obj
+4531 0 obj
<< /Length1 1401 /Length2 5895 /Length3 0 /Filter /FlateDecode /Length 6849 >>
stream
xڍtTS6EABtHMzB^ҀPH""UDti M:~~Zߙgfgfcf!:4N ,RjC `$ AaЊ"8M #
@@ -15569,10 +15622,10 @@ l/:diAxmiQgwm*ΓC7ˋH<K !O ^v1|k?Ncpvt.:>jsMg}fh
A>Egi(  oJ*h!cVBԔL4i3$?hA2
endstream
endobj
-4504 0 obj
-<< /Type /FontDescriptor /FontName /DGBCZV+CMTT10 /Flags 4 /FontBBox [ -4 -233 537 696 ] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /visiblespace) /FontFile 4505 0 R >>
+4530 0 obj
+<< /Type /FontDescriptor /FontName /DGBCZV+CMTT10 /Flags 4 /FontBBox [ -4 -233 537 696 ] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /visiblespace) /FontFile 4531 0 R >>
endobj
-4507 0 obj
+4533 0 obj
<< /Length1 1808 /Length2 2831 /Length3 0 /Filter /FlateDecode /Length 3963 >>
stream
xڵUy<T-\65kdoHZ)c挙f3f2JQJQ,7eRٿ(Dpz}׼Μy>܉(
@@ -15588,10 +15641,10 @@ Z,?cj^Ϝ8Sc)5FQަ)u FUg%wR(^Mc[7WΜ
]|pVq{9/>X]#Xa> k28PCཙ+# ޹~90/t*̩CUGo IX^
endstream
endobj
-4506 0 obj
-<< /Type /FontDescriptor /FontName /MOFIWY+LMMathItalic10-Regular /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 60 /XHeight 431 /CharSet( /arrowhookleft /greater /k /less /n /pi /slash /x) /FontFile 4507 0 R >>
+4532 0 obj
+<< /Type /FontDescriptor /FontName /MOFIWY+LMMathItalic10-Regular /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 60 /XHeight 431 /CharSet( /arrowhookleft /greater /k /less /n /pi /slash /x) /FontFile 4533 0 R >>
endobj
-4509 0 obj
+4535 0 obj
<< /Length1 1670 /Length2 1620 /Length3 0 /Filter /FlateDecode /Length 2652 >>
stream
xڵT{<Ti_6ɴ#lۓVL;a afD1aiLHzf+E.>[(]-V[Q[P*zw?9|
@@ -15615,10 +15668,10 @@ qov&a!)P~(p$/t
ϸ>=ޢۗ<c2zRb)mЭ;$.h]xs𹴲;
endstream
endobj
-4508 0 obj
-<< /Type /FontDescriptor /FontName /KDGSHG+LMMathItalic5-Regular /Flags 4 /FontBBox [ 0 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 84 /XHeight 431 /CharSet( /k) /FontFile 4509 0 R >>
+4534 0 obj
+<< /Type /FontDescriptor /FontName /KDGSHG+LMMathItalic5-Regular /Flags 4 /FontBBox [ 0 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 84 /XHeight 431 /CharSet( /k) /FontFile 4535 0 R >>
endobj
-4511 0 obj
+4537 0 obj
<< /Length1 1689 /Length2 1813 /Length3 0 /Filter /FlateDecode /Length 2856 >>
stream
xڵTy\Lk-uK%(0[ӢBiZGTʵit4s-HD I(Z墕("D{fs|̈́ 2SE^pI y.,RH Sh4= pC3.A#a B\l
@@ -15634,10 +15687,10 @@ ywm>9.!"U3CP-
[]/ &@2qf9>sj۔+W58P2^7*|K֟^LMICi[ΡmaW%JֺvK= ,\&X9kHT5.~qϲnZJ|5'҇iѭ{?SWt pl_4W/{fSY9 3s3͜HTHsl_7zHUN%5 vHL_edS(O$#u 4"햯RKu^4yoWws{$n - *ܽ>ao|pWAգk{+|YvcG\cP*׺oXZAXòu;҈f=3un`̂w†u[:
endstream
endobj
-4510 0 obj
-<< /Type /FontDescriptor /FontName /GFWWXD+LMMathItalic7-Regular /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /k /pi) /FontFile 4511 0 R >>
+4536 0 obj
+<< /Type /FontDescriptor /FontName /GFWWXD+LMMathItalic7-Regular /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /k /pi) /FontFile 4537 0 R >>
endobj
-4513 0 obj
+4539 0 obj
<< /Length1 1677 /Length2 1235 /Length3 0 /Filter /FlateDecode /Length 2254 >>
stream
xڵTy\WW`"^x!'-9PH$U!y!C830֊*UEQUz (^x`ԅoVa?3NR$2 "2cta f0l( ⋅Bk01' )
@@ -15653,10 +15706,10 @@ VLfh3Uuvz˩.LElL%yaʗz, u߯!6^sn]q\=S[Xlʲ]XIC
/>(m-d|!q^kAʫu^IO__~g඄e#9\gݒ@H2·rM8eCFybmɖns0Rg7HaSOge6x;͖
endstream
endobj
-4512 0 obj
-<< /Type /FontDescriptor /FontName /GLFSGS+LMMathItalic9-Regular /Flags 4 /FontBBox [ -29 -250 1075 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 28 /XHeight 431 /CharSet( /slash) /FontFile 4513 0 R >>
+4538 0 obj
+<< /Type /FontDescriptor /FontName /GLFSGS+LMMathItalic9-Regular /Flags 4 /FontBBox [ -29 -250 1075 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 28 /XHeight 431 /CharSet( /slash) /FontFile 4539 0 R >>
endobj
-4515 0 obj
+4541 0 obj
<< /Length1 1846 /Length2 22110 /Length3 0 /Filter /FlateDecode /Length 23294 >>
stream
xڴsx>7j۶m8ƶƶ7Nac7~=X9:g%'VR67J؃\x
@@ -15752,10 +15805,10 @@ cdw$w(<c|‹Z_rRIo}[GeAXPzѠμ~m,E&kd&W
VhԸh7Sg5T%dԁxtP2{zv5%| wԵn.;Z] Yߓ%gw;d6BtK4B7n3۳Ao-N3K=Q7OJt& @G,m܂7i'5)>`ט]îqp# Ezh!EKmI%Z9~`G5[VҎI蹖u}Ibl/YAdK>@uT%s +ߐR+u 5kEM
endstream
endobj
-4514 0 obj
-<< /Type /FontDescriptor /FontName /DDAMXW+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /a /c /equal /four /n /one /parenleft /parenright /plus /r /t /two /zero) /FontFile 4515 0 R >>
+4540 0 obj
+<< /Type /FontDescriptor /FontName /DDAMXW+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /a /c /equal /four /n /one /parenleft /parenright /plus /r /t /two /zero) /FontFile 4541 0 R >>
endobj
-4517 0 obj
+4543 0 obj
<< /Length1 1715 /Length2 17571 /Length3 0 /Filter /FlateDecode /Length 18712 >>
stream
xڴst=Ƕ۶vNlI5vhN۶G~qKs=CA b`twe`adɫ8s1
@@ -15823,10 +15876,10 @@ L
^EuG|Dg#-pAꩇs&eyRq}CI@ͧGG@>;B/ͯtj
endstream
endobj
-4516 0 obj
-<< /Type /FontDescriptor /FontName /LNPUMK+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /one /parenleft /parenright /plus /two) /FontFile 4517 0 R >>
+4542 0 obj
+<< /Type /FontDescriptor /FontName /LNPUMK+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /one /parenleft /parenright /plus /two) /FontFile 4543 0 R >>
endobj
-4519 0 obj
+4545 0 obj
<< /Length1 1699 /Length2 10474 /Length3 0 /Filter /FlateDecode /Length 11567 >>
stream
xڵxeTڶ5Nqw VݵH)N$/)V)^=s;FFd^s=NFh)5Y% YC tp`
@@ -15868,10 +15921,10 @@ lP9'󔦃&hfL[mԓ莉y9a\>9Iե_EK1E9
j3zݳQ&-?>kn~Yswź$mt KFP)*5^*=֢eD><WNR]I:T˩W$2x |̷ecb‹ϑՑp$HLឩD`0àtp 1J^"F)áwөЩ)rF
endstream
endobj
-4518 0 obj
-<< /Type /FontDescriptor /FontName /QNRZJS+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 96 /XHeight 444 /CharSet( /A /L /S /T /U /Y) /FontFile 4519 0 R >>
+4544 0 obj
+<< /Type /FontDescriptor /FontName /QNRZJS+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 96 /XHeight 444 /CharSet( /A /L /S /T /U /Y) /FontFile 4545 0 R >>
endobj
-4521 0 obj
+4547 0 obj
<< /Length1 1740 /Length2 1925 /Length3 0 /Filter /FlateDecode /Length 2996 >>
stream
xڵTy<TkJefuk'3Vsp9g">nQ V*Y)"K劫ŽJugFݖ۟g>gy~}~hk0Yd 0'(CXQ
@@ -15886,10 +15939,10 @@ Z8i+w7ċzquߺgw9j.Tq
NQPv-.;e>V8Z&/2і?h fx6"PKKku9]_X|wZ_$Ey7$'8X'}b}m"cZrӟڰȺlQy0.jFCGhq6仦{Z{RW!4YT ggf GzCB[oQOoXyV~,"(Y|%-يsg[:
endstream
endobj
-4520 0 obj
-<< /Type /FontDescriptor /FontName /TNOUBP+LMMathSymbols10-Regular /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /arrowright /asteriskmath /minus) /FontFile 4521 0 R >>
+4546 0 obj
+<< /Type /FontDescriptor /FontName /TNOUBP+LMMathSymbols10-Regular /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /arrowright /asteriskmath /minus) /FontFile 4547 0 R >>
endobj
-4523 0 obj
+4549 0 obj
<< /Length1 1689 /Length2 1347 /Length3 0 /Filter /FlateDecode /Length 2378 >>
stream
xڵTyTv5R
@@ -15906,10 +15959,10 @@ ckG<<[$[nt`1@Y(u/=_z;+ªqPî.ͼ
zFyrݮ,Б9vBG/Nr
endstream
endobj
-4522 0 obj
-<< /Type /FontDescriptor /FontName /DTFCKV+LMMathSymbols6-Regular /Flags 4 /FontBBox [ -4 -948 1329 786 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 52 /XHeight 431 /CharSet( /asteriskmath) /FontFile 4523 0 R >>
+4548 0 obj
+<< /Type /FontDescriptor /FontName /DTFCKV+LMMathSymbols6-Regular /Flags 4 /FontBBox [ -4 -948 1329 786 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 52 /XHeight 431 /CharSet( /asteriskmath) /FontFile 4549 0 R >>
endobj
-4525 0 obj
+4551 0 obj
<< /Length1 1684 /Length2 1529 /Length3 0 /Filter /FlateDecode /Length 2571 >>
stream
xڵTiX.\
@@ -15927,10 +15980,10 @@ f|ewkǥǫKggYf(lW$n:4׌/T~V6y(m]
2]lQ1z]dVfg?ù:=\d{76mjfioL䆬 8m_ڵ)'7|޷ndyk%\v9/y`O~}kyW+D(ӂS^rΠрjý3vN<
endstream
endobj
-4524 0 obj
-<< /Type /FontDescriptor /FontName /CIXFWA+LMMathSymbols7-Regular /Flags 4 /FontBBox [ -15 -951 1252 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /minus) /FontFile 4525 0 R >>
+4550 0 obj
+<< /Type /FontDescriptor /FontName /CIXFWA+LMMathSymbols7-Regular /Flags 4 /FontBBox [ -15 -951 1252 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /minus) /FontFile 4551 0 R >>
endobj
-4527 0 obj
+4553 0 obj
<< /Length1 1748 /Length2 1585 /Length3 0 /Filter /FlateDecode /Length 2661 >>
stream
xڵTiXWp *\@dѬ
@@ -15950,107 +16003,110 @@ g]qb)@Xű,wlu.9ѲgvuQk|Lb(J+&Ļ!gnbWUVI!%
{'eF1؊m\Ȫm 3Z6\m<Iu3.QW}M1)ZfVٹ6{j~YF]w͆=,v,D8U8714"Pbhni|"MQ"&T{E>~lfÌ[N7 ?>-`;WG!Q}V9669ğ4*V3m~PTQa7U,/jJݾ}u5[3 %}o)CƢ2N'ٷ*75TNCIڃ` Nsoܻ -(44zűS<*Xx3SVhzD2!-7g+^oR/66u4sSVAM ۲Z8
endstream
endobj
-4526 0 obj
-<< /Type /FontDescriptor /FontName /SRVGJC+LMMathSymbols9-Regular /Flags 4 /FontBBox [ -30 -958 1146 777 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 43 /XHeight 431 /CharSet( /angbracketleft /angbracketright /asteriskmath) /FontFile 4527 0 R >>
+4552 0 obj
+<< /Type /FontDescriptor /FontName /SRVGJC+LMMathSymbols9-Regular /Flags 4 /FontBBox [ -30 -958 1146 777 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 43 /XHeight 431 /CharSet( /angbracketleft /angbracketright /asteriskmath) /FontFile 4553 0 R >>
endobj
-4309 0 obj
+4335 0 obj
<< /Type /Encoding /Differences [ 25 /pi 44 /arrowhookleft 60 /less /slash /greater 107 /k 110 /n 120 /x ] >>
endobj
-4313 0 obj
+4339 0 obj
<< /Type /Encoding /Differences [ 0 /minus 3 /asteriskmath 33 /arrowright 104 /angbracketleft /angbracketright ] >>
endobj
-4311 0 obj
+4337 0 obj
<< /Type /Encoding /Differences [ 40 /parenleft /parenright 43 /plus 48 /zero /one /two 52 /four 61 /equal 65 /A 76 /L 83 /S /T /U 89 /Y 97 /a 99 /c 110 /n 114 /r 116 /t ] >>
endobj
-633 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /DGBCZV+CMTT10 /FontDescriptor 4504 0 R /FirstChar 32 /LastChar 32 /Widths 4315 0 R >>
+639 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /DGBCZV+CMTT10 /FontDescriptor 4530 0 R /FirstChar 32 /LastChar 32 /Widths 4341 0 R >>
endobj
-341 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /MOFIWY+LMMathItalic10-Regular /FontDescriptor 4506 0 R /FirstChar 25 /LastChar 120 /Widths 4417 0 R /Encoding 4309 0 R >>
+345 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /MOFIWY+LMMathItalic10-Regular /FontDescriptor 4532 0 R /FirstChar 25 /LastChar 120 /Widths 4443 0 R /Encoding 4335 0 R >>
endobj
-519 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /KDGSHG+LMMathItalic5-Regular /FontDescriptor 4508 0 R /FirstChar 107 /LastChar 107 /Widths 4340 0 R /Encoding 4309 0 R >>
+523 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /KDGSHG+LMMathItalic5-Regular /FontDescriptor 4534 0 R /FirstChar 107 /LastChar 107 /Widths 4366 0 R /Encoding 4335 0 R >>
endobj
-342 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /GFWWXD+LMMathItalic7-Regular /FontDescriptor 4510 0 R /FirstChar 25 /LastChar 107 /Widths 4416 0 R /Encoding 4309 0 R >>
+346 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /GFWWXD+LMMathItalic7-Regular /FontDescriptor 4536 0 R /FirstChar 25 /LastChar 107 /Widths 4442 0 R /Encoding 4335 0 R >>
endobj
-2313 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /GLFSGS+LMMathItalic9-Regular /FontDescriptor 4512 0 R /FirstChar 61 /LastChar 61 /Widths 4310 0 R /Encoding 4309 0 R >>
+2348 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /GLFSGS+LMMathItalic9-Regular /FontDescriptor 4538 0 R /FirstChar 61 /LastChar 61 /Widths 4336 0 R /Encoding 4335 0 R >>
endobj
-327 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /TNOUBP+LMMathSymbols10-Regular /FontDescriptor 4520 0 R /FirstChar 0 /LastChar 33 /Widths 4491 0 R /Encoding 4313 0 R >>
+331 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /TNOUBP+LMMathSymbols10-Regular /FontDescriptor 4546 0 R /FirstChar 0 /LastChar 33 /Widths 4517 0 R /Encoding 4339 0 R >>
endobj
-344 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /DTFCKV+LMMathSymbols6-Regular /FontDescriptor 4522 0 R /FirstChar 3 /LastChar 3 /Widths 4414 0 R /Encoding 4313 0 R >>
+348 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /DTFCKV+LMMathSymbols6-Regular /FontDescriptor 4548 0 R /FirstChar 3 /LastChar 3 /Widths 4440 0 R /Encoding 4339 0 R >>
endobj
-518 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CIXFWA+LMMathSymbols7-Regular /FontDescriptor 4524 0 R /FirstChar 0 /LastChar 0 /Widths 4341 0 R /Encoding 4313 0 R >>
+522 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CIXFWA+LMMathSymbols7-Regular /FontDescriptor 4550 0 R /FirstChar 0 /LastChar 0 /Widths 4367 0 R /Encoding 4339 0 R >>
endobj
-635 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /SRVGJC+LMMathSymbols9-Regular /FontDescriptor 4526 0 R /FirstChar 3 /LastChar 105 /Widths 4314 0 R /Encoding 4313 0 R >>
+641 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /SRVGJC+LMMathSymbols9-Regular /FontDescriptor 4552 0 R /FirstChar 3 /LastChar 105 /Widths 4340 0 R /Encoding 4339 0 R >>
endobj
-340 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /DDAMXW+LMRoman10-Regular /FontDescriptor 4514 0 R /FirstChar 40 /LastChar 116 /Widths 4418 0 R /Encoding 4311 0 R >>
+344 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /DDAMXW+LMRoman10-Regular /FontDescriptor 4540 0 R /FirstChar 40 /LastChar 116 /Widths 4444 0 R /Encoding 4337 0 R >>
endobj
-343 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /LNPUMK+LMRoman7-Regular /FontDescriptor 4516 0 R /FirstChar 40 /LastChar 50 /Widths 4415 0 R /Encoding 4311 0 R >>
+347 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /LNPUMK+LMRoman7-Regular /FontDescriptor 4542 0 R /FirstChar 40 /LastChar 50 /Widths 4441 0 R /Encoding 4337 0 R >>
endobj
-636 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /QNRZJS+LMSans9-Regular /FontDescriptor 4518 0 R /FirstChar 65 /LastChar 89 /Widths 4312 0 R /Encoding 4311 0 R >>
+642 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /QNRZJS+LMSans9-Regular /FontDescriptor 4544 0 R /FirstChar 65 /LastChar 89 /Widths 4338 0 R /Encoding 4337 0 R >>
endobj
-353 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 317 0 R 363 0 R 374 0 R 389 0 R 411 0 R 422 0 R 434 0 R 445 0 R 455 0 R 460 0 R ] >>
+357 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 321 0 R 367 0 R 378 0 R 393 0 R 412 0 R 425 0 R 438 0 R 449 0 R 459 0 R 464 0 R ] >>
endobj
-472 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 467 0 R 475 0 R 480 0 R 486 0 R 497 0 R 503 0 R 507 0 R 515 0 R 526 0 R 537 0 R ] >>
+476 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 471 0 R 479 0 R 484 0 R 490 0 R 501 0 R 507 0 R 511 0 R 519 0 R 529 0 R 538 0 R ] >>
endobj
-545 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 542 0 R 551 0 R 564 0 R 575 0 R 585 0 R 591 0 R 595 0 R 599 0 R 605 0 R 611 0 R ] >>
+550 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 547 0 R 555 0 R 568 0 R 581 0 R 591 0 R 597 0 R 601 0 R 605 0 R 611 0 R 617 0 R ] >>
endobj
-627 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 620 0 R 630 0 R 673 0 R 724 0 R 779 0 R 807 0 R 832 0 R 853 0 R 895 0 R 931 0 R ] >>
+633 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 626 0 R 636 0 R 679 0 R 730 0 R 785 0 R 817 0 R 842 0 R 870 0 R 907 0 R 951 0 R ] >>
endobj
-1026 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 991 0 R 1029 0 R 1085 0 R 1148 0 R 1207 0 R 1272 0 R 1339 0 R 1387 0 R 1432 0 R 1474 0 R ] >>
+1052 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 1009 0 R 1055 0 R 1113 0 R 1177 0 R 1237 0 R 1304 0 R 1369 0 R 1417 0 R 1457 0 R 1504 0 R ] >>
endobj
-1590 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 1532 0 R 1593 0 R 1639 0 R 1687 0 R 1733 0 R 1785 0 R 1846 0 R 1890 0 R 1953 0 R 2008 0 R ] >>
+1615 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 1562 0 R 1618 0 R 1666 0 R 1716 0 R 1762 0 R 1814 0 R 1874 0 R 1923 0 R 1989 0 R 2041 0 R ] >>
endobj
-2099 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 2056 0 R 2101 0 R 2160 0 R 2225 0 R 2283 0 R 2335 0 R 2365 0 R 2403 0 R 2443 0 R 2489 0 R ] >>
+2128 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 2080 0 R 2130 0 R 2192 0 R 2258 0 R 2312 0 R 2362 0 R 2391 0 R 2429 0 R 2469 0 R 2518 0 R ] >>
endobj
-2578 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 2540 0 R 2581 0 R 2636 0 R 2677 0 R 2714 0 R 2767 0 R 2830 0 R 2876 0 R 2923 0 R 2979 0 R ] >>
+2608 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 2570 0 R 2611 0 R 2663 0 R 2712 0 R 2744 0 R 2804 0 R 2868 0 R 2910 0 R 2960 0 R 3012 0 R ] >>
endobj
-3076 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 3034 0 R 3078 0 R 3137 0 R 3197 0 R 3250 0 R 3288 0 R 3341 0 R 3393 0 R 3453 0 R 3509 0 R ] >>
+3109 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 3069 0 R 3111 0 R 3164 0 R 3225 0 R 3279 0 R 3325 0 R 3377 0 R 3432 0 R 3492 0 R 3547 0 R ] >>
endobj
-3630 0 obj
-<< /Type /Pages /Parent 4528 0 R /Count 10 /Kids [ 3576 0 R 3632 0 R 3671 0 R 3722 0 R 3767 0 R 3819 0 R 3862 0 R 3918 0 R 3968 0 R 4022 0 R ] >>
+3668 0 obj
+<< /Type /Pages /Parent 4554 0 R /Count 10 /Kids [ 3614 0 R 3670 0 R 3708 0 R 3759 0 R 3804 0 R 3856 0 R 3899 0 R 3955 0 R 4005 0 R 4059 0 R ] >>
endobj
-4143 0 obj
-<< /Type /Pages /Parent 4529 0 R /Count 6 /Kids [ 4088 0 R 4145 0 R 4197 0 R 4227 0 R 4294 0 R 4305 0 R ] >>
+4182 0 obj
+<< /Type /Pages /Parent 4555 0 R /Count 5 /Kids [ 4125 0 R 4184 0 R 4238 0 R 4303 0 R 4331 0 R ] >>
endobj
-4528 0 obj
-<< /Type /Pages /Parent 4530 0 R /Count 100 /Kids [ 353 0 R 472 0 R 545 0 R 627 0 R 1026 0 R 1590 0 R 2099 0 R 2578 0 R 3076 0 R 3630 0 R ] >>
+4554 0 obj
+<< /Type /Pages /Parent 4556 0 R /Count 100 /Kids [ 357 0 R 476 0 R 550 0 R 633 0 R 1052 0 R 1615 0 R 2128 0 R 2608 0 R 3109 0 R 3668 0 R ] >>
endobj
-4529 0 obj
-<< /Type /Pages /Parent 4530 0 R /Count 6 /Kids [ 4143 0 R ] >>
+4555 0 obj
+<< /Type /Pages /Parent 4556 0 R /Count 5 /Kids [ 4182 0 R ] >>
endobj
-4530 0 obj
-<< /Type /Pages /Count 106 /Kids [ 4528 0 R 4529 0 R ] >>
+4556 0 obj
+<< /Type /Pages /Count 105 /Kids [ 4554 0 R 4555 0 R ] >>
endobj
-4531 0 obj
-<< /Type /Outlines /First 6 0 R /Last 314 0 R /Count 12 >>
+4557 0 obj
+<< /Type /Outlines /First 6 0 R /Last 318 0 R /Count 12 >>
+endobj
+318 0 obj
+<< /Title 319 0 R /A 316 0 R /Parent 4557 0 R /Prev 314 0 R >>
endobj
314 0 obj
-<< /Title 315 0 R /A 312 0 R /Parent 4531 0 R /Prev 310 0 R >>
+<< /Title 315 0 R /A 312 0 R /Parent 4557 0 R /Prev 202 0 R /Next 318 0 R >>
endobj
310 0 obj
-<< /Title 311 0 R /A 308 0 R /Parent 4531 0 R /Prev 202 0 R /Next 314 0 R >>
+<< /Title 311 0 R /A 308 0 R /Parent 270 0 R /Prev 306 0 R >>
endobj
306 0 obj
-<< /Title 307 0 R /A 304 0 R /Parent 270 0 R /Prev 302 0 R >>
+<< /Title 307 0 R /A 304 0 R /Parent 270 0 R /Prev 302 0 R /Next 310 0 R >>
endobj
302 0 obj
<< /Title 303 0 R /A 300 0 R /Parent 270 0 R /Prev 298 0 R /Next 306 0 R >>
@@ -16077,7 +16133,7 @@ endobj
<< /Title 275 0 R /A 272 0 R /Parent 270 0 R /Next 278 0 R >>
endobj
270 0 obj
-<< /Title 271 0 R /A 268 0 R /Parent 202 0 R /Prev 210 0 R /First 274 0 R /Last 306 0 R /Count -9 >>
+<< /Title 271 0 R /A 268 0 R /Parent 202 0 R /Prev 210 0 R /First 274 0 R /Last 310 0 R /Count -10 >>
endobj
266 0 obj
<< /Title 267 0 R /A 264 0 R /Parent 210 0 R /Prev 262 0 R >>
@@ -16128,7 +16184,7 @@ endobj
<< /Title 207 0 R /A 204 0 R /Parent 202 0 R /Next 210 0 R >>
endobj
202 0 obj
-<< /Title 203 0 R /A 200 0 R /Parent 4531 0 R /Prev 174 0 R /Next 310 0 R /First 206 0 R /Last 270 0 R /Count -3 >>
+<< /Title 203 0 R /A 200 0 R /Parent 4557 0 R /Prev 174 0 R /Next 314 0 R /First 206 0 R /Last 270 0 R /Count -3 >>
endobj
198 0 obj
<< /Title 199 0 R /A 196 0 R /Parent 174 0 R /Prev 194 0 R >>
@@ -16149,7 +16205,7 @@ endobj
<< /Title 179 0 R /A 176 0 R /Parent 174 0 R /Next 182 0 R >>
endobj
174 0 obj
-<< /Title 175 0 R /A 172 0 R /Parent 4531 0 R /Prev 150 0 R /Next 202 0 R /First 178 0 R /Last 198 0 R /Count -6 >>
+<< /Title 175 0 R /A 172 0 R /Parent 4557 0 R /Prev 150 0 R /Next 202 0 R /First 178 0 R /Last 198 0 R /Count -6 >>
endobj
170 0 obj
<< /Title 171 0 R /A 168 0 R /Parent 150 0 R /Prev 166 0 R >>
@@ -16167,10 +16223,10 @@ endobj
<< /Title 155 0 R /A 152 0 R /Parent 150 0 R /Next 158 0 R >>
endobj
150 0 obj
-<< /Title 151 0 R /A 148 0 R /Parent 4531 0 R /Prev 146 0 R /Next 174 0 R /First 154 0 R /Last 170 0 R /Count -5 >>
+<< /Title 151 0 R /A 148 0 R /Parent 4557 0 R /Prev 146 0 R /Next 174 0 R /First 154 0 R /Last 170 0 R /Count -5 >>
endobj
146 0 obj
-<< /Title 147 0 R /A 144 0 R /Parent 4531 0 R /Prev 66 0 R /Next 150 0 R >>
+<< /Title 147 0 R /A 144 0 R /Parent 4557 0 R /Prev 66 0 R /Next 150 0 R >>
endobj
142 0 obj
<< /Title 143 0 R /A 140 0 R /Parent 66 0 R /Prev 138 0 R >>
@@ -16230,10 +16286,10 @@ endobj
<< /Title 71 0 R /A 68 0 R /Parent 66 0 R /Next 82 0 R /First 74 0 R /Last 78 0 R /Count -2 >>
endobj
66 0 obj
-<< /Title 67 0 R /A 64 0 R /Parent 4531 0 R /Prev 62 0 R /Next 146 0 R /First 70 0 R /Last 142 0 R /Count -7 >>
+<< /Title 67 0 R /A 64 0 R /Parent 4557 0 R /Prev 62 0 R /Next 146 0 R /First 70 0 R /Last 142 0 R /Count -7 >>
endobj
62 0 obj
-<< /Title 63 0 R /A 60 0 R /Parent 4531 0 R /Prev 34 0 R /Next 66 0 R >>
+<< /Title 63 0 R /A 60 0 R /Parent 4557 0 R /Prev 34 0 R /Next 66 0 R >>
endobj
58 0 obj
<< /Title 59 0 R /A 56 0 R /Parent 34 0 R /Prev 42 0 R >>
@@ -16254,7 +16310,7 @@ endobj
<< /Title 39 0 R /A 36 0 R /Parent 34 0 R /Next 42 0 R >>
endobj
34 0 obj
-<< /Title 35 0 R /A 32 0 R /Parent 4531 0 R /Prev 14 0 R /Next 62 0 R /First 38 0 R /Last 58 0 R /Count -3 >>
+<< /Title 35 0 R /A 32 0 R /Parent 4557 0 R /Prev 14 0 R /Next 62 0 R /First 38 0 R /Last 58 0 R /Count -3 >>
endobj
30 0 obj
<< /Title 31 0 R /A 28 0 R /Parent 14 0 R /Prev 26 0 R >>
@@ -16269,2601 +16325,2614 @@ endobj
<< /Title 19 0 R /A 16 0 R /Parent 14 0 R /Next 22 0 R >>
endobj
14 0 obj
-<< /Title 15 0 R /A 12 0 R /Parent 4531 0 R /Prev 10 0 R /Next 34 0 R /First 18 0 R /Last 30 0 R /Count -4 >>
+<< /Title 15 0 R /A 12 0 R /Parent 4557 0 R /Prev 10 0 R /Next 34 0 R /First 18 0 R /Last 30 0 R /Count -4 >>
endobj
10 0 obj
-<< /Title 11 0 R /A 8 0 R /Parent 4531 0 R /Prev 6 0 R /Next 14 0 R >>
+<< /Title 11 0 R /A 8 0 R /Parent 4557 0 R /Prev 6 0 R /Next 14 0 R >>
endobj
6 0 obj
-<< /Title 7 0 R /A 4 0 R /Parent 4531 0 R /Next 10 0 R >>
-endobj
-4532 0 obj
-<< /Names [ (Doc-Start) 324 0 R (HD.1) 634 0 R (HD.10) 645 0 R (HD.100) 743 0 R (HD.1000) 1731 0 R (HD.1001) 1736 0 R (HD.1002) 1737 0 R (HD.1003) 1738 0 R (HD.1004) 1739 0 R (HD.1005) 1740 0 R (HD.1006) 1741 0 R (HD.1007) 1742 0 R (HD.1008) 1743 0 R (HD.1009) 1744 0 R (HD.101) 744 0 R (HD.1010) 1745 0 R (HD.1011) 1746 0 R (HD.1012) 1747 0 R (HD.1013) 1748 0 R (HD.1014) 1749 0 R (HD.1015) 1750 0 R (HD.1016) 1751 0 R (HD.1017) 1752 0 R (HD.1018) 1753 0 R (HD.1019) 1754 0 R (HD.102) 745 0 R (HD.1020) 1755 0 R (HD.1021) 1756 0 R (HD.1022) 1757 0 R (HD.1023) 1758 0 R (HD.1024) 1759 0 R (HD.1025) 1760 0 R ] /Limits [ (Doc-Start) (HD.1025) ] >>
-endobj
-4533 0 obj
-<< /Names [ (HD.1026) 1761 0 R (HD.1027) 1762 0 R (HD.1028) 1763 0 R (HD.1029) 1764 0 R (HD.103) 746 0 R (HD.1030) 1765 0 R (HD.1031) 1766 0 R (HD.1032) 1767 0 R (HD.1033) 1768 0 R (HD.1034) 1769 0 R (HD.1035) 1770 0 R (HD.1036) 1771 0 R (HD.1037) 1772 0 R (HD.1038) 1773 0 R (HD.1039) 1774 0 R (HD.104) 747 0 R (HD.1040) 1775 0 R (HD.1041) 1776 0 R (HD.1042) 1777 0 R (HD.1043) 1778 0 R (HD.1044) 1779 0 R (HD.1045) 1780 0 R (HD.1046) 1781 0 R (HD.1047) 1782 0 R (HD.1048) 1783 0 R (HD.1049) 1788 0 R (HD.105) 748 0 R (HD.1050) 1789 0 R (HD.1051) 1790 0 R (HD.1052) 1791 0 R (HD.1053) 1792 0 R (HD.1054) 1793 0 R ] /Limits [ (HD.1026) (HD.1054) ] >>
-endobj
-4534 0 obj
-<< /Names [ (HD.1055) 1794 0 R (HD.1056) 1795 0 R (HD.1057) 1796 0 R (HD.1058) 1797 0 R (HD.1059) 1798 0 R (HD.106) 749 0 R (HD.1060) 1799 0 R (HD.1061) 1800 0 R (HD.1062) 1801 0 R (HD.1063) 1802 0 R (HD.1064) 1803 0 R (HD.1065) 1804 0 R (HD.1066) 1805 0 R (HD.1067) 1806 0 R (HD.1068) 1807 0 R (HD.1069) 1808 0 R (HD.107) 750 0 R (HD.1070) 1809 0 R (HD.1071) 1810 0 R (HD.1072) 1811 0 R (HD.1073) 1812 0 R (HD.1074) 1813 0 R (HD.1075) 1814 0 R (HD.1076) 1815 0 R (HD.1077) 1816 0 R (HD.1078) 1817 0 R (HD.1079) 1818 0 R (HD.108) 751 0 R (HD.1080) 1819 0 R (HD.1081) 1820 0 R (HD.1082) 1821 0 R (HD.1083) 1822 0 R ] /Limits [ (HD.1055) (HD.1083) ] >>
-endobj
-4535 0 obj
-<< /Names [ (HD.1084) 1823 0 R (HD.1085) 1824 0 R (HD.1086) 1825 0 R (HD.1087) 1826 0 R (HD.1088) 1827 0 R (HD.1089) 1828 0 R (HD.109) 752 0 R (HD.1090) 1829 0 R (HD.1091) 1830 0 R (HD.1092) 1831 0 R (HD.1093) 1832 0 R (HD.1094) 1833 0 R (HD.1095) 1834 0 R (HD.1096) 1835 0 R (HD.1097) 1836 0 R (HD.1098) 1837 0 R (HD.1099) 1838 0 R (HD.11) 646 0 R (HD.110) 753 0 R (HD.1100) 1839 0 R (HD.1101) 1840 0 R (HD.1102) 1841 0 R (HD.1103) 1842 0 R (HD.1104) 1843 0 R (HD.1105) 1844 0 R (HD.1106) 1849 0 R (HD.1107) 1850 0 R (HD.1108) 1851 0 R (HD.1109) 1852 0 R (HD.111) 754 0 R (HD.1110) 1853 0 R (HD.1111) 1854 0 R ] /Limits [ (HD.1084) (HD.1111) ] >>
-endobj
-4536 0 obj
-<< /Names [ (HD.1112) 1855 0 R (HD.1113) 1856 0 R (HD.1114) 1857 0 R (HD.1115) 1858 0 R (HD.1116) 1859 0 R (HD.1117) 1860 0 R (HD.1118) 1861 0 R (HD.1119) 1862 0 R (HD.112) 755 0 R (HD.1120) 1863 0 R (HD.1121) 1864 0 R (HD.1122) 1865 0 R (HD.1123) 1866 0 R (HD.1124) 1867 0 R (HD.1125) 1868 0 R (HD.1126) 1869 0 R (HD.1127) 1870 0 R (HD.1128) 1871 0 R (HD.1129) 1872 0 R (HD.113) 756 0 R (HD.1130) 1873 0 R (HD.1131) 1874 0 R (HD.1132) 1875 0 R (HD.1133) 1876 0 R (HD.1134) 1877 0 R (HD.1135) 1878 0 R (HD.1136) 1879 0 R (HD.1137) 1880 0 R (HD.1138) 1881 0 R (HD.1139) 1882 0 R (HD.114) 757 0 R (HD.1140) 1883 0 R ] /Limits [ (HD.1112) (HD.1140) ] >>
-endobj
-4537 0 obj
-<< /Names [ (HD.1141) 1884 0 R (HD.1142) 1885 0 R (HD.1143) 1886 0 R (HD.1144) 1887 0 R (HD.1145) 1888 0 R (HD.1146) 1893 0 R (HD.1147) 1894 0 R (HD.1148) 1895 0 R (HD.1149) 1896 0 R (HD.115) 758 0 R (HD.1150) 1897 0 R (HD.1151) 1898 0 R (HD.1152) 1899 0 R (HD.1153) 1900 0 R (HD.1154) 1901 0 R (HD.1155) 1902 0 R (HD.1156) 1903 0 R (HD.1157) 1904 0 R (HD.1158) 1905 0 R (HD.1159) 1906 0 R (HD.116) 759 0 R (HD.1160) 1907 0 R (HD.1161) 1908 0 R (HD.1162) 1909 0 R (HD.1163) 1910 0 R (HD.1164) 1911 0 R (HD.1165) 1912 0 R (HD.1166) 1913 0 R (HD.1167) 1914 0 R (HD.1168) 1915 0 R (HD.1169) 1916 0 R (HD.117) 760 0 R ] /Limits [ (HD.1141) (HD.117) ] >>
-endobj
-4538 0 obj
-<< /Names [ (HD.1170) 1917 0 R (HD.1171) 1918 0 R (HD.1172) 1919 0 R (HD.1173) 1920 0 R (HD.1174) 1921 0 R (HD.1175) 1922 0 R (HD.1176) 1923 0 R (HD.1177) 1924 0 R (HD.1178) 1925 0 R (HD.1179) 1926 0 R (HD.118) 761 0 R (HD.1180) 1927 0 R (HD.1181) 1928 0 R (HD.1182) 1929 0 R (HD.1183) 1930 0 R (HD.1184) 1931 0 R (HD.1185) 1932 0 R (HD.1186) 1933 0 R (HD.1187) 1934 0 R (HD.1188) 1935 0 R (HD.1189) 1936 0 R (HD.119) 762 0 R (HD.1190) 1937 0 R (HD.1191) 1938 0 R (HD.1192) 1939 0 R (HD.1193) 1940 0 R (HD.1194) 1941 0 R (HD.1195) 1942 0 R (HD.1196) 1943 0 R (HD.1197) 1944 0 R (HD.1198) 1945 0 R (HD.1199) 1946 0 R ] /Limits [ (HD.1170) (HD.1199) ] >>
-endobj
-4539 0 obj
-<< /Names [ (HD.12) 647 0 R (HD.120) 763 0 R (HD.1200) 1947 0 R (HD.1201) 1948 0 R (HD.1202) 1949 0 R (HD.1203) 1950 0 R (HD.1204) 1951 0 R (HD.1205) 1956 0 R (HD.1206) 1957 0 R (HD.1207) 1958 0 R (HD.1208) 1959 0 R (HD.1209) 1960 0 R (HD.121) 764 0 R (HD.1210) 1961 0 R (HD.1211) 1962 0 R (HD.1212) 1963 0 R (HD.1213) 1964 0 R (HD.1214) 1965 0 R (HD.1215) 1966 0 R (HD.1216) 1967 0 R (HD.1217) 1968 0 R (HD.1218) 1969 0 R (HD.1219) 1970 0 R (HD.122) 765 0 R (HD.1220) 1971 0 R (HD.1221) 1972 0 R (HD.1222) 1973 0 R (HD.1223) 1974 0 R (HD.1224) 1975 0 R (HD.1225) 1976 0 R (HD.1226) 1977 0 R (HD.1227) 1978 0 R ] /Limits [ (HD.12) (HD.1227) ] >>
-endobj
-4540 0 obj
-<< /Names [ (HD.1228) 1979 0 R (HD.1229) 1980 0 R (HD.123) 766 0 R (HD.1230) 1981 0 R (HD.1231) 1982 0 R (HD.1232) 1983 0 R (HD.1233) 1984 0 R (HD.1234) 1985 0 R (HD.1235) 1986 0 R (HD.1236) 1987 0 R (HD.1237) 1988 0 R (HD.1238) 1989 0 R (HD.1239) 1990 0 R (HD.124) 767 0 R (HD.1240) 1991 0 R (HD.1241) 1992 0 R (HD.1242) 1993 0 R (HD.1243) 1994 0 R (HD.1244) 1995 0 R (HD.1245) 1996 0 R (HD.1246) 1997 0 R (HD.1247) 1998 0 R (HD.1248) 1999 0 R (HD.1249) 2000 0 R (HD.125) 768 0 R (HD.1250) 2001 0 R (HD.1251) 2002 0 R (HD.1252) 2003 0 R (HD.1253) 2004 0 R (HD.1254) 2005 0 R (HD.1255) 2006 0 R (HD.1256) 2011 0 R ] /Limits [ (HD.1228) (HD.1256) ] >>
-endobj
-4541 0 obj
-<< /Names [ (HD.1257) 2012 0 R (HD.1258) 2013 0 R (HD.1259) 2014 0 R (HD.126) 769 0 R (HD.1260) 2015 0 R (HD.1261) 2016 0 R (HD.1262) 2017 0 R (HD.1263) 2018 0 R (HD.1264) 2019 0 R (HD.1265) 2020 0 R (HD.1266) 2021 0 R (HD.1267) 2022 0 R (HD.1268) 2023 0 R (HD.1269) 2024 0 R (HD.127) 770 0 R (HD.1270) 2025 0 R (HD.1271) 2026 0 R (HD.1272) 2027 0 R (HD.1273) 2028 0 R (HD.1274) 2029 0 R (HD.1275) 2030 0 R (HD.1276) 2031 0 R (HD.1277) 2032 0 R (HD.1278) 2033 0 R (HD.1279) 2034 0 R (HD.128) 771 0 R (HD.1280) 2035 0 R (HD.1281) 2036 0 R (HD.1282) 2037 0 R (HD.1283) 2038 0 R (HD.1284) 2039 0 R (HD.1285) 2040 0 R ] /Limits [ (HD.1257) (HD.1285) ] >>
-endobj
-4542 0 obj
-<< /Names [ (HD.1286) 2041 0 R (HD.1287) 2042 0 R (HD.1288) 2043 0 R (HD.1289) 2044 0 R (HD.129) 772 0 R (HD.1290) 2045 0 R (HD.1291) 2046 0 R (HD.1292) 2047 0 R (HD.1293) 2048 0 R (HD.1294) 2049 0 R (HD.1295) 2050 0 R (HD.1296) 2051 0 R (HD.1297) 2052 0 R (HD.1298) 2053 0 R (HD.1299) 2054 0 R (HD.13) 648 0 R (HD.130) 773 0 R (HD.1300) 2059 0 R (HD.1301) 2060 0 R (HD.1302) 2061 0 R (HD.1303) 2062 0 R (HD.1304) 2063 0 R (HD.1305) 2064 0 R (HD.1306) 2065 0 R (HD.1307) 2066 0 R (HD.1308) 2067 0 R (HD.1309) 2068 0 R (HD.131) 774 0 R (HD.1310) 2069 0 R (HD.1311) 2070 0 R (HD.1312) 2071 0 R (HD.1313) 2072 0 R ] /Limits [ (HD.1286) (HD.1313) ] >>
-endobj
-4543 0 obj
-<< /Names [ (HD.1314) 2073 0 R (HD.1315) 2074 0 R (HD.1316) 2075 0 R (HD.1317) 2076 0 R (HD.1318) 2077 0 R (HD.1319) 2078 0 R (HD.132) 775 0 R (HD.1320) 2079 0 R (HD.1321) 2080 0 R (HD.1322) 2081 0 R (HD.1323) 2082 0 R (HD.1324) 2083 0 R (HD.1325) 2084 0 R (HD.1326) 2085 0 R (HD.1327) 2086 0 R (HD.1328) 2087 0 R (HD.1329) 2088 0 R (HD.133) 776 0 R (HD.1330) 2089 0 R (HD.1331) 2090 0 R (HD.1332) 2091 0 R (HD.1333) 2092 0 R (HD.1334) 2093 0 R (HD.1335) 2094 0 R (HD.1336) 2095 0 R (HD.1337) 2096 0 R (HD.1338) 2097 0 R (HD.1339) 2098 0 R (HD.134) 777 0 R (HD.1340) 2104 0 R (HD.1341) 2105 0 R (HD.1342) 2106 0 R ] /Limits [ (HD.1314) (HD.1342) ] >>
-endobj
-4544 0 obj
-<< /Names [ (HD.1343) 2107 0 R (HD.1344) 2108 0 R (HD.1345) 2109 0 R (HD.1346) 2110 0 R (HD.1347) 2111 0 R (HD.1348) 2112 0 R (HD.1349) 2113 0 R (HD.135) 782 0 R (HD.1350) 2114 0 R (HD.1351) 2115 0 R (HD.1352) 2116 0 R (HD.1353) 2117 0 R (HD.1354) 2118 0 R (HD.1355) 2119 0 R (HD.1356) 2120 0 R (HD.1357) 2121 0 R (HD.1358) 2122 0 R (HD.1359) 2123 0 R (HD.136) 783 0 R (HD.1360) 2124 0 R (HD.1361) 2125 0 R (HD.1362) 2126 0 R (HD.1363) 2127 0 R (HD.1364) 2128 0 R (HD.1365) 2129 0 R (HD.1366) 2130 0 R (HD.1367) 2131 0 R (HD.1368) 2132 0 R (HD.1369) 2133 0 R (HD.137) 784 0 R (HD.1370) 2134 0 R (HD.1371) 2135 0 R ] /Limits [ (HD.1343) (HD.1371) ] >>
-endobj
-4545 0 obj
-<< /Names [ (HD.1372) 2136 0 R (HD.1373) 2137 0 R (HD.1374) 2138 0 R (HD.1375) 2139 0 R (HD.1376) 2140 0 R (HD.1377) 2141 0 R (HD.1378) 2142 0 R (HD.1379) 2143 0 R (HD.138) 785 0 R (HD.1380) 2144 0 R (HD.1381) 2145 0 R (HD.1382) 2146 0 R (HD.1383) 2147 0 R (HD.1384) 2148 0 R (HD.1385) 2149 0 R (HD.1386) 2150 0 R (HD.1387) 2151 0 R (HD.1388) 2152 0 R (HD.1389) 2153 0 R (HD.139) 786 0 R (HD.1390) 2154 0 R (HD.1391) 2155 0 R (HD.1392) 2156 0 R (HD.1393) 2157 0 R (HD.1394) 2158 0 R (HD.1395) 2163 0 R (HD.1396) 2164 0 R (HD.1397) 2165 0 R (HD.1398) 2166 0 R (HD.1399) 2167 0 R (HD.14) 649 0 R (HD.140) 787 0 R ] /Limits [ (HD.1372) (HD.140) ] >>
-endobj
-4546 0 obj
-<< /Names [ (HD.1400) 2168 0 R (HD.1401) 2169 0 R (HD.1402) 2170 0 R (HD.1403) 2171 0 R (HD.1404) 2172 0 R (HD.1405) 2173 0 R (HD.1406) 2174 0 R (HD.1407) 2175 0 R (HD.1408) 2176 0 R (HD.1409) 2177 0 R (HD.141) 788 0 R (HD.1410) 2178 0 R (HD.1411) 2179 0 R (HD.1412) 2180 0 R (HD.1413) 2181 0 R (HD.1414) 2182 0 R (HD.1415) 2183 0 R (HD.1416) 2184 0 R (HD.1417) 2185 0 R (HD.1418) 2186 0 R (HD.1419) 2187 0 R (HD.142) 789 0 R (HD.1420) 2188 0 R (HD.1421) 2189 0 R (HD.1422) 2190 0 R (HD.1423) 2191 0 R (HD.1424) 2192 0 R (HD.1425) 2193 0 R (HD.1426) 2194 0 R (HD.1427) 2195 0 R (HD.1428) 2196 0 R (HD.1429) 2197 0 R ] /Limits [ (HD.1400) (HD.1429) ] >>
-endobj
-4547 0 obj
-<< /Names [ (HD.143) 790 0 R (HD.1430) 2198 0 R (HD.1431) 2199 0 R (HD.1432) 2200 0 R (HD.1433) 2201 0 R (HD.1434) 2202 0 R (HD.1435) 2203 0 R (HD.1436) 2204 0 R (HD.1437) 2205 0 R (HD.1438) 2206 0 R (HD.1439) 2207 0 R (HD.144) 791 0 R (HD.1440) 2208 0 R (HD.1441) 2209 0 R (HD.1442) 2210 0 R (HD.1443) 2211 0 R (HD.1444) 2212 0 R (HD.1445) 2213 0 R (HD.1446) 2214 0 R (HD.1447) 2215 0 R (HD.1448) 2216 0 R (HD.1449) 2217 0 R (HD.145) 792 0 R (HD.1450) 2218 0 R (HD.1451) 2219 0 R (HD.1452) 2220 0 R (HD.1453) 2221 0 R (HD.1454) 2222 0 R (HD.1455) 2223 0 R (HD.1456) 2228 0 R (HD.1457) 2229 0 R (HD.1458) 2230 0 R ] /Limits [ (HD.143) (HD.1458) ] >>
-endobj
-4548 0 obj
-<< /Names [ (HD.1459) 2231 0 R (HD.146) 793 0 R (HD.1460) 2232 0 R (HD.1461) 2233 0 R (HD.1462) 2234 0 R (HD.1463) 2235 0 R (HD.1464) 2236 0 R (HD.1465) 2237 0 R (HD.1466) 2238 0 R (HD.1467) 2239 0 R (HD.1468) 2240 0 R (HD.1469) 2241 0 R (HD.147) 794 0 R (HD.1470) 2242 0 R (HD.1471) 2243 0 R (HD.1472) 2244 0 R (HD.1473) 2245 0 R (HD.1474) 2246 0 R (HD.1475) 2247 0 R (HD.1476) 2248 0 R (HD.1477) 2249 0 R (HD.1478) 2250 0 R (HD.1479) 2251 0 R (HD.148) 795 0 R (HD.1480) 2252 0 R (HD.1481) 2253 0 R (HD.1482) 2254 0 R (HD.1483) 2255 0 R (HD.1484) 2256 0 R (HD.1485) 2257 0 R (HD.1486) 2258 0 R (HD.1487) 2259 0 R ] /Limits [ (HD.1459) (HD.1487) ] >>
-endobj
-4549 0 obj
-<< /Names [ (HD.1488) 2260 0 R (HD.1489) 2261 0 R (HD.149) 796 0 R (HD.1490) 2262 0 R (HD.1491) 2263 0 R (HD.1492) 2264 0 R (HD.1493) 2265 0 R (HD.1494) 2266 0 R (HD.1495) 2267 0 R (HD.1496) 2268 0 R (HD.1497) 2269 0 R (HD.1498) 2270 0 R (HD.1499) 2271 0 R (HD.15) 650 0 R (HD.150) 797 0 R (HD.1500) 2272 0 R (HD.1501) 2273 0 R (HD.1502) 2274 0 R (HD.1503) 2275 0 R (HD.1504) 2276 0 R (HD.1505) 2277 0 R (HD.1506) 2278 0 R (HD.1507) 2279 0 R (HD.1508) 2280 0 R (HD.1509) 2281 0 R (HD.151) 798 0 R (HD.1510) 2286 0 R (HD.1511) 2287 0 R (HD.1512) 2288 0 R (HD.1513) 2289 0 R (HD.1514) 2290 0 R (HD.1515) 2291 0 R ] /Limits [ (HD.1488) (HD.1515) ] >>
-endobj
-4550 0 obj
-<< /Names [ (HD.1516) 2292 0 R (HD.1517) 2293 0 R (HD.1518) 2294 0 R (HD.1519) 2295 0 R (HD.152) 799 0 R (HD.1520) 2296 0 R (HD.1521) 2297 0 R (HD.1522) 2298 0 R (HD.1523) 2299 0 R (HD.1524) 2300 0 R (HD.1525) 2301 0 R (HD.1526) 2302 0 R (HD.1527) 2303 0 R (HD.1528) 2304 0 R (HD.1529) 2305 0 R (HD.153) 800 0 R (HD.1530) 2306 0 R (HD.1531) 2307 0 R (HD.1532) 2308 0 R (HD.1533) 2309 0 R (HD.1534) 2310 0 R (HD.1535) 2311 0 R (HD.1536) 2312 0 R (HD.1537) 2314 0 R (HD.1538) 2315 0 R (HD.1539) 2316 0 R (HD.154) 801 0 R (HD.1540) 2317 0 R (HD.1541) 2318 0 R (HD.1542) 2319 0 R (HD.1543) 2320 0 R (HD.1544) 2321 0 R ] /Limits [ (HD.1516) (HD.1544) ] >>
-endobj
-4551 0 obj
-<< /Names [ (HD.1545) 2322 0 R (HD.1546) 2323 0 R (HD.1547) 2324 0 R (HD.1548) 2325 0 R (HD.1549) 2326 0 R (HD.155) 802 0 R (HD.1550) 2327 0 R (HD.1551) 2328 0 R (HD.1552) 2329 0 R (HD.1553) 2330 0 R (HD.1554) 2331 0 R (HD.1555) 2332 0 R (HD.1556) 2333 0 R (HD.1557) 2338 0 R (HD.1558) 2339 0 R (HD.1559) 2340 0 R (HD.156) 803 0 R (HD.1560) 2341 0 R (HD.1561) 2342 0 R (HD.1562) 2343 0 R (HD.1563) 2344 0 R (HD.1564) 2345 0 R (HD.1565) 2346 0 R (HD.1566) 2347 0 R (HD.1567) 2348 0 R (HD.1568) 2349 0 R (HD.1569) 2350 0 R (HD.157) 804 0 R (HD.1570) 2351 0 R (HD.1571) 2352 0 R (HD.1572) 2353 0 R (HD.1573) 2354 0 R ] /Limits [ (HD.1545) (HD.1573) ] >>
-endobj
-4552 0 obj
-<< /Names [ (HD.1574) 2355 0 R (HD.1575) 2356 0 R (HD.1576) 2357 0 R (HD.1577) 2358 0 R (HD.1578) 2359 0 R (HD.1579) 2360 0 R (HD.158) 805 0 R (HD.1580) 2361 0 R (HD.1581) 2362 0 R (HD.1582) 2363 0 R (HD.1583) 2368 0 R (HD.1584) 2369 0 R (HD.1585) 2370 0 R (HD.1586) 2371 0 R (HD.1587) 2372 0 R (HD.1588) 2373 0 R (HD.1589) 2374 0 R (HD.159) 810 0 R (HD.1590) 2375 0 R (HD.1591) 2376 0 R (HD.1592) 2377 0 R (HD.1593) 2378 0 R (HD.1594) 2379 0 R (HD.1595) 2380 0 R (HD.1596) 2381 0 R (HD.1597) 2382 0 R (HD.1598) 2383 0 R (HD.1599) 2384 0 R (HD.16) 651 0 R (HD.160) 811 0 R (HD.1600) 2385 0 R (HD.1601) 2386 0 R ] /Limits [ (HD.1574) (HD.1601) ] >>
-endobj
-4553 0 obj
-<< /Names [ (HD.1602) 2387 0 R (HD.1603) 2388 0 R (HD.1604) 2389 0 R (HD.1605) 2390 0 R (HD.1606) 2391 0 R (HD.1607) 2393 0 R (HD.1608) 2394 0 R (HD.1609) 2395 0 R (HD.161) 812 0 R (HD.1610) 2396 0 R (HD.1611) 2397 0 R (HD.1612) 2398 0 R (HD.1613) 2399 0 R (HD.1614) 2400 0 R (HD.1615) 2401 0 R (HD.1616) 2406 0 R (HD.1617) 2407 0 R (HD.1618) 2408 0 R (HD.1619) 2409 0 R (HD.162) 813 0 R (HD.1620) 2410 0 R (HD.1621) 2411 0 R (HD.1622) 2412 0 R (HD.1623) 2413 0 R (HD.1624) 2414 0 R (HD.1625) 2415 0 R (HD.1626) 2416 0 R (HD.1627) 2417 0 R (HD.1628) 2418 0 R (HD.1629) 2419 0 R (HD.163) 814 0 R (HD.1630) 2420 0 R ] /Limits [ (HD.1602) (HD.1630) ] >>
-endobj
-4554 0 obj
-<< /Names [ (HD.1631) 2421 0 R (HD.1632) 2422 0 R (HD.1633) 2423 0 R (HD.1634) 2424 0 R (HD.1635) 2425 0 R (HD.1636) 2426 0 R (HD.1637) 2427 0 R (HD.1638) 2428 0 R (HD.1639) 2429 0 R (HD.164) 815 0 R (HD.1640) 2430 0 R (HD.1641) 2431 0 R (HD.1642) 2432 0 R (HD.1643) 2433 0 R (HD.1644) 2434 0 R (HD.1645) 2435 0 R (HD.1646) 2436 0 R (HD.1647) 2437 0 R (HD.1648) 2438 0 R (HD.1649) 2439 0 R (HD.165) 816 0 R (HD.1650) 2440 0 R (HD.1651) 2441 0 R (HD.1652) 2447 0 R (HD.1653) 2448 0 R (HD.1654) 2449 0 R (HD.1655) 2450 0 R (HD.1656) 2451 0 R (HD.1657) 2452 0 R (HD.1658) 2453 0 R (HD.1659) 2454 0 R (HD.166) 817 0 R ] /Limits [ (HD.1631) (HD.166) ] >>
-endobj
-4555 0 obj
-<< /Names [ (HD.1660) 2455 0 R (HD.1661) 2456 0 R (HD.1662) 2457 0 R (HD.1663) 2458 0 R (HD.1664) 2459 0 R (HD.1665) 2460 0 R (HD.1666) 2461 0 R (HD.1667) 2462 0 R (HD.1668) 2463 0 R (HD.1669) 2464 0 R (HD.167) 818 0 R (HD.1670) 2465 0 R (HD.1671) 2466 0 R (HD.1672) 2467 0 R (HD.1673) 2468 0 R (HD.1674) 2469 0 R (HD.1675) 2470 0 R (HD.1676) 2471 0 R (HD.1677) 2472 0 R (HD.1678) 2473 0 R (HD.1679) 2474 0 R (HD.168) 819 0 R (HD.1680) 2475 0 R (HD.1681) 2476 0 R (HD.1682) 2477 0 R (HD.1683) 2478 0 R (HD.1684) 2479 0 R (HD.1685) 2480 0 R (HD.1686) 2482 0 R (HD.1687) 2483 0 R (HD.1688) 2484 0 R (HD.1689) 2485 0 R ] /Limits [ (HD.1660) (HD.1689) ] >>
-endobj
-4556 0 obj
-<< /Names [ (HD.169) 820 0 R (HD.1690) 2486 0 R (HD.1691) 2487 0 R (HD.1692) 2492 0 R (HD.1693) 2493 0 R (HD.1694) 2494 0 R (HD.1695) 2495 0 R (HD.1696) 2496 0 R (HD.1697) 2497 0 R (HD.1698) 2498 0 R (HD.1699) 2499 0 R (HD.17) 652 0 R (HD.170) 821 0 R (HD.1700) 2500 0 R (HD.1701) 2501 0 R (HD.1702) 2502 0 R (HD.1703) 2503 0 R (HD.1704) 2504 0 R (HD.1705) 2505 0 R (HD.1706) 2506 0 R (HD.1707) 2507 0 R (HD.1708) 2508 0 R (HD.1709) 2509 0 R (HD.171) 822 0 R (HD.1710) 2510 0 R (HD.1711) 2511 0 R (HD.1712) 2512 0 R (HD.1713) 2513 0 R (HD.1714) 2514 0 R (HD.1715) 2515 0 R (HD.1716) 2516 0 R (HD.1717) 2517 0 R ] /Limits [ (HD.169) (HD.1717) ] >>
-endobj
-4557 0 obj
-<< /Names [ (HD.1718) 2518 0 R (HD.1719) 2519 0 R (HD.172) 823 0 R (HD.1720) 2520 0 R (HD.1721) 2521 0 R (HD.1722) 2522 0 R (HD.1723) 2523 0 R (HD.1724) 2524 0 R (HD.1725) 2525 0 R (HD.1726) 2526 0 R (HD.1727) 2527 0 R (HD.1728) 2528 0 R (HD.1729) 2529 0 R (HD.173) 824 0 R (HD.1730) 2530 0 R (HD.1731) 2531 0 R (HD.1732) 2532 0 R (HD.1733) 2533 0 R (HD.1734) 2534 0 R (HD.1735) 2535 0 R (HD.1736) 2536 0 R (HD.1737) 2537 0 R (HD.1738) 2543 0 R (HD.1739) 2544 0 R (HD.174) 825 0 R (HD.1740) 2545 0 R (HD.1741) 2546 0 R (HD.1742) 2547 0 R (HD.1743) 2548 0 R (HD.1744) 2549 0 R (HD.1745) 2550 0 R (HD.1746) 2551 0 R ] /Limits [ (HD.1718) (HD.1746) ] >>
+<< /Title 7 0 R /A 4 0 R /Parent 4557 0 R /Next 10 0 R >>
endobj
4558 0 obj
-<< /Names [ (HD.1747) 2552 0 R (HD.1748) 2553 0 R (HD.1749) 2554 0 R (HD.175) 826 0 R (HD.1750) 2555 0 R (HD.1751) 2556 0 R (HD.1752) 2557 0 R (HD.1753) 2558 0 R (HD.1754) 2559 0 R (HD.1755) 2560 0 R (HD.1756) 2561 0 R (HD.1757) 2562 0 R (HD.1758) 2564 0 R (HD.1759) 2565 0 R (HD.176) 827 0 R (HD.1760) 2566 0 R (HD.1761) 2567 0 R (HD.1762) 2568 0 R (HD.1763) 2569 0 R (HD.1764) 2570 0 R (HD.1765) 2571 0 R (HD.1766) 2572 0 R (HD.1767) 2573 0 R (HD.1768) 2574 0 R (HD.1769) 2575 0 R (HD.177) 828 0 R (HD.1770) 2576 0 R (HD.1771) 2584 0 R (HD.1772) 2585 0 R (HD.1773) 2586 0 R (HD.1774) 2587 0 R (HD.1775) 2588 0 R ] /Limits [ (HD.1747) (HD.1775) ] >>
+<< /Names [ (Doc-Start) 328 0 R (HD.1) 640 0 R (HD.10) 651 0 R (HD.100) 749 0 R (HD.1000) 1737 0 R (HD.1001) 1738 0 R (HD.1002) 1739 0 R (HD.1003) 1740 0 R (HD.1004) 1741 0 R (HD.1005) 1742 0 R (HD.1006) 1743 0 R (HD.1007) 1744 0 R (HD.1008) 1745 0 R (HD.1009) 1746 0 R (HD.101) 750 0 R (HD.1010) 1747 0 R (HD.1011) 1748 0 R (HD.1012) 1749 0 R (HD.1013) 1750 0 R (HD.1014) 1751 0 R (HD.1015) 1752 0 R (HD.1016) 1753 0 R (HD.1017) 1754 0 R (HD.1018) 1755 0 R (HD.1019) 1756 0 R (HD.102) 751 0 R (HD.1020) 1757 0 R (HD.1021) 1758 0 R (HD.1022) 1759 0 R (HD.1023) 1760 0 R (HD.1024) 1765 0 R (HD.1025) 1766 0 R ] /Limits [ (Doc-Start) (HD.1025) ] >>
endobj
4559 0 obj
-<< /Names [ (HD.1776) 2589 0 R (HD.1777) 2590 0 R (HD.1778) 2591 0 R (HD.1779) 2592 0 R (HD.178) 829 0 R (HD.1780) 2593 0 R (HD.1781) 2594 0 R (HD.1782) 2595 0 R (HD.1783) 2596 0 R (HD.1784) 2597 0 R (HD.1785) 2598 0 R (HD.1786) 2599 0 R (HD.1787) 2600 0 R (HD.1788) 2601 0 R (HD.1789) 2602 0 R (HD.179) 830 0 R (HD.1790) 2603 0 R (HD.1791) 2604 0 R (HD.1792) 2605 0 R (HD.1793) 2606 0 R (HD.1794) 2607 0 R (HD.1795) 2608 0 R (HD.1796) 2609 0 R (HD.1797) 2610 0 R (HD.1798) 2611 0 R (HD.1799) 2612 0 R (HD.18) 653 0 R (HD.180) 835 0 R (HD.1800) 2613 0 R (HD.1801) 2614 0 R (HD.1802) 2615 0 R (HD.1803) 2616 0 R ] /Limits [ (HD.1776) (HD.1803) ] >>
+<< /Names [ (HD.1026) 1767 0 R (HD.1027) 1768 0 R (HD.1028) 1769 0 R (HD.1029) 1770 0 R (HD.103) 752 0 R (HD.1030) 1771 0 R (HD.1031) 1772 0 R (HD.1032) 1773 0 R (HD.1033) 1774 0 R (HD.1034) 1775 0 R (HD.1035) 1776 0 R (HD.1036) 1777 0 R (HD.1037) 1778 0 R (HD.1038) 1779 0 R (HD.1039) 1780 0 R (HD.104) 753 0 R (HD.1040) 1781 0 R (HD.1041) 1782 0 R (HD.1042) 1783 0 R (HD.1043) 1784 0 R (HD.1044) 1785 0 R (HD.1045) 1786 0 R (HD.1046) 1787 0 R (HD.1047) 1788 0 R (HD.1048) 1789 0 R (HD.1049) 1790 0 R (HD.105) 754 0 R (HD.1050) 1791 0 R (HD.1051) 1792 0 R (HD.1052) 1793 0 R (HD.1053) 1794 0 R (HD.1054) 1795 0 R ] /Limits [ (HD.1026) (HD.1054) ] >>
endobj
4560 0 obj
-<< /Names [ (HD.1804) 2617 0 R (HD.1805) 2618 0 R (HD.1806) 2619 0 R (HD.1807) 2620 0 R (HD.1808) 2621 0 R (HD.1809) 2622 0 R (HD.181) 836 0 R (HD.1810) 2623 0 R (HD.1811) 2624 0 R (HD.1812) 2625 0 R (HD.1813) 2626 0 R (HD.1814) 2627 0 R (HD.1815) 2628 0 R (HD.1816) 2629 0 R (HD.1817) 2630 0 R (HD.1818) 2631 0 R (HD.1819) 2632 0 R (HD.182) 837 0 R (HD.1820) 2633 0 R (HD.1821) 2634 0 R (HD.1822) 2639 0 R (HD.1823) 2640 0 R (HD.1824) 2641 0 R (HD.1825) 2642 0 R (HD.1826) 2643 0 R (HD.1827) 2644 0 R (HD.1828) 2645 0 R (HD.1829) 2646 0 R (HD.183) 838 0 R (HD.1830) 2647 0 R (HD.1831) 2648 0 R (HD.1832) 2649 0 R ] /Limits [ (HD.1804) (HD.1832) ] >>
+<< /Names [ (HD.1055) 1796 0 R (HD.1056) 1797 0 R (HD.1057) 1798 0 R (HD.1058) 1799 0 R (HD.1059) 1800 0 R (HD.106) 755 0 R (HD.1060) 1801 0 R (HD.1061) 1802 0 R (HD.1062) 1803 0 R (HD.1063) 1804 0 R (HD.1064) 1805 0 R (HD.1065) 1806 0 R (HD.1066) 1807 0 R (HD.1067) 1808 0 R (HD.1068) 1809 0 R (HD.1069) 1810 0 R (HD.107) 756 0 R (HD.1070) 1811 0 R (HD.1071) 1812 0 R (HD.1072) 1817 0 R (HD.1073) 1818 0 R (HD.1074) 1819 0 R (HD.1075) 1820 0 R (HD.1076) 1821 0 R (HD.1077) 1822 0 R (HD.1078) 1823 0 R (HD.1079) 1824 0 R (HD.108) 757 0 R (HD.1080) 1825 0 R (HD.1081) 1826 0 R (HD.1082) 1827 0 R (HD.1083) 1828 0 R ] /Limits [ (HD.1055) (HD.1083) ] >>
endobj
4561 0 obj
-<< /Names [ (HD.1833) 2650 0 R (HD.1834) 2651 0 R (HD.1835) 2652 0 R (HD.1836) 2653 0 R (HD.1837) 2654 0 R (HD.1838) 2655 0 R (HD.1839) 2656 0 R (HD.184) 839 0 R (HD.1840) 2657 0 R (HD.1841) 2658 0 R (HD.1842) 2659 0 R (HD.1843) 2660 0 R (HD.1844) 2661 0 R (HD.1845) 2662 0 R (HD.1846) 2663 0 R (HD.1847) 2664 0 R (HD.1848) 2665 0 R (HD.1849) 2666 0 R (HD.185) 840 0 R (HD.1850) 2667 0 R (HD.1851) 2668 0 R (HD.1852) 2669 0 R (HD.1853) 2670 0 R (HD.1854) 2671 0 R (HD.1855) 2672 0 R (HD.1856) 2673 0 R (HD.1857) 2680 0 R (HD.1858) 2681 0 R (HD.1859) 2682 0 R (HD.186) 841 0 R (HD.1860) 2683 0 R (HD.1861) 2685 0 R ] /Limits [ (HD.1833) (HD.1861) ] >>
+<< /Names [ (HD.1084) 1829 0 R (HD.1085) 1830 0 R (HD.1086) 1831 0 R (HD.1087) 1832 0 R (HD.1088) 1833 0 R (HD.1089) 1834 0 R (HD.109) 758 0 R (HD.1090) 1835 0 R (HD.1091) 1836 0 R (HD.1092) 1837 0 R (HD.1093) 1838 0 R (HD.1094) 1839 0 R (HD.1095) 1840 0 R (HD.1096) 1841 0 R (HD.1097) 1842 0 R (HD.1098) 1843 0 R (HD.1099) 1844 0 R (HD.11) 652 0 R (HD.110) 759 0 R (HD.1100) 1845 0 R (HD.1101) 1846 0 R (HD.1102) 1847 0 R (HD.1103) 1848 0 R (HD.1104) 1849 0 R (HD.1105) 1850 0 R (HD.1106) 1851 0 R (HD.1107) 1852 0 R (HD.1108) 1853 0 R (HD.1109) 1854 0 R (HD.111) 760 0 R (HD.1110) 1855 0 R (HD.1111) 1856 0 R ] /Limits [ (HD.1084) (HD.1111) ] >>
endobj
4562 0 obj
-<< /Names [ (HD.1862) 2686 0 R (HD.1863) 2687 0 R (HD.1864) 2688 0 R (HD.1865) 2689 0 R (HD.1866) 2690 0 R (HD.1867) 2691 0 R (HD.1868) 2692 0 R (HD.1869) 2693 0 R (HD.187) 842 0 R (HD.1870) 2694 0 R (HD.1871) 2695 0 R (HD.1872) 2696 0 R (HD.1873) 2697 0 R (HD.1874) 2698 0 R (HD.1875) 2699 0 R (HD.1876) 2700 0 R (HD.1877) 2701 0 R (HD.1878) 2702 0 R (HD.1879) 2703 0 R (HD.188) 843 0 R (HD.1880) 2704 0 R (HD.1881) 2705 0 R (HD.1882) 2706 0 R (HD.1883) 2707 0 R (HD.1884) 2708 0 R (HD.1885) 2709 0 R (HD.1886) 2717 0 R (HD.1887) 2718 0 R (HD.1888) 2719 0 R (HD.1889) 2720 0 R (HD.189) 844 0 R (HD.1890) 2721 0 R ] /Limits [ (HD.1862) (HD.1890) ] >>
+<< /Names [ (HD.1112) 1857 0 R (HD.1113) 1858 0 R (HD.1114) 1859 0 R (HD.1115) 1860 0 R (HD.1116) 1861 0 R (HD.1117) 1862 0 R (HD.1118) 1863 0 R (HD.1119) 1864 0 R (HD.112) 761 0 R (HD.1120) 1865 0 R (HD.1121) 1866 0 R (HD.1122) 1867 0 R (HD.1123) 1868 0 R (HD.1124) 1869 0 R (HD.1125) 1870 0 R (HD.1126) 1871 0 R (HD.1127) 1872 0 R (HD.1128) 1877 0 R (HD.1129) 1878 0 R (HD.113) 762 0 R (HD.1130) 1879 0 R (HD.1131) 1880 0 R (HD.1132) 1881 0 R (HD.1133) 1882 0 R (HD.1134) 1883 0 R (HD.1135) 1884 0 R (HD.1136) 1885 0 R (HD.1137) 1886 0 R (HD.1138) 1887 0 R (HD.1139) 1888 0 R (HD.114) 763 0 R (HD.1140) 1889 0 R ] /Limits [ (HD.1112) (HD.1140) ] >>
endobj
4563 0 obj
-<< /Names [ (HD.1891) 2722 0 R (HD.1892) 2723 0 R (HD.1893) 2724 0 R (HD.1894) 2725 0 R (HD.1895) 2726 0 R (HD.1896) 2727 0 R (HD.1897) 2728 0 R (HD.1898) 2729 0 R (HD.1899) 2730 0 R (HD.19) 654 0 R (HD.190) 845 0 R (HD.1900) 2731 0 R (HD.1901) 2732 0 R (HD.1902) 2733 0 R (HD.1903) 2734 0 R (HD.1904) 2735 0 R (HD.1905) 2736 0 R (HD.1906) 2737 0 R (HD.1907) 2738 0 R (HD.1908) 2739 0 R (HD.1909) 2740 0 R (HD.191) 846 0 R (HD.1910) 2741 0 R (HD.1911) 2742 0 R (HD.1912) 2743 0 R (HD.1913) 2744 0 R (HD.1914) 2745 0 R (HD.1915) 2746 0 R (HD.1916) 2747 0 R (HD.1917) 2748 0 R (HD.1918) 2749 0 R (HD.1919) 2750 0 R ] /Limits [ (HD.1891) (HD.1919) ] >>
+<< /Names [ (HD.1141) 1890 0 R (HD.1142) 1891 0 R (HD.1143) 1892 0 R (HD.1144) 1893 0 R (HD.1145) 1894 0 R (HD.1146) 1895 0 R (HD.1147) 1896 0 R (HD.1148) 1897 0 R (HD.1149) 1898 0 R (HD.115) 764 0 R (HD.1150) 1899 0 R (HD.1151) 1900 0 R (HD.1152) 1901 0 R (HD.1153) 1902 0 R (HD.1154) 1903 0 R (HD.1155) 1904 0 R (HD.1156) 1905 0 R (HD.1157) 1906 0 R (HD.1158) 1907 0 R (HD.1159) 1908 0 R (HD.116) 765 0 R (HD.1160) 1909 0 R (HD.1161) 1910 0 R (HD.1162) 1911 0 R (HD.1163) 1912 0 R (HD.1164) 1913 0 R (HD.1165) 1914 0 R (HD.1166) 1915 0 R (HD.1167) 1916 0 R (HD.1168) 1917 0 R (HD.1169) 1918 0 R (HD.117) 766 0 R ] /Limits [ (HD.1141) (HD.117) ] >>
endobj
4564 0 obj
-<< /Names [ (HD.192) 847 0 R (HD.1920) 2752 0 R (HD.1921) 2753 0 R (HD.1922) 2754 0 R (HD.1923) 2755 0 R (HD.1924) 2756 0 R (HD.1925) 2757 0 R (HD.1926) 2758 0 R (HD.1927) 2759 0 R (HD.1928) 2760 0 R (HD.1929) 2761 0 R (HD.193) 848 0 R (HD.1930) 2763 0 R (HD.1931) 2765 0 R (HD.1932) 2771 0 R (HD.1933) 2772 0 R (HD.1934) 2773 0 R (HD.1935) 2774 0 R (HD.1936) 2775 0 R (HD.1937) 2776 0 R (HD.1938) 2777 0 R (HD.1939) 2778 0 R (HD.194) 849 0 R (HD.1940) 2779 0 R (HD.1941) 2780 0 R (HD.1942) 2781 0 R (HD.1943) 2782 0 R (HD.1944) 2783 0 R (HD.1945) 2784 0 R (HD.1946) 2785 0 R (HD.1947) 2786 0 R (HD.1948) 2787 0 R ] /Limits [ (HD.192) (HD.1948) ] >>
+<< /Names [ (HD.1170) 1919 0 R (HD.1171) 1920 0 R (HD.1172) 1921 0 R (HD.1173) 1926 0 R (HD.1174) 1927 0 R (HD.1175) 1928 0 R (HD.1176) 1929 0 R (HD.1177) 1930 0 R (HD.1178) 1931 0 R (HD.1179) 1932 0 R (HD.118) 767 0 R (HD.1180) 1933 0 R (HD.1181) 1934 0 R (HD.1182) 1935 0 R (HD.1183) 1936 0 R (HD.1184) 1937 0 R (HD.1185) 1938 0 R (HD.1186) 1939 0 R (HD.1187) 1940 0 R (HD.1188) 1941 0 R (HD.1189) 1942 0 R (HD.119) 768 0 R (HD.1190) 1943 0 R (HD.1191) 1944 0 R (HD.1192) 1945 0 R (HD.1193) 1946 0 R (HD.1194) 1947 0 R (HD.1195) 1948 0 R (HD.1196) 1949 0 R (HD.1197) 1950 0 R (HD.1198) 1951 0 R (HD.1199) 1952 0 R ] /Limits [ (HD.1170) (HD.1199) ] >>
endobj
4565 0 obj
-<< /Names [ (HD.1949) 2788 0 R (HD.195) 850 0 R (HD.1950) 2789 0 R (HD.1951) 2790 0 R (HD.1952) 2791 0 R (HD.1953) 2792 0 R (HD.1954) 2793 0 R (HD.1955) 2794 0 R (HD.1956) 2795 0 R (HD.1957) 2796 0 R (HD.1958) 2797 0 R (HD.1959) 2798 0 R (HD.196) 851 0 R (HD.1960) 2799 0 R (HD.1961) 2800 0 R (HD.1962) 2801 0 R (HD.1963) 2802 0 R (HD.1964) 2803 0 R (HD.1965) 2804 0 R (HD.1966) 2805 0 R (HD.1967) 2806 0 R (HD.1968) 2807 0 R (HD.1969) 2808 0 R (HD.197) 856 0 R (HD.1970) 2809 0 R (HD.1971) 2810 0 R (HD.1972) 2811 0 R (HD.1973) 2812 0 R (HD.1974) 2813 0 R (HD.1975) 2814 0 R (HD.1976) 2815 0 R (HD.1977) 2816 0 R ] /Limits [ (HD.1949) (HD.1977) ] >>
+<< /Names [ (HD.12) 653 0 R (HD.120) 769 0 R (HD.1200) 1953 0 R (HD.1201) 1954 0 R (HD.1202) 1955 0 R (HD.1203) 1956 0 R (HD.1204) 1957 0 R (HD.1205) 1958 0 R (HD.1206) 1959 0 R (HD.1207) 1960 0 R (HD.1208) 1961 0 R (HD.1209) 1962 0 R (HD.121) 770 0 R (HD.1210) 1963 0 R (HD.1211) 1964 0 R (HD.1212) 1965 0 R (HD.1213) 1966 0 R (HD.1214) 1967 0 R (HD.1215) 1968 0 R (HD.1216) 1969 0 R (HD.1217) 1970 0 R (HD.1218) 1971 0 R (HD.1219) 1972 0 R (HD.122) 771 0 R (HD.1220) 1973 0 R (HD.1221) 1974 0 R (HD.1222) 1975 0 R (HD.1223) 1976 0 R (HD.1224) 1977 0 R (HD.1225) 1978 0 R (HD.1226) 1979 0 R (HD.1227) 1980 0 R ] /Limits [ (HD.12) (HD.1227) ] >>
endobj
4566 0 obj
-<< /Names [ (HD.1978) 2817 0 R (HD.1979) 2818 0 R (HD.198) 857 0 R (HD.1980) 2819 0 R (HD.1981) 2820 0 R (HD.1982) 2821 0 R (HD.1983) 2822 0 R (HD.1984) 2823 0 R (HD.1985) 2824 0 R (HD.1986) 2825 0 R (HD.1987) 2826 0 R (HD.1988) 2827 0 R (HD.1989) 2828 0 R (HD.199) 858 0 R (HD.1990) 2833 0 R (HD.1991) 2834 0 R (HD.1992) 2835 0 R (HD.1993) 2836 0 R (HD.1994) 2837 0 R (HD.1995) 2839 0 R (HD.1996) 2840 0 R (HD.1997) 2841 0 R (HD.1998) 2842 0 R (HD.1999) 2844 0 R (HD.2) 637 0 R (HD.20) 655 0 R (HD.200) 859 0 R (HD.2000) 2845 0 R (HD.2001) 2846 0 R (HD.2002) 2847 0 R (HD.2003) 2848 0 R (HD.2004) 2849 0 R ] /Limits [ (HD.1978) (HD.2004) ] >>
+<< /Names [ (HD.1228) 1981 0 R (HD.1229) 1982 0 R (HD.123) 772 0 R (HD.1230) 1983 0 R (HD.1231) 1984 0 R (HD.1232) 1985 0 R (HD.1233) 1986 0 R (HD.1234) 1987 0 R (HD.1235) 1992 0 R (HD.1236) 1993 0 R (HD.1237) 1994 0 R (HD.1238) 1995 0 R (HD.1239) 1996 0 R (HD.124) 773 0 R (HD.1240) 1997 0 R (HD.1241) 1998 0 R (HD.1242) 1999 0 R (HD.1243) 2000 0 R (HD.1244) 2001 0 R (HD.1245) 2002 0 R (HD.1246) 2003 0 R (HD.1247) 2004 0 R (HD.1248) 2005 0 R (HD.1249) 2006 0 R (HD.125) 774 0 R (HD.1250) 2007 0 R (HD.1251) 2008 0 R (HD.1252) 2009 0 R (HD.1253) 2010 0 R (HD.1254) 2011 0 R (HD.1255) 2012 0 R (HD.1256) 2013 0 R ] /Limits [ (HD.1228) (HD.1256) ] >>
endobj
4567 0 obj
-<< /Names [ (HD.2005) 2850 0 R (HD.2006) 2851 0 R (HD.2007) 2852 0 R (HD.2008) 2853 0 R (HD.2009) 2854 0 R (HD.201) 860 0 R (HD.2010) 2855 0 R (HD.2011) 2856 0 R (HD.2012) 2857 0 R (HD.2013) 2858 0 R (HD.2014) 2859 0 R (HD.2015) 2860 0 R (HD.2016) 2861 0 R (HD.2017) 2862 0 R (HD.2018) 2863 0 R (HD.2019) 2864 0 R (HD.202) 861 0 R (HD.2020) 2865 0 R (HD.2021) 2866 0 R (HD.2022) 2867 0 R (HD.2023) 2868 0 R (HD.2024) 2869 0 R (HD.2025) 2870 0 R (HD.2026) 2871 0 R (HD.2027) 2872 0 R (HD.2028) 2873 0 R (HD.2029) 2879 0 R (HD.203) 862 0 R (HD.2030) 2880 0 R (HD.2031) 2881 0 R (HD.2032) 2882 0 R (HD.2033) 2883 0 R ] /Limits [ (HD.2005) (HD.2033) ] >>
+<< /Names [ (HD.1257) 2014 0 R (HD.1258) 2015 0 R (HD.1259) 2016 0 R (HD.126) 775 0 R (HD.1260) 2017 0 R (HD.1261) 2018 0 R (HD.1262) 2019 0 R (HD.1263) 2020 0 R (HD.1264) 2021 0 R (HD.1265) 2022 0 R (HD.1266) 2023 0 R (HD.1267) 2024 0 R (HD.1268) 2025 0 R (HD.1269) 2026 0 R (HD.127) 776 0 R (HD.1270) 2027 0 R (HD.1271) 2028 0 R (HD.1272) 2029 0 R (HD.1273) 2030 0 R (HD.1274) 2031 0 R (HD.1275) 2032 0 R (HD.1276) 2033 0 R (HD.1277) 2034 0 R (HD.1278) 2035 0 R (HD.1279) 2036 0 R (HD.128) 777 0 R (HD.1280) 2037 0 R (HD.1281) 2038 0 R (HD.1282) 2039 0 R (HD.1283) 2044 0 R (HD.1284) 2045 0 R (HD.1285) 2046 0 R ] /Limits [ (HD.1257) (HD.1285) ] >>
endobj
4568 0 obj
-<< /Names [ (HD.2034) 2884 0 R (HD.2035) 2885 0 R (HD.2036) 2886 0 R (HD.2037) 2888 0 R (HD.2038) 2890 0 R (HD.2039) 2891 0 R (HD.204) 863 0 R (HD.2040) 2892 0 R (HD.2041) 2893 0 R (HD.2042) 2894 0 R (HD.2043) 2895 0 R (HD.2044) 2896 0 R (HD.2045) 2897 0 R (HD.2046) 2898 0 R (HD.2047) 2899 0 R (HD.2048) 2900 0 R (HD.2049) 2901 0 R (HD.205) 864 0 R (HD.2050) 2902 0 R (HD.2051) 2903 0 R (HD.2052) 2904 0 R (HD.2053) 2905 0 R (HD.2054) 2906 0 R (HD.2055) 2907 0 R (HD.2056) 2908 0 R (HD.2057) 2909 0 R (HD.2058) 2910 0 R (HD.2059) 2911 0 R (HD.206) 865 0 R (HD.2060) 2912 0 R (HD.2061) 2913 0 R (HD.2062) 2914 0 R ] /Limits [ (HD.2034) (HD.2062) ] >>
+<< /Names [ (HD.1286) 2047 0 R (HD.1287) 2048 0 R (HD.1288) 2049 0 R (HD.1289) 2050 0 R (HD.129) 778 0 R (HD.1290) 2051 0 R (HD.1291) 2052 0 R (HD.1292) 2053 0 R (HD.1293) 2054 0 R (HD.1294) 2055 0 R (HD.1295) 2056 0 R (HD.1296) 2057 0 R (HD.1297) 2058 0 R (HD.1298) 2059 0 R (HD.1299) 2060 0 R (HD.13) 654 0 R (HD.130) 779 0 R (HD.1300) 2061 0 R (HD.1301) 2062 0 R (HD.1302) 2063 0 R (HD.1303) 2064 0 R (HD.1304) 2065 0 R (HD.1305) 2066 0 R (HD.1306) 2067 0 R (HD.1307) 2068 0 R (HD.1308) 2069 0 R (HD.1309) 2070 0 R (HD.131) 780 0 R (HD.1310) 2071 0 R (HD.1311) 2072 0 R (HD.1312) 2073 0 R (HD.1313) 2074 0 R ] /Limits [ (HD.1286) (HD.1313) ] >>
endobj
4569 0 obj
-<< /Names [ (HD.2063) 2915 0 R (HD.2064) 2916 0 R (HD.2065) 2917 0 R (HD.2066) 2918 0 R (HD.2067) 2919 0 R (HD.2068) 2926 0 R (HD.2069) 2927 0 R (HD.207) 866 0 R (HD.2070) 2928 0 R (HD.2071) 2929 0 R (HD.2072) 2930 0 R (HD.2073) 2931 0 R (HD.2074) 2932 0 R (HD.2075) 2933 0 R (HD.2076) 2934 0 R (HD.2077) 2935 0 R (HD.2078) 2936 0 R (HD.2079) 2937 0 R (HD.208) 867 0 R (HD.2080) 2938 0 R (HD.2081) 2939 0 R (HD.2082) 2940 0 R (HD.2083) 2941 0 R (HD.2084) 2942 0 R (HD.2085) 2943 0 R (HD.2086) 2944 0 R (HD.2087) 2945 0 R (HD.2088) 2946 0 R (HD.2089) 2947 0 R (HD.209) 868 0 R (HD.2090) 2948 0 R (HD.2091) 2949 0 R ] /Limits [ (HD.2063) (HD.2091) ] >>
+<< /Names [ (HD.1314) 2075 0 R (HD.1315) 2076 0 R (HD.1316) 2077 0 R (HD.1317) 2078 0 R (HD.1318) 2083 0 R (HD.1319) 2084 0 R (HD.132) 781 0 R (HD.1320) 2085 0 R (HD.1321) 2086 0 R (HD.1322) 2087 0 R (HD.1323) 2088 0 R (HD.1324) 2089 0 R (HD.1325) 2090 0 R (HD.1326) 2091 0 R (HD.1327) 2092 0 R (HD.1328) 2093 0 R (HD.1329) 2094 0 R (HD.133) 782 0 R (HD.1330) 2095 0 R (HD.1331) 2096 0 R (HD.1332) 2097 0 R (HD.1333) 2098 0 R (HD.1334) 2099 0 R (HD.1335) 2100 0 R (HD.1336) 2101 0 R (HD.1337) 2102 0 R (HD.1338) 2103 0 R (HD.1339) 2104 0 R (HD.134) 783 0 R (HD.1340) 2105 0 R (HD.1341) 2106 0 R (HD.1342) 2107 0 R ] /Limits [ (HD.1314) (HD.1342) ] >>
endobj
4570 0 obj
-<< /Names [ (HD.2092) 2950 0 R (HD.2093) 2951 0 R (HD.2094) 2952 0 R (HD.2095) 2953 0 R (HD.2096) 2954 0 R (HD.2097) 2955 0 R (HD.2098) 2956 0 R (HD.2099) 2957 0 R (HD.21) 656 0 R (HD.210) 869 0 R (HD.2100) 2958 0 R (HD.2101) 2959 0 R (HD.2102) 2960 0 R (HD.2103) 2961 0 R (HD.2104) 2962 0 R (HD.2105) 2963 0 R (HD.2106) 2964 0 R (HD.2107) 2965 0 R (HD.2108) 2966 0 R (HD.2109) 2967 0 R (HD.211) 870 0 R (HD.2110) 2968 0 R (HD.2111) 2969 0 R (HD.2112) 2970 0 R (HD.2113) 2971 0 R (HD.2114) 2972 0 R (HD.2115) 2973 0 R (HD.2116) 2974 0 R (HD.2117) 2975 0 R (HD.2118) 2976 0 R (HD.2119) 2977 0 R (HD.212) 871 0 R ] /Limits [ (HD.2092) (HD.212) ] >>
+<< /Names [ (HD.1343) 2108 0 R (HD.1344) 2109 0 R (HD.1345) 2110 0 R (HD.1346) 2111 0 R (HD.1347) 2112 0 R (HD.1348) 2113 0 R (HD.1349) 2114 0 R (HD.135) 788 0 R (HD.1350) 2115 0 R (HD.1351) 2116 0 R (HD.1352) 2117 0 R (HD.1353) 2118 0 R (HD.1354) 2119 0 R (HD.1355) 2120 0 R (HD.1356) 2121 0 R (HD.1357) 2122 0 R (HD.1358) 2123 0 R (HD.1359) 2124 0 R (HD.136) 789 0 R (HD.1360) 2125 0 R (HD.1361) 2126 0 R (HD.1362) 2127 0 R (HD.1363) 2133 0 R (HD.1364) 2134 0 R (HD.1365) 2135 0 R (HD.1366) 2136 0 R (HD.1367) 2137 0 R (HD.1368) 2138 0 R (HD.1369) 2139 0 R (HD.137) 790 0 R (HD.1370) 2140 0 R (HD.1371) 2141 0 R ] /Limits [ (HD.1343) (HD.1371) ] >>
endobj
4571 0 obj
-<< /Names [ (HD.2120) 2982 0 R (HD.2121) 2983 0 R (HD.2122) 2984 0 R (HD.2123) 2985 0 R (HD.2124) 2986 0 R (HD.2125) 2987 0 R (HD.2126) 2988 0 R (HD.2127) 2989 0 R (HD.2128) 2990 0 R (HD.2129) 2991 0 R (HD.213) 872 0 R (HD.2130) 2992 0 R (HD.2131) 2993 0 R (HD.2132) 2994 0 R (HD.2133) 2995 0 R (HD.2134) 2996 0 R (HD.2135) 2997 0 R (HD.2136) 2998 0 R (HD.2137) 2999 0 R (HD.2138) 3000 0 R (HD.2139) 3001 0 R (HD.214) 873 0 R (HD.2140) 3002 0 R (HD.2141) 3003 0 R (HD.2142) 3004 0 R (HD.2143) 3005 0 R (HD.2144) 3006 0 R (HD.2145) 3007 0 R (HD.2146) 3008 0 R (HD.2147) 3009 0 R (HD.2148) 3010 0 R (HD.2149) 3011 0 R ] /Limits [ (HD.2120) (HD.2149) ] >>
+<< /Names [ (HD.1372) 2142 0 R (HD.1373) 2143 0 R (HD.1374) 2144 0 R (HD.1375) 2145 0 R (HD.1376) 2146 0 R (HD.1377) 2147 0 R (HD.1378) 2148 0 R (HD.1379) 2149 0 R (HD.138) 791 0 R (HD.1380) 2150 0 R (HD.1381) 2151 0 R (HD.1382) 2152 0 R (HD.1383) 2153 0 R (HD.1384) 2154 0 R (HD.1385) 2155 0 R (HD.1386) 2156 0 R (HD.1387) 2157 0 R (HD.1388) 2158 0 R (HD.1389) 2159 0 R (HD.139) 792 0 R (HD.1390) 2160 0 R (HD.1391) 2161 0 R (HD.1392) 2162 0 R (HD.1393) 2163 0 R (HD.1394) 2164 0 R (HD.1395) 2165 0 R (HD.1396) 2166 0 R (HD.1397) 2167 0 R (HD.1398) 2168 0 R (HD.1399) 2169 0 R (HD.14) 655 0 R (HD.140) 793 0 R ] /Limits [ (HD.1372) (HD.140) ] >>
endobj
4572 0 obj
-<< /Names [ (HD.215) 874 0 R (HD.2150) 3012 0 R (HD.2151) 3013 0 R (HD.2152) 3014 0 R (HD.2153) 3015 0 R (HD.2154) 3016 0 R (HD.2155) 3017 0 R (HD.2156) 3018 0 R (HD.2157) 3019 0 R (HD.2158) 3020 0 R (HD.2159) 3021 0 R (HD.216) 875 0 R (HD.2160) 3022 0 R (HD.2161) 3023 0 R (HD.2162) 3025 0 R (HD.2163) 3026 0 R (HD.2164) 3028 0 R (HD.2165) 3029 0 R (HD.2166) 3030 0 R (HD.2167) 3031 0 R (HD.2168) 3032 0 R (HD.2169) 3037 0 R (HD.217) 876 0 R (HD.2170) 3039 0 R (HD.2171) 3040 0 R (HD.2172) 3041 0 R (HD.2173) 3042 0 R (HD.2174) 3043 0 R (HD.2175) 3044 0 R (HD.2176) 3045 0 R (HD.2177) 3046 0 R (HD.2178) 3047 0 R ] /Limits [ (HD.215) (HD.2178) ] >>
+<< /Names [ (HD.1400) 2170 0 R (HD.1401) 2171 0 R (HD.1402) 2172 0 R (HD.1403) 2173 0 R (HD.1404) 2174 0 R (HD.1405) 2175 0 R (HD.1406) 2176 0 R (HD.1407) 2177 0 R (HD.1408) 2178 0 R (HD.1409) 2179 0 R (HD.141) 794 0 R (HD.1410) 2180 0 R (HD.1411) 2181 0 R (HD.1412) 2182 0 R (HD.1413) 2183 0 R (HD.1414) 2184 0 R (HD.1415) 2185 0 R (HD.1416) 2186 0 R (HD.1417) 2187 0 R (HD.1418) 2188 0 R (HD.1419) 2189 0 R (HD.142) 795 0 R (HD.1420) 2190 0 R (HD.1421) 2195 0 R (HD.1422) 2196 0 R (HD.1423) 2197 0 R (HD.1424) 2198 0 R (HD.1425) 2199 0 R (HD.1426) 2200 0 R (HD.1427) 2201 0 R (HD.1428) 2202 0 R (HD.1429) 2203 0 R ] /Limits [ (HD.1400) (HD.1429) ] >>
endobj
4573 0 obj
-<< /Names [ (HD.2179) 3048 0 R (HD.218) 877 0 R (HD.2180) 3049 0 R (HD.2181) 3050 0 R (HD.2182) 3051 0 R (HD.2183) 3052 0 R (HD.2184) 3053 0 R (HD.2185) 3054 0 R (HD.2186) 3055 0 R (HD.2187) 3056 0 R (HD.2188) 3057 0 R (HD.2189) 3058 0 R (HD.219) 878 0 R (HD.2190) 3059 0 R (HD.2191) 3060 0 R (HD.2192) 3061 0 R (HD.2193) 3062 0 R (HD.2194) 3063 0 R (HD.2195) 3064 0 R (HD.2196) 3065 0 R (HD.2197) 3066 0 R (HD.2198) 3067 0 R (HD.2199) 3069 0 R (HD.22) 657 0 R (HD.220) 879 0 R (HD.2200) 3070 0 R (HD.2201) 3071 0 R (HD.2202) 3072 0 R (HD.2203) 3073 0 R (HD.2204) 3074 0 R (HD.2205) 3075 0 R (HD.2206) 3081 0 R ] /Limits [ (HD.2179) (HD.2206) ] >>
+<< /Names [ (HD.143) 796 0 R (HD.1430) 2204 0 R (HD.1431) 2205 0 R (HD.1432) 2206 0 R (HD.1433) 2207 0 R (HD.1434) 2208 0 R (HD.1435) 2209 0 R (HD.1436) 2210 0 R (HD.1437) 2211 0 R (HD.1438) 2212 0 R (HD.1439) 2213 0 R (HD.144) 797 0 R (HD.1440) 2214 0 R (HD.1441) 2215 0 R (HD.1442) 2216 0 R (HD.1443) 2217 0 R (HD.1444) 2218 0 R (HD.1445) 2219 0 R (HD.1446) 2220 0 R (HD.1447) 2221 0 R (HD.1448) 2222 0 R (HD.1449) 2223 0 R (HD.145) 798 0 R (HD.1450) 2224 0 R (HD.1451) 2225 0 R (HD.1452) 2226 0 R (HD.1453) 2227 0 R (HD.1454) 2228 0 R (HD.1455) 2229 0 R (HD.1456) 2230 0 R (HD.1457) 2231 0 R (HD.1458) 2232 0 R ] /Limits [ (HD.143) (HD.1458) ] >>
endobj
4574 0 obj
-<< /Names [ (HD.2207) 3082 0 R (HD.2208) 3083 0 R (HD.2209) 3084 0 R (HD.221) 880 0 R (HD.2210) 3085 0 R (HD.2211) 3086 0 R (HD.2212) 3088 0 R (HD.2213) 3089 0 R (HD.2214) 3090 0 R (HD.2215) 3091 0 R (HD.2216) 3092 0 R (HD.2217) 3093 0 R (HD.2218) 3094 0 R (HD.2219) 3095 0 R (HD.222) 881 0 R (HD.2220) 3096 0 R (HD.2221) 3097 0 R (HD.2222) 3098 0 R (HD.2223) 3099 0 R (HD.2224) 3100 0 R (HD.2225) 3101 0 R (HD.2226) 3102 0 R (HD.2227) 3103 0 R (HD.2228) 3104 0 R (HD.2229) 3105 0 R (HD.223) 882 0 R (HD.2230) 3106 0 R (HD.2231) 3107 0 R (HD.2232) 3108 0 R (HD.2233) 3109 0 R (HD.2234) 3110 0 R (HD.2235) 3111 0 R ] /Limits [ (HD.2207) (HD.2235) ] >>
+<< /Names [ (HD.1459) 2233 0 R (HD.146) 799 0 R (HD.1460) 2234 0 R (HD.1461) 2235 0 R (HD.1462) 2236 0 R (HD.1463) 2237 0 R (HD.1464) 2238 0 R (HD.1465) 2239 0 R (HD.1466) 2240 0 R (HD.1467) 2241 0 R (HD.1468) 2242 0 R (HD.1469) 2243 0 R (HD.147) 800 0 R (HD.1470) 2244 0 R (HD.1471) 2245 0 R (HD.1472) 2246 0 R (HD.1473) 2247 0 R (HD.1474) 2248 0 R (HD.1475) 2249 0 R (HD.1476) 2250 0 R (HD.1477) 2251 0 R (HD.1478) 2252 0 R (HD.1479) 2253 0 R (HD.148) 801 0 R (HD.1480) 2254 0 R (HD.1481) 2255 0 R (HD.1482) 2256 0 R (HD.1483) 2261 0 R (HD.1484) 2262 0 R (HD.1485) 2263 0 R (HD.1486) 2264 0 R (HD.1487) 2265 0 R ] /Limits [ (HD.1459) (HD.1487) ] >>
endobj
4575 0 obj
-<< /Names [ (HD.2236) 3112 0 R (HD.2237) 3113 0 R (HD.2238) 3114 0 R (HD.2239) 3115 0 R (HD.224) 883 0 R (HD.2240) 3116 0 R (HD.2241) 3118 0 R (HD.2242) 3119 0 R (HD.2243) 3120 0 R (HD.2244) 3121 0 R (HD.2245) 3122 0 R (HD.2246) 3123 0 R (HD.2247) 3124 0 R (HD.2248) 3125 0 R (HD.2249) 3126 0 R (HD.225) 884 0 R (HD.2250) 3127 0 R (HD.2251) 3128 0 R (HD.2252) 3129 0 R (HD.2253) 3130 0 R (HD.2254) 3131 0 R (HD.2255) 3132 0 R (HD.2256) 3133 0 R (HD.2257) 3134 0 R (HD.2258) 3140 0 R (HD.2259) 3141 0 R (HD.226) 885 0 R (HD.2260) 3142 0 R (HD.2261) 3143 0 R (HD.2262) 3144 0 R (HD.2263) 3145 0 R (HD.2264) 3146 0 R ] /Limits [ (HD.2236) (HD.2264) ] >>
+<< /Names [ (HD.1488) 2266 0 R (HD.1489) 2267 0 R (HD.149) 802 0 R (HD.1490) 2268 0 R (HD.1491) 2269 0 R (HD.1492) 2270 0 R (HD.1493) 2271 0 R (HD.1494) 2272 0 R (HD.1495) 2273 0 R (HD.1496) 2274 0 R (HD.1497) 2275 0 R (HD.1498) 2276 0 R (HD.1499) 2277 0 R (HD.15) 656 0 R (HD.150) 803 0 R (HD.1500) 2278 0 R (HD.1501) 2279 0 R (HD.1502) 2280 0 R (HD.1503) 2281 0 R (HD.1504) 2282 0 R (HD.1505) 2283 0 R (HD.1506) 2284 0 R (HD.1507) 2285 0 R (HD.1508) 2286 0 R (HD.1509) 2287 0 R (HD.151) 804 0 R (HD.1510) 2288 0 R (HD.1511) 2289 0 R (HD.1512) 2290 0 R (HD.1513) 2291 0 R (HD.1514) 2292 0 R (HD.1515) 2293 0 R ] /Limits [ (HD.1488) (HD.1515) ] >>
endobj
4576 0 obj
-<< /Names [ (HD.2265) 3147 0 R (HD.2266) 3148 0 R (HD.2267) 3149 0 R (HD.2268) 3150 0 R (HD.2269) 3151 0 R (HD.227) 886 0 R (HD.2270) 3152 0 R (HD.2271) 3153 0 R (HD.2272) 3154 0 R (HD.2273) 3155 0 R (HD.2274) 3156 0 R (HD.2275) 3157 0 R (HD.2276) 3158 0 R (HD.2277) 3159 0 R (HD.2278) 3160 0 R (HD.2279) 3161 0 R (HD.228) 887 0 R (HD.2280) 3162 0 R (HD.2281) 3163 0 R (HD.2282) 3165 0 R (HD.2283) 3167 0 R (HD.2284) 3168 0 R (HD.2285) 3169 0 R (HD.2286) 3170 0 R (HD.2287) 3171 0 R (HD.2288) 3172 0 R (HD.2289) 3173 0 R (HD.229) 888 0 R (HD.2290) 3174 0 R (HD.2291) 3175 0 R (HD.2292) 3176 0 R (HD.2293) 3177 0 R ] /Limits [ (HD.2265) (HD.2293) ] >>
+<< /Names [ (HD.1516) 2294 0 R (HD.1517) 2295 0 R (HD.1518) 2296 0 R (HD.1519) 2297 0 R (HD.152) 805 0 R (HD.1520) 2298 0 R (HD.1521) 2299 0 R (HD.1522) 2300 0 R (HD.1523) 2301 0 R (HD.1524) 2302 0 R (HD.1525) 2303 0 R (HD.1526) 2304 0 R (HD.1527) 2305 0 R (HD.1528) 2306 0 R (HD.1529) 2307 0 R (HD.153) 806 0 R (HD.1530) 2308 0 R (HD.1531) 2309 0 R (HD.1532) 2310 0 R (HD.1533) 2315 0 R (HD.1534) 2316 0 R (HD.1535) 2317 0 R (HD.1536) 2318 0 R (HD.1537) 2319 0 R (HD.1538) 2320 0 R (HD.1539) 2321 0 R (HD.154) 807 0 R (HD.1540) 2322 0 R (HD.1541) 2323 0 R (HD.1542) 2324 0 R (HD.1543) 2325 0 R (HD.1544) 2326 0 R ] /Limits [ (HD.1516) (HD.1544) ] >>
endobj
4577 0 obj
-<< /Names [ (HD.2294) 3178 0 R (HD.2295) 3179 0 R (HD.2296) 3180 0 R (HD.2297) 3181 0 R (HD.2298) 3182 0 R (HD.2299) 3183 0 R (HD.23) 658 0 R (HD.230) 889 0 R (HD.2300) 3184 0 R (HD.2301) 3185 0 R (HD.2302) 3186 0 R (HD.2303) 3187 0 R (HD.2304) 3188 0 R (HD.2305) 3189 0 R (HD.2306) 3190 0 R (HD.2307) 3191 0 R (HD.2308) 3192 0 R (HD.2309) 3193 0 R (HD.231) 890 0 R (HD.2310) 3194 0 R (HD.2311) 3195 0 R (HD.2312) 3200 0 R (HD.2313) 3201 0 R (HD.2314) 3202 0 R (HD.2315) 3203 0 R (HD.2316) 3204 0 R (HD.2317) 3205 0 R (HD.2318) 3206 0 R (HD.2319) 3207 0 R (HD.232) 891 0 R (HD.2320) 3208 0 R (HD.2321) 3209 0 R ] /Limits [ (HD.2294) (HD.2321) ] >>
+<< /Names [ (HD.1545) 2327 0 R (HD.1546) 2328 0 R (HD.1547) 2329 0 R (HD.1548) 2330 0 R (HD.1549) 2331 0 R (HD.155) 808 0 R (HD.1550) 2332 0 R (HD.1551) 2333 0 R (HD.1552) 2334 0 R (HD.1553) 2335 0 R (HD.1554) 2336 0 R (HD.1555) 2337 0 R (HD.1556) 2338 0 R (HD.1557) 2339 0 R (HD.1558) 2340 0 R (HD.1559) 2341 0 R (HD.156) 809 0 R (HD.1560) 2342 0 R (HD.1561) 2343 0 R (HD.1562) 2344 0 R (HD.1563) 2345 0 R (HD.1564) 2346 0 R (HD.1565) 2347 0 R (HD.1566) 2349 0 R (HD.1567) 2350 0 R (HD.1568) 2351 0 R (HD.1569) 2352 0 R (HD.157) 810 0 R (HD.1570) 2353 0 R (HD.1571) 2354 0 R (HD.1572) 2355 0 R (HD.1573) 2356 0 R ] /Limits [ (HD.1545) (HD.1573) ] >>
endobj
4578 0 obj
-<< /Names [ (HD.2322) 3210 0 R (HD.2323) 3211 0 R (HD.2324) 3212 0 R (HD.2325) 3213 0 R (HD.2326) 3214 0 R (HD.2327) 3215 0 R (HD.2328) 3216 0 R (HD.2329) 3217 0 R (HD.233) 892 0 R (HD.2330) 3218 0 R (HD.2331) 3219 0 R (HD.2332) 3220 0 R (HD.2333) 3221 0 R (HD.2334) 3222 0 R (HD.2335) 3223 0 R (HD.2336) 3224 0 R (HD.2337) 3225 0 R (HD.2338) 3226 0 R (HD.2339) 3227 0 R (HD.234) 893 0 R (HD.2340) 3228 0 R (HD.2341) 3229 0 R (HD.2342) 3230 0 R (HD.2343) 3231 0 R (HD.2344) 3232 0 R (HD.2345) 3233 0 R (HD.2346) 3234 0 R (HD.2347) 3235 0 R (HD.2348) 3236 0 R (HD.2349) 3237 0 R (HD.235) 898 0 R (HD.2350) 3238 0 R ] /Limits [ (HD.2322) (HD.2350) ] >>
+<< /Names [ (HD.1574) 2357 0 R (HD.1575) 2358 0 R (HD.1576) 2359 0 R (HD.1577) 2360 0 R (HD.1578) 2365 0 R (HD.1579) 2366 0 R (HD.158) 811 0 R (HD.1580) 2367 0 R (HD.1581) 2368 0 R (HD.1582) 2369 0 R (HD.1583) 2370 0 R (HD.1584) 2371 0 R (HD.1585) 2372 0 R (HD.1586) 2373 0 R (HD.1587) 2374 0 R (HD.1588) 2375 0 R (HD.1589) 2376 0 R (HD.159) 812 0 R (HD.1590) 2377 0 R (HD.1591) 2378 0 R (HD.1592) 2379 0 R (HD.1593) 2380 0 R (HD.1594) 2381 0 R (HD.1595) 2382 0 R (HD.1596) 2383 0 R (HD.1597) 2384 0 R (HD.1598) 2385 0 R (HD.1599) 2386 0 R (HD.16) 657 0 R (HD.160) 813 0 R (HD.1600) 2387 0 R (HD.1601) 2388 0 R ] /Limits [ (HD.1574) (HD.1601) ] >>
endobj
4579 0 obj
-<< /Names [ (HD.2351) 3239 0 R (HD.2352) 3240 0 R (HD.2353) 3241 0 R (HD.2354) 3242 0 R (HD.2355) 3243 0 R (HD.2356) 3244 0 R (HD.2357) 3245 0 R (HD.2358) 3246 0 R (HD.2359) 3253 0 R (HD.236) 899 0 R (HD.2360) 3254 0 R (HD.2361) 3256 0 R (HD.2362) 3257 0 R (HD.2363) 3258 0 R (HD.2364) 3259 0 R (HD.2365) 3260 0 R (HD.2366) 3261 0 R (HD.2367) 3262 0 R (HD.2368) 3263 0 R (HD.2369) 3264 0 R (HD.237) 900 0 R (HD.2370) 3265 0 R (HD.2371) 3266 0 R (HD.2372) 3268 0 R (HD.2373) 3269 0 R (HD.2374) 3270 0 R (HD.2375) 3271 0 R (HD.2376) 3273 0 R (HD.2377) 3275 0 R (HD.2378) 3276 0 R (HD.2379) 3277 0 R (HD.238) 901 0 R ] /Limits [ (HD.2351) (HD.238) ] >>
+<< /Names [ (HD.1602) 2389 0 R (HD.1603) 2394 0 R (HD.1604) 2395 0 R (HD.1605) 2396 0 R (HD.1606) 2397 0 R (HD.1607) 2398 0 R (HD.1608) 2399 0 R (HD.1609) 2400 0 R (HD.161) 814 0 R (HD.1610) 2401 0 R (HD.1611) 2402 0 R (HD.1612) 2403 0 R (HD.1613) 2404 0 R (HD.1614) 2405 0 R (HD.1615) 2406 0 R (HD.1616) 2407 0 R (HD.1617) 2408 0 R (HD.1618) 2409 0 R (HD.1619) 2410 0 R (HD.162) 815 0 R (HD.1620) 2411 0 R (HD.1621) 2412 0 R (HD.1622) 2413 0 R (HD.1623) 2414 0 R (HD.1624) 2415 0 R (HD.1625) 2416 0 R (HD.1626) 2417 0 R (HD.1627) 2419 0 R (HD.1628) 2420 0 R (HD.1629) 2421 0 R (HD.163) 820 0 R (HD.1630) 2422 0 R ] /Limits [ (HD.1602) (HD.1630) ] >>
endobj
4580 0 obj
-<< /Names [ (HD.2380) 3278 0 R (HD.2381) 3279 0 R (HD.2382) 3280 0 R (HD.2383) 3281 0 R (HD.2384) 3282 0 R (HD.2385) 3283 0 R (HD.2386) 3284 0 R (HD.2387) 3285 0 R (HD.2388) 3292 0 R (HD.2389) 3293 0 R (HD.239) 902 0 R (HD.2390) 3294 0 R (HD.2391) 3295 0 R (HD.2392) 3296 0 R (HD.2393) 3297 0 R (HD.2394) 3298 0 R (HD.2395) 3299 0 R (HD.2396) 3300 0 R (HD.2397) 3301 0 R (HD.2398) 3302 0 R (HD.2399) 3303 0 R (HD.24) 659 0 R (HD.240) 903 0 R (HD.2400) 3304 0 R (HD.2401) 3305 0 R (HD.2402) 3306 0 R (HD.2403) 3307 0 R (HD.2404) 3308 0 R (HD.2405) 3309 0 R (HD.2406) 3310 0 R (HD.2407) 3311 0 R (HD.2408) 3312 0 R ] /Limits [ (HD.2380) (HD.2408) ] >>
+<< /Names [ (HD.1631) 2423 0 R (HD.1632) 2424 0 R (HD.1633) 2425 0 R (HD.1634) 2426 0 R (HD.1635) 2427 0 R (HD.1636) 2432 0 R (HD.1637) 2433 0 R (HD.1638) 2434 0 R (HD.1639) 2435 0 R (HD.164) 821 0 R (HD.1640) 2436 0 R (HD.1641) 2437 0 R (HD.1642) 2438 0 R (HD.1643) 2439 0 R (HD.1644) 2440 0 R (HD.1645) 2441 0 R (HD.1646) 2442 0 R (HD.1647) 2443 0 R (HD.1648) 2444 0 R (HD.1649) 2445 0 R (HD.165) 822 0 R (HD.1650) 2446 0 R (HD.1651) 2447 0 R (HD.1652) 2448 0 R (HD.1653) 2449 0 R (HD.1654) 2450 0 R (HD.1655) 2451 0 R (HD.1656) 2452 0 R (HD.1657) 2453 0 R (HD.1658) 2454 0 R (HD.1659) 2455 0 R (HD.166) 823 0 R ] /Limits [ (HD.1631) (HD.166) ] >>
endobj
4581 0 obj
-<< /Names [ (HD.2409) 3313 0 R (HD.241) 904 0 R (HD.2410) 3314 0 R (HD.2411) 3315 0 R (HD.2412) 3316 0 R (HD.2413) 3317 0 R (HD.2414) 3318 0 R (HD.2415) 3319 0 R (HD.2416) 3320 0 R (HD.2417) 3321 0 R (HD.2418) 3322 0 R (HD.2419) 3323 0 R (HD.242) 905 0 R (HD.2420) 3324 0 R (HD.2421) 3325 0 R (HD.2422) 3326 0 R (HD.2423) 3327 0 R (HD.2424) 3328 0 R (HD.2425) 3329 0 R (HD.2426) 3330 0 R (HD.2427) 3331 0 R (HD.2428) 3332 0 R (HD.2429) 3333 0 R (HD.243) 906 0 R (HD.2430) 3334 0 R (HD.2431) 3335 0 R (HD.2432) 3336 0 R (HD.2433) 3337 0 R (HD.2434) 3344 0 R (HD.2435) 3345 0 R (HD.2436) 3346 0 R (HD.2437) 3347 0 R ] /Limits [ (HD.2409) (HD.2437) ] >>
+<< /Names [ (HD.1660) 2456 0 R (HD.1661) 2457 0 R (HD.1662) 2458 0 R (HD.1663) 2459 0 R (HD.1664) 2460 0 R (HD.1665) 2461 0 R (HD.1666) 2462 0 R (HD.1667) 2463 0 R (HD.1668) 2464 0 R (HD.1669) 2465 0 R (HD.167) 824 0 R (HD.1670) 2466 0 R (HD.1671) 2467 0 R (HD.1672) 2473 0 R (HD.1673) 2474 0 R (HD.1674) 2475 0 R (HD.1675) 2476 0 R (HD.1676) 2477 0 R (HD.1677) 2478 0 R (HD.1678) 2479 0 R (HD.1679) 2480 0 R (HD.168) 825 0 R (HD.1680) 2481 0 R (HD.1681) 2482 0 R (HD.1682) 2483 0 R (HD.1683) 2484 0 R (HD.1684) 2485 0 R (HD.1685) 2486 0 R (HD.1686) 2487 0 R (HD.1687) 2488 0 R (HD.1688) 2489 0 R (HD.1689) 2490 0 R ] /Limits [ (HD.1660) (HD.1689) ] >>
endobj
4582 0 obj
-<< /Names [ (HD.2438) 3348 0 R (HD.2439) 3349 0 R (HD.244) 907 0 R (HD.2440) 3350 0 R (HD.2441) 3351 0 R (HD.2442) 3352 0 R (HD.2443) 3353 0 R (HD.2444) 3354 0 R (HD.2445) 3355 0 R (HD.2446) 3356 0 R (HD.2447) 3357 0 R (HD.2448) 3358 0 R (HD.2449) 3359 0 R (HD.245) 908 0 R (HD.2450) 3360 0 R (HD.2451) 3361 0 R (HD.2452) 3362 0 R (HD.2453) 3363 0 R (HD.2454) 3364 0 R (HD.2455) 3365 0 R (HD.2456) 3366 0 R (HD.2457) 3367 0 R (HD.2458) 3368 0 R (HD.2459) 3369 0 R (HD.246) 909 0 R (HD.2460) 3370 0 R (HD.2461) 3371 0 R (HD.2462) 3372 0 R (HD.2463) 3373 0 R (HD.2464) 3374 0 R (HD.2465) 3375 0 R (HD.2466) 3376 0 R ] /Limits [ (HD.2438) (HD.2466) ] >>
+<< /Names [ (HD.169) 826 0 R (HD.1690) 2491 0 R (HD.1691) 2492 0 R (HD.1692) 2493 0 R (HD.1693) 2494 0 R (HD.1694) 2495 0 R (HD.1695) 2496 0 R (HD.1696) 2497 0 R (HD.1697) 2498 0 R (HD.1698) 2499 0 R (HD.1699) 2500 0 R (HD.17) 658 0 R (HD.170) 827 0 R (HD.1700) 2501 0 R (HD.1701) 2502 0 R (HD.1702) 2503 0 R (HD.1703) 2504 0 R (HD.1704) 2505 0 R (HD.1705) 2506 0 R (HD.1706) 2507 0 R (HD.1707) 2508 0 R (HD.1708) 2510 0 R (HD.1709) 2511 0 R (HD.171) 828 0 R (HD.1710) 2512 0 R (HD.1711) 2513 0 R (HD.1712) 2514 0 R (HD.1713) 2515 0 R (HD.1714) 2516 0 R (HD.1715) 2521 0 R (HD.1716) 2522 0 R (HD.1717) 2523 0 R ] /Limits [ (HD.169) (HD.1717) ] >>
endobj
4583 0 obj
-<< /Names [ (HD.2467) 3377 0 R (HD.2468) 3378 0 R (HD.2469) 3379 0 R (HD.247) 910 0 R (HD.2470) 3380 0 R (HD.2471) 3381 0 R (HD.2472) 3382 0 R (HD.2473) 3383 0 R (HD.2474) 3384 0 R (HD.2475) 3385 0 R (HD.2476) 3386 0 R (HD.2477) 3387 0 R (HD.2478) 3388 0 R (HD.2479) 3389 0 R (HD.248) 911 0 R (HD.2480) 3391 0 R (HD.2481) 3397 0 R (HD.2482) 3398 0 R (HD.2483) 3399 0 R (HD.2484) 3400 0 R (HD.2485) 3402 0 R (HD.2486) 3403 0 R (HD.2487) 3404 0 R (HD.2488) 3405 0 R (HD.2489) 3406 0 R (HD.249) 912 0 R (HD.2490) 3407 0 R (HD.2491) 3408 0 R (HD.2492) 3409 0 R (HD.2493) 3410 0 R (HD.2494) 3411 0 R (HD.2495) 3412 0 R ] /Limits [ (HD.2467) (HD.2495) ] >>
+<< /Names [ (HD.1718) 2524 0 R (HD.1719) 2525 0 R (HD.172) 829 0 R (HD.1720) 2526 0 R (HD.1721) 2527 0 R (HD.1722) 2528 0 R (HD.1723) 2529 0 R (HD.1724) 2530 0 R (HD.1725) 2531 0 R (HD.1726) 2532 0 R (HD.1727) 2533 0 R (HD.1728) 2534 0 R (HD.1729) 2535 0 R (HD.173) 830 0 R (HD.1730) 2536 0 R (HD.1731) 2537 0 R (HD.1732) 2538 0 R (HD.1733) 2539 0 R (HD.1734) 2540 0 R (HD.1735) 2541 0 R (HD.1736) 2542 0 R (HD.1737) 2543 0 R (HD.1738) 2544 0 R (HD.1739) 2545 0 R (HD.174) 831 0 R (HD.1740) 2546 0 R (HD.1741) 2547 0 R (HD.1742) 2548 0 R (HD.1743) 2549 0 R (HD.1744) 2550 0 R (HD.1745) 2551 0 R (HD.1746) 2552 0 R ] /Limits [ (HD.1718) (HD.1746) ] >>
endobj
4584 0 obj
-<< /Names [ (HD.2496) 3413 0 R (HD.2497) 3415 0 R (HD.2498) 3416 0 R (HD.2499) 3417 0 R (HD.25) 660 0 R (HD.250) 913 0 R (HD.2500) 3418 0 R (HD.2501) 3419 0 R (HD.2502) 3420 0 R (HD.2503) 3421 0 R (HD.2504) 3422 0 R (HD.2505) 3423 0 R (HD.2506) 3424 0 R (HD.2507) 3425 0 R (HD.2508) 3426 0 R (HD.2509) 3427 0 R (HD.251) 914 0 R (HD.2510) 3428 0 R (HD.2511) 3429 0 R (HD.2512) 3430 0 R (HD.2513) 3431 0 R (HD.2514) 3432 0 R (HD.2515) 3433 0 R (HD.2516) 3434 0 R (HD.2517) 3435 0 R (HD.2518) 3436 0 R (HD.2519) 3437 0 R (HD.252) 915 0 R (HD.2520) 3438 0 R (HD.2521) 3439 0 R (HD.2522) 3440 0 R (HD.2523) 3441 0 R ] /Limits [ (HD.2496) (HD.2523) ] >>
+<< /Names [ (HD.1747) 2553 0 R (HD.1748) 2554 0 R (HD.1749) 2555 0 R (HD.175) 832 0 R (HD.1750) 2556 0 R (HD.1751) 2557 0 R (HD.1752) 2558 0 R (HD.1753) 2559 0 R (HD.1754) 2560 0 R (HD.1755) 2561 0 R (HD.1756) 2562 0 R (HD.1757) 2563 0 R (HD.1758) 2564 0 R (HD.1759) 2565 0 R (HD.176) 833 0 R (HD.1760) 2566 0 R (HD.1761) 2567 0 R (HD.1762) 2573 0 R (HD.1763) 2574 0 R (HD.1764) 2575 0 R (HD.1765) 2576 0 R (HD.1766) 2577 0 R (HD.1767) 2578 0 R (HD.1768) 2579 0 R (HD.1769) 2580 0 R (HD.177) 834 0 R (HD.1770) 2581 0 R (HD.1771) 2582 0 R (HD.1772) 2583 0 R (HD.1773) 2584 0 R (HD.1774) 2585 0 R (HD.1775) 2586 0 R ] /Limits [ (HD.1747) (HD.1775) ] >>
endobj
4585 0 obj
-<< /Names [ (HD.2524) 3442 0 R (HD.2525) 3443 0 R (HD.2526) 3444 0 R (HD.2527) 3445 0 R (HD.2528) 3446 0 R (HD.2529) 3447 0 R (HD.253) 916 0 R (HD.2530) 3448 0 R (HD.2531) 3449 0 R (HD.2532) 3450 0 R (HD.2533) 3456 0 R (HD.2534) 3457 0 R (HD.2535) 3458 0 R (HD.2536) 3459 0 R (HD.2537) 3460 0 R (HD.2538) 3461 0 R (HD.2539) 3462 0 R (HD.254) 917 0 R (HD.2540) 3463 0 R (HD.2541) 3464 0 R (HD.2542) 3465 0 R (HD.2543) 3466 0 R (HD.2544) 3467 0 R (HD.2545) 3468 0 R (HD.2546) 3469 0 R (HD.2547) 3470 0 R (HD.2548) 3471 0 R (HD.2549) 3472 0 R (HD.255) 918 0 R (HD.2550) 3473 0 R (HD.2551) 3474 0 R (HD.2552) 3475 0 R ] /Limits [ (HD.2524) (HD.2552) ] >>
+<< /Names [ (HD.1776) 2587 0 R (HD.1777) 2588 0 R (HD.1778) 2589 0 R (HD.1779) 2590 0 R (HD.178) 835 0 R (HD.1780) 2591 0 R (HD.1781) 2592 0 R (HD.1782) 2593 0 R (HD.1783) 2594 0 R (HD.1784) 2595 0 R (HD.1785) 2596 0 R (HD.1786) 2598 0 R (HD.1787) 2599 0 R (HD.1788) 2600 0 R (HD.1789) 2601 0 R (HD.179) 836 0 R (HD.1790) 2602 0 R (HD.1791) 2603 0 R (HD.1792) 2604 0 R (HD.1793) 2605 0 R (HD.1794) 2606 0 R (HD.1795) 2614 0 R (HD.1796) 2615 0 R (HD.1797) 2616 0 R (HD.1798) 2617 0 R (HD.1799) 2618 0 R (HD.18) 659 0 R (HD.180) 837 0 R (HD.1800) 2619 0 R (HD.1801) 2620 0 R (HD.1802) 2621 0 R (HD.1803) 2622 0 R ] /Limits [ (HD.1776) (HD.1803) ] >>
endobj
4586 0 obj
-<< /Names [ (HD.2553) 3476 0 R (HD.2554) 3477 0 R (HD.2555) 3478 0 R (HD.2556) 3479 0 R (HD.2557) 3480 0 R (HD.2558) 3481 0 R (HD.2559) 3482 0 R (HD.256) 919 0 R (HD.2560) 3483 0 R (HD.2561) 3484 0 R (HD.2562) 3485 0 R (HD.2563) 3486 0 R (HD.2564) 3487 0 R (HD.2565) 3488 0 R (HD.2566) 3489 0 R (HD.2567) 3490 0 R (HD.2568) 3491 0 R (HD.2569) 3492 0 R (HD.257) 920 0 R (HD.2570) 3493 0 R (HD.2571) 3494 0 R (HD.2572) 3495 0 R (HD.2573) 3496 0 R (HD.2574) 3497 0 R (HD.2575) 3498 0 R (HD.2576) 3499 0 R (HD.2577) 3500 0 R (HD.2578) 3501 0 R (HD.2579) 3502 0 R (HD.258) 921 0 R (HD.2580) 3503 0 R (HD.2581) 3504 0 R ] /Limits [ (HD.2553) (HD.2581) ] >>
+<< /Names [ (HD.1804) 2623 0 R (HD.1805) 2624 0 R (HD.1806) 2625 0 R (HD.1807) 2626 0 R (HD.1808) 2627 0 R (HD.1809) 2628 0 R (HD.181) 838 0 R (HD.1810) 2629 0 R (HD.1811) 2630 0 R (HD.1812) 2631 0 R (HD.1813) 2632 0 R (HD.1814) 2633 0 R (HD.1815) 2634 0 R (HD.1816) 2635 0 R (HD.1817) 2636 0 R (HD.1818) 2637 0 R (HD.1819) 2638 0 R (HD.182) 839 0 R (HD.1820) 2639 0 R (HD.1821) 2640 0 R (HD.1822) 2641 0 R (HD.1823) 2642 0 R (HD.1824) 2643 0 R (HD.1825) 2644 0 R (HD.1826) 2645 0 R (HD.1827) 2646 0 R (HD.1828) 2647 0 R (HD.1829) 2648 0 R (HD.183) 840 0 R (HD.1830) 2649 0 R (HD.1831) 2650 0 R (HD.1832) 2651 0 R ] /Limits [ (HD.1804) (HD.1832) ] >>
endobj
4587 0 obj
-<< /Names [ (HD.2582) 3505 0 R (HD.2583) 3512 0 R (HD.2584) 3513 0 R (HD.2585) 3514 0 R (HD.2586) 3515 0 R (HD.2587) 3516 0 R (HD.2588) 3517 0 R (HD.2589) 3518 0 R (HD.259) 922 0 R (HD.2590) 3519 0 R (HD.2591) 3520 0 R (HD.2592) 3521 0 R (HD.2593) 3522 0 R (HD.2594) 3523 0 R (HD.2595) 3524 0 R (HD.2596) 3525 0 R (HD.2597) 3526 0 R (HD.2598) 3527 0 R (HD.2599) 3528 0 R (HD.26) 661 0 R (HD.260) 923 0 R (HD.2600) 3529 0 R (HD.2601) 3530 0 R (HD.2602) 3531 0 R (HD.2603) 3532 0 R (HD.2604) 3533 0 R (HD.2605) 3534 0 R (HD.2606) 3535 0 R (HD.2607) 3536 0 R (HD.2608) 3537 0 R (HD.2609) 3538 0 R (HD.261) 924 0 R ] /Limits [ (HD.2582) (HD.261) ] >>
+<< /Names [ (HD.1833) 2652 0 R (HD.1834) 2653 0 R (HD.1835) 2654 0 R (HD.1836) 2655 0 R (HD.1837) 2656 0 R (HD.1838) 2657 0 R (HD.1839) 2658 0 R (HD.184) 845 0 R (HD.1840) 2659 0 R (HD.1841) 2660 0 R (HD.1842) 2661 0 R (HD.1843) 2666 0 R (HD.1844) 2667 0 R (HD.1845) 2668 0 R (HD.1846) 2669 0 R (HD.1847) 2670 0 R (HD.1848) 2671 0 R (HD.1849) 2672 0 R (HD.185) 846 0 R (HD.1850) 2673 0 R (HD.1851) 2674 0 R (HD.1852) 2675 0 R (HD.1853) 2676 0 R (HD.1854) 2677 0 R (HD.1855) 2678 0 R (HD.1856) 2679 0 R (HD.1857) 2680 0 R (HD.1858) 2681 0 R (HD.1859) 2682 0 R (HD.186) 847 0 R (HD.1860) 2683 0 R (HD.1861) 2684 0 R ] /Limits [ (HD.1833) (HD.1861) ] >>
endobj
4588 0 obj
-<< /Names [ (HD.2610) 3539 0 R (HD.2611) 3540 0 R (HD.2612) 3541 0 R (HD.2613) 3542 0 R (HD.2614) 3543 0 R (HD.2615) 3544 0 R (HD.2616) 3545 0 R (HD.2617) 3546 0 R (HD.2618) 3547 0 R (HD.2619) 3548 0 R (HD.262) 925 0 R (HD.2620) 3549 0 R (HD.2621) 3550 0 R (HD.2622) 3551 0 R (HD.2623) 3552 0 R (HD.2624) 3553 0 R (HD.2625) 3554 0 R (HD.2626) 3555 0 R (HD.2627) 3556 0 R (HD.2628) 3557 0 R (HD.2629) 3558 0 R (HD.263) 926 0 R (HD.2630) 3559 0 R (HD.2631) 3560 0 R (HD.2632) 3561 0 R (HD.2633) 3562 0 R (HD.2634) 3563 0 R (HD.2635) 3564 0 R (HD.2636) 3565 0 R (HD.2637) 3566 0 R (HD.2638) 3567 0 R (HD.2639) 3568 0 R ] /Limits [ (HD.2610) (HD.2639) ] >>
+<< /Names [ (HD.1862) 2685 0 R (HD.1863) 2686 0 R (HD.1864) 2687 0 R (HD.1865) 2688 0 R (HD.1866) 2689 0 R (HD.1867) 2690 0 R (HD.1868) 2691 0 R (HD.1869) 2692 0 R (HD.187) 848 0 R (HD.1870) 2693 0 R (HD.1871) 2694 0 R (HD.1872) 2695 0 R (HD.1873) 2696 0 R (HD.1874) 2697 0 R (HD.1875) 2698 0 R (HD.1876) 2699 0 R (HD.1877) 2700 0 R (HD.1878) 2701 0 R (HD.1879) 2702 0 R (HD.188) 849 0 R (HD.1880) 2703 0 R (HD.1881) 2704 0 R (HD.1882) 2705 0 R (HD.1883) 2706 0 R (HD.1884) 2707 0 R (HD.1885) 2708 0 R (HD.1886) 2715 0 R (HD.1887) 2716 0 R (HD.1888) 2717 0 R (HD.1889) 2718 0 R (HD.189) 850 0 R (HD.1890) 2719 0 R ] /Limits [ (HD.1862) (HD.1890) ] >>
endobj
4589 0 obj
-<< /Names [ (HD.264) 927 0 R (HD.2640) 3569 0 R (HD.2641) 3570 0 R (HD.2642) 3571 0 R (HD.2643) 3572 0 R (HD.2644) 3573 0 R (HD.2645) 3574 0 R (HD.2646) 3579 0 R (HD.2647) 3580 0 R (HD.2648) 3581 0 R (HD.2649) 3582 0 R (HD.265) 928 0 R (HD.2650) 3583 0 R (HD.2651) 3584 0 R (HD.2652) 3585 0 R (HD.2653) 3586 0 R (HD.2654) 3587 0 R (HD.2655) 3588 0 R (HD.2656) 3589 0 R (HD.2657) 3590 0 R (HD.2658) 3591 0 R (HD.2659) 3592 0 R (HD.266) 929 0 R (HD.2660) 3593 0 R (HD.2661) 3594 0 R (HD.2662) 3595 0 R (HD.2663) 3596 0 R (HD.2664) 3597 0 R (HD.2665) 3598 0 R (HD.2666) 3599 0 R (HD.2667) 3600 0 R (HD.2668) 3601 0 R ] /Limits [ (HD.264) (HD.2668) ] >>
+<< /Names [ (HD.1891) 2720 0 R (HD.1892) 2721 0 R (HD.1893) 2722 0 R (HD.1894) 2724 0 R (HD.1895) 2725 0 R (HD.1896) 2726 0 R (HD.1897) 2727 0 R (HD.1898) 2728 0 R (HD.1899) 2729 0 R (HD.19) 660 0 R (HD.190) 851 0 R (HD.1900) 2730 0 R (HD.1901) 2731 0 R (HD.1902) 2732 0 R (HD.1903) 2733 0 R (HD.1904) 2734 0 R (HD.1905) 2735 0 R (HD.1906) 2736 0 R (HD.1907) 2737 0 R (HD.1908) 2738 0 R (HD.1909) 2739 0 R (HD.191) 852 0 R (HD.1910) 2747 0 R (HD.1911) 2748 0 R (HD.1912) 2749 0 R (HD.1913) 2750 0 R (HD.1914) 2751 0 R (HD.1915) 2752 0 R (HD.1916) 2753 0 R (HD.1917) 2754 0 R (HD.1918) 2755 0 R (HD.1919) 2756 0 R ] /Limits [ (HD.1891) (HD.1919) ] >>
endobj
4590 0 obj
-<< /Names [ (HD.2669) 3602 0 R (HD.267) 934 0 R (HD.2670) 3603 0 R (HD.2671) 3604 0 R (HD.2672) 3605 0 R (HD.2673) 3606 0 R (HD.2674) 3607 0 R (HD.2675) 3608 0 R (HD.2676) 3609 0 R (HD.2677) 3610 0 R (HD.2678) 3611 0 R (HD.2679) 3612 0 R (HD.268) 935 0 R (HD.2680) 3613 0 R (HD.2681) 3614 0 R (HD.2682) 3615 0 R (HD.2683) 3616 0 R (HD.2684) 3617 0 R (HD.2685) 3618 0 R (HD.2686) 3619 0 R (HD.2687) 3620 0 R (HD.2688) 3621 0 R (HD.2689) 3622 0 R (HD.269) 936 0 R (HD.2690) 3623 0 R (HD.2691) 3624 0 R (HD.2692) 3625 0 R (HD.2693) 3626 0 R (HD.2694) 3627 0 R (HD.2695) 3628 0 R (HD.2696) 3629 0 R (HD.2697) 3635 0 R ] /Limits [ (HD.2669) (HD.2697) ] >>
+<< /Names [ (HD.192) 853 0 R (HD.1920) 2757 0 R (HD.1921) 2758 0 R (HD.1922) 2759 0 R (HD.1923) 2760 0 R (HD.1924) 2761 0 R (HD.1925) 2762 0 R (HD.1926) 2763 0 R (HD.1927) 2764 0 R (HD.1928) 2765 0 R (HD.1929) 2766 0 R (HD.193) 854 0 R (HD.1930) 2767 0 R (HD.1931) 2768 0 R (HD.1932) 2769 0 R (HD.1933) 2770 0 R (HD.1934) 2771 0 R (HD.1935) 2772 0 R (HD.1936) 2773 0 R (HD.1937) 2774 0 R (HD.1938) 2775 0 R (HD.1939) 2776 0 R (HD.194) 855 0 R (HD.1940) 2777 0 R (HD.1941) 2778 0 R (HD.1942) 2779 0 R (HD.1943) 2780 0 R (HD.1944) 2781 0 R (HD.1945) 2782 0 R (HD.1946) 2783 0 R (HD.1947) 2784 0 R (HD.1948) 2785 0 R ] /Limits [ (HD.192) (HD.1948) ] >>
endobj
4591 0 obj
-<< /Names [ (HD.2698) 3636 0 R (HD.2699) 3637 0 R (HD.27) 662 0 R (HD.270) 937 0 R (HD.2700) 3638 0 R (HD.2701) 3639 0 R (HD.2702) 3640 0 R (HD.2703) 3641 0 R (HD.2704) 3642 0 R (HD.2705) 3643 0 R (HD.2706) 3644 0 R (HD.2707) 3645 0 R (HD.2708) 3646 0 R (HD.2709) 3647 0 R (HD.271) 938 0 R (HD.2710) 3648 0 R (HD.2711) 3649 0 R (HD.2712) 3650 0 R (HD.2713) 3651 0 R (HD.2714) 3652 0 R (HD.2715) 3653 0 R (HD.2716) 3654 0 R (HD.2717) 3655 0 R (HD.2718) 3656 0 R (HD.2719) 3657 0 R (HD.272) 939 0 R (HD.2720) 3658 0 R (HD.2721) 3659 0 R (HD.2722) 3660 0 R (HD.2723) 3661 0 R (HD.2724) 3662 0 R (HD.2725) 3663 0 R ] /Limits [ (HD.2698) (HD.2725) ] >>
+<< /Names [ (HD.1949) 2786 0 R (HD.195) 856 0 R (HD.1950) 2787 0 R (HD.1951) 2788 0 R (HD.1952) 2789 0 R (HD.1953) 2791 0 R (HD.1954) 2792 0 R (HD.1955) 2793 0 R (HD.1956) 2794 0 R (HD.1957) 2795 0 R (HD.1958) 2796 0 R (HD.1959) 2797 0 R (HD.196) 857 0 R (HD.1960) 2798 0 R (HD.1961) 2799 0 R (HD.1962) 2800 0 R (HD.1963) 2802 0 R (HD.1964) 2808 0 R (HD.1965) 2810 0 R (HD.1966) 2811 0 R (HD.1967) 2812 0 R (HD.1968) 2813 0 R (HD.1969) 2814 0 R (HD.197) 858 0 R (HD.1970) 2815 0 R (HD.1971) 2816 0 R (HD.1972) 2817 0 R (HD.1973) 2818 0 R (HD.1974) 2819 0 R (HD.1975) 2820 0 R (HD.1976) 2821 0 R (HD.1977) 2822 0 R ] /Limits [ (HD.1949) (HD.1977) ] >>
endobj
4592 0 obj
-<< /Names [ (HD.2726) 3664 0 R (HD.2727) 3665 0 R (HD.2728) 3666 0 R (HD.2729) 3667 0 R (HD.273) 940 0 R (HD.2730) 3668 0 R (HD.2731) 3669 0 R (HD.2732) 3674 0 R (HD.2733) 3675 0 R (HD.2734) 3676 0 R (HD.2735) 3677 0 R (HD.2736) 3678 0 R (HD.2737) 3679 0 R (HD.2738) 3680 0 R (HD.2739) 3681 0 R (HD.274) 941 0 R (HD.2740) 3682 0 R (HD.2741) 3683 0 R (HD.2742) 3684 0 R (HD.2743) 3685 0 R (HD.2744) 3686 0 R (HD.2745) 3687 0 R (HD.2746) 3688 0 R (HD.2747) 3689 0 R (HD.2748) 3690 0 R (HD.2749) 3691 0 R (HD.275) 942 0 R (HD.2750) 3692 0 R (HD.2751) 3693 0 R (HD.2752) 3694 0 R (HD.2753) 3695 0 R (HD.2754) 3696 0 R ] /Limits [ (HD.2726) (HD.2754) ] >>
+<< /Names [ (HD.1978) 2823 0 R (HD.1979) 2824 0 R (HD.198) 859 0 R (HD.1980) 2825 0 R (HD.1981) 2826 0 R (HD.1982) 2827 0 R (HD.1983) 2828 0 R (HD.1984) 2829 0 R (HD.1985) 2830 0 R (HD.1986) 2831 0 R (HD.1987) 2832 0 R (HD.1988) 2833 0 R (HD.1989) 2834 0 R (HD.199) 860 0 R (HD.1990) 2835 0 R (HD.1991) 2836 0 R (HD.1992) 2837 0 R (HD.1993) 2838 0 R (HD.1994) 2839 0 R (HD.1995) 2840 0 R (HD.1996) 2841 0 R (HD.1997) 2842 0 R (HD.1998) 2843 0 R (HD.1999) 2844 0 R (HD.2) 643 0 R (HD.20) 661 0 R (HD.200) 861 0 R (HD.2000) 2845 0 R (HD.2001) 2846 0 R (HD.2002) 2847 0 R (HD.2003) 2848 0 R (HD.2004) 2849 0 R ] /Limits [ (HD.1978) (HD.2004) ] >>
endobj
4593 0 obj
-<< /Names [ (HD.2755) 3697 0 R (HD.2756) 3698 0 R (HD.2757) 3699 0 R (HD.2758) 3700 0 R (HD.2759) 3701 0 R (HD.276) 943 0 R (HD.2760) 3702 0 R (HD.2761) 3703 0 R (HD.2762) 3704 0 R (HD.2763) 3705 0 R (HD.2764) 3706 0 R (HD.2765) 3707 0 R (HD.2766) 3708 0 R (HD.2767) 3709 0 R (HD.2768) 3710 0 R (HD.2769) 3711 0 R (HD.277) 944 0 R (HD.2770) 3712 0 R (HD.2771) 3713 0 R (HD.2772) 3714 0 R (HD.2773) 3715 0 R (HD.2774) 3716 0 R (HD.2775) 3717 0 R (HD.2776) 3718 0 R (HD.2777) 3719 0 R (HD.2778) 3720 0 R (HD.2779) 3725 0 R (HD.278) 945 0 R (HD.2780) 3726 0 R (HD.2781) 3727 0 R (HD.2782) 3728 0 R (HD.2783) 3729 0 R ] /Limits [ (HD.2755) (HD.2783) ] >>
+<< /Names [ (HD.2005) 2850 0 R (HD.2006) 2851 0 R (HD.2007) 2852 0 R (HD.2008) 2853 0 R (HD.2009) 2854 0 R (HD.201) 862 0 R (HD.2010) 2855 0 R (HD.2011) 2856 0 R (HD.2012) 2857 0 R (HD.2013) 2858 0 R (HD.2014) 2859 0 R (HD.2015) 2860 0 R (HD.2016) 2861 0 R (HD.2017) 2862 0 R (HD.2018) 2863 0 R (HD.2019) 2864 0 R (HD.202) 863 0 R (HD.2020) 2865 0 R (HD.2021) 2866 0 R (HD.2022) 2871 0 R (HD.2023) 2872 0 R (HD.2024) 2873 0 R (HD.2025) 2874 0 R (HD.2026) 2875 0 R (HD.2027) 2876 0 R (HD.2028) 2878 0 R (HD.2029) 2879 0 R (HD.203) 864 0 R (HD.2030) 2880 0 R (HD.2031) 2881 0 R (HD.2032) 2883 0 R (HD.2033) 2884 0 R ] /Limits [ (HD.2005) (HD.2033) ] >>
endobj
4594 0 obj
-<< /Names [ (HD.2784) 3730 0 R (HD.2785) 3731 0 R (HD.2786) 3732 0 R (HD.2787) 3733 0 R (HD.2788) 3734 0 R (HD.2789) 3735 0 R (HD.279) 946 0 R (HD.2790) 3736 0 R (HD.2791) 3737 0 R (HD.2792) 3738 0 R (HD.2793) 3739 0 R (HD.2794) 3740 0 R (HD.2795) 3741 0 R (HD.2796) 3742 0 R (HD.2797) 3743 0 R (HD.2798) 3744 0 R (HD.2799) 3745 0 R (HD.28) 663 0 R (HD.280) 947 0 R (HD.2800) 3746 0 R (HD.2801) 3747 0 R (HD.2802) 3748 0 R (HD.2803) 3749 0 R (HD.2804) 3750 0 R (HD.2805) 3751 0 R (HD.2806) 3752 0 R (HD.2807) 3753 0 R (HD.2808) 3754 0 R (HD.2809) 3755 0 R (HD.281) 948 0 R (HD.2810) 3756 0 R (HD.2811) 3757 0 R ] /Limits [ (HD.2784) (HD.2811) ] >>
+<< /Names [ (HD.2034) 2885 0 R (HD.2035) 2886 0 R (HD.2036) 2887 0 R (HD.2037) 2888 0 R (HD.2038) 2889 0 R (HD.2039) 2890 0 R (HD.204) 865 0 R (HD.2040) 2891 0 R (HD.2041) 2892 0 R (HD.2042) 2893 0 R (HD.2043) 2894 0 R (HD.2044) 2895 0 R (HD.2045) 2896 0 R (HD.2046) 2897 0 R (HD.2047) 2898 0 R (HD.2048) 2899 0 R (HD.2049) 2900 0 R (HD.205) 866 0 R (HD.2050) 2901 0 R (HD.2051) 2902 0 R (HD.2052) 2903 0 R (HD.2053) 2904 0 R (HD.2054) 2905 0 R (HD.2055) 2906 0 R (HD.2056) 2907 0 R (HD.2057) 2913 0 R (HD.2058) 2914 0 R (HD.2059) 2915 0 R (HD.206) 867 0 R (HD.2060) 2916 0 R (HD.2061) 2917 0 R (HD.2062) 2918 0 R ] /Limits [ (HD.2034) (HD.2062) ] >>
endobj
4595 0 obj
-<< /Names [ (HD.2812) 3758 0 R (HD.2813) 3759 0 R (HD.2814) 3760 0 R (HD.2815) 3761 0 R (HD.2816) 3762 0 R (HD.2817) 3763 0 R (HD.2818) 3764 0 R (HD.2819) 3765 0 R (HD.282) 949 0 R (HD.2820) 3770 0 R (HD.2821) 3771 0 R (HD.2822) 3772 0 R (HD.2823) 3773 0 R (HD.2824) 3774 0 R (HD.2825) 3775 0 R (HD.2826) 3776 0 R (HD.2827) 3777 0 R (HD.2828) 3778 0 R (HD.2829) 3779 0 R (HD.283) 950 0 R (HD.2830) 3780 0 R (HD.2831) 3781 0 R (HD.2832) 3782 0 R (HD.2833) 3783 0 R (HD.2834) 3784 0 R (HD.2835) 3785 0 R (HD.2836) 3786 0 R (HD.2837) 3787 0 R (HD.2838) 3788 0 R (HD.2839) 3789 0 R (HD.284) 951 0 R (HD.2840) 3790 0 R ] /Limits [ (HD.2812) (HD.2840) ] >>
+<< /Names [ (HD.2063) 2919 0 R (HD.2064) 2920 0 R (HD.2065) 2921 0 R (HD.2066) 2922 0 R (HD.2067) 2923 0 R (HD.2068) 2924 0 R (HD.2069) 2925 0 R (HD.207) 868 0 R (HD.2070) 2927 0 R (HD.2071) 2929 0 R (HD.2072) 2930 0 R (HD.2073) 2931 0 R (HD.2074) 2932 0 R (HD.2075) 2933 0 R (HD.2076) 2934 0 R (HD.2077) 2935 0 R (HD.2078) 2936 0 R (HD.2079) 2937 0 R (HD.208) 873 0 R (HD.2080) 2938 0 R (HD.2081) 2939 0 R (HD.2082) 2940 0 R (HD.2083) 2941 0 R (HD.2084) 2942 0 R (HD.2085) 2943 0 R (HD.2086) 2944 0 R (HD.2087) 2945 0 R (HD.2088) 2946 0 R (HD.2089) 2947 0 R (HD.209) 874 0 R (HD.2090) 2948 0 R (HD.2091) 2949 0 R ] /Limits [ (HD.2063) (HD.2091) ] >>
endobj
4596 0 obj
-<< /Names [ (HD.2841) 3791 0 R (HD.2842) 3792 0 R (HD.2843) 3793 0 R (HD.2844) 3794 0 R (HD.2845) 3795 0 R (HD.2846) 3796 0 R (HD.2847) 3797 0 R (HD.2848) 3798 0 R (HD.2849) 3799 0 R (HD.285) 952 0 R (HD.2850) 3800 0 R (HD.2851) 3801 0 R (HD.2852) 3802 0 R (HD.2853) 3803 0 R (HD.2854) 3804 0 R (HD.2855) 3805 0 R (HD.2856) 3806 0 R (HD.2857) 3807 0 R (HD.2858) 3808 0 R (HD.2859) 3809 0 R (HD.286) 953 0 R (HD.2860) 3810 0 R (HD.2861) 3811 0 R (HD.2862) 3812 0 R (HD.2863) 3813 0 R (HD.2864) 3814 0 R (HD.2865) 3815 0 R (HD.2866) 3816 0 R (HD.2867) 3817 0 R (HD.2868) 3822 0 R (HD.2869) 3823 0 R (HD.287) 954 0 R ] /Limits [ (HD.2841) (HD.287) ] >>
+<< /Names [ (HD.2092) 2950 0 R (HD.2093) 2951 0 R (HD.2094) 2952 0 R (HD.2095) 2953 0 R (HD.2096) 2954 0 R (HD.2097) 2955 0 R (HD.2098) 2956 0 R (HD.2099) 2957 0 R (HD.21) 662 0 R (HD.210) 875 0 R (HD.2100) 2958 0 R (HD.2101) 2963 0 R (HD.2102) 2964 0 R (HD.2103) 2965 0 R (HD.2104) 2966 0 R (HD.2105) 2967 0 R (HD.2106) 2968 0 R (HD.2107) 2969 0 R (HD.2108) 2970 0 R (HD.2109) 2971 0 R (HD.211) 876 0 R (HD.2110) 2972 0 R (HD.2111) 2973 0 R (HD.2112) 2974 0 R (HD.2113) 2975 0 R (HD.2114) 2976 0 R (HD.2115) 2977 0 R (HD.2116) 2978 0 R (HD.2117) 2979 0 R (HD.2118) 2980 0 R (HD.2119) 2981 0 R (HD.212) 877 0 R ] /Limits [ (HD.2092) (HD.212) ] >>
endobj
4597 0 obj
-<< /Names [ (HD.2870) 3824 0 R (HD.2871) 3825 0 R (HD.2872) 3826 0 R (HD.2873) 3827 0 R (HD.2874) 3828 0 R (HD.2875) 3829 0 R (HD.2876) 3830 0 R (HD.2877) 3831 0 R (HD.2878) 3832 0 R (HD.2879) 3833 0 R (HD.288) 955 0 R (HD.2880) 3834 0 R (HD.2881) 3835 0 R (HD.2882) 3836 0 R (HD.2883) 3837 0 R (HD.2884) 3838 0 R (HD.2885) 3839 0 R (HD.2886) 3840 0 R (HD.2887) 3841 0 R (HD.2888) 3842 0 R (HD.2889) 3843 0 R (HD.289) 956 0 R (HD.2890) 3844 0 R (HD.2891) 3845 0 R (HD.2892) 3846 0 R (HD.2893) 3847 0 R (HD.2894) 3848 0 R (HD.2895) 3849 0 R (HD.2896) 3850 0 R (HD.2897) 3851 0 R (HD.2898) 3852 0 R (HD.2899) 3853 0 R ] /Limits [ (HD.2870) (HD.2899) ] >>
+<< /Names [ (HD.2120) 2982 0 R (HD.2121) 2983 0 R (HD.2122) 2984 0 R (HD.2123) 2985 0 R (HD.2124) 2986 0 R (HD.2125) 2987 0 R (HD.2126) 2988 0 R (HD.2127) 2989 0 R (HD.2128) 2990 0 R (HD.2129) 2991 0 R (HD.213) 878 0 R (HD.2130) 2992 0 R (HD.2131) 2993 0 R (HD.2132) 2994 0 R (HD.2133) 2995 0 R (HD.2134) 2996 0 R (HD.2135) 2997 0 R (HD.2136) 2998 0 R (HD.2137) 2999 0 R (HD.2138) 3000 0 R (HD.2139) 3001 0 R (HD.214) 879 0 R (HD.2140) 3002 0 R (HD.2141) 3003 0 R (HD.2142) 3004 0 R (HD.2143) 3005 0 R (HD.2144) 3006 0 R (HD.2145) 3007 0 R (HD.2146) 3008 0 R (HD.2147) 3015 0 R (HD.2148) 3016 0 R (HD.2149) 3017 0 R ] /Limits [ (HD.2120) (HD.2149) ] >>
endobj
4598 0 obj
-<< /Names [ (HD.29) 664 0 R (HD.290) 957 0 R (HD.2900) 3854 0 R (HD.2901) 3855 0 R (HD.2902) 3856 0 R (HD.2903) 3857 0 R (HD.2904) 3858 0 R (HD.2905) 3859 0 R (HD.2906) 3860 0 R (HD.2907) 3865 0 R (HD.2908) 3866 0 R (HD.2909) 3867 0 R (HD.291) 958 0 R (HD.2910) 3868 0 R (HD.2911) 3869 0 R (HD.2912) 3870 0 R (HD.2913) 3871 0 R (HD.2914) 3872 0 R (HD.2915) 3873 0 R (HD.2916) 3874 0 R (HD.2917) 3875 0 R (HD.2918) 3876 0 R (HD.2919) 3877 0 R (HD.292) 959 0 R (HD.2920) 3878 0 R (HD.2921) 3879 0 R (HD.2922) 3880 0 R (HD.2923) 3881 0 R (HD.2924) 3882 0 R (HD.2925) 3883 0 R (HD.2926) 3884 0 R (HD.2927) 3885 0 R ] /Limits [ (HD.29) (HD.2927) ] >>
+<< /Names [ (HD.215) 880 0 R (HD.2150) 3018 0 R (HD.2151) 3019 0 R (HD.2152) 3020 0 R (HD.2153) 3021 0 R (HD.2154) 3022 0 R (HD.2155) 3023 0 R (HD.2156) 3024 0 R (HD.2157) 3025 0 R (HD.2158) 3026 0 R (HD.2159) 3027 0 R (HD.216) 881 0 R (HD.2160) 3028 0 R (HD.2161) 3029 0 R (HD.2162) 3030 0 R (HD.2163) 3031 0 R (HD.2164) 3032 0 R (HD.2165) 3033 0 R (HD.2166) 3034 0 R (HD.2167) 3035 0 R (HD.2168) 3036 0 R (HD.2169) 3037 0 R (HD.217) 882 0 R (HD.2170) 3038 0 R (HD.2171) 3039 0 R (HD.2172) 3040 0 R (HD.2173) 3041 0 R (HD.2174) 3042 0 R (HD.2175) 3043 0 R (HD.2176) 3044 0 R (HD.2177) 3045 0 R (HD.2178) 3046 0 R ] /Limits [ (HD.215) (HD.2178) ] >>
endobj
4599 0 obj
-<< /Names [ (HD.2928) 3886 0 R (HD.2929) 3887 0 R (HD.293) 960 0 R (HD.2930) 3888 0 R (HD.2931) 3889 0 R (HD.2932) 3890 0 R (HD.2933) 3891 0 R (HD.2934) 3892 0 R (HD.2935) 3893 0 R (HD.2936) 3894 0 R (HD.2937) 3895 0 R (HD.2938) 3896 0 R (HD.2939) 3897 0 R (HD.294) 961 0 R (HD.2940) 3898 0 R (HD.2941) 3899 0 R (HD.2942) 3900 0 R (HD.2943) 3901 0 R (HD.2944) 3902 0 R (HD.2945) 3903 0 R (HD.2946) 3904 0 R (HD.2947) 3905 0 R (HD.2948) 3906 0 R (HD.2949) 3907 0 R (HD.295) 962 0 R (HD.2950) 3908 0 R (HD.2951) 3909 0 R (HD.2952) 3910 0 R (HD.2953) 3911 0 R (HD.2954) 3912 0 R (HD.2955) 3913 0 R (HD.2956) 3914 0 R ] /Limits [ (HD.2928) (HD.2956) ] >>
+<< /Names [ (HD.2179) 3047 0 R (HD.218) 883 0 R (HD.2180) 3048 0 R (HD.2181) 3049 0 R (HD.2182) 3050 0 R (HD.2183) 3051 0 R (HD.2184) 3052 0 R (HD.2185) 3053 0 R (HD.2186) 3054 0 R (HD.2187) 3055 0 R (HD.2188) 3056 0 R (HD.2189) 3057 0 R (HD.219) 884 0 R (HD.2190) 3058 0 R (HD.2191) 3059 0 R (HD.2192) 3060 0 R (HD.2193) 3061 0 R (HD.2194) 3062 0 R (HD.2195) 3063 0 R (HD.2196) 3064 0 R (HD.2197) 3066 0 R (HD.2198) 3067 0 R (HD.2199) 3073 0 R (HD.22) 663 0 R (HD.220) 885 0 R (HD.2200) 3074 0 R (HD.2201) 3075 0 R (HD.2202) 3076 0 R (HD.2203) 3077 0 R (HD.2204) 3078 0 R (HD.2205) 3080 0 R (HD.2206) 3081 0 R ] /Limits [ (HD.2179) (HD.2206) ] >>
endobj
4600 0 obj
-<< /Names [ (HD.2957) 3915 0 R (HD.2958) 3916 0 R (HD.2959) 3921 0 R (HD.296) 963 0 R (HD.2960) 3922 0 R (HD.2961) 3923 0 R (HD.2962) 3924 0 R (HD.2963) 3925 0 R (HD.2964) 3926 0 R (HD.2965) 3927 0 R (HD.2966) 3928 0 R (HD.2967) 3929 0 R (HD.2968) 3930 0 R (HD.2969) 3931 0 R (HD.297) 964 0 R (HD.2970) 3932 0 R (HD.2971) 3933 0 R (HD.2972) 3934 0 R (HD.2973) 3935 0 R (HD.2974) 3936 0 R (HD.2975) 3937 0 R (HD.2976) 3938 0 R (HD.2977) 3939 0 R (HD.2978) 3940 0 R (HD.2979) 3941 0 R (HD.298) 965 0 R (HD.2980) 3942 0 R (HD.2981) 3943 0 R (HD.2982) 3944 0 R (HD.2983) 3945 0 R (HD.2984) 3946 0 R (HD.2985) 3947 0 R ] /Limits [ (HD.2957) (HD.2985) ] >>
+<< /Names [ (HD.2207) 3082 0 R (HD.2208) 3083 0 R (HD.2209) 3084 0 R (HD.221) 886 0 R (HD.2210) 3085 0 R (HD.2211) 3086 0 R (HD.2212) 3087 0 R (HD.2213) 3088 0 R (HD.2214) 3089 0 R (HD.2215) 3090 0 R (HD.2216) 3091 0 R (HD.2217) 3092 0 R (HD.2218) 3093 0 R (HD.2219) 3094 0 R (HD.222) 887 0 R (HD.2220) 3095 0 R (HD.2221) 3096 0 R (HD.2222) 3097 0 R (HD.2223) 3098 0 R (HD.2224) 3099 0 R (HD.2225) 3100 0 R (HD.2226) 3101 0 R (HD.2227) 3102 0 R (HD.2228) 3103 0 R (HD.2229) 3104 0 R (HD.223) 888 0 R (HD.2230) 3105 0 R (HD.2231) 3106 0 R (HD.2232) 3107 0 R (HD.2233) 3108 0 R (HD.2234) 3115 0 R (HD.2235) 3116 0 R ] /Limits [ (HD.2207) (HD.2235) ] >>
endobj
4601 0 obj
-<< /Names [ (HD.2986) 3948 0 R (HD.2987) 3949 0 R (HD.2988) 3950 0 R (HD.2989) 3951 0 R (HD.299) 966 0 R (HD.2990) 3952 0 R (HD.2991) 3953 0 R (HD.2992) 3954 0 R (HD.2993) 3955 0 R (HD.2994) 3956 0 R (HD.2995) 3957 0 R (HD.2996) 3958 0 R (HD.2997) 3959 0 R (HD.2998) 3960 0 R (HD.2999) 3961 0 R (HD.3) 638 0 R (HD.30) 665 0 R (HD.300) 967 0 R (HD.3000) 3962 0 R (HD.3001) 3963 0 R (HD.3002) 3964 0 R (HD.3003) 3965 0 R (HD.3004) 3966 0 R (HD.3005) 3971 0 R (HD.3006) 3972 0 R (HD.3007) 3973 0 R (HD.3008) 3974 0 R (HD.3009) 3975 0 R (HD.301) 968 0 R (HD.3010) 3976 0 R (HD.3011) 3977 0 R (HD.3012) 3978 0 R ] /Limits [ (HD.2986) (HD.3012) ] >>
+<< /Names [ (HD.2236) 3117 0 R (HD.2237) 3118 0 R (HD.2238) 3119 0 R (HD.2239) 3120 0 R (HD.224) 889 0 R (HD.2240) 3121 0 R (HD.2241) 3122 0 R (HD.2242) 3123 0 R (HD.2243) 3124 0 R (HD.2244) 3125 0 R (HD.2245) 3126 0 R (HD.2246) 3127 0 R (HD.2247) 3129 0 R (HD.2248) 3130 0 R (HD.2249) 3131 0 R (HD.225) 890 0 R (HD.2250) 3132 0 R (HD.2251) 3133 0 R (HD.2252) 3134 0 R (HD.2253) 3135 0 R (HD.2254) 3136 0 R (HD.2255) 3137 0 R (HD.2256) 3138 0 R (HD.2257) 3139 0 R (HD.2258) 3140 0 R (HD.2259) 3141 0 R (HD.226) 891 0 R (HD.2260) 3142 0 R (HD.2261) 3143 0 R (HD.2262) 3144 0 R (HD.2263) 3145 0 R (HD.2264) 3146 0 R ] /Limits [ (HD.2236) (HD.2264) ] >>
endobj
4602 0 obj
-<< /Names [ (HD.3013) 3979 0 R (HD.3014) 3980 0 R (HD.3015) 3981 0 R (HD.3016) 3982 0 R (HD.3017) 3983 0 R (HD.3018) 3984 0 R (HD.3019) 3985 0 R (HD.302) 969 0 R (HD.3020) 3986 0 R (HD.3021) 3987 0 R (HD.3022) 3988 0 R (HD.3023) 3989 0 R (HD.3024) 3990 0 R (HD.3025) 3991 0 R (HD.3026) 3992 0 R (HD.3027) 3993 0 R (HD.3028) 3994 0 R (HD.3029) 3995 0 R (HD.303) 970 0 R (HD.3030) 3996 0 R (HD.3031) 3997 0 R (HD.3032) 3998 0 R (HD.3033) 3999 0 R (HD.3034) 4000 0 R (HD.3035) 4001 0 R (HD.3036) 4002 0 R (HD.3037) 4003 0 R (HD.3038) 4004 0 R (HD.3039) 4005 0 R (HD.304) 971 0 R (HD.3040) 4006 0 R (HD.3041) 4007 0 R ] /Limits [ (HD.3013) (HD.3041) ] >>
+<< /Names [ (HD.2265) 3147 0 R (HD.2266) 3148 0 R (HD.2267) 3149 0 R (HD.2268) 3150 0 R (HD.2269) 3151 0 R (HD.227) 892 0 R (HD.2270) 3152 0 R (HD.2271) 3153 0 R (HD.2272) 3154 0 R (HD.2273) 3155 0 R (HD.2274) 3156 0 R (HD.2275) 3157 0 R (HD.2276) 3159 0 R (HD.2277) 3160 0 R (HD.2278) 3161 0 R (HD.2279) 3162 0 R (HD.228) 893 0 R (HD.2280) 3167 0 R (HD.2281) 3168 0 R (HD.2282) 3169 0 R (HD.2283) 3170 0 R (HD.2284) 3171 0 R (HD.2285) 3172 0 R (HD.2286) 3173 0 R (HD.2287) 3174 0 R (HD.2288) 3175 0 R (HD.2289) 3176 0 R (HD.229) 894 0 R (HD.2290) 3177 0 R (HD.2291) 3178 0 R (HD.2292) 3179 0 R (HD.2293) 3180 0 R ] /Limits [ (HD.2265) (HD.2293) ] >>
endobj
4603 0 obj
-<< /Names [ (HD.3042) 4008 0 R (HD.3043) 4009 0 R (HD.3044) 4010 0 R (HD.3045) 4011 0 R (HD.3046) 4012 0 R (HD.3047) 4013 0 R (HD.3048) 4014 0 R (HD.3049) 4015 0 R (HD.305) 972 0 R (HD.3050) 4016 0 R (HD.3051) 4017 0 R (HD.3052) 4018 0 R (HD.3053) 4019 0 R (HD.3054) 4020 0 R (HD.3055) 4025 0 R (HD.3056) 4026 0 R (HD.3057) 4027 0 R (HD.3058) 4028 0 R (HD.3059) 4029 0 R (HD.306) 973 0 R (HD.3060) 4030 0 R (HD.3061) 4031 0 R (HD.3062) 4032 0 R (HD.3063) 4033 0 R (HD.3064) 4034 0 R (HD.3065) 4035 0 R (HD.3066) 4036 0 R (HD.3067) 4037 0 R (HD.3068) 4038 0 R (HD.3069) 4039 0 R (HD.307) 974 0 R (HD.3070) 4040 0 R ] /Limits [ (HD.3042) (HD.3070) ] >>
+<< /Names [ (HD.2294) 3181 0 R (HD.2295) 3182 0 R (HD.2296) 3183 0 R (HD.2297) 3184 0 R (HD.2298) 3185 0 R (HD.2299) 3186 0 R (HD.23) 664 0 R (HD.230) 895 0 R (HD.2300) 3187 0 R (HD.2301) 3188 0 R (HD.2302) 3189 0 R (HD.2303) 3190 0 R (HD.2304) 3191 0 R (HD.2305) 3192 0 R (HD.2306) 3193 0 R (HD.2307) 3194 0 R (HD.2308) 3195 0 R (HD.2309) 3196 0 R (HD.231) 896 0 R (HD.2310) 3197 0 R (HD.2311) 3198 0 R (HD.2312) 3199 0 R (HD.2313) 3200 0 R (HD.2314) 3201 0 R (HD.2315) 3202 0 R (HD.2316) 3203 0 R (HD.2317) 3205 0 R (HD.2318) 3207 0 R (HD.2319) 3208 0 R (HD.232) 897 0 R (HD.2320) 3209 0 R (HD.2321) 3210 0 R ] /Limits [ (HD.2294) (HD.2321) ] >>
endobj
4604 0 obj
-<< /Names [ (HD.3071) 4041 0 R (HD.3072) 4042 0 R (HD.3073) 4043 0 R (HD.3074) 4044 0 R (HD.3075) 4045 0 R (HD.3076) 4046 0 R (HD.3077) 4047 0 R (HD.3078) 4048 0 R (HD.3079) 4049 0 R (HD.308) 975 0 R (HD.3080) 4050 0 R (HD.3081) 4051 0 R (HD.3082) 4052 0 R (HD.3083) 4053 0 R (HD.3084) 4054 0 R (HD.3085) 4055 0 R (HD.3086) 4056 0 R (HD.3087) 4057 0 R (HD.3088) 4058 0 R (HD.3089) 4059 0 R (HD.309) 976 0 R (HD.3090) 4060 0 R (HD.3091) 4061 0 R (HD.3092) 4062 0 R (HD.3093) 4063 0 R (HD.3094) 4064 0 R (HD.3095) 4065 0 R (HD.3096) 4066 0 R (HD.3097) 4067 0 R (HD.3098) 4068 0 R (HD.3099) 4069 0 R (HD.31) 666 0 R ] /Limits [ (HD.3071) (HD.31) ] >>
+<< /Names [ (HD.2322) 3211 0 R (HD.2323) 3212 0 R (HD.2324) 3213 0 R (HD.2325) 3214 0 R (HD.2326) 3215 0 R (HD.2327) 3216 0 R (HD.2328) 3217 0 R (HD.2329) 3218 0 R (HD.233) 898 0 R (HD.2330) 3219 0 R (HD.2331) 3220 0 R (HD.2332) 3221 0 R (HD.2333) 3222 0 R (HD.2334) 3228 0 R (HD.2335) 3229 0 R (HD.2336) 3230 0 R (HD.2337) 3231 0 R (HD.2338) 3232 0 R (HD.2339) 3233 0 R (HD.234) 899 0 R (HD.2340) 3234 0 R (HD.2341) 3235 0 R (HD.2342) 3236 0 R (HD.2343) 3237 0 R (HD.2344) 3238 0 R (HD.2345) 3239 0 R (HD.2346) 3240 0 R (HD.2347) 3241 0 R (HD.2348) 3242 0 R (HD.2349) 3243 0 R (HD.235) 900 0 R (HD.2350) 3244 0 R ] /Limits [ (HD.2322) (HD.2350) ] >>
endobj
4605 0 obj
-<< /Names [ (HD.310) 977 0 R (HD.3100) 4070 0 R (HD.3101) 4071 0 R (HD.3102) 4072 0 R (HD.3103) 4073 0 R (HD.3104) 4074 0 R (HD.3105) 4075 0 R (HD.3106) 4076 0 R (HD.3107) 4077 0 R (HD.3108) 4078 0 R (HD.3109) 4079 0 R (HD.311) 978 0 R (HD.3110) 4080 0 R (HD.3111) 4081 0 R (HD.3112) 4082 0 R (HD.3113) 4083 0 R (HD.3114) 4084 0 R (HD.3115) 4085 0 R (HD.3116) 4086 0 R (HD.3117) 4091 0 R (HD.3118) 4092 0 R (HD.3119) 4093 0 R (HD.312) 979 0 R (HD.3120) 4094 0 R (HD.3121) 4095 0 R (HD.3122) 4096 0 R (HD.3123) 4097 0 R (HD.3124) 4098 0 R (HD.3125) 4099 0 R (HD.3126) 4100 0 R (HD.3127) 4101 0 R (HD.3128) 4102 0 R ] /Limits [ (HD.310) (HD.3128) ] >>
+<< /Names [ (HD.2351) 3245 0 R (HD.2352) 3246 0 R (HD.2353) 3247 0 R (HD.2354) 3248 0 R (HD.2355) 3249 0 R (HD.2356) 3250 0 R (HD.2357) 3251 0 R (HD.2358) 3252 0 R (HD.2359) 3253 0 R (HD.236) 901 0 R (HD.2360) 3254 0 R (HD.2361) 3255 0 R (HD.2362) 3256 0 R (HD.2363) 3257 0 R (HD.2364) 3258 0 R (HD.2365) 3259 0 R (HD.2366) 3260 0 R (HD.2367) 3261 0 R (HD.2368) 3262 0 R (HD.2369) 3263 0 R (HD.237) 902 0 R (HD.2370) 3264 0 R (HD.2371) 3265 0 R (HD.2372) 3266 0 R (HD.2373) 3267 0 R (HD.2374) 3268 0 R (HD.2375) 3269 0 R (HD.2376) 3270 0 R (HD.2377) 3271 0 R (HD.2378) 3272 0 R (HD.2379) 3273 0 R (HD.238) 903 0 R ] /Limits [ (HD.2351) (HD.238) ] >>
endobj
4606 0 obj
-<< /Names [ (HD.3129) 4103 0 R (HD.313) 980 0 R (HD.3130) 4104 0 R (HD.3131) 4105 0 R (HD.3132) 4106 0 R (HD.3133) 4107 0 R (HD.3134) 4108 0 R (HD.3135) 4109 0 R (HD.3136) 4110 0 R (HD.3137) 4111 0 R (HD.3138) 4112 0 R (HD.3139) 4113 0 R (HD.314) 981 0 R (HD.3140) 4114 0 R (HD.3141) 4115 0 R (HD.3142) 4116 0 R (HD.3143) 4117 0 R (HD.3144) 4118 0 R (HD.3145) 4119 0 R (HD.3146) 4120 0 R (HD.3147) 4121 0 R (HD.3148) 4122 0 R (HD.3149) 4123 0 R (HD.315) 982 0 R (HD.3150) 4124 0 R (HD.3151) 4125 0 R (HD.3152) 4126 0 R (HD.3153) 4127 0 R (HD.3154) 4128 0 R (HD.3155) 4129 0 R (HD.3156) 4130 0 R (HD.3157) 4131 0 R ] /Limits [ (HD.3129) (HD.3157) ] >>
+<< /Names [ (HD.2380) 3274 0 R (HD.2381) 3275 0 R (HD.2382) 3282 0 R (HD.2383) 3283 0 R (HD.2384) 3284 0 R (HD.2385) 3285 0 R (HD.2386) 3286 0 R (HD.2387) 3287 0 R (HD.2388) 3288 0 R (HD.2389) 3289 0 R (HD.239) 904 0 R (HD.2390) 3290 0 R (HD.2391) 3291 0 R (HD.2392) 3292 0 R (HD.2393) 3293 0 R (HD.2394) 3294 0 R (HD.2395) 3296 0 R (HD.2396) 3297 0 R (HD.2397) 3298 0 R (HD.2398) 3299 0 R (HD.2399) 3300 0 R (HD.24) 665 0 R (HD.240) 905 0 R (HD.2400) 3301 0 R (HD.2401) 3302 0 R (HD.2402) 3303 0 R (HD.2403) 3304 0 R (HD.2404) 3305 0 R (HD.2405) 3306 0 R (HD.2406) 3308 0 R (HD.2407) 3309 0 R (HD.2408) 3310 0 R ] /Limits [ (HD.2380) (HD.2408) ] >>
endobj
4607 0 obj
-<< /Names [ (HD.3158) 4132 0 R (HD.3159) 4133 0 R (HD.316) 983 0 R (HD.3160) 4134 0 R (HD.3161) 4135 0 R (HD.3162) 4136 0 R (HD.3163) 4137 0 R (HD.3164) 4138 0 R (HD.3165) 4139 0 R (HD.3166) 4140 0 R (HD.3167) 4141 0 R (HD.3168) 4142 0 R (HD.3169) 4148 0 R (HD.317) 984 0 R (HD.3170) 4149 0 R (HD.3171) 4150 0 R (HD.3172) 4151 0 R (HD.3173) 4152 0 R (HD.3174) 4153 0 R (HD.3175) 4154 0 R (HD.3176) 4155 0 R (HD.3177) 4156 0 R (HD.3178) 4157 0 R (HD.3179) 4158 0 R (HD.318) 985 0 R (HD.3180) 4159 0 R (HD.3181) 4160 0 R (HD.3182) 4161 0 R (HD.3183) 4162 0 R (HD.3184) 4163 0 R (HD.3185) 4164 0 R (HD.3186) 4165 0 R ] /Limits [ (HD.3158) (HD.3186) ] >>
+<< /Names [ (HD.2409) 3311 0 R (HD.241) 910 0 R (HD.2410) 3313 0 R (HD.2411) 3315 0 R (HD.2412) 3316 0 R (HD.2413) 3317 0 R (HD.2414) 3318 0 R (HD.2415) 3319 0 R (HD.2416) 3320 0 R (HD.2417) 3321 0 R (HD.2418) 3322 0 R (HD.2419) 3328 0 R (HD.242) 911 0 R (HD.2420) 3329 0 R (HD.2421) 3330 0 R (HD.2422) 3332 0 R (HD.2423) 3333 0 R (HD.2424) 3334 0 R (HD.2425) 3335 0 R (HD.2426) 3336 0 R (HD.2427) 3337 0 R (HD.2428) 3338 0 R (HD.2429) 3339 0 R (HD.243) 912 0 R (HD.2430) 3340 0 R (HD.2431) 3341 0 R (HD.2432) 3342 0 R (HD.2433) 3343 0 R (HD.2434) 3344 0 R (HD.2435) 3345 0 R (HD.2436) 3346 0 R (HD.2437) 3347 0 R ] /Limits [ (HD.2409) (HD.2437) ] >>
endobj
4608 0 obj
-<< /Names [ (HD.3187) 4166 0 R (HD.3188) 4167 0 R (HD.3189) 4168 0 R (HD.319) 986 0 R (HD.3190) 4169 0 R (HD.3191) 4170 0 R (HD.3192) 4171 0 R (HD.3193) 4172 0 R (HD.3194) 4173 0 R (HD.3195) 4174 0 R (HD.3196) 4175 0 R (HD.3197) 4176 0 R (HD.3198) 4177 0 R (HD.3199) 4178 0 R (HD.32) 667 0 R (HD.320) 987 0 R (HD.3200) 4179 0 R (HD.3201) 4180 0 R (HD.3202) 4181 0 R (HD.3203) 4182 0 R (HD.3204) 4183 0 R (HD.3205) 4184 0 R (HD.3206) 4185 0 R (HD.3207) 4186 0 R (HD.3208) 4187 0 R (HD.3209) 4188 0 R (HD.321) 994 0 R (HD.3210) 4189 0 R (HD.3211) 4190 0 R (HD.3212) 4191 0 R (HD.3213) 4192 0 R (HD.3214) 4193 0 R ] /Limits [ (HD.3187) (HD.3214) ] >>
+<< /Names [ (HD.2438) 3348 0 R (HD.2439) 3349 0 R (HD.244) 913 0 R (HD.2440) 3350 0 R (HD.2441) 3351 0 R (HD.2442) 3352 0 R (HD.2443) 3353 0 R (HD.2444) 3354 0 R (HD.2445) 3355 0 R (HD.2446) 3356 0 R (HD.2447) 3357 0 R (HD.2448) 3358 0 R (HD.2449) 3359 0 R (HD.245) 914 0 R (HD.2450) 3360 0 R (HD.2451) 3361 0 R (HD.2452) 3362 0 R (HD.2453) 3363 0 R (HD.2454) 3364 0 R (HD.2455) 3365 0 R (HD.2456) 3366 0 R (HD.2457) 3367 0 R (HD.2458) 3368 0 R (HD.2459) 3369 0 R (HD.246) 915 0 R (HD.2460) 3370 0 R (HD.2461) 3371 0 R (HD.2462) 3372 0 R (HD.2463) 3373 0 R (HD.2464) 3380 0 R (HD.2465) 3381 0 R (HD.2466) 3382 0 R ] /Limits [ (HD.2438) (HD.2466) ] >>
endobj
4609 0 obj
-<< /Names [ (HD.3215) 4194 0 R (HD.3216) 4195 0 R (HD.322) 995 0 R (HD.323) 996 0 R (HD.324) 997 0 R (HD.325) 998 0 R (HD.326) 999 0 R (HD.327) 1000 0 R (HD.328) 1001 0 R (HD.329) 1002 0 R (HD.33) 668 0 R (HD.330) 1003 0 R (HD.331) 1004 0 R (HD.332) 1005 0 R (HD.333) 1006 0 R (HD.334) 1007 0 R (HD.335) 1008 0 R (HD.336) 1009 0 R (HD.337) 1010 0 R (HD.338) 1011 0 R (HD.339) 1012 0 R (HD.34) 669 0 R (HD.340) 1013 0 R (HD.341) 1014 0 R (HD.342) 1015 0 R (HD.343) 1016 0 R (HD.344) 1017 0 R (HD.345) 1018 0 R (HD.346) 1019 0 R (HD.347) 1020 0 R (HD.348) 1021 0 R (HD.349) 1022 0 R ] /Limits [ (HD.3215) (HD.349) ] >>
+<< /Names [ (HD.2467) 3383 0 R (HD.2468) 3384 0 R (HD.2469) 3385 0 R (HD.247) 916 0 R (HD.2470) 3386 0 R (HD.2471) 3387 0 R (HD.2472) 3388 0 R (HD.2473) 3389 0 R (HD.2474) 3390 0 R (HD.2475) 3391 0 R (HD.2476) 3392 0 R (HD.2477) 3393 0 R (HD.2478) 3394 0 R (HD.2479) 3395 0 R (HD.248) 917 0 R (HD.2480) 3396 0 R (HD.2481) 3397 0 R (HD.2482) 3398 0 R (HD.2483) 3399 0 R (HD.2484) 3400 0 R (HD.2485) 3401 0 R (HD.2486) 3402 0 R (HD.2487) 3403 0 R (HD.2488) 3404 0 R (HD.2489) 3405 0 R (HD.249) 918 0 R (HD.2490) 3406 0 R (HD.2491) 3407 0 R (HD.2492) 3408 0 R (HD.2493) 3409 0 R (HD.2494) 3410 0 R (HD.2495) 3411 0 R ] /Limits [ (HD.2467) (HD.2495) ] >>
endobj
4610 0 obj
-<< /Names [ (HD.35) 670 0 R (HD.350) 1023 0 R (HD.351) 1024 0 R (HD.352) 1025 0 R (HD.353) 1032 0 R (HD.354) 1033 0 R (HD.355) 1034 0 R (HD.356) 1035 0 R (HD.357) 1036 0 R (HD.358) 1037 0 R (HD.359) 1038 0 R (HD.36) 671 0 R (HD.360) 1039 0 R (HD.361) 1040 0 R (HD.362) 1041 0 R (HD.363) 1042 0 R (HD.364) 1043 0 R (HD.365) 1044 0 R (HD.366) 1045 0 R (HD.367) 1046 0 R (HD.368) 1047 0 R (HD.369) 1048 0 R (HD.37) 676 0 R (HD.370) 1049 0 R (HD.371) 1050 0 R (HD.372) 1051 0 R (HD.373) 1052 0 R (HD.374) 1053 0 R (HD.375) 1054 0 R (HD.376) 1055 0 R (HD.377) 1056 0 R (HD.378) 1057 0 R ] /Limits [ (HD.35) (HD.378) ] >>
+<< /Names [ (HD.2496) 3412 0 R (HD.2497) 3413 0 R (HD.2498) 3414 0 R (HD.2499) 3415 0 R (HD.25) 666 0 R (HD.250) 919 0 R (HD.2500) 3416 0 R (HD.2501) 3417 0 R (HD.2502) 3418 0 R (HD.2503) 3419 0 R (HD.2504) 3420 0 R (HD.2505) 3421 0 R (HD.2506) 3422 0 R (HD.2507) 3423 0 R (HD.2508) 3424 0 R (HD.2509) 3425 0 R (HD.251) 920 0 R (HD.2510) 3426 0 R (HD.2511) 3427 0 R (HD.2512) 3428 0 R (HD.2513) 3430 0 R (HD.2514) 3436 0 R (HD.2515) 3437 0 R (HD.2516) 3438 0 R (HD.2517) 3439 0 R (HD.2518) 3441 0 R (HD.2519) 3442 0 R (HD.252) 921 0 R (HD.2520) 3443 0 R (HD.2521) 3444 0 R (HD.2522) 3445 0 R (HD.2523) 3446 0 R ] /Limits [ (HD.2496) (HD.2523) ] >>
endobj
4611 0 obj
-<< /Names [ (HD.379) 1058 0 R (HD.38) 677 0 R (HD.380) 1059 0 R (HD.381) 1060 0 R (HD.382) 1061 0 R (HD.383) 1062 0 R (HD.384) 1063 0 R (HD.385) 1064 0 R (HD.386) 1065 0 R (HD.387) 1066 0 R (HD.388) 1067 0 R (HD.389) 1068 0 R (HD.39) 678 0 R (HD.390) 1069 0 R (HD.391) 1070 0 R (HD.392) 1071 0 R (HD.393) 1072 0 R (HD.394) 1073 0 R (HD.395) 1074 0 R (HD.396) 1075 0 R (HD.397) 1076 0 R (HD.398) 1077 0 R (HD.399) 1078 0 R (HD.4) 639 0 R (HD.40) 679 0 R (HD.400) 1079 0 R (HD.401) 1080 0 R (HD.402) 1081 0 R (HD.403) 1082 0 R (HD.404) 1083 0 R (HD.405) 1088 0 R (HD.406) 1089 0 R ] /Limits [ (HD.379) (HD.406) ] >>
+<< /Names [ (HD.2524) 3447 0 R (HD.2525) 3448 0 R (HD.2526) 3449 0 R (HD.2527) 3450 0 R (HD.2528) 3451 0 R (HD.2529) 3452 0 R (HD.253) 922 0 R (HD.2530) 3454 0 R (HD.2531) 3455 0 R (HD.2532) 3456 0 R (HD.2533) 3457 0 R (HD.2534) 3458 0 R (HD.2535) 3459 0 R (HD.2536) 3460 0 R (HD.2537) 3461 0 R (HD.2538) 3462 0 R (HD.2539) 3463 0 R (HD.254) 923 0 R (HD.2540) 3464 0 R (HD.2541) 3465 0 R (HD.2542) 3466 0 R (HD.2543) 3467 0 R (HD.2544) 3468 0 R (HD.2545) 3469 0 R (HD.2546) 3470 0 R (HD.2547) 3471 0 R (HD.2548) 3472 0 R (HD.2549) 3473 0 R (HD.255) 924 0 R (HD.2550) 3474 0 R (HD.2551) 3475 0 R (HD.2552) 3476 0 R ] /Limits [ (HD.2524) (HD.2552) ] >>
endobj
4612 0 obj
-<< /Names [ (HD.407) 1090 0 R (HD.408) 1091 0 R (HD.409) 1092 0 R (HD.41) 680 0 R (HD.410) 1093 0 R (HD.411) 1094 0 R (HD.412) 1095 0 R (HD.413) 1096 0 R (HD.414) 1097 0 R (HD.415) 1098 0 R (HD.416) 1099 0 R (HD.417) 1100 0 R (HD.418) 1101 0 R (HD.419) 1102 0 R (HD.42) 681 0 R (HD.420) 1103 0 R (HD.421) 1104 0 R (HD.422) 1105 0 R (HD.423) 1106 0 R (HD.424) 1107 0 R (HD.425) 1108 0 R (HD.426) 1109 0 R (HD.427) 1110 0 R (HD.428) 1111 0 R (HD.429) 1112 0 R (HD.43) 682 0 R (HD.430) 1113 0 R (HD.431) 1114 0 R (HD.432) 1115 0 R (HD.433) 1116 0 R (HD.434) 1117 0 R (HD.435) 1118 0 R ] /Limits [ (HD.407) (HD.435) ] >>
+<< /Names [ (HD.2553) 3477 0 R (HD.2554) 3478 0 R (HD.2555) 3479 0 R (HD.2556) 3480 0 R (HD.2557) 3481 0 R (HD.2558) 3482 0 R (HD.2559) 3483 0 R (HD.256) 925 0 R (HD.2560) 3484 0 R (HD.2561) 3485 0 R (HD.2562) 3486 0 R (HD.2563) 3487 0 R (HD.2564) 3488 0 R (HD.2565) 3489 0 R (HD.2566) 3495 0 R (HD.2567) 3496 0 R (HD.2568) 3497 0 R (HD.2569) 3498 0 R (HD.257) 926 0 R (HD.2570) 3499 0 R (HD.2571) 3500 0 R (HD.2572) 3501 0 R (HD.2573) 3502 0 R (HD.2574) 3503 0 R (HD.2575) 3504 0 R (HD.2576) 3505 0 R (HD.2577) 3506 0 R (HD.2578) 3507 0 R (HD.2579) 3508 0 R (HD.258) 927 0 R (HD.2580) 3509 0 R (HD.2581) 3510 0 R ] /Limits [ (HD.2553) (HD.2581) ] >>
endobj
4613 0 obj
-<< /Names [ (HD.436) 1119 0 R (HD.437) 1120 0 R (HD.438) 1121 0 R (HD.439) 1122 0 R (HD.44) 683 0 R (HD.440) 1123 0 R (HD.441) 1124 0 R (HD.442) 1125 0 R (HD.443) 1126 0 R (HD.444) 1127 0 R (HD.445) 1128 0 R (HD.446) 1129 0 R (HD.447) 1130 0 R (HD.448) 1131 0 R (HD.449) 1132 0 R (HD.45) 684 0 R (HD.450) 1133 0 R (HD.451) 1134 0 R (HD.452) 1135 0 R (HD.453) 1136 0 R (HD.454) 1137 0 R (HD.455) 1138 0 R (HD.456) 1139 0 R (HD.457) 1140 0 R (HD.458) 1141 0 R (HD.459) 1142 0 R (HD.46) 685 0 R (HD.460) 1143 0 R (HD.461) 1144 0 R (HD.462) 1145 0 R (HD.463) 1146 0 R (HD.464) 1151 0 R ] /Limits [ (HD.436) (HD.464) ] >>
+<< /Names [ (HD.2582) 3511 0 R (HD.2583) 3512 0 R (HD.2584) 3513 0 R (HD.2585) 3514 0 R (HD.2586) 3515 0 R (HD.2587) 3516 0 R (HD.2588) 3517 0 R (HD.2589) 3518 0 R (HD.259) 928 0 R (HD.2590) 3519 0 R (HD.2591) 3520 0 R (HD.2592) 3521 0 R (HD.2593) 3522 0 R (HD.2594) 3523 0 R (HD.2595) 3524 0 R (HD.2596) 3525 0 R (HD.2597) 3526 0 R (HD.2598) 3527 0 R (HD.2599) 3528 0 R (HD.26) 667 0 R (HD.260) 929 0 R (HD.2600) 3529 0 R (HD.2601) 3530 0 R (HD.2602) 3531 0 R (HD.2603) 3532 0 R (HD.2604) 3533 0 R (HD.2605) 3534 0 R (HD.2606) 3535 0 R (HD.2607) 3536 0 R (HD.2608) 3537 0 R (HD.2609) 3538 0 R (HD.261) 930 0 R ] /Limits [ (HD.2582) (HD.261) ] >>
endobj
4614 0 obj
-<< /Names [ (HD.465) 1152 0 R (HD.466) 1153 0 R (HD.467) 1154 0 R (HD.468) 1155 0 R (HD.469) 1156 0 R (HD.47) 686 0 R (HD.470) 1157 0 R (HD.471) 1158 0 R (HD.472) 1159 0 R (HD.473) 1160 0 R (HD.474) 1161 0 R (HD.475) 1162 0 R (HD.476) 1163 0 R (HD.477) 1164 0 R (HD.478) 1165 0 R (HD.479) 1166 0 R (HD.48) 687 0 R (HD.480) 1167 0 R (HD.481) 1168 0 R (HD.482) 1169 0 R (HD.483) 1170 0 R (HD.484) 1171 0 R (HD.485) 1172 0 R (HD.486) 1173 0 R (HD.487) 1174 0 R (HD.488) 1175 0 R (HD.489) 1176 0 R (HD.49) 688 0 R (HD.490) 1177 0 R (HD.491) 1178 0 R (HD.492) 1179 0 R (HD.493) 1180 0 R ] /Limits [ (HD.465) (HD.493) ] >>
+<< /Names [ (HD.2610) 3539 0 R (HD.2611) 3540 0 R (HD.2612) 3541 0 R (HD.2613) 3542 0 R (HD.2614) 3543 0 R (HD.2615) 3550 0 R (HD.2616) 3551 0 R (HD.2617) 3552 0 R (HD.2618) 3553 0 R (HD.2619) 3554 0 R (HD.262) 931 0 R (HD.2620) 3555 0 R (HD.2621) 3556 0 R (HD.2622) 3557 0 R (HD.2623) 3558 0 R (HD.2624) 3559 0 R (HD.2625) 3560 0 R (HD.2626) 3561 0 R (HD.2627) 3562 0 R (HD.2628) 3563 0 R (HD.2629) 3564 0 R (HD.263) 932 0 R (HD.2630) 3565 0 R (HD.2631) 3566 0 R (HD.2632) 3567 0 R (HD.2633) 3568 0 R (HD.2634) 3569 0 R (HD.2635) 3570 0 R (HD.2636) 3571 0 R (HD.2637) 3572 0 R (HD.2638) 3573 0 R (HD.2639) 3574 0 R ] /Limits [ (HD.2610) (HD.2639) ] >>
endobj
4615 0 obj
-<< /Names [ (HD.494) 1181 0 R (HD.495) 1182 0 R (HD.496) 1183 0 R (HD.497) 1184 0 R (HD.498) 1185 0 R (HD.499) 1186 0 R (HD.5) 640 0 R (HD.50) 689 0 R (HD.500) 1187 0 R (HD.501) 1188 0 R (HD.502) 1189 0 R (HD.503) 1190 0 R (HD.504) 1191 0 R (HD.505) 1192 0 R (HD.506) 1193 0 R (HD.507) 1194 0 R (HD.508) 1195 0 R (HD.509) 1196 0 R (HD.51) 690 0 R (HD.510) 1197 0 R (HD.511) 1198 0 R (HD.512) 1199 0 R (HD.513) 1200 0 R (HD.514) 1201 0 R (HD.515) 1202 0 R (HD.516) 1203 0 R (HD.517) 1204 0 R (HD.518) 1205 0 R (HD.519) 1210 0 R (HD.52) 691 0 R (HD.520) 1211 0 R (HD.521) 1212 0 R ] /Limits [ (HD.494) (HD.521) ] >>
+<< /Names [ (HD.264) 933 0 R (HD.2640) 3575 0 R (HD.2641) 3576 0 R (HD.2642) 3577 0 R (HD.2643) 3578 0 R (HD.2644) 3579 0 R (HD.2645) 3580 0 R (HD.2646) 3581 0 R (HD.2647) 3582 0 R (HD.2648) 3583 0 R (HD.2649) 3584 0 R (HD.265) 934 0 R (HD.2650) 3585 0 R (HD.2651) 3586 0 R (HD.2652) 3587 0 R (HD.2653) 3588 0 R (HD.2654) 3589 0 R (HD.2655) 3590 0 R (HD.2656) 3591 0 R (HD.2657) 3592 0 R (HD.2658) 3593 0 R (HD.2659) 3594 0 R (HD.266) 935 0 R (HD.2660) 3595 0 R (HD.2661) 3596 0 R (HD.2662) 3597 0 R (HD.2663) 3598 0 R (HD.2664) 3599 0 R (HD.2665) 3600 0 R (HD.2666) 3601 0 R (HD.2667) 3602 0 R (HD.2668) 3603 0 R ] /Limits [ (HD.264) (HD.2668) ] >>
endobj
4616 0 obj
-<< /Names [ (HD.522) 1213 0 R (HD.523) 1214 0 R (HD.524) 1215 0 R (HD.525) 1216 0 R (HD.526) 1217 0 R (HD.527) 1218 0 R (HD.528) 1219 0 R (HD.529) 1220 0 R (HD.53) 692 0 R (HD.530) 1221 0 R (HD.531) 1222 0 R (HD.532) 1223 0 R (HD.533) 1224 0 R (HD.534) 1225 0 R (HD.535) 1226 0 R (HD.536) 1227 0 R (HD.537) 1228 0 R (HD.538) 1229 0 R (HD.539) 1230 0 R (HD.54) 693 0 R (HD.540) 1231 0 R (HD.541) 1232 0 R (HD.542) 1233 0 R (HD.543) 1234 0 R (HD.544) 1235 0 R (HD.545) 1236 0 R (HD.546) 1237 0 R (HD.547) 1238 0 R (HD.548) 1239 0 R (HD.549) 1240 0 R (HD.55) 694 0 R (HD.550) 1241 0 R ] /Limits [ (HD.522) (HD.550) ] >>
+<< /Names [ (HD.2669) 3604 0 R (HD.267) 936 0 R (HD.2670) 3605 0 R (HD.2671) 3606 0 R (HD.2672) 3607 0 R (HD.2673) 3608 0 R (HD.2674) 3609 0 R (HD.2675) 3610 0 R (HD.2676) 3611 0 R (HD.2677) 3612 0 R (HD.2678) 3617 0 R (HD.2679) 3618 0 R (HD.268) 937 0 R (HD.2680) 3619 0 R (HD.2681) 3620 0 R (HD.2682) 3621 0 R (HD.2683) 3622 0 R (HD.2684) 3623 0 R (HD.2685) 3624 0 R (HD.2686) 3625 0 R (HD.2687) 3626 0 R (HD.2688) 3627 0 R (HD.2689) 3628 0 R (HD.269) 938 0 R (HD.2690) 3629 0 R (HD.2691) 3630 0 R (HD.2692) 3631 0 R (HD.2693) 3632 0 R (HD.2694) 3633 0 R (HD.2695) 3634 0 R (HD.2696) 3635 0 R (HD.2697) 3636 0 R ] /Limits [ (HD.2669) (HD.2697) ] >>
endobj
4617 0 obj
-<< /Names [ (HD.551) 1242 0 R (HD.552) 1243 0 R (HD.553) 1244 0 R (HD.554) 1245 0 R (HD.555) 1246 0 R (HD.556) 1247 0 R (HD.557) 1248 0 R (HD.558) 1249 0 R (HD.559) 1250 0 R (HD.56) 695 0 R (HD.560) 1251 0 R (HD.561) 1252 0 R (HD.562) 1253 0 R (HD.563) 1254 0 R (HD.564) 1255 0 R (HD.565) 1256 0 R (HD.566) 1257 0 R (HD.567) 1258 0 R (HD.568) 1259 0 R (HD.569) 1260 0 R (HD.57) 696 0 R (HD.570) 1261 0 R (HD.571) 1262 0 R (HD.572) 1263 0 R (HD.573) 1264 0 R (HD.574) 1265 0 R (HD.575) 1266 0 R (HD.576) 1267 0 R (HD.577) 1268 0 R (HD.578) 1269 0 R (HD.579) 1270 0 R (HD.58) 697 0 R ] /Limits [ (HD.551) (HD.58) ] >>
+<< /Names [ (HD.2698) 3637 0 R (HD.2699) 3638 0 R (HD.27) 668 0 R (HD.270) 939 0 R (HD.2700) 3639 0 R (HD.2701) 3640 0 R (HD.2702) 3641 0 R (HD.2703) 3642 0 R (HD.2704) 3643 0 R (HD.2705) 3644 0 R (HD.2706) 3645 0 R (HD.2707) 3646 0 R (HD.2708) 3647 0 R (HD.2709) 3648 0 R (HD.271) 940 0 R (HD.2710) 3649 0 R (HD.2711) 3650 0 R (HD.2712) 3651 0 R (HD.2713) 3652 0 R (HD.2714) 3653 0 R (HD.2715) 3654 0 R (HD.2716) 3655 0 R (HD.2717) 3656 0 R (HD.2718) 3657 0 R (HD.2719) 3658 0 R (HD.272) 941 0 R (HD.2720) 3659 0 R (HD.2721) 3660 0 R (HD.2722) 3661 0 R (HD.2723) 3662 0 R (HD.2724) 3663 0 R (HD.2725) 3664 0 R ] /Limits [ (HD.2698) (HD.2725) ] >>
endobj
4618 0 obj
-<< /Names [ (HD.580) 1275 0 R (HD.581) 1276 0 R (HD.582) 1277 0 R (HD.583) 1278 0 R (HD.584) 1279 0 R (HD.585) 1280 0 R (HD.586) 1281 0 R (HD.587) 1282 0 R (HD.588) 1283 0 R (HD.589) 1284 0 R (HD.59) 698 0 R (HD.590) 1285 0 R (HD.591) 1286 0 R (HD.592) 1287 0 R (HD.593) 1288 0 R (HD.594) 1289 0 R (HD.595) 1290 0 R (HD.596) 1291 0 R (HD.597) 1292 0 R (HD.598) 1293 0 R (HD.599) 1294 0 R (HD.6) 641 0 R (HD.60) 699 0 R (HD.600) 1295 0 R (HD.601) 1296 0 R (HD.602) 1297 0 R (HD.603) 1298 0 R (HD.604) 1299 0 R (HD.605) 1300 0 R (HD.606) 1301 0 R (HD.607) 1302 0 R (HD.608) 1303 0 R ] /Limits [ (HD.580) (HD.608) ] >>
+<< /Names [ (HD.2726) 3665 0 R (HD.2727) 3666 0 R (HD.2728) 3667 0 R (HD.2729) 3673 0 R (HD.273) 942 0 R (HD.2730) 3674 0 R (HD.2731) 3675 0 R (HD.2732) 3676 0 R (HD.2733) 3677 0 R (HD.2734) 3678 0 R (HD.2735) 3679 0 R (HD.2736) 3680 0 R (HD.2737) 3681 0 R (HD.2738) 3682 0 R (HD.2739) 3683 0 R (HD.274) 943 0 R (HD.2740) 3684 0 R (HD.2741) 3685 0 R (HD.2742) 3686 0 R (HD.2743) 3687 0 R (HD.2744) 3688 0 R (HD.2745) 3689 0 R (HD.2746) 3690 0 R (HD.2747) 3691 0 R (HD.2748) 3692 0 R (HD.2749) 3693 0 R (HD.275) 944 0 R (HD.2750) 3694 0 R (HD.2751) 3695 0 R (HD.2752) 3696 0 R (HD.2753) 3697 0 R (HD.2754) 3698 0 R ] /Limits [ (HD.2726) (HD.2754) ] >>
endobj
4619 0 obj
-<< /Names [ (HD.609) 1304 0 R (HD.61) 700 0 R (HD.610) 1305 0 R (HD.611) 1306 0 R (HD.612) 1307 0 R (HD.613) 1308 0 R (HD.614) 1309 0 R (HD.615) 1310 0 R (HD.616) 1311 0 R (HD.617) 1312 0 R (HD.618) 1313 0 R (HD.619) 1314 0 R (HD.62) 701 0 R (HD.620) 1315 0 R (HD.621) 1316 0 R (HD.622) 1317 0 R (HD.623) 1318 0 R (HD.624) 1319 0 R (HD.625) 1320 0 R (HD.626) 1321 0 R (HD.627) 1322 0 R (HD.628) 1323 0 R (HD.629) 1324 0 R (HD.63) 702 0 R (HD.630) 1325 0 R (HD.631) 1326 0 R (HD.632) 1327 0 R (HD.633) 1328 0 R (HD.634) 1329 0 R (HD.635) 1330 0 R (HD.636) 1331 0 R (HD.637) 1332 0 R ] /Limits [ (HD.609) (HD.637) ] >>
+<< /Names [ (HD.2755) 3699 0 R (HD.2756) 3700 0 R (HD.2757) 3701 0 R (HD.2758) 3702 0 R (HD.2759) 3703 0 R (HD.276) 945 0 R (HD.2760) 3704 0 R (HD.2761) 3705 0 R (HD.2762) 3706 0 R (HD.2763) 3711 0 R (HD.2764) 3712 0 R (HD.2765) 3713 0 R (HD.2766) 3714 0 R (HD.2767) 3715 0 R (HD.2768) 3716 0 R (HD.2769) 3717 0 R (HD.277) 946 0 R (HD.2770) 3718 0 R (HD.2771) 3719 0 R (HD.2772) 3720 0 R (HD.2773) 3721 0 R (HD.2774) 3722 0 R (HD.2775) 3723 0 R (HD.2776) 3724 0 R (HD.2777) 3725 0 R (HD.2778) 3726 0 R (HD.2779) 3727 0 R (HD.278) 947 0 R (HD.2780) 3728 0 R (HD.2781) 3729 0 R (HD.2782) 3730 0 R (HD.2783) 3731 0 R ] /Limits [ (HD.2755) (HD.2783) ] >>
endobj
4620 0 obj
-<< /Names [ (HD.638) 1333 0 R (HD.639) 1334 0 R (HD.64) 703 0 R (HD.640) 1335 0 R (HD.641) 1336 0 R (HD.642) 1337 0 R (HD.643) 1342 0 R (HD.644) 1343 0 R (HD.645) 1344 0 R (HD.646) 1345 0 R (HD.647) 1346 0 R (HD.648) 1347 0 R (HD.649) 1348 0 R (HD.65) 704 0 R (HD.650) 1349 0 R (HD.651) 1350 0 R (HD.652) 1351 0 R (HD.653) 1352 0 R (HD.654) 1353 0 R (HD.655) 1354 0 R (HD.656) 1355 0 R (HD.657) 1356 0 R (HD.658) 1357 0 R (HD.659) 1358 0 R (HD.66) 705 0 R (HD.660) 1359 0 R (HD.661) 1360 0 R (HD.662) 1361 0 R (HD.663) 1362 0 R (HD.664) 1363 0 R (HD.665) 1364 0 R (HD.666) 1365 0 R ] /Limits [ (HD.638) (HD.666) ] >>
+<< /Names [ (HD.2784) 3732 0 R (HD.2785) 3733 0 R (HD.2786) 3734 0 R (HD.2787) 3735 0 R (HD.2788) 3736 0 R (HD.2789) 3737 0 R (HD.279) 948 0 R (HD.2790) 3738 0 R (HD.2791) 3739 0 R (HD.2792) 3740 0 R (HD.2793) 3741 0 R (HD.2794) 3742 0 R (HD.2795) 3743 0 R (HD.2796) 3744 0 R (HD.2797) 3745 0 R (HD.2798) 3746 0 R (HD.2799) 3747 0 R (HD.28) 669 0 R (HD.280) 949 0 R (HD.2800) 3748 0 R (HD.2801) 3749 0 R (HD.2802) 3750 0 R (HD.2803) 3751 0 R (HD.2804) 3752 0 R (HD.2805) 3753 0 R (HD.2806) 3754 0 R (HD.2807) 3755 0 R (HD.2808) 3756 0 R (HD.2809) 3757 0 R (HD.281) 954 0 R (HD.2810) 3762 0 R (HD.2811) 3763 0 R ] /Limits [ (HD.2784) (HD.2811) ] >>
endobj
4621 0 obj
-<< /Names [ (HD.667) 1366 0 R (HD.668) 1367 0 R (HD.669) 1368 0 R (HD.67) 706 0 R (HD.670) 1369 0 R (HD.671) 1370 0 R (HD.672) 1371 0 R (HD.673) 1372 0 R (HD.674) 1373 0 R (HD.675) 1374 0 R (HD.676) 1375 0 R (HD.677) 1376 0 R (HD.678) 1377 0 R (HD.679) 1378 0 R (HD.68) 707 0 R (HD.680) 1379 0 R (HD.681) 1380 0 R (HD.682) 1381 0 R (HD.683) 1382 0 R (HD.684) 1383 0 R (HD.685) 1384 0 R (HD.686) 1385 0 R (HD.687) 1390 0 R (HD.688) 1391 0 R (HD.689) 1392 0 R (HD.69) 708 0 R (HD.690) 1393 0 R (HD.691) 1394 0 R (HD.692) 1395 0 R (HD.693) 1396 0 R (HD.694) 1397 0 R (HD.695) 1398 0 R ] /Limits [ (HD.667) (HD.695) ] >>
+<< /Names [ (HD.2812) 3764 0 R (HD.2813) 3765 0 R (HD.2814) 3766 0 R (HD.2815) 3767 0 R (HD.2816) 3768 0 R (HD.2817) 3769 0 R (HD.2818) 3770 0 R (HD.2819) 3771 0 R (HD.282) 955 0 R (HD.2820) 3772 0 R (HD.2821) 3773 0 R (HD.2822) 3774 0 R (HD.2823) 3775 0 R (HD.2824) 3776 0 R (HD.2825) 3777 0 R (HD.2826) 3778 0 R (HD.2827) 3779 0 R (HD.2828) 3780 0 R (HD.2829) 3781 0 R (HD.283) 956 0 R (HD.2830) 3782 0 R (HD.2831) 3783 0 R (HD.2832) 3784 0 R (HD.2833) 3785 0 R (HD.2834) 3786 0 R (HD.2835) 3787 0 R (HD.2836) 3788 0 R (HD.2837) 3789 0 R (HD.2838) 3790 0 R (HD.2839) 3791 0 R (HD.284) 957 0 R (HD.2840) 3792 0 R ] /Limits [ (HD.2812) (HD.2840) ] >>
endobj
4622 0 obj
-<< /Names [ (HD.696) 1399 0 R (HD.697) 1400 0 R (HD.698) 1401 0 R (HD.699) 1402 0 R (HD.7) 642 0 R (HD.70) 709 0 R (HD.700) 1403 0 R (HD.701) 1404 0 R (HD.702) 1405 0 R (HD.703) 1406 0 R (HD.704) 1407 0 R (HD.705) 1408 0 R (HD.706) 1409 0 R (HD.707) 1410 0 R (HD.708) 1411 0 R (HD.709) 1412 0 R (HD.71) 710 0 R (HD.710) 1413 0 R (HD.711) 1414 0 R (HD.712) 1415 0 R (HD.713) 1416 0 R (HD.714) 1417 0 R (HD.715) 1418 0 R (HD.716) 1419 0 R (HD.717) 1420 0 R (HD.718) 1421 0 R (HD.719) 1422 0 R (HD.72) 711 0 R (HD.720) 1423 0 R (HD.721) 1424 0 R (HD.722) 1425 0 R (HD.723) 1426 0 R ] /Limits [ (HD.696) (HD.723) ] >>
+<< /Names [ (HD.2841) 3793 0 R (HD.2842) 3794 0 R (HD.2843) 3795 0 R (HD.2844) 3796 0 R (HD.2845) 3797 0 R (HD.2846) 3798 0 R (HD.2847) 3799 0 R (HD.2848) 3800 0 R (HD.2849) 3801 0 R (HD.285) 958 0 R (HD.2850) 3802 0 R (HD.2851) 3807 0 R (HD.2852) 3808 0 R (HD.2853) 3809 0 R (HD.2854) 3810 0 R (HD.2855) 3811 0 R (HD.2856) 3812 0 R (HD.2857) 3813 0 R (HD.2858) 3814 0 R (HD.2859) 3815 0 R (HD.286) 959 0 R (HD.2860) 3816 0 R (HD.2861) 3817 0 R (HD.2862) 3818 0 R (HD.2863) 3819 0 R (HD.2864) 3820 0 R (HD.2865) 3821 0 R (HD.2866) 3822 0 R (HD.2867) 3823 0 R (HD.2868) 3824 0 R (HD.2869) 3825 0 R (HD.287) 960 0 R ] /Limits [ (HD.2841) (HD.287) ] >>
endobj
4623 0 obj
-<< /Names [ (HD.724) 1427 0 R (HD.725) 1428 0 R (HD.726) 1429 0 R (HD.727) 1430 0 R (HD.728) 1435 0 R (HD.729) 1436 0 R (HD.73) 712 0 R (HD.730) 1437 0 R (HD.731) 1438 0 R (HD.732) 1439 0 R (HD.733) 1440 0 R (HD.734) 1441 0 R (HD.735) 1442 0 R (HD.736) 1443 0 R (HD.737) 1444 0 R (HD.738) 1445 0 R (HD.739) 1446 0 R (HD.74) 713 0 R (HD.740) 1447 0 R (HD.741) 1448 0 R (HD.742) 1449 0 R (HD.743) 1450 0 R (HD.744) 1451 0 R (HD.745) 1452 0 R (HD.746) 1453 0 R (HD.747) 1454 0 R (HD.748) 1455 0 R (HD.749) 1456 0 R (HD.75) 714 0 R (HD.750) 1457 0 R (HD.751) 1458 0 R (HD.752) 1459 0 R ] /Limits [ (HD.724) (HD.752) ] >>
+<< /Names [ (HD.2870) 3826 0 R (HD.2871) 3827 0 R (HD.2872) 3828 0 R (HD.2873) 3829 0 R (HD.2874) 3830 0 R (HD.2875) 3831 0 R (HD.2876) 3832 0 R (HD.2877) 3833 0 R (HD.2878) 3834 0 R (HD.2879) 3835 0 R (HD.288) 961 0 R (HD.2880) 3836 0 R (HD.2881) 3837 0 R (HD.2882) 3838 0 R (HD.2883) 3839 0 R (HD.2884) 3840 0 R (HD.2885) 3841 0 R (HD.2886) 3842 0 R (HD.2887) 3843 0 R (HD.2888) 3844 0 R (HD.2889) 3845 0 R (HD.289) 962 0 R (HD.2890) 3846 0 R (HD.2891) 3847 0 R (HD.2892) 3848 0 R (HD.2893) 3849 0 R (HD.2894) 3850 0 R (HD.2895) 3851 0 R (HD.2896) 3852 0 R (HD.2897) 3853 0 R (HD.2898) 3854 0 R (HD.2899) 3859 0 R ] /Limits [ (HD.2870) (HD.2899) ] >>
endobj
4624 0 obj
-<< /Names [ (HD.753) 1460 0 R (HD.754) 1461 0 R (HD.755) 1462 0 R (HD.756) 1463 0 R (HD.757) 1464 0 R (HD.758) 1465 0 R (HD.759) 1466 0 R (HD.76) 715 0 R (HD.760) 1467 0 R (HD.761) 1468 0 R (HD.762) 1469 0 R (HD.763) 1470 0 R (HD.764) 1471 0 R (HD.765) 1472 0 R (HD.766) 1477 0 R (HD.767) 1478 0 R (HD.768) 1479 0 R (HD.769) 1480 0 R (HD.77) 716 0 R (HD.770) 1481 0 R (HD.771) 1482 0 R (HD.772) 1483 0 R (HD.773) 1484 0 R (HD.774) 1485 0 R (HD.775) 1486 0 R (HD.776) 1487 0 R (HD.777) 1488 0 R (HD.778) 1489 0 R (HD.779) 1490 0 R (HD.78) 717 0 R (HD.780) 1491 0 R (HD.781) 1492 0 R ] /Limits [ (HD.753) (HD.781) ] >>
+<< /Names [ (HD.29) 670 0 R (HD.290) 963 0 R (HD.2900) 3860 0 R (HD.2901) 3861 0 R (HD.2902) 3862 0 R (HD.2903) 3863 0 R (HD.2904) 3864 0 R (HD.2905) 3865 0 R (HD.2906) 3866 0 R (HD.2907) 3867 0 R (HD.2908) 3868 0 R (HD.2909) 3869 0 R (HD.291) 964 0 R (HD.2910) 3870 0 R (HD.2911) 3871 0 R (HD.2912) 3872 0 R (HD.2913) 3873 0 R (HD.2914) 3874 0 R (HD.2915) 3875 0 R (HD.2916) 3876 0 R (HD.2917) 3877 0 R (HD.2918) 3878 0 R (HD.2919) 3879 0 R (HD.292) 965 0 R (HD.2920) 3880 0 R (HD.2921) 3881 0 R (HD.2922) 3882 0 R (HD.2923) 3883 0 R (HD.2924) 3884 0 R (HD.2925) 3885 0 R (HD.2926) 3886 0 R (HD.2927) 3887 0 R ] /Limits [ (HD.29) (HD.2927) ] >>
endobj
4625 0 obj
-<< /Names [ (HD.782) 1493 0 R (HD.783) 1494 0 R (HD.784) 1495 0 R (HD.785) 1496 0 R (HD.786) 1497 0 R (HD.787) 1498 0 R (HD.788) 1499 0 R (HD.789) 1500 0 R (HD.79) 718 0 R (HD.790) 1501 0 R (HD.791) 1502 0 R (HD.792) 1503 0 R (HD.793) 1504 0 R (HD.794) 1505 0 R (HD.795) 1506 0 R (HD.796) 1507 0 R (HD.797) 1508 0 R (HD.798) 1509 0 R (HD.799) 1510 0 R (HD.8) 643 0 R (HD.80) 719 0 R (HD.800) 1511 0 R (HD.801) 1512 0 R (HD.802) 1513 0 R (HD.803) 1514 0 R (HD.804) 1515 0 R (HD.805) 1516 0 R (HD.806) 1517 0 R (HD.807) 1518 0 R (HD.808) 1519 0 R (HD.809) 1520 0 R (HD.81) 720 0 R ] /Limits [ (HD.782) (HD.81) ] >>
+<< /Names [ (HD.2928) 3888 0 R (HD.2929) 3889 0 R (HD.293) 966 0 R (HD.2930) 3890 0 R (HD.2931) 3891 0 R (HD.2932) 3892 0 R (HD.2933) 3893 0 R (HD.2934) 3894 0 R (HD.2935) 3895 0 R (HD.2936) 3896 0 R (HD.2937) 3897 0 R (HD.2938) 3902 0 R (HD.2939) 3903 0 R (HD.294) 967 0 R (HD.2940) 3904 0 R (HD.2941) 3905 0 R (HD.2942) 3906 0 R (HD.2943) 3907 0 R (HD.2944) 3908 0 R (HD.2945) 3909 0 R (HD.2946) 3910 0 R (HD.2947) 3911 0 R (HD.2948) 3912 0 R (HD.2949) 3913 0 R (HD.295) 968 0 R (HD.2950) 3914 0 R (HD.2951) 3915 0 R (HD.2952) 3916 0 R (HD.2953) 3917 0 R (HD.2954) 3918 0 R (HD.2955) 3919 0 R (HD.2956) 3920 0 R ] /Limits [ (HD.2928) (HD.2956) ] >>
endobj
4626 0 obj
-<< /Names [ (HD.810) 1521 0 R (HD.811) 1522 0 R (HD.812) 1523 0 R (HD.813) 1524 0 R (HD.814) 1525 0 R (HD.815) 1526 0 R (HD.816) 1527 0 R (HD.817) 1528 0 R (HD.818) 1529 0 R (HD.819) 1530 0 R (HD.82) 721 0 R (HD.820) 1535 0 R (HD.821) 1536 0 R (HD.822) 1537 0 R (HD.823) 1538 0 R (HD.824) 1539 0 R (HD.825) 1540 0 R (HD.826) 1541 0 R (HD.827) 1542 0 R (HD.828) 1543 0 R (HD.829) 1544 0 R (HD.83) 722 0 R (HD.830) 1545 0 R (HD.831) 1546 0 R (HD.832) 1547 0 R (HD.833) 1548 0 R (HD.834) 1549 0 R (HD.835) 1550 0 R (HD.836) 1551 0 R (HD.837) 1552 0 R (HD.838) 1553 0 R (HD.839) 1554 0 R ] /Limits [ (HD.810) (HD.839) ] >>
+<< /Names [ (HD.2957) 3921 0 R (HD.2958) 3922 0 R (HD.2959) 3923 0 R (HD.296) 969 0 R (HD.2960) 3924 0 R (HD.2961) 3925 0 R (HD.2962) 3926 0 R (HD.2963) 3927 0 R (HD.2964) 3928 0 R (HD.2965) 3929 0 R (HD.2966) 3930 0 R (HD.2967) 3931 0 R (HD.2968) 3932 0 R (HD.2969) 3933 0 R (HD.297) 970 0 R (HD.2970) 3934 0 R (HD.2971) 3935 0 R (HD.2972) 3936 0 R (HD.2973) 3937 0 R (HD.2974) 3938 0 R (HD.2975) 3939 0 R (HD.2976) 3940 0 R (HD.2977) 3941 0 R (HD.2978) 3942 0 R (HD.2979) 3943 0 R (HD.298) 971 0 R (HD.2980) 3944 0 R (HD.2981) 3945 0 R (HD.2982) 3946 0 R (HD.2983) 3947 0 R (HD.2984) 3948 0 R (HD.2985) 3949 0 R ] /Limits [ (HD.2957) (HD.2985) ] >>
endobj
4627 0 obj
-<< /Names [ (HD.84) 727 0 R (HD.840) 1555 0 R (HD.841) 1556 0 R (HD.842) 1557 0 R (HD.843) 1558 0 R (HD.844) 1559 0 R (HD.845) 1560 0 R (HD.846) 1561 0 R (HD.847) 1562 0 R (HD.848) 1563 0 R (HD.849) 1564 0 R (HD.85) 728 0 R (HD.850) 1565 0 R (HD.851) 1566 0 R (HD.852) 1567 0 R (HD.853) 1568 0 R (HD.854) 1569 0 R (HD.855) 1570 0 R (HD.856) 1571 0 R (HD.857) 1572 0 R (HD.858) 1573 0 R (HD.859) 1574 0 R (HD.86) 729 0 R (HD.860) 1575 0 R (HD.861) 1576 0 R (HD.862) 1577 0 R (HD.863) 1578 0 R (HD.864) 1579 0 R (HD.865) 1580 0 R (HD.866) 1581 0 R (HD.867) 1582 0 R (HD.868) 1583 0 R ] /Limits [ (HD.84) (HD.868) ] >>
+<< /Names [ (HD.2986) 3950 0 R (HD.2987) 3951 0 R (HD.2988) 3952 0 R (HD.2989) 3953 0 R (HD.299) 972 0 R (HD.2990) 3958 0 R (HD.2991) 3959 0 R (HD.2992) 3960 0 R (HD.2993) 3961 0 R (HD.2994) 3962 0 R (HD.2995) 3963 0 R (HD.2996) 3964 0 R (HD.2997) 3965 0 R (HD.2998) 3966 0 R (HD.2999) 3967 0 R (HD.3) 644 0 R (HD.30) 671 0 R (HD.300) 973 0 R (HD.3000) 3968 0 R (HD.3001) 3969 0 R (HD.3002) 3970 0 R (HD.3003) 3971 0 R (HD.3004) 3972 0 R (HD.3005) 3973 0 R (HD.3006) 3974 0 R (HD.3007) 3975 0 R (HD.3008) 3976 0 R (HD.3009) 3977 0 R (HD.301) 974 0 R (HD.3010) 3978 0 R (HD.3011) 3979 0 R (HD.3012) 3980 0 R ] /Limits [ (HD.2986) (HD.3012) ] >>
endobj
4628 0 obj
-<< /Names [ (HD.869) 1584 0 R (HD.87) 730 0 R (HD.870) 1585 0 R (HD.871) 1586 0 R (HD.872) 1587 0 R (HD.873) 1588 0 R (HD.874) 1589 0 R (HD.875) 1596 0 R (HD.876) 1597 0 R (HD.877) 1598 0 R (HD.878) 1599 0 R (HD.879) 1600 0 R (HD.88) 731 0 R (HD.880) 1601 0 R (HD.881) 1602 0 R (HD.882) 1603 0 R (HD.883) 1604 0 R (HD.884) 1605 0 R (HD.885) 1606 0 R (HD.886) 1607 0 R (HD.887) 1608 0 R (HD.888) 1609 0 R (HD.889) 1610 0 R (HD.89) 732 0 R (HD.890) 1611 0 R (HD.891) 1612 0 R (HD.892) 1613 0 R (HD.893) 1614 0 R (HD.894) 1615 0 R (HD.895) 1616 0 R (HD.896) 1617 0 R (HD.897) 1618 0 R ] /Limits [ (HD.869) (HD.897) ] >>
+<< /Names [ (HD.3013) 3981 0 R (HD.3014) 3982 0 R (HD.3015) 3983 0 R (HD.3016) 3984 0 R (HD.3017) 3985 0 R (HD.3018) 3986 0 R (HD.3019) 3987 0 R (HD.302) 975 0 R (HD.3020) 3988 0 R (HD.3021) 3989 0 R (HD.3022) 3990 0 R (HD.3023) 3991 0 R (HD.3024) 3992 0 R (HD.3025) 3993 0 R (HD.3026) 3994 0 R (HD.3027) 3995 0 R (HD.3028) 3996 0 R (HD.3029) 3997 0 R (HD.303) 976 0 R (HD.3030) 3998 0 R (HD.3031) 3999 0 R (HD.3032) 4000 0 R (HD.3033) 4001 0 R (HD.3034) 4002 0 R (HD.3035) 4003 0 R (HD.3036) 4008 0 R (HD.3037) 4009 0 R (HD.3038) 4010 0 R (HD.3039) 4011 0 R (HD.304) 977 0 R (HD.3040) 4012 0 R (HD.3041) 4013 0 R ] /Limits [ (HD.3013) (HD.3041) ] >>
endobj
4629 0 obj
-<< /Names [ (HD.898) 1619 0 R (HD.899) 1620 0 R (HD.9) 644 0 R (HD.90) 733 0 R (HD.900) 1621 0 R (HD.901) 1622 0 R (HD.902) 1623 0 R (HD.903) 1624 0 R (HD.904) 1625 0 R (HD.905) 1626 0 R (HD.906) 1627 0 R (HD.907) 1628 0 R (HD.908) 1629 0 R (HD.909) 1630 0 R (HD.91) 734 0 R (HD.910) 1631 0 R (HD.911) 1632 0 R (HD.912) 1633 0 R (HD.913) 1634 0 R (HD.914) 1635 0 R (HD.915) 1636 0 R (HD.916) 1637 0 R (HD.917) 1642 0 R (HD.918) 1643 0 R (HD.919) 1644 0 R (HD.92) 735 0 R (HD.920) 1645 0 R (HD.921) 1646 0 R (HD.922) 1647 0 R (HD.923) 1648 0 R (HD.924) 1649 0 R (HD.925) 1650 0 R ] /Limits [ (HD.898) (HD.925) ] >>
+<< /Names [ (HD.3042) 4014 0 R (HD.3043) 4015 0 R (HD.3044) 4016 0 R (HD.3045) 4017 0 R (HD.3046) 4018 0 R (HD.3047) 4019 0 R (HD.3048) 4020 0 R (HD.3049) 4021 0 R (HD.305) 978 0 R (HD.3050) 4022 0 R (HD.3051) 4023 0 R (HD.3052) 4024 0 R (HD.3053) 4025 0 R (HD.3054) 4026 0 R (HD.3055) 4027 0 R (HD.3056) 4028 0 R (HD.3057) 4029 0 R (HD.3058) 4030 0 R (HD.3059) 4031 0 R (HD.306) 979 0 R (HD.3060) 4032 0 R (HD.3061) 4033 0 R (HD.3062) 4034 0 R (HD.3063) 4035 0 R (HD.3064) 4036 0 R (HD.3065) 4037 0 R (HD.3066) 4038 0 R (HD.3067) 4039 0 R (HD.3068) 4040 0 R (HD.3069) 4041 0 R (HD.307) 980 0 R (HD.3070) 4042 0 R ] /Limits [ (HD.3042) (HD.3070) ] >>
endobj
4630 0 obj
-<< /Names [ (HD.926) 1651 0 R (HD.927) 1652 0 R (HD.928) 1653 0 R (HD.929) 1654 0 R (HD.93) 736 0 R (HD.930) 1655 0 R (HD.931) 1656 0 R (HD.932) 1657 0 R (HD.933) 1658 0 R (HD.934) 1659 0 R (HD.935) 1660 0 R (HD.936) 1661 0 R (HD.937) 1662 0 R (HD.938) 1663 0 R (HD.939) 1664 0 R (HD.94) 737 0 R (HD.940) 1665 0 R (HD.941) 1666 0 R (HD.942) 1667 0 R (HD.943) 1668 0 R (HD.944) 1669 0 R (HD.945) 1670 0 R (HD.946) 1671 0 R (HD.947) 1672 0 R (HD.948) 1673 0 R (HD.949) 1674 0 R (HD.95) 738 0 R (HD.950) 1675 0 R (HD.951) 1676 0 R (HD.952) 1677 0 R (HD.953) 1678 0 R (HD.954) 1679 0 R ] /Limits [ (HD.926) (HD.954) ] >>
+<< /Names [ (HD.3071) 4043 0 R (HD.3072) 4044 0 R (HD.3073) 4045 0 R (HD.3074) 4046 0 R (HD.3075) 4047 0 R (HD.3076) 4048 0 R (HD.3077) 4049 0 R (HD.3078) 4050 0 R (HD.3079) 4051 0 R (HD.308) 981 0 R (HD.3080) 4052 0 R (HD.3081) 4053 0 R (HD.3082) 4054 0 R (HD.3083) 4055 0 R (HD.3084) 4056 0 R (HD.3085) 4057 0 R (HD.3086) 4062 0 R (HD.3087) 4063 0 R (HD.3088) 4064 0 R (HD.3089) 4065 0 R (HD.309) 982 0 R (HD.3090) 4066 0 R (HD.3091) 4067 0 R (HD.3092) 4068 0 R (HD.3093) 4069 0 R (HD.3094) 4070 0 R (HD.3095) 4071 0 R (HD.3096) 4072 0 R (HD.3097) 4073 0 R (HD.3098) 4074 0 R (HD.3099) 4075 0 R (HD.31) 672 0 R ] /Limits [ (HD.3071) (HD.31) ] >>
endobj
4631 0 obj
-<< /Names [ (HD.955) 1680 0 R (HD.956) 1681 0 R (HD.957) 1682 0 R (HD.958) 1683 0 R (HD.959) 1690 0 R (HD.96) 739 0 R (HD.960) 1691 0 R (HD.961) 1692 0 R (HD.962) 1693 0 R (HD.963) 1694 0 R (HD.964) 1695 0 R (HD.965) 1696 0 R (HD.966) 1697 0 R (HD.967) 1698 0 R (HD.968) 1699 0 R (HD.969) 1700 0 R (HD.97) 740 0 R (HD.970) 1701 0 R (HD.971) 1702 0 R (HD.972) 1703 0 R (HD.973) 1704 0 R (HD.974) 1705 0 R (HD.975) 1706 0 R (HD.976) 1707 0 R (HD.977) 1708 0 R (HD.978) 1709 0 R (HD.979) 1710 0 R (HD.98) 741 0 R (HD.980) 1711 0 R (HD.981) 1712 0 R (HD.982) 1713 0 R (HD.983) 1714 0 R ] /Limits [ (HD.955) (HD.983) ] >>
+<< /Names [ (HD.310) 983 0 R (HD.3100) 4076 0 R (HD.3101) 4077 0 R (HD.3102) 4078 0 R (HD.3103) 4079 0 R (HD.3104) 4080 0 R (HD.3105) 4081 0 R (HD.3106) 4082 0 R (HD.3107) 4083 0 R (HD.3108) 4084 0 R (HD.3109) 4085 0 R (HD.311) 984 0 R (HD.3110) 4086 0 R (HD.3111) 4087 0 R (HD.3112) 4088 0 R (HD.3113) 4089 0 R (HD.3114) 4090 0 R (HD.3115) 4091 0 R (HD.3116) 4092 0 R (HD.3117) 4093 0 R (HD.3118) 4094 0 R (HD.3119) 4095 0 R (HD.312) 985 0 R (HD.3120) 4096 0 R (HD.3121) 4097 0 R (HD.3122) 4098 0 R (HD.3123) 4099 0 R (HD.3124) 4100 0 R (HD.3125) 4101 0 R (HD.3126) 4102 0 R (HD.3127) 4103 0 R (HD.3128) 4104 0 R ] /Limits [ (HD.310) (HD.3128) ] >>
endobj
4632 0 obj
-<< /Names [ (HD.984) 1715 0 R (HD.985) 1716 0 R (HD.986) 1717 0 R (HD.987) 1718 0 R (HD.988) 1719 0 R (HD.989) 1720 0 R (HD.99) 742 0 R (HD.990) 1721 0 R (HD.991) 1722 0 R (HD.992) 1723 0 R (HD.993) 1724 0 R (HD.994) 1725 0 R (HD.995) 1726 0 R (HD.996) 1727 0 R (HD.997) 1728 0 R (HD.998) 1729 0 R (HD.999) 1730 0 R (Hfootnote.1) 348 0 R (Hfootnote.10) 415 0 R (Hfootnote.11) 416 0 R (Hfootnote.12) 417 0 R (Hfootnote.13) 426 0 R (Hfootnote.14) 427 0 R (Hfootnote.15) 438 0 R (Hfootnote.16) 439 0 R (Hfootnote.17) 450 0 R (Hfootnote.18) 451 0 R (Hfootnote.19) 463 0 R (Hfootnote.2) 352 0 R (Hfootnote.20) 470 0 R (Hfootnote.21) 471 0 R (Hfootnote.22) 489 0 R ] /Limits [ (HD.984) (Hfootnote.22) ] >>
+<< /Names [ (HD.3129) 4105 0 R (HD.313) 986 0 R (HD.3130) 4106 0 R (HD.3131) 4107 0 R (HD.3132) 4108 0 R (HD.3133) 4109 0 R (HD.3134) 4110 0 R (HD.3135) 4111 0 R (HD.3136) 4112 0 R (HD.3137) 4113 0 R (HD.3138) 4114 0 R (HD.3139) 4115 0 R (HD.314) 987 0 R (HD.3140) 4116 0 R (HD.3141) 4117 0 R (HD.3142) 4118 0 R (HD.3143) 4119 0 R (HD.3144) 4120 0 R (HD.3145) 4121 0 R (HD.3146) 4122 0 R (HD.3147) 4123 0 R (HD.3148) 4128 0 R (HD.3149) 4129 0 R (HD.315) 988 0 R (HD.3150) 4130 0 R (HD.3151) 4131 0 R (HD.3152) 4132 0 R (HD.3153) 4133 0 R (HD.3154) 4134 0 R (HD.3155) 4135 0 R (HD.3156) 4136 0 R (HD.3157) 4137 0 R ] /Limits [ (HD.3129) (HD.3157) ] >>
endobj
4633 0 obj
-<< /Names [ (Hfootnote.23) 500 0 R (Hfootnote.24) 520 0 R (Hfootnote.25) 521 0 R (Hfootnote.26) 522 0 R (Hfootnote.27) 523 0 R (Hfootnote.28) 554 0 R (Hfootnote.29) 555 0 R (Hfootnote.3) 368 0 R (Hfootnote.30) 568 0 R (Hfootnote.31) 569 0 R (Hfootnote.32) 570 0 R (Hfootnote.33) 588 0 R (Hfootnote.34) 626 0 R (Hfootnote.35) 623 0 R (Hfootnote.36) 624 0 R (Hfootnote.37) 625 0 R (Hfootnote.38) 1684 0 R (Hfootnote.39) 2577 0 R (Hfootnote.4) 378 0 R (Hfootnote.40) 2710 0 R (Hfootnote.41) 2711 0 R (Hfootnote.42) 2920 0 R (Hfootnote.43) 3247 0 R (Hfootnote.44) 3338 0 R (Hfootnote.45) 3506 0 R (Hfootnote.5) 379 0 R (Hfootnote.6) 393 0 R (Hfootnote.7) 394 0 R (Hfootnote.8) 395 0 R (Hfootnote.9) 396 0 R (page.1) 323 0 R (page.10) 462 0 R ] /Limits [ (Hfootnote.23) (page.10) ] >>
+<< /Names [ (HD.3158) 4138 0 R (HD.3159) 4139 0 R (HD.316) 989 0 R (HD.3160) 4140 0 R (HD.3161) 4141 0 R (HD.3162) 4142 0 R (HD.3163) 4143 0 R (HD.3164) 4144 0 R (HD.3165) 4145 0 R (HD.3166) 4146 0 R (HD.3167) 4147 0 R (HD.3168) 4148 0 R (HD.3169) 4149 0 R (HD.317) 990 0 R (HD.3170) 4150 0 R (HD.3171) 4151 0 R (HD.3172) 4152 0 R (HD.3173) 4153 0 R (HD.3174) 4154 0 R (HD.3175) 4155 0 R (HD.3176) 4156 0 R (HD.3177) 4157 0 R (HD.3178) 4158 0 R (HD.3179) 4159 0 R (HD.318) 991 0 R (HD.3180) 4160 0 R (HD.3181) 4161 0 R (HD.3182) 4162 0 R (HD.3183) 4163 0 R (HD.3184) 4164 0 R (HD.3185) 4165 0 R (HD.3186) 4166 0 R ] /Limits [ (HD.3158) (HD.3186) ] >>
endobj
4634 0 obj
-<< /Names [ (page.100) 4024 0 R (page.101) 4090 0 R (page.102) 4147 0 R (page.103) 4199 0 R (page.104) 4229 0 R (page.105) 4296 0 R (page.106) 4307 0 R (page.11) 469 0 R (page.12) 477 0 R (page.13) 482 0 R (page.14) 488 0 R (page.15) 499 0 R (page.16) 505 0 R (page.17) 509 0 R (page.18) 517 0 R (page.19) 528 0 R (page.2) 365 0 R (page.20) 539 0 R (page.21) 544 0 R (page.22) 553 0 R (page.23) 566 0 R (page.24) 577 0 R (page.25) 587 0 R (page.26) 593 0 R (page.27) 597 0 R (page.28) 601 0 R (page.29) 607 0 R (page.3) 376 0 R (page.30) 613 0 R (page.31) 622 0 R (page.32) 632 0 R (page.33) 675 0 R ] /Limits [ (page.100) (page.33) ] >>
+<< /Names [ (HD.3187) 4167 0 R (HD.3188) 4168 0 R (HD.3189) 4169 0 R (HD.319) 992 0 R (HD.3190) 4170 0 R (HD.3191) 4171 0 R (HD.3192) 4172 0 R (HD.3193) 4173 0 R (HD.3194) 4174 0 R (HD.3195) 4175 0 R (HD.3196) 4176 0 R (HD.3197) 4177 0 R (HD.3198) 4178 0 R (HD.3199) 4179 0 R (HD.32) 673 0 R (HD.320) 993 0 R (HD.3200) 4180 0 R (HD.3201) 4181 0 R (HD.3202) 4187 0 R (HD.3203) 4188 0 R (HD.3204) 4189 0 R (HD.3205) 4190 0 R (HD.3206) 4191 0 R (HD.3207) 4192 0 R (HD.3208) 4193 0 R (HD.3209) 4194 0 R (HD.321) 994 0 R (HD.3210) 4195 0 R (HD.3211) 4196 0 R (HD.3212) 4197 0 R (HD.3213) 4198 0 R (HD.3214) 4199 0 R ] /Limits [ (HD.3187) (HD.3214) ] >>
endobj
4635 0 obj
-<< /Names [ (page.34) 726 0 R (page.35) 781 0 R (page.36) 809 0 R (page.37) 834 0 R (page.38) 855 0 R (page.39) 897 0 R (page.4) 391 0 R (page.40) 933 0 R (page.41) 993 0 R (page.42) 1031 0 R (page.43) 1087 0 R (page.44) 1150 0 R (page.45) 1209 0 R (page.46) 1274 0 R (page.47) 1341 0 R (page.48) 1389 0 R (page.49) 1434 0 R (page.5) 413 0 R (page.50) 1476 0 R (page.51) 1534 0 R (page.52) 1595 0 R (page.53) 1641 0 R (page.54) 1689 0 R (page.55) 1735 0 R (page.56) 1787 0 R (page.57) 1848 0 R (page.58) 1892 0 R (page.59) 1955 0 R (page.6) 424 0 R (page.60) 2010 0 R (page.61) 2058 0 R (page.62) 2103 0 R ] /Limits [ (page.34) (page.62) ] >>
+<< /Names [ (HD.3215) 4200 0 R (HD.3216) 4201 0 R (HD.3217) 4202 0 R (HD.3218) 4203 0 R (HD.3219) 4204 0 R (HD.322) 995 0 R (HD.3220) 4205 0 R (HD.3221) 4206 0 R (HD.3222) 4207 0 R (HD.3223) 4208 0 R (HD.3224) 4209 0 R (HD.3225) 4210 0 R (HD.3226) 4211 0 R (HD.3227) 4212 0 R (HD.3228) 4213 0 R (HD.3229) 4214 0 R (HD.323) 996 0 R (HD.3230) 4215 0 R (HD.3231) 4216 0 R (HD.3232) 4217 0 R (HD.3233) 4218 0 R (HD.3234) 4219 0 R (HD.3235) 4220 0 R (HD.3236) 4221 0 R (HD.3237) 4222 0 R (HD.3238) 4223 0 R (HD.3239) 4224 0 R (HD.324) 997 0 R (HD.3240) 4225 0 R (HD.3241) 4226 0 R (HD.3242) 4227 0 R (HD.3243) 4228 0 R ] /Limits [ (HD.3215) (HD.3243) ] >>
endobj
4636 0 obj
-<< /Names [ (page.63) 2162 0 R (page.64) 2227 0 R (page.65) 2285 0 R (page.66) 2337 0 R (page.67) 2367 0 R (page.68) 2405 0 R (page.69) 2445 0 R (page.7) 436 0 R (page.70) 2491 0 R (page.71) 2542 0 R (page.72) 2583 0 R (page.73) 2638 0 R (page.74) 2679 0 R (page.75) 2716 0 R (page.76) 2769 0 R (page.77) 2832 0 R (page.78) 2878 0 R (page.79) 2925 0 R (page.8) 447 0 R (page.80) 2981 0 R (page.81) 3036 0 R (page.82) 3080 0 R (page.83) 3139 0 R (page.84) 3199 0 R (page.85) 3252 0 R (page.86) 3290 0 R (page.87) 3343 0 R (page.88) 3395 0 R (page.89) 3455 0 R (page.9) 457 0 R (page.90) 3511 0 R (page.91) 3578 0 R ] /Limits [ (page.63) (page.91) ] >>
+<< /Names [ (HD.3244) 4229 0 R (HD.3245) 4230 0 R (HD.325) 998 0 R (HD.326) 999 0 R (HD.327) 1000 0 R (HD.328) 1001 0 R (HD.329) 1002 0 R (HD.33) 674 0 R (HD.330) 1003 0 R (HD.331) 1004 0 R (HD.332) 1005 0 R (HD.333) 1012 0 R (HD.334) 1013 0 R (HD.335) 1014 0 R (HD.336) 1015 0 R (HD.337) 1016 0 R (HD.338) 1017 0 R (HD.339) 1018 0 R (HD.34) 675 0 R (HD.340) 1019 0 R (HD.341) 1020 0 R (HD.342) 1021 0 R (HD.343) 1022 0 R (HD.344) 1023 0 R (HD.345) 1024 0 R (HD.346) 1025 0 R (HD.347) 1026 0 R (HD.348) 1027 0 R (HD.349) 1028 0 R (HD.35) 676 0 R (HD.350) 1029 0 R (HD.351) 1030 0 R ] /Limits [ (HD.3244) (HD.351) ] >>
endobj
4637 0 obj
-<< /Names [ (page.92) 3634 0 R (page.93) 3673 0 R (page.94) 3724 0 R (page.95) 3769 0 R (page.96) 3821 0 R (page.97) 3864 0 R (page.98) 3920 0 R (page.99) 3970 0 R (piton:passe) 449 0 R (piton:transpose) 448 0 R (section*.1) 2392 0 R (section*.10) 2838 0 R (section*.11) 2843 0 R (section*.12) 2887 0 R (section*.13) 2889 0 R (section*.14) 3024 0 R (section*.15) 3027 0 R (section*.16) 3038 0 R (section*.17) 3068 0 R (section*.18) 3087 0 R (section*.19) 3117 0 R (section*.2) 2446 0 R (section*.20) 3164 0 R (section*.21) 3166 0 R (section*.22) 3255 0 R (section*.23) 3267 0 R (section*.24) 3272 0 R (section*.25) 3274 0 R (section*.26) 3291 0 R (section*.27) 3390 0 R (section*.28) 3396 0 R (section*.29) 3401 0 R ] /Limits [ (page.92) (section*.29) ] >>
+<< /Names [ (HD.352) 1031 0 R (HD.353) 1032 0 R (HD.354) 1033 0 R (HD.355) 1034 0 R (HD.356) 1035 0 R (HD.357) 1036 0 R (HD.358) 1037 0 R (HD.359) 1038 0 R (HD.36) 677 0 R (HD.360) 1039 0 R (HD.361) 1040 0 R (HD.362) 1041 0 R (HD.363) 1042 0 R (HD.364) 1043 0 R (HD.365) 1044 0 R (HD.366) 1045 0 R (HD.367) 1046 0 R (HD.368) 1047 0 R (HD.369) 1048 0 R (HD.37) 682 0 R (HD.370) 1049 0 R (HD.371) 1050 0 R (HD.372) 1051 0 R (HD.373) 1058 0 R (HD.374) 1059 0 R (HD.375) 1060 0 R (HD.376) 1061 0 R (HD.377) 1062 0 R (HD.378) 1063 0 R (HD.379) 1064 0 R (HD.38) 683 0 R (HD.380) 1065 0 R ] /Limits [ (HD.352) (HD.380) ] >>
endobj
4638 0 obj
-<< /Names [ (section*.3) 2481 0 R (section*.30) 3414 0 R (section*.31) 4200 0 R (section*.32) 4201 0 R (section*.33) 4202 0 R (section*.34) 4203 0 R (section*.35) 4204 0 R (section*.36) 4205 0 R (section*.37) 4206 0 R (section*.38) 4207 0 R (section*.39) 4208 0 R (section*.4) 2563 0 R (section*.40) 4209 0 R (section*.41) 4230 0 R (section*.42) 4231 0 R (section*.43) 4232 0 R (section*.44) 4233 0 R (section*.45) 4234 0 R (section*.46) 4235 0 R (section*.47) 4236 0 R (section*.5) 2684 0 R (section*.6) 2751 0 R (section*.7) 2762 0 R (section*.8) 2764 0 R (section*.9) 2770 0 R (section.0.1) 5 0 R (section.0.10) 201 0 R (section.0.11) 309 0 R (section.0.2) 9 0 R (section.0.3) 13 0 R (section.0.4) 33 0 R (section.0.5) 61 0 R ] /Limits [ (section*.3) (section.0.5) ] >>
+<< /Names [ (HD.381) 1066 0 R (HD.382) 1067 0 R (HD.383) 1068 0 R (HD.384) 1069 0 R (HD.385) 1070 0 R (HD.386) 1071 0 R (HD.387) 1072 0 R (HD.388) 1073 0 R (HD.389) 1074 0 R (HD.39) 684 0 R (HD.390) 1075 0 R (HD.391) 1076 0 R (HD.392) 1077 0 R (HD.393) 1078 0 R (HD.394) 1079 0 R (HD.395) 1080 0 R (HD.396) 1081 0 R (HD.397) 1082 0 R (HD.398) 1083 0 R (HD.399) 1084 0 R (HD.4) 645 0 R (HD.40) 685 0 R (HD.400) 1085 0 R (HD.401) 1086 0 R (HD.402) 1087 0 R (HD.403) 1088 0 R (HD.404) 1089 0 R (HD.405) 1090 0 R (HD.406) 1091 0 R (HD.407) 1092 0 R (HD.408) 1093 0 R (HD.409) 1094 0 R ] /Limits [ (HD.381) (HD.409) ] >>
endobj
4639 0 obj
-<< /Names [ (section.0.6) 65 0 R (section.0.7) 145 0 R (section.0.8) 149 0 R (section.0.9) 173 0 R (subsection.0.10.1) 205 0 R (subsection.0.10.2) 209 0 R (subsection.0.10.3) 269 0 R (subsection.0.3.1) 17 0 R (subsection.0.3.2) 21 0 R (subsection.0.3.3) 25 0 R (subsection.0.3.4) 29 0 R (subsection.0.4.1) 37 0 R (subsection.0.4.2) 41 0 R (subsection.0.4.3) 57 0 R (subsection.0.6.1) 69 0 R (subsection.0.6.2) 81 0 R (subsection.0.6.3) 93 0 R (subsection.0.6.4) 97 0 R (subsection.0.6.5) 121 0 R (subsection.0.6.6) 137 0 R (subsection.0.6.7) 141 0 R (subsection.0.8.1) 153 0 R (subsection.0.8.2) 157 0 R (subsection.0.8.3) 161 0 R (subsection.0.8.4) 165 0 R (subsection.0.8.5) 169 0 R (subsection.0.9.1) 177 0 R (subsection.0.9.2) 181 0 R (subsection.0.9.3) 185 0 R (subsection.0.9.4) 189 0 R (subsection.0.9.5) 193 0 R (subsection.0.9.6) 197 0 R ] /Limits [ (section.0.6) (subsection.0.9.6) ] >>
+<< /Names [ (HD.41) 686 0 R (HD.410) 1095 0 R (HD.411) 1096 0 R (HD.412) 1097 0 R (HD.413) 1098 0 R (HD.414) 1099 0 R (HD.415) 1100 0 R (HD.416) 1101 0 R (HD.417) 1102 0 R (HD.418) 1103 0 R (HD.419) 1104 0 R (HD.42) 687 0 R (HD.420) 1105 0 R (HD.421) 1106 0 R (HD.422) 1107 0 R (HD.423) 1108 0 R (HD.424) 1109 0 R (HD.425) 1110 0 R (HD.426) 1111 0 R (HD.427) 1116 0 R (HD.428) 1117 0 R (HD.429) 1118 0 R (HD.43) 688 0 R (HD.430) 1119 0 R (HD.431) 1120 0 R (HD.432) 1121 0 R (HD.433) 1122 0 R (HD.434) 1123 0 R (HD.435) 1124 0 R (HD.436) 1125 0 R (HD.437) 1126 0 R (HD.438) 1127 0 R ] /Limits [ (HD.41) (HD.438) ] >>
endobj
4640 0 obj
-<< /Names [ (subsubsection.0.10.2.1) 213 0 R (subsubsection.0.10.2.10) 249 0 R (subsubsection.0.10.2.11) 253 0 R (subsubsection.0.10.2.12) 257 0 R (subsubsection.0.10.2.13) 261 0 R (subsubsection.0.10.2.14) 265 0 R (subsubsection.0.10.2.2) 217 0 R (subsubsection.0.10.2.3) 221 0 R (subsubsection.0.10.2.4) 225 0 R (subsubsection.0.10.2.5) 229 0 R (subsubsection.0.10.2.6) 233 0 R (subsubsection.0.10.2.7) 237 0 R (subsubsection.0.10.2.8) 241 0 R (subsubsection.0.10.2.9) 245 0 R (subsubsection.0.10.3.1) 273 0 R (subsubsection.0.10.3.2) 277 0 R (subsubsection.0.10.3.3) 281 0 R (subsubsection.0.10.3.4) 285 0 R (subsubsection.0.10.3.5) 289 0 R (subsubsection.0.10.3.6) 293 0 R (subsubsection.0.10.3.7) 297 0 R (subsubsection.0.10.3.8) 301 0 R (subsubsection.0.10.3.9) 305 0 R (subsubsection.0.4.2.1) 45 0 R (subsubsection.0.4.2.2) 49 0 R (subsubsection.0.4.2.3) 53 0 R (subsubsection.0.6.1.1) 73 0 R (subsubsection.0.6.1.2) 77 0 R (subsubsection.0.6.2.1) 85 0 R (subsubsection.0.6.2.2) 89 0 R (subsubsection.0.6.4.1) 101 0 R (subsubsection.0.6.4.2) 105 0 R ] /Limits [ (subsubsection.0.10.2.1) (subsubsection.0.6.4.2) ] >>
+<< /Names [ (HD.439) 1128 0 R (HD.44) 689 0 R (HD.440) 1129 0 R (HD.441) 1130 0 R (HD.442) 1131 0 R (HD.443) 1132 0 R (HD.444) 1133 0 R (HD.445) 1134 0 R (HD.446) 1135 0 R (HD.447) 1136 0 R (HD.448) 1137 0 R (HD.449) 1138 0 R (HD.45) 690 0 R (HD.450) 1139 0 R (HD.451) 1140 0 R (HD.452) 1141 0 R (HD.453) 1142 0 R (HD.454) 1143 0 R (HD.455) 1144 0 R (HD.456) 1145 0 R (HD.457) 1146 0 R (HD.458) 1147 0 R (HD.459) 1148 0 R (HD.46) 691 0 R (HD.460) 1149 0 R (HD.461) 1150 0 R (HD.462) 1151 0 R (HD.463) 1152 0 R (HD.464) 1153 0 R (HD.465) 1154 0 R (HD.466) 1155 0 R (HD.467) 1156 0 R ] /Limits [ (HD.439) (HD.467) ] >>
endobj
4641 0 obj
-<< /Names [ (subsubsection.0.6.4.3) 109 0 R (subsubsection.0.6.4.4) 113 0 R (subsubsection.0.6.4.5) 117 0 R (subsubsection.0.6.5.1) 125 0 R (subsubsection.0.6.5.2) 129 0 R (subsubsection.0.6.5.3) 133 0 R (toc1.1) 313 0 R ] /Limits [ (subsubsection.0.6.4.3) (toc1.1) ] >>
+<< /Names [ (HD.468) 1157 0 R (HD.469) 1158 0 R (HD.47) 692 0 R (HD.470) 1159 0 R (HD.471) 1160 0 R (HD.472) 1161 0 R (HD.473) 1162 0 R (HD.474) 1163 0 R (HD.475) 1164 0 R (HD.476) 1165 0 R (HD.477) 1166 0 R (HD.478) 1167 0 R (HD.479) 1168 0 R (HD.48) 693 0 R (HD.480) 1169 0 R (HD.481) 1170 0 R (HD.482) 1171 0 R (HD.483) 1172 0 R (HD.484) 1173 0 R (HD.485) 1174 0 R (HD.486) 1175 0 R (HD.487) 1180 0 R (HD.488) 1181 0 R (HD.489) 1182 0 R (HD.49) 694 0 R (HD.490) 1183 0 R (HD.491) 1184 0 R (HD.492) 1185 0 R (HD.493) 1186 0 R (HD.494) 1187 0 R (HD.495) 1188 0 R (HD.496) 1189 0 R ] /Limits [ (HD.468) (HD.496) ] >>
endobj
4642 0 obj
-<< /Kids [ 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R ] /Limits [ (Doc-Start) (HD.1919) ] >>
+<< /Names [ (HD.497) 1190 0 R (HD.498) 1191 0 R (HD.499) 1192 0 R (HD.5) 646 0 R (HD.50) 695 0 R (HD.500) 1193 0 R (HD.501) 1194 0 R (HD.502) 1195 0 R (HD.503) 1196 0 R (HD.504) 1197 0 R (HD.505) 1198 0 R (HD.506) 1199 0 R (HD.507) 1200 0 R (HD.508) 1201 0 R (HD.509) 1202 0 R (HD.51) 696 0 R (HD.510) 1203 0 R (HD.511) 1204 0 R (HD.512) 1205 0 R (HD.513) 1206 0 R (HD.514) 1207 0 R (HD.515) 1208 0 R (HD.516) 1209 0 R (HD.517) 1210 0 R (HD.518) 1211 0 R (HD.519) 1212 0 R (HD.52) 697 0 R (HD.520) 1213 0 R (HD.521) 1214 0 R (HD.522) 1215 0 R (HD.523) 1216 0 R (HD.524) 1217 0 R ] /Limits [ (HD.497) (HD.524) ] >>
endobj
4643 0 obj
-<< /Kids [ 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R ] /Limits [ (HD.192) (HD.2840) ] >>
+<< /Names [ (HD.525) 1218 0 R (HD.526) 1219 0 R (HD.527) 1220 0 R (HD.528) 1221 0 R (HD.529) 1222 0 R (HD.53) 698 0 R (HD.530) 1223 0 R (HD.531) 1224 0 R (HD.532) 1225 0 R (HD.533) 1226 0 R (HD.534) 1227 0 R (HD.535) 1228 0 R (HD.536) 1229 0 R (HD.537) 1230 0 R (HD.538) 1231 0 R (HD.539) 1232 0 R (HD.54) 699 0 R (HD.540) 1233 0 R (HD.541) 1234 0 R (HD.542) 1235 0 R (HD.543) 1240 0 R (HD.544) 1241 0 R (HD.545) 1242 0 R (HD.546) 1243 0 R (HD.547) 1244 0 R (HD.548) 1245 0 R (HD.549) 1246 0 R (HD.55) 700 0 R (HD.550) 1247 0 R (HD.551) 1248 0 R (HD.552) 1249 0 R (HD.553) 1250 0 R ] /Limits [ (HD.525) (HD.553) ] >>
endobj
4644 0 obj
-<< /Kids [ 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4614 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4627 0 R ] /Limits [ (HD.2841) (HD.868) ] >>
+<< /Names [ (HD.554) 1251 0 R (HD.555) 1252 0 R (HD.556) 1253 0 R (HD.557) 1254 0 R (HD.558) 1255 0 R (HD.559) 1256 0 R (HD.56) 701 0 R (HD.560) 1257 0 R (HD.561) 1258 0 R (HD.562) 1259 0 R (HD.563) 1260 0 R (HD.564) 1261 0 R (HD.565) 1262 0 R (HD.566) 1263 0 R (HD.567) 1264 0 R (HD.568) 1265 0 R (HD.569) 1266 0 R (HD.57) 702 0 R (HD.570) 1267 0 R (HD.571) 1268 0 R (HD.572) 1269 0 R (HD.573) 1270 0 R (HD.574) 1271 0 R (HD.575) 1272 0 R (HD.576) 1273 0 R (HD.577) 1274 0 R (HD.578) 1275 0 R (HD.579) 1276 0 R (HD.58) 703 0 R (HD.580) 1277 0 R (HD.581) 1278 0 R (HD.582) 1279 0 R ] /Limits [ (HD.554) (HD.582) ] >>
endobj
4645 0 obj
-<< /Kids [ 4628 0 R 4629 0 R 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R ] /Limits [ (HD.869) (toc1.1) ] >>
+<< /Names [ (HD.583) 1280 0 R (HD.584) 1281 0 R (HD.585) 1282 0 R (HD.586) 1283 0 R (HD.587) 1284 0 R (HD.588) 1285 0 R (HD.589) 1286 0 R (HD.59) 704 0 R (HD.590) 1287 0 R (HD.591) 1288 0 R (HD.592) 1289 0 R (HD.593) 1290 0 R (HD.594) 1291 0 R (HD.595) 1292 0 R (HD.596) 1293 0 R (HD.597) 1294 0 R (HD.598) 1295 0 R (HD.599) 1296 0 R (HD.6) 647 0 R (HD.60) 705 0 R (HD.600) 1297 0 R (HD.601) 1298 0 R (HD.602) 1299 0 R (HD.603) 1300 0 R (HD.604) 1301 0 R (HD.605) 1302 0 R (HD.606) 1307 0 R (HD.607) 1308 0 R (HD.608) 1309 0 R (HD.609) 1310 0 R (HD.61) 706 0 R (HD.610) 1311 0 R ] /Limits [ (HD.583) (HD.610) ] >>
endobj
4646 0 obj
-<< /Kids [ 4642 0 R 4643 0 R 4644 0 R 4645 0 R ] /Limits [ (Doc-Start) (toc1.1) ] >>
+<< /Names [ (HD.611) 1312 0 R (HD.612) 1313 0 R (HD.613) 1314 0 R (HD.614) 1315 0 R (HD.615) 1316 0 R (HD.616) 1317 0 R (HD.617) 1318 0 R (HD.618) 1319 0 R (HD.619) 1320 0 R (HD.62) 707 0 R (HD.620) 1321 0 R (HD.621) 1322 0 R (HD.622) 1323 0 R (HD.623) 1324 0 R (HD.624) 1325 0 R (HD.625) 1326 0 R (HD.626) 1327 0 R (HD.627) 1328 0 R (HD.628) 1329 0 R (HD.629) 1330 0 R (HD.63) 708 0 R (HD.630) 1331 0 R (HD.631) 1332 0 R (HD.632) 1333 0 R (HD.633) 1334 0 R (HD.634) 1335 0 R (HD.635) 1336 0 R (HD.636) 1337 0 R (HD.637) 1338 0 R (HD.638) 1339 0 R (HD.639) 1340 0 R (HD.64) 709 0 R ] /Limits [ (HD.611) (HD.64) ] >>
endobj
4647 0 obj
-<< /Dests 4646 0 R >>
+<< /Names [ (HD.640) 1341 0 R (HD.641) 1342 0 R (HD.642) 1343 0 R (HD.643) 1344 0 R (HD.644) 1345 0 R (HD.645) 1346 0 R (HD.646) 1347 0 R (HD.647) 1348 0 R (HD.648) 1349 0 R (HD.649) 1350 0 R (HD.65) 710 0 R (HD.650) 1351 0 R (HD.651) 1352 0 R (HD.652) 1353 0 R (HD.653) 1354 0 R (HD.654) 1355 0 R (HD.655) 1356 0 R (HD.656) 1357 0 R (HD.657) 1358 0 R (HD.658) 1359 0 R (HD.659) 1360 0 R (HD.66) 711 0 R (HD.660) 1361 0 R (HD.661) 1362 0 R (HD.662) 1363 0 R (HD.663) 1364 0 R (HD.664) 1365 0 R (HD.665) 1366 0 R (HD.666) 1367 0 R (HD.667) 1372 0 R (HD.668) 1373 0 R (HD.669) 1374 0 R ] /Limits [ (HD.640) (HD.669) ] >>
endobj
4648 0 obj
-<< /Type /Catalog /Pages 4530 0 R /Outlines 4531 0 R /Names 4647 0 R /PageMode/UseOutlines /OpenAction 316 0 R >>
+<< /Names [ (HD.67) 712 0 R (HD.670) 1375 0 R (HD.671) 1376 0 R (HD.672) 1377 0 R (HD.673) 1378 0 R (HD.674) 1379 0 R (HD.675) 1380 0 R (HD.676) 1381 0 R (HD.677) 1382 0 R (HD.678) 1383 0 R (HD.679) 1384 0 R (HD.68) 713 0 R (HD.680) 1385 0 R (HD.681) 1386 0 R (HD.682) 1387 0 R (HD.683) 1388 0 R (HD.684) 1389 0 R (HD.685) 1390 0 R (HD.686) 1391 0 R (HD.687) 1392 0 R (HD.688) 1393 0 R (HD.689) 1394 0 R (HD.69) 714 0 R (HD.690) 1395 0 R (HD.691) 1396 0 R (HD.692) 1397 0 R (HD.693) 1398 0 R (HD.694) 1399 0 R (HD.695) 1400 0 R (HD.696) 1401 0 R (HD.697) 1402 0 R (HD.698) 1403 0 R ] /Limits [ (HD.67) (HD.698) ] >>
endobj
4649 0 obj
-<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y\000\040\000,\000\040\000f\000p\000a\000n\000t\000i\000g\000n\000y\000@\000w\000a\000n\000a\000d\000o\000o\000.\000f\000r)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000p\000i\000t\000o\000n)/Subject()/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240523185009+02'00') /ModDate (D:20240523185009+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
+<< /Names [ (HD.699) 1404 0 R (HD.7) 648 0 R (HD.70) 715 0 R (HD.700) 1405 0 R (HD.701) 1406 0 R (HD.702) 1407 0 R (HD.703) 1408 0 R (HD.704) 1409 0 R (HD.705) 1410 0 R (HD.706) 1411 0 R (HD.707) 1412 0 R (HD.708) 1413 0 R (HD.709) 1414 0 R (HD.71) 716 0 R (HD.710) 1415 0 R (HD.711) 1420 0 R (HD.712) 1421 0 R (HD.713) 1422 0 R (HD.714) 1423 0 R (HD.715) 1424 0 R (HD.716) 1425 0 R (HD.717) 1426 0 R (HD.718) 1427 0 R (HD.719) 1428 0 R (HD.72) 717 0 R (HD.720) 1429 0 R (HD.721) 1430 0 R (HD.722) 1431 0 R (HD.723) 1432 0 R (HD.724) 1433 0 R (HD.725) 1434 0 R (HD.726) 1435 0 R ] /Limits [ (HD.699) (HD.726) ] >>
+endobj
+4650 0 obj
+<< /Names [ (HD.727) 1436 0 R (HD.728) 1437 0 R (HD.729) 1438 0 R (HD.73) 718 0 R (HD.730) 1439 0 R (HD.731) 1440 0 R (HD.732) 1441 0 R (HD.733) 1442 0 R (HD.734) 1443 0 R (HD.735) 1444 0 R (HD.736) 1445 0 R (HD.737) 1446 0 R (HD.738) 1447 0 R (HD.739) 1448 0 R (HD.74) 719 0 R (HD.740) 1449 0 R (HD.741) 1450 0 R (HD.742) 1451 0 R (HD.743) 1452 0 R (HD.744) 1453 0 R (HD.745) 1454 0 R (HD.746) 1455 0 R (HD.747) 1460 0 R (HD.748) 1461 0 R (HD.749) 1462 0 R (HD.75) 720 0 R (HD.750) 1463 0 R (HD.751) 1464 0 R (HD.752) 1465 0 R (HD.753) 1466 0 R (HD.754) 1467 0 R (HD.755) 1468 0 R ] /Limits [ (HD.727) (HD.755) ] >>
+endobj
+4651 0 obj
+<< /Names [ (HD.756) 1469 0 R (HD.757) 1470 0 R (HD.758) 1471 0 R (HD.759) 1472 0 R (HD.76) 721 0 R (HD.760) 1473 0 R (HD.761) 1474 0 R (HD.762) 1475 0 R (HD.763) 1476 0 R (HD.764) 1477 0 R (HD.765) 1478 0 R (HD.766) 1479 0 R (HD.767) 1480 0 R (HD.768) 1481 0 R (HD.769) 1482 0 R (HD.77) 722 0 R (HD.770) 1483 0 R (HD.771) 1484 0 R (HD.772) 1485 0 R (HD.773) 1486 0 R (HD.774) 1487 0 R (HD.775) 1488 0 R (HD.776) 1489 0 R (HD.777) 1490 0 R (HD.778) 1491 0 R (HD.779) 1492 0 R (HD.78) 723 0 R (HD.780) 1493 0 R (HD.781) 1494 0 R (HD.782) 1495 0 R (HD.783) 1496 0 R (HD.784) 1497 0 R ] /Limits [ (HD.756) (HD.784) ] >>
+endobj
+4652 0 obj
+<< /Names [ (HD.785) 1498 0 R (HD.786) 1499 0 R (HD.787) 1500 0 R (HD.788) 1501 0 R (HD.789) 1502 0 R (HD.79) 724 0 R (HD.790) 1507 0 R (HD.791) 1508 0 R (HD.792) 1509 0 R (HD.793) 1510 0 R (HD.794) 1511 0 R (HD.795) 1512 0 R (HD.796) 1513 0 R (HD.797) 1514 0 R (HD.798) 1515 0 R (HD.799) 1516 0 R (HD.8) 649 0 R (HD.80) 725 0 R (HD.800) 1517 0 R (HD.801) 1518 0 R (HD.802) 1519 0 R (HD.803) 1520 0 R (HD.804) 1521 0 R (HD.805) 1522 0 R (HD.806) 1523 0 R (HD.807) 1524 0 R (HD.808) 1525 0 R (HD.809) 1526 0 R (HD.81) 726 0 R (HD.810) 1527 0 R (HD.811) 1528 0 R (HD.812) 1529 0 R ] /Limits [ (HD.785) (HD.812) ] >>
+endobj
+4653 0 obj
+<< /Names [ (HD.813) 1530 0 R (HD.814) 1531 0 R (HD.815) 1532 0 R (HD.816) 1533 0 R (HD.817) 1534 0 R (HD.818) 1535 0 R (HD.819) 1536 0 R (HD.82) 727 0 R (HD.820) 1537 0 R (HD.821) 1538 0 R (HD.822) 1539 0 R (HD.823) 1540 0 R (HD.824) 1541 0 R (HD.825) 1542 0 R (HD.826) 1543 0 R (HD.827) 1544 0 R (HD.828) 1545 0 R (HD.829) 1546 0 R (HD.83) 728 0 R (HD.830) 1547 0 R (HD.831) 1548 0 R (HD.832) 1549 0 R (HD.833) 1550 0 R (HD.834) 1551 0 R (HD.835) 1552 0 R (HD.836) 1553 0 R (HD.837) 1554 0 R (HD.838) 1555 0 R (HD.839) 1556 0 R (HD.84) 733 0 R (HD.840) 1557 0 R (HD.841) 1558 0 R ] /Limits [ (HD.813) (HD.841) ] >>
+endobj
+4654 0 obj
+<< /Names [ (HD.842) 1559 0 R (HD.843) 1560 0 R (HD.844) 1565 0 R (HD.845) 1566 0 R (HD.846) 1567 0 R (HD.847) 1568 0 R (HD.848) 1569 0 R (HD.849) 1570 0 R (HD.85) 734 0 R (HD.850) 1571 0 R (HD.851) 1572 0 R (HD.852) 1573 0 R (HD.853) 1574 0 R (HD.854) 1575 0 R (HD.855) 1576 0 R (HD.856) 1577 0 R (HD.857) 1578 0 R (HD.858) 1579 0 R (HD.859) 1580 0 R (HD.86) 735 0 R (HD.860) 1581 0 R (HD.861) 1582 0 R (HD.862) 1583 0 R (HD.863) 1584 0 R (HD.864) 1585 0 R (HD.865) 1586 0 R (HD.866) 1587 0 R (HD.867) 1588 0 R (HD.868) 1589 0 R (HD.869) 1590 0 R (HD.87) 736 0 R (HD.870) 1591 0 R ] /Limits [ (HD.842) (HD.870) ] >>
+endobj
+4655 0 obj
+<< /Names [ (HD.871) 1592 0 R (HD.872) 1593 0 R (HD.873) 1594 0 R (HD.874) 1595 0 R (HD.875) 1596 0 R (HD.876) 1597 0 R (HD.877) 1598 0 R (HD.878) 1599 0 R (HD.879) 1600 0 R (HD.88) 737 0 R (HD.880) 1601 0 R (HD.881) 1602 0 R (HD.882) 1603 0 R (HD.883) 1604 0 R (HD.884) 1605 0 R (HD.885) 1606 0 R (HD.886) 1607 0 R (HD.887) 1608 0 R (HD.888) 1609 0 R (HD.889) 1610 0 R (HD.89) 738 0 R (HD.890) 1611 0 R (HD.891) 1612 0 R (HD.892) 1613 0 R (HD.893) 1614 0 R (HD.894) 1621 0 R (HD.895) 1622 0 R (HD.896) 1623 0 R (HD.897) 1624 0 R (HD.898) 1625 0 R (HD.899) 1626 0 R (HD.9) 650 0 R ] /Limits [ (HD.871) (HD.9) ] >>
+endobj
+4656 0 obj
+<< /Names [ (HD.90) 739 0 R (HD.900) 1627 0 R (HD.901) 1628 0 R (HD.902) 1629 0 R (HD.903) 1630 0 R (HD.904) 1631 0 R (HD.905) 1632 0 R (HD.906) 1633 0 R (HD.907) 1634 0 R (HD.908) 1635 0 R (HD.909) 1636 0 R (HD.91) 740 0 R (HD.910) 1637 0 R (HD.911) 1638 0 R (HD.912) 1639 0 R (HD.913) 1640 0 R (HD.914) 1641 0 R (HD.915) 1642 0 R (HD.916) 1643 0 R (HD.917) 1644 0 R (HD.918) 1645 0 R (HD.919) 1646 0 R (HD.92) 741 0 R (HD.920) 1647 0 R (HD.921) 1648 0 R (HD.922) 1649 0 R (HD.923) 1650 0 R (HD.924) 1651 0 R (HD.925) 1652 0 R (HD.926) 1653 0 R (HD.927) 1654 0 R (HD.928) 1655 0 R ] /Limits [ (HD.90) (HD.928) ] >>
+endobj
+4657 0 obj
+<< /Names [ (HD.929) 1656 0 R (HD.93) 742 0 R (HD.930) 1657 0 R (HD.931) 1658 0 R (HD.932) 1659 0 R (HD.933) 1660 0 R (HD.934) 1661 0 R (HD.935) 1662 0 R (HD.936) 1669 0 R (HD.937) 1670 0 R (HD.938) 1671 0 R (HD.939) 1672 0 R (HD.94) 743 0 R (HD.940) 1673 0 R (HD.941) 1674 0 R (HD.942) 1675 0 R (HD.943) 1676 0 R (HD.944) 1677 0 R (HD.945) 1678 0 R (HD.946) 1679 0 R (HD.947) 1680 0 R (HD.948) 1681 0 R (HD.949) 1682 0 R (HD.95) 744 0 R (HD.950) 1683 0 R (HD.951) 1684 0 R (HD.952) 1685 0 R (HD.953) 1686 0 R (HD.954) 1687 0 R (HD.955) 1688 0 R (HD.956) 1689 0 R (HD.957) 1690 0 R ] /Limits [ (HD.929) (HD.957) ] >>
+endobj
+4658 0 obj
+<< /Names [ (HD.958) 1691 0 R (HD.959) 1692 0 R (HD.96) 745 0 R (HD.960) 1693 0 R (HD.961) 1694 0 R (HD.962) 1695 0 R (HD.963) 1696 0 R (HD.964) 1697 0 R (HD.965) 1698 0 R (HD.966) 1699 0 R (HD.967) 1700 0 R (HD.968) 1701 0 R (HD.969) 1702 0 R (HD.97) 746 0 R (HD.970) 1703 0 R (HD.971) 1704 0 R (HD.972) 1705 0 R (HD.973) 1706 0 R (HD.974) 1707 0 R (HD.975) 1708 0 R (HD.976) 1709 0 R (HD.977) 1710 0 R (HD.978) 1711 0 R (HD.979) 1712 0 R (HD.98) 747 0 R (HD.980) 1713 0 R (HD.981) 1714 0 R (HD.982) 1719 0 R (HD.983) 1720 0 R (HD.984) 1721 0 R (HD.985) 1722 0 R (HD.986) 1723 0 R ] /Limits [ (HD.958) (HD.986) ] >>
+endobj
+4659 0 obj
+<< /Names [ (HD.987) 1724 0 R (HD.988) 1725 0 R (HD.989) 1726 0 R (HD.99) 748 0 R (HD.990) 1727 0 R (HD.991) 1728 0 R (HD.992) 1729 0 R (HD.993) 1730 0 R (HD.994) 1731 0 R (HD.995) 1732 0 R (HD.996) 1733 0 R (HD.997) 1734 0 R (HD.998) 1735 0 R (HD.999) 1736 0 R (Hfootnote.1) 352 0 R (Hfootnote.10) 416 0 R (Hfootnote.11) 417 0 R (Hfootnote.12) 429 0 R (Hfootnote.13) 430 0 R (Hfootnote.14) 431 0 R (Hfootnote.15) 442 0 R (Hfootnote.16) 443 0 R (Hfootnote.17) 454 0 R (Hfootnote.18) 455 0 R (Hfootnote.19) 467 0 R (Hfootnote.2) 356 0 R (Hfootnote.20) 474 0 R (Hfootnote.21) 475 0 R (Hfootnote.22) 493 0 R (Hfootnote.23) 504 0 R (Hfootnote.24) 524 0 R (Hfootnote.25) 525 0 R ] /Limits [ (HD.987) (Hfootnote.25) ] >>
+endobj
+4660 0 obj
+<< /Names [ (Hfootnote.26) 526 0 R (Hfootnote.27) 532 0 R (Hfootnote.28) 574 0 R (Hfootnote.29) 575 0 R (Hfootnote.3) 372 0 R (Hfootnote.30) 572 0 R (Hfootnote.31) 573 0 R (Hfootnote.32) 576 0 R (Hfootnote.33) 594 0 R (Hfootnote.34) 632 0 R (Hfootnote.35) 629 0 R (Hfootnote.36) 630 0 R (Hfootnote.37) 631 0 R (Hfootnote.38) 1663 0 R (Hfootnote.39) 2607 0 R (Hfootnote.4) 382 0 R (Hfootnote.40) 2740 0 R (Hfootnote.41) 2741 0 R (Hfootnote.42) 3009 0 R (Hfootnote.43) 3276 0 R (Hfootnote.44) 3374 0 R (Hfootnote.45) 3544 0 R (Hfootnote.5) 383 0 R (Hfootnote.6) 397 0 R (Hfootnote.7) 398 0 R (Hfootnote.8) 399 0 R (Hfootnote.9) 400 0 R (page.1) 327 0 R (page.10) 466 0 R (page.100) 4061 0 R (page.101) 4127 0 R (page.102) 4186 0 R ] /Limits [ (Hfootnote.26) (page.102) ] >>
+endobj
+4661 0 obj
+<< /Names [ (page.103) 4240 0 R (page.104) 4305 0 R (page.105) 4333 0 R (page.11) 473 0 R (page.12) 481 0 R (page.13) 486 0 R (page.14) 492 0 R (page.15) 503 0 R (page.16) 509 0 R (page.17) 513 0 R (page.18) 521 0 R (page.19) 531 0 R (page.2) 369 0 R (page.20) 540 0 R (page.21) 549 0 R (page.22) 557 0 R (page.23) 570 0 R (page.24) 583 0 R (page.25) 593 0 R (page.26) 599 0 R (page.27) 603 0 R (page.28) 607 0 R (page.29) 613 0 R (page.3) 380 0 R (page.30) 619 0 R (page.31) 628 0 R (page.32) 638 0 R (page.33) 681 0 R (page.34) 732 0 R (page.35) 787 0 R (page.36) 819 0 R (page.37) 844 0 R ] /Limits [ (page.103) (page.37) ] >>
+endobj
+4662 0 obj
+<< /Names [ (page.38) 872 0 R (page.39) 909 0 R (page.4) 395 0 R (page.40) 953 0 R (page.41) 1011 0 R (page.42) 1057 0 R (page.43) 1115 0 R (page.44) 1179 0 R (page.45) 1239 0 R (page.46) 1306 0 R (page.47) 1371 0 R (page.48) 1419 0 R (page.49) 1459 0 R (page.5) 414 0 R (page.50) 1506 0 R (page.51) 1564 0 R (page.52) 1620 0 R (page.53) 1668 0 R (page.54) 1718 0 R (page.55) 1764 0 R (page.56) 1816 0 R (page.57) 1876 0 R (page.58) 1925 0 R (page.59) 1991 0 R (page.6) 427 0 R (page.60) 2043 0 R (page.61) 2082 0 R (page.62) 2132 0 R (page.63) 2194 0 R (page.64) 2260 0 R (page.65) 2314 0 R (page.66) 2364 0 R ] /Limits [ (page.38) (page.66) ] >>
+endobj
+4663 0 obj
+<< /Names [ (page.67) 2393 0 R (page.68) 2431 0 R (page.69) 2471 0 R (page.7) 440 0 R (page.70) 2520 0 R (page.71) 2572 0 R (page.72) 2613 0 R (page.73) 2665 0 R (page.74) 2714 0 R (page.75) 2746 0 R (page.76) 2806 0 R (page.77) 2870 0 R (page.78) 2912 0 R (page.79) 2962 0 R (page.8) 451 0 R (page.80) 3014 0 R (page.81) 3071 0 R (page.82) 3113 0 R (page.83) 3166 0 R (page.84) 3227 0 R (page.85) 3281 0 R (page.86) 3327 0 R (page.87) 3379 0 R (page.88) 3434 0 R (page.89) 3494 0 R (page.9) 461 0 R (page.90) 3549 0 R (page.91) 3616 0 R (page.92) 3672 0 R (page.93) 3710 0 R (page.94) 3761 0 R (page.95) 3806 0 R ] /Limits [ (page.67) (page.95) ] >>
+endobj
+4664 0 obj
+<< /Names [ (page.96) 3858 0 R (page.97) 3901 0 R (page.98) 3957 0 R (page.99) 4007 0 R (piton:passe) 453 0 R (piton:transpose) 452 0 R (section*.1) 2418 0 R (section*.10) 2877 0 R (section*.11) 2882 0 R (section*.12) 2926 0 R (section*.13) 2928 0 R (section*.14) 3065 0 R (section*.15) 3072 0 R (section*.16) 3079 0 R (section*.17) 3114 0 R (section*.18) 3128 0 R (section*.19) 3158 0 R (section*.2) 2472 0 R (section*.20) 3204 0 R (section*.21) 3206 0 R (section*.22) 3295 0 R (section*.23) 3307 0 R (section*.24) 3312 0 R (section*.25) 3314 0 R (section*.26) 3331 0 R (section*.27) 3429 0 R (section*.28) 3435 0 R (section*.29) 3440 0 R (section*.3) 2509 0 R (section*.30) 3453 0 R (section*.31) 4231 0 R (section*.32) 4241 0 R ] /Limits [ (page.96) (section*.32) ] >>
+endobj
+4665 0 obj
+<< /Names [ (section*.33) 4242 0 R (section*.34) 4243 0 R (section*.35) 4244 0 R (section*.36) 4245 0 R (section*.37) 4246 0 R (section*.38) 4247 0 R (section*.39) 4248 0 R (section*.4) 2597 0 R (section*.40) 4249 0 R (section*.41) 4250 0 R (section*.5) 2723 0 R (section*.6) 2790 0 R (section*.7) 2801 0 R (section*.8) 2807 0 R (section*.9) 2809 0 R (section.0.1) 5 0 R (section.0.10) 201 0 R (section.0.11) 313 0 R (section.0.2) 9 0 R (section.0.3) 13 0 R (section.0.4) 33 0 R (section.0.5) 61 0 R (section.0.6) 65 0 R (section.0.7) 145 0 R (section.0.8) 149 0 R (section.0.9) 173 0 R (subsection.0.10.1) 205 0 R (subsection.0.10.2) 209 0 R (subsection.0.10.3) 269 0 R (subsection.0.3.1) 17 0 R (subsection.0.3.2) 21 0 R (subsection.0.3.3) 25 0 R ] /Limits [ (section*.33) (subsection.0.3.3) ] >>
+endobj
+4666 0 obj
+<< /Names [ (subsection.0.3.4) 29 0 R (subsection.0.4.1) 37 0 R (subsection.0.4.2) 41 0 R (subsection.0.4.3) 57 0 R (subsection.0.6.1) 69 0 R (subsection.0.6.2) 81 0 R (subsection.0.6.3) 93 0 R (subsection.0.6.4) 97 0 R (subsection.0.6.5) 121 0 R (subsection.0.6.6) 137 0 R (subsection.0.6.7) 141 0 R (subsection.0.8.1) 153 0 R (subsection.0.8.2) 157 0 R (subsection.0.8.3) 161 0 R (subsection.0.8.4) 165 0 R (subsection.0.8.5) 169 0 R (subsection.0.9.1) 177 0 R (subsection.0.9.2) 181 0 R (subsection.0.9.3) 185 0 R (subsection.0.9.4) 189 0 R (subsection.0.9.5) 193 0 R (subsection.0.9.6) 197 0 R (subsubsection.0.10.2.1) 213 0 R (subsubsection.0.10.2.10) 249 0 R (subsubsection.0.10.2.11) 253 0 R (subsubsection.0.10.2.12) 257 0 R (subsubsection.0.10.2.13) 261 0 R (subsubsection.0.10.2.14) 265 0 R (subsubsection.0.10.2.2) 217 0 R (subsubsection.0.10.2.3) 221 0 R (subsubsection.0.10.2.4) 225 0 R (subsubsection.0.10.2.5) 229 0 R ] /Limits [ (subsection.0.3.4) (subsubsection.0.10.2.5) ] >>
+endobj
+4667 0 obj
+<< /Names [ (subsubsection.0.10.2.6) 233 0 R (subsubsection.0.10.2.7) 237 0 R (subsubsection.0.10.2.8) 241 0 R (subsubsection.0.10.2.9) 245 0 R (subsubsection.0.10.3.1) 273 0 R (subsubsection.0.10.3.10) 309 0 R (subsubsection.0.10.3.2) 277 0 R (subsubsection.0.10.3.3) 281 0 R (subsubsection.0.10.3.4) 285 0 R (subsubsection.0.10.3.5) 289 0 R (subsubsection.0.10.3.6) 293 0 R (subsubsection.0.10.3.7) 297 0 R (subsubsection.0.10.3.8) 301 0 R (subsubsection.0.10.3.9) 305 0 R (subsubsection.0.4.2.1) 45 0 R (subsubsection.0.4.2.2) 49 0 R (subsubsection.0.4.2.3) 53 0 R (subsubsection.0.6.1.1) 73 0 R (subsubsection.0.6.1.2) 77 0 R (subsubsection.0.6.2.1) 85 0 R (subsubsection.0.6.2.2) 89 0 R (subsubsection.0.6.4.1) 101 0 R (subsubsection.0.6.4.2) 105 0 R (subsubsection.0.6.4.3) 109 0 R (subsubsection.0.6.4.4) 113 0 R (subsubsection.0.6.4.5) 117 0 R (subsubsection.0.6.5.1) 125 0 R (subsubsection.0.6.5.2) 129 0 R (subsubsection.0.6.5.3) 133 0 R (toc1.1) 317 0 R ] /Limits [ (subsubsection.0.10.2.6) (toc1.1) ] >>
+endobj
+4668 0 obj
+<< /Kids [ 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R ] /Limits [ (Doc-Start) (HD.1919) ] >>
+endobj
+4669 0 obj
+<< /Kids [ 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4614 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R ] /Limits [ (HD.192) (HD.2840) ] >>
+endobj
+4670 0 obj
+<< /Kids [ 4622 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4627 0 R 4628 0 R 4629 0 R 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R 4644 0 R 4645 0 R 4646 0 R 4647 0 R 4648 0 R 4649 0 R 4650 0 R 4651 0 R 4652 0 R 4653 0 R ] /Limits [ (HD.2841) (HD.841) ] >>
+endobj
+4671 0 obj
+<< /Kids [ 4654 0 R 4655 0 R 4656 0 R 4657 0 R 4658 0 R 4659 0 R 4660 0 R 4661 0 R 4662 0 R 4663 0 R 4664 0 R 4665 0 R 4666 0 R 4667 0 R ] /Limits [ (HD.842) (toc1.1) ] >>
+endobj
+4672 0 obj
+<< /Kids [ 4668 0 R 4669 0 R 4670 0 R 4671 0 R ] /Limits [ (Doc-Start) (toc1.1) ] >>
+endobj
+4673 0 obj
+<< /Dests 4672 0 R >>
+endobj
+4674 0 obj
+<< /Type /Catalog /Pages 4556 0 R /Outlines 4557 0 R /Names 4673 0 R /PageMode/UseOutlines /OpenAction 320 0 R >>
+endobj
+4675 0 obj
+<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y\000\040\000,\000\040\000f\000p\000a\000n\000t\000i\000g\000n\000y\000@\000w\000a\000n\000a\000d\000o\000o\000.\000f\000r)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000p\000i\000t\000o\000n)/Subject()/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240730111104+02'00') /ModDate (D:20240730111104+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
endobj
xref
-0 4650
+0 4676
0000000000 65535 f
-0000606561 00000 n
-0000606606 00000 n
-0000606626 00000 n
+0000607813 00000 n
+0000607858 00000 n
+0000607878 00000 n
0000000020 00000 n
-0000024062 00000 n
-0000885545 00000 n
+0000024372 00000 n
+0000886816 00000 n
0000000067 00000 n
0000000167 00000 n
-0000029704 00000 n
-0000885458 00000 n
+0000030014 00000 n
+0000886729 00000 n
0000000214 00000 n
0000000315 00000 n
-0000029764 00000 n
-0000885332 00000 n
+0000030074 00000 n
+0000886603 00000 n
0000000363 00000 n
0000000503 00000 n
-0000029825 00000 n
-0000885258 00000 n
+0000030135 00000 n
+0000886529 00000 n
0000000556 00000 n
0000000708 00000 n
-0000029886 00000 n
-0000885171 00000 n
+0000030196 00000 n
+0000886442 00000 n
0000000761 00000 n
0000000979 00000 n
-0000029947 00000 n
-0000885084 00000 n
+0000030257 00000 n
+0000886355 00000 n
0000001032 00000 n
0000001248 00000 n
-0000035326 00000 n
-0000885010 00000 n
+0000035636 00000 n
+0000886281 00000 n
0000001301 00000 n
0000001530 00000 n
-0000042425 00000 n
-0000884884 00000 n
+0000042735 00000 n
+0000886155 00000 n
0000001578 00000 n
0000001684 00000 n
-0000042486 00000 n
-0000884810 00000 n
+0000042796 00000 n
+0000886081 00000 n
0000001737 00000 n
0000001991 00000 n
-0000054349 00000 n
-0000884686 00000 n
+0000054693 00000 n
+0000885957 00000 n
0000002044 00000 n
0000002148 00000 n
-0000054410 00000 n
-0000884612 00000 n
+0000054754 00000 n
+0000885883 00000 n
0000002206 00000 n
0000002348 00000 n
-0000059557 00000 n
-0000884525 00000 n
+0000060081 00000 n
+0000885796 00000 n
0000002406 00000 n
0000002629 00000 n
-0000064722 00000 n
-0000884451 00000 n
+0000065253 00000 n
+0000885722 00000 n
0000002687 00000 n
0000002864 00000 n
-0000064911 00000 n
-0000884377 00000 n
+0000065442 00000 n
+0000885648 00000 n
0000002917 00000 n
0000003117 00000 n
-0000068900 00000 n
-0000884288 00000 n
+0000069434 00000 n
+0000885559 00000 n
0000003165 00000 n
0000003505 00000 n
-0000073253 00000 n
-0000884160 00000 n
+0000073787 00000 n
+0000885431 00000 n
0000003553 00000 n
0000003682 00000 n
-0000073314 00000 n
-0000884049 00000 n
+0000073848 00000 n
+0000885320 00000 n
0000003735 00000 n
0000003933 00000 n
-0000073374 00000 n
-0000883975 00000 n
+0000073908 00000 n
+0000885246 00000 n
0000003991 00000 n
0000004110 00000 n
-0000078664 00000 n
-0000883901 00000 n
+0000079198 00000 n
+0000885172 00000 n
0000004168 00000 n
0000004287 00000 n
-0000082649 00000 n
-0000883777 00000 n
+0000083183 00000 n
+0000885048 00000 n
0000004340 00000 n
0000004554 00000 n
-0000082710 00000 n
-0000883703 00000 n
+0000083244 00000 n
+0000884974 00000 n
0000004612 00000 n
0000004764 00000 n
-0000082771 00000 n
-0000883629 00000 n
+0000083305 00000 n
+0000884900 00000 n
0000004822 00000 n
0000004989 00000 n
-0000089940 00000 n
-0000883542 00000 n
+0000090472 00000 n
+0000884813 00000 n
0000005042 00000 n
0000005244 00000 n
-0000094927 00000 n
-0000883415 00000 n
+0000095459 00000 n
+0000884686 00000 n
0000005297 00000 n
0000005505 00000 n
-0000094988 00000 n
-0000883337 00000 n
+0000095520 00000 n
+0000884608 00000 n
0000005564 00000 n
0000005742 00000 n
-0000098856 00000 n
-0000883245 00000 n
+0000099388 00000 n
+0000884516 00000 n
0000005801 00000 n
0000005994 00000 n
-0000098918 00000 n
-0000883153 00000 n
+0000099450 00000 n
+0000884424 00000 n
0000006053 00000 n
0000006266 00000 n
-0000098980 00000 n
-0000883061 00000 n
+0000099512 00000 n
+0000884332 00000 n
0000006325 00000 n
0000006513 00000 n
-0000102574 00000 n
-0000882983 00000 n
+0000103106 00000 n
+0000884254 00000 n
0000006572 00000 n
0000006785 00000 n
-0000108035 00000 n
-0000882853 00000 n
+0000108124 00000 n
+0000884124 00000 n
0000006839 00000 n
0000007048 00000 n
-0000108097 00000 n
-0000882774 00000 n
+0000108186 00000 n
+0000884045 00000 n
0000007107 00000 n
0000007430 00000 n
-0000108159 00000 n
-0000882681 00000 n
+0000108248 00000 n
+0000883952 00000 n
0000007489 00000 n
0000007866 00000 n
-0000111687 00000 n
-0000882602 00000 n
+0000112109 00000 n
+0000883873 00000 n
0000007925 00000 n
0000008322 00000 n
-0000117723 00000 n
-0000882510 00000 n
+0000117263 00000 n
+0000883781 00000 n
0000008376 00000 n
0000008633 00000 n
-0000117784 00000 n
-0000882432 00000 n
+0000117325 00000 n
+0000883703 00000 n
0000008687 00000 n
0000008794 00000 n
-0000117846 00000 n
-0000882339 00000 n
+0000117387 00000 n
+0000883610 00000 n
0000008843 00000 n
0000009009 00000 n
-0000121909 00000 n
-0000882206 00000 n
+0000122443 00000 n
+0000883477 00000 n
0000009058 00000 n
0000009140 00000 n
-0000121971 00000 n
-0000882127 00000 n
+0000122505 00000 n
+0000883398 00000 n
0000009194 00000 n
0000009319 00000 n
-0000122033 00000 n
-0000882034 00000 n
+0000122567 00000 n
+0000883305 00000 n
0000009373 00000 n
0000009597 00000 n
-0000126540 00000 n
-0000881941 00000 n
+0000126937 00000 n
+0000883212 00000 n
0000009651 00000 n
0000009817 00000 n
-0000131616 00000 n
-0000881848 00000 n
+0000132286 00000 n
+0000883119 00000 n
0000009871 00000 n
0000010111 00000 n
-0000134939 00000 n
-0000881769 00000 n
+0000136218 00000 n
+0000883040 00000 n
0000010165 00000 n
0000010308 00000 n
-0000139455 00000 n
-0000881636 00000 n
+0000140734 00000 n
+0000882907 00000 n
0000010357 00000 n
0000010652 00000 n
-0000139517 00000 n
-0000881557 00000 n
+0000140796 00000 n
+0000882828 00000 n
0000010706 00000 n
0000010859 00000 n
-0000143047 00000 n
-0000881464 00000 n
+0000144326 00000 n
+0000882735 00000 n
0000010913 00000 n
0000011061 00000 n
-0000146638 00000 n
-0000881371 00000 n
+0000147917 00000 n
+0000882642 00000 n
0000011115 00000 n
0000011305 00000 n
-0000150029 00000 n
-0000881278 00000 n
+0000151308 00000 n
+0000882549 00000 n
0000011359 00000 n
0000011497 00000 n
-0000152201 00000 n
-0000881185 00000 n
+0000153480 00000 n
+0000882456 00000 n
0000011551 00000 n
0000011729 00000 n
-0000154201 00000 n
-0000881106 00000 n
+0000155480 00000 n
+0000882377 00000 n
0000011783 00000 n
0000012060 00000 n
-0000158712 00000 n
-0000880973 00000 n
+0000159991 00000 n
+0000882244 00000 n
0000012110 00000 n
0000012227 00000 n
-0000158774 00000 n
-0000880894 00000 n
+0000160053 00000 n
+0000882165 00000 n
0000012282 00000 n
0000012399 00000 n
-0000162705 00000 n
-0000880761 00000 n
+0000163984 00000 n
+0000882032 00000 n
0000012454 00000 n
0000012691 00000 n
-0000162767 00000 n
-0000880682 00000 n
+0000164046 00000 n
+0000881953 00000 n
0000012751 00000 n
0000012957 00000 n
-0000180318 00000 n
-0000880589 00000 n
+0000182051 00000 n
+0000881860 00000 n
0000013017 00000 n
0000013273 00000 n
-0000199859 00000 n
-0000880496 00000 n
+0000201754 00000 n
+0000881767 00000 n
0000013333 00000 n
0000013550 00000 n
-0000220528 00000 n
-0000880403 00000 n
+0000220471 00000 n
+0000881674 00000 n
0000013610 00000 n
0000013737 00000 n
-0000247081 00000 n
-0000880310 00000 n
+0000249810 00000 n
+0000881581 00000 n
0000013797 00000 n
0000013996 00000 n
-0000248313 00000 n
-0000880217 00000 n
+0000250976 00000 n
+0000881488 00000 n
0000014056 00000 n
0000014324 00000 n
-0000252671 00000 n
-0000880124 00000 n
+0000255469 00000 n
+0000881395 00000 n
0000014384 00000 n
0000014740 00000 n
-0000308873 00000 n
-0000880031 00000 n
+0000311350 00000 n
+0000881302 00000 n
0000014800 00000 n
0000014920 00000 n
-0000320013 00000 n
-0000879938 00000 n
+0000322478 00000 n
+0000881209 00000 n
0000014980 00000 n
0000015143 00000 n
-0000325909 00000 n
-0000879845 00000 n
+0000328648 00000 n
+0000881116 00000 n
0000015204 00000 n
0000015427 00000 n
-0000335723 00000 n
-0000879752 00000 n
+0000335560 00000 n
+0000881023 00000 n
0000015488 00000 n
0000015600 00000 n
-0000336434 00000 n
-0000879659 00000 n
+0000338701 00000 n
+0000880930 00000 n
0000015661 00000 n
0000015913 00000 n
-0000350746 00000 n
-0000879566 00000 n
+0000353112 00000 n
+0000880837 00000 n
0000015974 00000 n
0000016137 00000 n
-0000354756 00000 n
-0000879487 00000 n
+0000354084 00000 n
+0000880758 00000 n
0000016198 00000 n
0000016358 00000 n
-0000356117 00000 n
-0000879369 00000 n
+0000359264 00000 n
+0000880639 00000 n
0000016413 00000 n
0000016655 00000 n
-0000393772 00000 n
-0000879290 00000 n
+0000363959 00000 n
+0000880560 00000 n
0000016715 00000 n
-0000016883 00000 n
-0000435167 00000 n
-0000879197 00000 n
-0000016943 00000 n
-0000017106 00000 n
-0000465155 00000 n
-0000879104 00000 n
-0000017166 00000 n
-0000017309 00000 n
-0000477452 00000 n
-0000879011 00000 n
-0000017369 00000 n
-0000017522 00000 n
-0000495129 00000 n
-0000878918 00000 n
-0000017582 00000 n
-0000017775 00000 n
-0000512527 00000 n
-0000878825 00000 n
-0000017835 00000 n
-0000018246 00000 n
-0000513174 00000 n
-0000878732 00000 n
-0000018306 00000 n
-0000018621 00000 n
-0000524998 00000 n
-0000878639 00000 n
-0000018681 00000 n
-0000018903 00000 n
-0000531630 00000 n
-0000878560 00000 n
-0000018963 00000 n
-0000019309 00000 n
-0000575224 00000 n
-0000878466 00000 n
-0000019359 00000 n
-0000019441 00000 n
-0000585853 00000 n
-0000878386 00000 n
-0000019485 00000 n
-0000019554 00000 n
-0000023057 00000 n
-0000023247 00000 n
-0000023558 00000 n
-0000023402 00000 n
+0000016969 00000 n
+0000396963 00000 n
+0000880467 00000 n
+0000017029 00000 n
+0000017197 00000 n
+0000439020 00000 n
+0000880374 00000 n
+0000017257 00000 n
+0000017420 00000 n
+0000468728 00000 n
+0000880281 00000 n
+0000017480 00000 n
+0000017623 00000 n
+0000481313 00000 n
+0000880188 00000 n
+0000017683 00000 n
+0000017836 00000 n
+0000499221 00000 n
+0000880095 00000 n
+0000017896 00000 n
+0000018089 00000 n
+0000516494 00000 n
+0000880002 00000 n
+0000018149 00000 n
+0000018560 00000 n
+0000517141 00000 n
+0000879909 00000 n
+0000018620 00000 n
+0000018935 00000 n
+0000528970 00000 n
+0000879816 00000 n
+0000018995 00000 n
+0000019217 00000 n
+0000535606 00000 n
+0000879737 00000 n
+0000019278 00000 n
+0000019629 00000 n
+0000579127 00000 n
+0000879643 00000 n
+0000019679 00000 n
+0000019761 00000 n
+0000582879 00000 n
+0000879563 00000 n
+0000019805 00000 n
+0000019874 00000 n
+0000023367 00000 n
+0000023557 00000 n
+0000023868 00000 n
+0000023712 00000 n
+0000024558 00000 n
+0000019938 00000 n
0000024248 00000 n
-0000019618 00000 n
-0000023938 00000 n
-0000024000 00000 n
-0000785985 00000 n
-0000783093 00000 n
-0000875028 00000 n
-0000780879 00000 n
-0000777205 00000 n
-0000773859 00000 n
-0000771227 00000 n
-0000764868 00000 n
-0000762755 00000 n
-0000754610 00000 n
-0000743649 00000 n
-0000739982 00000 n
-0000736879 00000 n
-0000726167 00000 n
-0000722216 00000 n
-0000875744 00000 n
-0000874306 00000 n
-0000874668 00000 n
-0000875920 00000 n
-0000875208 00000 n
-0000715529 00000 n
-0000706795 00000 n
-0000702560 00000 n
-0000024122 00000 n
-0000699450 00000 n
-0000695727 00000 n
-0000023750 00000 n
-0000024185 00000 n
-0000876267 00000 n
-0000023194 00000 n
-0000028848 00000 n
-0000029482 00000 n
-0000029004 00000 n
-0000029160 00000 n
-0000029321 00000 n
-0000034630 00000 n
-0000034791 00000 n
-0000030071 00000 n
-0000028650 00000 n
-0000024684 00000 n
-0000029642 00000 n
-0000688009 00000 n
-0000686220 00000 n
-0000030008 00000 n
-0000028787 00000 n
-0000034952 00000 n
-0000035108 00000 n
-0000041109 00000 n
-0000035513 00000 n
-0000034440 00000 n
-0000030325 00000 n
-0000035264 00000 n
-0000677253 00000 n
-0000035387 00000 n
-0000035450 00000 n
-0000034577 00000 n
-0000041264 00000 n
-0000042053 00000 n
-0000042208 00000 n
-0000041420 00000 n
-0000041575 00000 n
-0000041731 00000 n
-0000041892 00000 n
-0000042797 00000 n
-0000040887 00000 n
-0000035780 00000 n
+0000024310 00000 n
+0000787170 00000 n
+0000784278 00000 n
+0000876213 00000 n
+0000782064 00000 n
+0000778280 00000 n
+0000774934 00000 n
+0000772302 00000 n
+0000765943 00000 n
+0000763830 00000 n
+0000755685 00000 n
+0000744724 00000 n
+0000741057 00000 n
+0000737954 00000 n
+0000727242 00000 n
+0000723291 00000 n
+0000876929 00000 n
+0000875491 00000 n
+0000875853 00000 n
+0000877105 00000 n
+0000876393 00000 n
+0000716604 00000 n
+0000708047 00000 n
+0000703812 00000 n
+0000024432 00000 n
+0000700702 00000 n
+0000696979 00000 n
+0000024060 00000 n
+0000024495 00000 n
+0000877452 00000 n
+0000023504 00000 n
+0000029158 00000 n
+0000029792 00000 n
+0000029314 00000 n
+0000029470 00000 n
+0000029631 00000 n
+0000034940 00000 n
+0000035101 00000 n
+0000030381 00000 n
+0000028960 00000 n
+0000024994 00000 n
+0000029952 00000 n
+0000689261 00000 n
+0000687472 00000 n
+0000030318 00000 n
+0000029097 00000 n
+0000035262 00000 n
+0000035418 00000 n
+0000041419 00000 n
+0000035823 00000 n
+0000034750 00000 n
+0000030635 00000 n
+0000035574 00000 n
+0000678505 00000 n
+0000035697 00000 n
+0000035760 00000 n
+0000034887 00000 n
+0000041574 00000 n
0000042363 00000 n
-0000670492 00000 n
-0000042547 00000 n
-0000042610 00000 n
+0000042518 00000 n
+0000041730 00000 n
+0000041885 00000 n
+0000042041 00000 n
+0000042202 00000 n
+0000043107 00000 n
+0000041197 00000 n
+0000036090 00000 n
0000042673 00000 n
-0000042735 00000 n
-0000041024 00000 n
-0000047964 00000 n
-0000048124 00000 n
-0000048285 00000 n
-0000048450 00000 n
-0000048615 00000 n
-0000048772 00000 n
-0000048931 00000 n
-0000049090 00000 n
-0000049246 00000 n
-0000053482 00000 n
-0000053957 00000 n
-0000054122 00000 n
-0000049652 00000 n
-0000047734 00000 n
-0000043064 00000 n
-0000049402 00000 n
-0000667696 00000 n
-0000049464 00000 n
-0000049527 00000 n
-0000049590 00000 n
-0000047871 00000 n
-0000053639 00000 n
-0000053800 00000 n
-0000054597 00000 n
-0000053284 00000 n
-0000049919 00000 n
-0000054287 00000 n
-0000663960 00000 n
-0000054471 00000 n
-0000054534 00000 n
-0000053421 00000 n
-0000058873 00000 n
-0000059028 00000 n
-0000059184 00000 n
-0000059341 00000 n
-0000059742 00000 n
-0000058683 00000 n
-0000054864 00000 n
-0000059495 00000 n
-0000652434 00000 n
-0000059617 00000 n
-0000059680 00000 n
-0000058820 00000 n
-0000064187 00000 n
-0000064347 00000 n
-0000064504 00000 n
-0000065096 00000 n
-0000064005 00000 n
-0000060009 00000 n
-0000064660 00000 n
-0000064783 00000 n
-0000064847 00000 n
-0000064972 00000 n
-0000065034 00000 n
-0000064142 00000 n
-0000073034 00000 n
-0000068961 00000 n
-0000068717 00000 n
-0000065402 00000 n
-0000068838 00000 n
-0000078290 00000 n
-0000073496 00000 n
-0000072868 00000 n
-0000069202 00000 n
-0000073191 00000 n
-0000073433 00000 n
-0000073005 00000 n
-0000078446 00000 n
-0000078851 00000 n
-0000078116 00000 n
-0000073776 00000 n
-0000078602 00000 n
-0000078725 00000 n
-0000078788 00000 n
-0000876420 00000 n
-0000078253 00000 n
-0000082832 00000 n
-0000082466 00000 n
-0000079105 00000 n
-0000082587 00000 n
-0000089403 00000 n
-0000086172 00000 n
-0000085989 00000 n
-0000083086 00000 n
-0000086110 00000 n
-0000089560 00000 n
-0000089719 00000 n
-0000090064 00000 n
-0000089221 00000 n
-0000086374 00000 n
-0000089878 00000 n
-0000090001 00000 n
-0000089358 00000 n
-0000094065 00000 n
-0000094226 00000 n
-0000094387 00000 n
-0000094548 00000 n
-0000094709 00000 n
-0000095113 00000 n
-0000093867 00000 n
-0000090318 00000 n
-0000094865 00000 n
-0000095050 00000 n
-0000094004 00000 n
-0000099042 00000 n
-0000098673 00000 n
-0000095380 00000 n
-0000098794 00000 n
-0000102636 00000 n
-0000102391 00000 n
-0000099270 00000 n
-0000102512 00000 n
-0000107345 00000 n
-0000107502 00000 n
-0000107659 00000 n
-0000107816 00000 n
-0000108471 00000 n
-0000107155 00000 n
-0000102812 00000 n
-0000107973 00000 n
-0000875386 00000 n
-0000874487 00000 n
-0000108220 00000 n
-0000108283 00000 n
-0000108346 00000 n
-0000108409 00000 n
-0000107292 00000 n
-0000111749 00000 n
-0000111504 00000 n
-0000108829 00000 n
-0000111625 00000 n
-0000116529 00000 n
-0000116690 00000 n
-0000116851 00000 n
-0000117011 00000 n
-0000117177 00000 n
-0000117343 00000 n
-0000117502 00000 n
-0000117908 00000 n
-0000116315 00000 n
-0000111938 00000 n
-0000117661 00000 n
-0000116452 00000 n
-0000122095 00000 n
-0000121726 00000 n
-0000118110 00000 n
-0000121847 00000 n
-0000876573 00000 n
-0000125844 00000 n
-0000126005 00000 n
-0000126166 00000 n
-0000126321 00000 n
-0000126727 00000 n
-0000125654 00000 n
-0000122297 00000 n
-0000126478 00000 n
-0000126601 00000 n
-0000126664 00000 n
-0000125791 00000 n
-0000130458 00000 n
-0000130615 00000 n
-0000130772 00000 n
-0000130932 00000 n
-0000131092 00000 n
-0000131249 00000 n
-0000131739 00000 n
-0000130252 00000 n
-0000126968 00000 n
-0000131429 00000 n
-0000648876 00000 n
-0000131491 00000 n
-0000131553 00000 n
-0000131677 00000 n
-0000130389 00000 n
-0000134565 00000 n
-0000134721 00000 n
-0000135001 00000 n
-0000134391 00000 n
-0000132006 00000 n
-0000134877 00000 n
-0000646677 00000 n
-0000634504 00000 n
-0000619850 00000 n
-0000134528 00000 n
-0000139058 00000 n
-0000139215 00000 n
-0000139641 00000 n
-0000138884 00000 n
-0000135245 00000 n
-0000139393 00000 n
-0000139579 00000 n
-0000139021 00000 n
-0000143109 00000 n
-0000142864 00000 n
-0000139882 00000 n
-0000142985 00000 n
-0000146700 00000 n
-0000146455 00000 n
-0000143272 00000 n
-0000146576 00000 n
-0000150091 00000 n
-0000149846 00000 n
-0000146889 00000 n
-0000149967 00000 n
-0000151817 00000 n
-0000151978 00000 n
-0000152263 00000 n
-0000151643 00000 n
-0000150267 00000 n
-0000152139 00000 n
-0000151780 00000 n
-0000153983 00000 n
-0000154263 00000 n
-0000153817 00000 n
-0000152426 00000 n
-0000154139 00000 n
-0000153954 00000 n
-0000158025 00000 n
-0000158180 00000 n
-0000158336 00000 n
-0000158493 00000 n
-0000159087 00000 n
-0000157835 00000 n
-0000154426 00000 n
-0000158650 00000 n
-0000158835 00000 n
-0000158898 00000 n
-0000158961 00000 n
-0000159024 00000 n
-0000876726 00000 n
-0000157972 00000 n
-0000165091 00000 n
-0000162522 00000 n
-0000159380 00000 n
-0000162643 00000 n
-0000874161 00000 n
-0000162829 00000 n
-0000875564 00000 n
-0000876094 00000 n
-0000162892 00000 n
-0000162955 00000 n
-0000163018 00000 n
-0000163081 00000 n
-0000163143 00000 n
-0000163206 00000 n
-0000163269 00000 n
-0000163332 00000 n
-0000163395 00000 n
-0000163458 00000 n
-0000163520 00000 n
-0000163583 00000 n
-0000163646 00000 n
-0000163709 00000 n
-0000163772 00000 n
-0000163835 00000 n
-0000163898 00000 n
-0000163961 00000 n
-0000164024 00000 n
-0000164086 00000 n
-0000164149 00000 n
-0000164212 00000 n
-0000164275 00000 n
-0000164338 00000 n
-0000164401 00000 n
-0000164464 00000 n
-0000164527 00000 n
-0000164590 00000 n
-0000164653 00000 n
-0000164716 00000 n
-0000164779 00000 n
-0000164842 00000 n
-0000164905 00000 n
-0000164967 00000 n
-0000165029 00000 n
-0000170786 00000 n
-0000167648 00000 n
-0000165321 00000 n
-0000167769 00000 n
-0000167831 00000 n
-0000167894 00000 n
-0000167956 00000 n
-0000168019 00000 n
-0000168082 00000 n
-0000168145 00000 n
-0000168208 00000 n
-0000168271 00000 n
-0000168334 00000 n
-0000168397 00000 n
-0000168460 00000 n
-0000168523 00000 n
-0000168586 00000 n
-0000168649 00000 n
-0000168711 00000 n
-0000168774 00000 n
-0000168837 00000 n
-0000168900 00000 n
-0000168963 00000 n
-0000169026 00000 n
-0000169089 00000 n
-0000169152 00000 n
-0000169215 00000 n
-0000169278 00000 n
-0000169341 00000 n
-0000169404 00000 n
-0000169467 00000 n
-0000169530 00000 n
-0000169593 00000 n
-0000169656 00000 n
-0000169719 00000 n
-0000169782 00000 n
-0000169845 00000 n
-0000169908 00000 n
-0000169970 00000 n
-0000170033 00000 n
-0000170096 00000 n
-0000170159 00000 n
-0000170222 00000 n
-0000170285 00000 n
-0000170348 00000 n
-0000170411 00000 n
-0000170474 00000 n
-0000170536 00000 n
-0000170599 00000 n
-0000170662 00000 n
-0000170724 00000 n
-0000176419 00000 n
-0000173033 00000 n
-0000170949 00000 n
-0000173154 00000 n
-0000173216 00000 n
-0000173279 00000 n
-0000173341 00000 n
-0000173404 00000 n
-0000173467 00000 n
-0000173530 00000 n
-0000173593 00000 n
-0000173656 00000 n
-0000173719 00000 n
-0000173782 00000 n
-0000173845 00000 n
-0000173908 00000 n
-0000173971 00000 n
-0000174034 00000 n
-0000174097 00000 n
-0000174160 00000 n
-0000174223 00000 n
-0000174286 00000 n
-0000174349 00000 n
-0000174412 00000 n
-0000174475 00000 n
-0000174538 00000 n
-0000174601 00000 n
-0000174663 00000 n
-0000174726 00000 n
-0000174789 00000 n
-0000174852 00000 n
-0000174915 00000 n
-0000174978 00000 n
-0000175037 00000 n
-0000175100 00000 n
-0000175163 00000 n
-0000175226 00000 n
-0000175289 00000 n
-0000175352 00000 n
-0000175415 00000 n
-0000175478 00000 n
-0000175541 00000 n
-0000175603 00000 n
-0000175666 00000 n
-0000175729 00000 n
-0000175792 00000 n
-0000175855 00000 n
-0000175918 00000 n
-0000175980 00000 n
-0000176043 00000 n
-0000176106 00000 n
-0000176169 00000 n
-0000176232 00000 n
-0000176295 00000 n
-0000176357 00000 n
-0000181135 00000 n
-0000179380 00000 n
-0000176582 00000 n
-0000179501 00000 n
-0000179563 00000 n
-0000179626 00000 n
-0000179688 00000 n
-0000179751 00000 n
-0000179814 00000 n
-0000179877 00000 n
-0000179940 00000 n
-0000180003 00000 n
-0000180066 00000 n
-0000180129 00000 n
-0000180192 00000 n
-0000180255 00000 n
-0000180380 00000 n
-0000180443 00000 n
-0000180506 00000 n
-0000180569 00000 n
-0000180632 00000 n
-0000180695 00000 n
-0000180757 00000 n
-0000180820 00000 n
-0000180883 00000 n
-0000180946 00000 n
-0000181009 00000 n
-0000181072 00000 n
-0000185819 00000 n
-0000184317 00000 n
-0000181337 00000 n
-0000184438 00000 n
-0000184500 00000 n
-0000184563 00000 n
-0000184626 00000 n
-0000184689 00000 n
-0000184752 00000 n
-0000184815 00000 n
-0000184878 00000 n
-0000184941 00000 n
-0000185003 00000 n
-0000185064 00000 n
-0000185127 00000 n
-0000185190 00000 n
-0000185253 00000 n
-0000185316 00000 n
-0000185379 00000 n
-0000185441 00000 n
-0000185504 00000 n
-0000185567 00000 n
-0000185630 00000 n
-0000185693 00000 n
-0000185756 00000 n
-0000190528 00000 n
-0000189276 00000 n
-0000185995 00000 n
-0000189397 00000 n
-0000189459 00000 n
-0000189522 00000 n
-0000189585 00000 n
-0000189648 00000 n
-0000189711 00000 n
-0000189774 00000 n
-0000189837 00000 n
-0000189899 00000 n
-0000189962 00000 n
-0000190025 00000 n
-0000190088 00000 n
-0000190150 00000 n
-0000190213 00000 n
-0000190276 00000 n
-0000190339 00000 n
-0000190402 00000 n
-0000190465 00000 n
-0000195625 00000 n
-0000193053 00000 n
-0000190717 00000 n
-0000193174 00000 n
-0000193236 00000 n
-0000193299 00000 n
-0000193362 00000 n
-0000193425 00000 n
-0000193487 00000 n
-0000193550 00000 n
-0000193613 00000 n
-0000193676 00000 n
-0000193739 00000 n
-0000193802 00000 n
-0000193865 00000 n
-0000193928 00000 n
-0000193991 00000 n
-0000194054 00000 n
-0000194116 00000 n
-0000194179 00000 n
-0000194242 00000 n
-0000194305 00000 n
-0000194368 00000 n
-0000194431 00000 n
-0000194493 00000 n
-0000194556 00000 n
-0000194619 00000 n
-0000194682 00000 n
-0000194745 00000 n
-0000194808 00000 n
-0000194871 00000 n
-0000194933 00000 n
-0000194996 00000 n
-0000195059 00000 n
-0000195122 00000 n
-0000195185 00000 n
-0000195248 00000 n
-0000195311 00000 n
-0000195373 00000 n
-0000195436 00000 n
-0000195499 00000 n
-0000195562 00000 n
-0000201116 00000 n
-0000198858 00000 n
-0000195801 00000 n
-0000198979 00000 n
-0000199041 00000 n
-0000199104 00000 n
-0000199167 00000 n
-0000199230 00000 n
-0000199293 00000 n
-0000199356 00000 n
-0000199419 00000 n
-0000199482 00000 n
-0000199545 00000 n
-0000199608 00000 n
-0000199671 00000 n
-0000199734 00000 n
-0000199796 00000 n
-0000199921 00000 n
-0000199984 00000 n
-0000200047 00000 n
-0000200110 00000 n
-0000200172 00000 n
-0000200235 00000 n
-0000200298 00000 n
-0000200361 00000 n
-0000200424 00000 n
-0000200487 00000 n
-0000200550 00000 n
-0000200613 00000 n
-0000200676 00000 n
-0000200738 00000 n
-0000200801 00000 n
-0000200864 00000 n
-0000200927 00000 n
-0000200990 00000 n
-0000201053 00000 n
+0000671744 00000 n
+0000042857 00000 n
+0000042920 00000 n
+0000042983 00000 n
+0000043045 00000 n
+0000041334 00000 n
+0000048145 00000 n
+0000048305 00000 n
+0000048466 00000 n
+0000048632 00000 n
+0000048798 00000 n
+0000048955 00000 n
+0000049116 00000 n
+0000049277 00000 n
+0000053671 00000 n
+0000049622 00000 n
+0000047923 00000 n
+0000043374 00000 n
+0000049434 00000 n
+0000668948 00000 n
+0000049496 00000 n
+0000049559 00000 n
+0000048060 00000 n
+0000053828 00000 n
+0000054303 00000 n
+0000054467 00000 n
+0000053985 00000 n
+0000054146 00000 n
+0000055002 00000 n
+0000053465 00000 n
+0000049876 00000 n
+0000054631 00000 n
+0000665212 00000 n
+0000054815 00000 n
+0000054878 00000 n
+0000054940 00000 n
+0000053602 00000 n
+0000059398 00000 n
+0000059552 00000 n
+0000059707 00000 n
+0000059863 00000 n
+0000060266 00000 n
+0000059208 00000 n
+0000055269 00000 n
+0000060019 00000 n
+0000653686 00000 n
+0000060142 00000 n
+0000060204 00000 n
+0000059345 00000 n
+0000064718 00000 n
+0000064878 00000 n
+0000065035 00000 n
+0000065627 00000 n
+0000064536 00000 n
+0000060546 00000 n
+0000065191 00000 n
+0000065314 00000 n
+0000065378 00000 n
+0000065503 00000 n
+0000065565 00000 n
+0000064673 00000 n
+0000073568 00000 n
+0000069495 00000 n
+0000069251 00000 n
+0000065933 00000 n
+0000069372 00000 n
+0000078824 00000 n
+0000074030 00000 n
+0000073402 00000 n
+0000069736 00000 n
+0000073725 00000 n
+0000073967 00000 n
+0000073539 00000 n
+0000078980 00000 n
+0000079385 00000 n
+0000078650 00000 n
+0000074310 00000 n
+0000079136 00000 n
+0000079259 00000 n
+0000079322 00000 n
+0000877605 00000 n
+0000078787 00000 n
+0000083366 00000 n
+0000083000 00000 n
+0000079639 00000 n
+0000083121 00000 n
+0000089935 00000 n
+0000086705 00000 n
+0000086522 00000 n
+0000083620 00000 n
+0000086643 00000 n
+0000090092 00000 n
+0000090251 00000 n
+0000090596 00000 n
+0000089753 00000 n
+0000086907 00000 n
+0000090410 00000 n
+0000090533 00000 n
+0000089890 00000 n
+0000094597 00000 n
+0000094758 00000 n
+0000094919 00000 n
+0000095080 00000 n
+0000095241 00000 n
+0000095645 00000 n
+0000094399 00000 n
+0000090850 00000 n
+0000095397 00000 n
+0000095582 00000 n
+0000094536 00000 n
+0000099574 00000 n
+0000099205 00000 n
+0000095912 00000 n
+0000099326 00000 n
+0000103168 00000 n
+0000102923 00000 n
+0000099802 00000 n
+0000103044 00000 n
+0000107595 00000 n
+0000107749 00000 n
+0000107905 00000 n
+0000111891 00000 n
+0000108498 00000 n
+0000107413 00000 n
+0000103344 00000 n
+0000108062 00000 n
+0000876571 00000 n
+0000875672 00000 n
+0000108310 00000 n
+0000108373 00000 n
+0000108436 00000 n
+0000107550 00000 n
+0000112233 00000 n
+0000111725 00000 n
+0000108856 00000 n
+0000112047 00000 n
+0000112171 00000 n
+0000111862 00000 n
+0000116879 00000 n
+0000117040 00000 n
+0000121567 00000 n
+0000117449 00000 n
+0000116705 00000 n
+0000112474 00000 n
+0000117201 00000 n
+0000116842 00000 n
+0000121727 00000 n
+0000121893 00000 n
+0000122059 00000 n
+0000122220 00000 n
+0000122629 00000 n
+0000121369 00000 n
+0000117651 00000 n
+0000122381 00000 n
+0000877758 00000 n
+0000121506 00000 n
+0000126553 00000 n
+0000126714 00000 n
+0000126999 00000 n
+0000126379 00000 n
+0000122831 00000 n
+0000126875 00000 n
+0000126516 00000 n
+0000130812 00000 n
+0000130968 00000 n
+0000131125 00000 n
+0000131282 00000 n
+0000131439 00000 n
+0000131600 00000 n
+0000131761 00000 n
+0000131918 00000 n
+0000132535 00000 n
+0000130590 00000 n
+0000127201 00000 n
+0000132098 00000 n
+0000650128 00000 n
+0000132160 00000 n
+0000132223 00000 n
+0000132348 00000 n
+0000132411 00000 n
+0000132473 00000 n
+0000130727 00000 n
+0000135844 00000 n
+0000136000 00000 n
+0000136280 00000 n
+0000135670 00000 n
+0000132802 00000 n
+0000136156 00000 n
+0000647929 00000 n
+0000635756 00000 n
+0000621102 00000 n
+0000135807 00000 n
+0000140337 00000 n
+0000140494 00000 n
+0000140920 00000 n
+0000140163 00000 n
+0000136524 00000 n
+0000140672 00000 n
+0000140858 00000 n
+0000140300 00000 n
+0000144388 00000 n
+0000144143 00000 n
+0000141161 00000 n
+0000144264 00000 n
+0000147979 00000 n
+0000147734 00000 n
+0000144551 00000 n
+0000147855 00000 n
+0000151370 00000 n
+0000151125 00000 n
+0000148168 00000 n
+0000151246 00000 n
+0000153096 00000 n
+0000153257 00000 n
+0000153542 00000 n
+0000152922 00000 n
+0000151546 00000 n
+0000153418 00000 n
+0000153059 00000 n
+0000155262 00000 n
+0000155542 00000 n
+0000155096 00000 n
+0000153705 00000 n
+0000155418 00000 n
+0000155233 00000 n
+0000159304 00000 n
+0000159459 00000 n
+0000159615 00000 n
+0000159772 00000 n
+0000160366 00000 n
+0000159114 00000 n
+0000155705 00000 n
+0000159929 00000 n
+0000160114 00000 n
+0000160177 00000 n
+0000160240 00000 n
+0000160303 00000 n
+0000877911 00000 n
+0000159251 00000 n
+0000166370 00000 n
+0000163801 00000 n
+0000160659 00000 n
+0000163922 00000 n
+0000875346 00000 n
+0000164108 00000 n
+0000876749 00000 n
+0000877279 00000 n
+0000164171 00000 n
+0000164234 00000 n
+0000164297 00000 n
+0000164360 00000 n
+0000164422 00000 n
+0000164485 00000 n
+0000164548 00000 n
+0000164611 00000 n
+0000164674 00000 n
+0000164737 00000 n
+0000164799 00000 n
+0000164862 00000 n
+0000164925 00000 n
+0000164988 00000 n
+0000165051 00000 n
+0000165114 00000 n
+0000165177 00000 n
+0000165240 00000 n
+0000165303 00000 n
+0000165365 00000 n
+0000165428 00000 n
+0000165491 00000 n
+0000165554 00000 n
+0000165617 00000 n
+0000165680 00000 n
+0000165743 00000 n
+0000165806 00000 n
+0000165869 00000 n
+0000165932 00000 n
+0000165995 00000 n
+0000166058 00000 n
+0000166121 00000 n
+0000166184 00000 n
+0000166246 00000 n
+0000166308 00000 n
+0000172065 00000 n
+0000168927 00000 n
+0000166600 00000 n
+0000169048 00000 n
+0000169110 00000 n
+0000169173 00000 n
+0000169235 00000 n
+0000169298 00000 n
+0000169361 00000 n
+0000169424 00000 n
+0000169487 00000 n
+0000169550 00000 n
+0000169613 00000 n
+0000169676 00000 n
+0000169739 00000 n
+0000169802 00000 n
+0000169865 00000 n
+0000169928 00000 n
+0000169990 00000 n
+0000170053 00000 n
+0000170116 00000 n
+0000170179 00000 n
+0000170242 00000 n
+0000170305 00000 n
+0000170368 00000 n
+0000170431 00000 n
+0000170494 00000 n
+0000170557 00000 n
+0000170620 00000 n
+0000170683 00000 n
+0000170746 00000 n
+0000170809 00000 n
+0000170872 00000 n
+0000170935 00000 n
+0000170998 00000 n
+0000171061 00000 n
+0000171124 00000 n
+0000171187 00000 n
+0000171249 00000 n
+0000171312 00000 n
+0000171375 00000 n
+0000171438 00000 n
+0000171501 00000 n
+0000171564 00000 n
+0000171627 00000 n
+0000171690 00000 n
+0000171753 00000 n
+0000171815 00000 n
+0000171878 00000 n
+0000171941 00000 n
+0000172003 00000 n
+0000177698 00000 n
+0000174312 00000 n
+0000172228 00000 n
+0000174433 00000 n
+0000174495 00000 n
+0000174558 00000 n
+0000174620 00000 n
+0000174683 00000 n
+0000174746 00000 n
+0000174809 00000 n
+0000174872 00000 n
+0000174935 00000 n
+0000174998 00000 n
+0000175061 00000 n
+0000175124 00000 n
+0000175187 00000 n
+0000175250 00000 n
+0000175313 00000 n
+0000175376 00000 n
+0000175439 00000 n
+0000175502 00000 n
+0000175565 00000 n
+0000175628 00000 n
+0000175691 00000 n
+0000175754 00000 n
+0000175817 00000 n
+0000175880 00000 n
+0000175942 00000 n
+0000176005 00000 n
+0000176068 00000 n
+0000176131 00000 n
+0000176194 00000 n
+0000176257 00000 n
+0000176316 00000 n
+0000176379 00000 n
+0000176442 00000 n
+0000176505 00000 n
+0000176568 00000 n
+0000176631 00000 n
+0000176694 00000 n
+0000176757 00000 n
+0000176820 00000 n
+0000176882 00000 n
+0000176945 00000 n
+0000177008 00000 n
+0000177071 00000 n
+0000177134 00000 n
+0000177197 00000 n
+0000177259 00000 n
+0000177322 00000 n
+0000177385 00000 n
+0000177448 00000 n
+0000177511 00000 n
+0000177574 00000 n
+0000177636 00000 n
+0000182868 00000 n
+0000180863 00000 n
+0000177861 00000 n
+0000180984 00000 n
+0000181046 00000 n
+0000181109 00000 n
+0000181171 00000 n
+0000181234 00000 n
+0000181297 00000 n
+0000181360 00000 n
+0000181423 00000 n
+0000181485 00000 n
+0000181548 00000 n
+0000181611 00000 n
+0000181674 00000 n
+0000181737 00000 n
+0000181800 00000 n
+0000181863 00000 n
+0000181926 00000 n
+0000181989 00000 n
+0000182113 00000 n
+0000182176 00000 n
+0000182239 00000 n
+0000182302 00000 n
+0000182365 00000 n
+0000182428 00000 n
+0000182491 00000 n
+0000182554 00000 n
+0000182617 00000 n
+0000182680 00000 n
+0000182743 00000 n
+0000182806 00000 n
+0000187552 00000 n
+0000186050 00000 n
+0000183070 00000 n
+0000186171 00000 n
+0000186233 00000 n
+0000186296 00000 n
+0000186359 00000 n
+0000186422 00000 n
+0000186485 00000 n
+0000186548 00000 n
+0000186611 00000 n
+0000186674 00000 n
+0000186736 00000 n
+0000186797 00000 n
+0000186860 00000 n
+0000186923 00000 n
+0000186986 00000 n
+0000187049 00000 n
+0000187112 00000 n
+0000187174 00000 n
+0000187237 00000 n
+0000187300 00000 n
+0000187363 00000 n
+0000187426 00000 n
+0000187489 00000 n
+0000192884 00000 n
+0000191194 00000 n
+0000187728 00000 n
+0000191315 00000 n
+0000191377 00000 n
+0000191440 00000 n
+0000191503 00000 n
+0000191566 00000 n
+0000191629 00000 n
+0000191692 00000 n
+0000191755 00000 n
+0000191817 00000 n
+0000191880 00000 n
+0000191943 00000 n
+0000192005 00000 n
+0000192068 00000 n
+0000192130 00000 n
+0000192193 00000 n
+0000192256 00000 n
+0000192319 00000 n
+0000192382 00000 n
+0000192445 00000 n
+0000192508 00000 n
+0000192571 00000 n
+0000192634 00000 n
+0000192696 00000 n
+0000192759 00000 n
+0000192822 00000 n
+0000198250 00000 n
+0000195992 00000 n
+0000193073 00000 n
+0000196113 00000 n
+0000196175 00000 n
+0000196238 00000 n
+0000196301 00000 n
+0000196364 00000 n
+0000196427 00000 n
+0000196490 00000 n
+0000196553 00000 n
+0000196616 00000 n
+0000196679 00000 n
+0000196742 00000 n
+0000196805 00000 n
+0000196868 00000 n
+0000196931 00000 n
+0000196994 00000 n
+0000197057 00000 n
+0000197120 00000 n
+0000197183 00000 n
+0000197246 00000 n
+0000197308 00000 n
+0000197371 00000 n
+0000197434 00000 n
+0000197497 00000 n
+0000197560 00000 n
+0000197623 00000 n
+0000197686 00000 n
+0000197749 00000 n
+0000197811 00000 n
+0000197874 00000 n
+0000197937 00000 n
+0000198000 00000 n
+0000198062 00000 n
+0000198125 00000 n
+0000198188 00000 n
+0000203828 00000 n
+0000201067 00000 n
+0000198439 00000 n
+0000201188 00000 n
+0000201250 00000 n
+0000201313 00000 n
+0000201376 00000 n
+0000201439 00000 n
+0000201502 00000 n
+0000201565 00000 n
+0000201628 00000 n
+0000201691 00000 n
+0000201816 00000 n
+0000201879 00000 n
+0000201942 00000 n
+0000202005 00000 n
+0000202068 00000 n
+0000202131 00000 n
+0000202194 00000 n
+0000202257 00000 n
+0000202320 00000 n
+0000202382 00000 n
+0000202445 00000 n
+0000202508 00000 n
+0000202571 00000 n
+0000202634 00000 n
+0000202697 00000 n
+0000202760 00000 n
+0000202823 00000 n
+0000202885 00000 n
+0000202948 00000 n
+0000203011 00000 n
+0000203074 00000 n
+0000203137 00000 n
+0000203200 00000 n
+0000203263 00000 n
+0000203326 00000 n
+0000203389 00000 n
+0000203452 00000 n
+0000203515 00000 n
+0000203578 00000 n
+0000203641 00000 n
+0000203704 00000 n
+0000203766 00000 n
+0000209985 00000 n
+0000206528 00000 n
+0000204004 00000 n
+0000206649 00000 n
+0000206711 00000 n
+0000206774 00000 n
+0000206836 00000 n
+0000206899 00000 n
+0000206962 00000 n
+0000207025 00000 n
+0000207088 00000 n
0000207151 00000 n
-0000203577 00000 n
-0000201318 00000 n
-0000203698 00000 n
-0000203760 00000 n
-0000203823 00000 n
-0000203885 00000 n
-0000203948 00000 n
-0000204011 00000 n
-0000204074 00000 n
-0000204137 00000 n
-0000204200 00000 n
-0000204263 00000 n
-0000204326 00000 n
-0000204389 00000 n
-0000204452 00000 n
-0000204515 00000 n
-0000204578 00000 n
-0000204640 00000 n
-0000204703 00000 n
-0000204764 00000 n
-0000204827 00000 n
-0000204890 00000 n
-0000204953 00000 n
-0000205016 00000 n
-0000205079 00000 n
-0000205142 00000 n
-0000205205 00000 n
-0000205268 00000 n
-0000205330 00000 n
-0000205393 00000 n
-0000205456 00000 n
-0000205519 00000 n
-0000205582 00000 n
-0000205645 00000 n
-0000205708 00000 n
-0000205771 00000 n
-0000205834 00000 n
-0000205896 00000 n
-0000205959 00000 n
-0000206022 00000 n
-0000206084 00000 n
-0000206147 00000 n
-0000206209 00000 n
-0000206272 00000 n
-0000206335 00000 n
-0000206398 00000 n
-0000206461 00000 n
-0000206524 00000 n
-0000206587 00000 n
-0000206650 00000 n
-0000206713 00000 n
-0000206776 00000 n
-0000206838 00000 n
-0000206901 00000 n
-0000206964 00000 n
-0000207027 00000 n
-0000207089 00000 n
-0000210421 00000 n
-0000210581 00000 n
-0000212844 00000 n
-0000210244 00000 n
-0000207314 00000 n
-0000210742 00000 n
-0000210804 00000 n
-0000210867 00000 n
-0000210929 00000 n
-0000210992 00000 n
-0000211055 00000 n
-0000211118 00000 n
-0000211181 00000 n
-0000211245 00000 n
-0000211309 00000 n
-0000211373 00000 n
-0000211437 00000 n
-0000211501 00000 n
-0000211565 00000 n
-0000211629 00000 n
-0000211693 00000 n
-0000211756 00000 n
-0000211820 00000 n
-0000211884 00000 n
-0000211948 00000 n
-0000212012 00000 n
-0000212076 00000 n
-0000212140 00000 n
-0000212204 00000 n
-0000212268 00000 n
-0000212332 00000 n
-0000212396 00000 n
-0000212460 00000 n
-0000212524 00000 n
-0000212588 00000 n
-0000212652 00000 n
-0000212716 00000 n
-0000212780 00000 n
-0000876879 00000 n
-0000210383 00000 n
-0000218471 00000 n
+0000207213 00000 n
+0000207276 00000 n
+0000207339 00000 n
+0000207402 00000 n
+0000207465 00000 n
+0000207528 00000 n
+0000207591 00000 n
+0000207654 00000 n
+0000207717 00000 n
+0000207779 00000 n
+0000207842 00000 n
+0000207905 00000 n
+0000207968 00000 n
+0000208031 00000 n
+0000208094 00000 n
+0000208156 00000 n
+0000208219 00000 n
+0000208282 00000 n
+0000208345 00000 n
+0000208408 00000 n
+0000208471 00000 n
+0000208533 00000 n
+0000208596 00000 n
+0000208659 00000 n
+0000208722 00000 n
+0000208785 00000 n
+0000208848 00000 n
+0000208911 00000 n
+0000208974 00000 n
+0000209037 00000 n
+0000209099 00000 n
+0000209162 00000 n
+0000209225 00000 n
+0000209288 00000 n
+0000209351 00000 n
+0000209414 00000 n
+0000209477 00000 n
+0000209540 00000 n
+0000209603 00000 n
+0000209666 00000 n
+0000209730 00000 n
+0000209794 00000 n
+0000209858 00000 n
+0000209922 00000 n
+0000213092 00000 n
+0000213253 00000 n
+0000216073 00000 n
+0000212910 00000 n
+0000210148 00000 n
+0000213415 00000 n
+0000213479 00000 n
+0000213544 00000 n
+0000213609 00000 n
+0000213674 00000 n
+0000213739 00000 n
+0000213803 00000 n
+0000213868 00000 n
+0000213933 00000 n
+0000213998 00000 n
+0000214063 00000 n
+0000214128 00000 n
+0000214193 00000 n
+0000214258 00000 n
+0000214323 00000 n
+0000214387 00000 n
+0000214452 00000 n
+0000214517 00000 n
+0000214582 00000 n
+0000214647 00000 n
+0000214712 00000 n
+0000214777 00000 n
+0000214841 00000 n
0000214906 00000 n
-0000213007 00000 n
-0000215031 00000 n
-0000215095 00000 n
-0000215160 00000 n
-0000215225 00000 n
-0000215290 00000 n
-0000215354 00000 n
-0000215419 00000 n
-0000215484 00000 n
-0000215549 00000 n
-0000215614 00000 n
-0000215679 00000 n
-0000215744 00000 n
-0000215809 00000 n
-0000215874 00000 n
-0000215939 00000 n
-0000216004 00000 n
-0000216069 00000 n
-0000216134 00000 n
-0000216199 00000 n
-0000216262 00000 n
-0000216327 00000 n
-0000216392 00000 n
-0000216457 00000 n
-0000216522 00000 n
-0000216587 00000 n
-0000216652 00000 n
-0000216717 00000 n
-0000216782 00000 n
-0000216847 00000 n
-0000216912 00000 n
-0000216977 00000 n
-0000217042 00000 n
-0000217107 00000 n
-0000217172 00000 n
-0000217237 00000 n
-0000217301 00000 n
-0000217366 00000 n
-0000217431 00000 n
-0000217496 00000 n
-0000217561 00000 n
-0000217626 00000 n
-0000217691 00000 n
-0000217756 00000 n
-0000217821 00000 n
-0000217886 00000 n
-0000217951 00000 n
-0000218016 00000 n
-0000218081 00000 n
-0000218146 00000 n
-0000218211 00000 n
-0000218276 00000 n
-0000218341 00000 n
-0000218406 00000 n
-0000224416 00000 n
-0000220339 00000 n
-0000218635 00000 n
-0000220464 00000 n
-0000220591 00000 n
-0000220656 00000 n
-0000220721 00000 n
-0000220786 00000 n
-0000220851 00000 n
-0000220916 00000 n
-0000220981 00000 n
-0000221045 00000 n
-0000221110 00000 n
-0000221175 00000 n
-0000221240 00000 n
-0000221305 00000 n
-0000221370 00000 n
-0000221435 00000 n
-0000221500 00000 n
-0000221565 00000 n
-0000221630 00000 n
-0000221693 00000 n
-0000221758 00000 n
-0000221823 00000 n
-0000221888 00000 n
-0000221953 00000 n
-0000222018 00000 n
-0000222083 00000 n
-0000222148 00000 n
-0000222213 00000 n
-0000222278 00000 n
-0000222342 00000 n
-0000222407 00000 n
-0000222472 00000 n
-0000222537 00000 n
-0000222602 00000 n
-0000222667 00000 n
-0000222732 00000 n
-0000222797 00000 n
-0000222862 00000 n
-0000222927 00000 n
-0000222991 00000 n
-0000223056 00000 n
-0000223121 00000 n
-0000223186 00000 n
-0000223251 00000 n
-0000223316 00000 n
-0000223381 00000 n
-0000223446 00000 n
-0000223511 00000 n
-0000223574 00000 n
-0000223639 00000 n
-0000223704 00000 n
-0000223769 00000 n
-0000223834 00000 n
-0000223899 00000 n
-0000223964 00000 n
-0000224029 00000 n
-0000224094 00000 n
-0000224158 00000 n
-0000224223 00000 n
-0000224288 00000 n
-0000224352 00000 n
-0000230474 00000 n
-0000226720 00000 n
-0000224580 00000 n
-0000226845 00000 n
-0000226909 00000 n
-0000226974 00000 n
-0000227038 00000 n
-0000227103 00000 n
-0000227168 00000 n
-0000227233 00000 n
-0000227298 00000 n
-0000227363 00000 n
-0000227428 00000 n
-0000227493 00000 n
-0000227558 00000 n
-0000227622 00000 n
-0000227687 00000 n
-0000227752 00000 n
-0000227817 00000 n
-0000227882 00000 n
-0000227947 00000 n
-0000228011 00000 n
-0000228076 00000 n
+0000214971 00000 n
+0000215036 00000 n
+0000215101 00000 n
+0000215166 00000 n
+0000215231 00000 n
+0000215296 00000 n
+0000215360 00000 n
+0000215425 00000 n
+0000215490 00000 n
+0000215555 00000 n
+0000215620 00000 n
+0000215685 00000 n
+0000215750 00000 n
+0000215815 00000 n
+0000215880 00000 n
+0000215945 00000 n
+0000216009 00000 n
+0000878064 00000 n
+0000213052 00000 n
+0000221896 00000 n
+0000218140 00000 n
+0000216237 00000 n
+0000218265 00000 n
+0000218329 00000 n
+0000218394 00000 n
+0000218458 00000 n
+0000218523 00000 n
+0000218588 00000 n
+0000218653 00000 n
+0000218718 00000 n
+0000218783 00000 n
+0000218848 00000 n
+0000218913 00000 n
+0000218978 00000 n
+0000219043 00000 n
+0000219108 00000 n
+0000219173 00000 n
+0000219238 00000 n
+0000219302 00000 n
+0000219367 00000 n
+0000219432 00000 n
+0000219497 00000 n
+0000219562 00000 n
+0000219627 00000 n
+0000219692 00000 n
+0000219757 00000 n
+0000219822 00000 n
+0000219886 00000 n
+0000219951 00000 n
+0000220016 00000 n
+0000220081 00000 n
+0000220146 00000 n
+0000220211 00000 n
+0000220276 00000 n
+0000220341 00000 n
+0000220406 00000 n
+0000220534 00000 n
+0000220599 00000 n
+0000220664 00000 n
+0000220729 00000 n
+0000220794 00000 n
+0000220859 00000 n
+0000220924 00000 n
+0000220989 00000 n
+0000221054 00000 n
+0000221119 00000 n
+0000221183 00000 n
+0000221248 00000 n
+0000221313 00000 n
+0000221378 00000 n
+0000221443 00000 n
+0000221508 00000 n
+0000221573 00000 n
+0000221638 00000 n
+0000221703 00000 n
+0000221768 00000 n
+0000221832 00000 n
+0000227977 00000 n
+0000223896 00000 n
+0000222060 00000 n
+0000224021 00000 n
+0000224085 00000 n
+0000224150 00000 n
+0000224214 00000 n
+0000224279 00000 n
+0000224344 00000 n
+0000224409 00000 n
+0000224474 00000 n
+0000224539 00000 n
+0000224604 00000 n
+0000224669 00000 n
+0000224734 00000 n
+0000224798 00000 n
+0000224863 00000 n
+0000224928 00000 n
+0000224993 00000 n
+0000225058 00000 n
+0000225123 00000 n
+0000225188 00000 n
+0000225253 00000 n
+0000225318 00000 n
+0000225382 00000 n
+0000225447 00000 n
+0000225512 00000 n
+0000225577 00000 n
+0000225642 00000 n
+0000225707 00000 n
+0000225772 00000 n
+0000225837 00000 n
+0000225902 00000 n
+0000225966 00000 n
+0000226031 00000 n
+0000226096 00000 n
+0000226161 00000 n
+0000226226 00000 n
+0000226291 00000 n
+0000226356 00000 n
+0000226421 00000 n
+0000226486 00000 n
+0000226550 00000 n
+0000226615 00000 n
+0000226680 00000 n
+0000226745 00000 n
+0000226810 00000 n
+0000226875 00000 n
+0000226940 00000 n
+0000227005 00000 n
+0000227070 00000 n
+0000227134 00000 n
+0000227199 00000 n
+0000227264 00000 n
+0000227329 00000 n
+0000227394 00000 n
+0000227459 00000 n
+0000227524 00000 n
+0000227589 00000 n
+0000227654 00000 n
+0000227718 00000 n
+0000227783 00000 n
+0000227848 00000 n
+0000227913 00000 n
+0000234147 00000 n
+0000230325 00000 n
0000228141 00000 n
-0000228205 00000 n
-0000228270 00000 n
-0000228335 00000 n
-0000228400 00000 n
-0000228465 00000 n
-0000228530 00000 n
-0000228595 00000 n
-0000228659 00000 n
-0000228724 00000 n
-0000228789 00000 n
-0000228854 00000 n
-0000228919 00000 n
-0000228984 00000 n
-0000229049 00000 n
-0000229114 00000 n
-0000229179 00000 n
-0000229243 00000 n
-0000229308 00000 n
-0000229373 00000 n
-0000229438 00000 n
-0000229503 00000 n
-0000229568 00000 n
-0000229633 00000 n
-0000229698 00000 n
-0000229763 00000 n
-0000229827 00000 n
-0000229892 00000 n
-0000229957 00000 n
-0000230022 00000 n
-0000230087 00000 n
-0000230152 00000 n
-0000230216 00000 n
-0000230281 00000 n
-0000230346 00000 n
-0000230410 00000 n
-0000236951 00000 n
-0000232807 00000 n
-0000230651 00000 n
-0000232932 00000 n
-0000232996 00000 n
-0000233061 00000 n
-0000233125 00000 n
-0000233190 00000 n
-0000233255 00000 n
-0000233320 00000 n
-0000233385 00000 n
-0000233450 00000 n
-0000233515 00000 n
-0000233580 00000 n
-0000233643 00000 n
-0000233708 00000 n
-0000233773 00000 n
-0000233838 00000 n
-0000233903 00000 n
-0000233968 00000 n
-0000234033 00000 n
-0000234098 00000 n
-0000234163 00000 n
-0000234227 00000 n
-0000234292 00000 n
-0000234357 00000 n
-0000234422 00000 n
-0000234487 00000 n
-0000234552 00000 n
-0000234617 00000 n
-0000234682 00000 n
-0000234747 00000 n
-0000234811 00000 n
-0000234876 00000 n
-0000234941 00000 n
-0000235006 00000 n
-0000235071 00000 n
-0000235136 00000 n
-0000235201 00000 n
-0000235266 00000 n
-0000235331 00000 n
-0000235395 00000 n
-0000235460 00000 n
-0000235525 00000 n
-0000235590 00000 n
-0000235655 00000 n
-0000235720 00000 n
-0000235785 00000 n
-0000235850 00000 n
-0000235915 00000 n
-0000235979 00000 n
-0000236044 00000 n
-0000236109 00000 n
-0000236174 00000 n
-0000236239 00000 n
-0000236304 00000 n
-0000236369 00000 n
-0000236434 00000 n
-0000236499 00000 n
-0000236564 00000 n
-0000236628 00000 n
-0000236693 00000 n
-0000236758 00000 n
-0000236823 00000 n
-0000236887 00000 n
-0000243308 00000 n
-0000239032 00000 n
-0000237115 00000 n
-0000239157 00000 n
-0000239221 00000 n
-0000239286 00000 n
-0000239350 00000 n
-0000239415 00000 n
-0000239480 00000 n
-0000239545 00000 n
-0000239610 00000 n
-0000239675 00000 n
-0000239740 00000 n
-0000239805 00000 n
-0000239870 00000 n
-0000239934 00000 n
-0000239999 00000 n
-0000240064 00000 n
-0000240129 00000 n
-0000240194 00000 n
-0000240259 00000 n
-0000240324 00000 n
-0000240389 00000 n
-0000240454 00000 n
-0000240518 00000 n
-0000240583 00000 n
-0000240648 00000 n
-0000240713 00000 n
-0000240778 00000 n
-0000240843 00000 n
-0000240908 00000 n
-0000240973 00000 n
-0000241038 00000 n
-0000241102 00000 n
-0000241167 00000 n
-0000241232 00000 n
-0000241297 00000 n
-0000241362 00000 n
-0000241427 00000 n
-0000241492 00000 n
-0000241557 00000 n
-0000241622 00000 n
-0000241686 00000 n
-0000241751 00000 n
-0000241816 00000 n
-0000241881 00000 n
-0000241946 00000 n
-0000242011 00000 n
-0000242076 00000 n
-0000242141 00000 n
-0000242206 00000 n
-0000242270 00000 n
-0000242335 00000 n
-0000242400 00000 n
-0000242465 00000 n
-0000242530 00000 n
-0000242595 00000 n
-0000242660 00000 n
-0000242725 00000 n
-0000242790 00000 n
-0000242854 00000 n
-0000242919 00000 n
-0000242984 00000 n
-0000243049 00000 n
-0000243114 00000 n
-0000243179 00000 n
-0000243244 00000 n
-0000248827 00000 n
-0000245661 00000 n
-0000243459 00000 n
-0000245786 00000 n
-0000245850 00000 n
-0000245915 00000 n
-0000245979 00000 n
-0000246044 00000 n
-0000246109 00000 n
-0000246174 00000 n
-0000246239 00000 n
-0000246304 00000 n
-0000246368 00000 n
-0000246433 00000 n
-0000246498 00000 n
-0000246563 00000 n
-0000246628 00000 n
-0000246693 00000 n
-0000246758 00000 n
-0000246823 00000 n
-0000246888 00000 n
-0000246953 00000 n
-0000247018 00000 n
-0000247144 00000 n
-0000247209 00000 n
-0000247274 00000 n
-0000247339 00000 n
-0000247404 00000 n
-0000247469 00000 n
-0000247534 00000 n
-0000247599 00000 n
-0000247664 00000 n
-0000247729 00000 n
-0000247793 00000 n
-0000247858 00000 n
-0000247923 00000 n
-0000247988 00000 n
-0000248053 00000 n
-0000248118 00000 n
-0000248183 00000 n
-0000248248 00000 n
-0000248375 00000 n
-0000248440 00000 n
-0000248505 00000 n
-0000248569 00000 n
-0000248634 00000 n
-0000248699 00000 n
-0000248763 00000 n
-0000254420 00000 n
-0000251509 00000 n
-0000249004 00000 n
-0000251634 00000 n
-0000251698 00000 n
-0000251763 00000 n
-0000251827 00000 n
-0000251892 00000 n
-0000251957 00000 n
-0000252022 00000 n
-0000252087 00000 n
-0000252152 00000 n
-0000252217 00000 n
-0000252282 00000 n
-0000252347 00000 n
-0000252412 00000 n
-0000252477 00000 n
-0000252542 00000 n
-0000252607 00000 n
-0000252734 00000 n
-0000252799 00000 n
-0000252864 00000 n
-0000252929 00000 n
-0000252992 00000 n
-0000253057 00000 n
-0000253122 00000 n
-0000253187 00000 n
-0000253252 00000 n
-0000253317 00000 n
-0000253382 00000 n
-0000253447 00000 n
-0000253512 00000 n
-0000253576 00000 n
-0000253641 00000 n
-0000253706 00000 n
-0000253771 00000 n
-0000253836 00000 n
-0000253901 00000 n
-0000253966 00000 n
-0000254031 00000 n
-0000254096 00000 n
-0000254160 00000 n
-0000254225 00000 n
-0000254290 00000 n
-0000254355 00000 n
-0000260239 00000 n
-0000257586 00000 n
-0000254610 00000 n
-0000257711 00000 n
-0000257775 00000 n
-0000257840 00000 n
-0000257904 00000 n
-0000257969 00000 n
-0000258034 00000 n
-0000258099 00000 n
-0000258164 00000 n
-0000258229 00000 n
-0000258294 00000 n
-0000258359 00000 n
-0000258423 00000 n
-0000258488 00000 n
-0000258553 00000 n
-0000258618 00000 n
-0000258683 00000 n
-0000258748 00000 n
-0000258813 00000 n
-0000258878 00000 n
-0000258943 00000 n
-0000259008 00000 n
-0000259073 00000 n
-0000259138 00000 n
-0000259203 00000 n
-0000259268 00000 n
-0000259333 00000 n
-0000259398 00000 n
-0000259463 00000 n
-0000259528 00000 n
-0000259593 00000 n
-0000259658 00000 n
-0000259723 00000 n
-0000259786 00000 n
-0000259851 00000 n
-0000259916 00000 n
-0000259981 00000 n
-0000260046 00000 n
-0000260111 00000 n
-0000260175 00000 n
-0000266376 00000 n
-0000262684 00000 n
-0000260416 00000 n
-0000262809 00000 n
-0000262873 00000 n
-0000262938 00000 n
-0000263002 00000 n
-0000263067 00000 n
-0000263132 00000 n
-0000263197 00000 n
-0000263262 00000 n
-0000263327 00000 n
-0000263392 00000 n
-0000263457 00000 n
-0000263522 00000 n
-0000263586 00000 n
-0000263651 00000 n
-0000263716 00000 n
-0000263781 00000 n
-0000263845 00000 n
-0000263910 00000 n
-0000263975 00000 n
-0000264040 00000 n
-0000264105 00000 n
-0000264170 00000 n
-0000264235 00000 n
-0000264300 00000 n
-0000264364 00000 n
-0000264429 00000 n
-0000264494 00000 n
-0000264559 00000 n
-0000264624 00000 n
-0000264689 00000 n
-0000264754 00000 n
-0000264819 00000 n
-0000264884 00000 n
-0000264948 00000 n
-0000265013 00000 n
-0000265078 00000 n
-0000265143 00000 n
-0000265208 00000 n
-0000265273 00000 n
-0000265338 00000 n
-0000265403 00000 n
-0000265468 00000 n
-0000265533 00000 n
-0000265598 00000 n
-0000265663 00000 n
-0000265728 00000 n
-0000265793 00000 n
-0000265858 00000 n
-0000265923 00000 n
-0000265988 00000 n
-0000266053 00000 n
-0000266118 00000 n
-0000266183 00000 n
-0000266248 00000 n
-0000266312 00000 n
-0000272344 00000 n
-0000268587 00000 n
-0000266540 00000 n
-0000268712 00000 n
-0000268776 00000 n
-0000268841 00000 n
-0000268905 00000 n
-0000268970 00000 n
-0000269035 00000 n
-0000269100 00000 n
-0000269165 00000 n
-0000269230 00000 n
-0000269295 00000 n
-0000269360 00000 n
-0000269425 00000 n
-0000269489 00000 n
-0000269554 00000 n
-0000269619 00000 n
-0000269684 00000 n
-0000269749 00000 n
-0000269814 00000 n
-0000269879 00000 n
-0000269944 00000 n
-0000270009 00000 n
-0000270074 00000 n
-0000270139 00000 n
-0000270204 00000 n
-0000270269 00000 n
-0000270333 00000 n
-0000270398 00000 n
-0000270463 00000 n
-0000270528 00000 n
-0000270593 00000 n
-0000270658 00000 n
-0000270723 00000 n
-0000270788 00000 n
-0000270853 00000 n
-0000270917 00000 n
-0000270982 00000 n
-0000271047 00000 n
-0000271112 00000 n
-0000271177 00000 n
-0000271242 00000 n
-0000271307 00000 n
-0000271372 00000 n
-0000271437 00000 n
-0000271501 00000 n
-0000271566 00000 n
-0000271631 00000 n
-0000271696 00000 n
-0000271761 00000 n
-0000271826 00000 n
-0000271891 00000 n
-0000271956 00000 n
-0000272021 00000 n
-0000272086 00000 n
-0000272151 00000 n
-0000272216 00000 n
-0000272281 00000 n
-0000877042 00000 n
-0000282008 00000 n
-0000278345 00000 n
+0000230450 00000 n
+0000230514 00000 n
+0000230579 00000 n
+0000230644 00000 n
+0000230709 00000 n
+0000230774 00000 n
+0000230839 00000 n
+0000230904 00000 n
+0000230969 00000 n
+0000231034 00000 n
+0000231099 00000 n
+0000231164 00000 n
+0000231229 00000 n
+0000231294 00000 n
+0000231359 00000 n
+0000231424 00000 n
+0000231489 00000 n
+0000231554 00000 n
+0000231619 00000 n
+0000231684 00000 n
+0000231749 00000 n
+0000231813 00000 n
+0000231878 00000 n
+0000231943 00000 n
+0000232008 00000 n
+0000232073 00000 n
+0000232138 00000 n
+0000232203 00000 n
+0000232268 00000 n
+0000232333 00000 n
+0000232396 00000 n
+0000232461 00000 n
+0000232526 00000 n
+0000232591 00000 n
+0000232656 00000 n
+0000232721 00000 n
+0000232786 00000 n
+0000232851 00000 n
+0000232916 00000 n
+0000232981 00000 n
+0000233046 00000 n
+0000233111 00000 n
+0000233176 00000 n
+0000233241 00000 n
+0000233306 00000 n
+0000233371 00000 n
+0000233436 00000 n
+0000233501 00000 n
+0000233565 00000 n
+0000233630 00000 n
+0000233695 00000 n
+0000233760 00000 n
+0000233825 00000 n
+0000233890 00000 n
+0000233955 00000 n
+0000234020 00000 n
+0000234083 00000 n
+0000240468 00000 n
+0000236192 00000 n
+0000234311 00000 n
+0000236317 00000 n
+0000236381 00000 n
+0000236446 00000 n
+0000236510 00000 n
+0000236575 00000 n
+0000236640 00000 n
+0000236705 00000 n
+0000236770 00000 n
+0000236835 00000 n
+0000236900 00000 n
+0000236965 00000 n
+0000237030 00000 n
+0000237094 00000 n
+0000237159 00000 n
+0000237224 00000 n
+0000237289 00000 n
+0000237354 00000 n
+0000237419 00000 n
+0000237484 00000 n
+0000237549 00000 n
+0000237614 00000 n
+0000237678 00000 n
+0000237743 00000 n
+0000237808 00000 n
+0000237873 00000 n
+0000237938 00000 n
+0000238003 00000 n
+0000238068 00000 n
+0000238133 00000 n
+0000238198 00000 n
+0000238262 00000 n
+0000238327 00000 n
+0000238392 00000 n
+0000238457 00000 n
+0000238522 00000 n
+0000238587 00000 n
+0000238652 00000 n
+0000238717 00000 n
+0000238782 00000 n
+0000238846 00000 n
+0000238911 00000 n
+0000238976 00000 n
+0000239041 00000 n
+0000239106 00000 n
+0000239171 00000 n
+0000239236 00000 n
+0000239301 00000 n
+0000239366 00000 n
+0000239430 00000 n
+0000239495 00000 n
+0000239560 00000 n
+0000239625 00000 n
+0000239690 00000 n
+0000239755 00000 n
+0000239820 00000 n
+0000239885 00000 n
+0000239950 00000 n
+0000240014 00000 n
+0000240079 00000 n
+0000240144 00000 n
+0000240209 00000 n
+0000240274 00000 n
+0000240339 00000 n
+0000240404 00000 n
+0000246645 00000 n
+0000242499 00000 n
+0000240619 00000 n
+0000242624 00000 n
+0000242688 00000 n
+0000242753 00000 n
+0000242817 00000 n
+0000242882 00000 n
+0000242947 00000 n
+0000243012 00000 n
+0000243077 00000 n
+0000243142 00000 n
+0000243207 00000 n
+0000243272 00000 n
+0000243337 00000 n
+0000243401 00000 n
+0000243466 00000 n
+0000243531 00000 n
+0000243596 00000 n
+0000243661 00000 n
+0000243726 00000 n
+0000243791 00000 n
+0000243856 00000 n
+0000243921 00000 n
+0000243985 00000 n
+0000244050 00000 n
+0000244115 00000 n
+0000244180 00000 n
+0000244245 00000 n
+0000244310 00000 n
+0000244375 00000 n
+0000244440 00000 n
+0000244505 00000 n
+0000244569 00000 n
+0000244634 00000 n
+0000244699 00000 n
+0000244764 00000 n
+0000244829 00000 n
+0000244894 00000 n
+0000244959 00000 n
+0000245024 00000 n
+0000245089 00000 n
+0000245153 00000 n
+0000245218 00000 n
+0000245283 00000 n
+0000245348 00000 n
+0000245413 00000 n
+0000245478 00000 n
+0000245543 00000 n
+0000245608 00000 n
+0000245673 00000 n
+0000245737 00000 n
+0000245802 00000 n
+0000245867 00000 n
+0000245932 00000 n
+0000245997 00000 n
+0000246062 00000 n
+0000246127 00000 n
+0000246192 00000 n
+0000246257 00000 n
+0000246322 00000 n
+0000246387 00000 n
+0000246452 00000 n
+0000246517 00000 n
+0000246581 00000 n
+0000252335 00000 n
+0000249167 00000 n
+0000246796 00000 n
+0000249292 00000 n
+0000249356 00000 n
+0000249421 00000 n
+0000249485 00000 n
+0000249550 00000 n
+0000249615 00000 n
+0000249680 00000 n
+0000249745 00000 n
+0000249873 00000 n
+0000249938 00000 n
+0000250003 00000 n
+0000250068 00000 n
+0000250133 00000 n
+0000250198 00000 n
+0000250262 00000 n
+0000250327 00000 n
+0000250392 00000 n
+0000250457 00000 n
+0000250522 00000 n
+0000250587 00000 n
+0000250651 00000 n
+0000250716 00000 n
+0000250781 00000 n
+0000250846 00000 n
+0000250911 00000 n
+0000251039 00000 n
+0000251104 00000 n
+0000251169 00000 n
+0000251234 00000 n
+0000251299 00000 n
+0000251364 00000 n
+0000251429 00000 n
+0000251494 00000 n
+0000251559 00000 n
+0000251623 00000 n
+0000251688 00000 n
+0000251753 00000 n
+0000251818 00000 n
+0000251883 00000 n
+0000251948 00000 n
+0000252013 00000 n
+0000252077 00000 n
+0000252142 00000 n
+0000252207 00000 n
+0000252271 00000 n
+0000257735 00000 n
+0000255151 00000 n
+0000252512 00000 n
+0000255276 00000 n
+0000255340 00000 n
+0000255405 00000 n
+0000255532 00000 n
+0000255597 00000 n
+0000255662 00000 n
+0000255727 00000 n
+0000255792 00000 n
+0000255855 00000 n
+0000255920 00000 n
+0000255985 00000 n
+0000256049 00000 n
+0000256114 00000 n
+0000256179 00000 n
+0000256244 00000 n
+0000256309 00000 n
+0000256374 00000 n
+0000256439 00000 n
+0000256504 00000 n
+0000256569 00000 n
+0000256633 00000 n
+0000256698 00000 n
+0000256763 00000 n
+0000256828 00000 n
+0000256893 00000 n
+0000256958 00000 n
+0000257023 00000 n
+0000257088 00000 n
+0000257153 00000 n
+0000257218 00000 n
+0000257282 00000 n
+0000257347 00000 n
+0000257412 00000 n
+0000257477 00000 n
+0000257542 00000 n
+0000257607 00000 n
+0000257672 00000 n
+0000263677 00000 n
+0000260698 00000 n
+0000257938 00000 n
+0000260823 00000 n
+0000260887 00000 n
+0000260952 00000 n
+0000261017 00000 n
+0000261082 00000 n
+0000261147 00000 n
+0000261212 00000 n
+0000261277 00000 n
+0000261342 00000 n
+0000261407 00000 n
+0000261472 00000 n
+0000261537 00000 n
+0000261602 00000 n
+0000261667 00000 n
+0000261732 00000 n
+0000261797 00000 n
+0000261862 00000 n
+0000261927 00000 n
+0000261992 00000 n
+0000262057 00000 n
+0000262120 00000 n
+0000262185 00000 n
+0000262250 00000 n
+0000262314 00000 n
+0000262378 00000 n
+0000262443 00000 n
+0000262508 00000 n
+0000262573 00000 n
+0000262638 00000 n
+0000262703 00000 n
+0000262767 00000 n
+0000262832 00000 n
+0000262897 00000 n
+0000262962 00000 n
+0000263027 00000 n
+0000263092 00000 n
+0000263157 00000 n
+0000263222 00000 n
+0000263287 00000 n
+0000263352 00000 n
+0000263417 00000 n
+0000263482 00000 n
+0000263547 00000 n
+0000263612 00000 n
+0000269744 00000 n
+0000266054 00000 n
+0000263854 00000 n
+0000266179 00000 n
+0000266243 00000 n
+0000266307 00000 n
+0000266372 00000 n
+0000266437 00000 n
+0000266502 00000 n
+0000266567 00000 n
+0000266632 00000 n
+0000266697 00000 n
+0000266762 00000 n
+0000266825 00000 n
+0000266890 00000 n
+0000266955 00000 n
+0000267020 00000 n
+0000267085 00000 n
+0000267150 00000 n
+0000267215 00000 n
+0000267280 00000 n
+0000267345 00000 n
+0000267409 00000 n
+0000267474 00000 n
+0000267539 00000 n
+0000267604 00000 n
+0000267669 00000 n
+0000267734 00000 n
+0000267799 00000 n
+0000267864 00000 n
+0000267929 00000 n
+0000267994 00000 n
+0000268059 00000 n
+0000268124 00000 n
+0000268189 00000 n
+0000268254 00000 n
+0000268319 00000 n
+0000268384 00000 n
+0000268448 00000 n
+0000268513 00000 n
+0000268578 00000 n
+0000268643 00000 n
+0000268708 00000 n
+0000268773 00000 n
+0000268838 00000 n
+0000268903 00000 n
+0000268968 00000 n
+0000269032 00000 n
+0000269097 00000 n
+0000269162 00000 n
+0000269227 00000 n
+0000269292 00000 n
+0000269357 00000 n
+0000269422 00000 n
+0000269487 00000 n
+0000269552 00000 n
+0000269616 00000 n
+0000269680 00000 n
+0000276082 00000 n
+0000272650 00000 n
+0000269908 00000 n
+0000272775 00000 n
+0000272839 00000 n
+0000272904 00000 n
+0000272968 00000 n
+0000273033 00000 n
+0000273098 00000 n
+0000273162 00000 n
+0000273227 00000 n
+0000273292 00000 n
+0000273357 00000 n
+0000273422 00000 n
+0000273487 00000 n
+0000273552 00000 n
+0000273617 00000 n
+0000273682 00000 n
+0000273745 00000 n
+0000273810 00000 n
+0000273875 00000 n
+0000273940 00000 n
+0000274005 00000 n
+0000274070 00000 n
+0000274135 00000 n
+0000274200 00000 n
+0000274265 00000 n
+0000274330 00000 n
+0000274394 00000 n
+0000274459 00000 n
+0000274524 00000 n
+0000274589 00000 n
+0000274654 00000 n
+0000274719 00000 n
+0000274784 00000 n
+0000274849 00000 n
+0000274914 00000 n
+0000274978 00000 n
+0000275043 00000 n
+0000275108 00000 n
+0000275172 00000 n
+0000275237 00000 n
+0000275302 00000 n
+0000275367 00000 n
0000275432 00000 n
-0000272508 00000 n
-0000275557 00000 n
-0000275621 00000 n
-0000275685 00000 n
-0000275750 00000 n
-0000275815 00000 n
-0000275880 00000 n
-0000275945 00000 n
-0000276010 00000 n
-0000276075 00000 n
-0000276140 00000 n
-0000276205 00000 n
-0000276270 00000 n
-0000276335 00000 n
-0000276400 00000 n
-0000276465 00000 n
-0000276529 00000 n
-0000276594 00000 n
-0000276659 00000 n
-0000276724 00000 n
-0000276789 00000 n
-0000276854 00000 n
-0000276919 00000 n
-0000276984 00000 n
-0000277049 00000 n
-0000277112 00000 n
-0000277177 00000 n
-0000277242 00000 n
-0000277307 00000 n
-0000277372 00000 n
-0000277437 00000 n
-0000277502 00000 n
-0000277567 00000 n
-0000277632 00000 n
-0000277697 00000 n
-0000277762 00000 n
-0000277827 00000 n
-0000277892 00000 n
-0000277957 00000 n
-0000278021 00000 n
-0000278086 00000 n
-0000278151 00000 n
-0000278215 00000 n
-0000278280 00000 n
-0000285019 00000 n
-0000281835 00000 n
-0000278509 00000 n
-0000282166 00000 n
-0000282230 00000 n
-0000282295 00000 n
-0000282360 00000 n
-0000282425 00000 n
-0000282490 00000 n
-0000282554 00000 n
-0000282619 00000 n
-0000282684 00000 n
-0000282749 00000 n
-0000282813 00000 n
-0000282878 00000 n
-0000282943 00000 n
-0000283008 00000 n
-0000283073 00000 n
-0000283138 00000 n
-0000283203 00000 n
-0000283268 00000 n
-0000283333 00000 n
-0000283398 00000 n
-0000283463 00000 n
-0000283528 00000 n
-0000283593 00000 n
-0000283658 00000 n
-0000283723 00000 n
-0000283788 00000 n
-0000283853 00000 n
-0000283918 00000 n
-0000283983 00000 n
-0000284047 00000 n
-0000284112 00000 n
-0000284177 00000 n
-0000284241 00000 n
-0000284306 00000 n
-0000284371 00000 n
-0000284436 00000 n
-0000284500 00000 n
-0000284565 00000 n
-0000284630 00000 n
-0000284695 00000 n
-0000284760 00000 n
-0000284825 00000 n
-0000284890 00000 n
-0000284955 00000 n
-0000281977 00000 n
-0000290955 00000 n
-0000288044 00000 n
-0000285248 00000 n
-0000288169 00000 n
-0000288233 00000 n
-0000288298 00000 n
-0000288362 00000 n
-0000288427 00000 n
-0000288492 00000 n
-0000288557 00000 n
-0000288622 00000 n
-0000288687 00000 n
-0000288752 00000 n
-0000288817 00000 n
-0000288880 00000 n
-0000288945 00000 n
-0000289010 00000 n
-0000289075 00000 n
-0000289140 00000 n
-0000289205 00000 n
-0000289270 00000 n
-0000289334 00000 n
-0000289399 00000 n
-0000289464 00000 n
-0000289529 00000 n
-0000289594 00000 n
-0000289659 00000 n
-0000289724 00000 n
-0000289789 00000 n
-0000289854 00000 n
-0000289918 00000 n
-0000289983 00000 n
-0000290048 00000 n
-0000290113 00000 n
-0000290178 00000 n
-0000290243 00000 n
-0000290308 00000 n
-0000290373 00000 n
-0000290438 00000 n
-0000290503 00000 n
-0000290568 00000 n
-0000290633 00000 n
-0000290698 00000 n
-0000290763 00000 n
-0000290828 00000 n
-0000290891 00000 n
-0000296929 00000 n
-0000293627 00000 n
-0000291119 00000 n
-0000293752 00000 n
-0000293816 00000 n
-0000293881 00000 n
-0000293945 00000 n
-0000294010 00000 n
-0000294075 00000 n
-0000294140 00000 n
-0000294205 00000 n
-0000294270 00000 n
-0000294335 00000 n
-0000294400 00000 n
-0000294465 00000 n
-0000294529 00000 n
+0000275497 00000 n
+0000275562 00000 n
+0000275627 00000 n
+0000275692 00000 n
+0000275757 00000 n
+0000275822 00000 n
+0000275887 00000 n
+0000275952 00000 n
+0000276017 00000 n
+0000878228 00000 n
+0000279460 00000 n
+0000282471 00000 n
+0000279287 00000 n
+0000276246 00000 n
+0000279618 00000 n
+0000279682 00000 n
+0000279747 00000 n
+0000279812 00000 n
+0000279877 00000 n
+0000279942 00000 n
+0000280006 00000 n
+0000280071 00000 n
+0000280136 00000 n
+0000280201 00000 n
+0000280266 00000 n
+0000280331 00000 n
+0000280396 00000 n
+0000280461 00000 n
+0000280526 00000 n
+0000280590 00000 n
+0000280655 00000 n
+0000280720 00000 n
+0000280785 00000 n
+0000280850 00000 n
+0000280915 00000 n
+0000280980 00000 n
+0000281045 00000 n
+0000281110 00000 n
+0000281175 00000 n
+0000281239 00000 n
+0000281304 00000 n
+0000281369 00000 n
+0000281434 00000 n
+0000281498 00000 n
+0000281563 00000 n
+0000281628 00000 n
+0000281693 00000 n
+0000281758 00000 n
+0000281823 00000 n
+0000281888 00000 n
+0000281953 00000 n
+0000282018 00000 n
+0000282083 00000 n
+0000282148 00000 n
+0000282212 00000 n
+0000282277 00000 n
+0000282342 00000 n
+0000282407 00000 n
+0000279429 00000 n
+0000288673 00000 n
+0000285500 00000 n
+0000282687 00000 n
+0000285625 00000 n
+0000285689 00000 n
+0000285754 00000 n
+0000285818 00000 n
+0000285883 00000 n
+0000285948 00000 n
+0000286013 00000 n
+0000286078 00000 n
+0000286143 00000 n
+0000286208 00000 n
+0000286273 00000 n
+0000286338 00000 n
+0000286403 00000 n
+0000286468 00000 n
+0000286533 00000 n
+0000286598 00000 n
+0000286663 00000 n
+0000286728 00000 n
+0000286793 00000 n
+0000286858 00000 n
+0000286923 00000 n
+0000286988 00000 n
+0000287052 00000 n
+0000287117 00000 n
+0000287182 00000 n
+0000287246 00000 n
+0000287311 00000 n
+0000287376 00000 n
+0000287440 00000 n
+0000287505 00000 n
+0000287570 00000 n
+0000287635 00000 n
+0000287700 00000 n
+0000287765 00000 n
+0000287830 00000 n
+0000287895 00000 n
+0000287960 00000 n
+0000288024 00000 n
+0000288089 00000 n
+0000288154 00000 n
+0000288219 00000 n
+0000288284 00000 n
+0000288349 00000 n
+0000288414 00000 n
+0000288479 00000 n
+0000288544 00000 n
+0000288608 00000 n
+0000294430 00000 n
+0000291519 00000 n
+0000288850 00000 n
+0000291644 00000 n
+0000291708 00000 n
+0000291773 00000 n
+0000291838 00000 n
+0000291903 00000 n
+0000291968 00000 n
+0000292033 00000 n
+0000292098 00000 n
+0000292163 00000 n
+0000292228 00000 n
+0000292292 00000 n
+0000292357 00000 n
+0000292422 00000 n
+0000292487 00000 n
+0000292552 00000 n
+0000292617 00000 n
+0000292682 00000 n
+0000292747 00000 n
+0000292812 00000 n
+0000292876 00000 n
+0000292941 00000 n
+0000293005 00000 n
+0000293070 00000 n
+0000293135 00000 n
+0000293200 00000 n
+0000293265 00000 n
+0000293330 00000 n
+0000293395 00000 n
+0000293460 00000 n
+0000293525 00000 n
+0000293590 00000 n
+0000293655 00000 n
+0000293720 00000 n
+0000293785 00000 n
+0000293849 00000 n
+0000293914 00000 n
+0000293979 00000 n
+0000294044 00000 n
+0000294109 00000 n
+0000294174 00000 n
+0000294239 00000 n
+0000294304 00000 n
+0000294368 00000 n
+0000300428 00000 n
+0000297127 00000 n
0000294594 00000 n
-0000294659 00000 n
-0000294724 00000 n
-0000294789 00000 n
-0000294853 00000 n
-0000294918 00000 n
-0000294983 00000 n
-0000295048 00000 n
-0000295113 00000 n
-0000295178 00000 n
-0000295243 00000 n
-0000295308 00000 n
-0000295373 00000 n
-0000295437 00000 n
-0000295502 00000 n
-0000295567 00000 n
-0000295632 00000 n
-0000295697 00000 n
-0000295762 00000 n
-0000295827 00000 n
-0000295892 00000 n
-0000295957 00000 n
-0000296022 00000 n
-0000296087 00000 n
-0000296152 00000 n
-0000296217 00000 n
-0000296282 00000 n
-0000296346 00000 n
-0000296411 00000 n
-0000296476 00000 n
-0000296541 00000 n
-0000296606 00000 n
-0000296671 00000 n
-0000296736 00000 n
-0000296801 00000 n
-0000296865 00000 n
-0000303419 00000 n
-0000299532 00000 n
-0000297106 00000 n
-0000299657 00000 n
-0000299721 00000 n
-0000299786 00000 n
-0000299851 00000 n
-0000299915 00000 n
-0000299980 00000 n
-0000300045 00000 n
-0000300110 00000 n
-0000300175 00000 n
-0000300240 00000 n
-0000300304 00000 n
-0000300369 00000 n
-0000300434 00000 n
-0000300499 00000 n
-0000300564 00000 n
-0000300629 00000 n
-0000300694 00000 n
-0000300759 00000 n
-0000300823 00000 n
-0000300888 00000 n
-0000300953 00000 n
-0000301018 00000 n
-0000301083 00000 n
-0000301148 00000 n
-0000301213 00000 n
-0000301278 00000 n
-0000301343 00000 n
-0000301407 00000 n
-0000301472 00000 n
-0000301537 00000 n
-0000301602 00000 n
-0000301667 00000 n
-0000301732 00000 n
-0000301797 00000 n
-0000301862 00000 n
-0000301927 00000 n
-0000301991 00000 n
-0000302056 00000 n
-0000302121 00000 n
-0000302186 00000 n
-0000302251 00000 n
-0000302316 00000 n
-0000302381 00000 n
-0000302446 00000 n
-0000302511 00000 n
-0000302575 00000 n
-0000302640 00000 n
-0000302705 00000 n
-0000302770 00000 n
-0000302835 00000 n
-0000302900 00000 n
-0000302965 00000 n
-0000303030 00000 n
-0000303095 00000 n
-0000303160 00000 n
-0000303224 00000 n
-0000303289 00000 n
-0000303354 00000 n
-0000309261 00000 n
-0000306413 00000 n
-0000303583 00000 n
-0000306538 00000 n
-0000306602 00000 n
-0000306667 00000 n
-0000306731 00000 n
-0000306796 00000 n
-0000306861 00000 n
-0000306926 00000 n
-0000306991 00000 n
-0000307056 00000 n
-0000307121 00000 n
-0000307185 00000 n
-0000307250 00000 n
-0000307315 00000 n
-0000307380 00000 n
-0000307445 00000 n
-0000307510 00000 n
-0000307575 00000 n
-0000307640 00000 n
-0000307705 00000 n
-0000307769 00000 n
-0000307834 00000 n
-0000307899 00000 n
-0000307964 00000 n
-0000308029 00000 n
-0000308094 00000 n
-0000308159 00000 n
-0000308224 00000 n
-0000308289 00000 n
-0000308354 00000 n
-0000308419 00000 n
-0000308484 00000 n
-0000308549 00000 n
-0000308614 00000 n
-0000308679 00000 n
-0000308743 00000 n
-0000308808 00000 n
-0000308936 00000 n
-0000309001 00000 n
-0000309066 00000 n
-0000309131 00000 n
-0000309196 00000 n
-0000315397 00000 n
-0000311381 00000 n
-0000309438 00000 n
-0000311506 00000 n
-0000311570 00000 n
-0000311635 00000 n
-0000311699 00000 n
-0000311764 00000 n
-0000311829 00000 n
-0000311894 00000 n
-0000311959 00000 n
-0000312024 00000 n
-0000312089 00000 n
-0000312154 00000 n
-0000312219 00000 n
-0000312283 00000 n
-0000312348 00000 n
-0000312413 00000 n
-0000312478 00000 n
-0000312543 00000 n
-0000312608 00000 n
-0000312673 00000 n
-0000312738 00000 n
-0000312803 00000 n
-0000312867 00000 n
-0000312932 00000 n
-0000312997 00000 n
-0000313062 00000 n
-0000313127 00000 n
-0000313192 00000 n
-0000313257 00000 n
-0000313322 00000 n
-0000313387 00000 n
-0000313450 00000 n
-0000313515 00000 n
-0000313580 00000 n
-0000313645 00000 n
-0000313710 00000 n
-0000313775 00000 n
-0000313840 00000 n
-0000313905 00000 n
-0000313970 00000 n
-0000314035 00000 n
-0000314100 00000 n
-0000314165 00000 n
-0000314230 00000 n
-0000314295 00000 n
-0000314360 00000 n
-0000314425 00000 n
-0000314490 00000 n
-0000314555 00000 n
-0000314620 00000 n
-0000314684 00000 n
-0000314749 00000 n
-0000314814 00000 n
-0000314879 00000 n
-0000314944 00000 n
-0000315009 00000 n
-0000315074 00000 n
-0000315139 00000 n
-0000315204 00000 n
-0000315269 00000 n
-0000315333 00000 n
-0000321306 00000 n
-0000317747 00000 n
-0000315574 00000 n
-0000317872 00000 n
-0000317936 00000 n
-0000318001 00000 n
-0000318065 00000 n
-0000318130 00000 n
-0000318195 00000 n
-0000318260 00000 n
-0000318325 00000 n
-0000318390 00000 n
-0000318455 00000 n
-0000318520 00000 n
-0000318585 00000 n
-0000318649 00000 n
-0000318714 00000 n
-0000318779 00000 n
-0000318844 00000 n
-0000318909 00000 n
-0000318974 00000 n
-0000319039 00000 n
-0000319104 00000 n
-0000319169 00000 n
-0000319233 00000 n
-0000319298 00000 n
-0000319363 00000 n
-0000319428 00000 n
-0000319493 00000 n
-0000319558 00000 n
-0000319623 00000 n
-0000319688 00000 n
-0000319753 00000 n
-0000319818 00000 n
-0000319883 00000 n
-0000319948 00000 n
-0000320076 00000 n
-0000320141 00000 n
-0000320206 00000 n
-0000320271 00000 n
-0000320336 00000 n
-0000320401 00000 n
-0000320464 00000 n
-0000320529 00000 n
-0000320594 00000 n
-0000320659 00000 n
-0000320724 00000 n
-0000320789 00000 n
-0000320854 00000 n
-0000320919 00000 n
-0000320984 00000 n
-0000321048 00000 n
-0000321113 00000 n
-0000321178 00000 n
-0000321242 00000 n
-0000327399 00000 n
-0000324293 00000 n
-0000321483 00000 n
-0000324418 00000 n
-0000324482 00000 n
-0000324547 00000 n
-0000324611 00000 n
-0000324676 00000 n
-0000324741 00000 n
-0000324806 00000 n
-0000324871 00000 n
-0000324936 00000 n
-0000325001 00000 n
-0000325066 00000 n
-0000325131 00000 n
-0000325195 00000 n
-0000325260 00000 n
-0000325325 00000 n
-0000325390 00000 n
-0000325455 00000 n
-0000325520 00000 n
-0000325585 00000 n
-0000325650 00000 n
-0000325714 00000 n
-0000325779 00000 n
-0000325844 00000 n
-0000325972 00000 n
-0000326037 00000 n
-0000326102 00000 n
-0000326166 00000 n
-0000326231 00000 n
-0000326296 00000 n
-0000326361 00000 n
-0000326426 00000 n
-0000326491 00000 n
-0000326556 00000 n
-0000326621 00000 n
-0000326686 00000 n
-0000326750 00000 n
-0000326815 00000 n
-0000326880 00000 n
-0000326945 00000 n
-0000327010 00000 n
-0000327074 00000 n
-0000327139 00000 n
-0000327204 00000 n
-0000327269 00000 n
-0000327334 00000 n
-0000332954 00000 n
-0000330170 00000 n
-0000327589 00000 n
-0000330295 00000 n
-0000330359 00000 n
-0000330424 00000 n
-0000330488 00000 n
-0000330553 00000 n
-0000330618 00000 n
-0000330683 00000 n
-0000330748 00000 n
-0000330813 00000 n
-0000330877 00000 n
-0000330940 00000 n
-0000331005 00000 n
-0000331070 00000 n
-0000331135 00000 n
-0000331200 00000 n
-0000331265 00000 n
-0000331330 00000 n
-0000331395 00000 n
-0000331460 00000 n
-0000331525 00000 n
-0000331590 00000 n
-0000331655 00000 n
-0000331720 00000 n
-0000331785 00000 n
-0000331850 00000 n
-0000331915 00000 n
-0000331980 00000 n
-0000332045 00000 n
-0000332110 00000 n
-0000332175 00000 n
-0000332240 00000 n
-0000332305 00000 n
-0000332370 00000 n
-0000332435 00000 n
-0000332500 00000 n
-0000332564 00000 n
-0000332629 00000 n
-0000332694 00000 n
-0000332759 00000 n
-0000332824 00000 n
-0000332889 00000 n
-0000877206 00000 n
-0000339091 00000 n
-0000335210 00000 n
-0000333131 00000 n
-0000335335 00000 n
-0000335399 00000 n
-0000335464 00000 n
-0000335528 00000 n
-0000335593 00000 n
-0000335658 00000 n
-0000335786 00000 n
-0000335851 00000 n
-0000335916 00000 n
-0000335981 00000 n
-0000336046 00000 n
-0000336111 00000 n
-0000336174 00000 n
-0000336239 00000 n
-0000336304 00000 n
-0000336369 00000 n
-0000336497 00000 n
-0000336562 00000 n
-0000336627 00000 n
-0000336692 00000 n
-0000336757 00000 n
-0000336822 00000 n
-0000336887 00000 n
-0000336951 00000 n
-0000337015 00000 n
-0000337080 00000 n
-0000337145 00000 n
-0000337210 00000 n
-0000337275 00000 n
-0000337340 00000 n
-0000337405 00000 n
-0000337470 00000 n
-0000337535 00000 n
-0000337600 00000 n
-0000337665 00000 n
-0000337729 00000 n
-0000337794 00000 n
-0000337859 00000 n
-0000337924 00000 n
-0000337989 00000 n
-0000338054 00000 n
-0000338119 00000 n
-0000338184 00000 n
-0000338249 00000 n
-0000338314 00000 n
-0000338379 00000 n
-0000338443 00000 n
+0000297252 00000 n
+0000297316 00000 n
+0000297381 00000 n
+0000297445 00000 n
+0000297510 00000 n
+0000297575 00000 n
+0000297640 00000 n
+0000297705 00000 n
+0000297770 00000 n
+0000297835 00000 n
+0000297900 00000 n
+0000297965 00000 n
+0000298030 00000 n
+0000298095 00000 n
+0000298160 00000 n
+0000298225 00000 n
+0000298289 00000 n
+0000298354 00000 n
+0000298419 00000 n
+0000298484 00000 n
+0000298549 00000 n
+0000298614 00000 n
+0000298679 00000 n
+0000298744 00000 n
+0000298809 00000 n
+0000298874 00000 n
+0000298939 00000 n
+0000299004 00000 n
+0000299069 00000 n
+0000299134 00000 n
+0000299199 00000 n
+0000299264 00000 n
+0000299329 00000 n
+0000299393 00000 n
+0000299458 00000 n
+0000299523 00000 n
+0000299588 00000 n
+0000299653 00000 n
+0000299717 00000 n
+0000299782 00000 n
+0000299846 00000 n
+0000299911 00000 n
+0000299976 00000 n
+0000300041 00000 n
+0000300106 00000 n
+0000300171 00000 n
+0000300235 00000 n
+0000300300 00000 n
+0000300364 00000 n
+0000306844 00000 n
+0000303024 00000 n
+0000300605 00000 n
+0000303149 00000 n
+0000303213 00000 n
+0000303278 00000 n
+0000303342 00000 n
+0000303407 00000 n
+0000303472 00000 n
+0000303537 00000 n
+0000303602 00000 n
+0000303667 00000 n
+0000303732 00000 n
+0000303797 00000 n
+0000303862 00000 n
+0000303926 00000 n
+0000303991 00000 n
+0000304056 00000 n
+0000304121 00000 n
+0000304186 00000 n
+0000304251 00000 n
+0000304316 00000 n
+0000304381 00000 n
+0000304446 00000 n
+0000304510 00000 n
+0000304575 00000 n
+0000304640 00000 n
+0000304705 00000 n
+0000304770 00000 n
+0000304835 00000 n
+0000304900 00000 n
+0000304965 00000 n
+0000305030 00000 n
+0000305094 00000 n
+0000305159 00000 n
+0000305224 00000 n
+0000305289 00000 n
+0000305354 00000 n
+0000305419 00000 n
+0000305484 00000 n
+0000305549 00000 n
+0000305614 00000 n
+0000305678 00000 n
+0000305743 00000 n
+0000305808 00000 n
+0000305873 00000 n
+0000305938 00000 n
+0000306003 00000 n
+0000306068 00000 n
+0000306133 00000 n
+0000306197 00000 n
+0000306262 00000 n
+0000306327 00000 n
+0000306392 00000 n
+0000306457 00000 n
+0000306522 00000 n
+0000306587 00000 n
+0000306652 00000 n
+0000306716 00000 n
+0000306780 00000 n
+0000312837 00000 n
+0000309670 00000 n
+0000307008 00000 n
+0000309795 00000 n
+0000309859 00000 n
+0000309924 00000 n
+0000309988 00000 n
+0000310053 00000 n
+0000310118 00000 n
+0000310183 00000 n
+0000310248 00000 n
+0000310313 00000 n
+0000310378 00000 n
+0000310443 00000 n
+0000310506 00000 n
+0000310571 00000 n
+0000310636 00000 n
+0000310701 00000 n
+0000310766 00000 n
+0000310831 00000 n
+0000310896 00000 n
+0000310960 00000 n
+0000311025 00000 n
+0000311090 00000 n
+0000311155 00000 n
+0000311220 00000 n
+0000311285 00000 n
+0000311412 00000 n
+0000311477 00000 n
+0000311542 00000 n
+0000311607 00000 n
+0000311671 00000 n
+0000311736 00000 n
+0000311801 00000 n
+0000311866 00000 n
+0000311931 00000 n
+0000311996 00000 n
+0000312061 00000 n
+0000312125 00000 n
+0000312190 00000 n
+0000312255 00000 n
+0000312320 00000 n
+0000312385 00000 n
+0000312450 00000 n
+0000312515 00000 n
+0000312580 00000 n
+0000312645 00000 n
+0000312710 00000 n
+0000312773 00000 n
+0000319095 00000 n
+0000314888 00000 n
+0000313014 00000 n
+0000315013 00000 n
+0000315077 00000 n
+0000315142 00000 n
+0000315206 00000 n
+0000315271 00000 n
+0000315336 00000 n
+0000315401 00000 n
+0000315466 00000 n
+0000315531 00000 n
+0000315596 00000 n
+0000315661 00000 n
+0000315726 00000 n
+0000315790 00000 n
+0000315855 00000 n
+0000315920 00000 n
+0000315985 00000 n
+0000316050 00000 n
+0000316115 00000 n
+0000316180 00000 n
+0000316245 00000 n
+0000316310 00000 n
+0000316374 00000 n
+0000316439 00000 n
+0000316504 00000 n
+0000316569 00000 n
+0000316634 00000 n
+0000316699 00000 n
+0000316764 00000 n
+0000316829 00000 n
+0000316894 00000 n
+0000316958 00000 n
+0000317023 00000 n
+0000317088 00000 n
+0000317153 00000 n
+0000317218 00000 n
+0000317283 00000 n
+0000317348 00000 n
+0000317413 00000 n
+0000317478 00000 n
+0000317543 00000 n
+0000317608 00000 n
+0000317673 00000 n
+0000317738 00000 n
+0000317803 00000 n
+0000317867 00000 n
+0000317932 00000 n
+0000317997 00000 n
+0000318062 00000 n
+0000318127 00000 n
+0000318192 00000 n
+0000318257 00000 n
+0000318322 00000 n
+0000318387 00000 n
+0000318448 00000 n
+0000318513 00000 n
+0000318578 00000 n
+0000318643 00000 n
+0000318708 00000 n
+0000318773 00000 n
+0000318838 00000 n
+0000318903 00000 n
+0000318968 00000 n
+0000319031 00000 n
+0000324878 00000 n
+0000321511 00000 n
+0000319272 00000 n
+0000321636 00000 n
+0000321700 00000 n
+0000321765 00000 n
+0000321829 00000 n
+0000321894 00000 n
+0000321959 00000 n
+0000322024 00000 n
+0000322089 00000 n
+0000322153 00000 n
+0000322218 00000 n
+0000322283 00000 n
+0000322348 00000 n
+0000322413 00000 n
+0000322541 00000 n
+0000322606 00000 n
+0000322671 00000 n
+0000322736 00000 n
+0000322801 00000 n
+0000322866 00000 n
+0000322931 00000 n
+0000322996 00000 n
+0000323061 00000 n
+0000323126 00000 n
+0000323191 00000 n
+0000323256 00000 n
+0000323321 00000 n
+0000323385 00000 n
+0000323450 00000 n
+0000323515 00000 n
+0000323580 00000 n
+0000323645 00000 n
+0000323710 00000 n
+0000323775 00000 n
+0000323840 00000 n
+0000323905 00000 n
+0000323969 00000 n
+0000324034 00000 n
+0000324099 00000 n
+0000324164 00000 n
+0000324229 00000 n
+0000324294 00000 n
+0000324359 00000 n
+0000324424 00000 n
+0000324489 00000 n
+0000324553 00000 n
+0000324618 00000 n
+0000324683 00000 n
+0000324748 00000 n
+0000324813 00000 n
+0000330657 00000 n
+0000328135 00000 n
+0000325055 00000 n
+0000328260 00000 n
+0000328324 00000 n
+0000328389 00000 n
+0000328454 00000 n
+0000328518 00000 n
+0000328583 00000 n
+0000328711 00000 n
+0000328776 00000 n
+0000328841 00000 n
+0000328906 00000 n
+0000328971 00000 n
+0000329035 00000 n
+0000329100 00000 n
+0000329165 00000 n
+0000329230 00000 n
+0000329295 00000 n
+0000329360 00000 n
+0000329425 00000 n
+0000329490 00000 n
+0000329555 00000 n
+0000329619 00000 n
+0000329684 00000 n
+0000329749 00000 n
+0000329814 00000 n
+0000329879 00000 n
+0000329944 00000 n
+0000330009 00000 n
+0000330074 00000 n
+0000330139 00000 n
+0000330204 00000 n
+0000330269 00000 n
+0000330334 00000 n
+0000330399 00000 n
+0000330464 00000 n
+0000330529 00000 n
+0000330593 00000 n
+0000336140 00000 n
+0000332968 00000 n
+0000330847 00000 n
+0000333093 00000 n
+0000333157 00000 n
+0000333222 00000 n
+0000333287 00000 n
+0000333352 00000 n
+0000333417 00000 n
+0000333482 00000 n
+0000333547 00000 n
+0000333612 00000 n
+0000333677 00000 n
+0000333742 00000 n
+0000333807 00000 n
+0000333872 00000 n
+0000333937 00000 n
+0000334002 00000 n
+0000334066 00000 n
+0000334131 00000 n
+0000334196 00000 n
+0000334261 00000 n
+0000334326 00000 n
+0000334391 00000 n
+0000334456 00000 n
+0000334521 00000 n
+0000334586 00000 n
+0000334651 00000 n
+0000334716 00000 n
+0000334781 00000 n
+0000334846 00000 n
+0000334911 00000 n
+0000334976 00000 n
+0000335041 00000 n
+0000335106 00000 n
+0000335171 00000 n
+0000335236 00000 n
+0000335301 00000 n
+0000335366 00000 n
+0000335431 00000 n
+0000335495 00000 n
+0000335623 00000 n
+0000335688 00000 n
+0000335753 00000 n
+0000335818 00000 n
+0000335883 00000 n
+0000335948 00000 n
+0000336013 00000 n
+0000336077 00000 n
+0000878392 00000 n
+0000342396 00000 n
+0000338383 00000 n
+0000336317 00000 n
0000338508 00000 n
-0000338573 00000 n
-0000338638 00000 n
-0000338703 00000 n
-0000338768 00000 n
-0000338833 00000 n
-0000338898 00000 n
-0000338963 00000 n
-0000339027 00000 n
-0000345427 00000 n
-0000341283 00000 n
-0000339255 00000 n
-0000341408 00000 n
-0000341472 00000 n
-0000341537 00000 n
-0000341601 00000 n
-0000341666 00000 n
-0000341731 00000 n
-0000341796 00000 n
-0000341861 00000 n
-0000341925 00000 n
-0000341990 00000 n
-0000342055 00000 n
-0000342120 00000 n
-0000342185 00000 n
-0000342249 00000 n
-0000342314 00000 n
-0000342379 00000 n
-0000342444 00000 n
-0000342509 00000 n
-0000342574 00000 n
-0000342639 00000 n
-0000342704 00000 n
-0000342769 00000 n
-0000342834 00000 n
-0000342899 00000 n
-0000342964 00000 n
-0000343029 00000 n
-0000343094 00000 n
-0000343159 00000 n
-0000343224 00000 n
-0000343289 00000 n
-0000343354 00000 n
-0000343419 00000 n
-0000343484 00000 n
-0000343549 00000 n
-0000343614 00000 n
-0000343679 00000 n
-0000343744 00000 n
-0000343809 00000 n
-0000343873 00000 n
-0000343938 00000 n
-0000344003 00000 n
-0000344068 00000 n
-0000344133 00000 n
-0000344197 00000 n
-0000344262 00000 n
-0000344327 00000 n
-0000344392 00000 n
-0000344457 00000 n
-0000344522 00000 n
-0000344585 00000 n
-0000344650 00000 n
-0000344715 00000 n
-0000344780 00000 n
-0000344845 00000 n
-0000344910 00000 n
-0000344975 00000 n
-0000345040 00000 n
-0000345105 00000 n
-0000345169 00000 n
-0000345234 00000 n
-0000345299 00000 n
-0000345363 00000 n
-0000351261 00000 n
-0000347507 00000 n
-0000345578 00000 n
+0000338572 00000 n
+0000338637 00000 n
+0000338764 00000 n
+0000338829 00000 n
+0000338894 00000 n
+0000338959 00000 n
+0000339024 00000 n
+0000339089 00000 n
+0000339154 00000 n
+0000339219 00000 n
+0000339284 00000 n
+0000339349 00000 n
+0000339414 00000 n
+0000339479 00000 n
+0000339544 00000 n
+0000339609 00000 n
+0000339674 00000 n
+0000339739 00000 n
+0000339804 00000 n
+0000339869 00000 n
+0000339934 00000 n
+0000339999 00000 n
+0000340064 00000 n
+0000340129 00000 n
+0000340194 00000 n
+0000340259 00000 n
+0000340324 00000 n
+0000340388 00000 n
+0000340453 00000 n
+0000340518 00000 n
+0000340583 00000 n
+0000340647 00000 n
+0000340712 00000 n
+0000340777 00000 n
+0000340842 00000 n
+0000340907 00000 n
+0000340971 00000 n
+0000341036 00000 n
+0000341101 00000 n
+0000341166 00000 n
+0000341231 00000 n
+0000341296 00000 n
+0000341361 00000 n
+0000341426 00000 n
+0000341491 00000 n
+0000341555 00000 n
+0000341620 00000 n
+0000341685 00000 n
+0000341750 00000 n
+0000341814 00000 n
+0000341879 00000 n
+0000341944 00000 n
+0000342009 00000 n
+0000342074 00000 n
+0000342138 00000 n
+0000342203 00000 n
+0000342268 00000 n
+0000342332 00000 n
+0000348732 00000 n
+0000344523 00000 n
+0000342560 00000 n
+0000344648 00000 n
+0000344712 00000 n
+0000344777 00000 n
+0000344841 00000 n
+0000344906 00000 n
+0000344971 00000 n
+0000345036 00000 n
+0000345101 00000 n
+0000345166 00000 n
+0000345231 00000 n
+0000345296 00000 n
+0000345361 00000 n
+0000345425 00000 n
+0000345490 00000 n
+0000345555 00000 n
+0000345620 00000 n
+0000345685 00000 n
+0000345750 00000 n
+0000345815 00000 n
+0000345880 00000 n
+0000345945 00000 n
+0000346010 00000 n
+0000346074 00000 n
+0000346139 00000 n
+0000346204 00000 n
+0000346269 00000 n
+0000346334 00000 n
+0000346399 00000 n
+0000346464 00000 n
+0000346529 00000 n
+0000346594 00000 n
+0000346658 00000 n
+0000346723 00000 n
+0000346788 00000 n
+0000346853 00000 n
+0000346918 00000 n
+0000346983 00000 n
+0000347048 00000 n
+0000347113 00000 n
+0000347178 00000 n
+0000347243 00000 n
+0000347307 00000 n
+0000347372 00000 n
+0000347437 00000 n
+0000347502 00000 n
+0000347567 00000 n
0000347632 00000 n
-0000347696 00000 n
-0000347761 00000 n
-0000347825 00000 n
+0000347697 00000 n
+0000347762 00000 n
+0000347827 00000 n
0000347890 00000 n
0000347955 00000 n
0000348020 00000 n
@@ -18872,493 +18941,488 @@ xref
0000348215 00000 n
0000348280 00000 n
0000348345 00000 n
-0000348409 00000 n
+0000348410 00000 n
0000348474 00000 n
0000348539 00000 n
0000348604 00000 n
-0000348669 00000 n
-0000348734 00000 n
-0000348799 00000 n
-0000348864 00000 n
-0000348929 00000 n
-0000348993 00000 n
-0000349058 00000 n
-0000349123 00000 n
-0000349188 00000 n
-0000349253 00000 n
-0000349318 00000 n
-0000349383 00000 n
-0000349447 00000 n
-0000349512 00000 n
-0000349577 00000 n
-0000349642 00000 n
-0000349707 00000 n
-0000349772 00000 n
-0000349837 00000 n
-0000349901 00000 n
-0000349966 00000 n
-0000350031 00000 n
-0000350096 00000 n
-0000350161 00000 n
-0000350226 00000 n
-0000350291 00000 n
-0000350356 00000 n
-0000350421 00000 n
-0000350486 00000 n
-0000350551 00000 n
-0000350616 00000 n
-0000350681 00000 n
-0000350809 00000 n
-0000350874 00000 n
-0000350939 00000 n
-0000351004 00000 n
-0000351069 00000 n
-0000351133 00000 n
-0000351197 00000 n
-0000357475 00000 n
-0000354113 00000 n
-0000351425 00000 n
-0000354238 00000 n
-0000354302 00000 n
-0000354367 00000 n
-0000354431 00000 n
-0000354496 00000 n
-0000354561 00000 n
-0000354626 00000 n
-0000354691 00000 n
-0000354819 00000 n
-0000354884 00000 n
-0000354949 00000 n
-0000355014 00000 n
-0000355078 00000 n
-0000355143 00000 n
-0000355208 00000 n
-0000355273 00000 n
-0000355338 00000 n
-0000355403 00000 n
-0000355468 00000 n
-0000355533 00000 n
-0000355598 00000 n
-0000355662 00000 n
-0000355727 00000 n
-0000355792 00000 n
-0000355857 00000 n
-0000355922 00000 n
-0000355987 00000 n
-0000356052 00000 n
-0000874848 00000 n
-0000356180 00000 n
-0000356245 00000 n
-0000356310 00000 n
-0000356374 00000 n
-0000356439 00000 n
-0000356504 00000 n
-0000356569 00000 n
-0000356634 00000 n
-0000356699 00000 n
-0000356763 00000 n
-0000356828 00000 n
-0000356893 00000 n
-0000356958 00000 n
-0000357023 00000 n
-0000357088 00000 n
-0000357153 00000 n
-0000357217 00000 n
-0000357282 00000 n
-0000357347 00000 n
-0000357411 00000 n
-0000362848 00000 n
-0000360973 00000 n
-0000357706 00000 n
-0000361098 00000 n
-0000361162 00000 n
-0000361227 00000 n
-0000361291 00000 n
-0000361356 00000 n
-0000361421 00000 n
-0000361486 00000 n
-0000361551 00000 n
-0000361616 00000 n
-0000361681 00000 n
-0000361746 00000 n
-0000361809 00000 n
-0000361874 00000 n
-0000361939 00000 n
-0000362004 00000 n
-0000362069 00000 n
-0000362134 00000 n
-0000362199 00000 n
-0000362264 00000 n
-0000362329 00000 n
-0000362394 00000 n
-0000362459 00000 n
-0000362524 00000 n
-0000362589 00000 n
-0000362654 00000 n
-0000362719 00000 n
-0000362783 00000 n
-0000368124 00000 n
-0000365730 00000 n
-0000363064 00000 n
-0000365855 00000 n
-0000365919 00000 n
-0000365984 00000 n
-0000366049 00000 n
-0000366114 00000 n
-0000366178 00000 n
-0000366243 00000 n
-0000366308 00000 n
-0000366373 00000 n
-0000366438 00000 n
-0000366503 00000 n
-0000366568 00000 n
-0000366632 00000 n
-0000366697 00000 n
-0000366762 00000 n
-0000366827 00000 n
-0000366892 00000 n
-0000366957 00000 n
-0000367022 00000 n
-0000367087 00000 n
-0000367152 00000 n
-0000367217 00000 n
-0000367282 00000 n
-0000367346 00000 n
-0000367411 00000 n
-0000367476 00000 n
-0000367540 00000 n
-0000367605 00000 n
-0000367669 00000 n
-0000367734 00000 n
-0000367799 00000 n
-0000367864 00000 n
-0000367929 00000 n
-0000367994 00000 n
-0000368059 00000 n
-0000372967 00000 n
-0000370444 00000 n
-0000368340 00000 n
-0000370569 00000 n
-0000370633 00000 n
-0000370698 00000 n
-0000370763 00000 n
-0000370828 00000 n
-0000370892 00000 n
-0000370957 00000 n
-0000371022 00000 n
-0000371087 00000 n
-0000371152 00000 n
-0000371217 00000 n
-0000371282 00000 n
-0000371347 00000 n
-0000371412 00000 n
-0000371477 00000 n
-0000371542 00000 n
-0000371607 00000 n
-0000371670 00000 n
-0000371735 00000 n
-0000371800 00000 n
-0000371865 00000 n
-0000371930 00000 n
-0000371995 00000 n
-0000372060 00000 n
-0000372125 00000 n
-0000372190 00000 n
-0000372254 00000 n
-0000372319 00000 n
-0000372384 00000 n
-0000372449 00000 n
-0000372514 00000 n
-0000372578 00000 n
-0000372643 00000 n
-0000372708 00000 n
-0000372773 00000 n
-0000372838 00000 n
-0000372902 00000 n
-0000378325 00000 n
-0000375411 00000 n
-0000373157 00000 n
-0000375536 00000 n
-0000375600 00000 n
-0000375664 00000 n
-0000375729 00000 n
-0000375794 00000 n
-0000375859 00000 n
-0000375924 00000 n
-0000375989 00000 n
-0000376054 00000 n
-0000376118 00000 n
-0000376183 00000 n
-0000376248 00000 n
-0000376313 00000 n
-0000376378 00000 n
-0000376443 00000 n
-0000376508 00000 n
-0000376573 00000 n
-0000376638 00000 n
-0000376703 00000 n
-0000376768 00000 n
-0000376833 00000 n
-0000376898 00000 n
-0000376963 00000 n
-0000377028 00000 n
-0000377093 00000 n
-0000377158 00000 n
-0000377222 00000 n
-0000377287 00000 n
-0000377352 00000 n
-0000377417 00000 n
-0000377482 00000 n
-0000377547 00000 n
-0000377612 00000 n
-0000377677 00000 n
-0000377742 00000 n
-0000377807 00000 n
-0000377872 00000 n
-0000377936 00000 n
-0000378001 00000 n
-0000378066 00000 n
-0000378131 00000 n
-0000378196 00000 n
-0000378260 00000 n
-0000383613 00000 n
-0000380437 00000 n
-0000378541 00000 n
-0000380562 00000 n
-0000380626 00000 n
-0000380691 00000 n
-0000380755 00000 n
-0000380820 00000 n
-0000380885 00000 n
-0000380950 00000 n
-0000381015 00000 n
-0000381080 00000 n
-0000381145 00000 n
-0000381209 00000 n
-0000381274 00000 n
-0000381339 00000 n
-0000381404 00000 n
-0000381469 00000 n
-0000381534 00000 n
-0000381599 00000 n
-0000381663 00000 n
-0000381728 00000 n
-0000381793 00000 n
-0000381858 00000 n
-0000381923 00000 n
-0000381988 00000 n
-0000382053 00000 n
-0000382118 00000 n
-0000382183 00000 n
-0000382248 00000 n
-0000382313 00000 n
-0000382378 00000 n
-0000382443 00000 n
-0000382508 00000 n
-0000382573 00000 n
-0000382638 00000 n
-0000382703 00000 n
-0000382768 00000 n
-0000382833 00000 n
-0000382898 00000 n
-0000382963 00000 n
-0000383028 00000 n
-0000383093 00000 n
-0000383158 00000 n
-0000383223 00000 n
-0000383288 00000 n
-0000383353 00000 n
-0000383418 00000 n
-0000383483 00000 n
-0000383548 00000 n
-0000386910 00000 n
-0000389402 00000 n
-0000386737 00000 n
-0000383790 00000 n
-0000387068 00000 n
-0000387132 00000 n
-0000387197 00000 n
-0000387262 00000 n
-0000387327 00000 n
-0000387392 00000 n
-0000387457 00000 n
-0000387522 00000 n
-0000387587 00000 n
-0000387652 00000 n
-0000387716 00000 n
-0000387781 00000 n
-0000387846 00000 n
-0000387911 00000 n
-0000387976 00000 n
-0000388041 00000 n
-0000388106 00000 n
-0000388171 00000 n
-0000388236 00000 n
-0000388301 00000 n
-0000388366 00000 n
-0000388431 00000 n
-0000388495 00000 n
-0000388560 00000 n
-0000388624 00000 n
-0000388689 00000 n
-0000388754 00000 n
-0000388819 00000 n
-0000388884 00000 n
-0000388949 00000 n
-0000389014 00000 n
-0000389079 00000 n
-0000389144 00000 n
-0000389209 00000 n
-0000389274 00000 n
-0000389338 00000 n
-0000877370 00000 n
-0000386879 00000 n
-0000396104 00000 n
-0000392544 00000 n
-0000389670 00000 n
-0000392669 00000 n
-0000392733 00000 n
-0000392798 00000 n
-0000392862 00000 n
-0000392927 00000 n
-0000392992 00000 n
-0000393057 00000 n
-0000393122 00000 n
-0000393187 00000 n
-0000393252 00000 n
-0000393317 00000 n
-0000393382 00000 n
-0000393447 00000 n
-0000393512 00000 n
-0000393577 00000 n
-0000393642 00000 n
-0000393707 00000 n
-0000393835 00000 n
-0000393900 00000 n
-0000393964 00000 n
-0000394029 00000 n
-0000394094 00000 n
-0000394159 00000 n
-0000394224 00000 n
-0000394289 00000 n
-0000394354 00000 n
-0000394419 00000 n
-0000394484 00000 n
-0000394548 00000 n
-0000394613 00000 n
-0000394678 00000 n
-0000394743 00000 n
-0000394808 00000 n
-0000394873 00000 n
-0000394938 00000 n
-0000395003 00000 n
-0000395068 00000 n
-0000395132 00000 n
-0000395197 00000 n
-0000395262 00000 n
-0000395327 00000 n
-0000395392 00000 n
-0000395457 00000 n
-0000395522 00000 n
-0000395587 00000 n
-0000395652 00000 n
-0000395716 00000 n
-0000395781 00000 n
-0000395846 00000 n
-0000395911 00000 n
-0000395976 00000 n
-0000396040 00000 n
-0000402081 00000 n
-0000399622 00000 n
-0000396307 00000 n
-0000399747 00000 n
-0000399811 00000 n
-0000399876 00000 n
-0000399940 00000 n
-0000400005 00000 n
-0000400070 00000 n
-0000400135 00000 n
-0000400200 00000 n
-0000400265 00000 n
-0000400330 00000 n
-0000400395 00000 n
-0000400460 00000 n
-0000400524 00000 n
-0000400589 00000 n
-0000400654 00000 n
-0000400719 00000 n
-0000400784 00000 n
-0000400849 00000 n
-0000400914 00000 n
-0000400979 00000 n
-0000401044 00000 n
-0000401108 00000 n
-0000401173 00000 n
-0000401238 00000 n
-0000401303 00000 n
-0000401368 00000 n
-0000401432 00000 n
-0000401497 00000 n
-0000401562 00000 n
-0000401627 00000 n
-0000401692 00000 n
-0000401757 00000 n
-0000401822 00000 n
-0000401887 00000 n
-0000401952 00000 n
-0000402016 00000 n
-0000405720 00000 n
-0000405877 00000 n
-0000408174 00000 n
-0000405538 00000 n
-0000402297 00000 n
-0000406034 00000 n
-0000406098 00000 n
-0000406161 00000 n
-0000406226 00000 n
-0000406291 00000 n
-0000406356 00000 n
-0000406420 00000 n
-0000406485 00000 n
-0000406550 00000 n
-0000406615 00000 n
-0000406680 00000 n
-0000406745 00000 n
-0000406810 00000 n
-0000406875 00000 n
-0000406940 00000 n
-0000407005 00000 n
-0000407070 00000 n
-0000407135 00000 n
-0000407200 00000 n
-0000407265 00000 n
-0000407330 00000 n
-0000407395 00000 n
-0000407460 00000 n
-0000407525 00000 n
-0000407590 00000 n
-0000407655 00000 n
-0000407720 00000 n
-0000407784 00000 n
-0000407849 00000 n
-0000407914 00000 n
-0000407979 00000 n
-0000408044 00000 n
-0000408109 00000 n
-0000405680 00000 n
-0000413421 00000 n
-0000410056 00000 n
-0000408442 00000 n
-0000410181 00000 n
+0000348668 00000 n
+0000354405 00000 n
+0000350845 00000 n
+0000348883 00000 n
+0000350970 00000 n
+0000351034 00000 n
+0000351099 00000 n
+0000351163 00000 n
+0000351228 00000 n
+0000351293 00000 n
+0000351358 00000 n
+0000351423 00000 n
+0000351488 00000 n
+0000351553 00000 n
+0000351618 00000 n
+0000351683 00000 n
+0000351748 00000 n
+0000351813 00000 n
+0000351878 00000 n
+0000351943 00000 n
+0000352008 00000 n
+0000352073 00000 n
+0000352138 00000 n
+0000352203 00000 n
+0000352268 00000 n
+0000352333 00000 n
+0000352398 00000 n
+0000352463 00000 n
+0000352527 00000 n
+0000352592 00000 n
+0000352657 00000 n
+0000352722 00000 n
+0000352787 00000 n
+0000352852 00000 n
+0000352917 00000 n
+0000352982 00000 n
+0000353047 00000 n
+0000353175 00000 n
+0000353240 00000 n
+0000353305 00000 n
+0000353370 00000 n
+0000353435 00000 n
+0000353500 00000 n
+0000353565 00000 n
+0000353630 00000 n
+0000353695 00000 n
+0000353759 00000 n
+0000353824 00000 n
+0000353889 00000 n
+0000353954 00000 n
+0000354019 00000 n
+0000354147 00000 n
+0000354212 00000 n
+0000354277 00000 n
+0000354341 00000 n
+0000360106 00000 n
+0000356935 00000 n
+0000354569 00000 n
+0000357060 00000 n
+0000357124 00000 n
+0000357189 00000 n
+0000357253 00000 n
+0000357318 00000 n
+0000357383 00000 n
+0000357448 00000 n
+0000357513 00000 n
+0000357578 00000 n
+0000357643 00000 n
+0000357708 00000 n
+0000357773 00000 n
+0000357838 00000 n
+0000357902 00000 n
+0000357967 00000 n
+0000358032 00000 n
+0000358097 00000 n
+0000358162 00000 n
+0000358227 00000 n
+0000358292 00000 n
+0000358357 00000 n
+0000358421 00000 n
+0000358486 00000 n
+0000358551 00000 n
+0000358616 00000 n
+0000358681 00000 n
+0000358746 00000 n
+0000358811 00000 n
+0000358876 00000 n
+0000358941 00000 n
+0000359004 00000 n
+0000359069 00000 n
+0000359134 00000 n
+0000359199 00000 n
+0000876033 00000 n
+0000359327 00000 n
+0000359392 00000 n
+0000359457 00000 n
+0000359521 00000 n
+0000359586 00000 n
+0000359651 00000 n
+0000359716 00000 n
+0000359781 00000 n
+0000359846 00000 n
+0000359911 00000 n
+0000359976 00000 n
+0000360041 00000 n
+0000365643 00000 n
+0000363770 00000 n
+0000360324 00000 n
+0000363895 00000 n
+0000364022 00000 n
+0000364087 00000 n
+0000364152 00000 n
+0000364217 00000 n
+0000364282 00000 n
+0000364347 00000 n
+0000364411 00000 n
+0000364476 00000 n
+0000364541 00000 n
+0000364606 00000 n
+0000364671 00000 n
+0000364736 00000 n
+0000364801 00000 n
+0000364866 00000 n
+0000364931 00000 n
+0000364996 00000 n
+0000365059 00000 n
+0000365124 00000 n
+0000365189 00000 n
+0000365254 00000 n
+0000365319 00000 n
+0000365384 00000 n
+0000365449 00000 n
+0000365514 00000 n
+0000365579 00000 n
+0000370925 00000 n
+0000368531 00000 n
+0000365872 00000 n
+0000368656 00000 n
+0000368720 00000 n
+0000368785 00000 n
+0000368850 00000 n
+0000368915 00000 n
+0000368979 00000 n
+0000369044 00000 n
+0000369109 00000 n
+0000369174 00000 n
+0000369239 00000 n
+0000369304 00000 n
+0000369369 00000 n
+0000369433 00000 n
+0000369498 00000 n
+0000369563 00000 n
+0000369628 00000 n
+0000369693 00000 n
+0000369758 00000 n
+0000369823 00000 n
+0000369888 00000 n
+0000369953 00000 n
+0000370018 00000 n
+0000370083 00000 n
+0000370147 00000 n
+0000370212 00000 n
+0000370277 00000 n
+0000370341 00000 n
+0000370406 00000 n
+0000370470 00000 n
+0000370535 00000 n
+0000370600 00000 n
+0000370665 00000 n
+0000370730 00000 n
+0000370795 00000 n
+0000370860 00000 n
+0000375762 00000 n
+0000373239 00000 n
+0000371141 00000 n
+0000373364 00000 n
+0000373428 00000 n
+0000373493 00000 n
+0000373558 00000 n
+0000373623 00000 n
+0000373687 00000 n
+0000373752 00000 n
+0000373817 00000 n
+0000373882 00000 n
+0000373947 00000 n
+0000374012 00000 n
+0000374077 00000 n
+0000374142 00000 n
+0000374207 00000 n
+0000374272 00000 n
+0000374337 00000 n
+0000374402 00000 n
+0000374465 00000 n
+0000374530 00000 n
+0000374595 00000 n
+0000374660 00000 n
+0000374725 00000 n
+0000374790 00000 n
+0000374855 00000 n
+0000374920 00000 n
+0000374985 00000 n
+0000375049 00000 n
+0000375114 00000 n
+0000375179 00000 n
+0000375244 00000 n
+0000375309 00000 n
+0000375373 00000 n
+0000375438 00000 n
+0000375503 00000 n
+0000375568 00000 n
+0000375633 00000 n
+0000375697 00000 n
+0000381378 00000 n
+0000378269 00000 n
+0000375952 00000 n
+0000378394 00000 n
+0000378458 00000 n
+0000378522 00000 n
+0000378587 00000 n
+0000378652 00000 n
+0000378717 00000 n
+0000378782 00000 n
+0000378847 00000 n
+0000378912 00000 n
+0000378976 00000 n
+0000379041 00000 n
+0000379106 00000 n
+0000379171 00000 n
+0000379236 00000 n
+0000379301 00000 n
+0000379366 00000 n
+0000379431 00000 n
+0000379496 00000 n
+0000379561 00000 n
+0000379626 00000 n
+0000379691 00000 n
+0000379756 00000 n
+0000379821 00000 n
+0000379886 00000 n
+0000379951 00000 n
+0000380016 00000 n
+0000380080 00000 n
+0000380145 00000 n
+0000380210 00000 n
+0000380275 00000 n
+0000380340 00000 n
+0000380405 00000 n
+0000380470 00000 n
+0000380535 00000 n
+0000380600 00000 n
+0000380665 00000 n
+0000380730 00000 n
+0000380795 00000 n
+0000380860 00000 n
+0000380924 00000 n
+0000380989 00000 n
+0000381054 00000 n
+0000381119 00000 n
+0000381184 00000 n
+0000381249 00000 n
+0000381314 00000 n
+0000386631 00000 n
+0000383391 00000 n
+0000381594 00000 n
+0000383516 00000 n
+0000383580 00000 n
+0000383645 00000 n
+0000383709 00000 n
+0000383774 00000 n
+0000383839 00000 n
+0000383904 00000 n
+0000383969 00000 n
+0000384034 00000 n
+0000384099 00000 n
+0000384164 00000 n
+0000384229 00000 n
+0000384294 00000 n
+0000384359 00000 n
+0000384424 00000 n
+0000384489 00000 n
+0000384554 00000 n
+0000384618 00000 n
+0000384683 00000 n
+0000384748 00000 n
+0000384813 00000 n
+0000384878 00000 n
+0000384943 00000 n
+0000385008 00000 n
+0000385073 00000 n
+0000385138 00000 n
+0000385203 00000 n
+0000385268 00000 n
+0000385333 00000 n
+0000385398 00000 n
+0000385463 00000 n
+0000385528 00000 n
+0000385593 00000 n
+0000385658 00000 n
+0000385722 00000 n
+0000385787 00000 n
+0000385852 00000 n
+0000385917 00000 n
+0000385982 00000 n
+0000386047 00000 n
+0000386112 00000 n
+0000386176 00000 n
+0000386241 00000 n
+0000386306 00000 n
+0000386371 00000 n
+0000386436 00000 n
+0000386501 00000 n
+0000386566 00000 n
+0000389935 00000 n
+0000392426 00000 n
+0000389762 00000 n
+0000386808 00000 n
+0000390093 00000 n
+0000390157 00000 n
+0000390222 00000 n
+0000390287 00000 n
+0000390352 00000 n
+0000390417 00000 n
+0000390482 00000 n
+0000390547 00000 n
+0000390612 00000 n
+0000390677 00000 n
+0000390741 00000 n
+0000390806 00000 n
+0000390871 00000 n
+0000390936 00000 n
+0000391001 00000 n
+0000391066 00000 n
+0000391131 00000 n
+0000391196 00000 n
+0000391261 00000 n
+0000391325 00000 n
+0000391390 00000 n
+0000391455 00000 n
+0000391520 00000 n
+0000391585 00000 n
+0000391649 00000 n
+0000391714 00000 n
+0000391778 00000 n
+0000391843 00000 n
+0000391908 00000 n
+0000391972 00000 n
+0000392037 00000 n
+0000392102 00000 n
+0000392167 00000 n
+0000392232 00000 n
+0000392297 00000 n
+0000392362 00000 n
+0000878556 00000 n
+0000389904 00000 n
+0000398839 00000 n
+0000395477 00000 n
+0000392694 00000 n
+0000395602 00000 n
+0000395666 00000 n
+0000395731 00000 n
+0000395795 00000 n
+0000395860 00000 n
+0000395925 00000 n
+0000395990 00000 n
+0000396055 00000 n
+0000396120 00000 n
+0000396185 00000 n
+0000396250 00000 n
+0000396315 00000 n
+0000396379 00000 n
+0000396444 00000 n
+0000396509 00000 n
+0000396574 00000 n
+0000396639 00000 n
+0000396704 00000 n
+0000396769 00000 n
+0000396833 00000 n
+0000396898 00000 n
+0000397024 00000 n
+0000397089 00000 n
+0000397154 00000 n
+0000397219 00000 n
+0000397284 00000 n
+0000397349 00000 n
+0000397414 00000 n
+0000397478 00000 n
+0000397543 00000 n
+0000397608 00000 n
+0000397673 00000 n
+0000397738 00000 n
+0000397803 00000 n
+0000397867 00000 n
+0000397932 00000 n
+0000397997 00000 n
+0000398062 00000 n
+0000398127 00000 n
+0000398192 00000 n
+0000398257 00000 n
+0000398322 00000 n
+0000398387 00000 n
+0000398451 00000 n
+0000398516 00000 n
+0000398581 00000 n
+0000398646 00000 n
+0000398711 00000 n
+0000398775 00000 n
+0000405213 00000 n
+0000402237 00000 n
+0000399042 00000 n
+0000402362 00000 n
+0000402426 00000 n
+0000402491 00000 n
+0000402555 00000 n
+0000402620 00000 n
+0000402685 00000 n
+0000402750 00000 n
+0000402815 00000 n
+0000402880 00000 n
+0000402945 00000 n
+0000403010 00000 n
+0000403075 00000 n
+0000403139 00000 n
+0000403204 00000 n
+0000403269 00000 n
+0000403334 00000 n
+0000403399 00000 n
+0000403464 00000 n
+0000403529 00000 n
+0000403594 00000 n
+0000403659 00000 n
+0000403723 00000 n
+0000403788 00000 n
+0000403853 00000 n
+0000403918 00000 n
+0000403983 00000 n
+0000404048 00000 n
+0000404113 00000 n
+0000404178 00000 n
+0000404243 00000 n
+0000404307 00000 n
+0000404372 00000 n
+0000404437 00000 n
+0000404502 00000 n
+0000404567 00000 n
+0000404632 00000 n
+0000404696 00000 n
+0000404761 00000 n
+0000404826 00000 n
+0000404891 00000 n
+0000404955 00000 n
+0000405020 00000 n
+0000405085 00000 n
+0000405149 00000 n
+0000409220 00000 n
+0000409377 00000 n
+0000411347 00000 n
+0000409038 00000 n
+0000405416 00000 n
+0000409534 00000 n
+0000409598 00000 n
+0000409663 00000 n
+0000409727 00000 n
+0000409792 00000 n
+0000409857 00000 n
+0000409921 00000 n
+0000409986 00000 n
+0000410051 00000 n
+0000410116 00000 n
+0000410180 00000 n
0000410245 00000 n
-0000410310 00000 n
-0000410375 00000 n
-0000410440 00000 n
-0000410505 00000 n
-0000410570 00000 n
-0000410635 00000 n
-0000410700 00000 n
-0000410765 00000 n
+0000410309 00000 n
+0000410374 00000 n
+0000410439 00000 n
+0000410504 00000 n
+0000410569 00000 n
+0000410634 00000 n
+0000410699 00000 n
+0000410764 00000 n
0000410829 00000 n
0000410894 00000 n
0000410959 00000 n
@@ -19367,1924 +19431,1942 @@ xref
0000411154 00000 n
0000411219 00000 n
0000411284 00000 n
-0000411349 00000 n
-0000411413 00000 n
-0000411478 00000 n
-0000411543 00000 n
-0000411608 00000 n
-0000411673 00000 n
-0000411738 00000 n
-0000411803 00000 n
-0000411868 00000 n
-0000411933 00000 n
-0000411997 00000 n
-0000412062 00000 n
-0000412127 00000 n
-0000412192 00000 n
-0000412257 00000 n
-0000412322 00000 n
-0000412387 00000 n
-0000412452 00000 n
-0000412515 00000 n
-0000412580 00000 n
-0000412645 00000 n
-0000412710 00000 n
-0000412775 00000 n
-0000412838 00000 n
-0000412903 00000 n
-0000412968 00000 n
-0000413033 00000 n
-0000413098 00000 n
-0000413163 00000 n
-0000413227 00000 n
-0000413292 00000 n
-0000413356 00000 n
-0000419403 00000 n
-0000415387 00000 n
-0000413585 00000 n
+0000409180 00000 n
+0000417197 00000 n
+0000413377 00000 n
+0000411628 00000 n
+0000413502 00000 n
+0000413566 00000 n
+0000413631 00000 n
+0000413695 00000 n
+0000413760 00000 n
+0000413825 00000 n
+0000413890 00000 n
+0000413955 00000 n
+0000414020 00000 n
+0000414085 00000 n
+0000414150 00000 n
+0000414215 00000 n
+0000414280 00000 n
+0000414345 00000 n
+0000414410 00000 n
+0000414475 00000 n
+0000414540 00000 n
+0000414605 00000 n
+0000414669 00000 n
+0000414734 00000 n
+0000414799 00000 n
+0000414864 00000 n
+0000414929 00000 n
+0000414994 00000 n
+0000415059 00000 n
+0000415124 00000 n
+0000415189 00000 n
+0000415252 00000 n
+0000415317 00000 n
+0000415382 00000 n
+0000415447 00000 n
0000415512 00000 n
-0000415576 00000 n
-0000415640 00000 n
-0000415705 00000 n
-0000415770 00000 n
-0000415835 00000 n
-0000415900 00000 n
-0000415965 00000 n
-0000416030 00000 n
-0000416095 00000 n
-0000416160 00000 n
-0000416224 00000 n
-0000416289 00000 n
-0000416354 00000 n
-0000416419 00000 n
-0000416484 00000 n
-0000416549 00000 n
-0000416614 00000 n
-0000416679 00000 n
+0000415577 00000 n
+0000415642 00000 n
+0000415707 00000 n
+0000415772 00000 n
+0000415836 00000 n
+0000415901 00000 n
+0000415966 00000 n
+0000416031 00000 n
+0000416096 00000 n
+0000416161 00000 n
+0000416226 00000 n
+0000416291 00000 n
+0000416356 00000 n
+0000416420 00000 n
+0000416485 00000 n
+0000416550 00000 n
+0000416615 00000 n
+0000416680 00000 n
0000416744 00000 n
-0000416808 00000 n
-0000416873 00000 n
-0000416938 00000 n
-0000417003 00000 n
-0000417068 00000 n
+0000416809 00000 n
+0000416874 00000 n
+0000416939 00000 n
+0000417004 00000 n
+0000417069 00000 n
0000417133 00000 n
-0000417198 00000 n
-0000417263 00000 n
-0000417328 00000 n
-0000417392 00000 n
-0000417457 00000 n
-0000417522 00000 n
-0000417587 00000 n
-0000417652 00000 n
-0000417717 00000 n
-0000417782 00000 n
-0000417847 00000 n
-0000417912 00000 n
-0000417976 00000 n
-0000418041 00000 n
-0000418106 00000 n
-0000418171 00000 n
-0000418236 00000 n
-0000418301 00000 n
-0000418366 00000 n
-0000418431 00000 n
-0000418496 00000 n
-0000418560 00000 n
-0000418625 00000 n
-0000418690 00000 n
-0000418755 00000 n
-0000418820 00000 n
-0000418885 00000 n
-0000418950 00000 n
-0000419015 00000 n
-0000419080 00000 n
-0000419144 00000 n
-0000419209 00000 n
-0000419274 00000 n
-0000419339 00000 n
-0000425505 00000 n
-0000422659 00000 n
-0000419593 00000 n
-0000422784 00000 n
-0000422848 00000 n
-0000422913 00000 n
-0000422977 00000 n
-0000423042 00000 n
-0000423107 00000 n
+0000423008 00000 n
+0000418933 00000 n
+0000417361 00000 n
+0000419058 00000 n
+0000419122 00000 n
+0000419186 00000 n
+0000419251 00000 n
+0000419315 00000 n
+0000419379 00000 n
+0000419444 00000 n
+0000419509 00000 n
+0000419574 00000 n
+0000419639 00000 n
+0000419704 00000 n
+0000419769 00000 n
+0000419834 00000 n
+0000419899 00000 n
+0000419963 00000 n
+0000420028 00000 n
+0000420093 00000 n
+0000420158 00000 n
+0000420223 00000 n
+0000420288 00000 n
+0000420353 00000 n
+0000420418 00000 n
+0000420483 00000 n
+0000420548 00000 n
+0000420612 00000 n
+0000420677 00000 n
+0000420742 00000 n
+0000420807 00000 n
+0000420872 00000 n
+0000420937 00000 n
+0000421002 00000 n
+0000421067 00000 n
+0000421132 00000 n
+0000421196 00000 n
+0000421261 00000 n
+0000421326 00000 n
+0000421391 00000 n
+0000421456 00000 n
+0000421521 00000 n
+0000421586 00000 n
+0000421651 00000 n
+0000421716 00000 n
+0000421779 00000 n
+0000421844 00000 n
+0000421909 00000 n
+0000421974 00000 n
+0000422039 00000 n
+0000422104 00000 n
+0000422169 00000 n
+0000422234 00000 n
+0000422299 00000 n
+0000422363 00000 n
+0000422428 00000 n
+0000422493 00000 n
+0000422558 00000 n
+0000422623 00000 n
+0000422688 00000 n
+0000422753 00000 n
+0000422818 00000 n
+0000422883 00000 n
+0000422946 00000 n
+0000428904 00000 n
+0000426317 00000 n
0000423172 00000 n
-0000423236 00000 n
-0000423301 00000 n
-0000423366 00000 n
-0000423431 00000 n
-0000423496 00000 n
-0000423560 00000 n
-0000423625 00000 n
-0000423690 00000 n
-0000423755 00000 n
-0000423820 00000 n
-0000423885 00000 n
-0000423950 00000 n
-0000424015 00000 n
-0000424079 00000 n
-0000424144 00000 n
-0000424209 00000 n
-0000424274 00000 n
-0000424339 00000 n
-0000424404 00000 n
-0000424469 00000 n
-0000424534 00000 n
-0000424598 00000 n
-0000424663 00000 n
-0000424728 00000 n
-0000424793 00000 n
-0000424858 00000 n
-0000424923 00000 n
-0000424988 00000 n
-0000425053 00000 n
-0000425118 00000 n
-0000425183 00000 n
-0000425247 00000 n
-0000425312 00000 n
-0000425377 00000 n
-0000425441 00000 n
-0000428852 00000 n
-0000431800 00000 n
-0000428679 00000 n
-0000425721 00000 n
-0000429010 00000 n
-0000429074 00000 n
-0000429139 00000 n
-0000429204 00000 n
-0000429269 00000 n
-0000429334 00000 n
-0000429399 00000 n
-0000429464 00000 n
-0000429529 00000 n
-0000429594 00000 n
-0000429658 00000 n
-0000429723 00000 n
-0000429787 00000 n
-0000429852 00000 n
-0000429917 00000 n
-0000429982 00000 n
-0000430047 00000 n
-0000430112 00000 n
-0000430177 00000 n
-0000430242 00000 n
-0000430307 00000 n
-0000430372 00000 n
-0000430437 00000 n
-0000430502 00000 n
-0000430567 00000 n
-0000430632 00000 n
-0000430697 00000 n
-0000430762 00000 n
-0000430827 00000 n
-0000430892 00000 n
-0000430957 00000 n
-0000431021 00000 n
-0000431086 00000 n
-0000431151 00000 n
-0000431216 00000 n
-0000431281 00000 n
-0000431346 00000 n
-0000431411 00000 n
-0000431476 00000 n
-0000431541 00000 n
-0000431606 00000 n
-0000431671 00000 n
-0000431736 00000 n
-0000428821 00000 n
-0000437954 00000 n
-0000434329 00000 n
-0000432081 00000 n
-0000434454 00000 n
+0000426442 00000 n
+0000426506 00000 n
+0000426571 00000 n
+0000426636 00000 n
+0000426700 00000 n
+0000426765 00000 n
+0000426830 00000 n
+0000426895 00000 n
+0000426959 00000 n
+0000427024 00000 n
+0000427089 00000 n
+0000427154 00000 n
+0000427219 00000 n
+0000427283 00000 n
+0000427348 00000 n
+0000427413 00000 n
+0000427478 00000 n
+0000427543 00000 n
+0000427608 00000 n
+0000427673 00000 n
+0000427738 00000 n
+0000427803 00000 n
+0000427868 00000 n
+0000427933 00000 n
+0000427998 00000 n
+0000428063 00000 n
+0000428127 00000 n
+0000428192 00000 n
+0000428257 00000 n
+0000428322 00000 n
+0000428386 00000 n
+0000428451 00000 n
+0000428516 00000 n
+0000428581 00000 n
+0000428646 00000 n
+0000428711 00000 n
+0000428776 00000 n
+0000428840 00000 n
+0000438019 00000 n
+0000434972 00000 n
+0000431799 00000 n
+0000429120 00000 n
+0000431924 00000 n
+0000431988 00000 n
+0000432053 00000 n
+0000432117 00000 n
+0000432182 00000 n
+0000432247 00000 n
+0000432312 00000 n
+0000432377 00000 n
+0000432442 00000 n
+0000432507 00000 n
+0000432572 00000 n
+0000432637 00000 n
+0000432702 00000 n
+0000432767 00000 n
+0000432832 00000 n
+0000432896 00000 n
+0000432961 00000 n
+0000433025 00000 n
+0000433090 00000 n
+0000433155 00000 n
+0000433220 00000 n
+0000433285 00000 n
+0000433350 00000 n
+0000433415 00000 n
+0000433480 00000 n
+0000433545 00000 n
+0000433610 00000 n
+0000433675 00000 n
+0000433740 00000 n
+0000433804 00000 n
+0000433869 00000 n
+0000433934 00000 n
+0000433999 00000 n
+0000434064 00000 n
+0000434129 00000 n
+0000434194 00000 n
+0000434259 00000 n
+0000434324 00000 n
+0000434388 00000 n
+0000434453 00000 n
0000434518 00000 n
0000434583 00000 n
-0000434647 00000 n
-0000434712 00000 n
-0000434777 00000 n
-0000434842 00000 n
-0000434907 00000 n
-0000434972 00000 n
-0000435037 00000 n
-0000435102 00000 n
-0000435230 00000 n
-0000435295 00000 n
-0000435360 00000 n
-0000435425 00000 n
-0000435490 00000 n
-0000435555 00000 n
-0000435620 00000 n
-0000435685 00000 n
-0000435750 00000 n
-0000435815 00000 n
-0000435880 00000 n
-0000435945 00000 n
-0000436008 00000 n
-0000436073 00000 n
-0000436138 00000 n
-0000436203 00000 n
-0000436268 00000 n
-0000436333 00000 n
-0000436398 00000 n
-0000436463 00000 n
-0000436528 00000 n
-0000436593 00000 n
-0000436658 00000 n
-0000436723 00000 n
-0000436788 00000 n
-0000436853 00000 n
-0000436918 00000 n
-0000436983 00000 n
-0000437048 00000 n
-0000437112 00000 n
-0000437177 00000 n
-0000437242 00000 n
-0000437307 00000 n
-0000437372 00000 n
-0000437437 00000 n
-0000437502 00000 n
-0000437567 00000 n
-0000437632 00000 n
-0000437696 00000 n
-0000437761 00000 n
-0000437826 00000 n
-0000437890 00000 n
-0000444002 00000 n
-0000440508 00000 n
-0000438131 00000 n
-0000440633 00000 n
-0000440697 00000 n
-0000440762 00000 n
-0000440826 00000 n
-0000440891 00000 n
-0000440956 00000 n
-0000441021 00000 n
-0000441086 00000 n
-0000441151 00000 n
-0000441215 00000 n
-0000441280 00000 n
-0000441345 00000 n
-0000441410 00000 n
-0000441475 00000 n
-0000441540 00000 n
-0000441605 00000 n
-0000441670 00000 n
-0000441734 00000 n
-0000441799 00000 n
-0000441864 00000 n
-0000441929 00000 n
-0000441994 00000 n
-0000442059 00000 n
-0000442124 00000 n
-0000442189 00000 n
-0000442254 00000 n
-0000442318 00000 n
-0000442383 00000 n
-0000442448 00000 n
-0000442513 00000 n
-0000442578 00000 n
-0000442643 00000 n
-0000442708 00000 n
-0000442773 00000 n
-0000442838 00000 n
-0000442902 00000 n
-0000442967 00000 n
-0000443032 00000 n
-0000443097 00000 n
-0000443162 00000 n
-0000443227 00000 n
-0000443292 00000 n
-0000443357 00000 n
-0000443422 00000 n
-0000443486 00000 n
-0000443550 00000 n
-0000443615 00000 n
-0000443679 00000 n
-0000443744 00000 n
-0000443809 00000 n
-0000443874 00000 n
-0000443938 00000 n
-0000449578 00000 n
-0000446861 00000 n
-0000444179 00000 n
-0000446986 00000 n
-0000447050 00000 n
-0000447115 00000 n
-0000447179 00000 n
-0000447244 00000 n
-0000447309 00000 n
-0000447374 00000 n
-0000447439 00000 n
-0000447502 00000 n
-0000447567 00000 n
-0000447632 00000 n
-0000447697 00000 n
-0000447762 00000 n
-0000447827 00000 n
-0000447892 00000 n
-0000447957 00000 n
-0000448022 00000 n
-0000448087 00000 n
-0000448152 00000 n
-0000448217 00000 n
-0000448282 00000 n
-0000448347 00000 n
-0000448412 00000 n
-0000448477 00000 n
-0000448542 00000 n
-0000448607 00000 n
-0000448672 00000 n
-0000448737 00000 n
-0000448802 00000 n
-0000448867 00000 n
-0000448932 00000 n
-0000448997 00000 n
-0000449062 00000 n
-0000449126 00000 n
-0000449191 00000 n
-0000449256 00000 n
-0000449320 00000 n
-0000449385 00000 n
-0000449450 00000 n
-0000449514 00000 n
-0000877534 00000 n
-0000455380 00000 n
-0000451690 00000 n
-0000449781 00000 n
-0000451815 00000 n
-0000451879 00000 n
-0000451944 00000 n
-0000452008 00000 n
-0000452073 00000 n
-0000452138 00000 n
-0000452203 00000 n
-0000452268 00000 n
-0000452332 00000 n
-0000452396 00000 n
-0000452461 00000 n
-0000452526 00000 n
-0000452591 00000 n
-0000452656 00000 n
-0000452721 00000 n
-0000452786 00000 n
-0000452851 00000 n
-0000452916 00000 n
-0000452981 00000 n
-0000453046 00000 n
-0000453111 00000 n
-0000453176 00000 n
-0000453241 00000 n
-0000453306 00000 n
-0000453370 00000 n
-0000453435 00000 n
-0000453500 00000 n
-0000453565 00000 n
-0000453630 00000 n
-0000453695 00000 n
-0000453760 00000 n
-0000453825 00000 n
-0000453890 00000 n
-0000453954 00000 n
-0000454019 00000 n
-0000454084 00000 n
-0000454149 00000 n
-0000454214 00000 n
-0000454278 00000 n
-0000454343 00000 n
-0000454408 00000 n
-0000454473 00000 n
-0000454538 00000 n
-0000454603 00000 n
-0000454668 00000 n
-0000454733 00000 n
-0000454798 00000 n
-0000454863 00000 n
-0000454928 00000 n
-0000454993 00000 n
-0000455058 00000 n
-0000455122 00000 n
-0000455187 00000 n
-0000455252 00000 n
-0000455316 00000 n
-0000464284 00000 n
-0000461146 00000 n
-0000457325 00000 n
-0000455583 00000 n
-0000457450 00000 n
-0000457514 00000 n
-0000457579 00000 n
-0000457643 00000 n
-0000457708 00000 n
-0000457773 00000 n
-0000457838 00000 n
-0000457903 00000 n
-0000457968 00000 n
-0000458033 00000 n
-0000458098 00000 n
-0000458163 00000 n
-0000458227 00000 n
-0000458292 00000 n
-0000458357 00000 n
-0000458422 00000 n
-0000458487 00000 n
-0000458552 00000 n
-0000458617 00000 n
-0000458682 00000 n
-0000458747 00000 n
-0000458811 00000 n
-0000458876 00000 n
-0000458941 00000 n
-0000459006 00000 n
-0000459071 00000 n
-0000459135 00000 n
-0000459200 00000 n
-0000459264 00000 n
-0000459329 00000 n
-0000459394 00000 n
-0000459459 00000 n
-0000459524 00000 n
-0000459589 00000 n
-0000459654 00000 n
-0000459719 00000 n
-0000459784 00000 n
-0000459849 00000 n
-0000459913 00000 n
-0000459978 00000 n
-0000460043 00000 n
-0000460108 00000 n
-0000460173 00000 n
-0000460238 00000 n
-0000460303 00000 n
-0000460368 00000 n
-0000460433 00000 n
-0000460497 00000 n
-0000460562 00000 n
-0000460627 00000 n
-0000460692 00000 n
-0000460757 00000 n
-0000460822 00000 n
-0000460887 00000 n
-0000460952 00000 n
-0000461017 00000 n
-0000461081 00000 n
-0000467682 00000 n
-0000464111 00000 n
-0000461310 00000 n
-0000464442 00000 n
-0000464506 00000 n
-0000464571 00000 n
-0000464636 00000 n
-0000464701 00000 n
-0000464766 00000 n
-0000464830 00000 n
-0000464895 00000 n
-0000464960 00000 n
-0000465025 00000 n
-0000465090 00000 n
-0000465218 00000 n
-0000465283 00000 n
-0000465348 00000 n
-0000465413 00000 n
-0000465478 00000 n
-0000465543 00000 n
-0000465608 00000 n
-0000465673 00000 n
-0000465738 00000 n
-0000465803 00000 n
-0000465866 00000 n
-0000465931 00000 n
-0000465996 00000 n
-0000466061 00000 n
-0000466126 00000 n
-0000466191 00000 n
-0000466256 00000 n
-0000466321 00000 n
-0000466386 00000 n
-0000466450 00000 n
-0000466515 00000 n
-0000466580 00000 n
-0000466645 00000 n
-0000466710 00000 n
-0000466775 00000 n
-0000466840 00000 n
+0000434648 00000 n
+0000434713 00000 n
+0000434778 00000 n
+0000434843 00000 n
+0000434908 00000 n
+0000441354 00000 n
+0000437846 00000 n
+0000435201 00000 n
+0000438177 00000 n
+0000438241 00000 n
+0000438306 00000 n
+0000438371 00000 n
+0000438436 00000 n
+0000438500 00000 n
+0000438565 00000 n
+0000438630 00000 n
+0000438695 00000 n
+0000438760 00000 n
+0000438825 00000 n
+0000438890 00000 n
+0000438955 00000 n
+0000439083 00000 n
+0000439148 00000 n
+0000439213 00000 n
+0000439278 00000 n
+0000439343 00000 n
+0000439408 00000 n
+0000439473 00000 n
+0000439538 00000 n
+0000439603 00000 n
+0000439668 00000 n
+0000439733 00000 n
+0000439798 00000 n
+0000439863 00000 n
+0000439927 00000 n
+0000439992 00000 n
+0000440057 00000 n
+0000440122 00000 n
+0000440187 00000 n
+0000440252 00000 n
+0000440317 00000 n
+0000440382 00000 n
+0000440447 00000 n
+0000440511 00000 n
+0000440576 00000 n
+0000440641 00000 n
+0000440706 00000 n
+0000440771 00000 n
+0000440836 00000 n
+0000440901 00000 n
+0000440966 00000 n
+0000441031 00000 n
+0000441095 00000 n
+0000441160 00000 n
+0000441225 00000 n
+0000441290 00000 n
+0000437988 00000 n
+0000447570 00000 n
+0000443944 00000 n
+0000441583 00000 n
+0000444069 00000 n
+0000444133 00000 n
+0000444198 00000 n
+0000444262 00000 n
+0000444327 00000 n
+0000444392 00000 n
+0000444457 00000 n
+0000444522 00000 n
+0000444587 00000 n
+0000444652 00000 n
+0000444717 00000 n
+0000444782 00000 n
+0000444846 00000 n
+0000444911 00000 n
+0000444976 00000 n
+0000445041 00000 n
+0000445106 00000 n
+0000445171 00000 n
+0000445235 00000 n
+0000445300 00000 n
+0000445365 00000 n
+0000445430 00000 n
+0000445495 00000 n
+0000445560 00000 n
+0000445625 00000 n
+0000445690 00000 n
+0000445754 00000 n
+0000445819 00000 n
+0000445884 00000 n
+0000445949 00000 n
+0000446014 00000 n
+0000446079 00000 n
+0000446144 00000 n
+0000446209 00000 n
+0000446274 00000 n
+0000446338 00000 n
+0000446403 00000 n
+0000446468 00000 n
+0000446533 00000 n
+0000446598 00000 n
+0000446663 00000 n
+0000446728 00000 n
+0000446793 00000 n
+0000446858 00000 n
+0000446922 00000 n
+0000446987 00000 n
+0000447052 00000 n
+0000447117 00000 n
+0000447182 00000 n
+0000447247 00000 n
+0000447312 00000 n
+0000447377 00000 n
+0000447441 00000 n
+0000447506 00000 n
+0000452582 00000 n
+0000449993 00000 n
+0000447747 00000 n
+0000450118 00000 n
+0000450182 00000 n
+0000450246 00000 n
+0000450311 00000 n
+0000450376 00000 n
+0000450441 00000 n
+0000450506 00000 n
+0000450571 00000 n
+0000450636 00000 n
+0000450700 00000 n
+0000450765 00000 n
+0000450830 00000 n
+0000450895 00000 n
+0000450960 00000 n
+0000451025 00000 n
+0000451090 00000 n
+0000451155 00000 n
+0000451220 00000 n
+0000451285 00000 n
+0000451350 00000 n
+0000451415 00000 n
+0000451480 00000 n
+0000451545 00000 n
+0000451609 00000 n
+0000451674 00000 n
+0000451739 00000 n
+0000451804 00000 n
+0000451869 00000 n
+0000451934 00000 n
+0000451999 00000 n
+0000452064 00000 n
+0000452129 00000 n
+0000452193 00000 n
+0000452258 00000 n
+0000452323 00000 n
+0000452388 00000 n
+0000452453 00000 n
+0000452517 00000 n
+0000878720 00000 n
+0000458461 00000 n
+0000455099 00000 n
+0000452785 00000 n
+0000455224 00000 n
+0000455288 00000 n
+0000455352 00000 n
+0000455417 00000 n
+0000455481 00000 n
+0000455546 00000 n
+0000455611 00000 n
+0000455676 00000 n
+0000455741 00000 n
+0000455806 00000 n
+0000455871 00000 n
+0000455936 00000 n
+0000456001 00000 n
+0000456066 00000 n
+0000456130 00000 n
+0000456195 00000 n
+0000456259 00000 n
+0000456324 00000 n
+0000456389 00000 n
+0000456454 00000 n
+0000456519 00000 n
+0000456583 00000 n
+0000456648 00000 n
+0000456713 00000 n
+0000456778 00000 n
+0000456843 00000 n
+0000456907 00000 n
+0000456972 00000 n
+0000457037 00000 n
+0000457102 00000 n
+0000457167 00000 n
+0000457232 00000 n
+0000457297 00000 n
+0000457362 00000 n
+0000457427 00000 n
+0000457490 00000 n
+0000457555 00000 n
+0000457620 00000 n
+0000457685 00000 n
+0000457750 00000 n
+0000457815 00000 n
+0000457880 00000 n
+0000457945 00000 n
+0000458010 00000 n
+0000458074 00000 n
+0000458139 00000 n
+0000458203 00000 n
+0000458268 00000 n
+0000458333 00000 n
+0000458397 00000 n
+0000464146 00000 n
+0000460326 00000 n
+0000458664 00000 n
+0000460451 00000 n
+0000460515 00000 n
+0000460580 00000 n
+0000460644 00000 n
+0000460709 00000 n
+0000460774 00000 n
+0000460839 00000 n
+0000460904 00000 n
+0000460969 00000 n
+0000461034 00000 n
+0000461099 00000 n
+0000461164 00000 n
+0000461228 00000 n
+0000461293 00000 n
+0000461358 00000 n
+0000461423 00000 n
+0000461488 00000 n
+0000461553 00000 n
+0000461618 00000 n
+0000461683 00000 n
+0000461748 00000 n
+0000461812 00000 n
+0000461877 00000 n
+0000461942 00000 n
+0000462007 00000 n
+0000462072 00000 n
+0000462137 00000 n
+0000462202 00000 n
+0000462267 00000 n
+0000462332 00000 n
+0000462396 00000 n
+0000462461 00000 n
+0000462526 00000 n
+0000462591 00000 n
+0000462656 00000 n
+0000462721 00000 n
+0000462786 00000 n
+0000462851 00000 n
+0000462916 00000 n
+0000462980 00000 n
+0000463045 00000 n
+0000463109 00000 n
+0000463174 00000 n
+0000463239 00000 n
+0000463304 00000 n
+0000463369 00000 n
+0000463434 00000 n
+0000463499 00000 n
+0000463564 00000 n
+0000463628 00000 n
+0000463693 00000 n
+0000463758 00000 n
+0000463823 00000 n
+0000463888 00000 n
+0000463953 00000 n
+0000464018 00000 n
+0000464082 00000 n
+0000467078 00000 n
+0000470542 00000 n
0000466905 00000 n
-0000466970 00000 n
-0000467034 00000 n
-0000467099 00000 n
-0000467164 00000 n
-0000467229 00000 n
-0000467294 00000 n
-0000467359 00000 n
-0000467424 00000 n
-0000467489 00000 n
-0000467554 00000 n
-0000467618 00000 n
-0000464253 00000 n
-0000472259 00000 n
-0000469937 00000 n
-0000467937 00000 n
-0000470062 00000 n
-0000470126 00000 n
-0000470191 00000 n
-0000470256 00000 n
-0000470319 00000 n
-0000470384 00000 n
-0000470449 00000 n
-0000470514 00000 n
-0000470579 00000 n
-0000470643 00000 n
-0000470708 00000 n
-0000470773 00000 n
-0000470838 00000 n
-0000470903 00000 n
-0000470968 00000 n
-0000471033 00000 n
-0000471097 00000 n
-0000471162 00000 n
-0000471226 00000 n
-0000471290 00000 n
-0000471354 00000 n
-0000471417 00000 n
-0000471482 00000 n
-0000471546 00000 n
-0000471611 00000 n
-0000471676 00000 n
-0000471739 00000 n
-0000471804 00000 n
-0000471869 00000 n
-0000471934 00000 n
-0000471999 00000 n
-0000472064 00000 n
-0000472129 00000 n
-0000472194 00000 n
-0000474959 00000 n
-0000478357 00000 n
-0000474786 00000 n
-0000472475 00000 n
-0000475117 00000 n
-0000475181 00000 n
-0000475245 00000 n
-0000475310 00000 n
-0000475375 00000 n
-0000475440 00000 n
-0000475505 00000 n
-0000475570 00000 n
-0000475635 00000 n
-0000475700 00000 n
-0000475765 00000 n
-0000475829 00000 n
-0000475894 00000 n
-0000475959 00000 n
-0000476024 00000 n
-0000476089 00000 n
-0000476154 00000 n
-0000476219 00000 n
-0000476284 00000 n
-0000476349 00000 n
-0000476413 00000 n
-0000476478 00000 n
-0000476543 00000 n
-0000476608 00000 n
-0000476673 00000 n
-0000476738 00000 n
-0000476803 00000 n
-0000476868 00000 n
-0000476933 00000 n
-0000476998 00000 n
-0000477063 00000 n
-0000477128 00000 n
-0000477193 00000 n
-0000477258 00000 n
-0000477322 00000 n
-0000477387 00000 n
-0000477514 00000 n
-0000477579 00000 n
-0000477644 00000 n
-0000477708 00000 n
-0000477773 00000 n
-0000477838 00000 n
-0000477903 00000 n
-0000477968 00000 n
-0000478033 00000 n
-0000478098 00000 n
-0000478163 00000 n
-0000478228 00000 n
-0000478293 00000 n
-0000474928 00000 n
-0000484494 00000 n
-0000481191 00000 n
-0000478586 00000 n
-0000481316 00000 n
-0000481380 00000 n
-0000481445 00000 n
-0000481509 00000 n
-0000481574 00000 n
-0000481639 00000 n
-0000481704 00000 n
-0000481769 00000 n
-0000481834 00000 n
-0000481899 00000 n
-0000481964 00000 n
-0000482028 00000 n
-0000482093 00000 n
-0000482158 00000 n
-0000482223 00000 n
-0000482288 00000 n
-0000482353 00000 n
-0000482418 00000 n
-0000482483 00000 n
-0000482548 00000 n
-0000482612 00000 n
-0000482677 00000 n
-0000482742 00000 n
-0000482807 00000 n
-0000482872 00000 n
-0000482937 00000 n
-0000483002 00000 n
-0000483067 00000 n
-0000483132 00000 n
-0000483196 00000 n
-0000483261 00000 n
-0000483326 00000 n
-0000483391 00000 n
-0000483456 00000 n
-0000483521 00000 n
-0000483586 00000 n
-0000483651 00000 n
-0000483716 00000 n
-0000483781 00000 n
-0000483846 00000 n
-0000483911 00000 n
-0000483975 00000 n
-0000484040 00000 n
-0000484105 00000 n
-0000484170 00000 n
-0000484235 00000 n
-0000484300 00000 n
-0000484365 00000 n
-0000484429 00000 n
-0000490294 00000 n
-0000486541 00000 n
-0000484697 00000 n
-0000486666 00000 n
-0000486730 00000 n
-0000486794 00000 n
-0000486859 00000 n
-0000486924 00000 n
-0000486989 00000 n
-0000487054 00000 n
-0000487118 00000 n
-0000487183 00000 n
-0000487248 00000 n
-0000487313 00000 n
-0000487378 00000 n
-0000487443 00000 n
-0000487508 00000 n
-0000487573 00000 n
-0000487637 00000 n
-0000487702 00000 n
-0000487767 00000 n
-0000487832 00000 n
-0000487897 00000 n
-0000487961 00000 n
-0000488026 00000 n
-0000488091 00000 n
-0000488156 00000 n
-0000488221 00000 n
-0000488286 00000 n
-0000488351 00000 n
-0000488416 00000 n
-0000488480 00000 n
+0000464310 00000 n
+0000467236 00000 n
+0000467300 00000 n
+0000467365 00000 n
+0000467429 00000 n
+0000467494 00000 n
+0000467559 00000 n
+0000467624 00000 n
+0000467689 00000 n
+0000467754 00000 n
+0000467819 00000 n
+0000467884 00000 n
+0000467949 00000 n
+0000468013 00000 n
+0000468078 00000 n
+0000468143 00000 n
+0000468208 00000 n
+0000468273 00000 n
+0000468338 00000 n
+0000468403 00000 n
+0000468468 00000 n
+0000468533 00000 n
+0000468598 00000 n
+0000468663 00000 n
+0000468791 00000 n
+0000468856 00000 n
+0000468921 00000 n
+0000468986 00000 n
+0000469051 00000 n
+0000469115 00000 n
+0000469180 00000 n
+0000469245 00000 n
+0000469310 00000 n
+0000469375 00000 n
+0000469440 00000 n
+0000469505 00000 n
+0000469570 00000 n
+0000469635 00000 n
+0000469699 00000 n
+0000469764 00000 n
+0000469829 00000 n
+0000469894 00000 n
+0000469959 00000 n
+0000470024 00000 n
+0000470089 00000 n
+0000470154 00000 n
+0000470219 00000 n
+0000470284 00000 n
+0000470348 00000 n
+0000470413 00000 n
+0000470478 00000 n
+0000467047 00000 n
+0000476081 00000 n
+0000473238 00000 n
+0000470784 00000 n
+0000473363 00000 n
+0000473427 00000 n
+0000473492 00000 n
+0000473556 00000 n
+0000473621 00000 n
+0000473686 00000 n
+0000473751 00000 n
+0000473816 00000 n
+0000473881 00000 n
+0000473946 00000 n
+0000474011 00000 n
+0000474076 00000 n
+0000474140 00000 n
+0000474205 00000 n
+0000474269 00000 n
+0000474333 00000 n
+0000474398 00000 n
+0000474463 00000 n
+0000474527 00000 n
+0000474592 00000 n
+0000474657 00000 n
+0000474722 00000 n
+0000474787 00000 n
+0000474852 00000 n
+0000474917 00000 n
+0000474982 00000 n
+0000475047 00000 n
+0000475111 00000 n
+0000475176 00000 n
+0000475241 00000 n
+0000475306 00000 n
+0000475371 00000 n
+0000475435 00000 n
+0000475500 00000 n
+0000475564 00000 n
+0000475629 00000 n
+0000475694 00000 n
+0000475759 00000 n
+0000475823 00000 n
+0000475888 00000 n
+0000475953 00000 n
+0000476017 00000 n
+0000478692 00000 n
+0000482023 00000 n
+0000478519 00000 n
+0000476297 00000 n
+0000478848 00000 n
+0000478912 00000 n
+0000478977 00000 n
+0000479041 00000 n
+0000479106 00000 n
+0000479170 00000 n
+0000479235 00000 n
+0000479300 00000 n
+0000479365 00000 n
+0000479430 00000 n
+0000479495 00000 n
+0000479560 00000 n
+0000479625 00000 n
+0000479690 00000 n
+0000479755 00000 n
+0000479820 00000 n
+0000479885 00000 n
+0000479950 00000 n
+0000480015 00000 n
+0000480080 00000 n
+0000480145 00000 n
+0000480210 00000 n
+0000480275 00000 n
+0000480340 00000 n
+0000480405 00000 n
+0000480469 00000 n
+0000480534 00000 n
+0000480599 00000 n
+0000480664 00000 n
+0000480729 00000 n
+0000480794 00000 n
+0000480859 00000 n
+0000480924 00000 n
+0000480988 00000 n
+0000481053 00000 n
+0000481118 00000 n
+0000481183 00000 n
+0000481248 00000 n
+0000481376 00000 n
+0000481441 00000 n
+0000481506 00000 n
+0000481571 00000 n
+0000481636 00000 n
+0000481701 00000 n
+0000481766 00000 n
+0000481831 00000 n
+0000481894 00000 n
+0000481959 00000 n
+0000478661 00000 n
0000488545 00000 n
-0000488610 00000 n
-0000488675 00000 n
-0000488740 00000 n
-0000488805 00000 n
-0000488870 00000 n
-0000488935 00000 n
-0000489000 00000 n
-0000489063 00000 n
-0000489128 00000 n
-0000489193 00000 n
-0000489258 00000 n
-0000489323 00000 n
-0000489388 00000 n
-0000489453 00000 n
-0000489518 00000 n
-0000489583 00000 n
-0000489647 00000 n
-0000489712 00000 n
-0000489777 00000 n
-0000489842 00000 n
-0000489907 00000 n
-0000489972 00000 n
-0000490037 00000 n
-0000490102 00000 n
-0000490167 00000 n
-0000490230 00000 n
-0000492896 00000 n
-0000496489 00000 n
-0000492723 00000 n
-0000490471 00000 n
-0000493054 00000 n
-0000493118 00000 n
-0000493183 00000 n
-0000493247 00000 n
-0000493312 00000 n
-0000493376 00000 n
-0000493441 00000 n
-0000493506 00000 n
-0000493571 00000 n
-0000493636 00000 n
-0000493701 00000 n
-0000493766 00000 n
-0000493831 00000 n
-0000493896 00000 n
-0000493960 00000 n
-0000494025 00000 n
-0000494090 00000 n
-0000494155 00000 n
-0000494220 00000 n
-0000494285 00000 n
-0000494350 00000 n
-0000494415 00000 n
-0000494480 00000 n
+0000485049 00000 n
+0000482252 00000 n
+0000485174 00000 n
+0000485238 00000 n
+0000485303 00000 n
+0000485368 00000 n
+0000485433 00000 n
+0000485498 00000 n
+0000485563 00000 n
+0000485628 00000 n
+0000485693 00000 n
+0000485758 00000 n
+0000485823 00000 n
+0000485888 00000 n
+0000485953 00000 n
+0000486018 00000 n
+0000486083 00000 n
+0000486148 00000 n
+0000486213 00000 n
+0000486278 00000 n
+0000486342 00000 n
+0000486407 00000 n
+0000486472 00000 n
+0000486537 00000 n
+0000486602 00000 n
+0000486667 00000 n
+0000486732 00000 n
+0000486797 00000 n
+0000486862 00000 n
+0000486926 00000 n
+0000486991 00000 n
+0000487056 00000 n
+0000487121 00000 n
+0000487186 00000 n
+0000487251 00000 n
+0000487316 00000 n
+0000487381 00000 n
+0000487445 00000 n
+0000487510 00000 n
+0000487575 00000 n
+0000487639 00000 n
+0000487704 00000 n
+0000487769 00000 n
+0000487834 00000 n
+0000487899 00000 n
+0000487964 00000 n
+0000488029 00000 n
+0000488094 00000 n
+0000488159 00000 n
+0000488223 00000 n
+0000488288 00000 n
+0000488353 00000 n
+0000488418 00000 n
+0000488482 00000 n
+0000494368 00000 n
+0000490615 00000 n
+0000488748 00000 n
+0000490740 00000 n
+0000490804 00000 n
+0000490868 00000 n
+0000490933 00000 n
+0000490998 00000 n
+0000491063 00000 n
+0000491128 00000 n
+0000491192 00000 n
+0000491257 00000 n
+0000491322 00000 n
+0000491387 00000 n
+0000491452 00000 n
+0000491517 00000 n
+0000491582 00000 n
+0000491647 00000 n
+0000491711 00000 n
+0000491776 00000 n
+0000491841 00000 n
+0000491906 00000 n
+0000491971 00000 n
+0000492035 00000 n
+0000492100 00000 n
+0000492165 00000 n
+0000492230 00000 n
+0000492295 00000 n
+0000492360 00000 n
+0000492425 00000 n
+0000492490 00000 n
+0000492555 00000 n
+0000492619 00000 n
+0000492684 00000 n
+0000492749 00000 n
+0000492814 00000 n
+0000492879 00000 n
+0000492944 00000 n
+0000493009 00000 n
+0000493074 00000 n
+0000493139 00000 n
+0000493203 00000 n
+0000493268 00000 n
+0000493333 00000 n
+0000493398 00000 n
+0000493463 00000 n
+0000493528 00000 n
+0000493593 00000 n
+0000493658 00000 n
+0000493723 00000 n
+0000493787 00000 n
+0000493852 00000 n
+0000493917 00000 n
+0000493982 00000 n
+0000494047 00000 n
+0000494112 00000 n
+0000494177 00000 n
+0000494242 00000 n
+0000494306 00000 n
+0000496989 00000 n
+0000500516 00000 n
+0000496816 00000 n
0000494545 00000 n
-0000494610 00000 n
-0000494675 00000 n
-0000494740 00000 n
-0000494805 00000 n
-0000494870 00000 n
-0000494934 00000 n
-0000494999 00000 n
-0000495064 00000 n
-0000495192 00000 n
-0000495257 00000 n
-0000495322 00000 n
-0000495387 00000 n
-0000495452 00000 n
-0000495517 00000 n
-0000495582 00000 n
-0000495646 00000 n
-0000495711 00000 n
-0000495776 00000 n
-0000495841 00000 n
-0000495906 00000 n
-0000495971 00000 n
-0000496036 00000 n
-0000496101 00000 n
-0000496166 00000 n
-0000496230 00000 n
-0000496295 00000 n
-0000496360 00000 n
-0000496425 00000 n
-0000492865 00000 n
-0000503133 00000 n
-0000498857 00000 n
-0000496718 00000 n
-0000498982 00000 n
-0000499046 00000 n
-0000499111 00000 n
-0000499175 00000 n
-0000499240 00000 n
-0000499305 00000 n
-0000499370 00000 n
-0000499435 00000 n
-0000499500 00000 n
-0000499565 00000 n
-0000499630 00000 n
-0000499695 00000 n
-0000499759 00000 n
-0000499824 00000 n
-0000499889 00000 n
-0000499954 00000 n
-0000500019 00000 n
-0000500084 00000 n
-0000500149 00000 n
-0000500214 00000 n
-0000500279 00000 n
-0000500343 00000 n
-0000500408 00000 n
-0000500473 00000 n
-0000500538 00000 n
-0000500603 00000 n
-0000500668 00000 n
-0000500733 00000 n
-0000500798 00000 n
-0000500863 00000 n
-0000500927 00000 n
-0000500992 00000 n
-0000501057 00000 n
-0000501122 00000 n
-0000501187 00000 n
-0000501252 00000 n
-0000501317 00000 n
-0000501382 00000 n
-0000501447 00000 n
-0000501511 00000 n
-0000501576 00000 n
-0000501641 00000 n
-0000501706 00000 n
-0000501771 00000 n
-0000501836 00000 n
-0000501901 00000 n
-0000501966 00000 n
-0000502031 00000 n
-0000502095 00000 n
-0000502160 00000 n
-0000502225 00000 n
-0000502290 00000 n
-0000502355 00000 n
-0000502420 00000 n
-0000502485 00000 n
-0000502550 00000 n
-0000502615 00000 n
-0000502679 00000 n
-0000502744 00000 n
-0000502809 00000 n
-0000502874 00000 n
+0000497147 00000 n
+0000497211 00000 n
+0000497276 00000 n
+0000497340 00000 n
+0000497405 00000 n
+0000497470 00000 n
+0000497535 00000 n
+0000497600 00000 n
+0000497665 00000 n
+0000497729 00000 n
+0000497794 00000 n
+0000497859 00000 n
+0000497924 00000 n
+0000497989 00000 n
+0000498054 00000 n
+0000498119 00000 n
+0000498184 00000 n
+0000498249 00000 n
+0000498313 00000 n
+0000498378 00000 n
+0000498443 00000 n
+0000498508 00000 n
+0000498573 00000 n
+0000498637 00000 n
+0000498702 00000 n
+0000498767 00000 n
+0000498832 00000 n
+0000498897 00000 n
+0000498962 00000 n
+0000499027 00000 n
+0000499092 00000 n
+0000499157 00000 n
+0000499284 00000 n
+0000499348 00000 n
+0000499413 00000 n
+0000499478 00000 n
+0000499543 00000 n
+0000499608 00000 n
+0000499673 00000 n
+0000499738 00000 n
+0000499803 00000 n
+0000499868 00000 n
+0000499932 00000 n
+0000499997 00000 n
+0000500062 00000 n
+0000500127 00000 n
+0000500192 00000 n
+0000500257 00000 n
+0000500322 00000 n
+0000500387 00000 n
+0000500452 00000 n
+0000496958 00000 n
+0000507215 00000 n
0000502939 00000 n
-0000503004 00000 n
-0000503069 00000 n
-0000509337 00000 n
-0000505841 00000 n
-0000503284 00000 n
-0000505966 00000 n
-0000506030 00000 n
-0000506095 00000 n
-0000506159 00000 n
-0000506224 00000 n
-0000506289 00000 n
-0000506354 00000 n
-0000506419 00000 n
-0000506484 00000 n
-0000506549 00000 n
-0000506614 00000 n
-0000506679 00000 n
-0000506743 00000 n
-0000506808 00000 n
-0000506873 00000 n
-0000506938 00000 n
-0000507003 00000 n
-0000507068 00000 n
-0000507133 00000 n
-0000507197 00000 n
-0000507262 00000 n
-0000507327 00000 n
-0000507392 00000 n
-0000507457 00000 n
-0000507522 00000 n
-0000507587 00000 n
-0000507652 00000 n
-0000507717 00000 n
-0000507781 00000 n
-0000507846 00000 n
-0000507911 00000 n
-0000507976 00000 n
-0000508040 00000 n
-0000508105 00000 n
-0000508170 00000 n
-0000508235 00000 n
-0000508300 00000 n
-0000508365 00000 n
-0000508430 00000 n
-0000508495 00000 n
-0000508560 00000 n
-0000508625 00000 n
-0000508690 00000 n
-0000508755 00000 n
-0000508820 00000 n
-0000508885 00000 n
-0000508950 00000 n
-0000509015 00000 n
-0000509079 00000 n
-0000509144 00000 n
-0000509209 00000 n
-0000509273 00000 n
-0000877698 00000 n
-0000514600 00000 n
-0000512014 00000 n
-0000509501 00000 n
-0000512139 00000 n
-0000512203 00000 n
-0000512268 00000 n
-0000512332 00000 n
-0000512397 00000 n
-0000512462 00000 n
-0000512590 00000 n
-0000512655 00000 n
-0000512720 00000 n
-0000512785 00000 n
-0000512850 00000 n
-0000512915 00000 n
-0000512979 00000 n
-0000513044 00000 n
-0000513109 00000 n
-0000513237 00000 n
-0000513302 00000 n
-0000513367 00000 n
-0000513432 00000 n
-0000513497 00000 n
-0000513562 00000 n
-0000513626 00000 n
-0000513691 00000 n
-0000513756 00000 n
-0000513821 00000 n
-0000513886 00000 n
-0000513951 00000 n
-0000514016 00000 n
-0000514080 00000 n
-0000514145 00000 n
-0000514210 00000 n
-0000514275 00000 n
-0000514340 00000 n
-0000514405 00000 n
-0000514470 00000 n
-0000514535 00000 n
-0000520527 00000 n
-0000517292 00000 n
-0000514803 00000 n
-0000517417 00000 n
-0000517481 00000 n
-0000517546 00000 n
-0000517611 00000 n
-0000517676 00000 n
-0000517741 00000 n
-0000517806 00000 n
-0000517871 00000 n
-0000517936 00000 n
-0000518001 00000 n
-0000518066 00000 n
-0000518130 00000 n
-0000518195 00000 n
-0000518260 00000 n
-0000518325 00000 n
-0000518390 00000 n
-0000518454 00000 n
-0000518519 00000 n
-0000518584 00000 n
-0000518649 00000 n
-0000518714 00000 n
-0000518779 00000 n
-0000518844 00000 n
-0000518909 00000 n
-0000518974 00000 n
-0000519037 00000 n
-0000519102 00000 n
-0000519167 00000 n
-0000519232 00000 n
-0000519297 00000 n
-0000519362 00000 n
-0000519427 00000 n
-0000519492 00000 n
-0000519557 00000 n
-0000519622 00000 n
-0000519686 00000 n
-0000519751 00000 n
-0000519816 00000 n
-0000519881 00000 n
-0000519946 00000 n
-0000520011 00000 n
-0000520076 00000 n
-0000520141 00000 n
-0000520206 00000 n
-0000520271 00000 n
-0000520336 00000 n
-0000520401 00000 n
-0000520465 00000 n
-0000526160 00000 n
-0000523252 00000 n
-0000520717 00000 n
-0000523377 00000 n
-0000523441 00000 n
-0000523506 00000 n
-0000523571 00000 n
-0000523636 00000 n
-0000523700 00000 n
-0000523765 00000 n
-0000523830 00000 n
-0000523895 00000 n
-0000523960 00000 n
-0000524025 00000 n
-0000524090 00000 n
-0000524155 00000 n
-0000524219 00000 n
-0000524284 00000 n
-0000524349 00000 n
-0000524414 00000 n
-0000524479 00000 n
-0000524544 00000 n
-0000524609 00000 n
-0000524674 00000 n
-0000524739 00000 n
-0000524804 00000 n
-0000524868 00000 n
-0000524933 00000 n
-0000525060 00000 n
-0000525123 00000 n
-0000525188 00000 n
-0000525253 00000 n
-0000525318 00000 n
-0000525383 00000 n
-0000525448 00000 n
-0000525513 00000 n
-0000525578 00000 n
-0000525643 00000 n
-0000525708 00000 n
-0000525772 00000 n
-0000525837 00000 n
-0000525902 00000 n
-0000525967 00000 n
-0000526032 00000 n
-0000526097 00000 n
-0000532145 00000 n
-0000528781 00000 n
-0000526350 00000 n
-0000528906 00000 n
-0000528970 00000 n
-0000529035 00000 n
-0000529099 00000 n
-0000529164 00000 n
-0000529229 00000 n
-0000529294 00000 n
-0000529359 00000 n
-0000529424 00000 n
-0000529489 00000 n
-0000529554 00000 n
-0000529619 00000 n
-0000529683 00000 n
-0000529748 00000 n
-0000529813 00000 n
-0000529878 00000 n
-0000529943 00000 n
-0000530008 00000 n
-0000530073 00000 n
-0000530138 00000 n
-0000530203 00000 n
-0000530267 00000 n
-0000530332 00000 n
-0000530397 00000 n
-0000530462 00000 n
-0000530527 00000 n
-0000530592 00000 n
-0000530657 00000 n
-0000530722 00000 n
-0000530787 00000 n
-0000530852 00000 n
-0000530917 00000 n
-0000530982 00000 n
-0000531047 00000 n
-0000531112 00000 n
-0000531177 00000 n
-0000531242 00000 n
-0000531307 00000 n
-0000531372 00000 n
-0000531437 00000 n
-0000531500 00000 n
-0000531565 00000 n
-0000531693 00000 n
-0000531758 00000 n
-0000531822 00000 n
-0000531887 00000 n
-0000531952 00000 n
-0000532017 00000 n
-0000532082 00000 n
-0000538050 00000 n
-0000535334 00000 n
-0000532335 00000 n
-0000535459 00000 n
-0000535523 00000 n
-0000535588 00000 n
-0000535652 00000 n
-0000535717 00000 n
-0000535781 00000 n
-0000535846 00000 n
-0000535911 00000 n
-0000535976 00000 n
-0000536040 00000 n
-0000536105 00000 n
-0000536170 00000 n
-0000536235 00000 n
-0000536300 00000 n
-0000536365 00000 n
-0000536430 00000 n
-0000536495 00000 n
-0000536559 00000 n
-0000536624 00000 n
-0000536689 00000 n
-0000536754 00000 n
-0000536818 00000 n
-0000536883 00000 n
-0000536948 00000 n
-0000537013 00000 n
-0000537078 00000 n
-0000537143 00000 n
-0000537208 00000 n
-0000537273 00000 n
-0000537338 00000 n
-0000537403 00000 n
-0000537468 00000 n
-0000537533 00000 n
-0000537598 00000 n
-0000537663 00000 n
-0000537728 00000 n
-0000537793 00000 n
-0000537857 00000 n
-0000537922 00000 n
-0000537986 00000 n
-0000544459 00000 n
-0000540898 00000 n
-0000538253 00000 n
-0000541023 00000 n
-0000541087 00000 n
-0000541152 00000 n
-0000541217 00000 n
-0000541281 00000 n
-0000541346 00000 n
-0000541411 00000 n
-0000541476 00000 n
-0000541541 00000 n
-0000541606 00000 n
-0000541671 00000 n
-0000541736 00000 n
-0000541801 00000 n
-0000541866 00000 n
-0000541931 00000 n
-0000541996 00000 n
-0000542060 00000 n
-0000542125 00000 n
-0000542190 00000 n
-0000542255 00000 n
-0000542320 00000 n
-0000542385 00000 n
-0000542450 00000 n
-0000542515 00000 n
-0000542580 00000 n
-0000542644 00000 n
-0000542709 00000 n
-0000542774 00000 n
-0000542839 00000 n
-0000542904 00000 n
-0000542969 00000 n
-0000543034 00000 n
-0000543099 00000 n
-0000543164 00000 n
-0000543229 00000 n
-0000543294 00000 n
-0000543359 00000 n
-0000543424 00000 n
-0000543489 00000 n
-0000543554 00000 n
-0000543619 00000 n
-0000543684 00000 n
-0000543749 00000 n
-0000543814 00000 n
-0000543879 00000 n
-0000543944 00000 n
-0000544008 00000 n
-0000544073 00000 n
-0000544138 00000 n
-0000544203 00000 n
-0000544268 00000 n
-0000544333 00000 n
-0000544397 00000 n
-0000550898 00000 n
-0000547725 00000 n
-0000544649 00000 n
-0000547850 00000 n
+0000500745 00000 n
+0000503064 00000 n
+0000503128 00000 n
+0000503193 00000 n
+0000503257 00000 n
+0000503322 00000 n
+0000503387 00000 n
+0000503452 00000 n
+0000503517 00000 n
+0000503582 00000 n
+0000503647 00000 n
+0000503712 00000 n
+0000503777 00000 n
+0000503841 00000 n
+0000503906 00000 n
+0000503971 00000 n
+0000504036 00000 n
+0000504101 00000 n
+0000504166 00000 n
+0000504231 00000 n
+0000504296 00000 n
+0000504361 00000 n
+0000504425 00000 n
+0000504490 00000 n
+0000504555 00000 n
+0000504620 00000 n
+0000504685 00000 n
+0000504750 00000 n
+0000504815 00000 n
+0000504880 00000 n
+0000504945 00000 n
+0000505009 00000 n
+0000505074 00000 n
+0000505139 00000 n
+0000505204 00000 n
+0000505269 00000 n
+0000505334 00000 n
+0000505399 00000 n
+0000505464 00000 n
+0000505529 00000 n
+0000505593 00000 n
+0000505658 00000 n
+0000505723 00000 n
+0000505788 00000 n
+0000505853 00000 n
+0000505918 00000 n
+0000505983 00000 n
+0000506048 00000 n
+0000506113 00000 n
+0000506177 00000 n
+0000506242 00000 n
+0000506307 00000 n
+0000506372 00000 n
+0000506437 00000 n
+0000506502 00000 n
+0000506567 00000 n
+0000506632 00000 n
+0000506697 00000 n
+0000506761 00000 n
+0000506826 00000 n
+0000506891 00000 n
+0000506956 00000 n
+0000507021 00000 n
+0000507086 00000 n
+0000507151 00000 n
+0000513415 00000 n
+0000509921 00000 n
+0000507366 00000 n
+0000510046 00000 n
+0000510110 00000 n
+0000510175 00000 n
+0000510239 00000 n
+0000510304 00000 n
+0000510369 00000 n
+0000510434 00000 n
+0000510499 00000 n
+0000510564 00000 n
+0000510629 00000 n
+0000510694 00000 n
+0000510759 00000 n
+0000510823 00000 n
+0000510888 00000 n
+0000510953 00000 n
+0000511018 00000 n
+0000511083 00000 n
+0000511148 00000 n
+0000511213 00000 n
+0000511277 00000 n
+0000511342 00000 n
+0000511407 00000 n
+0000511472 00000 n
+0000511537 00000 n
+0000511602 00000 n
+0000511667 00000 n
+0000511732 00000 n
+0000511797 00000 n
+0000511861 00000 n
+0000511926 00000 n
+0000511991 00000 n
+0000512056 00000 n
+0000512120 00000 n
+0000512185 00000 n
+0000512250 00000 n
+0000512315 00000 n
+0000512380 00000 n
+0000512445 00000 n
+0000512510 00000 n
+0000512573 00000 n
+0000512638 00000 n
+0000512703 00000 n
+0000512768 00000 n
+0000512833 00000 n
+0000512898 00000 n
+0000512963 00000 n
+0000513028 00000 n
+0000513093 00000 n
+0000513157 00000 n
+0000513222 00000 n
+0000513287 00000 n
+0000513351 00000 n
+0000878884 00000 n
+0000518567 00000 n
+0000516046 00000 n
+0000513579 00000 n
+0000516171 00000 n
+0000516235 00000 n
+0000516300 00000 n
+0000516364 00000 n
+0000516429 00000 n
+0000516557 00000 n
+0000516622 00000 n
+0000516687 00000 n
+0000516752 00000 n
+0000516817 00000 n
+0000516882 00000 n
+0000516947 00000 n
+0000517011 00000 n
+0000517076 00000 n
+0000517204 00000 n
+0000517269 00000 n
+0000517334 00000 n
+0000517399 00000 n
+0000517464 00000 n
+0000517529 00000 n
+0000517594 00000 n
+0000517658 00000 n
+0000517723 00000 n
+0000517788 00000 n
+0000517853 00000 n
+0000517918 00000 n
+0000517983 00000 n
+0000518048 00000 n
+0000518112 00000 n
+0000518177 00000 n
+0000518242 00000 n
+0000518307 00000 n
+0000518372 00000 n
+0000518437 00000 n
+0000518502 00000 n
+0000524502 00000 n
+0000521267 00000 n
+0000518770 00000 n
+0000521392 00000 n
+0000521456 00000 n
+0000521521 00000 n
+0000521586 00000 n
+0000521651 00000 n
+0000521716 00000 n
+0000521781 00000 n
+0000521846 00000 n
+0000521911 00000 n
+0000521976 00000 n
+0000522041 00000 n
+0000522105 00000 n
+0000522170 00000 n
+0000522235 00000 n
+0000522300 00000 n
+0000522365 00000 n
+0000522429 00000 n
+0000522494 00000 n
+0000522559 00000 n
+0000522624 00000 n
+0000522689 00000 n
+0000522754 00000 n
+0000522819 00000 n
+0000522884 00000 n
+0000522949 00000 n
+0000523012 00000 n
+0000523077 00000 n
+0000523142 00000 n
+0000523207 00000 n
+0000523272 00000 n
+0000523337 00000 n
+0000523402 00000 n
+0000523467 00000 n
+0000523532 00000 n
+0000523597 00000 n
+0000523661 00000 n
+0000523726 00000 n
+0000523791 00000 n
+0000523856 00000 n
+0000523921 00000 n
+0000523986 00000 n
+0000524051 00000 n
+0000524116 00000 n
+0000524181 00000 n
+0000524246 00000 n
+0000524311 00000 n
+0000524376 00000 n
+0000524440 00000 n
+0000530132 00000 n
+0000527224 00000 n
+0000524692 00000 n
+0000527349 00000 n
+0000527413 00000 n
+0000527478 00000 n
+0000527543 00000 n
+0000527608 00000 n
+0000527672 00000 n
+0000527737 00000 n
+0000527802 00000 n
+0000527867 00000 n
+0000527932 00000 n
+0000527997 00000 n
+0000528062 00000 n
+0000528127 00000 n
+0000528191 00000 n
+0000528256 00000 n
+0000528321 00000 n
+0000528386 00000 n
+0000528451 00000 n
+0000528516 00000 n
+0000528581 00000 n
+0000528646 00000 n
+0000528711 00000 n
+0000528776 00000 n
+0000528840 00000 n
+0000528905 00000 n
+0000529032 00000 n
+0000529095 00000 n
+0000529160 00000 n
+0000529225 00000 n
+0000529290 00000 n
+0000529355 00000 n
+0000529420 00000 n
+0000529485 00000 n
+0000529550 00000 n
+0000529615 00000 n
+0000529680 00000 n
+0000529744 00000 n
+0000529809 00000 n
+0000529874 00000 n
+0000529939 00000 n
+0000530004 00000 n
+0000530069 00000 n
+0000536121 00000 n
+0000532757 00000 n
+0000530322 00000 n
+0000532882 00000 n
+0000532946 00000 n
+0000533011 00000 n
+0000533075 00000 n
+0000533140 00000 n
+0000533205 00000 n
+0000533270 00000 n
+0000533335 00000 n
+0000533400 00000 n
+0000533465 00000 n
+0000533530 00000 n
+0000533595 00000 n
+0000533659 00000 n
+0000533724 00000 n
+0000533789 00000 n
+0000533854 00000 n
+0000533919 00000 n
+0000533984 00000 n
+0000534049 00000 n
+0000534114 00000 n
+0000534179 00000 n
+0000534243 00000 n
+0000534308 00000 n
+0000534373 00000 n
+0000534438 00000 n
+0000534503 00000 n
+0000534568 00000 n
+0000534633 00000 n
+0000534698 00000 n
+0000534763 00000 n
+0000534828 00000 n
+0000534893 00000 n
+0000534958 00000 n
+0000535023 00000 n
+0000535088 00000 n
+0000535153 00000 n
+0000535218 00000 n
+0000535283 00000 n
+0000535348 00000 n
+0000535413 00000 n
+0000535476 00000 n
+0000535541 00000 n
+0000535669 00000 n
+0000535734 00000 n
+0000535798 00000 n
+0000535863 00000 n
+0000535928 00000 n
+0000535993 00000 n
+0000536058 00000 n
+0000542024 00000 n
+0000539308 00000 n
+0000536311 00000 n
+0000539433 00000 n
+0000539497 00000 n
+0000539562 00000 n
+0000539626 00000 n
+0000539691 00000 n
+0000539755 00000 n
+0000539820 00000 n
+0000539885 00000 n
+0000539950 00000 n
+0000540014 00000 n
+0000540079 00000 n
+0000540144 00000 n
+0000540209 00000 n
+0000540274 00000 n
+0000540339 00000 n
+0000540404 00000 n
+0000540469 00000 n
+0000540533 00000 n
+0000540598 00000 n
+0000540663 00000 n
+0000540728 00000 n
+0000540792 00000 n
+0000540857 00000 n
+0000540922 00000 n
+0000540987 00000 n
+0000541052 00000 n
+0000541117 00000 n
+0000541182 00000 n
+0000541247 00000 n
+0000541312 00000 n
+0000541377 00000 n
+0000541442 00000 n
+0000541507 00000 n
+0000541572 00000 n
+0000541637 00000 n
+0000541702 00000 n
+0000541767 00000 n
+0000541831 00000 n
+0000541896 00000 n
+0000541960 00000 n
+0000548429 00000 n
+0000544868 00000 n
+0000542227 00000 n
+0000544993 00000 n
+0000545057 00000 n
+0000545122 00000 n
+0000545187 00000 n
+0000545251 00000 n
+0000545316 00000 n
+0000545381 00000 n
+0000545446 00000 n
+0000545511 00000 n
+0000545576 00000 n
+0000545641 00000 n
+0000545706 00000 n
+0000545771 00000 n
+0000545836 00000 n
+0000545901 00000 n
+0000545966 00000 n
+0000546030 00000 n
+0000546095 00000 n
+0000546160 00000 n
+0000546225 00000 n
+0000546290 00000 n
+0000546355 00000 n
+0000546420 00000 n
+0000546485 00000 n
+0000546550 00000 n
+0000546614 00000 n
+0000546679 00000 n
+0000546744 00000 n
+0000546809 00000 n
+0000546874 00000 n
+0000546939 00000 n
+0000547004 00000 n
+0000547069 00000 n
+0000547134 00000 n
+0000547199 00000 n
+0000547264 00000 n
+0000547329 00000 n
+0000547394 00000 n
+0000547459 00000 n
+0000547524 00000 n
+0000547589 00000 n
+0000547654 00000 n
+0000547719 00000 n
+0000547784 00000 n
+0000547849 00000 n
0000547914 00000 n
-0000547979 00000 n
+0000547978 00000 n
0000548043 00000 n
0000548108 00000 n
0000548173 00000 n
0000548238 00000 n
0000548303 00000 n
-0000548368 00000 n
-0000548433 00000 n
-0000548498 00000 n
-0000548563 00000 n
-0000548628 00000 n
-0000548693 00000 n
-0000548758 00000 n
-0000548822 00000 n
-0000548887 00000 n
-0000548952 00000 n
-0000549017 00000 n
-0000549081 00000 n
-0000549146 00000 n
-0000549211 00000 n
-0000549276 00000 n
-0000549341 00000 n
-0000549406 00000 n
-0000549471 00000 n
-0000549536 00000 n
-0000549600 00000 n
-0000549665 00000 n
-0000549730 00000 n
-0000549795 00000 n
-0000549860 00000 n
-0000549925 00000 n
-0000549990 00000 n
-0000550055 00000 n
-0000550120 00000 n
-0000550185 00000 n
-0000550250 00000 n
-0000550315 00000 n
-0000550380 00000 n
-0000550445 00000 n
-0000550510 00000 n
-0000550575 00000 n
-0000550640 00000 n
-0000550705 00000 n
-0000550770 00000 n
-0000550834 00000 n
-0000557042 00000 n
-0000553612 00000 n
-0000551101 00000 n
-0000553737 00000 n
-0000553801 00000 n
-0000553866 00000 n
-0000553930 00000 n
-0000553995 00000 n
-0000554060 00000 n
-0000554125 00000 n
-0000554189 00000 n
-0000554254 00000 n
-0000554319 00000 n
-0000554384 00000 n
-0000554449 00000 n
-0000554514 00000 n
-0000554579 00000 n
-0000554644 00000 n
-0000554709 00000 n
-0000554774 00000 n
-0000554838 00000 n
-0000554903 00000 n
-0000554968 00000 n
-0000555033 00000 n
-0000555098 00000 n
-0000555163 00000 n
-0000555226 00000 n
-0000555291 00000 n
-0000555355 00000 n
-0000555420 00000 n
-0000555485 00000 n
-0000555550 00000 n
-0000555615 00000 n
-0000555680 00000 n
-0000555745 00000 n
-0000555810 00000 n
-0000555875 00000 n
-0000555940 00000 n
-0000556005 00000 n
-0000556069 00000 n
-0000556134 00000 n
-0000556199 00000 n
-0000556264 00000 n
-0000556329 00000 n
-0000556394 00000 n
-0000556459 00000 n
-0000556524 00000 n
-0000556589 00000 n
-0000556654 00000 n
-0000556719 00000 n
-0000556784 00000 n
-0000556849 00000 n
-0000556914 00000 n
-0000556978 00000 n
-0000563537 00000 n
-0000559327 00000 n
-0000557245 00000 n
-0000559452 00000 n
-0000559516 00000 n
-0000559581 00000 n
-0000559645 00000 n
-0000559710 00000 n
-0000559775 00000 n
-0000559840 00000 n
-0000559905 00000 n
-0000559970 00000 n
-0000560035 00000 n
-0000560100 00000 n
-0000560165 00000 n
-0000560229 00000 n
-0000560294 00000 n
-0000560359 00000 n
-0000560424 00000 n
-0000560489 00000 n
-0000560554 00000 n
-0000560619 00000 n
-0000560684 00000 n
-0000560749 00000 n
-0000560813 00000 n
-0000560878 00000 n
-0000560943 00000 n
-0000561008 00000 n
-0000561073 00000 n
-0000561138 00000 n
-0000561203 00000 n
-0000561268 00000 n
-0000561333 00000 n
-0000561397 00000 n
-0000561462 00000 n
-0000561527 00000 n
-0000561592 00000 n
-0000561657 00000 n
-0000561722 00000 n
-0000561787 00000 n
-0000561852 00000 n
-0000561917 00000 n
-0000561981 00000 n
-0000562046 00000 n
-0000562111 00000 n
-0000562176 00000 n
-0000562241 00000 n
-0000562306 00000 n
-0000562371 00000 n
-0000562436 00000 n
-0000562501 00000 n
-0000562566 00000 n
-0000562631 00000 n
-0000562696 00000 n
-0000562760 00000 n
-0000562825 00000 n
-0000562890 00000 n
-0000562955 00000 n
-0000563020 00000 n
-0000563085 00000 n
-0000563150 00000 n
-0000563215 00000 n
-0000563280 00000 n
-0000563344 00000 n
-0000563409 00000 n
-0000563473 00000 n
-0000569442 00000 n
-0000565879 00000 n
-0000563701 00000 n
-0000566004 00000 n
-0000566068 00000 n
-0000566133 00000 n
-0000566197 00000 n
-0000566262 00000 n
-0000566327 00000 n
-0000566392 00000 n
-0000566457 00000 n
-0000566522 00000 n
-0000566587 00000 n
-0000566652 00000 n
-0000566717 00000 n
-0000566781 00000 n
-0000566846 00000 n
-0000566911 00000 n
-0000566976 00000 n
-0000567041 00000 n
-0000567106 00000 n
-0000567171 00000 n
-0000567236 00000 n
-0000567301 00000 n
-0000567365 00000 n
-0000567430 00000 n
-0000567495 00000 n
-0000567560 00000 n
-0000567625 00000 n
-0000567690 00000 n
-0000567754 00000 n
-0000567819 00000 n
-0000567884 00000 n
-0000567949 00000 n
-0000568014 00000 n
-0000568079 00000 n
-0000568144 00000 n
-0000568209 00000 n
-0000568274 00000 n
-0000568339 00000 n
-0000568404 00000 n
-0000568469 00000 n
-0000568534 00000 n
-0000568599 00000 n
-0000568664 00000 n
-0000568729 00000 n
-0000568794 00000 n
-0000568858 00000 n
-0000568923 00000 n
-0000568988 00000 n
-0000569053 00000 n
-0000569118 00000 n
-0000569183 00000 n
-0000569248 00000 n
-0000569313 00000 n
-0000569378 00000 n
-0000877862 00000 n
-0000575287 00000 n
-0000571920 00000 n
-0000569619 00000 n
-0000572045 00000 n
-0000572109 00000 n
-0000572174 00000 n
-0000572239 00000 n
-0000572304 00000 n
-0000572369 00000 n
-0000572434 00000 n
-0000572499 00000 n
-0000572564 00000 n
-0000572629 00000 n
-0000572693 00000 n
-0000572758 00000 n
-0000572823 00000 n
-0000572888 00000 n
-0000572953 00000 n
-0000573018 00000 n
-0000573083 00000 n
-0000573148 00000 n
-0000573213 00000 n
-0000573277 00000 n
-0000573342 00000 n
-0000573407 00000 n
-0000573472 00000 n
-0000573537 00000 n
-0000573602 00000 n
-0000573667 00000 n
-0000573732 00000 n
-0000573797 00000 n
-0000573861 00000 n
-0000573926 00000 n
-0000573991 00000 n
-0000574056 00000 n
-0000574121 00000 n
-0000574186 00000 n
-0000574251 00000 n
-0000574316 00000 n
-0000574381 00000 n
-0000574445 00000 n
-0000574510 00000 n
-0000574575 00000 n
-0000574640 00000 n
-0000574705 00000 n
-0000574770 00000 n
-0000574835 00000 n
-0000574900 00000 n
-0000574965 00000 n
-0000575029 00000 n
-0000575094 00000 n
-0000575159 00000 n
-0000578611 00000 n
-0000577782 00000 n
-0000575531 00000 n
-0000577907 00000 n
-0000577971 00000 n
-0000578035 00000 n
-0000578099 00000 n
-0000578163 00000 n
-0000578227 00000 n
-0000578291 00000 n
-0000578355 00000 n
-0000578419 00000 n
-0000578483 00000 n
-0000578547 00000 n
+0000548367 00000 n
+0000554864 00000 n
+0000551691 00000 n
+0000548619 00000 n
+0000551816 00000 n
+0000551880 00000 n
+0000551945 00000 n
+0000552009 00000 n
+0000552074 00000 n
+0000552139 00000 n
+0000552204 00000 n
+0000552269 00000 n
+0000552334 00000 n
+0000552399 00000 n
+0000552464 00000 n
+0000552529 00000 n
+0000552594 00000 n
+0000552659 00000 n
+0000552724 00000 n
+0000552788 00000 n
+0000552853 00000 n
+0000552918 00000 n
+0000552983 00000 n
+0000553047 00000 n
+0000553112 00000 n
+0000553177 00000 n
+0000553242 00000 n
+0000553307 00000 n
+0000553372 00000 n
+0000553437 00000 n
+0000553502 00000 n
+0000553566 00000 n
+0000553631 00000 n
+0000553696 00000 n
+0000553761 00000 n
+0000553826 00000 n
+0000553891 00000 n
+0000553956 00000 n
+0000554021 00000 n
+0000554086 00000 n
+0000554151 00000 n
+0000554216 00000 n
+0000554281 00000 n
+0000554346 00000 n
+0000554411 00000 n
+0000554476 00000 n
+0000554541 00000 n
+0000554606 00000 n
+0000554671 00000 n
+0000554736 00000 n
+0000554800 00000 n
+0000561016 00000 n
+0000557586 00000 n
+0000555067 00000 n
+0000557711 00000 n
+0000557775 00000 n
+0000557840 00000 n
+0000557904 00000 n
+0000557969 00000 n
+0000558034 00000 n
+0000558099 00000 n
+0000558163 00000 n
+0000558228 00000 n
+0000558293 00000 n
+0000558358 00000 n
+0000558423 00000 n
+0000558488 00000 n
+0000558553 00000 n
+0000558618 00000 n
+0000558683 00000 n
+0000558748 00000 n
+0000558812 00000 n
+0000558877 00000 n
+0000558942 00000 n
+0000559007 00000 n
+0000559072 00000 n
+0000559137 00000 n
+0000559200 00000 n
+0000559265 00000 n
+0000559329 00000 n
+0000559394 00000 n
+0000559459 00000 n
+0000559524 00000 n
+0000559589 00000 n
+0000559654 00000 n
+0000559719 00000 n
+0000559784 00000 n
+0000559849 00000 n
+0000559914 00000 n
+0000559979 00000 n
+0000560043 00000 n
+0000560108 00000 n
+0000560173 00000 n
+0000560238 00000 n
+0000560303 00000 n
+0000560368 00000 n
+0000560433 00000 n
+0000560498 00000 n
+0000560563 00000 n
+0000560628 00000 n
+0000560693 00000 n
+0000560758 00000 n
+0000560823 00000 n
+0000560888 00000 n
+0000560952 00000 n
+0000567507 00000 n
+0000563297 00000 n
+0000561219 00000 n
+0000563422 00000 n
+0000563486 00000 n
+0000563551 00000 n
+0000563615 00000 n
+0000563680 00000 n
+0000563745 00000 n
+0000563810 00000 n
+0000563875 00000 n
+0000563940 00000 n
+0000564005 00000 n
+0000564070 00000 n
+0000564135 00000 n
+0000564199 00000 n
+0000564264 00000 n
+0000564329 00000 n
+0000564394 00000 n
+0000564459 00000 n
+0000564524 00000 n
+0000564589 00000 n
+0000564654 00000 n
+0000564719 00000 n
+0000564783 00000 n
+0000564848 00000 n
+0000564913 00000 n
+0000564978 00000 n
+0000565043 00000 n
+0000565108 00000 n
+0000565173 00000 n
+0000565238 00000 n
+0000565303 00000 n
+0000565367 00000 n
+0000565432 00000 n
+0000565497 00000 n
+0000565562 00000 n
+0000565627 00000 n
+0000565692 00000 n
+0000565757 00000 n
+0000565822 00000 n
+0000565887 00000 n
+0000565951 00000 n
+0000566016 00000 n
+0000566081 00000 n
+0000566146 00000 n
+0000566211 00000 n
+0000566276 00000 n
+0000566341 00000 n
+0000566406 00000 n
+0000566471 00000 n
+0000566536 00000 n
+0000566601 00000 n
+0000566666 00000 n
+0000566730 00000 n
+0000566795 00000 n
+0000566860 00000 n
+0000566925 00000 n
+0000566990 00000 n
+0000567055 00000 n
+0000567120 00000 n
+0000567185 00000 n
+0000567250 00000 n
+0000567314 00000 n
+0000567379 00000 n
+0000567443 00000 n
+0000573724 00000 n
+0000570032 00000 n
+0000567671 00000 n
+0000570157 00000 n
+0000570221 00000 n
+0000570286 00000 n
+0000570350 00000 n
+0000570415 00000 n
+0000570480 00000 n
+0000570545 00000 n
+0000570610 00000 n
+0000570675 00000 n
+0000570740 00000 n
+0000570805 00000 n
+0000570870 00000 n
+0000570934 00000 n
+0000570999 00000 n
+0000571064 00000 n
+0000571129 00000 n
+0000571194 00000 n
+0000571259 00000 n
+0000571324 00000 n
+0000571389 00000 n
+0000571454 00000 n
+0000571518 00000 n
+0000571583 00000 n
+0000571648 00000 n
+0000571713 00000 n
+0000571778 00000 n
+0000571843 00000 n
+0000571908 00000 n
+0000571973 00000 n
+0000572038 00000 n
+0000572103 00000 n
+0000572167 00000 n
+0000572232 00000 n
+0000572297 00000 n
+0000572362 00000 n
+0000572427 00000 n
+0000572492 00000 n
+0000572557 00000 n
+0000572622 00000 n
+0000572687 00000 n
+0000572752 00000 n
+0000572817 00000 n
+0000572882 00000 n
+0000572947 00000 n
+0000573012 00000 n
+0000573077 00000 n
+0000573142 00000 n
+0000573207 00000 n
+0000573272 00000 n
+0000573337 00000 n
+0000573402 00000 n
+0000573467 00000 n
+0000573532 00000 n
+0000573596 00000 n
+0000573660 00000 n
+0000879048 00000 n
+0000579254 00000 n
+0000576083 00000 n
+0000573901 00000 n
+0000576208 00000 n
+0000576272 00000 n
+0000576337 00000 n
+0000576401 00000 n
+0000576466 00000 n
+0000576531 00000 n
+0000576596 00000 n
+0000576661 00000 n
+0000576726 00000 n
+0000576791 00000 n
+0000576856 00000 n
+0000576921 00000 n
+0000576985 00000 n
+0000577050 00000 n
+0000577115 00000 n
+0000577180 00000 n
+0000577245 00000 n
+0000577310 00000 n
+0000577375 00000 n
+0000577440 00000 n
+0000577505 00000 n
+0000577569 00000 n
+0000577634 00000 n
+0000577699 00000 n
+0000577764 00000 n
+0000577829 00000 n
+0000577894 00000 n
+0000577959 00000 n
+0000578024 00000 n
+0000578089 00000 n
+0000578153 00000 n
+0000578218 00000 n
+0000578283 00000 n
+0000578348 00000 n
+0000578413 00000 n
+0000578478 00000 n
+0000578543 00000 n
+0000578608 00000 n
+0000578673 00000 n
+0000578737 00000 n
+0000578802 00000 n
+0000578867 00000 n
+0000578932 00000 n
+0000578997 00000 n
+0000579062 00000 n
+0000579190 00000 n
+0000581928 00000 n
+0000582084 00000 n
+0000590261 00000 n
+0000590417 00000 n
+0000590577 00000 n
0000583005 00000 n
-0000583160 00000 n
-0000583315 00000 n
-0000583471 00000 n
-0000583630 00000 n
-0000583791 00000 n
-0000583952 00000 n
-0000584112 00000 n
-0000584268 00000 n
-0000584429 00000 n
-0000584590 00000 n
-0000584757 00000 n
-0000584924 00000 n
-0000585090 00000 n
-0000585251 00000 n
-0000594578 00000 n
-0000585979 00000 n
-0000582706 00000 n
-0000578788 00000 n
-0000585405 00000 n
-0000585469 00000 n
-0000585533 00000 n
-0000585597 00000 n
-0000585661 00000 n
-0000585725 00000 n
-0000585789 00000 n
-0000585916 00000 n
-0000582848 00000 n
-0000594734 00000 n
-0000594894 00000 n
-0000595061 00000 n
-0000595227 00000 n
-0000595387 00000 n
-0000595553 00000 n
-0000595719 00000 n
-0000595880 00000 n
-0000596040 00000 n
-0000596207 00000 n
-0000596373 00000 n
-0000596540 00000 n
-0000596706 00000 n
-0000596873 00000 n
-0000597033 00000 n
-0000597199 00000 n
-0000597366 00000 n
-0000597533 00000 n
-0000597693 00000 n
-0000597854 00000 n
-0000598010 00000 n
-0000598166 00000 n
-0000598326 00000 n
-0000598487 00000 n
-0000598647 00000 n
-0000598808 00000 n
-0000598968 00000 n
-0000599124 00000 n
-0000599284 00000 n
-0000599445 00000 n
-0000599606 00000 n
-0000599767 00000 n
-0000599928 00000 n
-0000600089 00000 n
-0000600246 00000 n
-0000600407 00000 n
-0000600569 00000 n
-0000600737 00000 n
-0000600904 00000 n
-0000601072 00000 n
-0000601240 00000 n
-0000601408 00000 n
-0000601576 00000 n
-0000601744 00000 n
-0000601912 00000 n
-0000602080 00000 n
-0000602249 00000 n
-0000602418 00000 n
-0000602587 00000 n
-0000602756 00000 n
-0000602925 00000 n
-0000603087 00000 n
-0000603254 00000 n
-0000603420 00000 n
-0000605196 00000 n
-0000603650 00000 n
-0000593919 00000 n
-0000586169 00000 n
-0000603586 00000 n
-0000594061 00000 n
-0000605364 00000 n
-0000605532 00000 n
-0000605699 00000 n
-0000605867 00000 n
-0000606034 00000 n
-0000606202 00000 n
-0000606423 00000 n
-0000604969 00000 n
-0000603788 00000 n
-0000606359 00000 n
-0000605111 00000 n
-0000873706 00000 n
-0000606679 00000 n
-0000873968 00000 n
-0000606706 00000 n
-0000873834 00000 n
-0000606799 00000 n
-0000607038 00000 n
-0000607063 00000 n
-0000619048 00000 n
-0000607291 00000 n
-0000607394 00000 n
-0000619290 00000 n
-0000620014 00000 n
-0000620248 00000 n
-0000633680 00000 n
-0000620564 00000 n
-0000620667 00000 n
-0000633914 00000 n
-0000634660 00000 n
-0000634886 00000 n
-0000645920 00000 n
-0000635033 00000 n
-0000635131 00000 n
-0000646160 00000 n
-0000646838 00000 n
-0000647069 00000 n
-0000648180 00000 n
-0000647124 00000 n
-0000647221 00000 n
-0000648423 00000 n
-0000649033 00000 n
-0000649237 00000 n
-0000649264 00000 n
-0000649291 00000 n
-0000651666 00000 n
-0000649483 00000 n
-0000649589 00000 n
-0000651914 00000 n
-0000652597 00000 n
-0000652807 00000 n
-0000662782 00000 n
-0000653420 00000 n
-0000653547 00000 n
-0000663022 00000 n
-0000664117 00000 n
-0000664321 00000 n
-0000666925 00000 n
-0000664522 00000 n
-0000664628 00000 n
-0000667172 00000 n
-0000667859 00000 n
-0000668069 00000 n
-0000669754 00000 n
-0000668182 00000 n
-0000668288 00000 n
-0000670003 00000 n
-0000670656 00000 n
-0000670867 00000 n
-0000676391 00000 n
-0000671220 00000 n
-0000671331 00000 n
-0000676635 00000 n
-0000677411 00000 n
-0000677616 00000 n
-0000685246 00000 n
-0000678074 00000 n
-0000678189 00000 n
-0000685486 00000 n
-0000686376 00000 n
-0000686579 00000 n
-0000687329 00000 n
-0000686613 00000 n
-0000686708 00000 n
-0000687568 00000 n
-0000688164 00000 n
-0000688366 00000 n
-0000694759 00000 n
-0000688823 00000 n
-0000688931 00000 n
-0000694999 00000 n
-0000695884 00000 n
-0000696088 00000 n
-0000698692 00000 n
-0000696278 00000 n
-0000696384 00000 n
-0000698935 00000 n
-0000699607 00000 n
-0000699811 00000 n
-0000701831 00000 n
-0000699925 00000 n
-0000700029 00000 n
-0000702073 00000 n
-0000702718 00000 n
-0000702923 00000 n
-0000705976 00000 n
-0000703214 00000 n
-0000703321 00000 n
-0000706216 00000 n
-0000706952 00000 n
-0000707156 00000 n
-0000714567 00000 n
-0000707621 00000 n
-0000707736 00000 n
-0000714808 00000 n
-0000715687 00000 n
-0000715892 00000 n
-0000715919 00000 n
-0000715980 00000 n
-0000716173 00000 n
-0000716414 00000 n
-0000716631 00000 n
-0000721353 00000 n
-0000716990 00000 n
-0000717096 00000 n
-0000721595 00000 n
-0000722373 00000 n
-0000722577 00000 n
-0000725385 00000 n
-0000722835 00000 n
-0000722941 00000 n
-0000725625 00000 n
-0000726324 00000 n
-0000726528 00000 n
-0000735798 00000 n
-0000727012 00000 n
-0000727131 00000 n
-0000736039 00000 n
-0000737037 00000 n
-0000737242 00000 n
-0000739252 00000 n
-0000737356 00000 n
-0000737460 00000 n
-0000739494 00000 n
-0000740140 00000 n
-0000740345 00000 n
-0000742861 00000 n
-0000740592 00000 n
-0000740698 00000 n
-0000743102 00000 n
-0000743807 00000 n
-0000744012 00000 n
-0000753526 00000 n
-0000744585 00000 n
-0000744717 00000 n
-0000753768 00000 n
-0000754769 00000 n
-0000754975 00000 n
-0000761813 00000 n
-0000755407 00000 n
-0000755519 00000 n
-0000762053 00000 n
-0000762911 00000 n
-0000763114 00000 n
-0000764163 00000 n
-0000763192 00000 n
-0000763292 00000 n
-0000764403 00000 n
-0000765025 00000 n
-0000765229 00000 n
-0000770355 00000 n
-0000765598 00000 n
-0000765713 00000 n
-0000770596 00000 n
-0000771385 00000 n
-0000771590 00000 n
-0000773149 00000 n
-0000771683 00000 n
-0000771784 00000 n
-0000773388 00000 n
-0000774014 00000 n
-0000774216 00000 n
-0000776453 00000 n
-0000774395 00000 n
-0000774501 00000 n
-0000776694 00000 n
-0000777363 00000 n
-0000777568 00000 n
-0000780111 00000 n
-0000777744 00000 n
-0000777851 00000 n
-0000780353 00000 n
-0000781038 00000 n
-0000781244 00000 n
-0000781342 00000 n
-0000782386 00000 n
-0000781420 00000 n
-0000781520 00000 n
-0000782627 00000 n
-0000783251 00000 n
-0000783456 00000 n
-0000785259 00000 n
-0000783567 00000 n
-0000783670 00000 n
-0000785501 00000 n
-0000786144 00000 n
-0000793321 00000 n
-0000786350 00000 n
-0000797639 00000 n
-0000793554 00000 n
-0000800702 00000 n
-0000797928 00000 n
-0000803919 00000 n
-0000800941 00000 n
-0000806539 00000 n
-0000804163 00000 n
-0000830201 00000 n
-0000806784 00000 n
-0000849343 00000 n
-0000830508 00000 n
-0000861305 00000 n
-0000849615 00000 n
-0000864673 00000 n
-0000861555 00000 n
-0000867446 00000 n
-0000864946 00000 n
-0000870391 00000 n
-0000867698 00000 n
-0000873420 00000 n
-0000870637 00000 n
-0000877989 00000 n
-0000878150 00000 n
-0000878232 00000 n
-0000878309 00000 n
-0000885618 00000 n
-0000886283 00000 n
-0000886952 00000 n
-0000887621 00000 n
-0000888287 00000 n
-0000888956 00000 n
-0000889624 00000 n
-0000890295 00000 n
-0000890959 00000 n
-0000891628 00000 n
-0000892297 00000 n
-0000892963 00000 n
-0000893632 00000 n
-0000894301 00000 n
-0000894966 00000 n
-0000895637 00000 n
-0000896305 00000 n
-0000896974 00000 n
-0000897640 00000 n
-0000898309 00000 n
-0000898978 00000 n
-0000899644 00000 n
-0000900313 00000 n
-0000900981 00000 n
-0000901652 00000 n
-0000902317 00000 n
-0000902986 00000 n
-0000903655 00000 n
-0000904321 00000 n
-0000904990 00000 n
-0000905659 00000 n
-0000906328 00000 n
-0000906996 00000 n
-0000907664 00000 n
-0000908333 00000 n
-0000908995 00000 n
-0000909664 00000 n
-0000910333 00000 n
-0000911002 00000 n
-0000911667 00000 n
-0000912338 00000 n
-0000913006 00000 n
-0000913672 00000 n
-0000914341 00000 n
-0000915010 00000 n
-0000915679 00000 n
-0000916345 00000 n
-0000917014 00000 n
-0000917682 00000 n
-0000918350 00000 n
-0000919019 00000 n
-0000919688 00000 n
-0000920357 00000 n
-0000921023 00000 n
-0000921692 00000 n
-0000922361 00000 n
-0000923026 00000 n
-0000923697 00000 n
-0000924365 00000 n
-0000925034 00000 n
-0000925700 00000 n
-0000926369 00000 n
-0000927038 00000 n
-0000927704 00000 n
-0000928373 00000 n
-0000929041 00000 n
-0000929712 00000 n
-0000930376 00000 n
-0000931045 00000 n
-0000931714 00000 n
-0000932376 00000 n
-0000933045 00000 n
-0000933714 00000 n
-0000934380 00000 n
-0000935048 00000 n
-0000935717 00000 n
-0000936386 00000 n
-0000937052 00000 n
-0000937687 00000 n
-0000938321 00000 n
-0000938953 00000 n
-0000939588 00000 n
-0000940223 00000 n
-0000940858 00000 n
-0000941490 00000 n
-0000942125 00000 n
-0000942759 00000 n
-0000943393 00000 n
-0000944028 00000 n
-0000944663 00000 n
-0000945298 00000 n
-0000945930 00000 n
-0000946565 00000 n
-0000947200 00000 n
-0000947831 00000 n
-0000948468 00000 n
-0000949102 00000 n
-0000949737 00000 n
-0000950369 00000 n
-0000951004 00000 n
-0000951639 00000 n
-0000952357 00000 n
-0000953155 00000 n
-0000953811 00000 n
-0000954472 00000 n
-0000955141 00000 n
-0000955916 00000 n
-0000956707 00000 n
-0000957622 00000 n
-0000958763 00000 n
-0000959052 00000 n
-0000959408 00000 n
-0000959761 00000 n
-0000960114 00000 n
-0000960304 00000 n
-0000960407 00000 n
-0000960447 00000 n
-0000960579 00000 n
+0000581746 00000 n
+0000579498 00000 n
+0000582239 00000 n
+0000582303 00000 n
+0000582367 00000 n
+0000582431 00000 n
+0000582495 00000 n
+0000582559 00000 n
+0000582623 00000 n
+0000582687 00000 n
+0000582751 00000 n
+0000582815 00000 n
+0000582941 00000 n
+0000581888 00000 n
+0000590737 00000 n
+0000590898 00000 n
+0000591058 00000 n
+0000591214 00000 n
+0000591374 00000 n
+0000591535 00000 n
+0000591702 00000 n
+0000591869 00000 n
+0000592036 00000 n
+0000592197 00000 n
+0000592353 00000 n
+0000592508 00000 n
+0000592668 00000 n
+0000592835 00000 n
+0000593002 00000 n
+0000593163 00000 n
+0000593329 00000 n
+0000593496 00000 n
+0000593656 00000 n
+0000593817 00000 n
+0000593983 00000 n
+0000594150 00000 n
+0000594316 00000 n
+0000594483 00000 n
+0000594649 00000 n
+0000594809 00000 n
+0000594975 00000 n
+0000595142 00000 n
+0000595309 00000 n
+0000595469 00000 n
+0000595630 00000 n
+0000595785 00000 n
+0000595941 00000 n
+0000596101 00000 n
+0000596262 00000 n
+0000596422 00000 n
+0000596583 00000 n
+0000596743 00000 n
+0000596898 00000 n
+0000597059 00000 n
+0000597220 00000 n
+0000597381 00000 n
+0000597542 00000 n
+0000597703 00000 n
+0000602782 00000 n
+0000602939 00000 n
+0000603100 00000 n
+0000603261 00000 n
+0000603429 00000 n
+0000603595 00000 n
+0000597927 00000 n
+0000589674 00000 n
+0000583195 00000 n
+0000597863 00000 n
+0000589816 00000 n
+0000603762 00000 n
+0000603929 00000 n
+0000604097 00000 n
+0000604265 00000 n
+0000604433 00000 n
+0000604600 00000 n
+0000604768 00000 n
+0000604936 00000 n
+0000605105 00000 n
+0000605273 00000 n
+0000605442 00000 n
+0000605611 00000 n
+0000605773 00000 n
+0000605941 00000 n
+0000606109 00000 n
+0000606277 00000 n
+0000606445 00000 n
+0000606613 00000 n
+0000606781 00000 n
+0000606949 00000 n
+0000607117 00000 n
+0000607285 00000 n
+0000607454 00000 n
+0000607675 00000 n
+0000602357 00000 n
+0000598065 00000 n
+0000607611 00000 n
+0000602499 00000 n
+0000874891 00000 n
+0000607931 00000 n
+0000875153 00000 n
+0000607958 00000 n
+0000875019 00000 n
+0000608051 00000 n
+0000608290 00000 n
+0000608315 00000 n
+0000620300 00000 n
+0000608543 00000 n
+0000608646 00000 n
+0000620542 00000 n
+0000621266 00000 n
+0000621500 00000 n
+0000634932 00000 n
+0000621816 00000 n
+0000621919 00000 n
+0000635166 00000 n
+0000635912 00000 n
+0000636138 00000 n
+0000647172 00000 n
+0000636285 00000 n
+0000636383 00000 n
+0000647412 00000 n
+0000648090 00000 n
+0000648321 00000 n
+0000649432 00000 n
+0000648376 00000 n
+0000648473 00000 n
+0000649675 00000 n
+0000650285 00000 n
+0000650489 00000 n
+0000650516 00000 n
+0000650543 00000 n
+0000652918 00000 n
+0000650735 00000 n
+0000650841 00000 n
+0000653166 00000 n
+0000653849 00000 n
+0000654059 00000 n
+0000664034 00000 n
+0000654672 00000 n
+0000654799 00000 n
+0000664274 00000 n
+0000665369 00000 n
+0000665573 00000 n
+0000668177 00000 n
+0000665774 00000 n
+0000665880 00000 n
+0000668424 00000 n
+0000669111 00000 n
+0000669321 00000 n
+0000671006 00000 n
+0000669434 00000 n
+0000669540 00000 n
+0000671255 00000 n
+0000671908 00000 n
+0000672119 00000 n
+0000677643 00000 n
+0000672472 00000 n
+0000672583 00000 n
+0000677887 00000 n
+0000678663 00000 n
+0000678868 00000 n
+0000686498 00000 n
+0000679326 00000 n
+0000679441 00000 n
+0000686738 00000 n
+0000687628 00000 n
+0000687831 00000 n
+0000688581 00000 n
+0000687865 00000 n
+0000687960 00000 n
+0000688820 00000 n
+0000689416 00000 n
+0000689618 00000 n
+0000696011 00000 n
+0000690075 00000 n
+0000690183 00000 n
+0000696251 00000 n
+0000697136 00000 n
+0000697340 00000 n
+0000699944 00000 n
+0000697530 00000 n
+0000697636 00000 n
+0000700187 00000 n
+0000700859 00000 n
+0000701063 00000 n
+0000703083 00000 n
+0000701177 00000 n
+0000701281 00000 n
+0000703325 00000 n
+0000703970 00000 n
+0000704175 00000 n
+0000707228 00000 n
+0000704466 00000 n
+0000704573 00000 n
+0000707468 00000 n
+0000708204 00000 n
+0000708408 00000 n
+0000715645 00000 n
+0000708876 00000 n
+0000708991 00000 n
+0000715886 00000 n
+0000716762 00000 n
+0000716967 00000 n
+0000716994 00000 n
+0000717055 00000 n
+0000717248 00000 n
+0000717489 00000 n
+0000717706 00000 n
+0000722428 00000 n
+0000718065 00000 n
+0000718171 00000 n
+0000722670 00000 n
+0000723448 00000 n
+0000723652 00000 n
+0000726460 00000 n
+0000723910 00000 n
+0000724016 00000 n
+0000726700 00000 n
+0000727399 00000 n
+0000727603 00000 n
+0000736873 00000 n
+0000728087 00000 n
+0000728206 00000 n
+0000737114 00000 n
+0000738112 00000 n
+0000738317 00000 n
+0000740327 00000 n
+0000738431 00000 n
+0000738535 00000 n
+0000740569 00000 n
+0000741215 00000 n
+0000741420 00000 n
+0000743936 00000 n
+0000741667 00000 n
+0000741773 00000 n
+0000744177 00000 n
+0000744882 00000 n
+0000745087 00000 n
+0000754601 00000 n
+0000745660 00000 n
+0000745792 00000 n
+0000754843 00000 n
+0000755844 00000 n
+0000756050 00000 n
+0000762888 00000 n
+0000756482 00000 n
+0000756594 00000 n
+0000763128 00000 n
+0000763986 00000 n
+0000764189 00000 n
+0000765238 00000 n
+0000764267 00000 n
+0000764367 00000 n
+0000765478 00000 n
+0000766100 00000 n
+0000766304 00000 n
+0000771430 00000 n
+0000766673 00000 n
+0000766788 00000 n
+0000771671 00000 n
+0000772460 00000 n
+0000772665 00000 n
+0000774224 00000 n
+0000772758 00000 n
+0000772859 00000 n
+0000774463 00000 n
+0000775089 00000 n
+0000775291 00000 n
+0000777528 00000 n
+0000775470 00000 n
+0000775576 00000 n
+0000777769 00000 n
+0000778438 00000 n
+0000778643 00000 n
+0000781287 00000 n
+0000778835 00000 n
+0000778942 00000 n
+0000781529 00000 n
+0000782223 00000 n
+0000782429 00000 n
+0000782527 00000 n
+0000783571 00000 n
+0000782605 00000 n
+0000782705 00000 n
+0000783812 00000 n
+0000784436 00000 n
+0000784641 00000 n
+0000786444 00000 n
+0000784752 00000 n
+0000784855 00000 n
+0000786686 00000 n
+0000787329 00000 n
+0000794506 00000 n
+0000787535 00000 n
+0000798824 00000 n
+0000794739 00000 n
+0000801887 00000 n
+0000799113 00000 n
+0000805104 00000 n
+0000802126 00000 n
+0000807724 00000 n
+0000805348 00000 n
+0000831386 00000 n
+0000807969 00000 n
+0000850528 00000 n
+0000831693 00000 n
+0000862490 00000 n
+0000850800 00000 n
+0000865858 00000 n
+0000862740 00000 n
+0000868631 00000 n
+0000866131 00000 n
+0000871576 00000 n
+0000868883 00000 n
+0000874605 00000 n
+0000871822 00000 n
+0000879166 00000 n
+0000879327 00000 n
+0000879409 00000 n
+0000879486 00000 n
+0000886889 00000 n
+0000887554 00000 n
+0000888223 00000 n
+0000888892 00000 n
+0000889558 00000 n
+0000890227 00000 n
+0000890895 00000 n
+0000891566 00000 n
+0000892230 00000 n
+0000892899 00000 n
+0000893568 00000 n
+0000894234 00000 n
+0000894903 00000 n
+0000895572 00000 n
+0000896237 00000 n
+0000896908 00000 n
+0000897576 00000 n
+0000898245 00000 n
+0000898911 00000 n
+0000899580 00000 n
+0000900249 00000 n
+0000900915 00000 n
+0000901584 00000 n
+0000902252 00000 n
+0000902923 00000 n
+0000903588 00000 n
+0000904257 00000 n
+0000904926 00000 n
+0000905592 00000 n
+0000906261 00000 n
+0000906930 00000 n
+0000907599 00000 n
+0000908267 00000 n
+0000908935 00000 n
+0000909604 00000 n
+0000910266 00000 n
+0000910935 00000 n
+0000911604 00000 n
+0000912273 00000 n
+0000912938 00000 n
+0000913609 00000 n
+0000914277 00000 n
+0000914943 00000 n
+0000915612 00000 n
+0000916281 00000 n
+0000916950 00000 n
+0000917616 00000 n
+0000918285 00000 n
+0000918953 00000 n
+0000919621 00000 n
+0000920290 00000 n
+0000920959 00000 n
+0000921628 00000 n
+0000922294 00000 n
+0000922963 00000 n
+0000923632 00000 n
+0000924297 00000 n
+0000924968 00000 n
+0000925636 00000 n
+0000926305 00000 n
+0000926971 00000 n
+0000927640 00000 n
+0000928309 00000 n
+0000928975 00000 n
+0000929644 00000 n
+0000930312 00000 n
+0000930983 00000 n
+0000931647 00000 n
+0000932316 00000 n
+0000932985 00000 n
+0000933647 00000 n
+0000934316 00000 n
+0000934985 00000 n
+0000935651 00000 n
+0000936319 00000 n
+0000936988 00000 n
+0000937657 00000 n
+0000938323 00000 n
+0000938992 00000 n
+0000939628 00000 n
+0000940263 00000 n
+0000940897 00000 n
+0000941531 00000 n
+0000942166 00000 n
+0000942801 00000 n
+0000943433 00000 n
+0000944068 00000 n
+0000944703 00000 n
+0000945335 00000 n
+0000945969 00000 n
+0000946606 00000 n
+0000947240 00000 n
+0000947872 00000 n
+0000948507 00000 n
+0000949142 00000 n
+0000949774 00000 n
+0000950409 00000 n
+0000951044 00000 n
+0000951676 00000 n
+0000952310 00000 n
+0000952945 00000 n
+0000953580 00000 n
+0000954313 00000 n
+0000955103 00000 n
+0000955751 00000 n
+0000956417 00000 n
+0000957086 00000 n
+0000957876 00000 n
+0000958693 00000 n
+0000959705 00000 n
+0000960739 00000 n
+0000961095 00000 n
+0000961448 00000 n
+0000961801 00000 n
+0000961991 00000 n
+0000962094 00000 n
+0000962134 00000 n
+0000962266 00000 n
trailer
-<< /Size 4650 /Root 4648 0 R /Info 4649 0 R /ID [ <D64F3A26FAAB7864F77EB030AC63CA56> <D64F3A26FAAB7864F77EB030AC63CA56> ] >>
+<< /Size 4676 /Root 4674 0 R /Info 4675 0 R /ID [ <DF8BCBFD9F879CC430DFA9C96FB4AADB> <DF8BCBFD9F879CC430DFA9C96FB4AADB> ] >>
startxref
-961140
+962827
%%EOF
diff --git a/macros/luatex/latex/tango/README b/macros/luatex/latex/tango/README
new file mode 100644
index 0000000000..014ae456a2
--- /dev/null
+++ b/macros/luatex/latex/tango/README
@@ -0,0 +1,42 @@
+Tango is a LaTeX document class for use by mathematics teachers. It requires lualatex, some LaTeX packages (see the complete documentation for details), and a recent version of LaTeX (see paragraph 4 below).
+
+Author: Michel Bovani <Michel.Bovani@icloud.com>
+Tango Web Page: https://tango.mathriochka.net
+
+1 Versions history
+0.8.0 (2024-07-17) This version
+New: Language complete support for
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish.
+
+0.7.2 (2024-07-12)
+New in this version
+• correction of the countername in subparagraph definition for titlesec.
+• fix incorrect vertical space in the \exo command.
+
+0.7.1 First release (2024-07-08)
+
+2 License
+Tango is released under Latex public project licence (LPPL), version 1.3c
+See https://www.latex-project.org/lppl/lppl-1-3c/
+
+3 Installation
+Just put the tango.cls file in a latex directory of a texmf tree, for example:
+TEXMF/tex/lualatex/tango/tango.cls
+
+4 Usage
+\documentclass[<options>]{tango}
+The tango document class requires recent versions of LaTeX and lualatex. At my home it runs on TeXLive 2024, TeXLive 2023 and on the last update of TeXlive 2022.
+
+5 About examples
+Example files are provided for testing the tango document class and for learning how to adapt margins, headings &Co.
+
+The files to typeset are:
+
+book-mathematics.tex
+handout-euler.tex
+handout-polynomes-deg2.tex
+schoolwork.tex
+candide.tex (the result is best in the two-pages mode of your pdf viewer).
+
+6 Internet website (new french only for now)
+https://tango.mathriochka.net \ No newline at end of file
diff --git a/macros/luatex/latex/tango/doc/tango-en.pdf b/macros/luatex/latex/tango/doc/tango-en.pdf
new file mode 100644
index 0000000000..d7969f1cb5
--- /dev/null
+++ b/macros/luatex/latex/tango/doc/tango-en.pdf
Binary files differ
diff --git a/macros/luatex/latex/tango/doc/tango-en.tex b/macros/luatex/latex/tango/doc/tango-en.tex
new file mode 100644
index 0000000000..bf7995ef17
--- /dev/null
+++ b/macros/luatex/latex/tango/doc/tango-en.tex
@@ -0,0 +1,753 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[english,ColorTheme=Red,FontSize=10pt]{tango}
+%\setmonofont{Latin Modern Mono}[Scale=MatchUppercase]
+\usepackage{longtable,csquotes,lipsum,tcolorbox}
+\usepackage[dvipsnames]{xcolor}
+\newcommand\DO[1]{\textcolor{ColorOne}{\bfseries #1}}
+\newcommand\TO[1]{\textsf{#1}}
+%%
+\NewDocumentCommand\showtheme{m}
+{{\tgosetup{ColorTheme=#1}
+\parbox{2.1cm}{\centering
+\textsf{#1\rule[-3pt]{0pt}{10pt}}\\
+\colorbox{ColorOne}{\parbox{1.5cm}{\rule[-5pt]{0pt}{15pt}}}
+\par
+\colorbox{ColorTwo}{\parbox{1.5cm}{\rule[-5pt]{0pt}{15pt}}}
+\par
+}}}
+%
+%\tgosmartlists
+\renewtgolabels1{\lefthand}
+\definecolor{ColorThree}{rgb}{0.93,0.95,0.97}
+\tcbset{colback=ColorTwo,colframe=ColorTwo,sharp corners}
+\frenchspacing
+%\setcounter{section}{88}
+\begin{document}
+
+\renewcommand{\arraystretch}{1.1}
+\title{\textcolor{ColorOne}{\floweroneleft}\,The tango document class\,\textcolor{ColorOne}{\floweroneright}}
+\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}\\
+Tango web page: \href{https://tango.mathriochka.net}{https://tango.mathriochka.net}}
+\date{\today\\v. 0.8.0}
+{\sffamily
+\maketitle
+
+}
+\thispagestyle{empty}
+
+\tgoshorttoc
+\section{What the tango document class is}
+
+
+Tango is a Latex document class (\verb=\documentclass[<options>]{tango}=) for use by mathematics teachers (roughly speaking, from high school to undergraduate level). It makes it possible to typeset several types of documents, from the short handout to the complete textbook. The \enquote{maths dedicated aspect} essentially consists in:
+\begin{itemize}
+\item loading maths packages;
+\item offering dedicated commands and environments for statements (definitions, propositions, theorems…), exercises, numbering.
+\end{itemize}
+
+Tango is reasonably configurable, even if certain choices are imposed: mandatory use of lualatex, opentype fonts and recent installation, in particular. The tango class defines eight output formats, five of which are suitable for tablets, e-readers and smartphones; a system currently under development can be used to introduce a particular input for a given output format (for example, forcing a page break for the A5 format only). Finally, the tango class can be used for projects of a more general nature than maths lessons: science courses, but even more general usage with some extra configuration effort (see the Candide directory in the examples).
+
+Another class of documents for presenting school work (training exercises, test or exam subjects) will soon be available, called \enquote{bravo}.
+
+
+
+
+\section{Options overview}
+Please note that the table below only lists the options actually managed by the tango class. Other options, if used when calling the class, can simply be passed to certain packages. This is the case, for example, with the babel language options, or the \TO{math-style} option, which is systematically passed to the \TO{unicode-math} package.
+
+Default values are in bold red. Bold options marked with a \TO{\textbf{star*}} can be used in the preamble and in the body of the document with the \verb=\tgosetup{}= command: for example, in order to change the colors inside the document, you can use \verb+\tgosetup{ColorTheme=Navy}+. Other options can only be mentioned when the tango class is called.
+
+
+\begin{longtable}{p{0.23\linewidth}p{0.7\linewidth}}
+\caption[]{The tango class options}\\
+\textbf{Option}&\textbf{Usage}\\
+\hline\endhead
+\hline\multicolumn{2}{r}{\emph{Continued next page}}\endfoot
+\hline\endlastfoot
+
+\hline
+\TO{%
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish}.& Tango will transmit all language options to the \TO{babel} package. However, the translation of specific names used by tango (such as theorem, exercise, etc.) is only guaranteed for the languages listed opposite. Please note that even English speakers must \emph{imperatively} pass a language option to tango.
+
+See section~\ref{lang} below.\\
+\hline
+\TO{no-statement}&\TO{no-statement=true/\DO{false}}. The \TO{thm}, \TO{defin}, \TO{lem}, \TO{coro}, \TO{propo} environments (for theorems, definitions, lemmas, corollaries, propositions) are defined by default. The no-statement option allows you to define them later, on request (see \verb=\newstatement= and \verb=\renewstatement= commands in section~\ref{st-section} page~\pageref{st-section}).\\
+\hline
+\TO{no-hyperref}&\TO{no-hyperref=true/\DO{false}}. If you're only planning a single paper output….\\
+\hline
+\TO{no-indent/indent}&\TO{no-indent=true/\DO{false}}. Indents are present by default. The option \TO{noindent} (meaning \TO{no-indent = true}) returns us to the left margin. The \TO{indent} option also exists, but is not very useful!\\
+\hline
+\TO{no-titleindent}/\TO{titleindent}&Title indents are present by default only in French (because in French typography, the first paragraph after a title must be indented: so I prefer in this case the titles to be indented too). You can use no-tiltleindent in French and titleindent in English to change the default behavior. These options must be called after the language options.\\
+\hline
+\TO{\textbf{ThmNamePos*}}&\TO{ThmNamePos=<value>} where \TO{<value>} can be \TO{\DO{left}} or \TO{right}. The name of the statement (Theorem, Definition, etc.) is displayed to the left or right of the box.\\
+\hline
+\TO{PubliClass}&\TO{PubliClass=<value>} where \TO{<value>} can be \TO{\DO{article}} or \TO{book}. Indicates the base document class used (Latex standard \TO{article} document class or Latex standard \TO{book} document class.) The tango class is designed so that short handouts or monographs composed with the \TO{article} version can then be grouped together as chapters in the same volume with the \TO{book} version. See the \texttt{mathematics} directory in the \texttt{examples} documentation. With the \TO{article} version, the \verb=\part= and \verb=\tableofontents= commands are disabled. The \verb=\tgoshorttoc= command can be used to obtain a summary at the beginning of a monograph.\\
+\hline
+\TO{oneside/twoside}& The option \TO{twoside} makes recto/verso, \TO{oneside} simply makes recto. The default is \TO{\DO{oneside}}. For now, there's no adjustment of inner and outer margins with twoside but it's easy to adapt it to your needs with the \verb=\geometry= command in the preamble. Note that one may prefer \TO{twoside=false} to \TO{oneside} (why not?).\\
+\hline
+\TO{FontSize}&\TO{FontSize=<value>} where \TO{<value>} can be \TO{9pt}, \TO{\DO{10pt}}, \TO{11pt} ou \TO{12pt}.\\
+\hline
+\TO{\textbf{ColorTheme*}}&\TO{ColorTheme=<value>} where \TO{<value>} can be \TO{Blue, Navy, USAF, Azur, Red, Framboise, Brique, Sienne, Caramel, Olive, Tannen, \DO{GrayGray}, BlackAndWhite, Ink} or \TO{Steel}. These values are worth trying out: each defines a set of two colors, one solid (ColorOne) for titles and one very light (ColorTwo) for box backgrounds.\\
+\hline
+\TO{\textbf{ColorOne*}/\textbf{ColorTwo*}}& These options allow the user to define the colors of a personal theme separately; the argument must be a suitable argument for \verb=\definecolor=. See xcolor package (loaded without options by the tango class) documentation.
+\begin{example}[Examples]
+ \begin{itemize}
+ \item\TO{ColorOne=}\verb={rgb}{0.75,0.1,0.05}=
+ \item\TO{ColorOne=}\verb={cmyk}{0,0.8,0.8,0.2}=
+ \item\TO{ColorTwo=}\verb={{rgb}{0.75,0.96,0.75}}= (note that external braces may be used, but are not mandatory).
+\end{itemize}
+\end{example}
+\\
+\hline
+\TO{\textbf{ColorOneNamed*}} / \\
+\TO{\textbf{ColorTwoNamed*}}&
+These options allow the user to define the colors of a personal theme separately; the argument must be a suitable argument for \verb=\colorlet=. See xcolor package (loaded without options by the tango class) documentation.
+\begin{example}[Examples]
+ \begin{itemize}
+ \item\TO{ColorOneNamed=}\verb={red!70!blue}=
+\item\TO{ColorTwoNamed=}\verb={yellow!12}=
+ \end{itemize}
+\end{example}
+If you want to use a predefined set of colors, say \TO{dvipsnames}, you may reload the \TO{xcolor} package with the \TO{dvipsnames} option in your preamble, and then use the \verb=\tgosetup= command:
+\begin{itemize}
+\item \verb+\tgosetup{ColorOneNamed={RedOrange!80!BrickRed}}+
+ \end{itemize}
+\\
+\hline
+\TO{Output}&\TO{Output=<value>} where \TO{<value>} can be \TO{\DO{A4paper}, Letter, A5paper, BigTablet, Tablet, SmallTablet, eReader} or \TO{Smartphone}. \TO{BigTablet}, \TO{Tablet} and \TO{SmallTablet} correspond to 13-, 11- and 8.5-inch screens respectively. \TO{eReader} is for a 6-inch e-reader. It should be noted that in the case of \TO{eReader} and \TO{Smartphone}, the requested format is larger than the actual format, so that the font sizes are much smaller than required. So the \TO{FontSize=9pt} option produces a result on their screens that may be difficult to read.\\
+\hline
+ \TO{Numbers}& \TO{Numbers=<value>} where \TO{<value>} can be \TO{TextOldStyle, OldStyle, MathOldStyle, FullOldstyle}. If you don't ask for anything, you get the \enquote{lining} numbers.
+\begin{itemize}
+\item \TO{Numbers=TextOldStyle} activates oldstyle (or lower-case) digits (like these {\olddigits 0123456789}) of the erewhon font (basic text font) for the entire document.
+\item \TO{Numbers=OldStyle} activates oldsyle (or lower-case) digits for all text fonts used in the document.
+\item \TO{Numbers=MathOldStyle} activates lower-case digits only in mathematics (I can't think of any good reason to do this!).
+\item \TO{Numbers=FullOldStyle} activates lower-case digits for all text fonts as well as for mathematics.
+\end{itemize}
+It should be noted that it is always possible to switch locally from the digits selected with this option to one of their variants (for example, section titles are systematically numbered using \enquote{lining} digits, since these titles are themselves capitalized).\\
+\hline
+\TO{StylisticSet}&\TO{StylisticSet=\{<value1>, <value2>,…\}} where \TO{<value1>, <value2>,} etc. are to be taken from \TO{upint, leqslant, smaller, subsetneq} and \TO{parallelslant}. These options concern the Erewhon-Math font, which is a (very) extended opentype version by Daniel \textsc{Flipo} of the math fonts of the Fourier-Gutenberg system. For more information, see the Erewhon-Math documentation (\verb=texdoc erewhon-math= in any good terminal).\\
+\hline
+\TO{CharacterVariant}&\TO{CharacterVariant=\{<value1>, <value2>,…\}} where \TO{<value1>, <value2>,} etc. can be chosen from \TO{zero, hslash, emptyset, epsilon, kappa, pi, phi, rho, sigma, theta, partial, Ecal, Qcal} and \TO{Tcal}. These options concern the Erewhon-Math font, which is a (very) extended opentype version by Daniel \textsc{Flipo} of the math fonts of the Fourier-Gutenberg system. For more information, see the Erewhon-Math documentation (\verb=texdoc erewhon-math= in any good terminal).\end{longtable}
+
+%\medskip
+
+\section{Packages loaded by the tango document class}
+I only mention here the packages directly loaded by the tango class. Each of these packages can in turn load others...
+\begin{itemize}
+\item \verb=\RequirePackage{xcolor}=. The \TO{xcolor} package is used by the tango class to define the colors of the various themes. It is called without any options, but you can reload it in the preamble of your document with options such as \TO{dvipsnames}, \TO{svgnames} or \TO{x11names}.
+\item\verb=\RequirePackage{mathtools}=. The \TO{mathtools} package loads the \TO{amsmath} package, to which it adds a complement.
+\item\verb=\RequirePackage{geometry}=. Used by the tango class in order to define the page design of the various outputs formats. You can use the \verb=\geometry=. command in the document preamble to modify this layout.
+\item\verb=\RequirePackage{enumitem}=. Used by the tango class to configure the various \TO{list}-based environments in its own way (see section~\ref{lists}). These settings can be modified by the user in the preamble.
+\item\verb=\RequirePackage{titletoc}=. Used by the tango class to fix the table of contents appearance which can be modified by the user in the preamble.
+\item\verb=\RequirePackage[pagestyles,toctitles,newlinetospace,clearempty]{titlesec}=. Used by the tango class to configure the appearance of titles at different levels. This can be modified by the user in the preamble. The default English version adds the \TO{noindentafter} option.
+\item\verb=\RequirePackage{ccaption,caption}=. Used by the tango class to configure the captions appearance for figures and tables. (See section~\ref{figtable}).
+\item\verb=\RequirePackage{fontspec}\RequirePackage{unicode-math}=. The tango class requires \TO{lualatex}, opentype fonts, and Unicode settings.
+\item\verb=\RequirePackage{fourier-orns}=. See the section~\ref{fnts} below.
+\item\verb=\RequirePackage{iflang}=. Used by tango to send a class error message if no language option is given.
+\item\verb=\RequirePackage{babel}=. The babel package is called without options. It is up to you to pass babel options to the tango class. See section~\ref{lang} below.
+\item\verb+\RequirePackage[colorlinks,linkcolor=ColorOne,urlcolor=ColorOne]{hyperref}+. This \TO{hyperref} configuration can be modified using the \verb=\hypersetup= command in your preamble. You can also use the \TO{no-hyperref} option.
+\item\verb=\RequirePackage{array,graphicx,microtype,numprint,float,afterpage}=. These packages are provided but not explicitly used by tango.
+\end{itemize}
+
+
+\section{Fonts}\label{fnts}
+
+\subsection{The tango font system}
+Tango's main font is Erewhon, an opentype version of Utopia (a PostScript type~1 font which was designed in 1989 by Robert \textsc{Slimbach} and once donated by Adobe to the X-consortium and featured on TeXlive). Unlike Utopia, Erewhon, designed by Michael \textsc{Sharpe}, covers a large number of languages and offers a wide range of functions, available through opentype features. It should be noted that Adobe distributes a commercial opentype version of Utopia, which is less rich in glyphs than Erewhon, but has an intermediate font-weight and optical character sizes.
+
+The tango mathematical font is Erewhon~Math, a scientific complement to Erewhon designed by Daniel \textsc{Flipo}. Erewhon Math is in a way the opentype counterpart of Fourier-GUTenberg, the scientific complement to Utopia type~1 designed by me in 2002. Erewhon~Math offers a large number of functions made accessible by Daniel through the \TO{fourier-otf} package. The tango class does not load \TO{fourier-otf}, but uses all its functions through a system of options.
+
+The sans-serif font of the tango system is Noto Sans, scaled. Noto Sans is a sans-serif font for text in Latin, Cyrillic and Greek characters, with multiple weights and widths.
+
+The main (chapter) title font is Roboto Condensed Bold (as a condensed version of Noto Sans is not available on TeXlive).
+
+The monospaced font is Inconsolatazi4, scaled.
+
+Finally, tango calls the \TO{fourier-orns} package, a symbols and logos complement to the fourier system which has now an opentype version.
+
+\subsection{Replacing the tango font system}
+It is, of course, possible to use the \TO{fontspec} \verb=\setmainfont=, \verb=\setsansfont= and \verb=\setmonofont= commands and the \TO{unicode-math} \verb=\setmathfont= command in the preamble in order to modify the parameters of the tango class: this is not advisable, in my humble opinion. But one day there will probably be another class in the tango distribution which will use another font system. Such a document class could be called charlie, or foxtrot or zulu….
+
+\subsection{Font commands and text font commands}
+Here, I call \enquote{Font commands} commands whose scope can only be limited by a group or an environment. I call \enquote{Text font commands}, on the other hand, commands whose scope is limited to their argument, which must not contain a paragraph break. For example, \verb=\bfseries= is a \enquote{font command} and \verb=\textbf= is a \enquote{text font command}. Here is what is provided by tango (see table~\ref{otfcmd}, \pageref{otfcmd}). All these commands should work with Erewhon and with Noto Sans as well.
+\begin{table}[ht]
+\XTabletCommand{\centering\setlength\tabcolsep{9pt}}
+\TabletCommand{\centering}
+\caption{Tango opentype commands}\label{otfcmd}
+\ifTgoTabletOutput\begin{tabular}{l | l | l | l}%
+\else
+\begin{tabular}{llll}%
+\fi
+\hline
+\multicolumn{1}{c}{\textsf{\bfseries Command}}&
+\multicolumn{1}{c}{\textsf{\bfseries Nature}}&
+\multicolumn{1}{c}{\textsf{\bfseries Example}}&
+\multicolumn{1}{c}{\textsf{\bfseries Result}}\\
+\hline
+\verb=\superiors=&\textsf{font command} & \verb=M{\superiors rs}=&M{\superiors rs}\\
+\hline
+\verb=\scinferiors=&\textsf{font command} &\verb={\scinferiors C6H12O3}= &{\scinferiors C6H12O3}\\
+\hline
+\verb=\smartfracs=&\textsf{font command} &\verb=2{\smartfracs1/3}= &2{\smartfracs1/3} \\
+\hline
+\verb=\fullsc=&\textsf{text font command} &\verb=\fullsc{Chapter}= &\fullsc{Chapter} \\
+\hline
+\verb=\textsup=&\textsf{text font command} &\verb=M\textsup{rs}=&M\textsup{rs} \\
+\hline
+\verb=\textscinf=&\textsf{text font command} &\verb=\textscinf{C6H12O3}= &\textscinf{C6H12O3} \\
+\hline
+\verb=\smartfrac=&\textsf{text font command} &\verb=2\smartfrac{3/4}= &2\smartfrac{3/4} \\
+\hline
+\verb=\olddigits=&\textsf{font command} &\verb={\olddigits01234}= &{\olddigits01234} \\
+\hline
+\verb=\liningdigits=&\textsf{font command} &\verb={\olddigits01\liningdigits01}= &{\olddigits01\liningdigits01} \\
+\hline
+\verb=\propdigits=&\textsf{font command} &\verb={\propdigits011\olddigits011}= &{\propdigits011\olddigits011} \\
+\hline
+\verb=\tabulardigits=&\textsf{font command} &\verb={\tabulardigits011\olddigits011}= &{\tabulardigits011\olddigits011} \\
+\hline
+\end{tabular}
+
+
+\end{table}
+
+
+\section{Using tango}
+
+\subsection{Generalities}
+The tango interface is not so different from that of the standard \TO{article} and \TO{book} document classes. Configuration is essentially a matter of choosing options.
+
+For advanced use, it is useful to refer to the documentation for the various packages: first, of course, \TO{unicode-math}, \TO{fontspec}, \TO{mathtools} and \TO{amsmath}. But if you want to change the style of titles, for example, you could take a look at the \TO{titlesec} documentation, and to change the style of lists (enumerate, itemize, etc.), take a look at \TO{enumitem}. The \TO{geometry} package is essential for anyone wanting to obtain a particular layout. And so on.
+\subsection{Modified standard commands}
+Since documents designed with the \TO{article} option can become chapters in a book composed later with the \TO{book} option, the \verb+\part+ command inherited from the \TO{article} class has been deactivated (only for article-typeset documents)
+
+Similarly, the \TO{article} version benefits from a \verb+\tgotitle+ command that lets you define the main title of the document. The \verb+\tgotitle*+ version exists but does nothing more or less than the unstarred command. However, in the \TO{book} version, \verb+\tgotitle+ is an alias for \verb+\chapter+ (and \verb+\tgotitle*+ is an alias for \verb+\chapter*+), so the unnumbered title of a handout very easily becomes the numbered title of a chapter in a book. This, of course, assumes that the \verb+\includeonly+/\verb+\include+ mechanism is used... A model (currently written in French) is provided in the \TO{examples} directory.
+
+The command \verb+\tableofcontents+ can only be used with the \TO{book} option; it is deactivated with the \TO{article} option: in this case, you have to use \verb+\tgoshorttoc+ instead (of course \verb+\tgoshorttoc+ is in turn deactivated in the \TO{book} version). Note that, if you need multiple or partial tocs, you have to use a dedicated package.
+
+\subsection{Using two or more output formats}
+What I'm describing here is still rudimentary and experimental. It will be developed further if it proves successful.
+
+For each output format, two particular commands are provided. For example, in case of the \TO{Smartphone} output option, you have \verb+\SmartphoneCommand+ and \verb+\XSmartphoneCommand+. The \verb+\SmartphoneCommand+ argument is only taken into account if \TO{Output=Smartphone} have been used. Conversely, the \verb+\XSmartphoneCommand+ argument is only taken into account if this option has not been used.
+\begin{example}[Examples]
+\begin{itemize}
+\item \verb+\SmartphoneCommand{\pagebreak}+ asks for a page break only for the smartphone output.
+\item \verb+\XSmartphoneCommand{\[< long math formula >\]}+
+\par \verb+\SmartphoneCommand{\begin{multline*}<split formula>\end{multine*}}+
+\par asks for a multline version of a formula only for the smartphone output
+\end{itemize}
+\end{example}
+
+Provided commands are:
+\begin{itemize}
+\item\verb+\AfourCommand+ and \verb+\XAfourCommand+ for the A4 format;
+\item\verb+\LetterCommand+ and \verb+\XLetterCommand+ for the letter format;
+\item\verb+\AfiveCommand+ and \verb+\XAfiveCommand+ for the A5 format;
+\item\verb+\BigTabletCommand+ and \verb+\XBigTabletCommand+ for the big tablet format;
+\item\verb+\TabletCommand+ and \verb+\XTabletCommand+ for the tablet format;
+\item\verb+\SmallTabletCommand+ and \verb+\XSmallTabletCommand+ for the small tablet format;
+\item\verb+\eReaderCommand+ and \verb+\XeReaderCommand+ for the e-reader format;
+\item\verb+\SmartphoneCommand+ and \verb+\XSmartphoneCommand+ for the smartphone format.
+\end{itemize}
+\subsection{All the color themes}
+\indent\par
+\hspace*{0pt}\hfil\showtheme{Blue}\hfil\showtheme{Azur}\hfil\showtheme{Navy}\hfil\showtheme{USAF}\hfil%
+\showtheme{Framboise}\hfil\null
+\par\bigskip\par
+\hspace*{0pt}\hfil\showtheme{Red}\hfil\showtheme{Brique}\hfil\showtheme{Caramel}\hfil\showtheme{Sienne}\hfil\showtheme{Olive}\hfil\null
+\par\bigskip\par
+\hspace*{0pt}\hfil\showtheme{Tannen}\hfil\showtheme{GrayGray}\hfil\showtheme{Steel}\hfil\showtheme{Ink}\hfil\showtheme{BlackAndWhite}\hfil\null
+
+\section{Language settings}\label{lang}
+A language option \emph{must} be passed to the \TO{babel} package via the tango class: this is true \emph{even} for English-speaking people. A class error message will be generated otherwise. If you ignore this message you will get no hyphenation patterns at all!
+
+Tango also has some reserved words, which are (when an english language option is passed to tango):\begin{verbatim}
+\newcommand\TgoTheoremName{Theorem}
+\newcommand\TgoDefinitionName{Definition}
+\newcommand\TgoPropositionName{Proposition}
+\newcommand\TgoLemmaName{Lemma}
+\newcommand\TgoCorollaryName{Corollary}
+\newcommand\TgoRemarkName{Remark}
+\newcommand\TgoExampleName{Example}
+\newcommand\TgoContentsName{Contents}
+\newcommand\TgoExerciseName{Exercise}
+\newcommand\TgoExercisesSubsectionName{Exercises}
+\newcommand\TgoExercisesSectionName{Exercises}
+\end{verbatim}
+
+Although any language option recognized by babel will (in principle) be taken into account as soon as it is passed to tango, the translation of these reserved words only happens for the following languages:
+\begin{itemize}
+\item\TO{french};
+\item\TO{english, british, american, canadian, australian, newzealand};
+\item\TO{german, ngerman, naustrian, nswissgerman};
+\item\TO{italian};
+\item\TO{spanish}.
+\end{itemize}
+
+Other languages benefit from babel's facilities, but tango's reserved words are not translated.
+So here's what concerned users can do.
+
+\begin{enumerate}
+\item Translate these names in your language (for now it is done only for the french language), using \verb+\renewcommand+.
+\item (Better) Mail me all the necessary information (at least babel language option used and your translation of the tango names) and I will adapt the tango class to your language.
+\end{enumerate}
+\section{Statements}\label{st-section}
+
+\subsection{Predefined statements}
+The environments offered by the tango document class for the statements were defined using the \verb+\newstatement+ command, whose syntax is:
+\begin{tcolorbox}
+\begin{verbatim}
+\newstatement{<environment>}{<counter>}{<statement-name>}[<optionnal-font-command>]
+\end{verbatim}
+\end{tcolorbox}
+For example, the \TO{thm}, \TO{defin}, \TO{propo}, \TO{coro} and \TO{lem} environments have been defined using something like:
+\begin{tcolorbox}
+\begin{verbatim}
+\newcounter{thm} \newstatement{thm}{thm}{Theorem}[\itshape]
+\newcounter{defin} \newstatement{defin}{defin}{Definition}
+\newcounter{propo} \newstatement{propo}{propo}{Proposition}[\itshape]
+\newcounter{coro} \newstatement{coro}{coro}{Corollary}
+\newcounter{lem} \newstatement{lem}{lem}{Lemma}
+\end{verbatim}
+\end{tcolorbox}
+
+
+If you type:
+
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}[pons asinorum]
+The angles at the base of an isosceles triangle are equal.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+
+you will obtain:
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}[pons asinorum]
+The angles at the base of an isosceles triangle are equal.
+\end{thm}
+
+As you can see, each statement defined with \verb+\newstatement+ has an optional bracketed argument (which is displayed within parentheses after the statement name and number). Please, note that these environments should not be used inside a \TO{list}-based environment (like center, quote, enumerate, itemize…).
+
+For each statement defined with \verb+\newstatement+ there is also
+\begin{itemize}
+\item a starred form with no statement number:
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{coro*}
+The angles at the base of an isosceles triangle are equal.
+\end{coro*}
+\end{verbatim}
+\end{tcolorbox}
+\end{itemize}
+\begin{coro*}
+The angles at the base of an isosceles triangle are equal.
+\end{coro*}
+\begin{itemize}
+\item and an optional first argument delimited with \verb+< >+ to replace locally the full theorem name.
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{thm*}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with
+complex coefficients has at least one complex root.
+\end{thm*}
+\end{verbatim}
+\end{tcolorbox}
+\end{itemize}
+\begin{thm*}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with complex coefficients has at least one complex root.
+\end{thm*}
+
+\subsection{Defining your own statements}
+If you need a new statement type, say an axm environment for axioms, it's easy:
+\begin{tcolorbox}
+\begin{verbatim}
+\newcounter{axio} \newstatement{axm}{axio}{Axiom}
+\end{verbatim}
+\end{tcolorbox}
+Note that it is up to you to define the counter for this new environment: if this counter does not still exist, it has to be created with \verb+\newcounter+. Of course, the counter name may be different from the environment name. If you have used the \TO{no-statement} option, you will have to define all the statements you need, with the environment names you prefer.
+
+\subsection{Redefining existing statements}
+The \verb+\newstatement+ command has a \verb+\renewstatement+ companion to redefine existing statement environment. Precisely, you need to use \verb+\renewstatement{foo}…+ instead of \verb+\newstatement{foo}…+ if and only if the \verb+foo+ environment has already been defined.
+
+\begin{example}[Examples]
+\begin{enumerate}
+\item You can redefine the \TO{propo} environment in such a way that it uses the same counter as the \TO{thm} environment and is displayed in the upright font:
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement{propo}{thm}{Proposition}
+\setcounter{thm}{0}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}
+The angles at the base of an isosceles triangle are equal.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+\end{enumerate}
+\renewstatement{propo}{thm}{Proposition}
+\setcounter{thm}{0}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}
+The angles at the base of an isosceles triangle are equal.
+\end{thm}
+
+\begin{enumerate}[resume]
+\item If you have already written \emph{all} your algebra book in Latex, with propositions, theorems and corollaries and you realize that, \emph{now}, you want there is no more difference between propositions, theorems and corollaries: the three types of statements should be typeset in italic, named \enquote{Proposition} and numbered with the same counter, you can just use in your preamble:
+
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement{coro}{thm}{Proposition}[\itshape]
+\renewstatement{propo}{thm}{Proposition}[\itshape]
+\renewstatement{thm}{thm}{Proposition}[\itshape]
+\setcounter{thm}{0}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}
+The sum of two even integers is an even integer.
+\end{thm}
+\begin{coro}
+If two integers have the same parity, their sum is even.
+\end{coro}
+\end{verbatim}
+\end{tcolorbox}
+and you will get
+
+\end{enumerate}
+\renewstatement{coro}{thm}{Proposition}[\itshape]
+\renewstatement{propo}{thm}{Proposition}[\itshape]
+\renewstatement{thm}{thm}{Proposition}[\itshape]
+\setcounter{thm}{0}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}
+The sum of two even integers is an even integer.
+\end{thm}
+\begin{coro}
+If two integers have the same parity, their sum is even.
+\end{coro}
+
+
+instead of
+
+\setcounter{thm}{0}\setcounter{propo}{0}
+\renewstatement{thm}{thm}{Theorem}[\itshape]
+\renewstatement{propo}{propo}{Proposition}[\itshape]
+\renewstatement{coro}{coro}{Corollary}
+\begin{propo}
+The sum of two odd integers is an even integer.
+\end{propo}
+\begin{thm}
+The sum of two even integers is an even integer.
+\end{thm}
+\begin{coro}
+If two integers have the same parity, their sum is even.
+\end{coro}
+\begin{enumerate}[resume]
+\item And finally \verb+\renewstatement+ and \verb+\newstatement+ have a starred form with which statement numbers are displayed \emph{before} the statement name. More, if the statement counter is the subsection or subsubsection counter, the concerned statement titles are displayed in the same form and placement as subsection or subsubsection titles; of course the placement depends on the value of \TO{notitleindent}.
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement*{thm}{thm}{Theorem}
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with
+complex coefficients has at least one complex root.
+\end{thm}
+\renewstatement*{thm}{subsection}{Theorem}[\itshape]
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with
+complex coefficients has at least one complex root.
+\end{thm}
+\renewstatement*{thm}{subsubsection}{Theorem}
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with
+complex coefficients has at least one complex root.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+\end{enumerate}
+\end{example}
+\renewstatement*{thm}{thm}{Theorem}
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with complex coefficients has
+at least one complex root.
+\end{thm}
+\renewstatement*{thm}{subsection}{Theorem}[\itshape]
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with complex coefficients has
+at least one complex root.
+\end{thm}
+\renewstatement*{thm}{subsubsection}{Theorem}
+\begin{thm}<D'Alembert-Gauss theorem>[fundamental theorem of algebra]
+Every non-constant single-variable polynomial with complex coefficients has
+at least one complex root.
+\end{thm}
+
+
+
+\section{Exercises}
+\subsection{Typesetting exercises}
+Tango provides the \verb+\exo+ command which lets you typeset a numbered exercise (the counter is \TO{tgoexo}). There is a starred version, which is not numbered. As for the statements, the bracketed option provides a complementary title between parenthesis and the \enquote{\TO{< >}} marked first option provides a substitution title.
+\begin{tcolorbox}
+\begin{verbatim}
+\exo
+Prove that if $G$ is a finite group and $H$ a subgroup of $G$,
+then the order of $H$ divides the order of $G$.
+\exo[Lagrange theorem]
+Prove that if $G$ is a finite group and $H$ a subgroup of $G$,
+then the order of $H$ divides the order of $G$.
+\end{verbatim}
+\end{tcolorbox}
+\exo
+Prove that if $G$ is a finite group and $H$ a subgroup of $G$, then the order of $H$ divides the order of $G$.
+\exo[Lagrange theorem]
+Prove that if $G$ is a finite group and $H$ a subgroup of $G$,
+then the order of $H$ divides the order of $G$.
+\begin{tcolorbox}
+\begin{verbatim}
+\newcommand\tgostar{\raisebox{-0.5ex}{\large\textborn}}
+\exo*<Chinese remainder problem>[\tgostar\tgostar\tgostar]
+Let $n_1,\ldots, n_k$ be integers greater than $1$ and let us denote by $N$
+the product of the $n_i$. Prove that if the $n_i are pairwise coprime, and if
+$a_1,\ldots, a_k$ are any integers, then the system
+\begin{align*}
+x&\equiv a_1 \pmod{n_1}\\
+&\!\vdots\\
+x&\equiv a_k \pmod{n_k}
+\end{align*}
+has a solution, and any two solutions are congruent modulo $N$.
+\end{verbatim}
+\end{tcolorbox}
+\newcommand\tgostar{\raisebox{-0.5ex}{\large\textborn}}
+\exo*<Chinese remainder problem>[\tgostar\tgostar\tgostar]
+Let $n_1,\ldots, n_k$ be integers greater than $1$ and let us denote by $N$ the product of the $n_i$.
+Prove that if the $n_i$ are pairwise coprime, and if $a_1,\ldots, a_k$ are any integers, then the system
+\begin{align*}
+x&\equiv a_1 \pmod{n_1}\\
+&\!\vdots\\
+x&\equiv a_k \pmod{n_k}
+\end{align*}
+has a solution, and any two solutions are congruent modulo $N$.
+\subsection{The secexo and chapexo environments}
+These environments are designed to present a part devoted to exercises at the end of a section (in the case of \TO{secexo}) or a chapter (in the case of \TO{chapexo}). Within these environments, you can use the command \verb+\exo+
+
+The title, in capitals and centred, is \enquote{EXERCISES} by default. The optional argument in square brackets allows you to choose another. This title is added to the table of contents.
+
+Finally, there is a starred form (\verb+\begin{secexo*)+…\verb+\end{secexo*}+ which allows you to compose the exercises within these sections in a smaller font size (exept if the main font size is nine points).
+
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{secexo*}[Example of an exercises subsection]
+\exo Prove that the sum of two even integers is an even integer.
+\exo Prove that the sum of two odd integers is an even integer.
+\end{secexo*}
+\end{verbatim}
+\end{tcolorbox}
+\begin{secexo*}[Example of an exercises subsection]
+\exo Prove that the sum of two even integers is an even integer.
+\exo Prove that the sum of two odd integers is an even integer.
+\end{secexo*}
+
+\section{Lists}\label{lists}
+\subsection{General principles}
+All the horizontal motion in tango is performed in steps equal to an integer multiple of the \verb+\TgoStandardMargin+ length parameter. When the tango class is loaded, the value of this parameter is set to 1.5em, as are paragraph indentation and title indentation (unless these two values are fixed to zero). Successive labels in the enumerate and itemize environments are therefore successively positioned at 1.5em, 3em, 4.5em, etc. from the main margin. It could be unadvised to change these settings (or this should be done using the enumitem package).
+\subsection{List based environments}
+There are two main lists configurations. The first, active by default, is set with \verb+\tgostandardlists+; the second is set with \verb+\tgosmartlists+.
+%
+With \verb+\tgostandardlists+ the text corresponding to a given level is shifted to the right (by a value equal to \verb+\TgoStandardMargin+...) with respect to the corresponding label.
+%
+With \verb+\tgosmartlists+, conversely, the text corresponding to a given level is shifted to the left (by a value equal to \verb+\TgoStandardMargin+...) in relation to the corresponding label.
+\renewtgolabels*\tgostandardlists
+
+Here is the default behaviour of the \TO{itemize} environment (\TO{enumerate} is not different).
+\begin{itemize}
+\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\begin{itemize}
+\item Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\begin{itemize}
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+\begin{itemize}
+\item Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\end{itemize}
+\item Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam.
+\end{itemize}\end{itemize}
+\item Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\end{itemize}
+
+\bigskip
+
+And now with \verb+\tgosmartlists+ \tgosmartlists
+\begin{itemize}
+\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\begin{itemize}
+\item Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\begin{itemize}
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+\begin{itemize}
+\item Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\end{itemize}
+\item Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam.
+\end{itemize}\end{itemize}
+\item Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\end{itemize}
+
+Note that \verb+\tgosmartlists+ seems most interesting when you use mainly the first level of these environments.
+Since the \verb+\tgosmartlists+ doesn't support very well a construction like
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{enumerate}
+\item\begin{enumerate}\item
+…
+\end{verbatim}
+\end{tcolorbox}
+that is frequent in exercises questions,
+the \TO{secexo} and \TO{chapexo} environments set locally the lists to \verb+\tgostandardlists+. It is not the case with the \verb+\exo+ command which has no local context. \tgostandardlists
+
+\subsection{Redefining labels of itemize lists}
+Tango provides a \verb+\renewtgolabels+ command which permits to modify the labels of the \TO{itemize} environment. Arguments are numbered from 1 to 4 (there is four levels of itemize lists in Latex) and must be used like in the examples below.
+\begin{example}[Examples]
+\begin{itemize}
+\item\verb=\renewtgolabels1{\lefthand}= will replace the first label by the \verb=\lefthand= symbol.
+\renewtgolabels1{\lefthand}
+\item\verb=\renewtgolabels4{\textbullet}1{\openbullet}3{\textemdash}= changes the label for the first (again), the third and the fourth levels. Level 2 remains unchanged. As you can see, the order of the arguments is unimportant. \renewtgolabels4{\textbullet}1{\openbullet}3{\textemdash}
+\end{itemize}
+\end{example}
+
+There is also a starred form that restore the initial label (as at the load of the class) which are \verb=\textbullet=, \textbullet, for the level 1, \verb=\textopenbullet=, \textopenbullet, for the level 2, \verb=\starredbullet=, \starredbullet, for the level 3 and \verb=\textperiodcentered=, \textperiodcentered{} for the level 4 (note that this is the tango default, but \emph{not} the Latex default).
+
+\renewtgolabels*
+\begin{example}[Examples]
+\begin{itemize}
+\item\verb=\renewtgolabels*= restore all the initial values.
+\item\verb=\renewtgolabels*2{\textendash}= restore initial values except for the second level which is changed to \textendash.
+\end{itemize}
+\end{example}
+
+
+\section{Other environments}
+In addition to the statements environments, the tango class offers the following environments:
+\subsection{The remark and example environments}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{remark}
+This is a very good remark.
+\end{remark}
+\begin{example}
+This is a very short example.
+\end{example}
+\end{verbatim}
+\end{tcolorbox}
+\begin{remark}
+This is a very good remark.
+\end{remark}
+\begin{example}
+This is a very short example.
+\end{example}
+
+These two environments have a bracketed optional argument which displays a replacement title. For example:
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{example}[Remarks]
+\begin{enumerate}
+\item A first (very good) remark.
+\item A second remark (which is best, if possible).
+\end{enumerate}
+\end{example}
+\end{verbatim}
+\end{tcolorbox}
+\begin{example}[Remarks]
+\begin{enumerate}
+\item A first (very good) remark.
+\item A second remark (which is best, if possible).
+\end{enumerate}
+\end{example}
+
+\subsection{The alert environment}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{alert}
+You should not even try to use \verb+\expandafter\expandafter\expandafter+
+unless you are actually a very experimented \TeX{} user, because you could get
+a terrible headhache.
+\end{alert}
+\end{verbatim}
+\end{tcolorbox}
+\begin{alert}
+ You should not even try to use \verb+\expandafter\expandafter\expandafter+
+unless you are actually a very experimented \TeX{} user, because you could get
+a terrible headhache.
+\end{alert}
+
+The \TO{alert} environment also support an optional bracketed argument.
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{alert}[\bomb]
+You should not even try to use \verb+\expandafter\expandafter\expandafter+
+unless you are actually a very experimented \TeX{} user, because you could get
+a terrible headhache.
+\end{alert}
+\end{verbatim}
+\end{tcolorbox}
+\begin{alert}[\bomb]
+ You should not even try to use \verb+\expandafter\expandafter\expandafter+
+unless you are actually a very experimented \TeX{} user, because you could get
+a terrible headhache.
+\end{alert}
+
+\subsection{The proof environment}
+The \TO{proof} environment is adapted from the \TO{amsthm} package. It also support a bracketed optional argument for a replacement title. The \verb+\qedhere+ command is also usable.
+\renewstatement{thm}{thm}{Theorem}[\itshape]
+\setcounter{thm}{0}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{thm}
+The sum of two odd integers is an even integer.
+\end{thm}
+\begin{proof}
+Let $p$ and $q$ be two odd integers. We have to prove that there
+exists an integer $n$ such that $p+q=2n$.
+We know that there is an integer $p_1$ and an integer $q_1$ such that
+\[p=2p_1+1\text{ and } q=2q_1+1,\]
+hence
+\begin{align*}p+q&=(2p_1+1)+(2q_1+1)\\
+&=2\underbrace{(p_1+q_1+1)}_{n}\qedhere
+\end{align*}
+\end{proof}
+\end{verbatim}
+\end{tcolorbox}
+\begin{thm}
+The sum of two odd integers is an even integer.
+\end{thm}
+\begin{proof}
+Let $p$ and $q$ be two odd integers. We have to prove that there exists an integer $n$ such that $p+q=2n$.
+We know that there is an integer $p_1$ and an integer $q_1$ such that
+\[p=2p_1+1\text{ and } q=2q_1+1,\]
+hence
+\begin{align*}p+q&=(2p_1+1)+(2q_1+1)\\
+&=2\underbrace{(p_1+q_1+1)}_{n}\qedhere
+\end{align*}
+\end{proof}
+
+\section{Figures, tables, floats and captions}\label{figtable}
+Thanks to the \TO{caption} package, the following have been defined:
+\begin{itemize}
+\item\verb+\tgofigcaption+ (for figures);
+\item and \verb+\tgotabcaption+ (for tables).
+\end{itemize}
+These two commands provide captions similar in appearance to what could be obtained with \verb+\caption+, but also work in the case of non-floating objects.
+
+In this way it is possible to include small tables and figures in a fixed position, with nothing in their appearance to distinguish them from floating objects (whose use is still recommended in most cases).
+
+\end{document}
diff --git a/macros/luatex/latex/tango/doc/tango-fr.pdf b/macros/luatex/latex/tango/doc/tango-fr.pdf
new file mode 100644
index 0000000000..a4438d58de
--- /dev/null
+++ b/macros/luatex/latex/tango/doc/tango-fr.pdf
Binary files differ
diff --git a/macros/luatex/latex/tango/doc/tango-fr.tex b/macros/luatex/latex/tango/doc/tango-fr.tex
new file mode 100644
index 0000000000..1ed1a70abf
--- /dev/null
+++ b/macros/luatex/latex/tango/doc/tango-fr.tex
@@ -0,0 +1,786 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[french,ColorTheme=USAF,FontSize=10pt]{tango}
+%\setmonofont{Latin Modern Mono}[Scale=MatchUppercase]
+\usepackage{longtable,csquotes,lipsum,tcolorbox}
+\usepackage[dvipsnames]{xcolor}
+\newcommand\DO[1]{\textcolor{ColorOne}{\bfseries #1}}
+\newcommand\TO[1]{\textsf{#1}}
+%%
+\NewDocumentCommand\showtheme{m}
+{{\tgosetup{ColorTheme=#1}
+\parbox{2.1cm}{\centering
+\textsf{#1\rule[-3pt]{0pt}{10pt}}\\
+\colorbox{ColorOne}{\parbox{1.5cm}{\rule[-5pt]{0pt}{15pt}}}
+\par
+\colorbox{ColorTwo}{\parbox{1.5cm}{\rule[-5pt]{0pt}{15pt}}}
+\par
+}}}
+%
+%\tgosmartlists
+\renewtgolabels1{\lefthand}
+\definecolor{ColorThree}{rgb}{0.93,0.95,0.97}
+\tcbset{colback=ColorTwo,colframe=ColorTwo,sharp corners}
+\frenchspacing
+%\setcounter{section}{88}
+\begin{document}
+
+\renewcommand{\arraystretch}{1.1}
+\title{\textcolor{ColorOne}{\floweroneleft}\,La classe de documents tango\,\textcolor{ColorOne}{\floweroneright}}
+\author{\href{mailto:michel.bovani@icloud.com}{Michel \textsc{Bovani}}\\
+Page internet de tango: \href{https://tango.mathriochka.net}{https://tango.mathriochka.net}}
+\date{\today\\v. 0.8.0}
+{\sffamily
+\maketitle
+
+}
+\thispagestyle{empty}
+
+\tgoshorttoc
+\section{Qu'est-ce que la classe tango ?}
+
+
+Tango est une classe de documents pour le système de composition Latex (au début du document source, il convient donc de saisir \verb=\documentclass[<options>]{tango}=) à l'usage des professeurs de mathématiques (\emph{grosso modo}, sur le segment bac$-3$-bac$+3$). Elle est conçue pour la composition de divers types de documents, du petit polycopié au livre complet. Pour l'essentiel, le côté \frquote{dédié aux maths} consiste à :
+\begin{itemize}
+\item Charger des packages dédiés (amsmath, unicode-math \&Co).
+\item Proposer des commandes et des environnements pour les théorèmes, propositions, définitions, exercices, etc.
+\end{itemize}
+
+Tango est raisonnablement configurable, même si j'ai dû imposer certains choix : utilisation obligatoire de lualatex, des fontes opentype, et d'une installation récente, notamment. La classe propose huit formats de sortie, dont cinq sont adaptés aux tablettes, liseuses ou smartphones. Un procédé encore imparfait permet d'introduire une saisie particulière pour un format de sortie donné (par exemple de forcer un saut de page pour le format A5 seulement). La classe tango peut aussi être utilisée pour des projets de portée plus générale que des cours de mathématiques : des cours de sciences, bien sûr, mais aussi des choses très différentes, si l'on est prêt à un effort de configuration supplémentaire (voir le répertoire \TO{candide} dans les exemples).
+
+Une autre classe Latex, conçue pour réaliser des documents support au travail scolaire (énoncés d'exercices, sujets de devoirs ou d'examens) devrait être disponible sous peu. Il est prévu qu'elle se nomme \frquote{\TO{bravo}}.
+
+\section{Panorama des options}
+Veuillez noter que le tableau ci-dessous mentionne pour l’essentiel les options effectivement traitées par tango. D'autres options peuvent être, lorsqu’elles sont utilisées à l'appel de la classe, simplement transmises à certains packages. C'est le cas par exemple des options de langues de babel, ou de l'option \TO{math-style} passée au package unicode-math.
+
+Les valeurs par défaut sont présentées en bleu gras. Les options en gras, marquées d'un astérisque, peuvent être activées dans le préambule ou le corps du document à l'aide de la commande \verb+\tgosetup+ : par exemple, vous pouvez utiliser \verb+\tgosetup{ColorTheme=Navy}+ pour changer les couleurs à l'intérieur de votre document. Les autres options ne peuvent être utilisées qu'à l'appel de la classe.
+
+\begin{longtable}{p{0.23\linewidth}p{0.7\linewidth}}
+\caption[]{Les options de la classe tango}\\
+\textbf{Option}&\textbf{Utilisation}\\
+\hline\endhead
+\hline\multicolumn{2}{r}{\emph{Voir page suivante}}\endfoot
+\hline\endlastfoot
+\TO{%
+french, english, british, american, canadian, australian, newzealand, german, ngerman, naustrian, nswissgerman, italian, spanish}.& Tango transmettra au package \TO{babel} toutes les options de langue. En revanche, la traduction des noms spécifiques employés par tango (comme théorème, exercice, etc.) n'est assurée que pour les langues listées ci-contre. Notez bien que même les locuteurs anglais doivent \emph{impérativement} passer une option de langue à tango.
+
+Voir la section~\ref{lang} plus loin.\\
+\hline
+\TO{no-statement}&\TO{no-statement=true/\DO{false}}. Des environnements \TO{thm}, \TO{defin}, \TO{lem}, \TO{coro}, \TO{propo} (pour présenter les théorèmes, définitions, lemmes, corollaires et propositions) sont définis par défaut. L'option \DO{no-statement} vous permet de définir ces environnements vous-même avec une configuration plus personnelle (voir les commandes \verb=\newstatement= and \verb=\renewstatement= dans la section~\ref{st-section} page~\pageref{st-section}).\\
+\hline
+\TO{no-hyperref}&\TO{no-hyperref=true/\DO{false}}. Si vous souhaitez vous contenter d'une sortie papier…\\
+\hline
+\TO{no-indent/indent}&\TO{no-indent=true/\DO{false}}. Les retraits d'alinéa sont présents par défaut. L'option \TO{no-indent} (alias court de \TO{no-indent = true}) les supprime. Une option \TO{indent} existe également, quoiqu'elle ne soit pas très utile.\\
+\hline
+\TO{no-titleindent}/\TO{titleindent}&Les retraits d'alinéa pour les titres sont présents par défaut en français uniquement. (La raison en est qu'en typographie française le premier paragraphe après un titre subit ce retrait comme les autres paragraphes, ce qui n'est pas le cas en typo anglaise : je préfère donc dans ce cas, mais cela peut être débattu, que le titre subisse lui aussi ce retrait.) Vous pouvez utiliser \TO{no-tiltleindent} en français ou \TO{titleindent} en anglais pour changer le comportement pas défaut. Ces deux options doivent être appelées \emph{après} l'option de langue.\\
+\hline
+\TO{\textbf{ThmNamePos*}}&\TO{ThmNamePos=<valeur>} ou \TO{<valeur>} peut être \TO{\DO{left}} ou \TO{right}. Le nom de l'énoncé (Théorème, Définition, etc.) est affiché à gauche ou à droite de l'encadré.\\
+\hline
+\TO{PubliClass}&\TO{PubliClass=<valeur>} où \TO{<valeur>} peut être \TO{\DO{article}} ou \TO{book}. Indique la classe de base souhaitée (la classe standard \TO{article} ou la classe standard \TO{book}). La classe tango est conçue de telle sorte que des petits polycopiés fabriqués au jour le jour et composés avec l'option \TO{article} puissent être regroupés et devenir les chapitres d'un même volume avec l'option \TO{book}. Voyez le répertoire \texttt{mathematics} dans la partie exemples de la documentation. Avec l'option \TO{article}, les commandes \verb=\part= et \verb=\tableofontents= sont désactivées. La commande \verb=\tgoshorttoc= peut être utilisée pour obtenir un sommaire au début d'une monographie ou d'un polycopié.\\
+\hline
+\TO{oneside/twoside}& L'option \TO{twoside} est pour une sortie en recto verso, alors que \TO{oneside} est adaptée au recto simple. La valeur par défaut est \TO{\DO{oneside}}. Pour l'instant, il n'y a pas d'ajustement des marges intérieures et extérieures avec \TO{twoside} mais il est techniquement facile de réaliser des blancs tournants à votre convenance grâce à la commande \verb=\geometry= employée dans le préambule. Notez que les gens compliqués ou amateurs de détours pourront préférer \TO{twoside=false} à \TO{oneside}.\\
+\hline
+\TO{FontSize}&\TO{FontSize=<valeur>} où \TO{<valeur>} peut être \TO{9pt}, \TO{\DO{10pt}}, \TO{11pt} ou \TO{12pt}.\\
+\hline
+\TO{\textbf{ColorTheme*}}&\TO{ColorTheme=<valeur>} où \TO{<valeur>} peut être \TO{Blue, Navy, USAF, Azur, Red, Framboise, Brique, Sienne, Caramel, Olive, Tannen, \DO{GrayGray}, BlackAndWhite, Ink} or \TO{Steel}. Chaque choix définit un ensemble de deux couleurs, une soutenue (ColorOne) pour les titres et une très claire (ColorTwo) pour le fond des encadrés.\\
+\hline
+\TO{\textbf{ColorOne*}/\textbf{ColorTwo*}}& Ces options permettent à l'utilisateur de définir les couleurs d'un thème personnel; dans les deux cas la valeur doit être un argument acceptable pour la commande \verb=\definecolor=. Voir la documentation du package xcolor, chargé sans option par tango.
+\begin{example}[Exemples]
+ \begin{itemize}
+ \item\TO{ColorOne=}\verb={rgb}{0.75,0.1,0.05}=
+ \item\TO{ColorOne=}\verb={cmyk}{0,0.8,0.8,0.2}=
+ \item\TO{ColorTwo=}\verb={{rgb}{0.75,0.96,0.75}}= (notez que les accolades extérieures sont acceptées sans être obligatoires).
+\end{itemize}
+\end{example}
+\\
+\hline
+\TO{\textbf{ColorOneNamed*}} / \\
+\TO{\textbf{ColorTwoNamed*}}&
+ Ces options permettent à l'utilisateur de définir les couleurs d'un thème personnel; dans les deux cas la valeur doit être un argument acceptable pour la commande \verb=\colorlet=. Voir la documentation du package xcolor, chargé sans options par tango.
+\begin{example}[Exemples]
+ \begin{itemize}
+ \item\TO{ColorOneNamed=}\verb={red!70!blue}=
+\item\TO{ColorTwoNamed=}\verb={yellow!12}=
+ \end{itemize}
+\end{example}
+Si vous souhaitez utiliser un ensemble de couleurs prédéfinies, disons par exemple \TO{dvipsnames}, il vous suffit de recharger le package \TO{xcolor} avec l'option \TO{dvipsnames} dans le préambule, puis d'utiliser la commande \verb=\tgosetup= :
+\begin{itemize}
+\item \verb+\tgosetup{ColorOneNamed={RedOrange!80!BrickRed}}+
+ \end{itemize}
+\\
+\hline
+\TO{Output}&\TO{Output=<valeur>} où \TO{<valeur>} peut être \TO{\DO{A4paper}, Letter, A5paper, BigTablet, Tablet, SmallTablet, eReader} ou \TO{Smartphone}. \TO{BigTablet}, \TO{Tablet} et \TO{SmallTablet} correspondent à des écrans de 13, 11 et 8.5 pouces respectivement; \TO{eReader} configurée pour une liseuse 6 pouces. Veuillez noter qu'en ce qui concerne les formats \TO{eReader} et \TO{Smartphone}, tango demande à Latex un format supérieur au format réel, si bien que les tailles des polices sont inférieures à ce que l'on pourrait attendre. Ainsi, l'option \TO{FontSize=9pt} peut fournir des résultats qui sembleront difficilement lisibles.\\
+\hline
+ \TO{Numbers}& \TO{Numbers=<valeur>} où \TO{<valeur>} peut être \TO{TextOldStyle, OldStyle, MathOldStyle, FullOldstyle}. Si vous ne demandez rien, vous obtenez les chiffres habituels, à hauteur d'une lettre capitale, parfois nommés \frquote{lining}.
+\begin{itemize}
+\item \TO{Numbers=TextOldStyle} sélectionne les chiffres bas de casse ({\olddigits 0123456789}) of de la police erewhon (fonte texte de base) pour tout.
+\item \TO{Numbers=OldStyle} sélectionne les chiffres bas de casse pour toutes les fontes de texte du document.
+\item \TO{Numbers=MathOldStyle} sélectionne les chiffres bas de casse uniquement pour les mathématiques (je ne vois aucune bonne raison de procéder ainsi).
+\item \TO{Numbers=FullOldStyle} sélectionne les chiffres bas de casse aussi bien pour les fontes de texte que pour les mathématiques.
+\end{itemize}
+Remarquons qu'il est toujours possible de basculer localement des chiffres sélectionnés par cette option à une de leurs variantes (par exemple les titres de section sont numérotés à l'aide de \frquote{grands} chiffres, dans la mesure où ces titres sont eux-mêmes en capitales).\\
+\hline
+\TO{StylisticSet}&\TO{StylisticSet=\{<valeur1>, <valeur2>,…\}} où \TO{<valeur1>, <valeur2>,} etc. sont à prendre parmi \TO{upint, leqslant, smaller, subsetneq} et \TO{parallelslant}. Ces options concernent la fonte Erewhon-Math, qui est une version opentype du système scientifique Fourier-Gutenberg, (très) étendue par Daniel \textsc{Flipo}. Pour plus d'informations, voir la documentation d'Erewhon-Math (\verb=texdoc erewhon-math= dans un terminal).\\
+\hline
+\TO{CharacterVariant}&\TO{CharacterVariant=\{<valeur1>, <valeur2>,…\}} \TO{<valeur1>, <valeur2>,} etc. sont à prendre parmi \TO{zero, hslash, emptyset, epsilon, kappa, pi, phi, rho, sigma, theta, partial, Ecal, Qcal} et \TO{Tcal}. Ces options concernent la fonte Erewhon-Math, qui est une version opentype du système scientifique Fourier-Gutenberg, (très) étendue par Daniel \textsc{Flipo}. Pour plus d'informations, voir la documentation d'Erewhon-Math (\verb=texdoc erewhon-math= dans un terminal).\\
+\end{longtable}
+
+\section{Liste des packages chargés par la classe tango}
+Je ne mentionne ici que les packages directement chargés par tango. Chacun d'eux peut à son tour charger d'autres packages.
+
+\begin{itemize}
+\item \verb=\RequirePackage{xcolor}=. Le package \TO{xcolor} est utilisé par la classe tango pour définir les couleurs des différents thèmes. Il est appelé sans option, mais vous pouvez le recharger dans le préambule avec des options comme \TO{dvipsnames}, \TO{svgnames} ou \TO{x11names}.
+\item\verb=\RequirePackage{mathtools}=. Le package \TO{mathtools} charge le package \TO{amsmath}.
+\item\verb=\RequirePackage{geometry}=. Utilisé par tango pour définir l'empagement des différents formats de sortie. Vous pouvez utiliser la commande \verb=\geometry= dans votre préambule pour modifier ce empagement, et même la maquette entière.
+\item\verb=\RequirePackage{enumitem}=. Utilisé par la classe tango pour configurer les différents environnements basés sur \TO{list} (voir la section~\ref{lists}). Ces configurations peuvent être modifiées par l'utilisateur dans le préambule.
+\item\verb=\RequirePackage{titletoc}=. Utilisé par la classe tango pour fixer l'apparence de la table des matières, que l'utilisateur peut modifier dans le préambule.
+\item\verb=\RequirePackage[pagestyles,toctitles,newlinetospace,clearempty,noindentafter]{titlesec}=. Utilisé par la classe tango pour modifier l'apparence des titres de différents niveaux. Ces configurations peuvent être modifiées par l'utilisateur dans le préambule.
+\item\verb=\RequirePackage{ccaption,caption}=. Utilisé par la classe tango pour configurer l'apparence des légendes des figures et des tables. (voir la section~\ref{figtable}).
+\item\verb=\RequirePackage{fontspec}\RequirePackage{unicode-math}=. La classe tango requiert \TO{lualatex} et les fontes opentype, y compris pour la composition des mathématiques. Voir la section~\ref{fnts} ci-dessous.
+\item\verb=\RequirePackage{iflang}=. La classe tango utilise ce package pour envoyer un message d'erreur dans le cas où elle n'a reçu aucune option de langue pour \TO{babel}.
+\item\verb=\RequirePackage{babel}=. Le package babel est appelé sans option. Les options de babel lui seront transmises par la classe tango. %See section~\ref{lang} below.
+\item\verb+\RequirePackage[colorlinks,linkcolor=ColorOne,urlcolor=ColorOne]{hyperref}+.\par Cette configuration d'\TO{hyperref} peut être modifiée en utilisant la commande \verb=\hypersetup= dans le préambule. Vous pouvez aussi utiliser l'option \TO{no-hyperref}.
+\item\verb=\RequirePackage{array,graphicx,microtype,numprint,float,afterpage}=. Ces packages sont chargés mais non explicitement utilisés par tango.
+\end{itemize}
+
+\section{Fontes}\label{fnts}
+
+\subsection{Le système de fontes de tango}
+La fonte principale est Erewhon, une version opentype d'Utopia (une fonte PosScript de type~1 qui fut conçue par Robert \textsc{Slimbach} en 1989, puis donnée au X-consortium par Adobe et figurant finalement sur TeXlive. Contrairement à Utopia, Erewhon, dessinée par Michael \textsc{Sharpe}, couvre un assez grand nombre de langues et offre de nombreuses possibilités accessibles à travers les fonctionnalités du format opentype. Il faut savoir également qu'Adobe commercialise une version opentype d'Utopia, moins riche en glyphes qu'Erewhon, mais pourvue d'une graisse intermédiaire et de corps optiques.
+
+La fonte scientifique est Erewhon~Math, un complément scientifique à Erewhon, conçu par Daniel \textsc{Flipo}. D'un certain point de vue, Erewhon est le pendant opentype de Fourier-Gutenberg, le complément scientifique d'Utopia type~1 conçu par mes soins en 2002. Erewhon~Math offre un grand nombre de fonctionnalités, rendues accessibles par Daniel à travers le package \TO{fourier-otf}. La classe tango ne charge pas le package \TO{fourier-otf} mais propose toutes ses fonctionnalités à travers son système d'options.
+
+La fonte sans sérif de tango est Noto Sans, mise à l'échelle. Il s'agit d'une fonte de texte, supportant les alphabets latin, grec et cyrillique, et pourvue de graisses multiples.
+
+La fonte utilisée pour les Titres de premier niveau (commande \verb=\tgotitle=) est Roboto Condensed Bold (puisque les graisses condensées de Noto Sans ne figurent pas sur TeXlive).
+
+La fonte à chasse fixe est Inconsolatazi4, mise à l'échelle.
+
+Enfin, tango appelle le package fourier-orns: il s'agit d'une fonte de logos et de symboles conçue par mes soins comme complément au système fourier et récemment pourvue d'une version opentype.
+
+\subsection{Utiliser tango avec un autre système de fontes}
+Il est évidemment possible d'utiliser les commandes \verb=\setmainfont=, \verb=\setsansfont= et \verb=\setmonofont= du package \TO{fontspec}, ainsi que la commande \verb=\setmathfont= du package \TO{unicode-math} dans le préambule de votre document afin de modifier les paramètres de la classe tango. Ce ne sont pas des modifications que je recommande. En revanche, la distribution tango pourrait à l'avenir proposer une autre classe pourvue d'un autre système de fontes. Une telle classe Latex pourrait se nommer charlie, ou foxtrot ou zulu…
+
+
+\subsection{“Font commands” et “text font commands”}
+Je nomme ici “Font commands” des commandes dont la portée n'est limitée que par un groupe ou un environnement. Je nomme “Text font commands”, à l'opposé, des commandes dont la portée est limitée à leur argument, lequel ne doit contenir aucun saut de paragraphe. Par exemple, \verb=\bfseries= est une “font command” et \verb=\textbf= est une “text font command”. La raison de ces dénominations, dont j'admets qu'elles sont fort critiquables, est que \verb+\textbf+ est défini de façon interne par :
+\begin{tcolorbox}
+\begin{verbatim}
+\DeclareTextFontCommand{\textbf}{\bfseries}
+\end{verbatim}
+\end{tcolorbox}
+
+Voici ce qui est proposé par la classe tango (voir le tableau~\ref{otfcmd}, \pageref{otfcmd}). Toutes ces commandes devraient fonctionner aussi bien avec Erewhon qu'avec Noto Sans.
+
+\begin{table}[ht]
+\XTabletCommand{\centering\setlength\tabcolsep{9pt}}
+\TabletCommand{\centering}
+\caption{Les commandes opentype de la classe tango}\label{otfcmd}
+\ifTgoTabletOutput\begin{tabular}{l | l | l | l}%
+\else
+\begin{tabular}{llll}%
+\fi
+\hline
+\multicolumn{1}{c}{\textsf{\bfseries Commande}}&
+\multicolumn{1}{c}{\textsf{\bfseries Nature}}&
+\multicolumn{1}{c}{\textsf{\bfseries Exemple}}&
+\multicolumn{1}{c}{\textsf{\bfseries Resultat}}\\
+\hline
+\verb=\superiors=&\textsf{font command} & \verb=1{\superiors re}=&1{\superiors re}\\
+\hline
+\verb=\scinferiors=&\textsf{font command} &\verb={\scinferiors C6H12O3}= &{\scinferiors C6H12O3}\\
+\hline
+\verb=\smartfracs=&\textsf{font command} &\verb=2{\smartfracs1/3}= &2{\smartfracs1/3} \\
+\hline
+\verb=\fullsc=&\textsf{text font command} &\verb=\fullsc{Chapitre}= &\fullsc{Chapitre} \\
+\hline
+\verb=\textsup=&\textsf{text font command} &\verb=1\textsup{re}=&1\textsup{re} \\
+\hline
+\verb=\textscinf=&\textsf{text font command} &\verb=\textscinf{C6H12O3}= &\textscinf{C6H12O3} \\
+\hline
+\verb=\smartfrac=&\textsf{text font command} &\verb=2\smartfrac{3/4}= &2\smartfrac{3/4} \\
+\hline
+\verb=\olddigits=&\textsf{font command} &\verb={\olddigits01234}= &{\olddigits01234} \\
+\hline
+\verb=\liningdigits=&\textsf{font command} &\verb={\olddigits01\liningdigits01}= &{\olddigits01\liningdigits01} \\
+\hline
+\verb=\propdigits=&\textsf{font command} &\verb={\propdigits011\olddigits011}= &{\propdigits011\olddigits011} \\
+\hline
+\verb=\tabulardigits=&\textsf{font command} &\verb={\tabulardigits011\olddigits011}= &{\tabulardigits011\olddigits011} \\
+\hline
+\end{tabular}
+
+
+\end{table}
+
+
+
+%\medskip
+
+
+\section{Utilisation de la classe tango}
+
+\subsection{Généralités}
+Concernant l'interface utilisateur, tango n'est pas très différente des classes \TO{article} ou \TO{book}. La configuration se fait essentiellement à travers le choix des options.
+
+Les utilisateurs avancés devraient se référer à la documentation des différents packages : tout d'abord \TO{unicode-math}, \TO{fontspec}, \TO{mathtools} et \TO{amsmath}. Mais si vous souhaitez, par exemple, changer le style des titres, vous pourrez consulter la documentation \TO{titlesec} ; afin de changer le style d'une liste (enumerate, itemize, etc.), voyez plutôt \TO{enumitem}. Le package \TO{geometry} est essentiel pour quiconque souhaiterait obtenir une mise en page particulière. Et ainsi de suite.
+
+
+
+\subsection{Modification de commandes standard par la classe tango}
+
+Afin que des documents composés avec l'option \TO{article} puissent devenir les chapitres d'un livre composé de façon ultérieure avec l'option \TO{book}, la commande \verb+\part+, héritée de la classe \TO{article}, a été désactivée (seulement pour les documents composés avec l'option \TO{article}).
+
+
+De même, la version \TO{article} bénéficie de la commande \verb+\tgotitle+ qui permet de définir le titre principal du document. La version étoilée \verb+\tgotitle*+ existe, mais fait exactement la même chose que la commande non étoilée. Cependant, dans la version \TO{book}, \verb+\tgotitle+ est un alias pour \verb+\chapter+ (et \verb+\tgotitle*+ est de même un alias de \verb+\chapter*+), ainsi, un titre non numéroté dans un polycopié peut facilement devenir le titre numéroté d'un chapitre de livre. Sous réserve évidemment qu'un mécanisme comme \verb+\includeonly+/\verb+\include+ ait été utilisé. Un modèle (pour l'instant en français) est fourni dans le répertoire \TO{examples}.
+
+La commande \verb+\tableofcontents+ ne peut être utilisée qu'avec l'option \TO{book}; elle est désactivée avec l'option \TO{article}: elle est alors remplacée par la commande \verb+\tgoshortoc+ (qui est elle-même désactivée avec l'option \TO{book}). Si vous avez besoin de tables des matières multiples et/ou partielles, il faudra vous tourner vers un package spécialisé.
+
+\subsection{Utiliser deux ou plusieurs formats de sortie}
+Les fonctionnalités décrites ici ont un caractère rudimentaire et sont de nature expérimentale. Elles pourront, selon leur succès, être développées dans les versions ultérieures de la classe tango.
+
+Pour chaque format de sortie, deux commandes particulières sont fournies. Par exemple, dans le cas de l'option \TO{Output=Smartphone}, vous disposez de \verb+\SmartphoneCommand+ et \verb+\XSmartphoneCommand+. L'argument de la commande \verb+\SmartphoneCommand+ n'est pris en compte que si le format de sortie \TO{Smartphone} a été sélectionné. Inversement, l'argument de \verb+\XSmartphoneCommand+ n'est pris en compte que si ce format \emph{n'a pas été} utilisé.
+\begin{example}[Exemples]
+\begin{itemize}
+\item \verb+\SmartphoneCommand{\pagebreak}+ crée un saut de page uniquement pour la sortie smartphone.
+\item \verb+\XSmartphoneCommand{\[<longue formule de maths>\]}+
+\par \verb+\SmartphoneCommand{\begin{multline*}<formule sur plusieurs lignes>\end{multine*}}+
+\par crée une version \TO{multline} (cf. \TO{amsmath}) d'une formule pour la sortie smartphone uniquement.
+\end{itemize}
+\end{example}
+
+Les commandes proposées par tango sont :
+\begin{itemize}
+\item\verb+\AfourCommand+ and \verb+\XAfourCommand+ pour la sortie A4paper;
+\item\verb+\LetterCommand+ and \verb+\XLetterCommand+pour la sortie letter;
+\item\verb+\AfiveCommand+ and \verb+\XAfiveCommand+ pour la sortie A5paper;
+\item\verb+\BigTabletCommand+ and \verb+\XBigTabletCommand+ pour la sortie BigTablet;
+\item\verb+\TabletCommand+ and \verb+\XTabletCommand+ pour la sortie Tablet;
+\item\verb+\SmallTabletCommand+ and \verb+\XSmallTabletCommand+ pour la sortie SmallTablet;
+\item\verb+\eReaderCommand+ and \verb+\XeReaderCommand+ pour la sortie eReader;
+\item\verb+\SmartphoneCommand+ and \verb+\XSmartphoneCommand+ pour la sortie Smartphone.
+\end{itemize}
+\subsection{Tous les thèmes de couleur}
+\indent\par
+\hspace*{0pt}\hfil\showtheme{Blue}\hfil\showtheme{Azur}\hfil\showtheme{Navy}\hfil\showtheme{USAF}\hfil%
+\showtheme{Framboise}\hfil\null
+\par\bigskip\par
+\hspace*{0pt}\hfil\showtheme{Red}\hfil\showtheme{Brique}\hfil\showtheme{Caramel}\hfil\showtheme{Sienne}\hfil\showtheme{Olive}\hfil\null
+\par\bigskip\par
+\hspace*{0pt}\hfil\showtheme{Tannen}\hfil\showtheme{GrayGray}\hfil\showtheme{Steel}\hfil\showtheme{Ink}\hfil\showtheme{BlackAndWhite}\hfil\null
+
+\section{Sélection de la langue}\label{lang}
+Il est impératif de passer une option de langue à babel par l'intermédiaire de la classe tango : cela est vrai même pour les personnes de langue anglaise. Un message d'erreur sera généré par la classe tango si celle-ci n'a reçu aucune option de langue à transmettre à \TO{babel} ; si vous ignorez ce message, vous devrez travailler sans aucun motif de césure.
+
+Tango possède également certains mots réservés qui sont (lorsque l'option french est passée à tango) :
+
+\begin{tcolorbox}
+\begin{verbatim}
+\renewcommand\TgoTheoremName{Théorème}
+\renewcommand\TgoDefinitionName{Définition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemme}
+\renewcommand\TgoCorollaryName{Corollaire}
+\renewcommand\TgoRemarkName{Remarque}
+\renewcommand\TgoExampleName{Exemple}
+\renewcommand\TgoContentsName{Sommaire}
+\renewcommand\TgoExerciseName{Exercice}
+\renewcommand\TgoExercisesSubsectionName{Exercices}
+\renewcommand\TgoExercisesSectionName{Exercices}
+\end{verbatim}
+\end{tcolorbox}
+
+Même si toute option de langue reconnue par babel sera (en principe) prise en compte dès lors qu'elle est passée à tango, la traduction de ces mots réservés n'a lieu que pour les langues suivantes :
+\begin{itemize}
+\item\TO{french};
+\item\TO{english, british, american, canadian, australian, newzealand};
+\item\TO{german, ngerman, naustrian, nswissgerman};
+\item\TO{italian};
+\item\TO{spanish}.
+\end{itemize}
+
+Les autres langues bénéficient des facilités offertes par babel, mais les mots réservés de tango ne sont pas traduits.
+Voici donc ce que peuvent faire les utilisateurs concernés.
+\begin{enumerate}
+\item Utiliser \verb+\renewcommand+ pour faire ces traductions eux-mêmes.
+\item (Mieux) me communiquer par mail toute l'information nécessaire (au moins l'option de langue utilisée pour babel et une traduction des mots réservés) de façon à ce que je puisse procéder aux adaptations nécessaires.
+\end{enumerate}
+
+\section{Théorèmes et énoncés divers}\label{st-section}
+
+\subsection{Éléments prédéfinis}
+Les environnements permettant de saisir les divers énoncés indispensables aux enseignants de mathématiques (définitions, théorèmes, propositions, etc.) sont définis grâce à la commande \verb+\newstatement+ dont la syntaxe est :
+\begin{tcolorbox}
+\begin{verbatim}
+\newstatement{<environnement>}{<compteur>}{<nom-générique-de-l'énoncé>}[<font-command-optionnelle>]
+\end{verbatim}
+\end{tcolorbox}
+Par exemple, les environnements, \TO{thm}, \TO{defin}, \TO{propo}, \TO{coro} et \TO{lem} ont été définis par quelque chose comme :
+\begin{tcolorbox}
+\begin{verbatim}
+\newcounter{thm} \newstatement{thm}{thm}{Théorème}[\itshape]
+\newcounter{defin} \newstatement{defin}{defin}{Définition}
+\newcounter{propo} \newstatement{propo}{propo}{Proposition}[\itshape]
+\newcounter{coro} \newstatement{coro}{coro}{Corollaire}
+\newcounter{lem} \newstatement{lem}{lem}{Lemme}
+\end{verbatim}
+\end{tcolorbox}
+
+Si vous saisissez
+%
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}[pons asinorum]
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+%
+vous obtenez
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}[pons asinorum]
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{thm}
+
+Comme vous pouvez le voir, chaque énoncé défini à l'aide de \verb+\newstatement+ dispose d'un argument optionnel délimité par des crochets (dont le contenu s'affiche entre parenthèses après le nom et le numéro de l'énoncé). Notez également que ces environnements ne devraient pas être utilisés à l'intérieur d'un autre environnement basé sur \TO{list} (comme \TO{center, quote, enumerate, itemize}…).
+
+Pour chaque type d'énoncé défini à l'aide de \verb+\newstatement+ existe également
+\begin{itemize}
+\item une forme étoilée non numérotée:
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{coro*}
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{coro*}
+\end{verbatim}
+\end{tcolorbox}
+\end{itemize}
+\begin{coro*}
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{coro*}
+\begin{itemize}
+\item un premier argument optionnel délimité par \verb+< >+ qui permet de remplacer localement le nom générique de l'énoncé.
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{thm*}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+possède au moins une racine complexe.
+\end{thm*}
+\end{verbatim}
+\end{tcolorbox}
+\end{itemize}
+\begin{thm*}<Théorème de d'Alembert-Gauss>[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes possède au moins une racine complexe.
+\end{thm*}
+
+
+\subsection{Configurer vos propres types énoncés}
+Si vous avez besoin d'un nouveau type d'énoncé, disons un environnement \TO{axm} pour les axiomes, c'est tout simple:
+\begin{tcolorbox}
+\begin{verbatim}
+\newcounter{axio} \newstatement{axm}{axio}{Axiom}
+\end{verbatim}
+\end{tcolorbox}
+Remarquez bien qu'il vous revient alors de définir le compteur utilisé par cet environnement : si ce compteur n'existe pas déjà, il vous faut le créer à l'aide de la commande \verb+\newcounter+. Bien sûr, le nom du compteur peut être différent de celui de l'environnement. Si vous avez utilisé l'option \TO{no-statement}, vous aurez d'ailleurs à définir tous les types d'énoncé dont vous avez besoin, avec des noms et des compteurs de votre choix.
+
+\subsection{Redéfinir des types d'énoncés}
+La commande \verb+\newstatement+ a pour compagnon \verb+\renewstatement+ qui permet de redéfinir l'environnement associé à un type d'énoncé préexistant. Précisément, vous devez employer \verb+\renewstatement{foo}…+ plutôt que \verb+\newstatement{foo}…+ si et seulement si l'environnement \verb+foo+ a déjà été défini.
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Vous pouvez redéfinir l'environnement \TO{propo} de telle façon qu'il utilise le même compteur que l'environnement \TO{thm} avec un contenu affiché en caractères romains:
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement{propo}{thm}{Proposition}
+\setcounter{thm}{0}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+\end{enumerate}
+\renewstatement{propo}{thm}{Proposition}
+\setcounter{thm}{0}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}
+Les angles à la base d'un triangle isocèle sont égaux.
+\end{thm}
+
+\begin{enumerate}[resume]
+\item Si vous venez de terminer la saisie en Latex de \emph{l'intégralité} de votre traité d'algèbre, lequel contient propositions, théorèmes et corollaires, et que vous réalisez maintenant que ce que vous voulez c'est qu'il n'y ait plus de différence entre propositions, théorèmes et corollaires, les trois types d'énoncés devant être composés en italique, se nommer \frquote{proposition} et être numérotés avec le même compteur, vous pouvez simplement saisir dans le préambule:
+
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement{coro}{thm}{Proposition}[\itshape]
+\renewstatement{propo}{thm}{Proposition}[\itshape]
+\renewstatement{thm}{thm}{Proposition}[\itshape]
+\end{verbatim}
+\end{tcolorbox}
+Alors avec
+\begin{tcolorbox}
+\begin{verbatim}
+\setcounter{thm}{0}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}
+La somme de deux entiers pairs est un entier pair.\end{thm}
+\begin{coro}
+Si deux entiers ont la même parité, leur somme est un entier pair.
+\end{coro}
+\end{verbatim}
+\end{tcolorbox}
+vous obtiendrez:
+\end{enumerate}
+\renewstatement{coro}{thm}{Proposition}[\itshape]
+\renewstatement{propo}{thm}{Proposition}[\itshape]
+\renewstatement{thm}{thm}{Proposition}[\itshape]
+\setcounter{thm}{0}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}
+La somme de deux entiers pairs est un entier pair.
+\end{thm}
+\begin{coro}
+Si deux entiers ont la même parité, leur somme est un entier pair.
+\end{coro}
+%
+au lieu de
+%
+\setcounter{thm}{0}\setcounter{propo}{0}
+\renewstatement{thm}{thm}{Théorème}[\itshape]
+\renewstatement{propo}{propo}{Proposition}[\itshape]
+\renewstatement{coro}{coro}{Corollaire}
+\begin{propo}
+La somme de deux entiers impairs est un entier pair.
+\end{propo}
+\begin{thm}
+La somme de deux entiers pairs est un entier pair.
+\end{thm}
+\begin{coro}
+Si deux entiers ont la même parité, leur somme est un entier pair.
+\end{coro}
+\begin{enumerate}[resume]
+\item Pour finir, \verb+\renewstatement+ et \verb+\newstatement+ ont une forme étoilée qui permet d'obtenir un type d'énoncé dont le numéro est affiché avant le nom. Mieux, si le compteur utilisé pour ce type d'énoncé est \TO{subsection} ou \TO{subsubsection}, les titres de ces énoncés sont affichés avec la même apparence et le même placement que les titres de subsection ou de subsubsection; bien sûr ce placement dépend de la valeur de \TO{notitleindent}.
+\begin{tcolorbox}
+\begin{verbatim}
+\renewstatement*{thm}{thm}{Theorème}
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+\renewstatement*{thm}{subsection}{Theorème}[\itshape]
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+\renewstatement*{thm}{subsubsection}{Theorème}
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+\end{verbatim}
+\end{tcolorbox}
+\end{enumerate}
+\end{example}
+\renewstatement*{thm}{thm}{Theorème}
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+\renewstatement*{thm}{subsection}{Theorème}[\itshape]
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+\renewstatement*{thm}{subsubsection}{Theorème}
+\begin{thm}<Théorème de d'Alembert-Gauss>
+[théorème fondamental de l'algèbre]
+Tout polynôme non constant à coefficients complexes
+ possède au moins une racine complexe.
+\end{thm}
+
+
+
+\section{Exercices}
+\subsection{Commandes permettant la mise en forme d'exercices}
+La classe tango fournit la commande \verb+\exo+ qui permet de présenter des énoncés d'exercices numérotés (le compteur est \TO{tgoexo}). Il existe une version étoilée, sans numéro. Comme pour les types d'énoncés, l'argument optionnel entre crochets permet d'obtenir un complément au titre, composé entre parenthèses et la première option, balisée par \frquote{\TO{< >}} permet d'obtenir un titre de substitution.
+\begin{tcolorbox}
+\begin{verbatim}
+\exo
+Démontrer que si $G$ est un groupe fini et $H$ un
+sous-groupe de $G$, l'ordre de $H$ divise l'ordre de $G$.
+\exo[théorème de Lagrange]
+Démontrer que si $G$ est un groupe fini et $H$ un
+sous-groupe de $G$, l'ordre de $H$ divise l'ordre de $G$.
+\end{verbatim}
+\end{tcolorbox}
+\exo
+Démontrer que si $G$ est un groupe fini et $H$ un
+sous-groupe de $G$, l'ordre de $H$ divise l'ordre de $G$.
+\exo[théorème de Lagrange]
+Démontrer que si $G$ est un groupe fini et $H$ un
+sous-groupe de $G$, l'ordre de $H$ divise l'ordre de $G$.
+\begin{tcolorbox}
+\begin{verbatim}
+\newcommand\tgostar{\raisebox{-0.5ex}{\large\textborn}}
+\exo*<Problème des restes chinois>[\tgostar\tgostar\tgostar]
+Soit $n_1,\ldots, n_k$ $k$ entiers strictement supérieurs à $1$. Notons $N$
+le produit des $n_i$. Démontrer que si les $n_i$ sont premiers entre eux deux
+à deux et si $a_1,\ldots, a_k$ sont des entiers quelconques, le système
+\begin{align*}
+x&\equiv a_1 \pmod{n_1}\\
+&\!\vdots\\
+x&\equiv a_k \pmod{n_k}
+\end{align*}
+possède une solution, unique modulo $N$.
+\end{verbatim}
+\end{tcolorbox}
+\newcommand\tgostar{\raisebox{-0.5ex}{\large\textborn}}
+\exo*<Problème des restes chinois>[\tgostar\tgostar\tgostar]
+Soit $n_1,\ldots, n_k$ $k$ entiers strictement supérieurs à $1$. Notons $N$
+le produit des $n_i$. Démontrer que si les $n_i$ sont premiers entre eux deux à deux et si
+$a_1,\ldots, a_k$ sont des entiers quelconques, le système
+\begin{align*}
+x&\equiv a_1 \pmod{n_1}\\
+&\!\vdots\\
+x&\equiv a_k \pmod{n_k}
+\end{align*}
+possède une solution, unique modulo $N$.
+\subsection{Environnements secexo et chapexo}
+Ces deux environnements conçus pour présenter une partie consacrée aux exercices à la fin d'une section (dans le cas de \TO{secexo}) ou d'un chapitre (dans le cas de \TO{chapexo}). À l'intérieur de ces environnements, on utilise en principe la commande \verb+\exo+.
+
+Le titre, en capitales et centré, est \frquote{EXERCICES} par défaut; l'argument optionnel entre crochets vous permet d'en choisir un autre. Ce titre est ajouté à la table des matières ou au sommaire.
+
+Enfin, ces commandes possèdent des formes étoilées (\verb+\begin{secexo*)+…\verb+\end{secexo*}+) qui vous permettront de composer ces parties consacrées aux exercices dans un corps plus petit (excepté si la taille de la fonte principale du document est 9pt).
+
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{secexo*}[Exemple d'une partie consacrée aux exercices]
+\exo Démontrer que la somme de deux entiers pairs est un entier pair.
+\exo Démontrer que la somme de deux entiers impairs est un entier pair.
+\end{secexo*}
+\end{verbatim}
+\end{tcolorbox}
+\begin{secexo*}[Exemple d'une partie consacrée aux exercices]
+\exo Démontrer que la somme de deux entiers pairs est un entier pair.
+\exo Démontrer que la somme de deux entiers impairs est un entier pair.
+\end{secexo*}
+
+\section{Listes}\label{lists}
+\subsection{Principes généraux}
+En ce qui concerne les marges, les déplacements horizontaux dans tango se font par pas multiples entiers de \verb+\TgoStandardMargin+. Au chargement de la classe, la valeur de ce paramètre est fixée à 1.5em, ainsi que les retraits d'alinéas et les retraits subis par les titres (à moins que ces valeurs ne soient fixées à zéro). les marqueurs successifs des environnements itemize et enumerate sont donc positionnés à 1.5em, 3em, 4.5em, etc. de la marge principale. Il n'est pas forcément recommandé de changer cette configuration (si vous souhaitez le faire, il convient d'utiliser le package \TO{enumitem}).
+
+\subsection{Environnements basés sur l'environnement list}
+Il existe deux façons de configurer les listes dans tango. La première, active par défaut, est obtenue grâce à la commande \verb+\tgostandardlists+; la seconde grâce à la commande \verb+\tgosmartlists+.
+%
+Avec \verb+\tgostandardlists+, le texte correspondant à un niveau donné est décalé vers la droite (d'une quantité égale à \verb+\TgoStandardMargin+...) par rapport au marqueur correspondant.
+%
+Avec \verb+\tgosmartlists+, à l'inverse, le texte correspondant à un niveau donné est décalé vers la gauche (d'une quantité égale à \verb+\TgoStandardMargin+...) par rapport au marqueur correspondant.
+\renewtgolabels*\tgostandardlists
+
+Voici le comportement par défaut de l'environnement \TO{itemize} (de ce point de vue \TO{enumerate} n'est pas différent).
+\begin{itemize}
+\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\begin{itemize}
+\item Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\begin{itemize}
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+\begin{itemize}
+\item Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\end{itemize}
+\item Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam.
+\end{itemize}\end{itemize}
+\item Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\end{itemize}
+
+\bigskip
+
+Et maintenant, avec \verb+\tgosmartlists+ \tgosmartlists
+\begin{itemize}
+\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\begin{itemize}
+\item Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\begin{itemize}
+\item Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
+\begin{itemize}
+\item Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla.
+\end{itemize}
+\item Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam.
+\end{itemize}\end{itemize}
+\item Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat.
+\end{itemize}
+
+Notez que \verb+\tgosmartlists+ peut sembler intéressant lorsque l'on utilise essentiellement le premier niveau de ces environnements.
+Dans la mesure où \verb+\tgosmartlists+ supporte assez mal une construction comme
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{enumerate}
+\item\begin{enumerate}\item
+…
+\end{verbatim}
+\end{tcolorbox}
+fréquente dans la numérotation des questions d'exercices,
+les environnements \TO{secexo} et \TO{chapexo} basculent localement vers \verb+\tgostandardlists+. Cela n'est pas le cas de \verb+\exo+ qui, en en tant que commande, n'a pas de contexte propre, contrairement aux environnements. \tgostandardlists
+
+\subsection{Redéfinition de certains marqueurs de liste pour itemize}
+La classe tango fournit la commande \verb+\renewtgolabels+ qui permet de modifier les marqueurs de l'environnement \TO{itemize}. Les arguments des quatre niveaux sont numérotés de 1 à 4 et doivent être utilisés comme ci-dessous.
+
+\begin{example}[Exemples]
+\begin{itemize}
+\item\verb=\renewtgolabels1{\lefthand}= remplace le marqueur du niveau 1 par le symbole \lefthand.
+\renewtgolabels1{\lefthand}
+\item\verb=\renewtgolabels4{\textbullet}1{\openbullet}3{\textemdash}= change les marqueurs des premier, troisième et quatrième niveaux. Le marquer du niveau 2 est inchangé. Comme vous le voyez, l'ordre des arguments est sans importance. \renewtgolabels4{\textbullet}1{\openbullet}3{\textemdash}
+\end{itemize}
+\end{example}
+
+Il existe également une version étoilée, qui restaure l'état initial des marqueurs (tel qu'au chargement de la classe), soit \verb=\textbullet=, \textbullet, pour le niveaul~1, \verb=\textopenbullet=, \textopenbullet, pour le niveau~2, \verb=\starredbullet=, \starredbullet, pour le niveau~3 et \verb=\textperiodcentered=, \textperiodcentered{} pour le niveau~4 (remarquez que ce sont les valeurs par défaut pour tango, mais \emph{non} pour Latex).
+
+\renewtgolabels*
+\begin{example}[Exemples]
+\begin{itemize}
+\item\verb=\renewtgolabels*= restaure toutes les valeurs initiales.
+\item\verb=\renewtgolabels*2{\textendash}= restaure les valeurs initiales, sauf pour le deuxième niveau qui utilisera désormais \textendash.
+\end{itemize}
+\end{example}
+
+
+\section{Autres environnements}
+En plus des environnements définis pour les types d'énoncés, la classe tango offre les quatre environnements suivants.
+
+\subsection{Environnements remark et example}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{remark}
+Voici une excellente remarque.
+\end{remark}
+\begin{example}
+Voici un très court exemple.
+\end{example}
+\end{verbatim}
+\end{tcolorbox}
+\begin{remark}
+Voici une excellente remarque.
+\end{remark}
+\begin{example}
+Voici un très court exemple.
+\end{example}
+
+Ces deux environnements ont un argument optionnel entre crochets qui permet de définir un titre alternatif. Par exemple:
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{example}[Remarques]
+\begin{enumerate}
+\item Une première (et excellente) remarque.
+\item Une seconde remarque (encore meilleure, si cela est possible).
+\end{enumerate}
+\end{example}
+\end{verbatim}
+\end{tcolorbox}
+\begin{example}[Remarques]
+\begin{enumerate}
+\item Une première (et excellente) remarque.
+\item Une seconde remarque (encore meilleure, si cela est possible).
+\end{enumerate}
+\end{example}
+
+\subsection{Environnement alert}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{alert}
+Vous ne devriez pas envisager d'utiliser
+\verb+\expandafter\expandafter\expandafter+
+à moins que vous ne soyez un utilisateur expérimenté de
+\TeX{}, car vous pourriez attraper une terrible migraine.
+\end{alert}
+\end{verbatim}
+\end{tcolorbox}
+\begin{alert}
+Vous ne devriez pas envisager d'utiliser \verb+\expandafter\expandafter\expandafter+
+à moins que vous ne soyez un utilisateur expérimenté de \TeX{}, car vous pourriez attraper une terrible migraine.
+\end{alert}
+
+L'environnement \TO{alert} propose lui aussi un argument optionnel entre crochets.
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{alert}[\bomb]
+Vous ne devriez pas envisager d'utiliser
+\verb+\expandafter\expandafter\expandafter+
+à moins que vous ne soyez un utilisateur expérimenté de
+\TeX{}, car vous pourriez attraper une terrible migraine.
+\end{alert}
+\end{verbatim}
+\end{tcolorbox}
+\begin{alert}[\bomb]
+Vous ne devriez pas envisager d'utiliser
+\verb+\expandafter\expandafter\expandafter+
+à moins que vous ne soyez un utilisateur expérimenté de
+\TeX{}, car vous pourriez attraper une terrible migraine.
+\end{alert}
+
+\subsection{Environnement proof}
+L'environnement \TO{proof} est une adaptation de ce que fournit le package \TO{amsthm}. Un titre alternatif est rendu possible grâce à l'argument optionnel entre crochets. La commande \verb+\qedhere+ est également utilisable.
+\renewstatement{thm}{thm}{Théorème}[\itshape]
+\setcounter{thm}{0}
+\begin{tcolorbox}
+\begin{verbatim}
+\begin{thm}
+La somme de deux entiers impairs est un entier pair.
+\end{thm}
+\begin{proof}
+Soit $p$ et $q$ deux entiers impairs. Nous devons
+établir qu'il existe un entier $n$ tel que $p+q=2n$.
+Nous connaissons l'existence d'un entier $p_1$
+et d'un entier $q_1$ tels que
+\[p=2p_1+1\text{ et } q=2q_1+1,\]
+par conséquent
+\begin{align*}p+q&=(2p_1+1)+(2q_1+1)\\
+&=2\underbrace{(p_1+q_1+1)}_{n}\qedhere
+\end{align*}
+\end{proof}
+\end{verbatim}
+\end{tcolorbox}
+\begin{thm}
+La somme de deux entiers impairs est un entier pair.
+\end{thm}
+\begin{proof}
+Soit $p$ et $q$ deux entiers impairs. Nous devons
+établir qu'il existe un entier $n$ tel que $p+q=2n$.
+Nous connaissons l'existence d'un entier $p_1$
+et d'un entier $q_1$ tels que
+\[p=2p_1+1\text{ et } q=2q_1+1,\]
+par conséquent
+\begin{align*}p+q&=(2p_1+1)+(2q_1+1)\\
+&=2\underbrace{(p_1+q_1+1)}_{n}\qedhere
+\end{align*}
+\end{proof}
+
+\section{Figures, tableaux, flottants et légendes}\label{figtable}
+Grâce au package \TO{caption}, les commandes suivantes ont été définies:
+\begin{itemize}
+\item\verb+\tgofigcaption+ (pour les figures);
+\item and \verb+\tgotabcaption+ (pour les tableaux).
+\end{itemize}
+Ces deux commandes permettent d'obtenir des légendes de même apparence que ce que ferait la commande \verb+\caption+, mais fonctionnent également dans le cas d'objets non flottants.
+
+Ainsi il devient possible d'inclure des tableaux et des figures en position fixe, sans que rien ne permette de les distinguer des objets flottants (dont l'usage reste recommandé dans la plupart des cas).
+
+\end{document}
diff --git a/macros/luatex/latex/tango/examples/Ch-1-15.tex b/macros/luatex/latex/tango/examples/Ch-1-15.tex
new file mode 100644
index 0000000000..4f3d7984d1
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/Ch-1-15.tex
@@ -0,0 +1,1312 @@
+\chapter[Comment \bname{Candide} fut élevé…]
+{Comment \bname{Candide} fut élevé dans un\\ beau château,\\ et comment il fut
+chassé d’icelui}
+
+
+\lettrine{I}{l y avait} en \bname{Westphalie}, dans le château de M.~le baron de
+Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné les
+mœurs les plus douces. Sa physionomie annonçait son âme. Il avait le
+jugement assez droit, avec l’esprit le plus simple; c’est, je crois,
+pour cette raison qu’on le nommait \bname{Candide}. Les anciens domestiques de
+la maison soupçonnaient qu’il était fils de la sœur de M.~le
+baron et d’un bon et honnête gentilhomme du voisinage, que cette
+demoiselle ne voulut jamais épouser parce qu’il n’avait pu prouver que
+soixante et onze quartiers, et que le reste de son arbre généalogique
+avait été perdu par l’injure du temps.
+
+M. le baron était un des plus puissants seigneurs de la
+\bname{Westphalie}, car son château avait une porte et des fenêtres. Sa grande
+salle même était ornée d’une tapisserie. Tous les chiens de ses
+basses-cours composaient une meute dans le besoin; ses palefreniers
+étaient ses piqueurs; le vicaire du village était son grand-aumônier.
+Ils l’appelaient tous \bname{Monseigneur}, et ils riaient quand il faisait des
+contes.
+
+M\up{me} la baronne, qui pesait environ trois cent cinquante livres,
+s’attirait par là une très grande considération, et faisait les honneurs
+de la maison avec une dignité qui la rendait encore plus respectable.
+Sa fille \bname{Cunégonde}, âgée de dix-sept ans, était haute en couleur,
+fraîche, grasse, appétissante. Le fils du baron paraissait en tout
+digne de son père. Le précepteur \bname{Pangloss} était l’oracle de la
+maison, et le petit \bname{Candide} écoutait ses leçons avec toute la bonne foi
+de son âge et de son caractère.
+
+
+
+
+\bname{Pangloss} enseignait la métaphysico-théologo-cosmo\-lo\-ni\-go\-logie. Il
+prouvait admirablement qu’il n’y a point d’effet sans cause, et que,
+dans ce meilleur des mondes possibles, le château de monseigneur le
+baron était le plus beau des châteaux, et madame la meilleure des
+baronnes possibles.
+
+
+
+\frquote{Il est démontré, disait-il, que les choses ne peuvent être autrement;
+car tout étant fait pour une fin, tout est nécessairement pour la
+meilleure fin. Remarquez bien que les nez ont été faits pour porter des
+lunettes; aussi avons-nous des lunettes. Les jambes sont visiblement
+instituées pour être chaussées, et nous avons des chausses. Les pierres
+ont été formées pour être taillées et pour en faire des châteaux; aussi
+monseigneur a un très beau château: le plus grand baron de la province
+doit être le mieux logé; et les cochons étant faits pour être mangés,
+nous mangeons du porc toute l’année: par conséquent, ceux qui ont
+avancé que tout est bien ont dit une sottise; il fallait dire que tout
+est au mieux.}
+
+
+
+\bname{Candide} écoutait attentivement, et croyait innocemment; car il trouvait
+M\up{lle}~\bname{Cunégonde} extrêmement belle, quoiqu’il ne prît jamais la
+hardiesse de le lui dire. Il concluait qu’après le bonheur d’être né
+baron de Thunder-ten-tronckh, le second degré de bonheur était d’être
+M\up{lle}~\bname{Cunégonde}; le troisième, de la voir tous les jours; et le
+quatrième, d’entendre maître \bname{Pangloss}, le plus grand philosophe de la
+province, et par conséquent de toute la terre.
+
+
+Un jour \bname{Cunégonde}, en se promenant auprès du château, dans le petit
+bois qu’on appelait \emph{parc}, vit entre des broussailes le docteur
+\bname{Pangloss} qui donnait une leçon de physique expérimentale à la femme de
+chambre de sa mère, petite brune très jolie et très docile. Comme
+M\up{lle}~\bname{Cunégonde} avait beaucoup de dispositions pour les sciences,
+elle observa, sans souffler, les expériences réitérées dont elle fut
+témoin; elle vit clairement la raison suffisante du docteur, les effets
+et les causes, et s’en retourna tout agitée, toute pensive, toute
+remplie du désir d’être savante, songeant qu’elle pourrait bien être la
+raison suffisante du jeune \bname{Candide},\linebreak qui pouvait aussi être la sienne.
+
+Elle rencontra \bname{Candide} en revenant au château, et rougit: \bname{Candide}
+rougit aussi. Elle lui dit bonjour d’une voix entrecoupée; et \bname{Candide}
+lui parla sans savoir ce qu’il disait. Le lendemain, après le dîner,
+comme on sortait de table, \bname{Cunégonde} et \bname{Candide} se trouvèrent derrière
+un paravent; \bname{Cunégonde} laissa tomber son mouchoir, \bname{Candide} le ramassa;
+elle lui prit innocemment la main; le jeune homme baisa innocemment la
+main de la jeune demoiselle avec une vivacité, une sensibilité, une
+grâce toute particulière; leurs bouches se rencontrèrent, leurs yeux
+s’enflammèrent, leurs genoux tremblèrent, leurs mains s’égarèrent.
+M.~le baron de Thunder-ten-tronckh passa auprès du paravent, et voyant
+cette cause et cet effet, chassa \bname{Candide} du château à grands coups de
+pied dans le derrière. \bname{Cunégonde} s’évanouit: elle fut souffletée par
+M\up{me}~la baronne dès qu’elle fut revenue à elle-même; et tout fut
+consterné dans le plus beau et le plus agréable des châteaux possibles.
+
+
+
+
+\chapter{Ce que devint \bname{Candide} parmi les Bulgares}
+
+
+\lettrine{C}{andide}, chassé du paradis terrestre, marcha longtemps sans savoir où,
+pleurant, levant les yeux au ciel, les tournant souvent vers le plus
+beau des châteaux qui renfermait la plus belle des baronnettes; il se
+coucha sans souper au milieu des champs entre deux sillons; la neige
+tombait à gros flocons. \bname{Candide}, tout transi, se traîna le lendemain
+vers la ville voisine, qui s’appelle Valdberghoff-trarbk-dikdorff,
+n’ayant point d’argent, mourant de faim et de lassitude. Il s’arrêta
+tristement à la porte d’un cabaret. Deux hommes habillés de bleu le
+remarquèrent: «Camarade, dit l’un, voilà un jeune homme très bien fait,
+et qui a la taille requise.» Ils s’avancèrent vers \bname{Candide} et le
+prièrent à dîner très civilement. «Messieurs, leur dit \bname{Candide} avec une
+modestie charmante, vous me faites beaucoup d’honneur, mais je n’ai pas
+de quoi payer mon écot. — Ah! monsieur, lui dit un des bleus, les
+personnes de votre figure et de votre mérite ne paient jamais rien:
+n’avez-vous pas cinq pieds cinq pouces de haut? — Oui, messieurs, c’est
+ma taille, dit-il en faisant la révérence. — Ah! monsieur, mettez-vous à
+table; non seulement nous vous défraierons, mais nous ne souffrirons
+jamais qu’un homme comme vous manque d’argent; les hommes ne sont faits
+que pour se secourir les uns les autres. — Vous avez raison, dit \bname{Candide};
+c’est ce que M. \bname{Pangloss} m’a toujours dit, et je vois bien que tout est
+au mieux.» On le prie d’accepter quelques écus, il les prend et veut
+faire son billet; on n’en veut point, on se met à table. «N’aimez-vous
+pas tendrement?… — Oh! oui, répond-il, j’aime tendrement M\up{lle}~\bname{Cunégonde}. — Non, dit l’un de ces messieurs, nous vous demandons si vous
+n’aimez pas tendrement le roi des Bulgares? — Point du tout, dit-il, car
+je ne l’ai jamais vu. — Comment! c’est le plus charmant des rois, et il
+faut boire à sa santé. — Oh! très volontiers, messieurs.» Et il boit. «C’en
+est assez, lui dit-on, vous voilà l’appui, le soutien, le défenseur, le
+héros des Bulgares; votre fortune est faite, et votre gloire est
+assurée.» On lui met sur-le-champ les fers aux pieds, et on le mène au
+régiment. On le fait tourner à droite, à gauche, hausser la baguette,
+remettre la baguette, coucher en joue, tirer, doubler le pas, et on lui
+donne trente coups de bâton; le lendemain, il fait l’exercice un peu
+moins mal, et il ne reçoit que vingt coups; le surlendemain, on ne lui
+en donne que dix, et il est regardé par ses camarades comme un prodige.
+
+
+\bname{Candide}, tout stupéfait, ne démêlait pas encore trop bien comment il
+était un héros. Il s’avisa un beau jour de printemps de s’aller
+promener, marchant tout droit devant lui, croyant que c’était un
+privilège de l’espèce humaine, comme de l’espèce animale, de se servir
+de ses jambes à son plaisir. Il n’eut pas fait deux lieues que voilà
+quatre autres héros de six pieds qui l’atteignent, qui le lient, qui le
+mènent dans un cachot. On lui demanda juridiquement ce qu’il aimait le
+mieux d’être fustigé trente-six fois par tout le régiment, ou de
+recevoir à-la-fois douze balles de plomb dans la cervelle. Il eut beau
+dire que les volontés sont libres, et qu’il ne voulait ni l’un ni
+l’autre, il fallut faire un choix; il se détermina, en vertu du don de
+Dieu qu’on nomme \textit{liberté}, à passer trente-six fois par les baguettes;
+il essuya deux promenades. Le régiment était composé de deux mille
+hommes; cela lui composa quatre mille coups de baguette, qui, depuis la
+nuque du cou jusqu’au cul, lui découvrirent les muscles et les nerfs.
+Comme on allait procéder à la troisième course, \bname{Candide}, n’en pouvant
+plus, demanda en grâce qu’on voulût bien avoir la bonté de lui casser
+la tête; il obtint cette faveur; on lui bande les yeux; on le fait
+mettre à genoux. Le roi des Bulgares passe dans ce moment, s’informe du
+crime du patient; et comme ce roi avait un grand génie, il comprit, par
+tout ce qu’il apprit de \bname{Candide}, que c’était un jeune métaphysicien
+fort ignorant des choses de ce monde, et il lui accorda sa grâce avec
+une clémence qui sera louée dans tous les journaux et dans tous les
+siècles. Un brave chirurgien guérit \bname{Candide} en trois semaines avec les
+émollients enseignés par \bname{Dioscoride}. Il avait déjà un peu de peau et
+pouvait marcher, quand le roi des Bulgares livra bataille au roi des
+Abares.
+
+
+
+\chapter[Comment \bname{Candide} se sauva…]{Comment \bname{Candide} se sauva d’entre\\ les Bulgares, et ce qu’il devint}
+
+
+\lettrine{R}{ien} n’était si beau, si leste, si brillant, si bien ordonné que les
+deux armées. Les trompettes, les fifres, les hautbois, les tambours,
+les canons, formaient une harmonie telle qu’il n’y en eut jamais en
+enfer. Les canons renversèrent d’abord à peu près six mille hommes de
+chaque côté; ensuite la mousqueterie ôta du meilleur des mondes environ
+neuf à dix mille coquins qui en infectaient la surface. La baïonnette
+fut aussi la raison suffisante de la mort de quelques milliers
+d’hommes. Le tout pouvait bien se monter à une trentaine de mille âmes.
+\bname{Candide}, qui tremblait comme un philosophe, se cacha du mieux qu’il put
+pendant cette boucherie héroïque.
+
+Enfin, tandis que les deux rois faisaient chanter des \textit{Te Deum}, chacun
+dans son camp, il prit le parti d’aller raisonner ailleurs des effets
+et des causes. Il passa par-dessus des tas de morts et de mourants, et
+gagna d’abord un village voisin; il était en cendres: c’était un
+village abare que les Bulgares avaient brûlé, selon les lois du droit
+public. Ici des vieillards criblés de coups regardaient mourir leurs
+femmes égorgées, qui tenaient leurs enfants à leurs mamelles
+sanglantes; là des filles éventrées après avoir assouvi les besoins
+naturels de quelques héros, rendaient les derniers soupirs; d’autres à
+demi brûlées criaient qu’on achevât de leur donner la mort. Des
+cervelles étaient répandues sur la terre à côté de bras et de jambes
+\bname{coupés}.
+
+\bname{Candide} s’enfuit au plus vite dans un autre village: il appartenait à
+des Bulgares, et les héros abares l’avaient traité de même. \bname{Candide},
+toujours marchant sur des membres palpitants ou à travers des ruines,
+arriva enfin hors du théâtre de la guerre, portant quelques petites
+provisions dans son bissac, et n’oubliant jamais M\up{lle}~\bname{Cunégonde}. Ses provisions lui manquèrent quand il fut en \bname{Hollande}; mais
+ayant entendu dire que tout le monde était riche dans ce pays-là, et
+qu’on y était chrétien, il ne douta pas qu’on ne le traitât aussi bien
+qu’il l’avait été dans le château de M.~le baron, avant qu’il en eût
+été chassé pour les beaux yeux de M\up{lle}~\bname{Cunégonde}.
+
+Il demanda l’aumône à plusieurs graves personnages, qui lui répondirent
+tous que, s’il continuait à faire ce métier, on l’enfermerait dans une
+maison de correction pour lui apprendre à vivre.
+
+Il s’adressa ensuite à un homme qui venait de parler tout seul une
+heure de suite sur la charité dans une grande assemblée. Cet orateur le
+regardant de travers lui dit: «Que venez-vous faire ici? y êtes-vous
+pour la bonne cause? — Il n’y a point d’effet sans cause, répondit
+modestement \bname{Candide}; tout est enchaîné nécessairement et arrangé pour
+le mieux. Il a fallu que je fusse chassé d’auprès de M\up{lle}~\bname{Cunégonde}, que j’aie passé par les baguettes, et il faut que je demande
+mon pain, jusqu’à ce que je puisse en gagner; tout cela ne pouvait être
+autrement. — Mon ami, lui dit l’orateur, croyez-vous que le pape soit
+l’antechrist? — Je ne l’avais pas encore entendu dire, répondit \bname{Candide}:
+mais qu’il le soit, ou qu’il ne le soit pas, je manque de pain. — Tu ne
+mérites pas d’en manger, dit l’autre: va, coquin, va, misérable, ne
+m’approche de ta vie.» La femme de l’orateur ayant mis la tête à la
+fenêtre, et avisant un homme qui doutait que le pape fût antechrist,
+lui répandit sur le chef un plein… Ô ciel! à quel excès se porte le
+zèle de la religion dans les dames!
+
+Un homme qui n’avait point été baptisé, un bon anabaptiste, nommé
+Jacques, vit la manière cruelle et
+ignominieuse dont on traitait ainsi
+un de ses frères, un être à deux pieds sans plumes, qui avait une âme;
+il l’amena chez lui, le nettoya, lui donna du pain et de la bière, lui
+fit présent de deux florins, et voulut même lui apprendre à travailler
+dans ses manufactures aux étoffes de Perse qu’on fabrique en \bname{Hollande}.
+\bname{Candide} se prosternant presque devant lui, s’écriait: «Maître \bname{Pangloss}
+me l’avait bien dit que tout est au mieux dans ce monde, car je suis
+infiniment plus touché de votre extrême générosité que de la dureté de
+ce monsieur à manteau noir, et de madame son épouse.»
+
+Le lendemain, en se promenant, il rencontra un gueux tout couvert de
+pustules, les yeux morts, le bout du nez rongé, la bouche de travers,
+les dents noires, et parlant de la gorge, tourmenté d’une toux
+violente, et crachant une dent à chaque effort.
+
+
+
+
+
+\chapter[Comment \bname{Candide} rencontra…]{Comment \bname{Candide} rencontra son ancien maître de\\ philosophie, le docteur
+\bname{Pangloss}, et ce qui en advint}
+
+
+\lettrine{C}{andide}, plus ému encore de compassion que d’horreur, donna à cet
+épouvantable gueux les deux florins qu’il avait reçus de son honnête
+anabaptiste Jacques. \textls[-10]{Le fantôme le regarda fixement, versa des larmes,
+et sauta à son cou. \bname{Candide} effrayé recule. «Hélas! dit le misérable à
+l’autre misérable, ne reconnaissez-vous plus votre cher \bname{Pangloss}?
+— Qu’entends-je? vous, mon cher maître! vous, dans cet état horrible!
+Quel malheur vous est-il donc arrivé? Pourquoi n’êtes-vous plus dans le
+plus beau des châteaux? qu’est devenue M\up{lle}~\bname{Cunégonde}, la perle
+des filles, le chef-d’œuvre de la nature? — Je n’en peux plus, dit
+\bname{Pangloss}.» Aussitôt \bname{Candide} le mena dans l’étable de l’anabaptiste, où
+il lui fit manger un peu de pain; et quand \bname{Pangloss} fut refait: «Eh
+bien! lui dit-il, \bname{Cunégonde}? — Elle est morte, reprit l’autre.»} \bname{Candide}
+s’évanouit à ce mot: son ami rappela ses sens avec un peu de mauvais
+vinaigre qui se trouva par hasard dans l’étable. \bname{Candide} rouvre les
+yeux. «\bname{Cunégonde} est morte! Ah! meilleur des mondes, où êtes-vous? Mais
+de quelle maladie est-elle morte? ne serait-ce point de m’avoir vu
+chasser du beau château de monsieur son père à grands coups de pied?
+— Non, dit \bname{Pangloss}, elle a été éventrée par des soldats bulgares, après
+avoir été violée autant qu’on peut l’être; ils ont cassé la tête à
+M. le baron qui voulait la défendre; M\up{me}~la baronne a été
+coupée en morceaux; mon pauvre pupille traité précisément comme sa
+sœur; et quant au château, il n’est pas resté pierre sur pierre, pas
+une grange, pas un mouton, pas un canard, pas un arbre; mais nous avons
+été bien vengés, car les Abares en ont fait autant dans une baronnie
+voisine qui appartenait à un seigneur bulgare.»
+
+À ce discours, \bname{Candide} s’évanouit encore; mais revenu à soi, et ayant
+dit tout ce qu’il devait dire, il s’enquit de la cause et de l’effet,
+et de la raison suffisante qui avait mis \bname{Pangloss} dans un si piteux
+état. «Hélas! dit l’autre, c’est l’amour: l’amour, le consolateur du
+genre humain, le conservateur de l’univers, l’âme de tous les êtres
+sensibles, le tendre amour. — Hélas! dit \bname{Candide}, je l’ai connu cet
+amour, ce souverain des cœurs, cette âme de notre âme; il ne m’a
+jamais valu qu’un baiser et vingt coups de pied au cul. Comment cette
+belle cause a-t-elle pu produire en vous un effet si abominable?»
+
+\bname{Pangloss} répondit en ces termes: «Ô mon cher \bname{Candide}! vous avez connu
+\bname{Paquette}, cette jolie suivante de notre auguste baronne: j’ai goûté
+dans ses bras les délices du paradis, qui ont produit ces tourments
+d’enfer dont vous me voyez dévoré; elle en était infectée, elle en est
+peut-être morte. \bname{Paquette} tenait ce présent d’un cordelier très savant
+qui avait remonté à la source, car il l’avait eu d’une vieille
+comtesse, qui l’avait reçu d’un capitaine de cavalerie, qui le devait à
+une marquise, qui le tenait d’un page, qui l’avait reçu d’un jésuite,
+qui, étant novice, l’avait eu en droite ligne d’un des compagnons de
+Christophe Colomb. Pour moi, je ne le donnerai à personne, car je me
+meurs.
+
+
+— Ô \bname{Pangloss}! s’écria \bname{Candide}, voilà une étrange généalogie! n’est-ce pas
+le diable qui en fut la souche? — Point du tout, répliqua ce grand homme;
+c’était une chose indispensable dans le meilleur des mondes, un
+ingrédient nécessaire; car si \bname{Colomb} n’avait pas attrapé dans une île
+de \mbox{l’Amérique} cette maladie qui empoisonne la source de la
+génération,
+ qui souvent même empêche la génération, et qui est
+évidemment l’opposé du grand but de la nature, nous n’aurions ni le
+chocolat ni la cochenille; il faut encore observer que
+jusqu’aujourd’hui, dans notre continent, cette maladie nous est
+particulière, comme la controverse. Les \bname{Turcs}, les \bname{Indiens}, les
+\bname{Persans}, les \bname{Chinois}, les \bname{Siamois}, les \bname{Japonais}, ne la connaissent pas
+encore; mais il y a une raison suffisante pour qu’ils la connaissent à
+leur tour dans quelques siècles. En attendant elle a fait un
+merveilleux progrès parmi nous, et surtout dans ces grandes armées
+composées d’honnêtes stipendiaires bien élevés, qui décident du destin
+des états; on peut assurer que, quand trente mille hommes combattent en
+bataille rangée contre des troupes égales en nombre, il y a environ
+vingt mille vérolés de chaque côté.
+
+— Voilà qui est admirable, dit \bname{Candide}; mais il faut vous faire guérir.
+— Et comment le puis-je? dit \bname{Pangloss}; je n’ai pas le sou, mon ami, et
+dans toute l’étendue de ce globe on ne peut ni se faire saigner, ni
+prendre un lavement sans payer, ou sans qu’il y ait quelqu’un qui paie
+pour nous.»
+
+\looseness=-1
+Ce dernier discours détermina \bname{Candide}; il alla se jeter aux pieds de
+son charitable anabaptiste Jacques, et lui fit une peinture si
+touchante de l’état où son ami était réduit, que le bonhomme n’hésita
+pas à recueillir le docteur \bname{Pangloss}; il le fit guérir à ses dépens.
+\bname{Pangloss}, dans la cure, ne perdit qu’un œil et une oreille. Il
+écrivait bien, et savait parfaitement l’arithmétique. L’anabaptiste
+Jacques en fit son teneur de livres. Au bout de deux mois, étant obligé
+d’aller à \bname{Lisbonne} pour les affaires de son commerce, il mena dans son
+vaisseau ses deux philosophes. \bname{Pangloss} lui expliqua comment tout était
+on ne peut mieux. Jacques n’était pas de cet avis. «Il faut bien,
+disait-il, que les hommes aient un peu corrompu la nature, car ils ne
+sont point nés loups, et ils sont devenus loups. Dieu ne leur a donné
+ni canons de vingt-quatre, ni baïonnettes, et ils se sont fait des
+baïonnettes et des canons pour se détruire. Je pourrais mettre en ligne
+de compte les banqueroutes, et la justice qui s’empare des biens des
+banqueroutiers pour en frustrer les créanciers. — Tout cela était
+indispensable, répliquait le docteur borgne, et les malheurs
+particuliers font le bien général; de sorte que plus il y a de malheurs
+particuliers, et plus tout est bien.» Tandis qu’il raisonnait, l’air
+s’obscurcit, les vents soufflèrent des quatre coins du monde, et le
+vaisseau fut assailli de la plus horrible tempête, à la vue du port de
+\bname{Lisbonne}.
+
+
+
+
+
+\chapter[Tempête, naufrage, tremblement de terre…]{Tempête, naufrage, tremblement de terre,\\et ce qui advint du docteur
+\bname{Pangloss}, de \bname{Candide},\\et de l’anabaptiste Jacques}
+
+
+\lettrine[findent=-3pt,nindent=0.6em]{L}{a moitié}
+des passagers affaiblis, expirants de ces angoisses
+inconcevables que le roulis d’un vaisseau porte dans les nerfs et dans
+toutes les humeurs du corps agitées en sens contraires, n’avait pas
+même la force de s’inquiéter du danger. L’autre moitié jetait des cris
+et faisait des prières; les voiles étaient déchirées, les mâts brisés,
+le vaisseau entr’ouvert. Travaillait qui pouvait, personne ne
+s’entendait, personne ne commandait. L’anabaptiste aidait un peu à la
+manœuvre; il était sur le tillac; un matelot furieux le frappe
+rudement et l’étend sur les planches; mais du coup qu’il lui donna, il
+eut lui-même une si violente secousse, qu’il tomba hors du vaisseau, la
+tête la première. Il restait suspendu et accroché à une partie de mât
+rompu. Le bon Jacques court à son secours, l’aide à remonter, et de
+l’effort qu’il fait, il est précipité dans la mer à la vue du matelot,
+qui le laissa périr sans daigner seulement le regarder. \bname{Candide}
+approche, voit son bienfaiteur qui reparaît un moment, et qui est
+englouti pour jamais. Il veut se jeter après lui dans la mer: le
+philosophe \bname{Pangloss} l’en empêche, en lui prouvant que la rade de
+\bname{\bname{Lisbonne}} avait été formée exprès pour que cet anabaptiste s’y noyât.
+Tandis qu’il le prouvait \textit{a priori}, le vaisseau s’entr’ouvre, tout
+périt à la réserve de \bname{Pangloss}, de \bname{Candide}, et de ce brutal de
+matelot
+qui avait noyé le vertueux anabaptiste; le coquin nagea heureusement
+jusqu’au rivage, où \bname{Pangloss} et \bname{Candide} furent portés sur une planche.
+
+Quand ils furent revenus un peu à eux, ils marchèrent vers \bname{Lisbonne}; il
+leur restait quelque argent, avec lequel ils espéraient se sauver de la
+faim après avoir échappé à la \bname{tempête}.
+
+
+À peine ont-ils mis le pied dans la ville, en pleurant la mort de leur
+bienfaiteur, qu’ils sentent la terre trembler sous leurs pas; la mer
+s’élève en bouillonnant dans le port, et brise les vaisseaux qui sont à
+l’ancre. Des tourbillons de flammes et de cendres couvrent les rues et
+les places publiques; les maisons s’écroulent, les toits sont renversés
+sur les fondements, et les fondements se dispersent; trente mille
+habitants de tout âge et de tout sexe sont écrasés sous des ruines. Le
+matelot disait en sifflant et en jurant: «Il y aura quelque chose à
+gagner ici. — Quelle peut être la raison suffisante de ce phénomène?
+disait \bname{Pangloss}. — Voici le dernier jour du monde!» s’écriait \bname{Candide}. Le matelot court incontinent au milieu des débris, affronte la mort pour
+trouver de l’argent, en trouve, s’en empare, s’enivre, et ayant cuvé
+son vin, achète les faveurs de la première fille de bonne volonté qu’il
+rencontre sur les ruines des maisons détruites, et au milieu des
+mourants et des morts. \bname{Pangloss} le tirait cependant par la manche: «Mon
+ami, lui disait-il, cela n’est pas bien, vous manquez à la raison
+universelle, vous prenez mal votre temps. — Tête et sang, répondit
+l’autre, je suis matelot et né à Batavia; j’ai marché quatre fois sur
+le crucifix dans quatre voyages au Japon; tu as bien trouvé ton
+homme avec ta \linebreak raison universelle!»
+
+
+Quelques éclats de pierre avaient blessé \bname{Candide}; il était étendu dans
+la rue et couvert de débris. Il disait à \bname{Pangloss}: «Hélas! procure-moi
+un peu de vin et d’huile; je me meurs. — Ce tremblement de terre n’est
+pas une chose nouvelle, répondit \bname{Pangloss}; la ville de Lima éprouva les
+mêmes secousses en Amérique l’année passée; mêmes causes, mêmes effets;
+il y a certainement une traînée de soufre sous terre depuis Lima
+jusqu’à \bname{Lisbonne}. — Rien n’est plus probable, dit \bname{Candide}; mais, pour
+Dieu, un peu d’huile et de vin. — Comment probable? répliqua le
+philosophe, je soutiens que la chose est démontrée.» \bname{Candide} perdit
+connaissance, et \bname{Pangloss} lui apporta un peu d’eau d’une fontaine
+voisine.
+
+\textls[-10]{Le lendemain, ayant trouvé quelques provisions de bouche en se glissant
+à travers des décombres,} ils réparèrent un peu leurs forces. Ensuite
+ils travaillèrent comme les autres à soulager les habitants échappés à
+la mort. Quelques citoyens, secourus par eux, leur donnèrent un aussi
+bon dîner qu’on le pouvait dans un tel désastre: il est vrai que le
+repas était triste; les convives arrosaient leur pain de leurs larmes;
+mais \bname{Pangloss} les consola, en les assurant que les choses ne pouvaient
+être autrement: «Car, dit-il, tout ceci est ce qu’il y a de mieux; car
+s’il y a un volcan à \bname{Lisbonne}, il ne pouvait être ailleurs; car il est
+impossible que les choses ne soient pas où elles sont, car tout est
+bien.»
+
+
+Un petit homme noir, familier de l’inquisition, lequel était à côté de
+lui, prit poliment la parole et dit: «Apparemment que monsieur ne croit
+pas au péché originel; car si tout est au mieux, il n’y a donc eu ni
+chute ni punition.
+
+— Je demande très humblement pardon à votre excellence, répondit \bname{Pangloss}
+encore plus poliment, car la chute de l’homme et la malédiction
+entraient nécessairement dans le meilleur des mondes possibles.
+— \bname{Monsieur} ne croit donc pas à la liberté? dit le familier. — Votre
+excellence m’excusera, dit \bname{Pangloss}; la liberté peut subsister avec la
+nécessité absolue; car il était nécessaire que nous fussions libres;
+car enfin la volonté déterminée…» \bname{Pangloss} était au milieu de sa
+phrase, quand le familier fit un signe de tête à son estafier qui lui
+servait à boire du vin de Porto ou d’Oporto.
+
+
+
+
+
+\chapter[Comment on fit un bel auto-da-fé…]{Comment on fit un bel auto-da-fé pour empêcher les\\tremblements de
+terre, et comment \bname{Candide} fut fessé}
+
+
+\lettrine{A}{près} le tremblement de terre qui avait détruit les trois quarts de
+\bname{Lisbonne}, les sages du pays n’avaient pas trouvé un moyen plus efficace
+pour prévenir une ruine totale que de donner au peuple un bel
+auto-da-fé; il était décidé par l’université de Coïmbre que le
+spectacle de quelques personnes brûlées à petit feu, en grande
+cérémonie, est un secret infaillible pour empêcher la terre de
+trembler.
+
+On avait en conséquence saisi un Biscayen convaincu d’avoir épousé sa
+commère, et deux Portugais qui en mangeant un poulet en avaient arraché
+le lard: on vint lier après le dîner le docteur \bname{Pangloss} et son
+disciple \bname{Candide}, l’un pour avoir parlé, et l’autre pour l’avoir écouté
+avec un air d’approbation: tous deux furent menés séparément dans des
+appartements d’une extrême fraîcheur, dans lesquels on n’était jamais
+incommodé du soleil: huit jours après ils furent tous deux
+revêtus d’un
+\emph{san-benito}, et on orna leurs têtes de mitres de papier: la mitre et le
+san-benito de \bname{Candide} étaient peints de flammes renversées, et de
+diables qui n’avaient ni queues ni griffes; mais les diables de
+\bname{Pangloss} portaient griffes et queues, et les flammes étaient droites.
+Ils marchèrent en procession ainsi vêtus, et entendirent un sermon très
+pathétique, suivi d’une belle musique en faux-bourdon. \bname{Candide} fut
+fessé en cadence, pendant qu’on chantait; le Biscayen et les deux
+hommes qui n’avaient point voulu manger de lard furent
+brûlés, et
+\bname{Pangloss} fut pendu, quoique ce ne soit pas la coutume. Le même jour la
+terre trembla de nouveau avec un fracas épouvantable.
+
+\bname{Candide} épouvanté, interdit, éperdu, tout sanglant, tout palpitant, se
+disait à lui-même: «Si c’est ici le meilleur des mondes possibles, que
+sont donc les autres? passe encore si je n’étais que fessé, je l’ai été
+chez les Bulgares; mais, ô mon cher \bname{Pangloss}! le plus grand des
+philosophes, faut-il vous avoir vu pendre, sans que je sache pourquoi!
+ô mon cher anabaptiste! le meilleur des hommes, faut-il que vous ayez
+été noyé dans le port! Ô mademoiselle~\bname{Cunégonde}! la perle des filles,
+faut-il qu’on vous ait fendu le ventre!»
+
+Il s’en retournait, se soutenant à peine, prêché, fessé, absous, et
+béni, lorsqu’une vieille l’aborda, et lui dit: «Mon fils, prenez
+courage, suivez-moi.»
+
+
+
+
+
+
+\chapter[Comment une vieille prit soin de \bname{Candide}…]{Comment une vieille prit soin de \bname{Candide},\\et comment il retrouva ce
+qu’il aimait}
+
+\lettrine{C}{andide} ne prit point courage, mais il suivit la vieille dans une
+masure: elle lui donna un pot de pommade pour se frotter, lui laissa à
+manger et à boire; elle lui montra un petit lit assez propre; il y
+avait auprès du lit un habit complet. «Mangez, buvez, dormez, lui
+dit-elle, et que Notre-Dame d’Atocha, M\up{gr} saint Antoine de
+Padoue, et M\up{gr} saint Jacques de Compostelle prennent soin de
+vous! je reviendrai demain.» \bname{Candide}, toujours étonné de tout ce qu’il
+avait vu, de tout ce qu’il avait souffert, et encore plus de la charité
+de la vieille, voulut lui baiser la main. «Ce n’est pas ma main qu’il
+faut baiser, dit la vieille; je reviendrai demain. Frottez-vous de
+pommade, mangez et dormez.»
+
+
+
+\bname{Candide}, malgré tant de malheurs, mangea et dormit. Le lendemain la
+vieille lui apporte à déjeuner, visite son dos, le frotte elle-même
+d’une autre pommade: elle lui apporte ensuite à dîner: elle revient sur
+le soir et apporte à souper. Le surlendemain elle fit encore les mêmes
+cérémonies. «Qui êtes-vous? lui disait toujours \bname{Candide}; qui vous a
+inspiré tant de bonté? quelles grâces puis-je vous rendre?» La bonne
+femme ne répondait jamais rien. Elle revint sur le soir, et n’apporta
+point à souper: «Venez avec moi, dit-elle, et ne dites mot.» Elle le
+prend sous le bras, et marche avec lui dans la campagne environ un
+quart de mille: ils arrivent à une maison isolée, entourée de jardins
+et de canaux. La vieille frappe à une petite porte. On ouvre; elle mène
+\bname{Candide}, par un escalier dérobé, dans un cabinet doré, le laisse sur un
+canapé de brocart, referme la porte, et s’en va. \bname{Candide} croyait rêver,
+et regardait toute sa vie comme un songe funeste, et le moment présent
+comme un songe agréable.
+
+\textls[-5]
+{La vieille reparut bientôt; elle soutenait avec peine une femme
+tremblante, d’une taille majestueuse, brillante de pierreries, et
+couverte d’un voile. «Ôtez ce voile», dit la vieille à \bname{Candide}. Le jeune
+homme approche; il lève le voile d’une main timide. Quel moment! quelle
+surprise! il croit voir M\up{lle}~\bname{Cunégonde}; il la voyait en effet,
+c’était elle-même. La force lui manque, il ne peut proférer une parole,
+il tombe à ses pieds. \bname{Cunégonde} tombe sur le canapé. La vieille les
+accable d’eaux spiritueuses, ils reprennent leurs sens, ils se parlent:
+ce sont d’abord des mots entrecoupés, des demandes et des réponses qui
+se croisent, des soupirs, des larmes, des cris. La vieille leur
+recommande de faire moins de bruit, et les laisse en liberté. «Quoi!
+c’est vous, lui dit \bname{Candide}, vous vivez! Je vous retrouve en Portugal!
+On ne vous a donc pas violée? on ne vous a point fendu le ventre, comme
+le philosophe \bname{Pangloss} me l’avait assuré?» — Si fait, dit la belle
+\bname{Cunégonde}; mais on ne meurt pas toujours de ces deux accidents. — Mais
+votre père et votre mère ont-ils été tués? — Il n’est que trop vrai, dit
+\bname{Cunégonde} en pleurant. — Et votre frère? — Mon frère a été tué aussi. — Et
+pourquoi êtes-vous en Portugal? et comment avez-vous su que j’y étais?
+et par quelle étrange aventure m’avez-vous fait conduire dans cette
+maison? — Je vous dirai tout cela, répliqua la dame; mais il faut
+auparavant que vous m’appreniez tout ce qui vous est arrivé depuis le
+baiser innocent que vous me donnâtes, et les coups de pied que vous
+reçûtes.»}
+
+
+
+\bname{Candide} lui obéit avec un profond respect; et quoiqu’il fût interdit,
+quoique sa voix fût faible et tremblante, quoique l’échine lui fît
+encore un peu mal, il lui raconta de la manière la plus naïve tout ce
+qu’il avait éprouvé depuis le moment de leur séparation. \bname{Cunégonde}
+levait les yeux au ciel: elle donna des larmes à la mort du bon
+anabaptiste et de \bname{\bname{Pangloss}}; après quoi elle parla en ces termes à
+\bname{Candide}, qui ne perdait pas une parole, et qui la dévorait des yeux.
+
+
+
+
+
+
+\chapter{Histoire de Cunégonde}
+
+
+\lettrine[ante={«}]{J'}{étais} dans mon lit et je dormais profondément, quand il plut au ciel
+d’envoyer les Bulgares dans notre beau château de Thunder-ten-tronckh;
+ils égorgèrent mon père et mon frère, et coupèrent ma mère par
+morceaux. Un grand Bulgare, haut de six pieds, voyant qu’à ce spectacle
+j’avais perdu connaissance, se mit à me violer; cela me fit revenir, je
+repris mes sens, je criai, je me débattis, je mordis, j’égratignai, je
+voulais arracher les yeux à ce grand Bulgare, ne sachant pas que tout
+ce qui arrivait dans le château de mon père était une chose d’usage: le
+brutal me donna un coup de couteau dans le flanc gauche dont je porte
+encore la marque. — Hélas! j’espère bien la voir, dit le naïf \bname{Candide}.
+— Vous la verrez, dit \bname{Cunégonde}; mais continuons. — Continuez», dit \bname{Candide}.
+
+{\parfillskip=1em
+Elle reprit ainsi le fil de son histoire: «Un capitaine bulgare entra,
+il me vit toute sanglante, et le soldat ne se dérangeait pas. Le
+capitaine se mit en colère du peu de respect que lui témoignait, ce
+brutal, et le tua sur mon corps. Ensuite il me fit panser, et m’emmena
+prisonnière de guerre dans son quartier. Je blanchissais le peu de
+chemises qu’il avait, je faisais sa cuisine; il me trouvait fort jolie,
+il faut l’avouer; et je ne nierai pas qu’il ne fût très bien fait, et
+qu’il n’eût la peau blanche et douce; d’ailleurs peu d’esprit, peu de
+philosophie: on voyait bien qu’il n’avait pas été élevé par le docteur
+\bname{Pangloss}. Au bout de trois mois, ayant perdu tout son argent, et
+s’étant dégoûté de moi, il me vendit à un Juif nommé don Issachar, qui
+trafiquait en \bname{Hollande} et en Portugal, et qui aimait passionnément les
+femmes. Ce Juif s’attacha beaucoup à ma personne, mais il ne pouvait en
+triompher; je lui ai mieux résisté qu’au soldat bulgare. Une personne
+d’honneur peut être violée une fois, mais sa vertu s’en affermit. Le
+Juif, pour m’apprivoiser, me mena dans cette maison de campagne que
+vous voyez. J’avais cru jusque-là qu’il n’y avait rien sur la terre de
+si beau que le château de Thunder-ten-tronckh; j’ai été détrompée.
+
+}
+
+«Le grand inquisiteur m’aperçut un jour à la messe; il me lorgna
+beaucoup, et me fit dire qu’il avait à me parler pour des affaires
+secrètes. Je fus conduite à son palais; je lui appris ma naissance; il
+me représenta combien il était au-dessous de mon rang d’appartenir à un
+Israélite. On proposa de sa part à don Issachar de me céder à
+monseigneur. Don Issachar, qui est le banquier de la cour, et homme de
+crédit, n’en voulut rien faire. L’inquisiteur le menaça d’un
+auto-da-fé. Enfin mon Juif intimidé conclut un marché par lequel la
+maison et moi leur appartiendraient à tous deux en commun; que le Juif
+aurait pour lui les lundis, mercredis, et le jour du sabbat, et que
+l’inquisiteur aurait les autres jours de la semaine. Il y a six mois
+que cette convention subsiste. Ce n’a pas été sans querelles; car
+souvent il a été indécis si la nuit du samedi au dimanche appartenait à
+l’ancienne loi ou à la nouvelle. Pour moi, j’ai résisté jusqu’à présent
+à toutes les deux; et je crois que c’est pour cette raison que j’ai
+toujours été aimée.
+
+«Enfin, pour détourner le fléau des tremblements de terre, et pour
+intimider don Issachar, il plut à \bname{monseigneur} l’inquisiteur de célébrer
+un auto-da-fé. Il me fit l’honneur de m’y inviter. Je fus très bien
+placée; on servit aux dames des rafraîchissements entre la messe et
+l’exécution. Je fus, à la vérité, saisie d’horreur en voyant brûler ces
+deux Juifs et cet honnête Biscayen qui avait épousé sa commère: mais
+quelle fut ma surprise, mon effroi, mon trouble, quand je vis dans un
+san-benito,
+ et sous une mitre, une figure qui ressemblait à celle de
+\bname{Pangloss}! Je me
+frottai les yeux, je regardai attentivement, je le vis
+pendre; je tombai en faiblesse. À peine reprenais-je mes sens, que je
+vous vis dépouillé tout nu; ce fut là le comble de l’horreur, de la
+consternation, de la douleur, du désespoir. Je vous dirai, avec vérité,
+que votre peau est encore plus blanche, et d’un incarnat plus parfait
+que celle de mon capitaine des Bulgares. Cette vue redoubla tous les
+sentiments qui m’accablaient, qui me dévoraient. Je m’écriai, je voulus
+dire, «Arrêtez, barbares!» mais la voix me manqua, et mes cris auraient
+été inutiles. Quand vous eûtes été bien fessé: \frquote{\localleftbox{« }Comment se peut-il
+faire, disais-je, que l’aimable \bname{Candide} et le sage \bname{Pangloss} se trouvent
+à \bname{Lisbonne}, l’un pour recevoir cent coups de fouet, et l’autre pour
+être pendu par l’ordre de \bname{Monseigneur} l’inquisiteur, dont je suis la
+bien-aimée? \bname{Pangloss} m’a donc bien cruellement trompée, quand il me
+disait que tout va le mieux du monde!}\localleftbox{}
+
+«Agitée, éperdue, tantôt hors de moi-même, et tantôt prête de mourir de
+faiblesse, j’avais la tête remplie du massacre de mon père, de ma mère,
+de mon frère, de l’insolence de mon vilain soldat bulgare, du coup de
+couteau qu’il me donna, de ma servitude, de mon métier de cuisinière,
+de mon capitaine bulgare, de mon vilain don~\bname{Issachar}, de mon abominable
+inquisiteur, de la pendaison du docteur \bname{Pangloss}, de ce grand \emph{Miserere}
+en faux-bourdon pendant lequel on vous fessait, et surtout du baiser
+que je vous avais donné derrière un paravent, le jour que je vous avais
+vu pour la dernière fois. Je louai Dieu, qui vous ramenait à moi par
+tant d’épreuves. Je recommandai à ma vieille d’avoir soin de vous, et
+de vous amener ici dès qu’elle le pourrait. Elle a très bien exécuté ma
+commission; j’ai goûté le plaisir inexprimable de vous revoir, de vous
+entendre, de vous parler. Vous devez avoir une faim dévorante; j’ai
+grand appétit; commençons par souper.»
+
+Les voilà qui se mettent tous deux à table; et, après le souper, ils se
+replacent sur ce beau canapé dont on a déjà parlé; ils y étaient quand
+le signor don Issachar, l’un des maîtres de la maison, arriva. C’était
+le jour du sabbat. Il venait jouir de ses droits, et expliquer son
+tendre amour.
+
+
+
+
+
+\chapter[Ce qui advint de Cunégonde, de Candide…]{Ce qui advint de \bname{Cunégonde}, de \bname{Candide},\\du grand inquisiteur, et d’un
+Juif}
+
+
+\lettrine{C}{et} Issachar était le plus colérique Hébreu qu’on eût vu dans Israël,
+depuis la captivité en Babylone. «Quoi! dit-il, chienne de galiléenne,
+ce n’est pas assez de M. l’inquisiteur? il faut que ce coquin
+partage aussi avec moi?» En disant cela il tire un long poignard dont il
+était toujours pourvu, et, ne croyant pas que son adverse partie eût
+des armes, il se jette sur \bname{Candide}; mais notre bon Westphalien avait
+reçu une belle épée de la vieille avec l’habit complet. Il tire son
+épée, quoiqu’il eût les mœurs fort douces, et vous étend l’Israélite
+roide mort sur le carreau, aux pieds de la belle \bname{Cunégonde}.
+
+«Sainte Vierge! s’écria-t-elle, qu’allons-nous devenir? un homme tué
+chez moi! si la justice vient, nous sommes perdus. — Si \bname{Pangloss} n’avait
+pas été pendu, dit \bname{Candide}, il nous donnerait un bon conseil dans cette
+extrémité, car c’était un grand philosophe. À son défaut, consultons la
+vieille.» Elle était fort prudente, et commençait à dire son avis quand
+une autre petite porte s’ouvrit. Il était une heure après minuit,
+c’était le commencement du dimanche. Ce jour appartenait à monseigneur
+l’inquisiteur. Il entre et voit le fessé \bname{Candide}, l’épée à la main, un
+mort étendu par terre, \bname{Cunégonde} effarée, et la vieille donnant des
+conseils.
+
+Voici dans ce moment ce qui se passa dans l’âme de \bname{Candide}, et comment
+il raisonna: «Si ce saint homme appelle du secours, il me fera
+infailliblement brûler, il pourra en faire autant de \bname{Cunégonde}; il m’a
+fait fouetter impitoyablement; il est mon rival; je suis en train de
+tuer; il n’y a pas à balancer.» Ce raisonnement fut net et rapide; et,
+sans donner le temps à l’inquisiteur de revenir de sa surprise, il le
+perce d’outre en outre, et le jette à côté du Juif. «En voici bien d’une
+autre, dit \bname{Cunégonde}; il n’y a plus de rémission; nous sommes
+excommuniés, notre dernière heure est venue! Comment avez-vous fait,
+vous qui êtes né si doux, pour tuer en deux minutes un Juif et un
+prélat? — Ma belle demoiselle, répondit\bname{Candide}, quand on est amoureux,
+jaloux, et fouetté par l’inquisition, on ne se connaît plus.»
+
+La vieille prit alors la parole, et dit: «Il y a trois chevaux andalous
+dans l’écurie, avec leurs selles et leurs brides, que le brave \bname{Candide}
+les prépare; madame a des moyadors et des diamants, montons vite à
+cheval, quoique je ne puisse me tenir que sur une fesse, et allons à
+Cadix; il fait le plus beau temps du monde, et c’est un grand plaisir
+de voyager pendant la fraîcheur de la nuit.»
+
+Aussitôt \bname{Candide} selle les trois chevaux; \bname{Cunégonde}, la vieille, et
+lui, font trente milles d’une traite. Pendant qu’ils s’éloignaient, la
+Sainte-Hermandad arrive dans la maison, on enterre monseigneur dans une
+belle église, on jette Issachar à la voirie.
+
+\bname{Candide}, \bname{Cunégonde}, et la vieille, étaient déjà dans la petite ville
+\bname{d’Avacéna}, au milieu des montagnes de la Sierra Morena; et ils
+parlaient ainsi dans un cabaret.
+
+
+
+
+\chapter[Dans quelle détresse Candide…]{Dans quelle détresse \bname{Candide}, \bname{Cunégonde},\\et la vieille, arrivent à
+Cadix, et leur embarquement}
+
+
+\lettrine[ante={«}]{Q}{ui a donc} pu me voler mes pistoles et mes diamants? disait en pleurant
+\bname{Cunégonde}; de quoi vivrons-nous? comment ferons-nous? où trouver des
+inquisiteurs et des Juifs qui m’en donnent d’autres? — Hélas! dit la
+vieille, je soupçonne fort un révérend père cordelier, qui coucha hier
+dans la même auberge que nous à \bname{Badajos}; Dieu me garde de faire un
+jugement téméraire! mais il entra deux fois dans notre chambre, et il
+partit longtemps avant nous. — Hélas! dit \bname{Candide}, le bon \bname{Pangloss}
+m’avait souvent prouvé que les biens de la terre sont communs à tous
+les hommes, que chacun y a un droit égal. Ce cordelier devait bien,
+suivant ces principes, nous laisser de quoi achever notre voyage. Il ne
+vous reste donc rien du tout, ma belle \bname{Cunégonde}? — Pas un maravédis,
+dit-elle. — Quel parti prendre? dit \bname{Candide}. — Vendons un des chevaux, dit
+la vieille; je monterai en croupe derrière mademoiselle, quoique je ne
+puisse me tenir que sur une fesse, et nous arriverons à Cadix.»
+
+Il y avait dans la même hôtellerie un prieur de bénédictins; il acheta
+le cheval bon marché. \bname{Candide}, \bname{Cunégonde}, et la vieille, passèrent par
+Lucena, par Chillas, par Lebrixa, et arrivèrent enfin à Cadix. On y
+équipait une flotte, et on y assemblait des troupes pour mettre à la
+raison les révérends pères jésuites du Paraguay, qu’on accusait d’avoir
+fait révolter une de leurs hordes contre les rois d’Espagne et de
+Portugal, auprès de la ville du Saint-Sacrement. \bname{Candide}, ayant
+servi chez les Bulgares, fit l’exercice bulgarien devant le général de
+la petite armée avec tant de grâce, de célérité, d’adresse, de fierté,
+d’agilité, qu’on lui donna une compagnie d’infanterie à commander. Le
+voilà capitaine; il s’embarque avec M\up{lle}~\bname{Cunégonde}, la vieille,
+deux valets, et les deux chevaux andalous qui avaient appartenu à M. le
+grand inquisiteur de Portugal.
+
+\looseness=-1
+Pendant toute la traversée ils raisonnèrent beaucoup sur la philosophie
+du pauvre \bname{Pangloss}. «Nous allons dans un autre univers, disait \bname{Candide};
+c’est dans celui-là, sans doute, que tout est bien: car il faut avouer
+qu’on pourrait gémir un peu de ce qui se passe dans le nôtre en
+physique et en morale. — Je vous aime de tout mon cœur, disait
+\bname{Cunégonde}; mais j’ai encore l’âme tout effarouchée de ce que j’ai vu,
+de ce que j’ai éprouvé. — Tout ira bien, répliquait \bname{Candide}; la mer de ce
+nouveau monde vaut déjà mieux que les mers de notre Europe; elle est
+plus calme, les vents plus constants. C’est certainement le
+nouveau monde qui est le meilleur des univers possibles. — Dieu le
+veuille! disait \bname{Cunégonde}: mais j’ai été si horriblement malheureuse
+dans le mien, que mon cœur est presque fermé à l’espérance. — Vous vous
+plaignez, leur dit la vieille; hélas! vous n’avez pas éprouvé des
+infortunes telles que les miennes.» \bname{Cunégonde} se mit presque à rire, et
+trouva cette bonne femme fort plaisante de prétendre être plus
+malheureuse qu’elle. «Hélas! lui dit-elle, ma bonne, à moins que vous
+n’ayez été violée par deux Bulgares, que vous n’ayez reçu deux coups de
+couteau dans le ventre, qu’on n’ait démoli deux de vos châteaux, qu’on
+n’ait égorgé à vos yeux deux mères et deux pères, et que vous n’ayez vu
+deux de vos amants fouettés dans un auto-da-fé, je ne vois pas que vous
+puissiez l’emporter sur moi; ajoutez que je suis née baronne avec
+soixante et douze quartiers, et que j’ai été cuisinière. — Mademoiselle,
+répondit la vieille, vous ne savez pas quelle est ma naissance; et si
+je vous montrais mon derrière, vous ne parleriez pas comme vous faites,
+et vous suspendriez votre jugement.» Ce discours fit naître une extrême
+curiosité dans l’esprit de \bname{Cunégonde} et de \bname{Candide}. La vieille leur
+parla en ces termes.\quad\null
+
+
+\chapter{Histoire de la vieille}
+
+
+\lettrine[ante=«]{J}{e n’ai} pas eu toujours les yeux éraillés et bordés d’écarlate; mon nez
+n’a pas toujours touché à mon menton, et je n’ai pas toujours été
+servante. Je suis la fille du pape \bname{Urbain}~X et de la princesse de
+\bname{Palestrine}.
+On m’éleva jusqu’à quatorze ans dans un palais auquel
+tous les châteaux de vos barons allemands n’auraient pas servi
+d’écurie; et une de mes robes valait mieux que toutes les magnificences
+de la \bname{Westphalie}. Je croissais en beauté, en grâces, en talents, au
+milieu des plaisirs, des respects, et des espérances: j’inspirais déjà
+de l’amour; ma gorge se formait; et quelle gorge! blanche, ferme,
+taillée comme celle de la Vénus de \bname{Médicis}; et quels yeux! quelles
+paupières! quels sourcils noirs! quelles flammes brillaient dans mes
+deux prunelles, et effaçaient la scintillation des étoiles! comme me
+disaient les poètes du quartier. Les femmes qui m’habillaient et qui me
+déshabillaient tombaient en extase en me regardant par-devant et
+par-derrière; et tous les hommes auraient voulu être à leur place.
+
+
+«Je fus fiancée à un prince souverain de Massa-Carrara: quel prince!
+aussi beau que moi, pétri de douceur et d’agréments, brillant d’esprit
+et brûlant d’amour; je l’aimais comme on aime pour la première fois,
+avec idolâtrie, avec emportement. Les noces furent préparées: c’était
+une pompe, une magnificence inouïe; c’étaient des fêtes, des
+carrousels, des opéra-buffa continuels; et toute l’Italie fit pour moi
+des sonnets dont il n’y eut pas un seul de passable. Je touchais au
+moment
+de mon bonheur, quand une vieille marquise, qui avait été
+maîtresse de mon prince, l’invita à prendre du chocolat chez elle; il
+mourut en moins de deux heures avec des convulsions épouvantables; mais
+ce n’est qu’une bagatelle. Ma mère au désespoir, et bien moins affligée
+que moi, voulut s’arracher pour quelque temps à un séjour si funeste.
+Elle avait une très belle terre auprès de Gaète: nous nous embarquâmes
+sur une galère du pays, dorée comme l’autel de Saint-Pierre de Rome.
+Voilà qu’un corsaire de Salé fond sur nous et nous aborde: nos soldats
+se défendirent comme des soldats du pape; ils se mirent tous à genoux
+en jetant leurs armes, et en demandant au corsaire une absolution \emph{in
+articulo mortis}.
+
+«Aussitôt on les dépouilla nus comme des singes, et ma mère aussi, nos
+filles d’honneur aussi, et moi aussi. C’est une chose admirable que la
+diligence avec laquelle ces messieurs déshabillent le monde; mais ce
+qui me surprit davantage, c’est qu’ils nous mirent à tous le doigt dans
+un endroit où nous autres femmes nous ne nous laissons mettre
+d’ordinaire que des canules. Cette cérémonie me paraissait bien
+étrange: voilà comme on juge de tout quand on n’est pas sorti de son
+pays. J’appris bientôt que c’était pour voir si nous n’avions pas caché
+là quelques diamants; c’est un usage établi de temps immémorial parmi
+les nations policées qui courent sur mer. J’ai su que messieurs les
+religieux chevaliers de Malte n’y manquent jamais quand ils prennent
+des Turcs et des Turques; c’est une loi du droit des gens à laquelle on
+n’a jamais dérogé.
+
+«Je ne vous dirai point combien il est dur pour une jeune princesse
+d’être menée esclave à Maroc avec sa mère: vous concevez assez tout ce
+que nous eûmes à souffrir dans le vaisseau corsaire. Ma mère était
+encore très belle: nos filles d’honneur, nos simples femmes de chambre
+avaient plus de charmes qu’on n’en peut trouver dans toute l’Afrique.
+Pour moi, j’étais ravissante, j’étais la beauté, la grâce même, et
+j’étais pucelle: je ne le fus pas longtemps; cette fleur, qui avait
+été réservée pour le beau prince de Massa-Carrara, me fut ravie par le
+capitaine corsaire; c’était un nègre abominable, qui croyait encore me
+faire beaucoup d’honneur. Certes il fallait que M\up{me} la princesse de
+\bname{Palestrine} et moi fussions bien fortes pour résister à tout ce que nous
+éprouvâmes jusqu’à notre arrivée à Maroc! Mais passons; ce sont des
+choses si communes, qu’elles ne valent pas la peine qu’on en parle.
+
+«Maroc nageait dans le sang quand nous arrivâmes. Cinquante fils de
+l’empereur Muley-Ismaël avaient chacun leur parti; ce qui produisait
+en effet cinquante guerres civiles, de noirs contre noirs, de noirs
+contre basanés, de basanés contre basanés, de mulâtres contre mulâtres:
+c’était un carnage continuel dans toute l’étendue de l’empire.
+
+
+
+«À peine fûmes-nous débarquées, que des noirs d’une faction ennemie de
+celle de mon corsaire se présentèrent pour lui enlever son butin. Nous
+étions, après les diamants et l’or, ce qu’il avait de plus précieux. Je
+fus témoin d’un combat tel que vous n’en voyez jamais dans vos climats
+d’Europe. Les peuples septentrionaux n’ont pas le sang assez ardent;
+ils n’ont pas la rage des femmes au point où elle est commune en
+Afrique. Il semble que vos Européens aient du lait dans les veines;
+c’est du vitriol, c’est du feu qui coule dans celles des habitants du
+mont Atlas et des pays voisins. On combattit avec la fureur des lions,
+des tigres, et des serpents de la contrée, pour savoir qui nous aurait.
+Un Maure saisit ma mère par le bras droit, le lieutenant de mon
+capitaine la retint par le bras gauche; un soldat maure la prit par une
+jambe, un de nos pirates la tenait par l’autre. Nos filles se
+trouvèrent presque toutes en un moment tirées ainsi à quatre soldats.
+Mon capitaine me tenait cachée derrière lui; il avait le cimeterre au
+poing, et tuait tout ce qui s’opposait à sa rage. Enfin je vis toutes
+nos Italiennes et ma mère déchirées, coupées, massacrées par les
+monstres qui se les disputaient. Les captifs, mes compagnons, ceux qui
+les avaient pris, soldats, matelots, noirs, basanés, blancs, mulâtres,
+et enfin mon capitaine, tout fut tué, et je demeurai mourante sur un
+tas de morts. Des scènes pareilles se passaient, comme on sait, dans
+l’étendue de plus de trois cents lieues, sans qu’on manquât aux cinq
+prières par jour ordonnées par Mahomet.
+
+«Je me débarrassai avec beaucoup de peine de la foule de tant de
+cadavres sanglants entassés, et je me traînai sous un grand oranger au
+bord d’un ruisseau voisin; j’y tombai d’effroi, de lassitude,
+d’horreur, de désespoir, et de faim. Bientôt après, mes sens accablés se
+livrèrent à un sommeil qui tenait plus de l’évanouissement que du
+repos. J’étais dans cet état de faiblesse et d’insensibilité, entre la
+mort et la vie, quand je me sentis pressée de quelque chose qui
+s’agitait sur mon corps; j’ouvris les yeux, je vis un homme blanc et de
+bonne mine qui soupirait, et qui disait entre ses dents: \emph{O che
+sciagura d’essere senza coglioni!}
+
+
+
+
+\chapter{Suite des malheurs de la vieille}
+
+
+\lettrine[ante=«]{É}{tonnée} et ravie d’entendre la langue de ma patrie, et non moins
+surprise des paroles que proférait cet homme, je lui répondis qu’il y
+avait de plus grands malheurs que celui dont il se plaignait; je
+l’instruisis en peu de mots des horreurs que j’avais essuyées, et je
+retombai en faiblesse. Il m’emporta dans une maison voisine, me fit
+mettre au lit, me fit donner à manger, me servit, me consola, me
+flatta, me dit qu’il n’avait rien vu de si beau que moi, et que jamais
+il n’avait tant regretté ce que personne ne pouvait lui rendre. \frquote{\localleftbox{« }Je suis
+né à Naples, me dit-il; on y chaponne deux ou trois mille enfants tous
+les ans; les uns en meurent, les autres acquièrent une voix plus belle
+que celle des femmes, les autres vont gouverner des états. On me fit
+cette opération avec un très grand succès, et j’ai été musicien de la
+chapelle de M\up{me} la princesse de \bname{Palestrine}. — De ma mère! m’écriai-je.
+— De votre mère! s’écria-t-il en pleurant. Quoi! vous seriez cette jeune
+princesse que j’ai élevée jusqu’à l’âge de six ans, et qui promettait
+déjà d’être aussi belle que vous êtes? — C’est moi-même; ma mère est à
+quatre cents pas d’ici coupée en quartiers sous un tas de morts…}\localleftbox{}
+
+
+
+
+«Je lui contai tout ce qui m’était arrivé; il me conta aussi ses
+aventures, et m’apprit comment il avait été envoyé chez le roi de Maroc
+par une puissance chrétienne, pour conclure avec ce monarque un traité
+par lequel on lui fournirait de la poudre, des canons, et des
+vaisseaux, pour l’aider à exterminer le commerce des autres chrétiens.
+\frquote{\localleftbox{« }Ma mission est faite, dit cet honnête eunuque; je vais m’embarquer à
+Ceuta, et je vous ramènerai en Italie. \emph{Ma che sciagura d’essere senza
+coglioni!}}\localleftbox{}
+
+
+«Je le remerciai avec des larmes d’attendrissement; et au lieu de me
+mener en Italie, il me conduisit à Alger, et me vendit au dey de cette
+province. À peine fus-je vendue, que cette peste qui a fait le tour de
+l’Afrique, de l’Asie, de l’Europe, se déclara dans Alger avec fureur.
+«Vous avez vu des tremblements de terre; mais, mademoiselle, avez-vous
+jamais eu la peste? — Jamais, répondit la baronne.
+
+%\looseness=1
+— Si vous l’aviez eue, reprit la vieille, vous avoueriez qu’elle est bien
+au-dessus d’un tremblement de terre. Elle est fort commune en Afrique;
+j’en fus attaquée. Figurez-vous quelle situation pour la fille d’un
+pape, âgée de quinze ans, qui en trois mois de temps avait éprouvé la
+pauvreté, l’esclavage, avait été violée presque tous les jours, avait
+vu couper sa mère en quatre, avait essuyé la faim et la guerre, et
+mourait pestiférée dans Alger! Je n’en mourus pourtant pas; mais mon
+eunuque et le dey, et presque tout le sérail \linebreak d’Alger périrent.
+
+
+
+«Quand les premiers ravages de cette épouvantable peste furent passés,
+on vendit les esclaves du dey. Un marchand m’acheta, et me mena à
+Tunis; il me vendit à un autre marchand qui me revendit à Tripoli; de
+Tripoli je fus revendue à Alexandrie, d’Alexandrie revendue à Smyrne;
+de Smyrne à Constantinople. J’appartins enfin à un aga des janissaires,
+qui fut bientôt commandé pour aller défendre Azof contre les Russes qui
+l’assiégeaient.
+
+«L’aga, qui était un très galant homme, mena avec lui tout son sérail,
+et nous logea dans un petit fort sur les Palus-Méotides, gardé par deux
+eunuques noirs et vingt soldats. On tua prodigieusement de Russes, mais
+ils nous le rendirent bien: Azof fut mis à feu et à sang, et on ne
+pardonna ni au sexe, ni à l’âge; il ne resta que notre petit fort; les
+ennemis voulurent nous prendre par famine. Les vingt janissaires
+avaient juré de ne se jamais rendre. Les extrémités de la faim où ils
+furent réduits les contraignirent à manger nos deux eunuques, de peur
+de violer leur serment. Au bout de quelques jours ils résolurent de
+manger les femmes.
+
+
+«Nous avions un iman très pieux et très compatissant, qui leur fit un
+beau sermon par lequel il leur persuada de ne nous pas tuer
+tout-à-fait. \frquote{\localleftbox{« }Coupez, dit-il, seulement une fesse à chacune de ces
+dames, vous ferez très bonne chère; s’il faut y revenir, vous en aurez
+encore autant dans quelques jours; le ciel vous saura gré d’une action
+si charitable, et vous serez secourus.}\localleftbox{}
+
+«Il avait beaucoup d’éloquence; il les persuada: on nous fit cette
+horrible opération; l’iman nous appliqua le même baume qu’on met aux
+enfants qu’on vient de circoncire: nous étions toutes à la mort.
+
+
+«À peine les janissaires eurent-ils fait le repas que nous leur avions
+fourni, que les Russes arrivent sur des bateaux plats; pas un
+janissaire ne réchappa. Les Russes ne firent aucune attention à l’état
+où nous étions. Il y a partout des chirurgiens français: un d’eux qui
+était fort adroit prit soin de nous, il nous guérit; et je me
+souviendrai toute ma vie, que quand mes plaies furent bien fermées, il
+me fit des propositions. Au reste, il nous dit à toutes de nous
+consoler; il nous assura que dans plusieurs sièges pareille chose était
+arrivée, et que c’était la loi de la guerre.
+
+
+«Dès que mes compagnes purent marcher, on les fit aller à Moscou;
+j’échus en partage à un boyard qui me fit sa jardinière, et qui me
+donnait vingt coups de fouet par jour; mais ce seigneur ayant été roué
+au bout de deux ans avec une trentaine de boyards pour quelque
+tracasserie de cour, je profitai de cette aventure; je m’enfuis; je
+traversai toute la Russie; je fus longtemps servante de cabaret à
+Riga, puis à Rostock, à Vismar, à Leipsick, à Cassel, à Utrecht, à
+Leyde, à La Haye, à Rotterdam: j’ai vieilli dans la misère et dans
+l’opprobre, n’ayant que la moitié d’un derrière, me souvenant toujours
+que j’étais fille d’un pape; je voulus cent fois me tuer, mais j’aimais
+encore la vie. Cette faiblesse ridicule est peut-être un de nos
+penchants les plus funestes; car y a-t-il rien de plus sot que de
+vouloir porter continuellement un fardeau qu’on veut toujours jeter par
+terre; d’avoir son être en horreur, et de tenir à son être; enfin de
+\bname{caresser} le serpent qui nous dévore, jusqu’à ce qu’il nous ait \linebreak mangé le
+cœur?
+
+
+
+«J’ai vu dans les pays que le sort m’a fait parcourir, et dans les
+cabarets où j’ai servi, un nombre prodigieux de personnes qui avaient
+leur existence en exécration; mais je n’en ai vu que douze qui aient
+mis volontairement fin à leur misère, trois nègres, quatre Anglais,
+quatre Genevois, et un professeur allemand nommé Robeck. J’ai fini
+par être servante chez le Juif don Issachar; il me mit auprès de vous,
+ma belle demoiselle; je me suis attachée à votre destinée, et j’ai été
+plus occupée de vos aventures que des miennes. Je ne vous aurais même
+jamais parlé de mes malheurs, si vous ne m’aviez pas un peu piquée, et
+s’il n’était d’usage, dans un vaisseau, de conter des histoires pour se
+désennuyer. Enfin, mademoiselle, j’ai de l’expérience, je connais le
+monde; donnez-vous un plaisir, engagez chaque passager à vous conter
+son histoire, et s’il s’en trouve un seul qui n’ait souvent maudit sa
+vie, qui ne se soit souvent dit à lui-même qu’il était le plus
+malheureux des hommes, jetez-moi dans la mer la tête la première.»
+
+
+
+
+\chapter[Comment Candide fut obligé de se séparer…]{Comment \bname{Candide} fut obligé de se séparer\\de la belle \bname{Cunégonde} et de la
+vieille}
+
+
+\lettrine{L}{a belle} \bname{Cunégonde}, ayant entendu l’histoire de la vieille, lui fit
+toutes les politesses qu’on devait à une personne de son rang et de son
+mérite. Elle accepta la proposition; elle engagea tous les passagers,
+l’un après l’autre, à lui conter leurs aventures. \bname{Candide} et elle
+avouèrent que la vieille avait raison. C’est bien dommage, disait
+\bname{Candide}, que le sage \bname{Pangloss} ait été pendu contre la coutume dans un
+auto-da-fé; il nous dirait des choses admirables sur le mal physique et
+sur le mal moral qui couvrent la terre et la mer, et je me sentirais
+assez de force pour oser lui faire respectueusement quelques
+objections.
+
+À mesure que chacun racontait son histoire, le vaisseau avançait. On
+aborda dans \bname{Buenos} Aires. \bname{Cunégonde}, le capitaine \bname{Candide}, et la
+vieille, allèrent chez le gouverneur don \bname{Fernando} \bname{d’Ibaraa}, y Figueora,
+y \bname{Mascarenes}, y \bname{Lampourdos}, y Souza. Ce seigneur avait une fierté
+convenable à un homme qui portait tant de noms. Il parlait aux hommes
+avec le dédain le plus noble, portant le nez si haut, élevant si
+impitoyablement la voix, prenant un ton si imposant, affectant une
+démarche si altière, que tous ceux qui le saluaient étaient tentés de
+le battre. Il aimait les femmes à la fureur. \bname{Cunégonde} lui parut ce
+qu’il avait jamais vu de plus beau. La première chose qu’il fit fut de
+demander si elle n’était point la femme du capitaine. L’air dont il fit
+cette question alarma \bname{Candide}: il n’osa pas dire qu’elle était sa
+femme, parce qu’en effet elle ne l’était point; il n’osait pas dire que
+c’était sa sœur, parce qu’elle ne l’était pas non plus; et quoique ce
+mensonge officieux eût été autrefois très à la mode chez les
+anciens, et qu’il pût être utile aux modernes, son âme était trop
+pure pour trahir la vérité. «M\up{lle}~\bname{Cunégonde}, dit-il, doit me
+faire l’honneur de m’épouser, et nous supplions Votre Excellence de
+daigner faire notre noce.»
+
+Don Fernando d’Ibaraa, y Figueora, y Mascarenes, y \bname{Lampourdos}, y Souza,
+relevant sa moustache, sourit amèrement, et ordonna au \mbox{capitaine}
+\bname{Candide} d’aller faire la revue de sa compagnie. \bname{Candide} obéit; le
+gouverneur demeura avec M\up{lle}~\bname{Cunégonde}. Il lui déclara sa
+passion, lui protesta que le lendemain il l’épouserait à la face de
+l’Église, ou autrement, ainsi qu’il plairait à ses charmes. \bname{Cunégonde}
+lui demanda un quart d’heure pour se recueillir, pour consulter la
+vieille, et pour se déterminer.
+
+La vieille dit à \bname{Cunégonde}: «Mademoiselle, vous avez soixante et douze
+quartiers et pas une obole; il ne tient qu’à vous d’être la femme du
+plus grand seigneur de l’Amérique méridionale, qui a une très belle
+moustache; est-ce à vous de vous piquer d’une fidélité à toute épreuve?
+Vous avez été violée par les Bulgares; un Juif et un inquisiteur ont eu
+vos bonnes grâces: les malheurs donnent des droits. J’avoue que si
+j’étais à votre place, je ne ferais aucun scrupule d’épouser M.~le gouverneur, et de faire la fortune de M.~le capitaine \bname{Candide}.»
+Tandis que la vieille parlait avec toute la prudence que l’âge et
+l’expérience donnent, on vit entrer dans le port un petit vaisseau; il
+portait un alcade et des alguazils, et voici ce qui était arrivé.
+
+La vieille avait très bien deviné que ce fut un cordelier à la grande
+manche qui vola l’argent et les bijoux de \bname{Cunégonde} dans la ville de
+\bname{Badajos}, lorsqu’elle fuyait en hâte avec \bname{Candide}. Ce moine voulut
+vendre quelques unes des
+pierreries
+à un joaillier. Le marchand les
+reconnut pour celles du grand-inquisiteur. Le cordelier, avant d’être
+pendu, avoua qu’il les avait volées: il indiqua les personnes, et la
+route qu’elles prenaient. La fuite de \bname{Cunégonde} et de \bname{Candide} était
+déjà connue. On les suivit à Cadix: on envoya, sans perdre de temps, un
+vaisseau à leur poursuite. Le vaisseau était déjà dans le port de
+\bname{Buenos} Aires. Le bruit se répandit qu’un alcade allait débarquer, et
+qu’on poursuivait les meurtriers de monseigneur le grand inquisiteur.
+La prudente vieille vit dans l’instant tout ce qui était à faire. «Vous
+ne pouvez fuir, dit-elle à \bname{Cunégonde}, et vous n’avez rien à craindre;
+ce n’est pas vous qui avez tué monseigneur, et d’ailleurs le
+gouverneur, qui vous aime, ne souffrira pas qu’on vous maltraite;
+demeurez.» Elle court sur-le-champ à \bname{Candide}: «Fuyez, dit-elle, ou dans
+une heure vous allez être brûlé. Il n’y avait pas un moment à perdre»;
+mais comment se séparer de \bname{Cunégonde}, et où se réfugier?
+
+
+
+
+\chapter[Comment Candide et \bname{Cacambo} furent reçus…]{Comment \bname{Candide} et \bname{Cacambo} furent reçus\\chez les jésuites du Paraguay}
+
+
+\lettrine{C}{andide} avait amené de Cadix un valet tel qu’on en trouve beaucoup sur
+les côtes d’Espagne et dans les colonies. C’était un quart \bname{d’Espagnol},
+né d’un métis dans le Tucuman; il avait été enfant de chœur,
+sacristain, matelot, moine, facteur, soldat, laquais. Il s’appelait
+\bname{Cacambo}, et aimait fort son maître, parce que son maître était un fort
+bon homme. Il sella au plus vite les deux chevaux andalous. «Allons, mon
+maître, suivons le conseil de la vieille, partons, et courons sans
+regarder derrière nous.» \bname{Candide} versa des larmes: «Ô ma chère \bname{Cunégonde}!
+faut-il vous abandonner dans le temps que M. le gouverneur va
+faire nos noces! \bname{Cunégonde} amenée de si loin, que deviendrez-vous? — Elle
+deviendra ce qu’elle pourra, dit \bname{Cacambo}; les femmes ne sont jamais
+embarrassées d’elles; Dieu y pourvoit; courons. — Où me mènes-tu? où
+allons-nous? que ferons-nous sans \bname{Cunégonde}? disait \bname{Candide}. — Par saint
+Jacques de Compostelle, dit \bname{Cacambo}, vous alliez faire la guerre aux
+jésuites, allons la faire pour eux; je sais assez les chemins, je vous
+mènerai dans leur royaume, ils seront charmés d’avoir un capitaine qui
+fasse l’exercice à la bulgare; vous ferez une fortune prodigieuse;
+quand on n’a pas son compte dans un monde, on le trouve dans un autre.
+C’est un très grand plaisir de voir et de faire des choses nouvelles.
+
+
+— Tu as donc été déjà dans le Paraguay? dit \bname{Candide}. — Eh vraiment oui! dit
+\bname{Cacambo}; j’ai été cuistre dans le collège de l’Assomption, et je
+connais le gouvernement de Los Padres comme je connais les rues de
+Cadix. C’est une chose admirable que ce gouvernement. Le royaume a déjà
+plus de trois cents lieues de diamètre; il est divisé en trente
+provinces. Los Padres y ont tout, et les peuples rien; c’est le
+chef-d’œuvre de la raison et de la justice. Pour moi, je ne vois rien
+de si divin que Los Padres, qui font ici la guerre au roi d’Espagne et
+au roi de Portugal, et qui en Europe confessent ces rois; qui tuent ici
+des Espagnols, et qui à Madrid les envoient au ciel; cela me ravit;
+avançons: vous allez être le plus heureux de tous les hommes. Quel
+plaisir auront Los Padres, quand ils sauront qu’il leur vient un
+capitaine qui sait l’exercice bulgare!»
+
+
+
+Dès qu’ils furent arrivés à la première barrière, \bname{Cacambo} dit à la
+garde avancée qu’un capitaine demandait à parler à monseigneur le
+commandant. On alla avertir la grande garde. Un officier paraguain
+courut aux pieds du commandant lui donner part de la nouvelle. \bname{Candide}
+et \bname{Cacambo} furent d’abord désarmés; on se saisit de leurs deux chevaux
+andalous. Les deux étrangers sont introduits au milieu de deux files de
+soldats; le commandant était au bout, le bonnet à trois cornes en tête,
+la robe retroussée, l’épée au côté, l’esponton à la main. Il fit un
+signe; aussitôt vingt-quatre soldats entourent les deux nouveaux venus.
+Un sergent leur dit qu’il faut attendre, que le commandant ne peut leur
+parler, que le révérend père provincial ne permet pas qu’aucun Espagnol
+ouvre la bouche qu’en sa présence, et demeure plus de trois heures dans
+le pays. «Et où est le révérend père provincial? dit \bname{Cacambo}. — Il est à
+la parade après avoir dit sa messe, répondit le sergent, et vous ne
+pourrez baiser ses éperons que dans trois heures. — Mais, dit \bname{Cacambo},
+M. le capitaine, qui meurt de faim comme moi, n’est point
+espagnol, il est allemand; ne pourrions-nous point déjeuner en
+attendant Sa Révérence?»
+
+Le sergent alla sur-le-champ rendre compte de ce discours au
+commandant. «Dieu soit béni! dit ce seigneur, puisqu’il est allemand, je
+peux lui parler; qu’on le mène dans ma feuillée.» Aussitôt on conduit
+\bname{Candide} dans un cabinet de verdure, orné d’une très jolie colonnade de
+marbre vert et or, et de treillages qui renfermaient des perroquets,
+des colibris, des oiseaux-mouches, des pintades, et tous les oiseaux
+les plus rares. Un excellent déjeuner était préparé dans des vases
+d’or; et tandis que les Paraguains mangèrent du maïs dans des écuelles
+de bois, en plein champ, à l’ardeur du soleil, le révérend père
+commandant entra dans la feuillée.
+
+C’était un très beau jeune homme, le visage plein, assez blanc, haut en
+couleur, le sourcil relevé, l’œil vif, l’oreille rouge, les lèvres
+vermeilles, l’air fier, mais d’une fierté qui n’était ni celle d’un
+Espagnol ni celle d’un jésuite. On rendit à \bname{Candide} et à \bname{Cacambo} leurs
+armes, qu’on leur avait saisies, ainsi que les deux
+chevaux
+ andalous;
+\bname{Cacambo} leur fit manger l’avoine auprès de la feuillée, ayant toujours
+l’œil sur eux, crainte de surprise.
+
+
+\bname{Candide} baisa d’abord le bas de la robe du commandant, ensuite ils se
+mirent à table. «Vous êtes donc allemand? lui dit le jésuite en cette
+langue. — Oui, mon
+Révérend
+Père», dit \bname{Candide}. L’un et l’autre, en
+prononçant ces paroles, se regardaient avec une extrême surprise, et
+une émotion dont ils n’étaient pas les maîtres. «Et de quel pays
+d’Allemagne êtes-vous? dit le jésuite. — De la sale province de
+\bname{Westphalie}, dit \bname{Candide}: je suis né dans le château de
+Thunder-ten-tronckh. — Ô ciel! est-il possible! s’écria le commandant.
+— Quel miracle! s’écria \bname{Candide}. — Serait-ce vous? dit le commandant. — Cela
+n’est pas possible», dit \bname{Candide}. Ils se laissent tomber tous deux à la
+renverse, ils s’embrassent, ils versent des ruisseaux de larmes. «Quoi!
+serait-ce vous, mon Révérend Père? vous, le frère de la belle
+\bname{Cunégonde}! vous qui fûtes tué par les Bulgares! vous le fils de
+M. le baron! vous jésuite au Paraguay! Il faut avouer que ce
+monde est une étrange chose. Ô \bname{Pangloss}! \bname{Pangloss}! que vous seriez aise
+si vous n’aviez pas été pendu!»
+
+
+Le commandant fit retirer les esclaves nègres et les \bname{Paraguains} qui
+servaient à boire dans des gobelets de cristal de roche. Il remercia
+Dieu et saint Ignace mille fois; il serrait \bname{Candide} entre ses bras,
+leurs visages étaient baignés de pleurs. «Vous seriez bien plus étonné,
+plus attendri, plus hors de vous-même, dit \bname{Candide}, si je vous disais
+que M\up{lle}~\bname{Cunégonde}, votre sœur, que vous avez crue éventrée,
+est pleine de santé. — Où? — Dans votre voisinage, chez M.~le gouverneur de
+\bname{Buenos} \bname{Aires}; et je venais pour vous faire la guerre.» Chaque mot qu’ils
+prononcèrent dans cette longue conversation accumulait prodige sur
+prodige. Leur âme tout entière volait sur leur langue, était attentive
+dans leurs oreilles, et étincelante dans leurs yeux. Comme ils étaient
+Allemands, ils tinrent table longtemps, en attendant le révérend père
+provincial; et le commandant parla ainsi à son cher \bname{Candide}.
+
+
+
+
+\chapter[Comment \bname{Candide} tua le frère…]{Comment \bname{Candide} tua le frère de sa chère \bname{Cunégonde}}
+
+
+\lettrine[ante=«]{J’}{aurai} toute ma vie présent à la mémoire le jour horrible où je vis
+tuer mon père et ma mère, et violer ma sœur. \textls[-5]{Quand les Bulgares furent
+retirés, on ne trouva point cette sœur adorable, et on mit dans une
+charrette ma mère, mon père, et moi, deux servantes et trois petits
+garçons égorgés, pour nous aller enterrer dans une chapelle de
+jésuites, à deux lieues du château de mes pères. Un jésuite nous jeta
+de l’eau bénite; elle était horriblement salée; il en entra quelques
+gouttes dans mes yeux; le père s’aperçut que ma paupière faisait un
+petit mouvement: il mit la main sur mon cœur, et le sentit palpiter;
+je fus secouru, et au bout de trois semaines il n’y paraissait pas.
+Vous savez, mon cher \bname{Candide}, que j’étais fort joli; je le devins
+encore davantage; aussi le révérend père Croust, supérieur de la
+maison, prit pour moi la plus tendre amitié; il me donna l’habit de
+novice; quelque temps après je fus envoyé à Rome. Le père général avait
+besoin d’une recrue de jeunes jésuites allemands. Les
+souverains
+du
+Paraguay reçoivent le moins qu’ils peuvent de jésuites espagnols; ils
+aiment mieux les étrangers, dont ils se croient plus maîtres. Je fus
+jugé propre par le révérend père général pour aller travailler dans
+cette vigne.
+Nous partîmes, un Polonais, un Tyrolien, et moi. Je fus
+honoré, en arrivant, du sous-diaconat et d’une lieutenance: je suis
+aujourd’hui colonel et prêtre. Nous recevrons vigoureusement les
+troupes du roi d’Espagne; je vous réponds qu’elles seront excommuniées
+et battues. La Providence vous envoie ici pour nous seconder. Mais
+est-il bien vrai que ma chère sœur \bname{Cunégonde} soit dans le voisinage,
+chez le gouverneur de \bname{Buenos} Aires?» \bname{Candide} l’assura par serment que
+rien n’était plus vrai. Leurs larmes recommencèrent à couler.}
+
+
+Le baron ne pouvait se lasser d’embrasser \bname{Candide}; il l’appelait son
+frère, son sauveur. «Ah! peut-être, lui dit-il, nous pourrons ensemble,
+mon cher \bname{Candide}, entrer en vainqueurs dans la ville, et reprendre ma
+sœur \bname{Cunégonde}. — C’est tout ce que je souhaite, dit \bname{Candide}; car je
+comptais l’épouser, et je l’espère encore. — Vous, insolent! répondit le
+baron, vous auriez l’impudence d’épouser ma sœur qui a soixante et
+douze quartiers! Je vous trouve bien effronté d’oser me parler d’un
+dessein si téméraire!» \bname{Candide}, pétrifié d’un tel discours, lui
+répondit: «Mon Révérend Père, tous les quartiers du monde n’y font rien;
+j’ai tiré votre sœur des bras d’un Juif et d’un inquisiteur; elle m’a
+assez d’obligations, elle veut m’épouser. Maître \bname{Pangloss} m’a toujours
+dit que les hommes sont égaux; et assurément je l’épouserai. — C’est ce
+que nous verrons, coquin!» dit le jésuite baron de Thunder-ten-tronckh;
+et en même temps il lui donna un grand coup du plat de son épée sur le
+visage. \bname{Candide} dans l’instant tire la sienne, et l’enfonce jusqu’à la
+garde dans le ventre du baron jésuite; mais en la retirant toute
+fumante, il se mit à pleurer: «Hélas! mon Dieu! dit-il, j’ai tué mon
+ancien maître, mon ami, mon beau-frère; je suis le meilleur homme du
+monde, et voilà déjà trois hommes que je tue; et dans ces trois il y a
+deux prêtres.»
+
+\bname{Cacambo}, qui faisait sentinelle à la porte de la feuillée, accourut. «Il
+ne nous reste qu’à vendre cher notre vie, lui dit son maître; on va,
+sans doute, entrer dans la feuillée; il faut mourir les armes à la
+main.» \bname{Cacambo}, qui en avait bien vu d’autres, ne perdit point la tête;
+il prit la robe de jésuite que portait le baron, la mit sur le corps de
+\bname{Candide}, lui donna le bonnet carré du mort, et le fit monter à cheval.
+Tout cela se fit en un clin d’œil. «Galopons, mon maître; tout le monde
+vous prendra pour un jésuite qui va donner des ordres; et nous aurons
+passé les frontières avant qu’on puisse courir après nous.» Il volait
+déjà en prononçant ces paroles, et en criant en espagnol: «Place, place
+pour le révérend père colonel!»
+
+\endinput
+
+
diff --git a/macros/luatex/latex/tango/examples/Ch-16-30.tex b/macros/luatex/latex/tango/examples/Ch-16-30.tex
new file mode 100644
index 0000000000..ca52af53a8
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/Ch-16-30.tex
@@ -0,0 +1,2061 @@
+
+
+\chapter[Ce qui advint aux deux voyageurs…]{Ce qui advint aux deux voyageurs avec deux filles,\\ deux singes, et les
+sauvages nommés Oreillons}
+
+
+\lettrine{C}{andide} et son valet furent au-delà des barrières, et personne ne
+savait encore dans le camp la mort du jésuite allemand. Le vigilant
+\bname{Cacambo} avait eu soin de remplir sa valise de pain, de chocolat, de
+jambon, de fruits, et de quelques mesures de vin. Ils s’enfoncèrent
+avec leurs chevaux andalous dans un pays inconnu où ils ne découvrirent
+aucune route. Enfin une belle prairie entrecoupée de ruisseaux se
+présenta devant eux. Nos deux voyageurs font repaître leurs montures.
+\bname{Cacambo} propose à son maître de manger, et lui en donne l’exemple.
+«Comment veux-tu, disait \bname{Candide}, que je mange du jambon, quand j’ai tué
+le fils de M.~le baron, et que je me vois condamné à ne revoir la
+belle \bname{Cunégonde} de ma vie? à quoi me servira de prolonger mes
+misérables jours, puisque je dois les traîner loin d’elle dans les
+remords et dans le désespoir? et que dira le Journal de Trévoux?»
+
+
+En parlant ainsi, il ne laissa pas de manger. Le soleil se couchait.
+Les deux égarés entendirent quelques petits cris qui paraissaient
+poussés par des femmes. Ils ne savaient si ces cris étaient de douleur
+ou de joie; mais ils se levèrent précipitamment avec cette inquiétude
+et cette alarme que tout inspire dans un pays inconnu. Ces clameurs
+partaient de deux filles toutes nues qui couraient légèrement au bord
+de la prairie, tandis que deux singes les suivaient en leur mordant les
+fesses. \bname{Candide} fut touché de pitié; il avait appris à tirer chez les
+Bulgares, et il aurait abattu une noisette dans un buisson sans toucher
+aux feuilles. Il prend son fusil espagnol à deux coups, tire, et tue
+les deux singes. «Dieu soit loué, mon cher \bname{Cacambo}! j’ai délivré d’un
+grand péril ces deux pauvres créatures: si j’ai commis un péché en
+tuant un inquisiteur et un jésuite, je l’ai bien réparé en sauvant la
+vie à deux filles. Ce sont peut-être deux demoiselles de condition, et
+cette aventure nous peut procurer de très grands avantages dans le
+pays.»
+
+
+Il allait continuer, mais sa langue devint percluse quand il vit ces
+deux filles embrasser tendrement les deux singes, fondre en larmes sur
+leurs corps, et remplir l’air des cris les plus douloureux. «Je ne
+m’attendais pas à tant de bonté d’âme», dit-il enfin à \bname{Cacambo}; lequel
+lui répliqua: «Vous avez fait là un beau chef d’œuvre, mon maître; vous
+avez tué les deux amants de ces demoiselles. — Leurs amants! serait-il
+possible? vous vous moquez de moi, \bname{Cacambo}; le moyen de vous croire?
+— Mon cher maître, repartit \bname{Cacambo}, vous êtes toujours étonné de tout;
+pourquoi trouvez-vous si étrange que dans quelques pays il y ait des
+singes qui obtiennent les bonnes grâces des dames? Ils sont des quarts
+d’homme, comme je suis un quart d’Espagnol. — Hélas! reprit \bname{Candide}, je
+me souviens d’avoir entendu dire à maître \bname{Pangloss} qu’autrefois pareils
+accidents étaient arrivés, et que ces mélanges avaient produit des
+égypans, des faunes, des satyres; que plusieurs grands personnages de
+l’antiquité en avaient vu; mais je prenais cela pour des fables. — Vous
+devez être convaincu à présent, dit \bname{Cacambo}, que c’est une vérité, et
+vous voyez comment en usent les personnes qui n’ont pas reçu une
+certaine éducation; tout ce que je crains, c’est que ces dames ne nous
+fassent quelque méchante affaire.»
+
+Ces réflexions solides engagèrent \bname{Candide} à quitter la prairie, et à
+s’enfoncer dans un bois. Il y soupa avec \bname{Cacambo}; et tous deux, après
+avoir maudit l’inquisiteur de Portugal, le gouverneur de \bname{Buenos} Aires,
+et le baron, s’endormirent sur de la mousse. À leur réveil, ils
+sentirent qu’ils ne pouvaient remuer; la raison en était que pendant la
+nuit les Oreillons, habitants du pays, à qui les deux dames les avaient
+dénoncés, les avaient garrottés avec des cordes d’écorces d’arbre.
+Ils étaient entourés d’une cinquantaine d’Oreillons tout nus, armés de
+flèches, de massues, et de haches de caillou: les uns faisaient bouillir
+une grande chaudière; les autres préparaient des broches, et tous
+criaient: «C’est un jésuite, c’est un jésuite! nous serons vengés, et
+nous ferons bonne chère; mangeons du jésuite, mangeons du jésuite!»
+
+«Je vous l’avais bien dit, mon cher maître, s’écria tristement \bname{Cacambo},
+que ces deux filles nous joueraient d’un mauvais tour.» \bname{Candide}
+apercevant la chaudière et les broches s’écria: «Nous allons
+certainement être rôtis ou bouillis. Ah! que dirait maître \bname{Pangloss},
+s’il voyait comme la pure nature est faite? Tout est bien; soit, mais
+j’avoue qu’il est bien cruel, d’avoir perdu M\up{lle}~\bname{Cunégonde}, et
+d’être mis à la broche par des Oreillons.» \bname{Cacambo} ne perdait jamais la
+tête. «Ne désespérez de rien, dit-il au désolé \bname{Candide}; j’entends un peu
+le jargon de ces peuples, je vais leur parler. — Ne manquez pas, dit
+\bname{Candide}, de leur représenter quelle est l’inhumanité affreuse de faire
+cuire des hommes, et combien cela est peu chrétien.»
+
+«Messieurs, dit \bname{Cacambo}, vous comptez donc manger aujourd’hui un
+jésuite : c’est très bien fait; rien n’est plus juste que de traiter
+ainsi ses ennemis. En effet le droit naturel nous enseigne à tuer notre
+prochain, et c’est ainsi qu’on en agit dans toute la terre. Si nous
+n’usons pas du droit de le manger, c’est que nous avons d’ailleurs de
+quoi faire bonne chère; mais vous n’avez pas les mêmes ressources que
+nous: certainement il vaut mieux manger ses ennemis que
+d’abandonner
+ aux corbeaux et aux corneilles le fruit de sa victoire. Mais,
+messieurs, vous ne voudriez pas manger vos amis. Vous croyez aller
+mettre un jésuite en broche, et c’est votre défenseur, c’est l’ennemi
+de vos ennemis que vous allez rôtir. Pour moi, je suis né dans votre
+pays; monsieur que vous voyez est mon maître, et bien loin d’être
+jésuite, il vient de tuer un jésuite, il en porte les dépouilles; voilà
+le sujet de votre méprise. Pour vérifier ce que je vous dis, prenez sa
+robe, portez-la à la première barrière du royaume de Los Padres;
+informez-vous si mon maître n’a pas tué un officier jésuite. Il vous
+faudra peu de temps; vous pourrez toujours nous manger, si vous trouvez
+que je vous ai menti. Mais, si je vous ai dit la vérité, vous
+connaissez trop les principes du droit public, les mœurs, et les lois,
+pour ne nous pas faire grâce.»
+
+Les Oreillons trouvèrent ce discours très raisonnable; ils députèrent
+deux notables pour aller en diligence s’informer de la vérité; les deux
+députés s’acquittèrent de leur commission en gens d’esprit, et
+revinrent bientôt apporter de bonnes nouvelles. Les Oreillons délièrent
+leurs deux prisonniers, leur firent toutes sortes de civilités, leur
+offrirent des filles, leur donnèrent des rafraîchissements, et les
+reconduisirent jusqu’aux confins de leurs états, en criant avec
+allégresse: «Il n’est point jésuite, il n’est point jésuite!»
+
+\bname{Candide} ne se lassait point d’admirer le sujet de sa délivrance. «Quel
+peuple! disait-il, quels hommes! quelles mœurs! si je n’avais pas eu
+le bonheur de donner un grand coup d’épée au travers du corps du frère
+de M\up{lle}~\bname{Cunégonde}, j’étais mangé sans rémission. Mais, après
+tout, la pure nature est bonne, puisque ces gens-ci, au lieu de me
+manger, m’ont fait mille honnêtetés, dès qu’ils ont su que je n’étais
+pas jésuite.»
+
+
+
+\chapter[Arrivée de \bname{Candide} et de son valet…]{Arrivée de \bname{Candide} et de son valet\\au pays d’Eldorado, et ce qu’ils y
+virent}
+
+
+\lettrine{Q}{uand} ils furent aux frontières des Oreillons: «Vous voyez, dit \bname{Cacambo}
+à \bname{Candide}, que cet hémisphère-ci ne vaut pas mieux que l’autre;
+croyez-moi, retournons en Europe par le plus court chemin. — Comment y
+retourner, dit \bname{Candide}; et où aller? Si je vais dans mon pays, les
+Bulgares et les Abares y égorgent tout; si je retourne en Portugal, j’y
+suis brûlé; si nous restons dans ce pays-ci, nous risquons à tout
+moment d’être mis en broche. Mais comment se résoudre à quitter la
+partie du monde que M\up{lle}~\bname{Cunégonde} habite?
+
+ — Tournons vers la Cayenne, dit \bname{Cacambo}, nous y trouverons des Français
+qui vont par tout le monde; ils pourront nous aider. Dieu aura
+peut-être pitié de nous.»
+
+Il n’était pas facile d’aller à la Cayenne: ils savaient bien à peu
+près de quel côté il fallait marcher; mais des montagnes, des fleuves,
+des précipices, des brigands, des sauvages, étaient partout de
+terribles obstacles. Leurs
+chevaux
+ moururent de fatigue; leurs
+provisions furent consumées; ils se nourrirent un mois entier de fruits
+sauvages, et se trouvèrent enfin auprès d’une petite rivière bordée de
+cocotiers qui soutinrent leur vie et leurs espérances.
+
+\bname{Cacambo}, qui donnait toujours d’aussi bons conseils que la vieille, dit
+à \bname{Candide}: «Nous n’en pouvons plus, nous avons assez marché; j’aperçois
+un canot vide sur le rivage, emplissons-le de cocos, jetons-nous dans
+cette petite barque, laissons-nous aller au courant; une rivière mène
+toujours à quelque endroit habité. Si nous ne trouvons pas des choses
+agréables, nous trouverons du moins des choses nouvelles. — Allons, dit
+\bname{Candide}, recommandons-nous à la \bname{Providence}.»
+
+
+Ils voguèrent quelques lieues entre des bords, tantôt fleuris, tantôt
+arides, tantôt unis, tantôt escarpés. La rivière s’élargissait
+toujours; enfin elle se perdait sous une voûte de rochers épouvantables
+qui s’élevaient jusqu’au ciel. Les deux voyageurs eurent la hardiesse
+de s’abandonner aux flots sous cette voûte. Le fleuve resserré en cet
+endroit les porta avec une rapidité et un bruit horrible. Au bout de
+vingt-quatre heures ils revirent le jour; mais leur canot se fracassa
+contre les écueils; il fallut se traîner de rocher en rocher pendant
+une lieue entière; enfin ils découvrirent un horizon immense, bordé de
+montagnes inaccessibles. Le pays était cultivé pour le plaisir comme
+pour le besoin; partout l’utile était agréable: les chemins étaient
+couverts ou plutôt ornés de voitures d’une forme et d’une matière
+brillante, portant des hommes et des femmes d’une beauté singulière,
+traînés rapidement par de gros moutons rouges qui surpassaient en
+vitesse les plus beaux chevaux d’\bname{Andalousie}, de \bname{Tétuan}, et de \bname{Méquinez}.
+
+
+
+
+«Voilà pourtant, dit \bname{Candide}, un pays qui vaut mieux que la \bname{Westphalie}.»
+Il mit pied à terre avec \bname{Cacambo} auprès du premier village qu’il
+rencontra. Quelques enfants du village, couverts de brocarts d’or tout
+déchirés, jouaient au palet à l’entrée du bourg; nos deux hommes de
+l’autre monde s’amusèrent à les regarder: leurs palets étaient d’assez
+larges pièces rondes, jaunes, rouges, vertes, qui jetaient un éclat
+singulier. Il prit envie aux voyageurs d’en ramasser quelques uns;
+c’était de l’or, c’était des émeraudes, des rubis, dont le moindre
+aurait été le plus grand ornement du trône du Mogol. «Sans doute, dit
+\bname{Cacambo}, ces enfants sont les fils du roi du pays qui jouent au petit
+palet.» Le magister du village parut dans ce moment pour les faire
+rentrer à l’école. «Voilà, dit \bname{Candide}, le précepteur de la famille
+royale.»
+
+Les petits gueux quittèrent aussitôt le jeu, en laissant à terre leurs
+palets, et tout ce qui avait servi à leurs divertissements.\bname{Candide} les
+ramasse, court au précepteur et les lui présente humblement, lui faisant
+entendre par signes que leurs altesses royales avaient oublié leur or
+et leurs pierreries. Le magister du village, en souriant, les jeta par
+terre, regarda un moment la figure de \bname{Candide} avec beaucoup de
+surprise, et continua son chemin.
+
+
+Les voyageurs ne manquèrent pas de ramasser l’or, les rubis, et les
+émeraudes. «Où sommes-nous? s’écria \bname{Candide}. Il faut que les enfants des
+rois de ce pays soient bien élevés, puisqu’on leur apprend à mépriser
+l’or et les pierreries.» \bname{Cacambo} était aussi surpris que \bname{Candide}. Ils
+approchèrent enfin de la première maison du village; elle était bâtie
+comme un palais d’Europe. Une foule de monde s’empressait à la porte,
+et encore plus dans le logis; une musique très agréable se faisait
+entendre, et une odeur délicieuse de cuisine se faisait sentir. \bname{Cacambo}
+s’approcha de la porte, et entendit qu’on parlait péruvien; c’était sa
+langue maternelle; car tout le monde sait que \bname{Cacambo} était né au
+Tucuman, dans un village où l’on ne connaissait que cette langue. «Je
+vous servirai d’interprète, dit-il à \bname{Candide}; entrons, c’est ici un
+cabaret.»
+
+Aussitôt deux garçons et deux filles de l’hôtellerie, vêtus de drap
+d’or, et les cheveux renoués avec des rubans, les invitent à se mettre
+à la table de l’hôte. On servit quatre potages garnis chacun de deux
+perroquets, un contour bouilli qui pesait deux cents livres, deux
+singes rôtis d’un goût excellent, trois cents colibris dans un plat, et
+six cents oiseaux-mouches dans un autre; des ragoûts exquis, des
+pâtisseries délicieuses; le tout dans des plats d’une espèce de cristal
+de roche. Les garçons et les filles de l’hôtellerie versaient plusieurs
+liqueurs faites de cannes de sucre.
+
+Les convives étaient pour la plupart des marchands et des voituriers,
+tous d’une politesse extrême, qui firent quelques questions à \bname{Cacambo}
+avec la discrétion la plus circonspecte, et qui répondirent aux siennes
+d’une manière à le satisfaire.
+
+Quand le repas fut fini, \bname{Cacambo} crut, ainsi que \bname{Candide}, bien payer
+son écot, en jetant sur la table de l’hôte deux de ces larges pièces
+d’or qu’il avait ramassées; l’hôte et l’hôtesse éclatèrent de rire, et
+se tinrent longtemps les côtés. Enfin ils se remirent. «Messieurs, dit
+l’hôte, nous voyons bien que vous êtes des étrangers; nous ne sommes
+pas accoutumés à en voir. Pardonnez-nous si nous nous sommes mis à rire
+quand vous nous avez offert en paiement les cailloux de nos grands
+chemins. Vous n’avez pas sans doute de la monnaie du pays, mais il
+n’est pas nécessaire d’en avoir pour dîner ici. Toutes les hôtelleries
+établies pour la commodité du commerce sont payées par le gouvernement.
+Vous avez fait mauvaise chère ici, parce que c’est un pauvre village,
+mais partout ailleurs vous serez reçus comme vous méritez de l’être.»
+\bname{Cacambo} expliquait à \bname{Candide} tous les discours de l’hôte, et \bname{Candide}
+les écoutait avec la même admiration et le même égarement que son ami
+\bname{Cacambo} les rendait. «Quel est donc ce pays, disaient-ils l’un et
+l’autre, inconnu à tout le reste de la terre, et où toute la nature est
+d’une espèce si différente de la nôtre? C’est probablement le pays où
+tout va bien; car il faut absolument qu’il y en ait un de cette espèce.
+Et, quoi qu’en dît maître \bname{Pangloss}, je me suis souvent aperçu que tout
+allait assez mal en \bname{Westphalie}.»
+
+
+\chapter{Ce qu’ils virent dans le pays d’Eldorado}
+
+
+
+\lettrine{C}{acambo} témoigna à son hôte toute sa curiosité; l’hôte lui dit: «Je suis
+fort ignorant, et je m’en trouve bien; mais nous avons ici un vieillard
+retiré de la cour qui est le plus savant homme du royaume, et le plus
+communicatif.» \textls[5]{Aussitôt il mène \bname{Cacambo} chez le vieillard. \bname{Candide} ne
+jouait plus que le second personnage, et accompagnait son valet. Ils
+entrèrent dans une maison fort simple, car la porte n’était que
+d’argent, et les lambris des appartements n’étaient que d’or, mais
+travaillés avec tant de goût, que les plus riches lambris ne
+l’effaçaient pas. L’antichambre n’était à la vérité incrustée que de
+rubis et d’émeraudes; mais l’ordre dans lequel tout était arrangé
+réparait bien cette extrême simplicité.
+
+Le vieillard reçut les deux étrangers sur un sofa matelassé de plumes
+de colibri, et leur fit présenter des liqueurs dans des vases de
+diamant; après quoi il satisfit à leur curiosité en ces termes:
+
+
+«Je suis âgé de cent soixante et douze ans, et j’ai appris de feu mon
+père, écuyer du roi, les étonnantes révolutions du Pérou dont il avait
+été témoin. Le royaume où nous sommes est l’ancienne patrie des Incas,
+qui en sortirent très imprudemment pour aller subjuguer une partie du
+monde, et qui furent enfin détruits par les Espagnols.
+
+«Les princes de leur famille qui restèrent dans leur pays natal furent
+plus sages; ils ordonnèrent, du consentement de la nation, qu’aucun
+habitant ne sortirait jamais de notre petit royaume; et c’est ce qui
+nous a conservé notre innocence et notre félicité. Les Espagnols ont eu
+une connaissance confuse de ce pays, ils l’ont appelé El Dorado; et un
+\bname{Anglais}, nommé le chevalier Raleigh, en a même approché il y a environ
+cent années; mais, comme nous sommes entourés de rochers inabordables
+et de précipices, nous avons toujours été jusqu’à présent à l’abri de
+la rapacité des nations de l’Europe, qui ont une fureur inconcevable
+pour les cailloux et pour la fange de notre terre, et qui, pour en
+avoir, nous tueraient tous jusqu’au dernier.»
+
+La conversation fut longue; elle roula sur la forme du gouvernement,
+sur les mœurs, sur les femmes, sur les spectacles publics, sur les
+arts. Enfin \bname{Candide}, qui avait
+toujours
+ du goût pour la métaphysique,
+fit demander par \bname{Cacambo} si dans le pays il y avait une religion.
+
+%\looseness=1
+Le vieillard rougit un peu. «Comment donc! dit-il, en pouvez-vous
+douter? Est-ce que vous nous prenez pour des ingrats?» \bname{Cacambo} demanda
+humblement quelle était la religion d’Eldorado. Le vieillard rougit
+encore: «Est-ce qu’il peut y avoir deux religions? dit-il. Nous avons,
+je crois, la religion de tout le monde; nous adorons Dieu du soir
+jusqu’au matin. — N’adorez vous qu’un seul Dieu? dit \bname{Cacambo}, qui servait
+toujours d’interprète aux doutes de \bname{Candide}. — Apparemment, dit le
+vieillard, qu’il n’y en a ni deux, ni trois, ni quatre. Je vous avoue
+que les gens de votre monde font des questions bien singulières.»
+\bname{Candide} ne se lassait pas de faire interroger ce bon vieillard; il
+voulut savoir comment on priait Dieu dans Eldorado. «Nous ne le prions
+point, dit le bon et respectable sage; nous n’avons rien à lui
+demander, il nous a donné tout ce qu’il nous faut; nous le remercions
+sans cesse.» \bname{Candide} eut la curiosité de voir des prêtres; il fit
+demander où ils étaient. Le bon vieillard sourit. «Mes amis, dit-il,
+nous sommes tous prêtres; le roi et tous les chefs de famille chantent
+des
+cantiques d’actions de grâces solennellement tous les matins, et
+cinq ou six mille musiciens les accompagnent.
+
+— Quoi! vous n’avez point
+de moines qui enseignent, qui disputent, qui gouvernent, qui cabalent,
+et qui font brûler les gens qui ne sont pas de leur avis? — Il faudrait
+que nous fussions fous, dit le vieillard; nous sommes tous ici du même
+avis, et nous n’entendons pas ce que vous voulez dire avec vos moines.»
+\bname{Candide} à tous ces discours demeurait en extase, et disait en lui-même:
+«Ceci est bien différent de la \bname{Westphalie} et du château de monsieur le
+baron: si notre ami \bname{Pangloss} avait vu Eldorado, il n’aurait plus dit
+que le château de Thunder-ten-tronckh était ce qu’il y avait de mieux
+sur la terre; il est certain qu’il faut voyager.»
+
+
+Après cette longue conversation, le bon vieillard fit atteler un
+carrosse à six moutons, et donna douze de ses domestiques aux deux
+voyageurs pour les conduire à la cour. «Excusez-moi, leur dit-il, si mon
+âge me prive de l’honneur de vous accompagner. Le roi vous recevra
+d’une manière dont vous ne serez pas mécontents, et vous pardonnerez
+sans doute aux usages du pays, s’il y en a quelques uns qui vous
+déplaisent.»
+
+
+\bname{Candide} et \bname{Cacambo} montent en carrosse; les six moutons volaient, et en
+moins de quatre heures on arriva au palais du roi, situé à un bout de
+la capitale. Le portail était de deux cent vingt pieds de haut, et de
+cent de large; il est impossible d’exprimer quelle en était la matière.
+On voit assez quelle supériorité prodigieuse elle devait avoir sur ces
+cailloux et sur ce sable que nous nommons \emph{or} et {pierreries}.
+
+
+Vingt belles filles de la garde reçurent \bname{Candide} et \bname{Cacambo} à la
+descente du carrosse, les conduisirent aux bains, les vêtirent de robes
+d’un tissu de duvet de colibri; après quoi les grands officiers et les
+grandes officières de la couronne les
+menèrent à l’appartement de Sa
+Majesté au milieu de deux files, chacune de mille musiciens, selon
+l’usage ordinaire. Quand ils approchèrent de la salle du trône, \bname{Cacambo}
+demanda à un grand officier comment il fallait s’y prendre pour saluer
+Sa Majesté: si on se jetait à genoux ou ventre à terre; si on mettait
+les mains sur la tête ou sur le derrière; si on léchait la poussière de
+la salle: en un mot, quelle était la cérémonie. «L’usage, dit le
+grand-officier, est d’embrasser le roi et de le baiser des deux côtés.»
+\bname{Candide} et \bname{Cacambo} sautèrent au cou de Sa Majesté, qui les reçut avec
+toute la grâce imaginable, et qui les pria poliment à souper.
+
+
+En attendant, on leur fit voir la ville, les édifices publics élevés
+jusqu’aux nues, les marchés ornés de mille colonnes, les fontaines
+d’eau pure, les fontaines d’eau rose, celles de liqueurs de canne de
+sucre qui coulaient continuellement dans de grandes places pavées d’une
+espèce de pierreries qui répandaient une odeur semblable à celle du
+girofle et de la cannelle. \bname{Candide} demanda à voir la cour de justice,
+le parlement; on lui dit qu’il n’y en avait point, et qu’on ne plaidait
+jamais. Il s’informa s’il y avait des prisons, et on lui dit que non.
+Ce qui le surprit davantage, et qui lui fit le plus de plaisir, ce fut
+le palais des sciences, dans lequel il vit une galerie de deux mille
+pas, toute pleine d’instruments de mathématiques et de physique.}
+
+
+Après avoir parcouru toute l’après-dinée à peu près la millième partie
+de la ville, on les ramena chez le roi. \bname{Candide} se mit à table entre Sa
+\bname{Majesté}, son valet \bname{Cacambo}, et plusieurs dames. Jamais on ne fit
+meilleure chère, et jamais on n’eut plus d’esprit à souper qu’en eut Sa
+\bname{Majesté}. \bname{Cacambo} expliquait les bons mots du roi à \bname{Candide}, et quoique
+traduits, ils paraissaient toujours des bons mots. De tout ce qui
+étonnait \bname{Candide}, ce n’était pas ce qui l’étonna le moins.
+
+Ils passèrent un mois dans cet hospice. \bname{Candide} ne cessait de dire à
+\bname{Cacambo}: «Il est vrai, mon ami, encore une fois, que le château où je
+suis né ne vaut pas le pays où nous sommes; mais enfin M\up{lle}~\bname{Cunégonde} n’y est pas, et vous avez sans doute quelque maîtresse en
+Europe. Si nous restons ici, nous n’y serons que comme les autres; au
+lieu que si nous retournons dans notre monde, seulement avec douze
+moutons chargés de cailloux d’Eldorado, nous serons plus riches que
+tous les rois ensemble, nous n’aurons plus d’inquisiteurs à craindre,
+et nous pourrons aisément reprendre M\up{lle}~\bname{Cunégonde}.»
+
+Ce discours plut à \bname{Cacambo}; on aime tant à courir, à se faire valoir
+chez les siens, à faire parade de ce qu’on a vu dans ses voyages, que
+les deux heureux résolurent de ne plus l’être, et de demander leur
+congé à Sa Majesté.
+
+«Vous faites une sottise, leur dit le roi: je sais bien que mon pays est
+peu de chose; mais, quand on est passablement quelque part, il faut y
+rester. Je n’ai pas assurément le droit de retenir des étrangers; c’est
+une tyrannie qui n’est ni dans nos mœurs ni dans nos lois; tous les
+hommes sont libres; partez quand vous voudrez, mais la sortie est bien
+difficile. Il est impossible de remonter la rivière rapide sur laquelle
+vous êtes arrivés par miracle, et qui court sous des voûtes de rochers.
+Les montagnes qui entourent tout mon royaume ont dix mille pieds de
+hauteur, et sont droites comme des murailles: elles occupent chacune en
+largeur un espace de plus de dix lieues; on ne peut en descendre que
+par des précipices. Cependant, puisque vous voulez absolument partir,
+je vais donner ordre aux intendants des machines d’en faire une qui
+puisse vous transporter commodément. Quand on vous aura conduits au
+revers des montagnes, personne ne pourra vous accompagner; car mes
+sujets ont fait vœu de ne jamais sortir de leur enceinte, et ils sont
+trop sages pour rompre leur vœu. Demandez-moi d’ailleurs tout ce qu’il
+vous plaira. — Nous ne demandons à Votre Majesté, dit \bname{Cacambo}, que
+quelques moutons chargés de vivres, de cailloux, et de la boue du pays.»
+Le roi rit: «Je ne conçois pas, dit-il, quel goût vos gens d’Europe ont
+pour notre boue jaune: mais emportez-en tant que vous voudrez, et grand
+bien vous fasse.»
+
+Il donna l’ordre sur-le-champ à ses ingénieurs de faire une machine
+pour guinder ces deux hommes extraordinaires hors du royaume. Trois
+mille bons physiciens y travaillèrent; elle fut prête au bout de quinze
+jours, et ne coûta pas plus de vingt millions de livres sterling,
+monnaie du pays. On mit sur la machine \bname{Candide} et \bname{Cacambo}; il y avait
+deux grands moutons rouges sellés et bridés pour leur servir de monture
+quand ils auraient franchi les montagnes, vingt moutons de bât chargés
+de vivres, trente qui portaient des présents de ce que le pays a de
+plus curieux, et cinquante chargés d’or, de pierreries, et de diamants.
+Le roi embrassa tendrement les deux vagabonds.
+
+Ce fut un beau spectacle que leur départ, et la manière ingénieuse dont
+ils furent hissés eux et leurs moutons au haut des montagnes. Les
+physiciens prirent congé d’eux après les avoir mis en sûreté, et
+\bname{Candide} n’eut plus d’autre désir et d’autre objet que d’aller présenter
+ses moutons à M\up{lle}~\bname{Cunégonde}. «Nous avons, dit-il, de quoi payer
+le gouverneur de \bname{Buenos} Aires, si M\up{lle}~\bname{Cunégonde} peut être mise
+à prix. Marchons vers la Cayenne, embarquons-nous, et nous verrons
+ensuite quel royaume nous pourrons acheter.»
+
+
+
+
+\chapter[Ce qui leur arriva à Surinam…]{Ce qui leur arriva à Surinam, et comment \bname{Candide} fit connaissance avec
+\bname{Martin}}
+
+
+\lettrine{L}{a première} journée de nos deux voyageurs fut assez agréable. Ils
+étaient encouragés par l’idée de se voir possesseurs de plus de trésors
+que l’Asie, \bname{l’Europe}, et l’Afrique, n’en pouvaient rassembler. \bname{Candide}
+transporté écrivit le nom de \bname{Cunégonde} sur les arbres. À la seconde
+journée deux de leurs moutons s’enfoncèrent dans des marais, et y
+furent abîmés avec leurs charges; deux autres moutons moururent de
+fatigue quelques jours après; sept ou huit périrent ensuite de faim
+dans un désert; d’autres tombèrent au bout de quelques jours dans des
+précipices. Enfin, après cent jours de marche, il ne leur resta que
+deux moutons. \bname{Candide} dit à \bname{Cacambo}: «Mon ami, vous voyez comme les
+richesses de ce monde sont périssables; il n’y a rien de solide que la
+vertu et le bonheur de revoir M\up{lle}~\bname{Cunégonde}. — Je l’avoue, dit
+\bname{Cacambo}; mais il nous reste encore deux moutons avec plus de trésors
+que n’en aura jamais le roi d’Espagne; et je vois bien de loin une
+ville que je soupçonne être Surinam, appartenante aux Hollandais. Nous
+sommes au bout de nos peines et au commencement de notre félicité.»
+
+%\looseness=1
+En approchant de la ville, ils rencontrèrent un nègre étendu par terre,
+n’ayant plus que la moitié de son habit, c’est-à-dire d’un caleçon de
+toile bleue; il manquait à ce pauvre homme la jambe gauche et la main
+droite. «Eh! mon Dieu! lui dit \bname{Candide} en hollandais, que fais-tu là,
+mon ami, dans l’état horrible où je te vois? — J’attends mon maître, M.~\bname{Vanderdendur}, le fameux négociant, répondit le nègre. — Est-ce M.~\bname{Vanderdendur}, dit \bname{Candide}, qui t’a traité ainsi? — Oui, monsieur, dit le
+nègre, c’est l’usage. On nous donne un caleçon de toile pour tout
+vêtement deux fois l’année. Quand nous travaillons aux sucreries, et
+que la meule nous attrape le doigt, on nous coupe la main: quand nous
+voulons nous enfuir, on nous coupe la jambe: je me suis trouvé dans les
+deux cas. C’est à ce prix que vous mangez du sucre en Europe.
+Cependant, lorsque ma mère me vendit dix écus patagons sur la côte de
+Guinée, elle me disait: \frquote{\localleftbox{« }Mon cher enfant, bénis nos fétiches, adore-les
+toujours, ils te feront vivre heureux; tu as l’honneur d’être esclave
+de nos seigneurs les blancs, et tu fais par là la fortune de ton père
+et de ta mère.}\localleftbox{} Hélas! je ne sais pas si j’ai fait leur fortune, mais
+ils n’ont pas fait la mienne. Les chiens, les singes, et les
+perroquets, sont mille fois moins malheureux que nous: les fétiches
+hollandais qui m’ont converti me disent tous les dimanches que nous
+sommes tous enfants d’Adam, blancs et noirs. Je ne suis pas
+généalogiste; mais si ces prêcheurs disent vrai, nous sommes tous
+cousins issus de germain. Or vous m’avouerez qu’on ne peut pas en user
+avec ses parents d’une manière \linebreak plus horrible.
+
+
+— Ô \bname{Pangloss}! s’écria \bname{Candide}, tu n’avais pas deviné cette abomination;
+c’en est fait, il faudra qu’à la fin je renonce à ton optimisme.
+— Qu’est-ce qu’optimisme? disait \bname{Cacambo}. — Hélas! dit \bname{Candide}, c’est la
+rage de soutenir que tout est bien quand on est mal»; et il versait des
+larmes en regardant son nègre; et en pleurant, il entra dans \bname{Surinam}.
+
+La première chose dont ils s’informent, c’est s’il n’y a point au port
+quelque vaisseau qu’on pût envoyer à \bname{Buenos} Aires. Celui à qui ils
+s’adressèrent était justement un patron espagnol qui s’offrit à faire
+avec eux un marché honnête. Il leur donna rendez-vous dans un cabaret.
+\bname{Candide} et le fidèle \bname{Cacambo} allèrent l’y attendre avec leurs deux
+moutons.
+
+
+\bname{Candide}, qui avait le cœur sur les lèvres, conta à \bname{l’Espagnol} toutes
+ses aventures, et lui avoua qu’il voulait enlever mademoiselle
+\bname{Cunégonde}. «Je me garderai bien de vous passer à \bname{Buenos} Aires, dit le
+patron: je serais pendu, et vous aussi; la belle \bname{Cunégonde} est la
+maîtresse favorite de monseigneur.» Ce fut un coup de foudre pour
+\bname{Candide}, il pleura longtemps; enfin il tira à part \bname{Cacambo}. «Voici, mon
+cher ami, lui dit-il, ce qu’il faut que tu fasses. Nous avons chacun
+dans nos poches pour cinq ou six millions de diamants, tu es plus
+habile que moi; va prendre M\up{lle}~\bname{Cunégonde} à \bname{Buenos} Aires. Si le
+gouverneur fait quelque difficulté, donne-lui un million: s’il ne se
+rend pas, donne-lui-en deux; tu n’as point tué d’inquisiteur, on ne se
+défiera point de toi. J’équiperai un autre vaisseau, j’irai t’attendre
+à \bname{Venise}: c’est un pays libre où l’on n’a rien à craindre ni des
+Bulgares, ni des Abares, ni des Juifs, ni des inquisiteurs.» \bname{Cacambo}
+applaudit, à cette sage résolution. Il était au désespoir de se séparer
+d’un bon maître devenu son ami intime; mais le plaisir de lui être
+utile l’emporta sur la douleur de le quitter. Ils s’embrassèrent en
+versant des larmes: \bname{Candide} lui recommanda de ne point oublier la bonne
+vieille. \bname{Cacambo} partit dès le jour même: c’était un très bon homme que
+ce \bname{Cacambo}.
+
+\bname{Candide} resta encore quelque temps à Surinam, et attendit qu’un autre
+patron voulût le mener en Italie lui et les deux moutons qui lui
+restaient. Il prit des domestiques, et acheta tout ce qui lui était
+nécessaire pour un long voyage; enfin M.~\bname{Vanderdendur}, maître d’un gros
+vaisseau, vint se présenter à lui. «Combien voulez-vous, demanda-t-il à
+cet homme, pour me mener en droiture à \bname{Venise}, moi, mes gens, mon
+bagage, et les deux moutons que voilà?» Le patron s’accorda à dix mille
+piastres: \bname{Candide} n’hésita pas.
+
+
+«Oh! oh! dit à part soi le prudent Vanderdendur, cet étranger donne dix
+mille piastres tout d’un coup! il faut qu’il soit bien riche.» Puis
+revenant un moment après, il signifia qu’il ne pouvait partir à moins
+de vingt mille. «Eh bien! vous les aurez, dit \bname{Candide}.
+
+«Ouais, se dit tout bas le marchand, cet homme donne vingt mille
+piastres aussi aisément que dix mille.» Il revint encore, et dit qu’il
+ne pouvait le conduire à \bname{Venise} à moins de trente mille piastres. «Vous
+en aurez donc trente mille», répondit \bname{Candide}.
+
+«Oh! oh! se dit encore le marchand hollandais, trente mille piastres ne
+coûtent rien à cet homme-ci; sans doute les deux moutons portent des
+trésors immenses; n’insistons pas davantage: faisons-nous d’abord payer
+les trente mille piastres, et puis nous verrons.» \bname{Candide}, vendit deux
+petits diamants, dont le moindre valait plus que tout l’argent que
+demandait le patron. Il le paya d’avance. Les deux moutons furent
+embarqués. \bname{Candide} suivait dans un petit bateau pour joindre le
+vaisseau à la rade; le patron prend son temps, met à la voile, démarre;
+le vent le favorise. \bname{Candide} éperdu et stupéfait le perd bientôt de
+vue. «Hélas! cria-t-il, voilà un tour digne de l’Ancien Monde.» Il
+retourne au rivage, abîmé dans la douleur; car enfin il avait perdu de
+quoi faire la fortune de vingt monarques.
+
+Il se transporte chez le juge hollandais; et, comme il était un peu
+troublé, il frappe rudement à la porte; il entre, expose son aventure,
+et crie un peu plus haut qu’il ne convenait. Le juge commença par lui
+faire payer dix mille piastres pour le bruit qu’il avait fait: ensuite
+il l’écouta patiemment, lui promit d’examiner son affaire sitôt que le
+marchand serait revenu, et se fit payer dix mille autres piastres pour
+les frais de l’audience.
+
+Ce procédé acheva de désespérer \bname{Candide}; il avait à la vérité essuyé
+des malheurs mille fois plus douloureux; mais le sang froid du juge, et
+celui du patron dont il était volé, alluma sa bile, et le plongea dans
+une noire
+mélancolie. La méchanceté des hommes se présentait à son
+esprit dans toute sa laideur, il ne se nourrissait que d’idées tristes.
+Enfin un vaisseau français étant sur le point de partir pour Bordeaux,
+comme il n’avait plus de moutons chargés de diamants à embarquer, il
+loua une chambre du vaisseau à juste prix, et fit signifier dans la
+ville qu’il paierait le passage, la nourriture, et donnerait deux mille
+piastres à un honnête homme qui voudrait faire le voyage avec lui, à
+condition que cet homme serait le plus dégoûté de son état, et le plus
+malheureux de la province.
+
+
+Il se présenta une foule de prétendants qu’une flotte n’aurait pu
+contenir. \bname{Candide}, voulant choisir entre les plus apparents, il
+distingua une vingtaine de personnes qui lui paraissaient sociables, et
+qui toutes prétendaient mériter la préférence. Il les assembla dans son
+cabaret, et leur donna à souper, à condition que chacun ferait serment
+de raconter fidèlement son histoire, promettant de choisir celui qui
+lui paraîtrait le plus à plaindre et le plus mécontent de son état, à
+plus juste titre, et de donner aux autres quelques gratifications.
+
+La séance dura jusqu’à quatre heures du matin. \bname{Candide}, en écoutant
+toutes leurs aventures, se ressouvenait de ce que lui avait dit la
+vieille en allant à \bname{Buenos} Aires, et de la gageure qu’elle avait faite,
+qu’il n’y avait personne sur le vaisseau à qui il ne fût arrivé de très
+grands malheurs. Il songeait à \bname{Pangloss} à chaque aventure qu’on lui
+contait. Ce \bname{Pangloss}, disait-il, serait bien embarrassé à démontrer son
+système. Je voudrais qu’il fût ici. Certainement si tout va bien, c’est
+dans Eldorado, et non pas dans le reste de la terre. Enfin il se
+détermina en faveur d’un pauvre savant qui avait travaillé dix ans pour
+les libraires à Amsterdam. Il jugea qu’il n’y avait point de métier au
+monde dont on dût être plus dégoûté.
+
+Ce savant, qui était d’ailleurs un bon homme, avait été volé par sa
+femme, battu par son fils, et abandonné de sa fille, qui s’était fait
+enlever par un Portugais. Il venait d’être privé d’un petit emploi
+duquel il subsistait; et les prédicants de Surinam le persécutaient,
+parce qu’ils le prenaient pour un socinien. Il faut avouer que les
+autres étaient pour le moins aussi malheureux que lui; mais \bname{Candide}
+espérait que le \bname{savant} le désennuierait dans le voyage. Tous ses autres
+rivaux trouvèrent que \bname{Candide} leur faisait une grande injustice; mais il
+les apaisa en leur donnant à chacun cent piastres.
+
+
+
+\chapter{Ce qui arriva sur mer à \bname{Candide} et à \bname{Martin}}
+
+
+\lettrine{L}{e vieux} savant, qui s’appelait \bname{Martin}, s’embarqua donc pour Bordeaux
+avec \bname{Candide}. L’un et l’autre avaient beaucoup vu et beaucoup souffert;
+et quand le vaisseau aurait dû faire voile de Surinam au Japon par le
+cap de Bonne-Espérance, ils auraient eu de quoi s’entretenir du mal
+moral et du mal physique pendant tout le voyage.
+
+
+Cependant \bname{Candide} avait un grand avantage sur \bname{Martin}, c’est qu’il
+espérait toujours revoir M\up{lle}~\bname{Cunégonde}, et que \bname{Martin} n’avait
+rien à espérer; de plus il avait de l’or et des diamants; et, quoiqu’il
+eût perdu cent gros moutons rouges chargés des plus grands trésors de
+la terre, quoiqu’il eût toujours sur le cœur la friponnerie du patron
+hollandais, cependant quand il songeait à ce qui lui restait dans ses
+poches, et quand il parlait de \bname{Cunégonde}, surtout à la fin du repas, il
+penchait alors pour le système de \bname{Pangloss}.
+
+
+«Mais vous, monsieur \bname{Martin}, dit-il au savant, que pensez-vous de tout
+cela? quelle est votre idée sur le mal moral et le mal physique?
+— Monsieur, répondit \bname{Martin}, mes prêtres m’ont accusé d’être socinien;
+mais la vérité du fait est que je suis manichéen. — Vous vous moquez
+de moi, dit \bname{Candide}; il n’y a plus de manichéens dans le monde. — Il y a
+moi, dit \bname{Martin}: je ne sais qu’y faire; mais je ne peux penser
+autrement. — Il faut que vous ayez le diable au corps, dit \bname{Candide}. — Il se
+mêle si fort des affaires de ce monde, dit \bname{Martin}, qu’il pourrait bien
+être dans mon corps, comme partout ailleurs; mais je vous avoue qu’en
+jetant la vue sur ce globe, ou plutôt sur ce globule, je pense que Dieu
+l’a abandonné à quelque être malfaisant; j’en excepte toujours
+Eldorado. Je n’ai guère vu de ville qui ne désirât la ruine de la ville
+voisine, point de famille qui ne voulût exterminer quelque autre
+famille. Partout les faibles ont en exécration les puissants devant
+lesquels ils rampent, et les puissants les traitent comme des troupeaux
+dont on vend la laine et la chair. Un million d’assassins enrégimentés,
+courant d’un bout de \bname{l’Europe} à
+ l’autre, exerce le meurtre et le
+brigandage avec discipline pour gagner son pain, parce qu’il n’a pas de
+métier plus honnête; et dans les villes qui paraissent jouir de la
+paix, et où les arts fleurissent, les hommes sont dévorés de plus
+d’envie, de soins, et d’inquiétudes, qu’une ville assiégée n’éprouve de
+fléaux. Les chagrins secrets sont encore plus cruels que les misères
+publiques. En un mot j’en ai tant vu et tant éprouvé, que \linebreak je suis
+manichéen.
+
+
+
+— Il y a pourtant du bon, répliquait \bname{Candide}. — Cela peut être, disait
+\bname{Martin}; mais je ne le connais pas.»
+
+
+
+Au milieu de cette dispute, on entendit un bruit de canon. Le bruit
+redouble de moment en moment. Chacun prend sa lunette. On aperçoit deux
+vaisseaux qui combattaient à la distance d’environ trois milles: le
+vent les amena l’un et l’autre si près du vaisseau français, qu’on eut
+le plaisir de voir le combat tout à son aise. Enfin l’un des deux
+vaisseaux lâcha à l’autre une bordée si bas et si juste, qu’il le coula
+à fond. \bname{Candide} et \bname{Martin} aperçurent distinctement une centaine
+d’hommes sur le tillac du vaisseau qui s’enfonçait; ils levaient tous
+les mains au ciel, et jetaient des clameurs effroyables; en un moment
+tout fut englouti.
+
+Eh bien! dit \bname{Martin}, voilà comme les hommes se traitent les uns les
+autres. Il est vrai, dit \bname{Candide}, qu’il y a quelque chose de diabolique
+dans cette affaire. En parlant ainsi, il aperçut je ne sais quoi d’un
+rouge éclatant, qui nageait auprès de son vaisseau. On détacha la
+chaloupe pour voir ce que ce pouvait être; c’était un de ses moutons.
+\bname{Candide} eut plus de joie de retrouver ce mouton, qu’il n’avait été
+affligé d’en perdre cent tous chargés de gros diamants d’Eldorado.
+
+Le capitaine français aperçut bientôt que le capitaine du vaisseau
+submergeant était espagnol, et que celui du vaisseau submergé était un
+pirate hollandais; c’était celui-là même qui avait volé \bname{Candide}. Les
+richesses immenses dont ce scélérat s’était emparé furent ensevelies
+avec lui dans la mer, et il n’y eut qu’un mouton de sauvé. «Vous voyez,
+dit \bname{Candide} à \bname{Martin}, que le crime est puni quelquefois; ce coquin de
+patron hollandais a eu le sort qu’il méritait. — Oui, dit \bname{Martin}; mais
+fallait-il que les passagers qui étaient sur son vaisseau périssent
+aussi? Dieu a puni ce fripon, le diable a noyé \linebreak les autres.»
+
+Cependant le vaisseau français et l’espagnol continuèrent leur route,
+et \bname{Candide} continua ses conversations avec \bname{Martin}. Ils disputèrent
+quinze jours de suite, et au bout de quinze jours ils étaient aussi
+avancés que le premier. Mais enfin ils parlaient, ils se communiquaient
+des idées, ils se consolaient. \bname{Candide} caressait son mouton. «Puisque je
+t’ai retrouvé, dit-il, je pourrai bien retrouver \bname{Cunégonde}.»
+
+
+
+\chapter[Candide et \bname{Martin} approchent des côtes…]{Candide et \bname{Martin} approchent des côtes\\ de France, et raisonnent.}
+
+
+\lettrine{O}{n aperçut} enfin les côtes de France. «Avez-vous jamais été en France,
+monsieur \bname{Martin}? dit \bname{Candide}. — Oui, dit \bname{Martin}, j’ai parcouru plusieurs
+provinces. Il y en a où la moitié des habitants est folle, quelques
+unes où l’on est trop rusé, d’autres où l’on est communément assez doux
+et assez bête, d’autres où l’on fait le bel esprit; et, dans toutes, la
+principale occupation est l’amour, la seconde, de médire; et la
+troisième, de dire des sottises. — Mais, monsieur \bname{Martin}, avez-vous vu
+Paris? — Oui, j’ai vu Paris; il tient de toutes ces espèces-là; c’est un
+chaos, c’est une presse dans laquelle tout le monde cherche le plaisir,
+et où presque personne ne le trouve, du moins à ce qu’il m’a paru. J’y
+ai séjourné peu; j’y fus volé, en arrivant, de tout ce que j’avais, par
+des filous, à la foire Saint-Germain; on me prit moi-même pour un
+voleur, et je fus huit jours en prison; après quoi je me fis correcteur
+d’imprimerie pour gagner de quoi retourner à pied en \bname{Hollande}. Je
+connus la canaille écrivante, la canaille cabalante, et la canaille
+convulsionnaire. On dit qu’il y a des gens fort polis dans cette
+ville-là: je le veux croire.
+
+— Pour moi, je n’ai nulle curiosité de voir la France, dit \bname{Candide}; vous
+devinez aisément que quand on a passé un mois dans Eldorado, on ne se
+soucie plus de rien voir sur la terre que M\up{lle}~\bname{Cunégonde}; je
+vais l’attendre à \bname{Venise}; nous
+traverserons
+ la France pour aller en
+Italie; ne m’accompagnerez-vous pas? — Très volontiers, dit \bname{Martin}: on
+dit que \bname{Venise} n’est bonne que pour les nobles Vénitiens, mais que
+cependant on y reçoit très bien les étrangers quand ils ont beaucoup
+d’argent; je n’en ai point; vous en avez, je vous suivrai partout. — À
+propos, dit \bname{Candide}, pensez-vous que la terre ait été originairement
+une mer, comme on l’assure dans ce gros livre qui appartient au
+capitaine du vaisseau? — Je n’en crois rien du tout, dit \bname{Martin}, non
+plus que de toutes les rêveries qu’on nous débite depuis quelque temps.
+— Mais à quelle fin ce monde a-t-il donc été formé? dit \bname{Candide}. — Pour
+nous faire enrager, répondit \bname{Martin}. — N’êtes-vous pas bien étonné,
+continua \bname{Candide}, de l’amour que ces deux filles du pays des Oreillons
+avaient pour ces deux singes, et dont je vous ai conté l’aventure?
+— Point du tout, dit \bname{Martin}, je ne vois pas ce que cette passion a
+d’étrange; j’ai tant vu de choses extraordinaires, qu’il n’y a plus
+rien d’extraordinaire pour moi. — Croyez-vous, dit \bname{Candide}, que les
+hommes se soient toujours mutuellement massacrés comme ils font
+aujourd’hui? qu’ils aient toujours été menteurs, fourbes, perfides,
+ingrats, brigands, faibles, volages, lâches, envieux, gourmands,
+ivrognes, avares, ambitieux, sanguinaires, calomniateurs, débauchés,
+fanatiques, hypocrites, et sots? — Croyez-vous, dit \bname{Martin}, que les
+éperviers aient toujours mangé des pigeons quand ils en ont trouvé?
+— Oui, sans doute, dit \bname{Candide}. — Eh bien! dit \bname{Martin}, si les éperviers ont
+toujours eu le même caractère, pourquoi voulez-vous que les hommes
+aient changé le leur? — Oh! dit \bname{Candide}, il y a bien de la différence,
+car le libre arbitre…» En raisonnant ainsi, ils arrivèrent à Bordeaux.
+
+
+
+\chapter[Ce qui arriva en France…]{Ce qui arriva en France à Candide et à \bname{Martin}}
+
+
+
+\lettrine{C}{andide} ne s’arrêta dans Bordeaux qu’autant de temps qu’il en fallait
+pour vendre quelques cailloux du \bname{Dorado}, et pour s’accommoder d’une
+bonne chaise à deux places; car il ne pouvait plus se passer de son
+philosophe \bname{Martin}; il fut seulement très fâché de se séparer de son
+mouton, qu’il laissa à l’académie des sciences de Bordeaux, laquelle
+proposa pour le sujet du prix de cette année de trouver pourquoi la
+laine de ce mouton était rouge; et le prix fut adjugé à un savant du
+Nord, qui démontra par A, plus B, moins C divisé par Z, que le mouton
+devait être rouge, et mourir de la clavelée.
+
+
+
+Cependant tous les voyageurs que \bname{Candide} rencontra dans les cabarets de
+la route lui disaient: «Nous allons à Paris.» Cet empressement général
+lui donna enfin l’envie de voir cette capitale; ce n’était pas beaucoup
+se détourner du chemin de \bname{Venise}.
+
+Il entra par le faubourg Saint-Marceau, et crut être dans le plus
+vilain village de la \bname{Westphalie}.
+
+
+À peine \bname{Candide} fut-il dans son auberge, qu’il fut attaqué d’une
+maladie légère, causée par ses fatigues. Comme il avait au doigt un
+diamant énorme, et qu’on avait aperçu dans son équipage une cassette
+prodigieusement pesante, il eut aussitôt auprès de lui deux médecins
+qu’il n’avait pas mandés, quelques amis intimes qui ne le quittèrent
+pas, et deux dévotes qui faisaient chauffer ses bouillons. \bname{Martin}
+disait: «Je me souviens d’avoir été malade aussi à Paris dans mon
+premier voyage; j’étais fort pauvre: aussi n’eus-je ni amis, ni
+dévotes, ni médecins, et je guéris.»
+
+Cependant, à force de médecines et de saignées, la maladie de \bname{Candide}
+devint sérieuse. Un habitué du quartier vint avec douceur lui demander
+un billet payable au porteur pour l’autre monde: \bname{Candide} n’en voulut
+rien faire; les dévotes l’assurèrent que c’était une nouvelle mode:
+\bname{Candide} répondit qu’il n’était point homme à la mode. \bname{Martin} voulut
+jeter l’habitué par les fenêtres. Le clerc jura qu’on n’enterrerait
+point \bname{Candide}. \bname{Martin} jura qu’il enterrerait le clerc, s’il continuait
+à les importuner. La querelle s’échauffa: \bname{Martin} le prit par les
+épaules, et le chassa rudement; ce qui causa un grand scandale, dont on
+fit un procès-verbal.
+
+\bname{Candide} guérit; et pendant sa convalescence il eut très bonne compagnie
+à souper chez lui. On jouait gros jeu. \bname{Candide} était tout étonné que
+jamais les as ne lui vinssent; et \bname{Martin} ne s’en étonnait pas.
+
+Parmi ceux qui lui faisaient les honneurs de la ville, il y avait un
+petit abbé périgourdin, l’un de ces gens empressés, toujours alertes,
+toujours serviables, effrontés, caressants, accommodants, qui guettent
+les étrangers à leur passage, leur content l’histoire scandaleuse de la
+ville, et leur offrent des plaisirs à tout prix. Celui-ci mena d’abord
+\bname{Candide} et \bname{Martin} à la comédie. On y jouait une tragédie nouvelle.
+\bname{Candide} se trouva placé auprès de quelques beaux esprits. Cela ne
+l’empêcha pas de pleurer à des scènes jouées parfaitement. Un des
+raisonneurs qui étaient à ses côtés lui dit dans un entr’acte: «Vous
+avez grand tort de pleurer, cette actrice est fort mauvaise; l’acteur
+qui joue avec elle est plus mauvais acteur encore; la pièce est encore
+plus mauvaise que les acteurs; l’auteur ne sait pas un mot d’arabe, et
+cependant la scène est en \bname{Arabie}; et, de plus, c’est un homme qui ne
+croit pas aux idées innées; je vous apporterai demain vingt
+brochures
+contre lui. — Monsieur, combien avez-vous de pièces de théâtre en
+France?» dit \bname{Candide} à l’abbé; lequel répondit: «Cinq ou six mille. — C’est
+beaucoup, dit \bname{Candide}: combien y en a-t-il de bonnes? —Quinze ou seize,
+répliqua l’autre. — C’est beaucoup», dit \bname{Martin}.
+
+
+
+\bname{Candide} fut très content d’une actrice qui faisait la reine Élisabeth,
+dans une assez plate tragédie, que l’on joue quelquefois. «Cette
+actrice, dit-il à \bname{Martin}, me plaît beaucoup; elle a un faux air de
+M\up{lle}~\bname{Cunégonde}; je serais bien aise de la saluer.» L’abbé
+périgourdin s’offrit à l’introduire chez elle. \bname{Candide}, élevé en
+\bname{Allemagne}, demanda quelle était l’étiquette, et comment on traitait en
+France les reines d’Angleterre. «Il faut distinguer, dit l’abbé: en
+province, on les mène au cabaret; à Paris, on les respecte quand elles
+sont belles, et on les jette à la voirie quand elles sont mortes. — Des
+reines à la voirie! dit \bname{Candide}. — Oui vraiment, dit \bname{Martin}; monsieur
+l’abbé a raison; j’étais à Paris quand M\up{lle}~Monime passa,
+comme on dit, de cette vie à l’autre; on lui refusa, ce que ces gens-ci
+appellent les \emph{honneurs de la sépulture}, c’est-à-dire de pourrir avec
+tous les gueux du quartier dans un vilain cimetière; elle fut enterrée
+toute seule de sa bande au coin de la rue de Bourgogne; ce qui dut lui
+faire une peine extrême, car elle pensait très noblement. — Cela est bien
+impoli, dit \bname{Candide}. — Que voulez-vous? dit \bname{Martin}; ces gens-ci sont
+ainsi faits. Imaginez toutes les contradictions, toutes les
+incompatibilités possibles, vous les verrez dans le gouvernement, dans
+les tribunaux, dans les églises, dans les spectacles de cette drôle de
+nation. — Est-il vrai qu’on rit toujours à Paris? dit \bname{Candide}. — Oui, dit
+l’abbé, mais c’est en enrageant; car on s’y plaint de tout avec de
+grands éclats de rire; même on y fait en riant les actions les plus
+\linebreak détestables.
+
+
+
+— Quel est, dit \bname{Candide}, ce gros cochon qui me disait tant de mal de la
+pièce où j’ai tant pleuré, et des acteurs qui m’ont fait tant de
+plaisir? — C’est un mal-vivant, répondit l’abbé, qui gagne sa vie à dire
+du mal de toutes les pièces et de tous les livres; il hait quiconque
+réussit, comme les eunuques haïssent les jouissants; c’est un de ces
+serpents de la littérature qui se nourrissent de fange et de venin;
+c’est un folliculaire. — Qu’appelez-vous folliculaire? dit \bname{Candide}.
+— C’est, dit l’abbé, un faiseur de feuilles, un \emph{Fréron}.»
+
+C’est ainsi que \bname{Candide}, \bname{Martin}, et le Périgourdin, raisonnaient sur
+l’escalier, en voyant défiler le monde au sortir de la pièce. «Quoique
+je sois très empressé de revoir M\up{lle}~\bname{Cunégonde}, dit \bname{Candide}, je
+voudrais pourtant souper avec M\up{lle}~Clairon, car elle m’a paru
+admirable.»
+
+L’abbé n’était pas homme à approcher de M\up{lle}~\bname{Clairon}, qui ne
+voyait que bonne compagnie. «Elle est engagée pour ce soir, dit-il; mais
+j’aurai l’honneur de vous mener chez une dame de qualité, et là vous
+connaîtrez Paris comme si vous y aviez été quatre ans.»
+
+\bname{Candide}, qui était naturellement curieux, se laissa mener chez la dame,
+au fond du faubourg Saint-Honoré; on y était occupé d’un pharaon; douze
+tristes pontes tenaient chacun en main un petit livre de cartes,
+registre cornu de leurs infortunes. Un profond silence régnait, la
+pâleur était sur le front des pontes, l’inquiétude sur celui du
+banquier; et la dame du logis, assise auprès de ce banquier
+impitoyable, remarquait avec des yeux de lynx tous les parolis, tous
+les sept et le va de campagne, dont chaque joueur cornait ses cartes;
+elle les faisait décorner avec une attention sévère, mais polie, et ne
+se fâchait point, de peur de perdre ses pratiques. La dame se faisait
+appeler la marquise de Parolignac. Sa fille, âgée de quinze ans, était
+au nombre des pontes, et avertissait d’un clin d’œil des friponneries
+de ces pauvres gens qui tâchaient de réparer les cruautés du sort.
+L’abbé périgourdin, \bname{Candide}, et \bname{Martin}, entrèrent; personne ne se leva,
+ni les salua, ni les regarda; tous étaient profondément occupés de
+leurs cartes. «M\up{me} la baronne de Thunder-ten-tronckh était plus
+civile», dit \bname{Candide}.
+
+Cependant l’abbé s’approcha de l’oreille de la marquise, qui se leva à
+moitié, honora \bname{Candide} d’un sourire gracieux, et \bname{Martin} d’un air de
+tête tout-à-fait noble; elle fit donner un siège et un jeu de cartes à
+\bname{Candide}, qui perdit cinquante mille francs en deux tailles: après quoi
+on soupa très gaiement; et tout le monde était étonné que \bname{Candide} ne
+fût pas ému de sa perte; les laquais disaient entre eux, dans leur
+langage de laquais: «Il faut que ce soit quelque milord anglais.» Le
+souper fut comme la plupart des soupers de Paris, d’abord du silence,
+ensuite un bruit de paroles qu’on ne distingue point, puis des
+plaisanteries dont la plupart sont insipides, de fausses nouvelles, de
+mauvais raisonnements, un peu de politique, et beaucoup de médisance;
+on parla même de livres nouveaux. «Avez-vous vu, dit l’abbé périgourdin,
+le roman du sieur Gauchat, docteur en théologie? — Oui, répondit un des
+convives, mais je n’ai pu l’achever. Nous avons une foule d’écrits
+impertinents; mais tous ensemble n’approchent pas de l’impertinence de
+\bname{Gauchat}, docteur en théologie; je suis si rassasié de cette
+immensité de détestables livres qui nous inondent, que je me suis mis à
+ponter au pharaon. — Et les \emph{\bname{Mélanges}} de l’archidiacre Trublet, qu’en
+dites-vous? dit l’abbé. — Ah! dit M\up{me} de Parolignac, l’ennuyeux
+mortel! comme il vous dit curieusement ce que tout le monde sait! comme
+il discute pesamment ce qui ne vaut pas la peine d’être remarqué
+légèrement! comme il s’approprie, sans esprit, l’esprit des autres!
+comme il gâte ce qu’il pille! comme il me dégoûte! mais il ne me
+dégoûtera plus; c’est assez d’avoir lu quelques pages de l’archidiacre.»
+
+
+Il y avait à table un homme savant et de goût qui appuya ce que disait
+la marquise. On parla ensuite de
+tragédies;
+ la dame demanda pourquoi il
+y avait des tragédies qu’on jouait quelquefois, et qu’on ne pouvait
+lire. L’homme de goût expliqua très bien comment une pièce pouvait
+avoir quelque intérêt, et n’avoir presque aucun mérite; il prouva en
+peu de mots que ce n’était pas assez d’amener une ou deux de ces
+situations qu’on trouve dans tous les romans, et qui séduisent toujours
+les spectateurs; mais qu’il faut être neuf sans être bizarre, souvent
+sublime et toujours naturel, connaître le cœur humain et le faire
+parler; être grand poète, sans que jamais aucun personnage de la pièce
+paraisse poète; savoir parfaitement sa langue, la parler avec pureté,
+avec une harmonie continue, sans que jamais la rime coûte rien au sens.
+«\bname{Quiconque}, ajouta-t-il,
+n’observe
+ pas toutes ces règles, peut faire une
+ou deux tragédies applaudies au théâtre, mais il ne sera jamais compté
+au rang des bons écrivains; il y a très peu de bonnes tragédies: les
+unes sont des idylles en dialogues bien écrits et bien rimés; les
+autres, des raisonnements politiques qui endorment, ou des
+amplifications qui rebutent; les autres, des rêves d’énergumène, en
+style barbare, des propos interrompus, de longues apostrophes aux
+dieux, parce qu’on ne sait point parler aux hommes, des maximes fausses,
+des lieux communs ampoulés.»
+
+
+\bname{Candide} écouta ce propos avec attention, et conçut une grande idée du
+discoureur; et, comme la marquise avait eu soin de le placer à côté
+d’elle, il s’approcha de son oreille, et prit la liberté de lui
+demander qui était cet homme qui parlait si bien. «C’est un savant, dit
+la dame, qui ne ponte point, et que l’abbé m’amène quelquefois à
+souper; il se connaît parfaitement en tragédies et en livres, et il a
+fait une tragédie sifflée, et un livre dont on n’a jamais vu hors de la
+boutique de son libraire qu’un exemplaire qu’il m’a dédié. — Le grand
+homme! dit \bname{Candide}, c’est un autre \bname{Pangloss}.»
+
+Alors se tournant vers lui, il lui dit: «Monsieur, vous pensez, sans
+doute, que tout est au mieux dans le monde physique et dans le moral,
+et que rien ne pouvait être autrement? — Moi, monsieur, lui répondit le
+savant, je ne pense rien de tout cela; je trouve que tout va de travers
+chez nous; que personne ne sait ni quel est son rang, ni quelle est sa
+charge, ni ce qu’il fait, ni ce qu’il doit faire, et qu’excepté le
+souper, qui est assez gai, et où il paraît assez d’union, tout le reste
+du temps se passe en querelles impertinentes; jansénistes contre
+molinistes, gens du parlement contre gens d’église, gens de lettres
+contre gens de lettres, courtisans contre courtisans, financiers contre
+le peuple, femmes contre maris, parents contre parents; c’est une
+guerre éternelle.»
+
+
+\bname{Candide} lui répliqua: «J’ai vu pis; mais un sage, qui depuis a eu le
+malheur d’être pendu, m’apprit que tout cela est à merveille; ce sont
+des ombres à un beau tableau. — Votre pendu se moquait du monde, dit
+\bname{Martin}; vos ombres sont des taches horribles. — Ce sont les hommes qui
+font les taches, dit \bname{Candide}, et ils ne peuvent pas s’en dispenser. — Ce
+n’est donc pas leur faute», dit \bname{Martin}. La plupart des pontes, qui
+n’entendaient rien à ce langage, buvaient; et \bname{Martin} raisonna avec le
+savant, et \bname{Candide} raconta une partie de ses aventures à la dame du
+logis.
+
+Après souper, la marquise mena \bname{Candide} dans son cabinet, et le fit
+asseoir sur un canapé. «Eh bien! lui dit-elle, vous aimez donc toujours
+éperdument M\up{lle}~\bname{Cunégonde} de Thunder-ten-tronckh? — Oui, madame,
+répondit \bname{Candide}.» La marquise lui répliqua avec un souris tendre: «Vous
+me répondez comme un jeune homme de \bname{Westphalie}; un Français m’aurait
+dit: Il est vrai que j’ai aimé M\up{lle}~\bname{Cunégonde}; mais en vous
+voyant, madame, je crains de ne la plus aimer. — Hélas! madame, dit
+\bname{Candide}, je répondrai comme vous voudrez. — Votre passion pour elle, dit
+la marquise, a commencé en ramassant son mouchoir; je veux que vous
+ramassiez ma jarretière. — De tout mon cœur, dit \bname{Candide}; et il la
+ramassa. — Mais je veux que vous me la remettiez», dit la dame; et \bname{Candide}
+la lui remit. «Voyez-vous, dit la dame, vous êtes étranger; je fais
+quelquefois languir mes amants de Paris quinze jours, mais je me rends
+à vous dès la première nuit, parce qu’il faut faire les honneurs de son
+pays à un jeune homme de \bname{Westphalie}.» La belle ayant aperçu deux énormes
+diamants aux deux mains de son jeune étranger, les loua de si bonne
+foi, que des doigts de \bname{Candide} ils passèrent aux doigts de la marquise.
+
+\looseness=1
+\bname{Candide}, en s’en retournant avec son abbé périgourdin, sentit quelques
+remords d’avoir fait une infidélité à M\up{lle}~\bname{Cunégonde}. M. l’abbé
+entra dans sa peine; il n’avait qu’une légère part aux cinquante mille
+livres perdues au jeu par \bname{Candide}, et à la valeur des deux brillants
+moitié donnés, moitié extorqués. Son dessein était de profiter, autant
+qu’il le pourrait, des avantages que la connaissance de \bname{Candide} pouvait
+lui procurer. Il lui parla beaucoup de \bname{Cunégonde}; et \bname{Candide} lui dit
+qu’il demanderait bien pardon à cette belle de son infidélité, quand il
+la verrait à \bname{ \bname{Venise}}.
+
+Le Périgourdin redoublait de politesses et d’attentions, et prenait un
+intérêt tendre à tout ce que \bname{Candide} disait, à tout ce qu’il faisait, à
+tout ce qu’il voulait faire.
+
+«Vous avez donc, monsieur, lui dit-il, un rendez-vous à \bname{Venise}? — Oui,
+monsieur l’abbé, dit \bname{Candide}; il faut absolument que j’aille trouver
+M\up{lle}~\bname{Cunégonde}.» Alors, engagé par le plaisir de parler de ce
+qu’il aimait, il conta, selon son usage, une partie de ses aventures
+avec cette illustre \bname{Westphalienne}.
+
+
+«Je crois, dit l’abbé, que M\up{lle}~\bname{Cunégonde} a bien de l’esprit, et
+qu’elle écrit des lettres charmantes. — Je n’en ai jamais reçu, dit
+\bname{Candide}; car, figurez-vous qu’ayant été chassé du château pour l’amour
+d’elle, je ne pus lui écrire; que bientôt après j’appris qu’elle était
+morte, qu’ensuite je la retrouvai, et que je la perdis, et que je lui
+ai envoyé à deux mille cinq cents lieues d’ici un exprès dont j’attends
+la réponse.»
+
+L’abbé écoutait attentivement, et paraissait un peu rêveur. Il prit
+bientôt congé des deux étrangers, après les avoir tendrement embrassés.
+Le lendemain \bname{Candide} reçut à son réveil une lettre conçue en ces
+termes:
+\par\vspace{\baselineskip}\par
+{\itshape Monsieur mon très cher amant, il y a huit jours que je suis malade en
+cette ville; j’apprends que vous y êtes. Je volerais dans vos bras si
+je pouvais remuer. J’ai su votre passage à Bordeaux; j’y ai laissé le
+fidèle \bname{Cacambo} et la vieille, qui doivent bientôt me suivre. Le
+gouverneur de \bname{Buenos} Aires a tout pris, mais il me reste votre cœur.
+Venez; votre présence me rendra la vie ou me fera mourir de plaisir.
+
+}
+\par\vspace{\baselineskip}\par
+Cette lettre charmante, cette lettre inespérée, transporta \bname{Candide}
+d’une joie inexprimable; et la maladie de sa chère \bname{Cunégonde} l’accabla
+de douleur. Partagé entre ces deux sentiments, il prend son or et ses
+diamants, et se fait conduire avec \bname{Martin} à l’hôtel où
+mademoiselle
+\bname{Cunégonde} demeurait. Il entre en tremblant d’émotion, son cœur
+palpite, sa voix sanglote; il veut ouvrir les rideaux du lit; il veut
+faire apporter de la lumière. «Gardez-vous-en bien, lui dit la suivante;
+la lumière la tue»; et soudain elle referme le rideau. «Ma chère
+\bname{Cunégonde}, dit \bname{Candide} en pleurant, comment vous portez-vous? si vous
+ne pouvez me voir, parlez-moi du moins. — Elle ne peut parler», dit la
+suivante, la dame alors tire du lit une main potelée que \bname{Candide} arrose
+longtemps de ses larmes, et qu’il remplit ensuite de diamants, en
+laissant un sac plein d’or sur le fauteuil.
+
+
+Au milieu de ses transports arrive un exempt suivi de l’abbé
+périgourdin et d’une escouade. «Voilà donc, dit-il, ces deux étrangers
+suspects?» Il les fait incontinent saisir, et ordonne à ses braves de
+les traîner en prison. «Ce n’est pas ainsi qu’on traite les voyageurs
+dans Eldorado, dit \bname{Candide}. — Je suis plus manichéen que jamais, dit
+\bname{Martin}. — Mais, monsieur, où nous menez-vous? dit \bname{Candide}. — Dans un cul de
+basse-fosse», dit l’exempt.
+
+\bname{Martin}, ayant repris son sang froid, jugea que la dame qui se
+prétendait \bname{Cunégonde} était une friponne, M. l’abbé périgourdin un
+fripon, qui avait abusé au plus vite de
+l'innocence
+ de \bname{Candide}, et
+l’exempt un autre fripon dont on pouvait aisément se débarrasser.
+
+
+Plutôt que de s’exposer aux procédures de la justice, \bname{Candide}, éclairé
+par son conseil, et d’ailleurs toujours impatient de revoir la
+véritable \bname{Cunégonde}, propose à l’exempt trois petits diamants d’environ
+trois mille pistoles chacun. — Ah! monsieur, lui dit l’homme au bâton
+d’ivoire, eussiez-vous commis tous les crimes imaginables, vous êtes le
+plus honnête homme du monde; trois diamants! chacun de trois mille
+pistoles! Monsieur! je me ferais tuer pour vous, au lieu de vous mener
+dans un cachot. On arrête tous les étrangers, mais laissez-moi faire;
+j’ai un frère à Dieppe en Normandie; je vais vous y mener; et si vous
+avez quelque diamant à lui donner, il aura soin de vous comme moi-même.
+
+— Et pourquoi arrête-t-on tous les étrangers? dit \bname{Candide}. L’abbé
+périgourdin prit alors la parole, et dit: «C’est parce qu’un gueux du
+pays d’Atrébatie a entendu dire des sottises; cela seul lui a fait
+commettre un parricide, non pas tel que celui de 1610 au mois de
+mai, mais tel que celui de 1594 au mois de décembre, et tel que
+plusieurs autres commis dans d’autres années et dans d’autres mois par
+d’autres gueux qui avaient entendu dire des sottises.»
+
+
+
+L’exempt alors expliqua de quoi il s’agissait. «Ah! les monstres!
+s’écria \bname{Candide}; quoi! de telles horreurs chez un peuple qui danse et
+qui chante! Ne pourrai-je sortir au plus vite de ce pays où des singes
+agacent des tigres? J’ai vu des ours dans mon pays; je n’ai vu des
+hommes que dans le Dorado. Au nom de Dieu, monsieur l’exempt, menez-moi
+à \bname{Venise}, où je dois attendre M\up{lle}~\bname{Cunégonde}. — Je ne peux vous
+mener qu’en Basse-Normandie, dit le barigel.» Aussitôt il lui fait
+ôter ses fers, dit qu’il s’est mépris, renvoie ses gens, emmène à
+Dieppe \bname{Candide} et \bname{Martin}, et les laisse entre les mains de son frère.
+Il y avait un petit vaisseau hollandais à la rade. Le Normand, à l’aide
+de trois autres diamants, devenu le plus serviable des hommes, embarque
+\bname{Candide} et ses gens dans le vaisseau qui allait faire voile pour
+Portsmouth en Angleterre. Ce n’était pas le chemin de \bname{Venise}; mais
+\bname{Candide} croyait être délivré de l’enfer; et il comptait bien reprendre
+la route de \bname{Venise} à la première occasion.
+
+
+
+
+
+\chapter[Candide et \bname{Martin} vont sur les côtes…]{Candide et \bname{Martin} vont sur les côtes d’Angleterre;\\ ce qu’ils y voient}
+
+
+\lettrine[ante=«]{A}{h! \bname{Pangloss}!} \bname{Pangloss}! Ah! \bname{Martin}! \bname{Martin}! Ah! ma chère \bname{Cunégonde}!
+qu’est-ce que ce monde-ci?» disait \bname{Candide} sur le vaisseau hollandais.
+— Quelque chose de bien fou et de bien abominable, répondait \bname{Martin}. — Vous
+connaissez l’Angleterre; y est-on aussi fou qu’en France? — C’est une
+autre espèce de folie, dit \bname{Martin}. Vous savez que ces deux nations sont
+en guerre pour quelques arpents de neige vers le Canada, et qu’elles
+dépensent pour cette belle guerre beaucoup plus que tout le Canada ne
+vaut.
+De vous dire précisément s’il y a plus de gens à lier dans un
+pays que dans un autre, c’est ce que mes faibles lumières ne me
+permettent pas; je sais seulement qu’en général les gens que nous
+allons voir sont fort atrabilaires.»
+
+
+En causant ainsi ils abordèrent à Portsmouth; une multitude de peuple
+couvrait le rivage, et regardait attentivement un assez gros homme qui
+était à genoux, les yeux bandés, sur le tillac d’un des vaisseaux de la
+flotte; quatre soldats, postés vis-à-vis de cet homme, lui tirèrent
+chacun trois balles dans le crâne, le plus paisiblement du monde; et
+toute l’assemblée s’en retourna extrêmement satisfaite. «Qu’est-ce
+donc que tout ceci? dit \bname{Candide}; et quel démon exerce partout son
+empire?» Il demanda qui était ce gros homme qu’on venait de tuer en
+cérémonie.
+«C’est un amiral, lui répondit-on. — Et pourquoi tuer cet
+amiral? — C’est, lui dit-on, parce qu’il n’a pas fait tuer assez de monde;
+il a livré un combat à un amiral français, et on a trouvé qu’il n’était
+pas assez près de lui. — Mais, dit \bname{Candide}, l’amiral français était aussi
+loin de l’amiral anglais que celui-ci l’était de l’autre! — Cela est
+incontestable, lui répliqua-t-on; mais dans ce pays-ci il est bon de
+tuer de temps en temps un amiral pour encourager les autres.»
+
+
+\bname{Candide} fut si étourdi et si choqué de ce qu’il voyait et de ce qu’il
+entendait, qu’il ne voulut pas seulement mettre pied à terre, et qu’il
+fit son marché avec le patron hollandais (dût-il le voler comme celui
+de Surinam), pour le conduire sans délai à \bname{Venise}.
+
+Le patron fut prêt au bout de deux jours. On côtoya la France; on passa
+à la vue de Lisbonne, et \bname{Candide} frémit. On entra dans le détroit et
+dans la \bname{Méditerranée}, enfin on aborda à \bname{Venise}. «Dieu soit loué! dit
+\bname{Candide}, en embrassant \bname{Martin}; c’est ici que je reverrai la belle
+\bname{Cunégonde}. Je compte sur \bname{Cacambo} comme sur moi-même. Tout est bien,
+tout va bien, tout va le mieux qu’il soit possible.»
+
+
+\chapter{De \bname{Paquette}, et de frère Giroflée}
+
+
+\lettrine{D}{ès} qu’il fut à \bname{Venise}, il fit chercher \bname{Cacambo} dans tous les cabarets,
+dans tous les cafés, chez toutes les filles de joie, et ne le trouva
+point. Il envoyait tous les jours à la découverte de tous les vaisseaux
+et de toutes les barques: nulles nouvelles de \bname{Cacambo}. «Quoi! disait-il
+à \bname{Martin}, j’ai eu le temps de passer de Surinam à Bordeaux, d’aller de
+Bordeaux à Paris, de Paris à Dieppe, de Dieppe à Portsmouth, de côtoyer
+le Portugal et l’Espagne, de traverser toute la Méditerranée, de passer
+quelques mois à \bname{Venise}; et la belle \bname{Cunégonde} n’est point venue! Je
+n’ai rencontré au lieu d’elle qu’une drôlesse et un abbé périgourdin!
+\bname{Cunégonde} est morte, sans doute; je n’ai plus qu’à mourir. Ah! il
+valait mieux rester dans le paradis du Dorado que de revenir dans cette
+maudite Europe. Que vous avez raison, mon cher \bname{Martin}! tout n’est
+qu’illusion et calamité.»
+
+Il tomba dans une mélancolie noire, et ne prit aucune part à l’opéra
+\emph{alla moda}, ni aux autres divertissements du carnaval; pas une dame ne
+lui donna la moindre
+tentation. \bname{Martin} lui dit: «Vous êtes bien simple,
+en vérité, de vous figurer qu’un valet métis, qui a cinq ou six
+millions dans ses poches, ira chercher votre maîtresse au bout du
+monde, et vous l’amènera à \bname{Venise}. Il la prendra pour lui, s’il la
+trouve; s’il ne la trouve pas, il en prendra une autre: je vous
+conseille d’oublier votre valet \bname{Cacambo} et votre maîtresse \bname{Cunégonde}.»
+\bname{Martin} n’était pas consolant. La mélancolie de \bname{Candide} augmenta, et
+\bname{Martin} ne cessait de lui prouver qu’il y avait peu de vertu et peu de
+bonheur sur la terre; excepté peut-être dans Eldorado, où personne
+ne pouvait aller.
+
+
+
+En disputant sur cette matière importante, et en attendant \bname{Cunégonde},
+\bname{Candide} aperçut un jeune théatin dans la place Saint-Marc, qui tenait
+sous le bras une fille. Le théatin paraissait frais, potelé, vigoureux;
+ses yeux étaient brillants, son air assuré, sa mine haute, sa démarche
+fière. La fille était très jolie, et chantait; elle regardait
+amoureusement son théatin, et de temps en temps lui pinçait ses grosses
+joues. «Vous m’avouerez du moins, dit \bname{Candide} à \bname{Martin}, que ces gens-ci
+sont heureux. Je n’ai trouvé jusqu’à présent dans toute la terre
+habitable, excepté dans Eldorado, que des infortunés; mais pour cette
+fille et ce théatin, je gage que ce sont des créatures très heureuses.
+«Je gage que non, dit \bname{Martin}. — Il n’y a qu’à les prier à dîner, dit
+\bname{Candide}, et vous verrez si je me trompe.»
+
+Aussitôt il les aborde, il leur fait son compliment, et les invite à
+venir à son hôtellerie manger des macaronis, des perdrix de Lombardie,
+des œufs d’esturgeon, et à boire du vin de Montepulciano, du
+lacryma-christi, du chypre, et du samos. La demoiselle rougit, le
+théatin accepta la partie, et la fille le suivit en regardant \bname{Candide}
+avec des yeux de surprise et de confusion, qui furent obscurcis de
+quelques larmes. À peine fut-elle entrée dans la chambre de \bname{Candide},
+qu’elle lui dit: «Eh quoi! monsieur \bname{Candide} ne reconnaît plus \bname{Paquette}!»
+À ces mots \bname{Candide}, qui ne l’avait pas considérée jusque-là avec
+attention, parce qu’il n’était occupé que de \bname{Cunégonde}, lui dit: «Hélas!
+ma pauvre enfant, c’est donc vous qui avez mis le docteur \bname{Pangloss} dans
+le bel état où je l’ai vu?
+
+
+— Hélas! monsieur, c’est moi-même, dit \bname{Paquette}; je vois que vous êtes
+instruit de tout. J’ai su les malheurs
+épouvantables
+ arrivés à toute la
+maison de M\up{me} la baronne et à la belle \bname{Cunégonde}. Je vous jure que
+ma destinée n’a guère été moins triste. J’étais fort innocente quand
+vous m’avez vue. Un cordelier, qui était mon confesseur, me séduisit
+aisément. Les suites en furent affreuses; je fus obligée de sortir du
+château quelque temps après que M.~le baron vous eut renvoyé à grands
+coups de pied dans le derrière. Si un fameux médecin n’avait pas pris
+pitié de moi, j’étais morte. Je fus quelque temps par reconnaissance la
+maîtresse de ce médecin. Sa femme, qui était jalouse à la rage, me
+battait tous les jours impitoyablement; c’était une furie. Ce médecin
+était le plus laid de tous les hommes, et moi la plus malheureuse de
+toutes les créatures d’être battue continuellement pour un homme que je
+n’aimais pas. Vous savez, monsieur, combien il est dangereux pour une
+femme acariâtre d’être l’épouse d’un médecin. Celui-ci, outré des
+procédés de sa femme, lui donna un jour, pour la guérir d’un petit
+rhume, une médecine si efficace, qu’elle en mourut en deux heures de
+temps dans des convulsions horribles. Les parents de madame intentèrent
+à monsieur un procès criminel; il prit la fuite, et moi je fus mise en
+prison. Mon innocence ne m’aurait pas sauvée, si je n’avais été un peu
+jolie. Le juge m’élargit à condition qu’il succéderait au médecin. Je
+fus bientôt supplantée par une rivale, chassée sans récompense, et
+obligée de continuer ce métier abominable qui vous paraît si plaisant à
+vous autres hommes, et qui n’est pour nous qu’un abîme de misère.
+J’allai exercer la profession à \bname{Venise}. Ah! monsieur, si vous pouviez
+vous imaginer ce que c’est que d’être obligée de caresser
+indifféremment un vieux marchand, un avocat, un moine, un gondolier, un
+abbé; d’être exposée à toutes les insultes, à toutes les avanies;
+d’être souvent réduite à emprunter une jupe pour aller se la faire
+lever par un homme dégoûtant; d’être volée par l’un de ce qu’on a gagné
+avec l’autre; d’être rançonnée par les officiers de justice, et de
+n’avoir en perspective qu’une vieillesse affreuse, un hôpital, et un
+fumier, vous concluriez que je suis une des plus malheureuses créatures
+du monde.»
+
+\bname{Paquette} ouvrait ainsi son cœur au bon \bname{Candide}, dans un cabinet, en
+présence de \bname{Martin}, qui disait à \bname{Candide}: «Vous voyez que j’ai déjà
+gagné la moitié de la gageure.»
+
+
+Frère Giroflée était resté dans la salle à manger, et buvait un coup en
+attendant le dîner. «Mais, dit \bname{Candide} à \bname{Paquette}, vous aviez l’air si
+gai, si content, quand je vous ai rencontrée; vous chantiez, vous
+caressiez le théatin avec une complaisance naturelle; vous m’avez paru
+aussi heureuse que vous prétendez être infortunée. — Ah! monsieur,
+répondit \bname{Paquette}, c’est encore là une des misères du métier. J’ai été
+hier volée et battue par un officier, et il faut aujourd’hui que je
+paraisse de bonne humeur pour plaire à un moine.»
+
+\bname{Candide} n’en voulut pas davantage; il avoua que \bname{Martin} avait raison. On
+se mit à table avec \bname{Paquette} et le théatin; le repas fut assez amusant,
+et sur la fin on se parla avec quelque confiance. «Mon père, dit \bname{Candide}
+au moine, vous me paraissez jouir d’une destinée que tout le monde doit
+envier; la fleur de la santé brille sur votre visage, votre physionomie
+annonce le bonheur; vous avez une très jolie fille pour votre
+récréation, et vous paraissez très content de votre état de théatin.
+
+
+— Ma foi, monsieur, dit frère Giroflée, je voudrais que tous les théatins
+fussent au fond de la mer. J’ai été tenté cent fois de mettre le feu au
+couvent, et d’aller me faire turc. Mes parents me forcèrent, à l’âge de
+quinze ans, d’endosser cette détestable robe, pour laisser plus de
+fortune à un maudit frère aîné, que Dieu confonde! La jalousie, la
+discorde, la rage, habitent dans le couvent. Il est vrai que j’ai
+prêché quelques mauvais sermons qui m’ont valu un peu d’argent dont le
+prieur me vole la moitié; le reste me sert à entretenir des filles:
+mais quand je rentre le soir dans le monastère, je suis prêt à me
+casser la tête contre les murs du dortoir; et tous mes confrères sont
+dans le même cas.»
+
+\bname{Martin} se tournant vers \bname{Candide} avec son sang froid ordinaire: «Eh bien!
+lui dit-il, n’ai-je pas gagné la gageure tout entière?» \bname{Candide} donna
+deux mille piastres à \bname{Paquette}, et mille piastres à frère Giroflée. «Je
+vous réponds, dit-il, qu’avec cela ils seront heureux. — Je n’en crois
+rien du tout, dit \bname{Martin}; vous les rendrez peut-être avec ces piastres
+beaucoup plus malheureux encore. — Il en sera ce qui pourra, dit \bname{Candide}:
+mais une chose me console, je vois qu’on retrouve souvent les gens
+qu’on ne croyait jamais retrouver; il se pourra bien faire qu’ayant
+rencontré mon mouton rouge et \bname{Paquette}, je rencontre aussi \bname{Cunégonde}.
+— Je souhaite, dit \bname{Martin}, qu’elle fasse un jour votre bonheur; mais
+c’est de quoi je doute fort. — Vous êtes bien dur, dit \bname{Candide}. — C’est que
+j’ai vécu, dit \bname{Martin}.
+
+— Mais regardez ces gondoliers, dit \bname{Candide}: ne
+chantent-ils pas sans cesse? — Vous ne les voyez pas dans leur ménage,
+avec leurs femmes et leurs marmots d’enfants, dit \bname{Martin}. Le doge a ses
+chagrins, les gondoliers ont les leurs. Il est vrai qu’à tout prendre
+le sort d’un gondolier est préférable à celui d’un doge; mais je crois
+la différence si médiocre, que cela ne vaut pas la peine d’être
+examiné.
+
+— On parle, dit \bname{Candide}, du sénateur \bname{Pococurante}, qui demeure dans ce
+beau palais sur la Brenta, et qui reçoit assez bien les étrangers. On
+prétend que c’est un homme qui n’a jamais eu de chagrin. — Je voudrais
+voir une espèce si rare, dit \bname{Martin}.» \bname{Candide} aussitôt fit demander au
+seigneur \bname{Pococurante} la permission de venir le voir le lendemain.
+
+
+
+\chapter[Visite chez le seigneur \bname{Pococurante}…]{Visite chez le seigneur \bname{Pococurante}, noble vénitien}
+
+
+\lettrine{C}{andide} et \bname{Martin} allèrent en gondole sur la Brenta, et arrivèrent au
+palais du noble \bname{Pococurante}. Les jardins étaient bien entendus, et
+ornés de belles statues de marbre; le palais d’une belle architecture.
+Le maître du logis, homme de soixante ans, fort riche, reçut très
+poliment les deux curieux, mais avec très peu d’empressement, ce qui
+déconcerta \bname{Candide}, et ne déplut point à \bname{Martin}.
+
+
+ D’abord deux filles jolies et proprement mises servirent du chocolat,
+qu’elles firent très bien mousser. \bname{Candide} ne put s’empêcher de les
+louer sur leur beauté, sur leur bonne grâce, et sur leur adresse. «Ce
+sont d’assez bonnes créatures, dit le sénateur \bname{Pococurante}; je les fais
+quelquefois coucher dans mon lit; car je suis bien las des dames de la
+ville, de leurs coquetteries, de leurs jalousies, de leurs querelles,
+de leurs humeurs, de leurs petitesses, de leur orgueil, de leurs
+sottises, et des sonnets qu’il faut faire ou commander pour elles;
+mais, après tout, ces deux filles commencent fort à m’ennuyer.»
+
+
+\bname{Candide}, après le déjeuner, se promenant dans une longue galerie, fut
+surpris de la beauté des tableaux. Il demanda de quel maître étaient
+les deux premiers. «Ils sont de \bname{Raphaël}, dit le sénateur; je les achetai
+fort cher par vanité, il y a quelques années; on dit que c’est ce qu’il
+y a de plus beau en Italie, mais ils ne me plaisent point du tout: la
+couleur en est très rembrunie, les figures ne sont pas assez arrondies,
+et ne sortent point assez; les draperies ne ressemblent en rien à une
+étoffe: en un mot, quoi qu’on en dise, je ne trouve point là une
+imitation vraie de la nature. Je n’aimerai un tableau que quand je
+croirai voir la nature elle-même: il n’y en a point de cette espèce.
+J’ai beaucoup de tableaux, mais je ne les regarde plus.»
+
+\bname{Pococurante}, en attendant le dîner, se fit donner un concerto. \bname{Candide}
+trouva la musique délicieuse. «Ce bruit, dit \bname{Pococurante}, peut amuser
+une demi-heure; mais s’il dure plus long-temps, il fatigue tout le
+monde, quoique personne n’ose l’avouer. La musique aujourd’hui n’est
+plus que l’art d’exécuter des choses difficiles, et ce qui n’est que
+difficile ne plaît point à la longue.
+
+«J’aimerais peut être mieux l’opéra, si on n’avait pas trouvé le secret
+d’en faire un monstre qui me révolte. Ira voir qui voudra de mauvaises
+tragédies en musique, où les scènes ne sont faites que pour amener très
+mal à propos deux ou trois chansons ridicules qui font valoir le gosier
+d’une actrice; se pâmera de plaisir qui voudra ou qui pourra, en voyant
+un châtré fredonner le rôle de \bname{César} et de \bname{Caton}, et se promener d’un
+air gauche sur des planches: pour moi, il y a long-temps que j’ai
+renoncé à ces pauvretés qui font aujourd’hui la gloire de l’Italie, et
+que des souverains paient si chèrement.» \bname{Candide} disputa un peu, mais
+avec discrétion. \bname{Martin} fut entièrement de l’avis du sénateur.
+
+
+On se mit à table; et, après un excellent dîner, on entra dans la
+bibliothèque. \bname{Candide}, en voyant un Homère magnifiquement relié, loua
+l’illustrissime sur son bon goût. «Voilà, dit-il, un livre qui faisait
+les délices du grand \bname{Pangloss}, le meilleur philosophe de l’Allemagne.
+— Il ne fait pas les miennes, dit froidement \bname{Pococurante}: on me fit
+accroire autrefois que j’avais du plaisir en le lisant; mais cette
+répétition continuelle de combats qui se ressemblent tous, ces dieux
+qui agissent toujours pour ne rien faire de décisif, cette Hélène qui
+est le sujet de la guerre, et qui à peine est une actrice de la pièce;
+cette Troie qu’on assiège et qu’on ne prend point; tout cela me causait
+le plus mortel ennui. J’ai demandé quelquefois à des savants s’ils
+s’ennuyaient autant que moi à cette lecture: tous les gens sincères
+m’ont avoué que le livre leur tombait des mains, mais qu’il fallait
+toujours l’avoir dans sa bibliothèque, comme un monument de
+l’antiquité, et comme ces médailles rouillées qui ne peuvent être de
+commerce.
+
+— Votre excellence ne pense pas ainsi de Virgile? dit \bname{Candide}. — Je
+conviens, dit \bname{Pococurante}, que le second, le quatrième, et le sixième
+livre de son Énéide, sont excellents; mais pour son pieux Énée, et le
+fort Cloanthe, et l’ami Achates, et le petit Ascanius, et l’imbécile
+roi \bname{Latinus}, et la bourgeoise Amata, et l’insipide Lavinia, je ne crois
+pas qu’il y ait rien de si froid et de plus désagréable. J’aime mieux
+le Tasse et les contes à dormir debout de l’Arioste.
+
+
+— Oserais-je vous demander, monsieur, dit \bname{Candide}, si vous n’avez pas un
+grand plaisir à lire Horace? — Il y a des maximes, dit \bname{Pococurante}, dont
+un homme du monde peut faire son profit, et qui, étant resserrées dans
+des vers énergiques, se gravent plus aisément dans la mémoire: mais je
+me soucie fort peu de son voyage à Brindes, et de sa description d’un
+mauvais dîner, et de la querelle de crocheteurs entre je ne sais quel
+Pupilus dont les paroles, dit-il, \emph{étaient pleines de pus}, et un
+autre dont les paroles \emph{étaient du vinaigre}. Je n’ai lu qu’avec un
+extrême dégoût ses vers grossiers contre des vieilles et contre des
+sorcières; et je ne vois pas quel mérite il peut y avoir à dire à son
+ami Mæcenas que, s’il est mis par lui au rang des poètes lyriques, il
+frappera les astres de son front sublime. Les sots admirent tout
+dans un auteur estimé. Je ne lis que pour moi; je n’aime que ce qui est
+à mon usage.» \bname{Candide}, qui avait été élevé à ne jamais juger de rien par
+lui-même, était fort étonné de ce qu’il entendait; et \bname{Martin} trouvait
+la façon de penser de \bname{Pococurante} assez raisonnable.
+
+
+\looseness=1
+«Oh! voici un Cicéron, dit \bname{Candide}: pour ce grand homme-là, je pense que
+vous ne vous lassez point de le lire.
+%
+— Je ne le lis jamais, répondit le
+Vénitien. Que m’importe qu’il ait plaidé pour Rabirius ou pour
+Cluentius? J’ai bien assez des procès que je juge; je me serais mieux
+accommodé de ses œuvres philosophiques; mais quand j’ai vu qu’il
+doutait de tout, j’ai conclu que j’en savais autant que lui, et que je
+n’avais besoin de personne pour être ignorant.
+
+
+
+— Ah! voilà quatre-vingts volumes de recueils d’une académie des
+sciences, s’écria \bname{Martin}; il se peut qu’il y ait là du bon. — Il y en
+aurait, dit \bname{Pococurante}, si un seul des auteurs de ces fatras avait
+inventé seulement l’art de faire des épingles; mais il n’y a dans tous
+ces livres que de vains systèmes, et pas une seule chose utile.
+
+— Que de pièces de théâtre je vois là, dit \bname{Candide}, en italien, en
+espagnol, en français! — Oui, dit le sénateur, il y en a trois mille, et
+pas trois douzaines de bonnes. Pour ces recueils de sermons, qui tous
+ensemble ne valent pas une page de Sénèque, et tous ces gros volumes de
+théologie, vous pensez bien que je ne les ouvre jamais, ni moi ni
+personne.»
+
+
+
+\bname{Martin} aperçut des rayons chargés de livres anglais. «Je crois, dit-il,
+qu’un républicain doit se plaire à la plupart de ces ouvrages écrits si
+librement. — Oui, répondit \bname{Pococurante}, il est beau d’écrire ce qu’on
+pense; c’est le privilège de l’homme. Dans toute notre Italie, on
+n’écrit que ce qu’on ne pense pas; ceux qui habitent la patrie des
+Césars et des \bname{Antonins} n’osent avoir une idée sans la permission d’un
+jacobin. Je serais content de la liberté qui inspire les génies
+anglais, si la passion et l’esprit de parti ne corrompaient pas tout ce
+que cette précieuse liberté a d’estimable.»
+
+\looseness=1
+\bname{Candide} apercevant un Milton, lui demanda s’il ne regardait pas cet
+auteur comme un grand homme. «Qui? dit \bname{Pococurante}, ce barbare, qui fait
+un long commentaire du premier chapitre de la Genèse, en dix livres de
+vers durs? ce grossier imitateur des Grecs, qui défigure la création,
+et qui, tandis que Moïse représente l’Être éternel produisant le monde
+par la parole, fait prendre un grand compas par le Messiah dans une
+armoire du ciel pour tracer son ouvrage? Moi, j’estimerais celui qui a
+gâté l’enfer et le diable du Tasse; qui déguise Lucifer tantôt en
+crapaud, tantôt en pygmée; qui lui fait rebattre cent fois les mêmes
+discours; qui le fait disputer sur la théologie; qui, en imitant
+sérieusement l’invention comique des armes à feu de l’Arioste, fait
+tirer le canon dans le ciel par les diables? Ni moi, ni personne en
+Italie n’a pu se plaire à toutes ces tristes extravagances. Le mariage
+du péché et de la mort et les couleuvres dont le péché accouche, font
+vomir tout homme qui a le goût un peu délicat; et sa longue description
+d’un hôpital n’est bonne que pour un fossoyeur. Ce poème obscur,
+bizarre, et dégoûtant, fut méprisé à sa naissance; je le traite
+aujourd’hui comme il fut traité dans sa patrie par les
+contemporains. Au reste je dis ce que je pense, et je me soucie fort
+peu que les autres pensent comme moi.» \bname{Candide} était affligé de ces
+discours; il respectait Homère, il aimait un peu Milton. «Hélas! dit-il
+tout bas à \bname{Martin}, j’ai bien peur que cet homme-ci n’ait un souverain
+mépris pour nos poètes allemands. — Il n’y aurait pas grand mal à cela,
+dit \bname{Martin}. — Oh! quel homme supérieur! disait encore \bname{Candide} entre ses
+dents, quel grand génie que ce \bname{Pococurante}! rien ne peut lui plaire.
+
+
+
+Après avoir fait ainsi la revue de tous les livres, ils descendirent
+dans le jardin. \bname{Candide} en loua toutes les beautés. «Je ne sais rien de
+si mauvais goût, dit le maître; nous n’avons ici que des colifichets:
+mais je vais dès demain en faire planter un d’un dessin plus noble.»
+
+
+Quand les deux curieux eurent pris congé de son excellence: «Or çà, dit
+\bname{Candide} à \bname{Martin}, vous conviendrez que voilà le plus heureux de tous
+les hommes, car il est au-dessus de tout ce qu’il possède. — Ne
+voyez-vous pas, dit \bname{Martin}, qu’il est dégoûté de tout ce qu’il possède?
+Platon a dit, il y a long-temps, que les meilleurs estomacs ne sont pas
+ceux qui rebutent tous les aliments. — Mais, dit \bname{Candide}, n’y a-t-il pas
+du plaisir à tout critiquer, à sentir des défauts où les autres hommes
+croient voir des
+beautés? — C’est-à-dire, reprit \bname{Martin}, qu’il y a du
+plaisir à n’avoir pas de plaisir? — Oh bien! dit \bname{Candide}, il n’y a donc
+d’heureux que moi, quand je reverrai M\up{lle}~\bname{Cunégonde}. — C’est
+toujours bien fait d’espérer, dit \bname{Martin}.
+
+Cependant les jours, les semaines, s’écoulaient; \bname{Cacambo} ne revenait
+point, et \bname{Candide} était si abîmé dans sa douleur, qu’il ne fit pas même
+réflexion que \bname{Paquette} et frère Giroflée n’étaient pas venus seulement
+le remercier.
+
+
+\chapter[D’un souper que Candide et Martin firent…]{D’un souper que \bname{Candide} et \bname{Martin} firent\\avec six étrangers, et qui ils
+étaient}
+
+
+\lettrine{U}{n soir} que \bname{Candide}, suivi de \bname{Martin}, allait se mettre à table avec les
+étrangers qui logeaient dans la même hôtellerie, un homme à visage
+couleur de suie l’aborda par derrière, et, le prenant par le bras, lui
+dit: «Soyez prêt à partir avec nous, n’y manquez pas.» Il se retourne, et
+voit \bname{Cacambo}. Il n’y avait que la vue de \bname{Cunégonde} qui pût l’étonner et
+lui plaire davantage. Il fut sur le point de devenir fou de joie. Il
+embrasse son cher ami. «\bname{Cunégonde} est ici, sans doute? où est-elle?
+Mène-moi vers elle, que je meure de joie avec elle. — \bname{Cunégonde} n’est
+point ici, dit \bname{Cacambo}, elle est à Constantinople. — Ah ciel! à
+Constantinople! mais fût-elle à la Chine, j’y vole, partons. — Nous
+partirons après souper, reprit \bname{Cacambo}; je ne peux vous en dire
+davantage; je suis esclave, mon maître m’attend; il faut que j’aille le
+servir à table: ne dites mot, soupez, et tenez-vous prêt.»
+
+\bname{Candide}, partagé entre la joie et la douleur, charmé d’avoir revu son
+agent fidèle, étonné de le voir esclave, plein de l’idée de retrouver
+sa maîtresse, le cœur agité, l’esprit bouleversé, se mit à table avec
+\bname{Martin}, qui voyait de sang froid toutes ces aventures, et avec six
+étrangers, qui étaient venus passer le carnaval à \bname{Venise}.
+
+
+\bname{Cacambo}, qui versait à boire à l’un de ces six étrangers, s’approcha de
+l’oreille de son maître, sur la fin du repas, et lui dit: «Sire, Votre
+Majesté partira quand elle voudra, le vaisseau est prêt.» Ayant dit ces
+mots, il sortit. Les convives étonnés se regardaient sans proférer une
+seule parole, lorsqu’un autre domestique s’approchant de son maître,
+lui dit: «Sire, la chaise de Votre Majesté est à Padoue, et la barque
+est prête.» Le maître fit un signe, et le domestique partit. Tous les
+convives se regardèrent encore, et la surprise commune redoubla. Un
+troisième valet s’approchant aussi d’un troisième étranger, lui dit:
+«Sire, croyez-moi, Votre Majesté ne doit pas rester ici plus longtemps,
+je vais tout préparer»; et aussitôt il disparut.
+
+\bname{Candide} et \bname{Martin} ne doutèrent pas alors que ce ne fût une mascarade du
+carnaval. Un quatrième domestique dit au quatrième maître: «Votre
+Majesté partira quand elle voudra», et sortit comme les autres. Le
+cinquième valet en dit autant au cinquième maître. Mais le sixième
+valet parla différemment au sixième étranger qui était auprès de
+\bname{Candide}; il lui dit: «Ma foi, sire, on ne veut plus faire crédit à Votre
+Majesté ni à moi non plus, et nous pourrions bien être coffrés cette
+nuit vous et moi; je vais pourvoir à mes affaires: adieu.»
+
+Tous les domestiques ayant disparu, les six étrangers, \bname{Candide}, et
+\bname{Martin}, demeurèrent dans un profond silence. Enfin \bname{Candide} le rompit:
+«Messieurs, dit-il, voilà une singulière plaisanterie. Pourquoi
+êtes-vous tous rois? pour moi, je vous avoue que ni moi ni \bname{Martin} nous
+ne le sommes.»
+
+Le maître de \bname{Cacambo} prit alors gravement la parole, et dit en italien:
+«Je ne suis point plaisant, je m’appelle Achmet III; j’ai été
+grand-sultan plusieurs années; je détrônai mon frère; mon neveu m’a
+détrôné; on a coupé le cou à mes vizirs; j’achève ma vie dans le vieux
+sérail; mon neveu le grand-sultan Mahmoud me permet de voyager
+quelquefois pour ma santé; et je suis venu passer le carnaval à \bname{Venise}.»
+
+Un jeune homme qui était auprès d’Achmet parla après lui, et dit: «Je
+m’appelle Ivan; j’ai été empereur de toutes les Russies; j’ai été
+détrôné au berceau; mon père et ma mère ont été enfermés; on m’a élevé
+en prison; j’ai quelquefois la permission de voyager, accompagné de
+ceux qui me gardent; et je suis venu passer le carnaval à \bname{Venise}.»
+
+
+
+Le troisième dit: «Je suis Charles-Édouard, roi \bname{d’Angleterre};
+ mon
+père m’a cédé ses droits au royaume; j’ai combattu pour les soutenir;
+on a arraché le cœur à huit cents de mes partisans, et on leur en a
+battu les joues; j’ai été mis en prison; je vais à Rome faire une
+visite au roi mon père, détrôné ainsi que moi et mon grand-père; et je
+suis venu passer le carnaval à \bname{Venise}.»
+
+
+
+Le quatrième prit alors la parole et dit: «Je suis roi des Polaques; le
+sort de la guerre m’a privé de mes états héréditaires; mon père a
+éprouvé les mêmes revers; je me résigne à la Providence comme le sultan
+Achmet, l’empereur Ivan, et le roi Charles-Édouard, à qui Dieu donne
+une longue vie; et je suis venu passer le carnaval à \bname{Venise}.»
+
+
+
+Le cinquième dit: «Je suis aussi roi des Polaques; j’ai perdu mon
+royaume deux fois; mais la Providence m’a donné un autre état dans
+lequel j’ai fait plus de bien que tous les rois des Sarmates ensemble
+n’en ont jamais pu faire sur les bords de la Vistule. Je me résigne
+aussi à la Providence; et je suis venu passer le carnaval à \bname{Venise}.»
+
+
+
+Il restait au sixième monarque à parler. «Messieurs, dit-il, je ne suis
+pas si grand seigneur que vous; mais enfin j’ai été roi tout comme un
+autre; je suis Théodore; on m’a élu roi en Corse; on m’a appelé
+\textit{Votre Majesté}, et à présent à peine m’appelle-t-on \textit{monsieur}; j’ai
+fait frapper de la monnaie, et je ne possède pas un denier; j’ai eu
+deux secrétaires d’état, et j’ai à peine un valet; je me suis vu sur un
+trône, et j’ai longtemps été à Londres en prison sur la paille; j’ai
+bien peur d’être traité de même ici, quoique je sois venu, comme Vos
+Majestés, passer le carnaval à \bname{Venise}.»
+
+
+Les cinq autres rois écoutèrent ce discours avec une noble compassion.
+Chacun d’eux donna vingt sequins au roi \bname{Théodore} pour avoir des habits
+et des chemises; \bname{Candide} lui fit présent d’un diamant de deux mille
+sequins. «Quel est donc, disaient les cinq rois, cet homme qui est en
+état de donner cent fois autant que chacun de nous, et qui le donne?
+Êtes-vous roi aussi, monsieur? — Non, messieurs, et n’en ai nulle envie.»
+
+Dans l’instant qu’on sortait de table, il arriva dans la même
+hôtellerie quatre altesses sérénissimes qui avaient aussi perdu leurs
+états par le sort de la guerre, et qui venaient passer le reste du
+carnaval à \bname{Venise}; mais \bname{Candide} ne prit pas seulement garde à ces
+nouveaux venus. Il n’était occupé que d’aller trouver sa chère
+\bname{Cunégonde} à \bname{Constantinople}.
+
+
+
+\chapter{Voyage de \bname{Candide} à Constantinople}
+
+
+\lettrine{L}{e fidèle} \bname{Cacambo} avait déjà obtenu du patron turc qui allait
+reconduire le sultan Achmet à Constantinople qu’il recevrait \bname{Candide} et
+\bname{Martin} sur son bord. L’un et l’autre s’y rendirent après s’être
+prosternés devant Sa misérable Hautesse. \bname{Candide}, chemin faisant, disait
+à \bname{Martin}: «Voilà pourtant six rois détrônés avec qui nous avons soupé!
+et encore dans ces six rois il y en a un à qui j’ai fait l’aumône.
+Peut-être y a-t-il beaucoup d’autres princes plus infortunés. Pour moi,
+je n’ai perdu que cent moutons, et je vole dans les bras de \bname{Cunégonde}.
+Mon cher \bname{Martin}, encore une fois, \bname{Pangloss} avait raison, tout est bien.
+— Je le souhaite, dit \bname{Martin}. — Mais, dit \bname{Candide}, voilà une aventure bien
+peu vraisemblable que nous avons eue à \bname{Venise}. On n’avait jamais vu ni
+ouï conter que six rois détrônés soupassent ensemble au cabaret. — Cela
+n’est pas plus extraordinaire, dit \bname{Martin}, que la plupart des choses
+qui nous sont arrivées. Il est très commun que des rois soient
+détrônés; et à l’égard de l’honneur que nous avons eu de souper avec
+eux, c’est une bagatelle qui ne mérite pas notre attention.»
+% Qu’importe avec qui l’on soupe, pourvu qu’on fasse bonne chère?»
+
+À peine \bname{Candide} fut-il dans le vaisseau, qu’il sauta au cou de son
+ancien valet, de son ami \bname{Cacambo}. «Eh bien! lui dit-il, que fait
+\bname{Cunégonde}? est-elle toujours un prodige de beauté? m’aime-t-elle
+toujours? comment se porte-t-elle? Tu lui as, sans doute, acheté un
+palais à Constantinople?
+
+
+
+— Mon cher maître, répondit \bname{Cacambo}, \bname{Cunégonde} lave les écuelles sur le
+bord de la Propontide, chez un prince qui a très peu d’écuelles; elle
+est esclave dans la maison d’un ancien souverain, nommé \bname{Ragotski}, à
+qui le Grand-Turc donne trois écus par jour dans son asile; mais, ce
+qui est bien plus triste, c’est qu’elle a perdu sa beauté, et qu’elle
+est devenue horriblement laide. — Ah! belle ou laide, dit \bname{Candide}, je
+suis honnête homme, et mon devoir est de l’aimer toujours. Mais comment
+peut-elle être réduite à un état si abject avec les cinq ou six
+millions que tu avais emportés? — Bon, dit \bname{Cacambo}, ne m’en a-t-il pas
+fallu donner deux au senor don \bname{Fernando} d’Ibaraa, y Figueora, y
+Mascarenès, y \bname{Lampourdos}, y Souza, gouverneur de \bname{Buenos} Aires, pour
+avoir la permission de reprendre M\up{lle}~\bname{Cunégonde}? et un pirate
+ne nous a-t-il pas bravement dépouillés de tout le reste? Ce pirate ne
+nous a-t-il pas menés au cap de Matapan, à Milo, à Nicarie, à Samos, à
+Petra, aux \bname{Dardanelles}, à Marmara, à \bname{Scutari}? \bname{Cunégonde} et la vieille
+servent chez ce prince dont je vous ai parlé, et moi je suis esclave du
+sultan détrôné. — Que d’épouvantables calamités enchaînées les unes aux
+autres! dit \bname{Candide}. Mais, après tout, j’ai encore quelques diamants;
+je délivrerai aisément \bname{Cunégonde}. C’est bien dommage qu’elle soit
+devenue si laide.»
+
+
+
+Ensuite, se tournant vers \bname{Martin}: «Que pensez-vous, dit-il, qui soit le
+plus à plaindre, de l’empereur Achmet, de l’empereur Ivan, du roi
+Charles-Édouard, ou de moi? — Je n’en sais rien, dit \bname{Martin}; il faudrait
+que je fusse dans vos cœurs pour le savoir. — Ah! dit \bname{Candide}, si
+\bname{Pangloss} était ici, il le saurait, et nous l’apprendrait. — Je ne sais,
+dit \bname{Martin}, avec quelles balances votre \bname{Pangloss} aurait pu peser les
+infortunes des hommes, et apprécier leurs douleurs. Tout ce que je
+présume c’est qu’il y a des millions d’hommes sur la terre cent fois
+plus à plaindre que le roi Charles-Édouard, l’empereur Ivan, et le
+sultan Achmet. — Cela pourrait bien être», dit \bname{Candide}.
+
+On arriva en peu de jours sur le canal de la mer Noire. \bname{Candide}
+commença par racheter \bname{Cacambo} fort cher; et, sans perdre de temps, il
+se jeta dans une galère, avec ses compagnons, pour aller sur le rivage
+de la Propontide chercher \bname{Cunégonde}, quelque laide qu’elle pût être.
+
+
+Il y avait dans la chiourme deux forçats qui ramaient fort mal, et à
+qui le levanti patron appliquait de temps en temps quelques coups de
+nerf de bœuf sur leurs épaules nues; \bname{Candide}, par un mouvement
+naturel, les regarda plus attentivement que les autres galériens, et
+s’approcha d’eux avec pitié. Quelques traits de leurs visages défigurés
+lui parurent avoir un peu de ressemblance avec \bname{Pangloss} et avec ce
+malheureux jésuite, ce baron, ce frère de M\up{lle}~\bname{Cunégonde}. Cette
+idée l’émut et l’attrista. Il les considéra encore plus attentivement.
+«En vérité, dit-il à \bname{Cacambo}, si je n’avais pas vu pendre maître
+\bname{Pangloss}, et si je n’avais pas eu le malheur de tuer le baron, je
+croirais que ce sont eux qui rament dans cette galère.»
+
+
+Au nom du baron et de \bname{Pangloss} les deux forçats poussèrent un grand
+cri, s’arrêtèrent sur leur banc, et laissèrent tomber leurs rames. Le
+levanti patron accourait sur eux, et les coups de nerf de bœuf
+\bname{redoublaient}. «Arrêtez! arrêtez! seigneur, s’écria \bname{Candide}; je vous
+donnerai tant d’argent que vous voudrez. — Quoi! c’est \bname{Candide}! disait
+l’un des forçats; — quoi! c’est \bname{Candide}! disait l’autre. — Est-ce un songe?
+dit \bname{Candide}; veillé-je? suis-je dans cette galère? Est-ce là M.
+le baron, que j’ai tué? est-ce là maître \bname{Pangloss}, que j’ai vu pendre?
+
+
+— C’est nous-mêmes, c’est nous-mêmes, répondaient-ils. — Quoi! c’est là ce
+grand philosophe? disait \bname{Martin}. — Eh! monsieur le levanti patron, dit
+\bname{Candide}, combien voulez-vous d’argent pour la rançon de M. de
+Thunder-ten-tronckh, un des premiers barons de l’empire, et de M.~\bname{Pangloss}, le plus profond métaphysicien d’Allemagne? — Chien de chrétien,
+répondit le levanti patron, puisque ces deux chiens de forçats
+chrétiens sont des barons et des métaphysiciens, ce qui est sans doute
+une grande dignité dans leur pays, tu m’en donneras cinquante mille
+sequins. — Vous les aurez, monsieur; ramenez-moi comme un éclair à
+Constantinople, et vous serez payé sur-le-champ. Mais non, menez-moi
+chez M\up{lle}~\bname{Cunégonde}.» Le levanti patron, sur la première offre
+de \bname{Candide}, avait déjà tourné la proue vers la ville, et il faisait
+ramer plus vite qu’un oiseau ne fend les airs.
+
+\bname{Candide} embrassa cent fois le baron et \bname{Pangloss}. «Et comment ne vous
+ai-je pas tué, mon cher baron? et mon cher \bname{Pangloss}, comment êtes-vous
+en vie, après avoir été pendu? et pourquoi êtes-vous tous deux aux
+galères en Turquie? — Est-il bien vrai que ma chère sœur soit dans ce
+pays? disait le baron. — Oui, répondait \bname{Cacambo}. — Je revois donc mon cher
+\bname{Candide}! s’écriait \bname{Pangloss}.» \bname{Candide} leur présentait \bname{Martin} et \bname{Cacambo}.
+Ils s’embrassaient tous; ils parlaient tous à-la-fois. La galère
+volait, ils étaient déjà dans le port. On fit venir un Juif, à qui
+\bname{Candide} vendit pour cinquante mille sequins un diamant de la valeur de
+cent mille, et qui lui jura par Abraham qu’il n’en pouvait donner
+davantage. Il paya incontinent la rançon du baron et de \bname{Pangloss}.
+Celui-ci se jeta aux pieds de son libérateur, et les baigna de larmes;
+l’autre le remercia par un signe de tête, et lui promit de lui rendre
+cet argent à la première occasion. «Mais est-il bien possible que ma
+sœur soit en Turquie? disait-il. — Rien n’est si possible, reprit
+\bname{Cacambo}, puisqu’elle écure la vaisselle chez un prince de \bname{Transylvanie}.»
+On fit aussitôt venir deux Juifs; \bname{Candide} vendit encore des diamants;
+et ils repartirent tous dans une autre galère pour aller délivrer
+\bname{Cunégonde}.
+
+
+\chapter[Ce qui arriva à Candide, à Cunégonde…]{Ce qui arriva à \bname{Candide}, à \bname{Cunégonde},\\à \bname{Pangloss}, à \bname{Martin}, etc.}
+
+
+\lettrine[findent=1pt,ante=«]{P}{ardon}, encore une fois, dit \bname{Candide} au baron; pardon, mon Révérend
+Père, de vous avoir donné un grand coup d’épée au travers du corps.
+— N’en parlons plus, dit le baron; je fus un peu trop vif, je l’avoue;
+mais puisque vous voulez savoir par quel hasard vous m’avez vu aux
+galères, je vous dirai qu’après avoir été guéri de ma blessure par le
+frère apothicaire du collège, je fus attaqué et enlevé par un parti
+espagnol; on me mit en prison à \bname{Buenos} Aires dans le temps que ma sœur
+venait d’en partir. Je demandai à retourner à Rome auprès du père
+général. Je fus nommé pour aller servir d’aumônier à Constantinople
+auprès de M. l’ambassadeur de France. Il n’y avait pas huit jours
+que j’étais entré en fonction, quand je trouvai sur le soir un jeune
+icoglan très bien fait. Il faisait fort chaud: le jeune homme voulut se
+baigner; je pris cette occasion de me baigner aussi. Je ne savais pas
+que ce fût un crime capital pour un chrétien d’être trouvé tout nu avec
+un jeune musulman. Un cadi me fit donner cent coups de bâton sous la
+plante des pieds, et me condamna aux galères. Je ne crois pas qu’on ait
+fait une plus horrible injustice. Mais je voudrais bien savoir pourquoi
+ma sœur est dans la cuisine d’un souverain de \bname{Transylvanie} réfugié
+chez les Turcs.
+
+
+— Mais vous, mon cher \bname{Pangloss}, dit \bname{Candide}, comment se peut-il que je
+vous revoie? — Il est vrai, dit \bname{Pangloss}, que vous m’avez vu pendre; je
+devais naturellement être brûlé mais vous vous souvenez qu’il plut à
+verse lorsqu’on allait me cuire: l’orage fut si violent qu’on désespéra
+d’allumer le feu; je fus pendu, parce qu’on ne put mieux faire: un
+chirurgien acheta mon corps, m’emporta chez lui, et me disséqua. Il me
+fit d’abord une incision cruciale depuis le nombril jusqu’à la
+clavicule. On ne pouvait pas avoir été plus mal pendu que je l’avais
+été. L’exécuteur des hautes œuvres de la sainte inquisition, lequel
+était sous-diacre, brûlait à la vérité les gens à merveille, mais il
+n’était pas accoutumé à pendre: la corde était mouillée et glissa mal,
+elle fut mal nouée; enfin je respirais encore: l’incision cruciale me
+fit jeter un si grand cri, que mon chirurgien tomba à la renverse; et
+croyant qu’il disséquait le diable, il s’enfuit en mourant de peur, et
+tomba encore sur l’escalier en fuyant. Sa femme accourut au bruit d’un
+cabinet voisin: elle me vit sur la table étendu avec mon incision
+cruciale; elle eut encore plus de peur que son mari, s’enfuit, et tomba
+sur lui. Quand ils furent un peu revenus à eux, j’entendis la
+chirurgienne qui disait au chirurgien: \frquote{\localleftbox{« }Mon bon, de quoi vous
+avisez-vous aussi de disséquer un hérétique? ne savez-vous pas que le diable est toujours dans le corps de ces gens-là? je vais vite chercher un prêtre pour l’exorciser.}\localleftbox{}
+Je frémis à ce propos, et je ramassai le
+peu de forces qui me restaient pour crier: «Ayez pitié de moi!» Enfin le
+barbier portugais s’enhardit: il recousit ma peau; sa femme même eut
+soin de moi; je fus sur pied au bout de quinze jours. Le barbier me
+trouva une condition, et me fit laquais d’un chevalier de Malte qui
+allait à \bname{Venise}: mais mon maître n’ayant pas de quoi me payer, je me
+mis au service d’un marchand vénitien, et je le suivis à
+Constantinople.
+
+
+«Un jour il me prit fantaisie d’entrer dans une mosquée; il n’y avait
+qu’un vieil iman et une jeune dévote très jolie qui disait ses
+patenôtres; sa gorge était toute découverte: elle avait entre ses deux
+tétons un beau bouquet de tulipes, de roses, d’anémones, de renoncules,
+d’hyacinthes, et d’oreilles d’ours: elle laissa tomber son
+bouquet; je
+le ramassai, et je le lui remis avec un empressement très respectueux.
+Je fus si longtemps à le lui remettre, que l’iman se mit en colère, et
+voyant que j’étais chrétien, il cria à l’aide. On me mena chez le cadi,
+qui me fit donner cent coups de latte sous la plante des pieds, et
+m’envoya aux galères. Je fus enchaîné précisément dans la même galère
+et au même banc que M.~le baron. Il y avait dans cette galère
+quatre jeunes gens de Marseille, cinq prêtres napolitains, et deux
+moines de Corfou, qui nous dirent que de pareilles aventures arrivaient
+tous les jours. M.~le baron prétendait qu’il avait essuyé une
+plus grande injustice que moi: je prétendais, moi, qu’il était beaucoup
+plus permis de remettre un bouquet sur la gorge d’une femme que d’être
+tout nu avec un icoglan. Nous disputions sans cesse, et nous recevions
+vingt coups de nerf de bœuf par jour, lorsque l’enchaînement des
+événements de cet univers vous a conduit dans notre galère, et que vous
+nous avez rachetés.
+
+— Eh bien! mon cher \bname{Pangloss}, lui dit \bname{Candide}, quand vous avez été pendu,
+disséqué, roué de coups, et que vous avez ramé aux galères, avez-vous
+toujours pensé que tout allait le mieux du monde? — Je suis toujours de
+mon premier sentiment, répondit \bname{Pangloss}; car enfin je suis philosophe;
+il ne me convient pas de me dédire, Leibnitz ne pouvant pas avoir tort,
+et l’harmonie préétablie étant d’ailleurs la plus belle chose du monde,
+aussi bien que le plein et la matière subtile.»
+
+
+
+\chapter{Comment \bname{Candide} retrouva \bname{Cunégonde} et la vieille}
+
+
+\lettrine{P}{endant} que \bname{Candide}, le baron, \bname{Pangloss}, \bname{Martin}, et \bname{Cacambo}, contaient
+leurs aventures, qu’ils raisonnaient sur les événements contingents ou
+non contingents de cet univers, qu’ils disputaient sur les effets et
+les causes, sur le mal moral et sur le mal physique, sur la liberté et
+la nécessité, sur les consolations que l’on peut éprouver lorsqu’on est
+aux galères en Turquie, ils abordèrent sur le rivage de la Propontide,
+à la maison du prince de \bname{Transylvanie}. Les premiers objets qui se
+présentèrent furent \bname{Cunégonde} et la vieille, qui étendaient des
+serviettes sur des ficelles pour les faire sécher.
+
+Le baron pâlit à cette vue. Le tendre amant \bname{Candide} en voyant sa belle
+\bname{Cunégonde} rembrunie, les yeux éraillés, la gorge sèche, les joues
+ridées, les bras rouges et écaillés, recula trois pas, saisi d’horreur,
+et avança ensuite par bon procédé. Elle embrassa \bname{Candide} et son frère:
+on embrassa la vieille: \bname{Candide} les racheta toutes deux.
+
+Il y avait une petite métairie dans le voisinage; la vieille proposa à
+\bname{Candide} de s’en accommoder, en attendant que toute la troupe eût une
+meilleure destinée. \bname{Cunégonde} ne savait pas qu’elle était enlaidie,
+personne ne l’en avait avertie: elle fit souvenir \bname{Candide} de ses
+promesses avec un ton si absolu, que le bon \bname{Candide} n’osa pas la
+refuser. Il signifia donc au baron qu’il allait se marier avec sa
+sœur. «Je ne souffrirai jamais, dit le baron, une telle bassesse de sa
+part, et une telle insolence de la vôtre; cette infamie ne me sera
+jamais reprochée: les enfants de ma sœur ne pourraient entrer dans les
+chapitres d’Allemagne. Non, jamais ma sœur n’épousera qu’un baron de
+l’empire.» \bname{Cunégonde} se jeta à ses pieds, et les baigna de larmes; il
+fut inflexible. «Maître fou, lui dit \bname{Candide}, je t’ai réchappé des
+galères, j’ai payé ta rançon, j’ai payé celle de ta sœur; elle lavait
+ici des écuelles, elle est laide, j’ai la bonté d’en faire ma femme; et
+tu prétends encore t’y opposer! je te retuerais si j’en croyais ma
+colère. — Tu peux me tuer encore, dit le baron, mais tu n’épouseras pas
+ma sœur de mon vivant.»
+
+
+
+
+\chapter{Conclusion}
+
+
+\lettrine{C}{andide}, dans le fond de son cœur, n’avait aucune envie d’épouser
+\bname{Cunégonde}; mais l’impertinence extrême du baron le déterminait à
+conclure le mariage; et \bname{Cunégonde} le pressait si vivement qu’il ne
+pouvait s’en dédire. Il consulta \bname{Pangloss}, \bname{Martin}, et le fidèle
+\bname{Cacambo}. \bname{Pangloss} fit un beau mémoire par lequel il prouvait que le
+baron n’avait nul droit sur sa sœur, et qu’elle pouvait, selon toutes
+les lois de l’empire, épouser \bname{Candide} de la main gauche. \bname{Martin} conclut
+à jeter le baron dans la mer; \bname{Cacambo} décida qu’il fallait le rendre au
+levanti patron, et le remettre aux galères, après quoi on l’enverrait à
+Rome au père général par le premier vaisseau. L’avis fut trouvé fort
+bon; la vieille l’approuva; on n’en dit rien à sa sœur; la chose fut
+exécutée pour quelque argent, et on eut le plaisir d’attraper un
+jésuite, et de punir l’orgueil d’un baron allemand.
+
+
+Il était tout naturel d’imaginer qu’après tant de désastres, \bname{Candide}
+marié avec sa maîtresse, et vivant avec le philosophe \bname{Pangloss}, le
+philosophe \bname{Martin}, le prudent \bname{Cacambo}, et la vieille, ayant d’ailleurs
+rapporté tant de diamants de la patrie des anciens Incas, mènerait la
+vie du monde la plus agréable; mais il fut tant friponné par les Juifs,
+qu’il ne lui resta plus rien que sa petite métairie; sa femme devenant
+tous les jours plus laide devint acariâtre et insupportable: la vieille
+était infirme, et fut encore de plus mauvaise humeur que \bname{Cunégonde}.
+\bname{Cacambo}, qui travaillait au jardin, et qui allait vendre des \bname{légumes} à
+Constantinople, était excédé de travail, et maudissait sa destinée.
+\bname{Pangloss} était au désespoir de ne pas briller dans quelque université
+d’Allemagne. Pour \bname{Martin}, il était fermement persuadé qu’on est
+également mal partout; il prenait les choses en patience. \bname{Candide},
+\bname{Martin}, et \bname{Pangloss}, disputaient quelquefois de métaphysique et de
+morale. On voyait souvent passer sous les fenêtres de la métairie des
+bateaux chargés d’effendis, de bachas, de cadis, qu’on envoyait en exil
+à Lemnos, à Mytilène, à Erzeroum: on voyait venir d’autres cadis,
+d’autres bachas, d’autres effendis, qui prenaient la place des
+expulsés, et qui étaient expulsés à leur tour: on voyait des têtes
+proprement empaillées qu’on allait présenter à la sublime Porte. Ces
+spectacles faisaient redoubler les dissertations; et quand on ne
+disputait pas, l’ennui était si excessif, que la vieille osa un jour
+leur dire: «Je voudrais savoir lequel est le pire, ou d’être violée cent
+fois par des pirates nègres, d’avoir une fesse coupée, de passer par
+les baguettes chez les \bname{Bulgares}, d’être fouetté et pendu dans un
+auto-da-fé, d’être disséqué, de ramer en galère, d’éprouver enfin
+toutes les misères par lesquelles nous avons tous passé, ou bien de
+rester ici à ne rien faire? — C’est une grande question», dit \bname{Candide}.
+
+
+
+
+
+
+Ce discours fit naître de nouvelles réflexions, et \bname{Martin} surtout
+conclut que l’homme était né pour vivre dans les convulsions de
+l’inquiétude, ou dans la léthargie de l’ennui. \bname{Candide} n’en convenait
+pas, mais il n’assurait rien. \bname{Pangloss} avouait qu’il avait toujours
+horriblement souffert; mais ayant soutenu une fois que tout allait à
+merveille, il le soutenait toujours, et n’en croyait rien.
+
+Une chose acheva de confirmer \bname{Martin} dans ses détestables principes, de
+faire hésiter plus que jamais \bname{Candide} et d’embarrasser \bname{Pangloss}. C’est
+qu’ils virent un jour aborder dans leur métairie \bname{Paquette} et le frère
+Giroflée, qui étaient dans la plus extrême misère; ils avaient bien
+vite mangé leurs trois mille piastres, s’étaient quittés, s’étaient
+raccommodés, s’étaient brouillés, avaient été mis en
+prison; s’étaient
+enfuis, et enfin frère Giroflée s’était fait turc. \bname{Paquette} continuait
+son métier partout, et n’y gagnait plus rien. «Je l’avais bien prévu,
+dit \bname{Martin} à \bname{Candide}, que vos présents seraient bientôt dissipés, et ne
+les rendraient que plus misérables. Vous avez regorgé de millions de
+piastres, vous et \bname{Cacambo}, et vous n’êtes pas plus heureux que frère
+Giroflée et \bname{Paquette}. — Ah! ah! dit \bname{Pangloss} à \bname{Paquette}, le ciel vous
+ramène donc ici parmi nous. Ma pauvre enfant! savez-vous bien que vous
+m’avez coûté le bout du nez, un œil, et une oreille? Comme vous voilà
+faite! Eh! qu’est-ce que ce monde!» Cette nouvelle aventure les engagea
+à philosopher plus que jamais.
+
+Il y avait dans le voisinage un derviche très fameux qui passait pour
+le meilleur philosophe de la Turquie; ils allèrent le consulter;
+\bname{Pangloss} porta la parole, et lui dit: «Maître, nous venons vous prier de
+nous dire pourquoi un aussi étrange animal que l’homme a été formé.
+
+
+
+
+
+
+— De quoi te mêles-tu? lui dit le derviche; est-ce là ton affaire? — Mais,
+mon Révérend Père, dit \bname{Candide}, il y a horriblement de mal sur la
+terre. — Qu’importe, dit le derviche, qu’il y ait du mal ou du bien?
+quand Sa Hautesse envoie un vaisseau en Égypte, s’embarrasse-t-elle si
+les souris qui sont dans le vaisseau sont à leur aise ou non? — Que
+faut-il donc faire? dit \bname{Pangloss}. — Te taire, dit le derviche. — Je me
+flattais, dit \bname{Pangloss}, de raisonner un peu avec vous des effets et des
+causes, du meilleur des mondes possibles, de l’origine du mal, de la
+nature de l’âme, et de l’harmonie préétablie.» Le derviche, à ces mots,
+leur ferma la porte au nez.
+
+
+
+Pendant cette conversation, la nouvelle s’était répandue qu’on venait
+d’étrangler à Constantinople deux vizirs du banc et le muphti, et qu’on
+avait empalé plusieurs de leurs amis. Cette catastrophe faisait partout
+un grand bruit pendant quelques heures. \bname{Pangloss}, \bname{Candide}, et \bname{Martin},
+en retournant à la petite métairie, rencontrèrent un bon vieillard qui
+prenait le frais à sa porte sous un berceau d’orangers. \bname{Pangloss}, qui
+était aussi curieux que raisonneur, lui demanda comment se nommait le
+muphti qu’on venait d’étrangler. «Je n’en sais rien, répondit le
+bonhomme, et je n’ai jamais su le nom d’aucun muphti ni d’aucun vizir.
+J’ignore absolument l’aventure dont vous me parlez; je présume qu’en
+général ceux qui se mêlent des affaires publiques périssent quelquefois
+misérablement, et qu’ils le méritent; mais je ne m’informe jamais de ce
+qu’on fait à Constantinople; je me contente d’y envoyer vendre les
+fruits du jardin que je cultive.» Ayant dit ces mots, il fit entrer les
+étrangers dans sa maison; ses deux filles et ses deux fils leur
+présentèrent plusieurs sortes de sorbets qu’ils faisaient eux-mêmes, du
+kaïmak piqué d’écorces de cédrat confit, des oranges, des citrons, des
+limons, des ananas, des dattes, des pistaches, du café de Moka qui
+n’était point mêlé avec le mauvais café de Batavia et des îles. Après
+quoi les deux filles de ce bon musulman parfumèrent les barbes de
+\bname{Candide}, de \bname{Pangloss}, et de \bname{Martin}.
+
+
+
+«Vous devez avoir, dit \bname{Candide} au Turc, une vaste et magnifique terre?
+— Je n’ai que vingt arpents, répondit le Turc; je les cultive avec mes
+enfants; le travail éloigne de nous trois grands maux, l’ennui, le
+vice, et le besoin.»
+
+
+\bname{Candide} en retournant dans sa métairie fit de profondes réflexions sur
+le discours du Turc. Il dit à \bname{Pangloss} et à \bname{Martin}: «Ce bon vieillard me
+paraît s’être fait un sort bien préférable à celui des six rois avec
+qui nous avons eu l’honneur de souper. — Les grandeurs, dit \bname{Pangloss},
+sont fort dangereuses, selon le rapport de tous les philosophes; car
+enfin Églon, roi des Moabites, fut assassiné par Aod; \bname{Absalon} fut pendu
+par les cheveux et percé de trois dards; le roi \bname{Nadab}, fils de
+\bname{Jéroboam}, fut tué par \bname{Baasa}; le roi Éla, par \bname{Zambri}; \bname{Ochosias}, par
+\bname{Jéhu}; \bname{Athalie}, par \bname{Joïada}; les rois \bname{Joachim}, \bname{Jéchonias}, \bname{Sédécias},
+furent esclaves. Vous savez comment périrent \bname{Crésus}, \bname{Astyage}, \bname{Darius},
+\bname{Denys} de \bname{Syracuse}, \bname{Pyrrhus}, \bname{Persée}, \bname{Annibal}, \bname{Jugurtha}, \bname{Arioviste},
+\bname{César}, \bname{Pompée}, \bname{Néron}, \bname{Othon}, \bname{Vitellius}, \bname{Domitien}, \bname{Richard}~II
+\bname{d’Angleterre}, \bname{Édouard}~II, \bname{Henri}~VI, \bname{Richard}~III, \mbox{Marie Stuart}, Charles~I\up{er}, les trois \bname{Henri} de France, l’empereur \bname{Henri}~IV? Vous savez… — Je
+sais aussi, dit \bname{Candide}, qu’il faut cultiver notre jardin. — Vous avez
+raison, dit \bname{Pangloss}; car, quand l’homme fut mis dans le jardin d’Éden,
+il y fut mis \emph{ut operaretur eum}, pour qu’il travaillât; ce qui prouve
+que l’homme n’est pas né pour le repos. — Travaillons sans raisonner, dit
+\bname{Martin}, c’est le seul moyen de rendre la vie supportable.
+
+Toute la petite société entra dans ce louable dessein; chacun se mit à
+exercer ses talents. La petite terre rapporta beaucoup. \bname{Cunégonde}
+était, à la vérité, bien laide; mais elle devint une excellente
+pâtissière; \bname{Paquette} broda; la vieille eut soin du linge. Il n’y eut
+pas jusqu’à frère Giroflée qui ne rendît service; il fut un très bon
+menuisier, et même devint honnête homme: et \bname{Pangloss} disait quelquefois
+à \bname{Candide}: «Tous les événements sont enchaînés dans le meilleur des
+mondes possibles; car enfin si vous n’aviez pas été chassé d’un beau
+château à grands coups de pied dans le derrière pour l’amour de
+M\up{lle}~\bname{Cunégonde}, si vous n’aviez pas été mis à l’inquisition, si
+vous n’aviez pas couru l’Amérique à pied, si vous n’aviez pas donné un
+bon coup d’épée au baron, si vous n’aviez pas perdu tous vos moutons du
+bon pays d’Eldorado, vous ne mangeriez pas ici des cédrats confits et
+des pistaches. — Cela est bien dit, répondit \bname{Candide}, mais il faut
+cultiver notre jardin.»
+
+
+\endinput
+
+
+
diff --git a/macros/luatex/latex/tango/examples/book-mathematics.tex b/macros/luatex/latex/tango/examples/book-mathematics.tex
new file mode 100644
index 0000000000..cbcebe1ae4
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/book-mathematics.tex
@@ -0,0 +1,44 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[french,PubliClass=book,ColorTheme=Steel,FontSize=11pt,
+StylisticSet={parallelslant,leqslant}]{tango}
+\renewcommand{\arraystretch}{1.3}
+\usepackage{tikz}
+\usetikzlibrary{calc,through,arrows}
+\tgosmartlists
+\AtBeginDocument{%
+\RenewCommandCopy{\setminus}{\smallsetminus}
+}
+\NewDocumentCommand\N{}{\ensuremath{\symbb{N}}}
+\NewDocumentCommand\Z{}{\ensuremath{\symbb{Z}}}
+\NewDocumentCommand\Q{}{\ensuremath{\symbb{Q}}}
+\NewDocumentCommand\R{}{\ensuremath{\symbb{R}}}
+\NewDocumentCommand\C{}{\ensuremath{\symbb{C}}}
+\NewDocumentCommand\Pt{m}{\ensuremath{\symfrak{P}(#1)}}
+\NewDocumentCommand\rond{}{\mathrel{\circ}}
+\NewDocumentCommand\mesalg{m}{\overline{#1}}
+\NewDocumentCommand\Vector{m}{\overrightarrow{#1}}
+\DeclareMathOperator{\cl}{cl}
+\DeclareMathOperator{\sgn}{sgn}
+\newcounter{prop}
+\newstatement{prop}{prop}{Propriété}
+\newfixedcaption{\figcaption}{figure}
+%%
+\includeonly{rel-bin,recurrence,polynome-deg2,euler,puissance-cercle}
+%\includeonly{polynome-deg2}
+%%
+%\tangoSmartLists
+\begin{document}
+\frontmatter
+\tableofcontents
+\mainmatter
+%\tgosetup{ColorTheme=Framboise}
+\part{Algèbre}
+\include{rel-bin}
+\include{recurrence}
+\include{polynome-deg2}
+%\tgosetup{ColorTheme=Sapin}
+\part{Géométrie}
+\include{euler}
+\include{puissance-cercle}
+\backmatter
+\end{document} \ No newline at end of file
diff --git a/macros/luatex/latex/tango/examples/candide.tex b/macros/luatex/latex/tango/examples/candide.tex
new file mode 100644
index 0000000000..bd3432e7bf
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/candide.tex
@@ -0,0 +1,61 @@
+% !TEX TS-program = LuaLaTeX
+%
+\documentclass[french,Output=SmallTablet,PubliClass=book,twoside,Numbers=OldStyle,FontSize=9pt]{tango}
+
+\geometry{paperheight=18.5cm,paperwidth=11.2cm,heightrounded,top=1.2cm,bottom=2.8cm,headheight=14pt,headsep=12pt,footskip=13pt,inner=1.2cm,outer=2cm,}
+%
+\titleformat{\chapter}[display]{\filcenter\large\itshape\addfontfeature{RawFeature={-onum}}}
+{\normalfont\Large\scshape\addfontfeature{RawFeature={+c2sc}} \chaptername\space\thechapter}{1em}{}
+\titleformat{name=\chapter,numberless}[display]{\filcenter\large\itshape\addfontfeature{RawFeature={-onum}}}
+{}{0em}{}%
+\titlespacing{\chapter}{0pt}{20pt plus 8pt}{20pt plus 8pt}%
+%
+\newpagestyle{candide}{%
+ \sethead
+ [\addfontfeature{RawFeature=+onum}\thepage]
+[\addfontfeature{RawFeature=+c2sc}\MakeUppercase\chaptertitlename\space\thechapter][] % even
+ {}{\addfontfeature{RawFeature=+c2sc}\MakeUppercase\chaptertitle}
+ {\addfontfeature{RawFeature=+onum}\thepage} % odd
+ }
+ \newpagestyle{candidetoc}{%
+ \sethead
+ [\addfontfeature{RawFeature=+onum}\thepage]
+[\addfontfeature{RawFeature=+c2sc}\MakeUppercase\frenchcontentsname][] % even
+ {}{\addfontfeature{RawFeature=+c2sc}\MakeUppercase\frenchcontentsname}
+ {\addfontfeature{RawFeature=+onum}\thepage} % odd
+ }
+
+ \renewcommand\thechapter{\Roman{chapter}}
+ \titlecontents{chapter}
+ [3.5em] % ie, 1.5em (chapter) + 2.3em
+ {\normalfont}
+ {\contentslabel{3.5em}}
+ {\hspace*{-1.5em}}
+ {\titlerule*[1pc]{.}\contentspage}
+
+ %%%%%%%%%%%%
+\pagestyle{candide}
+%
+
+\usepackage{lettrine}
+
+
+\includeonly{Ch-1-15, Ch-16-30}
+
+\hypersetup{pdfpagelayout=TwoPageRight}
+
+\begin{document}
+
+
+
+\include{Ch-1-15}
+\include{Ch-16-30}
+\backmatter
+\pagestyle{candidetoc}
+\tableofcontents
+
+\end{document}
+
+
+
+
diff --git a/macros/luatex/latex/tango/examples/euler.tex b/macros/luatex/latex/tango/examples/euler.tex
new file mode 100644
index 0000000000..4d3ea54571
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/euler.tex
@@ -0,0 +1,512 @@
+
+\tgotitle{Droite et cercle d'Euler}
+\tgoshorttoc
+\section{Cercle circonscrit à un triangle}
+\subsection{Un résultat préliminaire}
+On sait depuis le collège que la droite qui joint les milieux de deux côtés d'un triangle est parallèle au troisième côté. Nous précisons ce résultat à l'aide d'un théorème qui nous sera utile par la suite (voir figure \ref{figmilieux}).
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$B$](B) at (0,0);
+\coordinate[label=right:$C$](C) at (4,0);
+\coordinate (T) at ($(B)!1!38:(C)$);
+\coordinate (S) at ($(C)!1!105:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B);
+\draw (A)--(C);
+\coordinate [label=right:$B'$] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=left:$C'$] (C') at ($(A)!0.5!(B)$);
+\draw[>=stealth,->,semithick](B)--(C);
+\draw[>=stealth,->,semithick](C')--(B');
+\foreach \point in {A,B,C,C',B'}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figmilieux}
+\end{figure}
+
+\begin{thm}
+Soit un triangle $ABC$ et soit $B'$ et $C'$ les milieux respectifs de $[AC]$ et $[AB]$. Alors
+les droites $(BC)$ et $(C'B')$ sont parallèles et $\overrightarrow{BC}=2\overrightarrow{C'B'}$.
+\label{thmilieux}
+\end{thm}
+
+\begin{proof}
+La relation de Chasles permet d'écrire
+\begin{align*}
+\overrightarrow{BC}&=\overrightarrow{BA}+\overrightarrow{AC},\\
+\intertext{puis, en utilisant une caractérisation vectorielle du milieu,}
+\overrightarrow{BC}&=2\overrightarrow{C'A}+2\overrightarrow{AB'},\\
+\overrightarrow{BC}&=2\left(\overrightarrow{C'A}+\overrightarrow{AB'}\right),\\
+\overrightarrow{BC}&=2\overrightarrow{C'B'}.\qedhere
+\end{align*}
+\end{proof}
+
+\subsection{Médiatrices des côtés d'un triangle}
+%%%%% Version 1
+ La médiatrice d'un segment est par définition la droite perpendiculaire à ce segment en son milieu. Nous admettrons que la médiatrice d'un segment est aussi l'ensemble des points qui sont équidistants des extrémités de ce segment (voir figure \ref{figcerccir}). Nous formulons alors le théorème suivant :
+%%%%%%
+%%%%%%
+%%%%%%
+%%%%% Version 2
+%La médiatrice d'un segment est par définition l'ensemble des points équidistants des extrémités de ce segment. Il est clair que le milieu du segment appartient à la médiatrice. On a même :
+% %
+%\begin{thm}
+%La médiatrice d'un segment est la droite perpendiculaire à ce segment en son milieu.
+%\end{thm}\label{caracmed}
+%
+%\begin{proof}
+%Soit un segment $[AB]$ et $I$ son milieu. Notons $\symcal{E}$ la médiatrice de $[AB]$ et $\symcal{D}$ la droite perpendiculaire à $[AB]$ en $I$. Montrons que $\symcal{E}=\symcal{D}$ par double inclusion.
+%Soit un point $M$ appartenant à la médiatrice $\symcal{E}$ de $[AB]$. On a $IA=IB$ et $MA=MB$ par définition de la médiatrice. Les triangles $MIA$ et $MIB$ sont donc superposables. Si $\alpha$ et $\beta$ sont les mesures respectives de $\widehat{MIA}$ et $\widehat{MIB}$, on en déduit que $\alpha=\beta$. L'angle $\widehat{AIB}$ et plat de mesure $\alpha+\beta$ :
+%\[\left.\begin{aligned} \alpha=\beta&\\\alpha+\beta=180\degre\end{aligned}\right\}\implies \alpha=\beta=90\degre.\]
+%Le point $M$ appartient donc à la droite $\symcal{D}$ : $\symcal{E}\subset\symcal{D}$.
+%
+%Réciproquement, supposons que $M\in\symcal{D}$. Considérons la réflexion $s$ d'axe $\symcal{D}$ : on a $s(A)=B$ et $s(M)=M$ (car l'ensemble des points invariants de $s$ est la droite $\symcal{D}$). Par conservation des distances, on a $MA=s(M)s(A)=MB$. Donc $M$ appartient à $\symcal{E}$ : $\symcal{E}\subset\symcal{D}$.
+%
+%On a donc bien $\symcal{E}=\symcal{D}$.
+%\end{proof}
+%
+%
+
+\begin{thm}
+Les médiatrices des trois côtés d'un triangle sont concourantes en un point équidistant des trois sommets et centre de l'unique cercle passant par ces derniers.
+\end{thm}
+
+\vspace{1ex}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$B$](B) at (0,0);
+\coordinate[label=right:$C$](C) at (4,0);
+\coordinate (T) at ($(B)!1!38:(C)$);
+\coordinate (S) at ($(C)!1!105:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=right:$B'$] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=left:$C'$] (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate [label=above:$O${\rule[-1mm]{0mm}{1mm}}](O) at (intersection of C'--X and B'--Y);
+\draw(C')--(O);
+\draw (B')--(O);
+\draw[dotted,semithick](A')--(O);
+\node [draw] at (O) [circle through={(C)}] {};
+\draw[gray](O)--(A);
+\draw[gray](O)--(B);
+\draw[gray](O)--(C);
+\foreach \point in {A,B,C,C',A',B',O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figcerccir}
+\end{figure}
+
+
+
+\begin{proof}
+Reprenons la figure \ref{figmilieux} et nommons $A'$ le milieu de $[BC]$. Les médatrices des côtés $[AB]$ et $[AC]$ sont sécantes en un point $O$. (On rappelle qu'un triangle est la donnée de trois points non alignés, autrement dit, un triangle aplati ne peut être considéré comme un triangle : cela assure que les deux médiatrices sont bien sécantes.) Le point $O$ se trouve à la fois sur la médiatrice de $[AB]$ et sur la médiatrice de $[AC]$ : il est donc à la fois équidistant de $A$ et $B$ ($OA=OB$) et équidistant de $A$ et $C$ ($OA=OC$). On a donc finalement $OB=OC$, ce qui assure que la médiatrice de $[BC]$ passe par $O$. Les trois médiatrices sont donc concourantes en $O$, point équidistant des trois sommets du triangle et par conséquent centre d'un cercle passant par ces sommets. Pour établir l'unicité d'un tel cercle, il suffit de remarquer que le centre d'un cercle passant par les sommets est nécessairement équidistant des sommets donc point de concours des médiatrices.
+\end{proof}
+
+Le cercle en question est le \emph{cercle circonscrit} au triangle.
+
+\subsection{Un cas particulier}
+Le cas du cercle circonscrit au triangle rectangle est bien connu (voir figure \ref{figtrec}).
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$B$](B) at (0,0);
+\coordinate[label=right:$C$](C) at (4,0);
+\coordinate (T) at ($(B)!1!30:(C)$);
+\coordinate (S) at ($(C)!1!120:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=left:$B'${\rule{1.3mm}{0mm}}] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=right:{\rule{1.3mm}{0mm}}$C'$] (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate(O) at (intersection of C'--X and B'--Y);
+\draw(C')--(O);
+\draw (B')--(O);
+\draw[dotted,semithick](A')--(O);
+\node [draw] at (O) [circle through={(C)}] {};
+\draw[gray](O)--(A);
+\draw[gray](O)--(B);
+\draw[gray](O)--(C);
+\foreach \point in {A,B,C,C',A',B',O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figtrec}
+\end{figure}
+
+
+\begin{thm}
+Si un triangle est rectangle, alors le centre de son cercle circonscrit est le milieu de l'hypoténuse qui est donc un diamètre du cercle. Réciproquement si le cercle circonscrit à un triangle admet l'un des côtés comme diamètre, alors ce triangle est rectangle et admet le côté en question pour hypoténuse.
+\label{diamtrrec}
+\end{thm}
+
+\begin{proof}
+Supposons le triangle $ABC$ rectangle en $A$. La droite $(AB)$ est alors perpendiculaire à la droite $(AC)$.
+D'après le théorème \ref{thmilieux} on sait que $\overrightarrow{AB}=2\overrightarrow{B'A'}$ et en particulier que les droites $(AB)$ et $(B'A')$ sont parallèles. On en déduit que les droites $(B'A')$ et $(AC)$ sont perpendiculaires:
+\[\left.\begin{aligned} &(AB)\parallel(A'B')\\
+\text{et}&\\
+&(AB)\perp(AC)\end{aligned}\right\}\implies (A'B')\perp(AC).
+\]
+
+La droite $(B'A')$, perpendiculaire au segment $[AC]$ en son milieu, en est la médiatrice. De même, $(C'A')$ est la médiatrice du segment $[AB]$. Le point $A'$, milieu de $[BC]$, est commun à ces deux médiatrices : il est donc le centre du cercle circonscrit au triangle.
+
+
+
+Réciproquement, supposons que le milieu $A'$ de $[BC]$ soit le centre du cercle circonscrit. Ce point est alors équidistant de $A$ et $C$, donc est un point de la médiatrice du segment $[AC]$; il en est de même pour $B'$, milieu de ce segment. La droite $(A'B')$ est donc la médiatrice du segment $[AC]$ et lui est perpendiculaire. Cette droite est aussi parallèle à $(AB)$, en vertu du théorème \ref{thmilieux}. De la même façon que précédemment, on en déduit que les droites $(AB)$ et $(AC)$ sont perpendiculaires. Le triangle $ABC$ est donc rectangle en $A$.
+\end{proof}
+
+\begin{remark} La situation représentée sur la figure \ref{figcerccir} est celle d'un triangle acutangle. On comprend assez rapidement (mais ceci ne constitue pas une démonstration) que le centre du cercle circonscrit est intérieur au triangle si les trois angles sont aigus et extérieur dans le cas où l'un des angles est obtus (voir figure \ref{figtrobtu}). Le cas du triangle rectangle constitue en quelque sorte une situation limite…
+\end{remark}
+
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$B$](B) at (0,0);
+\coordinate[label=right:$C$](C) at (4,0);
+\coordinate (T) at ($(B)!1!25:(C)$);
+\coordinate (S) at ($(C)!1!140:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=above:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=left:$B'${\rule{1.3mm}{0mm}}] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=right:{\rule{1.3mm}{0mm}}$C'$] (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate [label=below:$O${\rule[-1mm]{0mm}{1mm}}](O) at (intersection of C'--X and B'--Y);
+\draw(C')--(O);
+\draw (B')--(O);
+\draw[dotted,semithick](A')--(O);
+\node [draw] at (O) [circle through={(C)}] {};
+\draw[gray](O)--(A);
+\draw[gray](O)--(B);
+\draw[gray](O)--(C);
+\foreach \point in {A,B,C,C',A',B',O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figtrobtu}
+\end{figure}
+
+
+
+\section{Centre de gravité d'un triangle}
+Il est connu que les médianes d'un triangle sont concourantes en un point situé aux deux tiers de chacune d'elles à partir du sommet. C'est à cette propriété que nous allons maintenant nous intéresser, sous un angle vectoriel (voir figure \ref{figmedianes}).
+
+
+\begin{thm}\label{thgravit}%
+Soit un triangle $ABC$ et soit $A'$, $B'$ et $C'$ les milieux respectifs des côtés $[BC]$, $[AC]$ et $[AB]$.
+Les médianes de ce triangle sont concourantes en un point $G$, nommé centre de gravité du triangle et qui est l'unique point du plan à vérifier les relations vectorielles suivantes :
+\begin{gather}
+\overrightarrow{GA}+\overrightarrow{GB}+\overrightarrow{GC}=\vec{0}\,,\label{eqisobar}\\
+\overrightarrow{AG}=\frac23\overrightarrow{AA'}\,,\quad\overrightarrow{BG}=\frac23\overrightarrow{BB'}\quad\text{et}\quad\overrightarrow{CG}=\frac23\overrightarrow{CC'}\,.\label{eqGmediane}
+\end{gather}%
+\end{thm}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$B$](B) at (0,0);
+\coordinate[label=below:$C$](C) at (4,0);
+\coordinate (T) at ($(B)!1!36:(C)$);
+\coordinate (S) at ($(C)!1!107:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=right:$B'$](B') at ($(A)!0.5!(C)$);
+\coordinate[label=left:$C'$](C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate (O) at (intersection of C'--X and B'--Y);
+\coordinate[label=above:$G${\rule[-1mm]{0mm}{1mm}}] (G) at ($(A')!0.333!(A)$);
+\coordinate (H) at ($(O)!3!(G)$);
+\draw (A)--(A');
+\draw[dotted,semithick] (B)--(B');
+\draw[dotted,semithick] (C)--(C');
+\foreach \point in {A,B,C,A',G,C',B'}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figmedianes}
+\end{figure}
+
+
+
+\begin{proof}
+Pour tout point $M$ du plan, on considère le vecteur
+\[
+\overrightarrow{v(M)}=\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}.
+\]
+
+ Nous nous proposons de prouver qu'il existe un point $M$ et un seul pour lequel ce vecteur est nul : cet unique point $M$ sera le point $G$ que nous cherchons. À cet effet nous allons transformer le vecteur $\overrightarrow{v(M)}$, en faisant notamment intervenir un des milieux, ici $A'$, grâce à la relation de Chasles. Nous rappelons que ce milieu est caractérisé par $\overrightarrow{A'B}+\overrightarrow{A'C}=\vec{0}$.
+%\DinoXiPhoneCommand{%
+\begin{align*}
+\overrightarrow{v(M)}&=
+(\overrightarrow{MA'}+\overrightarrow{A'A})+
+(\overrightarrow{MA'}+\overrightarrow{A'B})+
+(\overrightarrow{MA'}+\overrightarrow{A'C}),\\
+&=
+3\overrightarrow{MA'}+\overrightarrow{A'A}+\underbrace{\overrightarrow{A'B}+\overrightarrow{A'C}}_{\vec{0}}.
+\end{align*}
+
+Nous transformons alors le vecteur $\overrightarrow{MA'}$ en faisant intervenir le point $A$ grâce à la relation de Chasles :
+\begin{align*}
+\overrightarrow{v(M)}&=3(\overrightarrow{MA}+\overrightarrow{AA'})+\overrightarrow{A'A},\\
+\intertext{puis, en développant et en remarquant que $\overrightarrow{A'A}=-\overrightarrow{AA'}$,}
+\overrightarrow{v(M)}&=3\overrightarrow{MA}+2\overrightarrow{AA'}.
+\end{align*}%}
+%\DinoiPhoneCommand{%
+%\begin{multline*}
+%\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}=
+%(\overrightarrow{MA'}+\overrightarrow{A'A})\\
+%+(\overrightarrow{MA'}+\overrightarrow{A'B})+
+%(\overrightarrow{MA'}+\overrightarrow{A'C}),\end{multline*}
+%soit
+%\begin{align*}
+%\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}&=
+%3\overrightarrow{MA'}+\overrightarrow{A'A}+\underbrace{\overrightarrow{A'B}+\overrightarrow{A'C}}_{\vec{0}},\\
+%&=3\overrightarrow{MA}+3\overrightarrow{AA'}+\overrightarrow{A'A},\\
+%&=3\overrightarrow{MA}+2\overrightarrow{AA'}.
+%\end{align*}}
+En tenant compte de $\overrightarrow{v(M)}=\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}$,
+ \begin{align}\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}=\vec{0}
+ &\iff 3\overrightarrow{MA}+2\overrightarrow{AA'}=\vec{0},\notag\\
+ &\iff 3\overrightarrow{AM}=2\overrightarrow{AA'},\notag\\
+ &\iff\overrightarrow{AM}=\dfrac23\overrightarrow{AA'}.\label{caraccg}\end{align}
+
+La relation \eqref{caraccg} définit l'unique point $M$ vérifiant $\overrightarrow{MA}+\overrightarrow{MB}+\overrightarrow{MC}=\vec{0}$. Ce point est par définition le centre de gravité du triangle $ABC$ et on le note traditionnellement $G$. Le calcul vectoriel ci-dessus aurait tout aussi bien pu être mené en utilisant $B'$ ou $C'$ plutôt que $A'$. On en déduit les trois relations annoncées en \eqref{eqGmediane}.
+\end{proof}
+
+\section{Orthocentre et droite d'Euler}
+\subsection{Orthocentre d'un triangle}
+\begin{thm}
+Les hauteurs issues des trois sommets de tout triangle sont concourantes en un point $H$ nommé orthocentre de ce triangle.
+\end{thm}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$B$](B) at (0,0);
+\coordinate[label=below:$C$](C) at (5,0);
+\coordinate (T) at ($(B)!1!36:(C)$);
+\coordinate (S) at ($(C)!1!107:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate (B') at ($(A)!0.5!(C)$);
+\coordinate (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate [label=above:$O$](O) at (intersection of C'--X and B'--Y);
+\coordinate[label=above:$G${\rule[-1mm]{0mm}{1mm}}] (G) at ($(A')!0.333!(A)$);
+\coordinate[label=below:$H$] (H) at ($(O)!3!(G)$);
+\draw (A')--(O)--(H)--(A);
+\draw (A)--(A');
+\foreach \point in {A,B,C,A',O,G,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figeuler}
+\end{figure}
+
+
+\begin{proof}
+Nous en restons aux notations utilisées précédemment.
+Si le triangle $ABC$ est équilatéral, la hauteur, la médiane et la médiatrice relatives à chaque côté sont confondues, les points $O$, centre du cercle circonscrit, et $G$, centre de gravité de $ABC$ le sont également. Ce point unique est évidemment aussi point de concours des hauteurs. Nous supposerons désormais que le triangle $ABC$ n'est pas équilatéral.
+
+La démonstration repose alors sur la remarque qui suit.
+\begin{remark}[Remarque préliminaire]
+La hauteur issue de $A$ et la médiatrice de $[BC]$ sont deux droites parallèles, car perpendiculaires à une même troisième.
+L'observation de la figure \ref{figeuler} nous incite alors à prolonger la droite $(OG)$ et à fabriquer ainsi une configuration de Thales. Comme nous savons, de par la position de $G$ aux deux tiers de la médiane $[AA']$, que $\overrightarrow{GA}=-2\overrightarrow{GA'}$ nous allons introduire un point $H$ défini par $\overrightarrow{GH}=-2\overrightarrow{GO}$ pour ensuite ensuite établir (en exploitant de façon vectorielle notre configuration de Thales) que les vecteurs $ \overrightarrow{AH}$ et $\overrightarrow{OA'}$ sont colinéaires, ce qui établira, sauf cas particulier, que la médiatrice $(OA')$ et la droite $(AH)$ sont parallèles donc que $(AH)$ est la hauteur issue de $A$.
+\end{remark}
+
+Soit donc le point $H$ défini par $\overrightarrow{GH}=-2\overrightarrow{GO}$.
+De l'égalité \eqref{eqGmediane}, nous déduisons que $3\overrightarrow{AG}=2\overrightarrow{AA'}$, puis que $\overrightarrow{AG}=2\overrightarrow{GA'}$. Par conséquent :
+\[\begin{split} \overrightarrow{AH}&=\overrightarrow{AG}+\overrightarrow{GH},\\
+&=2\overrightarrow{GA'}+2\overrightarrow{OG},\\
+&=2(\overrightarrow{OG}+\overrightarrow{GA'}),\\
+&=2\overrightarrow{OA'}.
+\end{split}
+\]
+Les vecteurs $\overrightarrow{OA'}$ et $\overrightarrow{AH}$ sont donc colinéaires.
+
+\begin{alert}
+Si le triangle $ABC$ est rectangle, les points $O$ et $A'$ (et par conséquent les points $A$ et $H$) sont confondus. On ne peut parler des droites $(OA')$ et $(AH)$ : ce cas sera examiné plus tard.
+\end{alert}
+Supposons provisoirement que le triangle $ABC$ \emph{n'est pas} rectangle : le point $O$, centre du cercle circonscrit n'est pas confondu avec $A'$ (cf. théorème \ref{diamtrrec}) ou encore $\overrightarrow{OA'}\neq\vec{0}$. On peut dire alors que la droite $(AH)$ est parallèle à la droite $(OA')$, elle même perpendiculaire au côté $[BC]$, en tant que médiatrice. La droite $(AH)$ est donc perpendiculaire à $[BC]$ : c'est la hauteur issue de $A$.
+
+
+Le raisonnement qui vient d'être fait tient toujours si l'on remplace les points $A$ et $A'$ par $B$ et $B'$ ou par $C$ et $C'$. Le point $H$ quant à lui est fixe (il ne dépend que de $O$ et $G$) : il appartient donc à chacune des trois hauteurs. On a donc démontré que les trois hauteurs sont concourantes en $H$ : ce point $H$ est \emph{l'orthocentre} du triangle $ABC$.
+\begin{alert}
+Si maintenant le triangle est rectangle, par exemple en $A$ : les hauteurs issues de $B$ et $C$ sont respectivement $(BA)$ et $(CA)$ : les hauteurs sont concourantes en $A$. L'orthocentre $H$ est alors confondu avec $A$ de même que le centre du cercle circonscrit $O$ est confondu avec $A'$. La relation $\overrightarrow{GH} = -2\overrightarrow{GO}$ est toujours vérifiée.\qedhere
+\end{alert}
+\end{proof}
+\subsection{Droite d'Euler}
+
+
+
+Nous avons en fait montré un peu plus que ce que nous avions annoncé.
+La relation vectorielle liant $O$, $G$ et $H$ montre que si le triangle $ABC$ n'est pas équilatéral ces trois points sont alignés. La droite support est la \emph{droite d'Euler}. Résumons-nous maintenant :
+\begin{thm}
+Le centre $O$ du cercle circonscrit, le centre de gravité $G$ et l'orthocentre $H$ d'un triangle $ABC$ vérifient la relation vectorielle
+\begin{equation}\overrightarrow{GH}=-2\overrightarrow{GO}\,.\label{eulerposition}\end{equation}
+Ces trois points sont confondus si $ABC$ est équilatéral. Dans le cas contraire, ils sont alignés sur une droite nommée droite d'Euler.
+\label{eulerprecis}
+\end{thm}
+
+\section{Cercle d'Euler}
+\subsection{Neuf points remarquables}
+Le cercle d'Euler est également connu comme cercle des neuf points ou encore cercle de Feuerbach (voir figure \ref{figcercleuler}).
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$B$](B) at (0,0);
+\coordinate[label=below:$C$](C) at (5,0);
+\coordinate (T) at ($(B)!1!61:(C)$);
+\coordinate (S) at ($(C)!1!130:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=right:$B'${\rule[-1mm]{0mm}{1mm}}] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=left:$C'$] (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate(O) at (intersection of C'--X and B'--Y);
+\coordinate (G) at ($(A')!0.333!(A)$);
+\coordinate[label=below:$H$] (H) at ($(O)!3!(G)$);
+\draw[dashed] (A)--(H);
+\draw[dashed] (B)--(H);
+\draw[dashed] (C)--(H);
+\coordinate[label=below:$D$](D) at at (intersection of A--H and B--C);
+\coordinate[label=right:$E${\rule[-1mm]{0mm}{1mm}}](E) at at (intersection of B--H and A--C);
+\coordinate[label=left:$F$](F) at at (intersection of C--H and B--A);
+\coordinate [label=left:$A''$] (A'') at ($(A)!0.5!(H)$);
+\coordinate [label=below:$B''$] (B'') at ($(B)!0.5!(H)$);
+\coordinate [label=below:$C''$] (C'') at ($(C)!0.5!(H)$);
+\draw (A')--(C')--(A'')--(C'')--cycle ;
+\draw (B')--(C')--(B'')--(C'')--cycle ;
+\coordinate (O') at ($(O)!1.5!(G)$);
+\node [draw,dotted,semithick] at (O') [circle through={(A')}] {\rule{2.2cm}{0mm}$\symcal{C}$};
+\foreach \point in {A,B,C,B',C',A',H,D,E,F,A'',B'',C''}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figcercleuler}
+\end{figure}
+
+
+\begin{thm}
+Pour tout triangle, les pieds des hauteurs, les milieux des côtés et les milieux des segments joignant l'orthocentre aux sommets sont situés sur un même cercle.
+\end{thm}
+\begin{remark}
+Suivant les configurations, certains de ces points peuvent être confondus.
+\end{remark}
+\begin{proof} Soit un triangle $ABC$ d'orthocentre $H$, $A'$, $B'$ et $C'$ les milieux respectifs des côtés $[BC]$, $[CA]$ et $[AB]$, $D$, $E$ et $F$ les pieds des hauteurs issues respectivement de $A$, $B$ et $C$ et $A''$, $B''$ et $C''$ les milieux respectifs des segments $[AH]$, $[BH]$ et $[CH]$.
+
+En vertu du théorème \ref{thmilieux}, appliqué successivement aux triangles $ABC$ et $HBC$
+\XSmartphoneCommand{%
+\begin{equation}
+\left.\begin{aligned}
+\overrightarrow{C'B'}=\frac12\overrightarrow{BC}&\\
+\overrightarrow{B''C''}=\frac12\overrightarrow{BC}&
+\end{aligned}\right\}\implies \overrightarrow{C'B'}=\overrightarrow{B''C''}\text{ et }(C'B')\parallel(B''C'')\parallel(BC).\label{parallelBC}
+\end{equation}}
+\SmartphoneCommand{
+\begin{equation}
+\left.\begin{aligned}
+\overrightarrow{C'B'}=\frac12\overrightarrow{BC}&\\
+\overrightarrow{B''C''}=\frac12\overrightarrow{BC}&
+\end{aligned}\right\}\implies \left\{\begin{aligned}&\overrightarrow{C'B'}=\overrightarrow{B''C''}\\ \text{et}&\\(&C'B')\parallel(B''C'')\parallel(BC).\end{aligned}\right.\label{parallelBC}
+\end{equation}}
+
+De même, en appliquant ce même théorème aux triangles $BAH$ et $CAH$
+\XSmartphoneCommand{%
+\begin{equation}
+\left.\begin{aligned}
+\overrightarrow{C'B''}=\frac12\overrightarrow{AH}&\\
+\overrightarrow{B'C''}=\frac12\overrightarrow{AH}&
+\end{aligned}\right\}\implies \overrightarrow{C'B''}=\overrightarrow{B'C''}\text{ et }(C'B'')\parallel(B'C'')\parallel(AH).\label{parallelAH}
+\end{equation}}
+\SmartphoneCommand{%
+\begin{equation}
+\left.\begin{aligned}
+\overrightarrow{C'B''}=\frac12\overrightarrow{AH}&\\
+\overrightarrow{B'C''}=\frac12\overrightarrow{AH}&
+\end{aligned}\right\}\implies\left\{\begin{aligned}&\overrightarrow{C'B''}=\overrightarrow{B'C''}\\ \text{et}&\\(&C'B'')\parallel(B'C'')\parallel(AH).\end{aligned}\right.\label{parallelAH}
+\end{equation}}
+
+À ce stade nous avons établi que $B'C'B''C''$ est un parallélogramme. Nous savons également que $(AH)$, en tant que hauteur du triangle, est perpendiculaire à $(BC)$. Grâce à cette remarque et aux relations de parallélisme avec $(BC)$ et $(AH)$ établies ci-dessus dans les implications \eqref{parallelBC} et \eqref{parallelAH}, nous pouvons affirmer que $B'C'B''C''$ est un rectangle. Ce rectangle est inscriptible dans le cercle admettant $[B'B'']$ et $[C'C'']$ pour diamètres.
+
+On montre de la même façon que $A'C'A''C''$ est un rectangle inscriptible dans le même cercle de diamètres $[C'C'']$ et $[A'A'']$. Les six points $A'$, $A''$, $B'$, $B''$, $C'$ et $C''$ appartiennent donc au cercle $\symcal{C}$ de diamètre, par exemple, $[A'A'']$.
+
+Considérons alors le point $D$ : si le triangle $ABC$ est isocèle en $A$, il est confondu avec $A'$ et appartient donc au cercle $\symcal{C}$. Sinon $D$ et $A'$ sont distincts et le triangle $ADA'$ est rectangle en $D$ : d'après le théorème \ref{diamtrrec}, $D$ appartient au cercle $\symcal{C}$ de diamètre $[AA']$. On montre de la même façon que les points $E$ et $F$ appartiennent à $\symcal{C}$.
+\end{proof}
+\begin{remark} Le cercle d'Euler est le cercle circonscrit au triangle des milieux $A'B'C'$.
+\end{remark}
+%
+\subsection{Centre du cercle d'Euler}
+Nous allons préciser la remarque précédente (voir figure \ref{centreeuler}).
+\begin{thm}
+Soit un triangle $ABC$ et soit $A'$, $B'$ et $C'$ les milieux respectifs de $[BC]$, $[CA]$ et $[AB]$.
+Soit $O$ le centre du cercle circonscrit à $ABC$, $G$ son centre de gravité et $H$ son orthocentre :
+\begin{itemize}
+\item le point $O$ est l'orthocentre du triangle $A'B'C'$ ;
+\item le point $G$ est le centre de gravité du triangle $A'B'C'$ ;
+\item le centre $O'$ du cercle circonscrit au triangle $A'B'C'$ appartient à la droite d'Euler et vérifie la relation vectorielle
+\[\overrightarrow{GO'}=-\frac12\overrightarrow{GO}.\]
+\end{itemize}
+\end{thm}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$B$](B) at (0,0);
+\coordinate[label=below:$C$](C) at (5,0);
+\coordinate (T) at ($(B)!1!32:(C)$);
+\coordinate (S) at ($(C)!1!100:(B)$);
+\coordinate[label=above:$A$](A) at at (intersection of C--S and B--T);
+\draw (A)--(B)--(C)--cycle;
+\coordinate [label=below:$A'$] (A') at ($(B)!0.5!(C)$);
+\coordinate [label=right:$B'${\rule[-1mm]{0mm}{1mm}}] (B') at ($(A)!0.5!(C)$);
+\coordinate [label=left:$C'${\rule[-1mm]{0mm}{1mm}}] (C') at ($(A)!0.5!(B)$);
+\coordinate (X) at ($(C')!1!90:(B)$);
+\coordinate (Y) at ($(B')!1!90:(C)$);
+\coordinate[label=above:$O$] (O) at (intersection of C'--X and B'--Y);
+\coordinate [label=above:$G$] (G) at ($(A')!0.333!(A)$);
+\coordinate[label=below:$H$] (H) at ($(O)!3!(G)$);
+\draw (A)--(B)--(C)--cycle ;
+\coordinate[label=above:$O'$] (O') at ($(O)!1.5!(G)$);
+\draw [dotted,semithick](A')--(B')--(C')--cycle;
+\draw (O)--(H);
+\foreach \point in {A,B,C,B',C',A',O,O',G,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{centreeuler}
+\end{figure}
+
+
+%%\DinoiPadAirCommand{\pagebreak}
+
+\begin{proof}
+\begin{itemize}
+\item La droite $(A'O)$, médiatrice de $[BC]$, est perpendiculaire à la droite $(BC)$, donc également à la droite $(C'B')$ parallèle à $(BC)$ d'après le théorème \ref{thmilieux}. Dans le triangle $A'B'C'$, le point $O$ appartient donc à la hauteur issue de $A'$. On montre de la même façon que $O$ appartient à la hauteur issue de $B'$. Le point $O$ est donc l'orthocentre de $A'B'C'$.
+\item Grâce à la relation \eqref{eqGmediane} du théorème \ref{thgravit}, on obtient
+\[\overrightarrow{GA'}=-\frac12\overrightarrow{GA},\quad \overrightarrow{GB'}=-\frac12\overrightarrow{GC}\quad\text{et}\quad\overrightarrow{GC'}=-\frac12\overrightarrow{GC}.\]
+On en déduit
+\begin{align*}
+\overrightarrow{GA'}+\overrightarrow{GB'}+\overrightarrow{GC'}&=-\frac12\Bigl(\,\underbrace{\overrightarrow{GA}+\overrightarrow{GB}+\overrightarrow{GC}}_{\vec{0}}\,\Bigr),\\
+\overrightarrow{GA'}+\overrightarrow{GB'}+\overrightarrow{GC'}&=\vec{0},
+\end{align*}
+qui prouve que $G$ est le centre de gravité de $A'B'C'$.
+\item Si l'on applique la relation \eqref{eulerposition} du théorème \ref{eulerprecis} au triangle $A'B'C'$, on obtient $\overrightarrow{GO}=-2\overrightarrow{GO'}$. On en déduit la relation
+\[\overrightarrow{GO'}=-\frac12\overrightarrow{GO}.\qedhere\]\end{itemize}
+\end{proof}
+
+\begin{remark}
+La configuration des points $(O, O', G, H)$ est remarquable. On dit qu'ils sont en \emph{division harmonique} ; cette notion fera l'objet d'une prochaine parution de la \emph{Mathematica dinosaurorum}.
+\end{remark}
+\endinput
diff --git a/macros/luatex/latex/tango/examples/handout-euler.tex b/macros/luatex/latex/tango/examples/handout-euler.tex
new file mode 100644
index 0000000000..533d96b904
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/handout-euler.tex
@@ -0,0 +1,29 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[french,ColorTheme=Tannen,FontSize=11pt,
+StylisticSet={parallelslant,leqslant},Numbers=OldStyle]{tango}
+\renewcommand{\arraystretch}{1.3}
+\usepackage{tikz}
+\usetikzlibrary{calc,through,arrows}
+\tgosmartlists
+\AtBeginDocument{%
+\RenewCommandCopy{\setminus}{\smallsetminus}
+}
+\NewDocumentCommand\N{}{\ensuremath{\symbb{N}}}
+\NewDocumentCommand\Z{}{\ensuremath{\symbb{Z}}}
+\NewDocumentCommand\Q{}{\ensuremath{\symbb{Q}}}
+\NewDocumentCommand\R{}{\ensuremath{\symbb{R}}}
+\NewDocumentCommand\C{}{\ensuremath{\symbb{C}}}
+\NewDocumentCommand\Pt{m}{\ensuremath{\symfrak{P}(#1)}}
+\NewDocumentCommand\rond{}{\mathrel{\circ}}
+\NewDocumentCommand\mesalg{m}{\overline{#1}}
+\NewDocumentCommand\Vector{m}{\overrightarrow{#1}}
+\DeclareMathOperator{\cl}{cl}
+\DeclareMathOperator{\sgn}{sgn}
+\newcounter{prop}
+\newstatement{prop}{prop}{Propriété}
+\newfixedcaption{\figcaption}{figure}
+%%
+%\tangoSmartLists
+\begin{document}
+\include{euler}
+\end{document} \ No newline at end of file
diff --git a/macros/luatex/latex/tango/examples/handout-polynomes-deg2.tex b/macros/luatex/latex/tango/examples/handout-polynomes-deg2.tex
new file mode 100644
index 0000000000..3e260be4a9
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/handout-polynomes-deg2.tex
@@ -0,0 +1,27 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[french,ColorTheme=BlackAndWhite,FontSize=11pt]{tango}
+\renewcommand{\arraystretch}{1.3}
+\usepackage{tikz}
+\usetikzlibrary{calc,through,arrows}
+\tgosmartlists
+\AtBeginDocument{%
+\RenewCommandCopy{\setminus}{\smallsetminus}
+}
+\NewDocumentCommand\N{}{\ensuremath{\symbb{N}}}
+\NewDocumentCommand\Z{}{\ensuremath{\symbb{Z}}}
+\NewDocumentCommand\Q{}{\ensuremath{\symbb{Q}}}
+\NewDocumentCommand\R{}{\ensuremath{\symbb{R}}}
+\NewDocumentCommand\C{}{\ensuremath{\symbb{C}}}
+\NewDocumentCommand\Pt{m}{\ensuremath{\symfrak{P}(#1)}}
+\NewDocumentCommand\rond{}{\mathrel{\circ}}
+\NewDocumentCommand\mesalg{m}{\overline{#1}}
+\NewDocumentCommand\Vector{m}{\overrightarrow{#1}}
+\DeclareMathOperator{\cl}{cl}
+\DeclareMathOperator{\sgn}{sgn}
+\newcounter{prop}
+\newstatement{prop}{prop}{Propriété}
+\newfixedcaption{\figcaption}{figure}
+%%
+\begin{document}
+\input{polynome-deg2}
+\end{document} \ No newline at end of file
diff --git a/macros/luatex/latex/tango/examples/polynome-deg2.tex b/macros/luatex/latex/tango/examples/polynome-deg2.tex
new file mode 100644
index 0000000000..bf91400a55
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/polynome-deg2.tex
@@ -0,0 +1,557 @@
+\renewcommand{\arraystretch}{1.3}
+%\renewcommand*{\DinoThmLogo}{\textcolor{ColorOne}{\oldpilcrowfour}\ignorespaces}
+%\renewcommand*{\DinoThmLogo}{\hspace*{\DinoTitleIndent-3pt}\ignorespaces}
+
+%\textcolor{ColorOne}{\oldpilcrowfour}\ignorespaces
+
+%%%%%% quelques figures, le début arrive ensuite
+\newcommand{\paraone}{
+\begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-3.5) rectangle (3.5,3);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-2.5) grid (3.5,3);
+ \draw [->](-2,0) -- (3.5,0) node[above=15mm,left=4mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-2.5) -- (-1.9,3) node[above] {};
+ \draw[semithick,domain=-2:3.5,label=left:$\symcal{C}_P$] plot (\x,{0.5(\x+1)*(\x-2)});
+ \draw [fill=white] (-1,0) circle (1.2pt) node[below=2mm,left] {$\beta$};
+\draw [fill=white] (2,0) circle (1.2pt) node[below=2mm,right] {$\alpha$};
+\node[below] at (.75,-2.5){$\Delta>0\;\text{ et }\; a>0$};
+ \end{tikzpicture}
+}
+\newcommand{\paratwo}{
+ \begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-4) rectangle (3.5,2.5);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-3) grid (3.5,2.5);
+ \draw [->](-2,0) -- (3.5,0) node[above=12mm,left=8mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-3) -- (-1.9,2.5) node[above] {};
+ \draw[semithick,domain=-2:3.5,label=left:$\symcal{C}_P$] plot (\x,{-(\x+1)*(\x-2)});
+ \draw [fill=white] (-1,0) circle (1.2pt) node[above=2mm,left] {$\alpha$};
+\draw [fill=white] (2,0) circle (1.2pt) node[above=2mm,right] {$\beta$};
+\draw[fill=white,white] (-2,-4) rectangle (3.5,-3);
+\node[below] at (.75,-3){$\Delta>0\;\text{ et }\; a<0$};
+ \end{tikzpicture}
+}
+
+\newcommand{\parathree}{
+\begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-1.5) rectangle (3.5,5);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-.5) grid (3.5,5);
+ \draw [->](-2,0) -- (3.5,0) node[above=25mm,left=6mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-.5) -- (-1.9,5) node[above] {};
+ \draw[semithick,domain=-2:3.5] plot (\x,{(\x+1)*(\x-2)+2.25});
+ \draw [fill=white] (0.5,0) circle (1.2pt) node[above=1mm] {$\frac{-b}{2a}$};
+\node[below] at (.75,-0.5){$\Delta=0\;\text{ et }\; a>0$};
+ \end{tikzpicture}
+}
+
+\newcommand{\parafour}{
+\begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-6) rectangle (3.5,0.5);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-5) grid (3.5,.5);
+ \draw [->](-2,0) -- (3.5,0) node[below=25mm,left=6mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-5) -- (-1.9,.5) node[above] {};
+ \draw[semithick,domain=-2:3.5] plot (\x,{-(\x+1)*(\x-2)-2.25});
+ \draw [fill=white] (0.5,0) circle (1.2pt) node[below=1mm] {$\frac{-b}{2a}$};
+\draw[fill=white,white] (-2,-6) rectangle (3.5,-5);
+\node[below] at (.75,-5){$\Delta=0\;\text{ et }\; a<0$};
+ \end{tikzpicture}
+}
+
+\newcommand{\parafive}{
+\begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-1.5) rectangle (3.5,5);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-.5) grid (3.5,5);
+ \draw [->](-2,0) -- (3.5,0) node[above=25mm,left=6mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-.5) -- (-1.9,5) node[above] {};
+ \draw[semithick,domain=-2:3.5] plot (\x,{(\x+1)*(\x-2)+2.75});
+\node[below] at (.75,-.5){$\Delta<0\;\text{ et }\; a>0$};
+ \end{tikzpicture}
+}
+
+\newcommand{\parasix}{
+ \begin{tikzpicture}[domain=-5:5,samples=100,x=6mm,y=6mm]
+ \clip (-2,-6) rectangle (3.5,0.5);
+ \draw[very thin,color=gray,xstep=0.5,ystep=0.5] (-2,-5) grid (3.5,.5);
+ \draw [->](-2,0) -- (3.5,0) node[below=25mm,left=6mm] {$\symcal{C}_P$};
+ \draw[->] (-1.9,-5) -- (-1.9,.5) node[above] {};
+ \draw[semithick,domain=-2:3.5] plot (\x,{-(\x+1)*(\x-2)-2.75});
+\draw[fill=white,white] (-2,-6) rectangle (3.5,-5);
+\node[below] at (.75,-5){$\Delta<0\;\text{ et }\; a<0$};
+ \end{tikzpicture}
+}
+%%%%
+\tgotitle{Polynômes du second degré}
+\tgoshorttoc
+\section{Généralités}
+\subsection{Fonction polynôme du second degré}
+On dit qu'une fonction $P$, définie sur l'ensemble $\R$ des nombres réels et à valeurs dans $\R$, est une fonction polynôme du second degré s'il existe un réel $a$ non nul ainsi que deux réels $b$ et $c$ tels que
+\[\forall x\in\R,\; P(x)=ax^2+bx+c.\]
+On convient alors de dire que $ax^2+bx+c$ est un polynôme du second degré.
+
+\begin{remark}
+Cette définition n'entraîne évidemment pas qu'une fonction polynôme de degré 2 donnée ne puisse pas s'écrire sous une forme différente. Par exemple :
+\begin{itemize}
+\item Cas de $P : \R\rightarrow\R,\; x\mapsto x^2-3x+2$ : $\forall\,x\in\R$, $P(x)=(x-1)(x-2)$.
+\item Cas de $Q : \R\rightarrow\R,\; x\mapsto x^2-1$ : $\forall\,x\in\R$,
+ \[Q(x)=\frac{x^4-1}{x^2+1}.\]
+ \item Cas de $R : \R\rightarrow\R,\; x\mapsto x^2-2x+5$ : $\forall\,x\in\R$, $R(x)=\left(\left({x-1}\right)^2\right)+4$.
+\end{itemize}
+\end{remark}
+\subsection{Écriture unique}
+Il existe cependant un certaine unicité de l'écriture d'un polynôme de degré~2, qui concerne plus précisément ses \emph{coefficients} $a$, $b$ et $c$.
+\begin{thm}
+Soit $(a,a')\in\R^*\times\R^*$, $(b,b')\in\R\times\R$ et $(c,c')\in\R\times\R$ tels que
+\[\forall x\in\R,\; ax^2+bx+c=a'x^2+b'x+c',\]
+alors $a=a'$, $b=b'$ et $c=c'$.
+\label{thunicite}
+\end{thm}
+\begin{proof}
+L'égalité entre les deux expressions étant vraie pour tout $x\in\R$, elle l'est en particulier pour $x=0$. On en déduit que $c=c'$ et par conséquent
+\begin{align*}
+\forall x\in\R,\; ax^2+bx&=a'x^2+b'x,\\
+\forall x\in\R,\; x(ax+b)&=x(a'x+b'),\\
+\intertext{Soit, en simplifiant par $x\neq0$}
+\forall x\in\R^*,\;ax+b&=a'x+b'.
+\end{align*}
+
+En donnant alors successivement à $x$ les valeurs $1$ et $2$, on obtient :
+\[\left\{\begin{aligned}
+(a-a')+(b-b')&=0\\
+2(a-a')+(b-b')&=0
+\end{aligned}\right.\;,\]
+dont la résolution amène à $a-a'=0$ et $b-b'=0$, c.-à-d. : $a=a'$ et $b=b'$.
+\end{proof}
+
+\section{Forme canonique}
+\subsection{Méthode de complétion au carré}\label{sec2-1}
+Fixons nous un réel $m$. On rappelle que, pour tout $x\in\R$, $(x+m)^2=x^2+2mx+m^2$. Ou encore :
+\begin{equation}
+\forall x\in\R, \; x^2+2mx=\left(x+m\right)^2-m^2.
+\end{equation}
+
+Dans le cas de $P : \R\rightarrow\R, x\mapsto x^2+2mx+p$, on remarque que l'on peut alors écrire
+\begin{equation}
+x^2+2mx+p=\left(x+m\right)^2-m^2+p.\label{eqfcreduite}
+\end{equation}
+
+Cette remarque fonde la \emph{méthode de complétion au carré}.
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item \label{explefactor}
+On souhaite résoudre l'équation $x^2-6x+7=0$. On remarque que \[x^2-6x+7=(x-3)^2-9+7\] et on se ramène ainsi à
+\begin{align*}
+(x-3)^2-2&=0,\\
+(x-3)^2-\bigl(\sqrt{2}\bigr)^2&=0,\\
+\intertext{puis en employant une identité remarquable}
+\bigl(x-3+\sqrt{2}\bigr)\bigl(x-3-\sqrt{2}\bigr)&=0.
+\end{align*}
+D'où l'on déduit que l'ensemble des solutions de $x^2-6x+7=0$ est
+\[
+\symcal{S}=\bigl\{3-\sqrt{2}, 3+\sqrt{2}\bigr\}.
+\]
+\item Démontrer que $x^2+x+1$ est strictement positif pour tout $x\in\R$.
+On écrit
+\begin{align*}
+x^2+x+1&=x^2+2\times\frac12x+1,\\
+&=\left(x+\frac12\right)^2-\frac14+1,\\
+&=\left(x+\frac12\right)^2+\frac34\,.
+\end{align*}
+
+On en déduit que, pour tout $x\in\R$,
+\[x^2+x+1≥\frac34\:.\]
+On a donc finalement : $\forall x\in\R,\; x^2+x+1>0$.
+\end{enumerate}
+\end{example}
+\subsection{Cas général}
+En factorisant $a$ dans $P(x)$, on obtient le théorème suivant :
+\begin{thm}
+Soit $P$, la fonction polynôme de degré 2 définie sur $\R$ par $P(x)=ax^2+bx+c$. On a
+\begin{equation}
+\forall x\in\R,\;P(x)=a\left(\left(x+\frac{b}{2a}\right)^2-\frac{\Delta}{4a^2}\vphantom{\frac{b^2}{4a^2}}\right),\label{eqformcan}
+\end{equation}
+où $\Delta$, que l'on nomme \emph{discriminant} du polynôme $P(x)$, vaut $\Delta=b^2-4ac$.
+\label{thformcan}
+\end{thm}
+\begin{proof}
+On commence par factoriser $a$ dans $P(x)$ :
+\[P(x)=a\left(x^2+\frac{b}{a}x+\frac{c}{a}\right),\]
+puis on utilise l'égalité \eqref{eqfcreduite} avec $m=b/(2a)$ et $p=c/a$. On obtient
+\[P(x)=a\left(\left(x+\frac{b}{2a}\right)^2-\frac{b^2}{4a^2}+\frac{c}{a}\right).
+\]
+%D'où le résultat annoncé.
+Une réduction au même dénominateur amène alors au résultat annoncé.
+\end{proof}
+
+\subsubsection{Discriminant réduit}
+Dans le cas où $b$ se met agréablement sous la forme $2b'$ (par exemple, lorsque $b$ est un entier pair) on peut remarquer que $b/2a=b'/a$ et que $\Delta=4b'^2-4ac$.
+ On est alors amené à poser $\Delta'=b'^2-ac$ et l'on obtient
+\begin{equation}
+\forall x\in\R,\;P(x)=a\left(\left(x+\frac{b'}{a}\right)^2-\frac{\Delta'}{a^2}\vphantom{\frac{b^2}{4a^2}}\right).
+\end{equation}
+Le nombre $\Delta'$ est souvent nommé \emph{discriminant réduit}
+
+\subsubsection{Extrémums}
+La forme canonique de la fonction $P$ met en évidence l'existence d'un extrémum dont la nature dépend du signe de $a$.
+\begin{thm}
+Soit $P$, la fonction polynôme de degré 2 définie sur $\R$ par $P(x)=ax^2+bx+c$.
+\XSmartphoneCommand{\vspace{\baselineskip}}
+
+La fonction $P$ admet en\SmartphoneCommand{\\} $-\dfrac{b}{2a}\left\{\begin{aligned}
+\text{un \emph{minimum} égal à $\smash{-\dfrac{\Delta}{4a}}$}\; &\text{si $a>0$,}\\[2.5ex]
+\text{un \emph{maximum} égal à $\smash{-\dfrac{\Delta}{4a}}$}\; &\text{si $a<0$.}
+\end{aligned}\right.$
+\vspace{1ex}\par
+\label{thextrem}
+\end{thm}
+
+\begin{proof}
+On voit tout d'abord que
+\[\forall x\in\R,\;\left(x+\frac{b}{2a}\right)^2≥0,
+\]
+donc que
+\[
+\forall x\in\R,\;\left(x+\frac{b}{2a}\right)^2-\frac{\Delta}{4a^2}≥-\frac{\Delta}{4a^2},
+\]
+l'égalité n'étant atteinte que si le carré est nul, donc si $x=-b/(2a)$. On fait alors apparaître $P(x)$ (compte tenu de l'égalité \eqref{eqformcan} du théorème \ref{thformcan}) en multipliant chaque membre de cette inégalité par $a\neq0$, ce qui change ou non son sens, selon que a est positif ou négatif. Il vient alors :
+\begin{itemize}
+\item si $a>0$,
+\[
+\forall x\in\R,\; P(x)≥-\frac{\Delta}{4a}\;;
+\]
+\item et si $a<0$,
+\[
+\forall x\in\R,\; P(x)≤-\frac{\Delta}{4a}\,.
+\]
+\end{itemize}
+On sait de plus que dans les deux cas, l'égalité est atteinte si et seulement si $x=-b/(2a)$.
+\end{proof}
+
+\section{Factorisation}
+\subsection{Théorème de factorisation}
+La méthode vue dans l'exemple \ref{explefactor} de la section \ref{sec2-1} se généralise, pourvu que $\Delta$ soit positif. Précisément, on a le théorème
+\begin{thm}\label{thfactor}%
+Soit $P$, la fonction polynôme de degré 2 définie sur $\R$ par $P(x)=ax^2+bx+c$. Si le discriminant $\Delta$ de $P$ est positif ($\Delta≥0$), alors
+\begin{align*}
+\forall x \in\R,\;P(x)&=a(x-\alpha)(x-\beta)\\
+\text{où}\quad\alpha=\frac{-b+\sqrt{\Delta}}{2a}&\text{ et }\beta=\frac{-b-\sqrt{\Delta}}{2a}.
+\end{align*}
+\end{thm}
+\begin{remark}
+Le cas où $\Delta=0$ est particulier, puisque l'on a alors
+\[
+\alpha=\beta=\frac{-b}{2a}\quad\text{soit :}\quad\forall x\in\R,\;P(x)=a\left(x-\frac{-b}{2a}\right)^2.
+\]
+\end{remark}
+
+\begin{proof}
+On remarque que si $\Delta≥0$, on peut écrire
+\[
+\frac{\Delta}{4a^2}=\left(\frac{\sqrt{\Delta}}{2a}\right)^2.
+\]
+
+En reportant dans l'égalité \eqref{eqformcan} du théorème \ref{thformcan}, on obtient
+\[
+\forall x\in\R,\;P(x)=a\left(\left(x+\frac{b}{2a}\right)^2-\left(\frac{\sqrt{\Delta}}{2a}\right)^2\right).
+\]
+
+On obtient alors le résultat annoncé en factorisant la différence de deux carrés grâce à l'identité remarquable $A^2-B^2=(A+B)(A-B)$.
+\end{proof}
+
+\subsection{Racines}
+Soit $P$ une fonction polynôme du second degré.
+On dit que $P$ est factorisable par $(x-x_0)$ s'il existe $m\in\R^*$ et $p\in\R$ tels que
+\begin{equation}\forall x\in\R,\;P(x)=(x-x_0)(mx+p).\label{eqfactorx0}\end{equation}
+On dit qu'un réel $x_0$ est une racine de $P$ si $P(x_0)=0$ : une racine de $P$ n'est donc rien d'autre qu'une solution de l'équation $P(x)=0$.
+
+Nous pouvons maintenant formuler le théorème qui suit :
+\begin{thm}
+Soit $P$ une fonction polynôme du second degré et $x_0\in\R$. Le réel $x_0$ est une racine de $P$ si et seulement si $P$ est factorisable par $(x-x_0)$.
+\end{thm}
+
+\begin{proof}
+Tout d'abord, si $P$ est factorisable par $x_0$, il suffit de calculer $P(x_0)$ en utilisant l'égalité \eqref{eqfactorx0} pour constater que $P(x_0)=0$, donc que $x_0$ est une racine de $P$.
+
+Réciproquement supposons que $x_0$ est une racine de $P$, donc que $P(x_0)=0$. Soit alors $a$, $b$ et $c$ les coefficients de $P(x)$ : on a
+\[ax_0^2+bx_0+c=P(x_0)=0,\]
+ d'où $c=-ax_0^2-bx_0$. Et en substituant cette écriture de $c$ dans l'expression de $P(x)$ :
+\begin{align*}
+P(x)&=ax^2+bx+c\\
+&= ax^2+bx-ax_0^2-bx_0,\\
+&= a(x^2-x_0^2)+b(x-x_0),\\
+&= a(x-x_0)(x+x_0)+b(x-x_0),\\
+&=(x-x_0)(ax+ax_0+b).
+\end{align*}
+
+On en arrive à $P(x)=(x-x_0)(mx+p)$, en prenant $m=a$ et $p=ax_0+b$.
+\end{proof}
+
+\subsubsection{Racines et équation du second degré}
+Nous faisons ici le point sur les racines de $P$, autrement dit sur la résolution de l'équation
+$P(x)=0$.
+
+
+\begin{itemize}
+\item \textit{Si $\Delta<0$,} nous reprenons le théorème \ref{thextrem} : dans ce cas, la fonction $P$ possède un minimum strictement positif si $a>0$ ou un maximum strictement négatif si $a<0$. Dans chaque cas, si $\Delta<0$, l'équation $P(x)=0$ ne possède pas de solution, autrement dit $P$ n'admet aucune racine.
+
+\item \textit{Si maintenant $\Delta=0$,} la remarque qui suit le théorème \ref{thfactor} prouve que l'équation $P(x)=0$ équivaut à
+\[
+\left(x-\frac{-b}{2a}\right)^2=0
+\]
+ et admet $-b/(2a)$ pour seule solution, ou encore que ce nombre est la seule racine de $P$. Dans la mesure où le facteur $x-(-b/(2a))$ intervient par son carré, on parle alors de \emph{racine double}.
+
+ \item \textit{Enfin si $\Delta>0$,} d'après le théorème \ref{thfactor}, $P(x)=0$ équivaut à $(x-\alpha)(x-\beta)=0$.
+%\DinoXiPadminiCommand{$(x-\alpha)(x-\beta)=0$.}
+%\DinoiPadminiCommand{\[(x-\alpha)(x-\beta)=0.\]}
+ Cette équation admet donc deux solutions, ou encore $P$ admet deux racines qui sont
+ \[
+ \alpha=\frac{-b+\sqrt{\Delta}}{2a}\quad\text{et}\quad\beta=\frac{-b-\sqrt{\Delta}}{2a}.
+ \]
+\end{itemize}
+
+
+\begin{remark}
+Dons le cas où l'on a posé $b=2b'$ et utilisé le discriminant réduit $\Delta'$, il est facile de vérifier que les racines s'expriment comme suit :
+\[
+\alpha=\frac{-b'+\sqrt{\Delta'}}{a}\quad\text{et}\quad\beta=\frac{-b'-\sqrt{\Delta'}}{a}.
+\]
+\end{remark}
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Résoudre l'équation $3x^2-5x+1=0$ : calculons $\Delta=25-12=13$. L'équation a deux solutions qui sont les racines de $3x^2-5x+1$ :
+\[
+\alpha=\frac{5+\sqrt{13}}{6}\quad\text{et}\quad\beta=\frac{5-\sqrt{13}}{6}.
+\]
+L'ensemble des solutions est $\symcal{S}=\{\alpha,\beta\}$.
+\item Factoriser si possible $-2x^2+3x+2$ : on calcule $\Delta=9+16=5^2$. Il existe deux racines qui sont $2$ et $-1/2$ ; d'où
+\[
+\forall x\in\R,\;-2x^2+3x+2=-2(x-2)\left(x+\frac12\right).
+\]
+\item Factoriser si possible $A(x)=2x^2-8$ : utilisons l'identité remarquable
+\[
+a^2-b^2=(a+b)(a-b).
+\]
+\[\forall x\in\R,\;2x^2-8=2(x^2-4)=2(x-2)(x+2).\]
+Dans un cas de ce genre, il est bien sûr inutile de calculer $\Delta$. En revanche, l'existence de deux racines distinctes nous prouve que $\Delta>0$.
+\item Résoudre l'équation $3x^2+2=0$. La fonction polynôme $x\mapsto3x^2+2$ admet un minimum strictement positif égal à $2$. Il n'y a aucune solution, l'ensemble des solutions est $\symcal{S}=\emptyset$.
+\item Factoriser $9x^2-6x+1=0$. On pourrait envisager de calculer $\Delta$, mais en observant l'expression, on reconnait un membre d'identité remarquable :
+\[\forall x\in\R,\;9x^2-6x+1=(3x-1)^2.\]
+\item Résoudre $x^2+2x=0$. La factorisation est immédiate :
+\[x^2+2x=0\iff x(x+2)=0\iff x=0\text{ ou }x+2=0.\]
+L'ensemble des solutions de cette équation est donc $\symcal{S}=\{0,-2\}$.
+\end{enumerate}
+\end{example}
+%
+%
+
+\subsection{Problème de signe}
+Nous rappelons ici que la fonction \emph{signe} est définie sur $\R$ comme suit :
+\[\forall x \in \R,\; \sgn(x)=\begin{cases}
+-1 &\text{si $x<0$,}\\
+0 &\text{si $x=0$,}\\
+1 &\text{si $x>0$.}
+\end{cases}
+\]
+Cette définition est beaucoup plus pertinente que l'usage des symboles ${+}$ et ${-}$, ne serait-ce que parce qu'elle rend exacte et claire une formulation comme \emph{le signe du produit est le produit des signes}.
+\begin{thm}
+Soit $P$, la fonction polynôme de degré 2 définie sur $\R$ par $P(x)=ax^2+bx+c$.
+\begin{itemize}
+\item Si $\Delta<0$, le signe de $P(x)$ est égal à celui de $a$ en tout $x$ réel.
+\item Si $\Delta=0$, le signe de $P(x)$ est égal au signe de $a$ en tout $x$ réel différent de $-b/(2a)$ et s'annule en $-b/(2a)$.
+\item Si $\Delta>0$, le signe de $P(x)$ est égal au signe de $-a$ en tout $x$ intérieur à l'intervalle des racines, au signe de $a$ en tout $x$ extérieur à l'intervalle des racines et s'annule aux racines.
+\end{itemize}
+\label{thsgn}
+\end{thm}
+
+Ces résultats s'interprètent sur la représentation graphique $\symcal{C}_P$ de $P$, selon les signes de $\Delta$ et $a$ (voir figure \ref{figracines}).
+\afterpage{\clearpage\begin{figure}[H]\centering
+\AfourCommand{%
+\noindent\hfill\paraone\hfill\parathree\hfill\parafive\hfill\null
+\par
+\noindent\hfill\paratwo\hfill\parafour\hfill\parasix\hfill\null
+}
+\BigTabletCommand{%
+\noindent\hfill\paraone\hfill\parathree\hfill\parafive\hfill\null
+\par
+\noindent\hfill\paratwo\hfill\parafour\hfill\parasix\hfill\null
+}
+\TabletCommand{%
+\noindent\hfill\paraone\hfill\parathree\hfill\parafive\hfill\null
+\par
+\noindent\hfill\paratwo\hfill\parafour\hfill\parasix\hfill\null
+}
+\SmartphoneCommand{%
+\noindent\hfill\paraone\hfill\paratwo\hfill\null
+\par
+\noindent\hfill\parathree\hfill\parafour\hfill\null
+\par
+\noindent\hfill\parafive\hfill\parasix\hfill\null
+}
+\SmallTabletCommand{%
+\vspace*{1.5cm}\par
+\noindent\hfill\paraone\hfill\paratwo\hfill\null
+\par
+\noindent\hfill\parathree\hfill\parafour\hfill\null
+\par
+\noindent\hfill\parafive\hfill\parasix\hfill\null
+}
+\figcaption{}\label{figracines}
+\end{figure}
+}
+
+\begin{proof}
+Examinons successivement les trois cas du théorème.
+\begin{itemize}
+\item Si $\Delta<0$, le résultat provient d'une remarque déjà faite : dans ce cas, la fonction $P$ possède un minimum strictement positif si $a>0$ ou un maximum strictement négatif si $a<0$.
+\item Si $\Delta=0$, on a
+\[
+P(x)=a\left(x+\frac{b}{2a}\right)^2.
+\]
+% La fonction $P$ admet donc $0$ pour minimum lorsque $a>0$ ou pour maximum lorsque $a>0$. Dans les deux cas cet extrémum n'est atteint qu'une fois en $-b/(2a)$.
+Le résultat annoncé se déduit du tableau de signes
+\[\begin{array}{c|ccccc}
+\hline
+x&-\infty&&-b/(2a)&&\infty\\
+\hline
+\sgn\bigl(\bigl(x+\frac{b}{2a}\bigr)^2\bigr)&&1&0&1&\\
+\hline
+\sgn(P(x))&&\sgn(a)&0&\sgn(a)&\\
+\hline
+\end{array}\]
+\item Si $\Delta>0$, on constate, en se référant à l'expression des racines $\alpha$ et $\beta$ dans théorème \ref{thfactor}, que $\alpha$ est la plus grande des deux racines si $a>0$ et la plus petite si $a<0$. En posant
+\begin{align*}\alpha'=\min(\alpha,\beta)&\text{ et }\beta'=\max(\alpha,\beta),\\
+\intertext{on obtient}
+P(x)=a(x-\alpha')(x-\beta'),\quad&\text{ avec $\alpha'<\beta'$}.
+\end{align*}
+On établit alors le tableau de signes
+{\SmartphoneCommand{\small}
+\[\begin{array}{c|ccccccc}
+\hline
+x&-\infty&&\alpha'&&\beta'&&\infty\\
+\hline
+\sgn(x-\alpha')&&-1&0&1&1&1&\\
+\hline
+\sgn(x-\beta')&&-1&-1&-1&0&1&\\
+\hline
+\sgn(P(x))&&\sgn(a)&0&\sgn(-a)&0&\sgn(a)&\\
+\hline
+\end{array}
+\]}
+Le résultat annoncé s'en déduit.\qedhere
+\end{itemize}
+\end{proof}
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Résoudre $x^2-x-6≤0$ : le discriminant vaut $\Delta=1+24=25$. Il existe deux racines qui sont $-2$ et $3$. On veut que $x^2-x-6$ soit négatif donc nul ou du signe de~$-a$ : cela se produit aux racines ou à l'intérieur de l'intervalle des racines. L'ensemble des solutions est $\symcal{S}=[-2,3]$.
+
+On aurait pu également, une fois les racines calculées, utiliser la forme factorisée du polynôme $P(x)=x^2-x-6$. Ainsi $P(x)=(x+2)(x-3)$, d'où le tableau de signes :
+\[\begin{array}{c|ccccccc}
+\hline
+x&-\infty&&\quad-2\quad&&\quad3\quad&&\infty\\
+\hline
+\sgn(x+2)&&-1&0&1&1&1&\\
+\hline
+\sgn(x-3)&&-1&-1&-1&0&1&\\
+\hline
+\sgn(P(x))&&1&0&-1&0&1&\\
+\hline
+\end{array}
+\]
+On retrouve la solution donnée par la première méthode.
+
+\item Résoudre $(2x-6)^2>0$ : ce carré est positif pour tout $x\in\R$ et s'annule si et seulement si $x=3$. Par conséquent, l'ensemble des solutions de cette inéquation est $\symcal{S}=\R\smallsetminus\{3\}$. Si l'on avait eu la très mauvaise idée de développer pour calculer le discriminant, on aurait trouvé $\Delta=0$ et une racine double égale à $3$.
+\item Résoudre $3x^2-4x-1≥0$ : c'est l'occasion d'utiliser le discriminant réduit.
+
+On trouve $\Delta'=4+3=7$.
+Il existe deux racines :
+\[
+\alpha=\frac{2+\sqrt{7}}{3}\quad\text{et}\quad\beta=\frac{2-\sqrt{7}}{3}.
+\]
+On veut que $3x^2-4x-1$ soit positif, donc nul ou du signe de $a$ : cela se produit aux racines ou à l'extérieur de l'intervalle des racines. L'ensemble des solutions est donc
+\[
+\symcal{S}=\left]-\infty, \beta\right] \cup \left[\alpha, \infty\right[.
+\]
+\item Résoudre $5x-2x^2>0$. La factorisation se fait à vue :
+\[
+5x-2x^2=-2x\left(x-\frac52\right),
+\]
+ il y a donc deux racines : $\alpha=0$ et $\beta=5/2$.
+
+On peut ensuite soit faire un tableau de signes, soit utiliser le théorème \ref{thsgn}, ce que nous ferons ici.
+On veut que $5x-2x^2$ soit strictement positif, donc du signe de $-a$ : cela se produit si et seulement si $x$ est à l'intérieur de l'intervalle des racines. L'ensemble des solutions est donc
+$\symcal{S}=\left]0,\, 5/2\right[$.
+\item Résoudre $x^2-x+1>0$ : on trouve $\Delta=-3$. Il n'y a pas de racines, donc $x^2-x+1$ admet pour signe $1$ pour tout $x\in\R$. Tout $x$ réel est donc solution : l'ensemble des solutions est $\symcal{S}=\R$.
+\end{enumerate}
+\end{example}
+\section{Somme et produit des racines}
+\subsection{Expression de la somme et du produit des racines}
+On suppose ici que $\Delta≥0$, c'est-à-dire que le polynôme $P$ deux racines $\alpha$ et $\beta$, confondues en une racine double au cas où $\Delta=0$. On a le théorème suivant:
+\begin{thm}\label{thsomprod}%
+Soit $P$, la fonction polynôme de degré 2 définie sur $\R$ par $P(x)=ax^2+bx+c$. Si le discriminant $\Delta$ de $P$ est positif, la somme et le produit des racines de $P$ sont données par
+\[
+\alpha+\beta=-\frac{b}{a} \quad\text{et}\quad \alpha\beta=\frac{c}{a}\:.
+\]
+\end{thm}
+
+\begin{remark}
+On sait que si $\Delta=0$, on a $\alpha=\beta=-b/(2a)$. On retrouve bien
+\[\alpha+\beta=2\times\left(-\frac{b}{2a}\right)=-\frac{b}{a}\;;\]
+on remarque également que, puisque $\Delta=0$, on a $b^2=4ac$ et par conséquent
+\[
+\alpha\beta=\left(-\frac{b}{2a}\right)^2=\frac{b^2}{4a^2}=\frac{4ac}{4a^2}=\frac{c}{a}\:.
+\]
+\end{remark}
+
+\begin{proof}On utilise la forme factorisée de $P(x)$ :
+\begin{align*}
+\forall x\in\R,\;P(x)&=a(x-\alpha)(x-\beta),\\
+&=a(x^2-\alpha x-\beta x +\alpha\beta),\\
+&=a\left(x^2-(\alpha+\beta)x+\alpha\beta\right),\\
+&=ax^2-a(\alpha+\beta)x +a\alpha\beta.
+\end{align*}
+
+D'après le théorème \ref{thunicite}, on peut identifier les coefficients : $-a(\alpha+\beta)=b$ et $a\alpha\beta=c$. Le résultat annoncé en découle immédiatement.
+\end{proof}
+\subsubsection{Racine apparente ou connue}
+On dit que $\alpha$ est une \frquote{racine apparente} (on dit également \frquote{évidente}) du polynôme $P$ lorsqu'un simple calcul à vue permet de montrer que $P(\alpha)=0$. On parle de racine connue lorsqu'un calcul antérieur a permis d'établir cette égalité. Dans une telle situation, il est facile de déterminer $\beta$, l'autre racine de $P$, grâce à la somme ou au produit :
+\[
+ \beta=-\frac{b}{a}-\alpha \quad \text{ou (dans le cas où $\alpha\neq0$)}\quad\beta=\frac{c}{a\alpha}.
+\]
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Factoriser le polynôme $P$, défini sur $\R$ par $P(x)=3x^2+9x+6$. Un calcul immédiat montre que $P(-1)=0$ : le réel $-1$ est donc racine de $P$, tandis que l'autre racine $\beta$ vérifie~\mbox{$-1\times\beta=6/3=2$}. D'où $\beta=-2$ et la factorisation : \[P(x)=3(x+1)(x+2).\]
+\item On pose $Q(x)=2x^2-13x+15$. Calculer $Q(5)$ et résoudre l'équation $Q(x)=0$. On trouve $Q(5)=0$ : le réel $5$ est donc racine de $Q$. L'autre racine vérifie $5+\beta=6{,}5$, d'où $\beta=1{,}5$ : l'ensemble des solutions de l'équation proposée est \[\symcal{S}=\left\{5, \frac32\right\}\,.\]
+
+\end{enumerate}
+\end{example}
+
+\subsection{Trouver deux nombres connaissant leur somme et leur produit}
+
+\begin{thm}
+Deux réels $s$ et $p$ étant donnés, il existe deux nombres réels $\alpha$ et $\beta$ dont la somme vaut $s$ et le produit $p$ si et seulement si le nombre $\Delta=s^2-4p$ est positif. Dans ce cas, les nombres $\alpha$ et $\beta$ sont les racines de la fonction polynôme de degré $2$ définie par $P(x)=x^2-sx+p$, de discriminant $\Delta$.
+\end{thm}
+\begin{proof}
+\begin{itemize}
+\item Tout d'abord, si $s^2-4p≥0$, la fonction polynôme $P$, de discriminant $\Delta=s^2-4p$ admet deux racines dont la somme est $s$ et le produit $p$ d'après le théorème \ref{thsomprod}.
+
+\item Réciproquement, s'il existe deux nombres $\alpha$ et $\beta$ tels que
+\[
+\alpha+\beta=s \quad\text{et}\quad \alpha\beta=p,
+\]
+on a, d'après la première équation, $\beta=s-\alpha$, puis en substituant dans la seconde
+\[\alpha(s-\alpha)=p\quad\text{soit}\quad\alpha^2-s\alpha+p=0,\]
+c'est-à-dire $P(\alpha)=0$.
+
+Il est donc nécessaire que $\alpha$ soit une racine de $P$, ce qui entraîne que le discriminant $s^2-4p$ soit positif. Enfin, la relation $\beta=s-\alpha$ entraîne que $\beta$ est alors la seconde racine de $P$.\qedhere
+\end{itemize}
+\end{proof}
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Trouver deux nombres dont la somme vaut $1$ et le produit $-12$. Ces deux nombres doivent être racines de $x^2+x-12$ dont le discriminant est $49$ et qui admet $-3$ et $4$ pour racines. Les deux nombres cherchés sont donc $-3$ et $4$.
+\item Trouver deux nombres dont la somme vaut $6$ et le produit $9$. On forme le polynôme $x^2-6x+9$, égal à $(x-3)^2$, dont le discriminant est nul et qui admet $3$ pour racine double : les nombres $\alpha$ et $\beta$ dont le produit vaut $9$ et la somme $6$ sont tous deux égaux à $3$.
+\item Trouver deux nombres dont la somme vaut $s=5$ et le produit $p=8$. On calcule $s^2-4p=-7$ : le problème n'a pas de solution (tout comme le polynôme $x^2-5x+8$ n'admet pas de racines).
+\end{enumerate}
+\end{example}
+\endinput
+
diff --git a/macros/luatex/latex/tango/examples/puissance-cercle.tex b/macros/luatex/latex/tango/examples/puissance-cercle.tex
new file mode 100644
index 0000000000..0263bcb20f
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/puissance-cercle.tex
@@ -0,0 +1,713 @@
+\tgotitle{Puissance d'un point par rapport à un cercle}
+
+\section{Mesure algébrique}
+On définit la mesure algébrique d'un bipoint~$(A,B)$ dans un repère de la droite~$(AB)$ comme la différence des abscisses $x_B-x_A$ (voir figure~\ref{figmesalg}). Dans le contexte euclidien qui nous intéresse ici, les repères des droites sont normés : la mesure algébrique ne dépend que de l'orientation de la droite (elle est définie \frquote{au signe près}). On notera cependant que le produit ou le quotient de deux mesures algébriques sont quant à eux indépendants du choix du repère, puisqu'en cas de changement d'orientation les signes des deux quantités considérées changent simultanément.
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=above:$A$] (A) at (-1.3,0);
+\coordinate [label=below:$x_A$] (xA) at (-1.3,0);
+\coordinate[label=above:$B$] (B) at (1.7,0);
+\coordinate [label=below:$x_B$] (xB) at (1.7,0);
+\coordinate (Z) at ($(A)!1.1!(B)$);
+\coordinate (T) at ($(B)!1.1!(A)$);
+\draw (Z)--(T);
+\node[below] at ($(A)!0.5!(B)$){$\mesalg{AB}=x_B-x_A$};
+\foreach \point in {A,B}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figmesalg}
+\end{figure}
+
+De la définition qui vient d'être donnée, on déduit immédiatement que :
+\begin{itemize}
+\item Pour tout point $A$, $\mesalg{AA}=0$.
+\item Pour tout couple de points $A$ et $B$, $\mesalg{BA}$ et $\mesalg{AB}$ sont deux nombres opposés.
+\end{itemize}
+Plus généralement, on peut énoncer le
+\begin{thm}\label{thchasles}%
+Soit $A$, $B$ et $C$ trois points donnés sur une droite dans un ordre quelconque. On a l'égalité suivante (relation de Chasles pour les mesures algébriques)
+\[\mesalg{AC}=\mesalg{AB}+\mesalg{BC}.\]
+\end{thm}
+
+\begin{proof} La vérification est immédiate.
+\begin{align*}\mesalg{AB}+\mesalg{BC}&=(x_B-x_A)+(x_C-x_B),\\
+&=x_C-x_A,\\
+&=\mesalg{AC}.\qedhere
+\end{align*}
+\end{proof}
+
+Nous donnons maintenant deux compléments sur la notion de mesure algébrique, qui faciliteront la compréhension de la suite.
+
+\begin{remark}[Lien avec le produit d'un vecteur par un réel]
+La notion de mesure algébrique est fortement liée à celle de produit d'un vecteur par un réel. Si $O$ et $A$ sont deux points distincts, $\lambda$ un réel et $M$ un point quelconque du plan, on a l'équivalence
+\[
+(\Vector{OM}=\lambda\Vector{OA})\iff(M\in (OA) \text{ et }\mesalg{OM}=\lambda\mesalg{OA}).
+\]
+Il s'en déduit que le milieu $I$ d'un segment $[AB]$ peut être caractérisé par des relations entre mesures algébriques, qu'il est parfois intéressant de substituer aux égalités vectorielles correspondantes :
+\begin{align}
+I \text{ est le milieu de }[AB]&\iff \mesalg{AI}=\mesalg{IB}=\frac12\mesalg{AB},\\
+&\iff\mesalg{IA}+\mesalg{IB}=0.\label{eqcaracmilieu}
+\end{align}
+\end{remark}
+
+\begin{remark}[Lien avec le produit scalaire]
+La mesure algébrique peut également intervenir dans l'expression du cosinus d'un angle et du produit scalaire. Précisément, si $A$ et $B$ sont deux points tous deux distincts du point $O$, le produit scalaire $\Vector{OA}\cdot\Vector{OB}$ peut être défini par
+\begin{equation}\Vector{OA}\cdot\Vector{OB}=OA\times OB\times \cos(\widehat{AOB}).\label{pscal1}
+\end{equation}
+%\[
+%\Vector{OA}\cdot\Vector{OB}=OA\times OB\times \rho([OA),[OB)),
+%\]
+%où $\rho([OA),[OB))$ désigne le rapport de projection orthogonale de la demi-droite $[OB)$ sur la demi-droite $[OA)$.
+
+On désigne par $H$ le projeté orthogonal de $B$ sur la \emph{droite} $(OA)$.
+La définition~\eqref{pscal1} permet d'affirmer que le produit scalaire $\Vector{OA}\cdot\Vector{OB}$ est de même signe que $\cos(\widehat{AOB})$, soit positif, si l'angle $\widehat{AOB}$ est aigu et négatif si cet angle est obtus. Le point $H$ appartient dans ce dernier cas à la demi-droite opposée à $[OA)$ (voir figure~\ref{figpscal0}). On a donc :
+\begin{equation*}
+\cos(\widehat{AOB})=
+\begin{cases}
+\hphantom{-}OH/OB&\text{si $\widehat{AOB}$ est aigu},\\
+-OH/OB&\text{si $\widehat{AOB}$ est obtus}.\\
+\end{cases}
+\end{equation*}
+
+%\[\cos(\widehat{AOB})=\frac{\mesalg{OH}}{\mesalg{OB}}.\]
+En reportant dans~\eqref{pscal1} et en simplifiant par $OB$, on obtient une autre expression du produit scalaire :
+\begin{equation*}
+\Vector{OA}\cdot\Vector{OB}=
+\begin{cases}
+\hphantom{-}OA\times OH&\text{si $\widehat{AOB}$ est aigu},\\
+-OA\times OH&\text{si $\widehat{AOB}$ est obtus}.
+\end{cases}%\label{pscal0}
+\end{equation*}
+
+
+
+On remarque alors que les demi-droites $[OA)$ et $[OH)$ sont de même sens si $\widehat{AOB}$ est aigu, et de sens contraire si $\widehat{AOB}$ est obtus. D'où une expression du produit scalaire utilisant les mesures algébriques :
+\begin{equation}
+\Vector{OA}\cdot\Vector{OB}=\mesalg{OA}\times\mesalg{OH}.\label{pscal0}
+\end{equation}
+
+%\dinofig{\figcaption{}\label{figpscal0}}
+\XSmartphoneCommand{
+\begin{figure}[ht]
+\hfill
+\begin{tikzpicture}
+\coordinate[label=left:$O$] (O) at (0,0);
+\coordinate(X) at (1,0);
+\coordinate[label=below:$B$](B) at ($(O)!3!350:(X)$);
+\coordinate(Y) at ($(O)!0.5!(B)$);
+\coordinate[label=above:$H$](H) at ($(Y)!1!50:(B)$);
+\coordinate[label=right:$A$](A) at ($(O)!1.3!(H)$);
+\draw[semithick,->] (O)--(B);
+\draw[semithick,->] (O)--(A);
+\draw[dashed](B)--(H);
+\foreach \point in {O,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\hfill\hfill
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (0,0);
+\coordinate(X) at (1,0);
+\coordinate[label=above:$B$](B) at ($(O)!2.9!160:(X)$);
+\coordinate(Y) at ($(O)!0.5!(B)$);
+\coordinate[label=below:$H$](H) at ($(Y)!1!50:(B)$);
+\coordinate(Z) at ($(O)!1.2!(H)$);
+\coordinate[label=above:$A$](A) at ($(O)!-0.6!(H)$);
+\draw[semithick,->] (O)--(B);
+\draw[semithick,->] (O)--(A);
+\draw(O)--(Z);
+\draw[dashed](B)--(H);
+\foreach \point in {O,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\hfill\null
+\figcaption{}\label{figpscal0}
+\end{figure}
+}
+\SmartphoneCommand{
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$O$] (O) at (0,0);
+\coordinate(X) at (1,0);
+\coordinate[label=below:$B$](B) at ($(O)!3!350:(X)$);
+\coordinate(Y) at ($(O)!0.5!(B)$);
+\coordinate[label=above:$H$](H) at ($(Y)!1!50:(B)$);
+\coordinate[label=right:$A$](A) at ($(O)!1.3!(H)$);
+\draw[semithick,->] (O)--(B);
+\draw[semithick,->] (O)--(A);
+\draw[dashed](B)--(H);
+\foreach \point in {O,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\\[1ex]
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (0,0);
+\coordinate(X) at (1,0);
+\coordinate[label=above:$B$](B) at ($(O)!2.9!160:(X)$);
+\coordinate(Y) at ($(O)!0.5!(B)$);
+\coordinate[label=below:$H$](H) at ($(Y)!1!50:(B)$);
+\coordinate(Z) at ($(O)!1.2!(H)$);
+\coordinate[label=above:$A$](A) at ($(O)!-0.6!(H)$);
+\draw[semithick,->] (O)--(B);
+\draw[semithick,->] (O)--(A);
+\draw(O)--(Z);
+\draw[dashed](B)--(H);
+\foreach \point in {O,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figpscal0}
+\end{figure}
+}
+\begin{example}[Remarques]
+\begin{enumerate}
+\item L'angle noté $\widehat{AOB}$ est un angle \emph{non orienté} de demi-droites ; autrement dit, il n'y a pas lieu de distinguer $\widehat{AOB}$ et $\widehat{BOA}$. Il en découle que le produit scalaire est commutatif (le terme \frquote{symétrique} serait sans doute plus adapté).
+
+On aurait donc pu tout aussi bien utiliser le projeté de $A$ sur $(OB)$.
+\item L'indépendance du cosinus par rapport à l'ordre des deux demi droites $[OA)$ et $[OB)$ provient de ce que $\cos(\widehat{AOB})$ est égal au rapport de projection orthogonale, noté $\rho([OA),[OB))$, de la demi-droite $[OB)$ sur la demi-droite $[OA)$. On sait en effet (c'est en général considéré comme un des axiomes de la géométrie plane) que
+\[\rho([OA),[OB))=\rho([OB),[OA)).\]
+
+ \item Lorsque les points $A$ et $B$ sont confondus, on a
+ \begin{align*}
+ \Vector{OA}\cdot\Vector{OB}&=\Vector{OA}\cdot\Vector{OA},\\
+ &=OA^2\times \cos(\widehat{AOA}).
+ \end{align*}
+ L'angle $\widehat{AOA}$ est nul : on a donc $\cos(\widehat{AOA})=1$ d'où finalement
+ \begin{equation}
+\Vector{OA}\cdot\Vector{OA}=\bigl({\Vector{OA}}\bigr)^2=OA^2.\label{eqcarres}
+\end{equation}
+\end{enumerate}
+\end{example}
+\end{remark}
+
+\section{Point et cercle}
+\subsection{Une définition}
+Étant donné un cercle $\symcal{C}$, de centre $O$ et de rayon $r$, et un point $P$ quelconque, la puissance du point $P$ par rapport au cercle $\symcal{C}$ est par définition le nombre
+\[\symcal{C}(P)=OP^2-r^2 \text{ (voir figure~\ref{figdefppc})}.\]
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (2,0);
+\coordinate(X) at (3,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=right:$P$] (P) at ($(O)!3.2!15:(X)$);
+\coordinate[label=right:$A$](A) at ($(O)!1!312:(X)$);
+\draw[semithick](P)--(O)--(A);
+\node[right] at (X){$\symcal{C}(P)=OP^2-OA^2$};
+\node[right=1.3cm,below=1mm] at (X){$\text{pour tout }A\in\symcal{C}$};
+\foreach \point in {P,O,A}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figdefppc}
+\end{figure}
+
+Par conséquent, la puissance d'un point $P$ par rapport à un cercle est :
+\begin{itemize}
+\item strictement positive si le point $P$ est extérieur au cercle;
+\item nulle si le point $P$ appartient au cercle;
+\item strictement négative et au minimum égale à $-r^2$ si le point $P$ est intérieur au cercle.
+\end{itemize}
+
+\subsection{Avec une tangente}\label{subsectangente}
+On se place ici dans le cas où le point $P$ est extérieur au cercle. Il est alors possible de s'intéresser aux tangentes issues de $P$.
+\begin{thm}
+Soit un cercle $\symcal{C}$ de centre $O$, un point $P$ extérieur au cercle et $T$ le point de contact de l'une des tangentes à $\symcal{C}$ issues de $P$. La puissance de $P$ par rapport à $\symcal{C}$ vaut
+\[\symcal{C}(P)=PT^2.\]
+\end{thm}
+
+
+\begin{proof}
+On pourra se référer à la figure \ref{figtangente}. La droite $(PT)$ étant tangente à $\symcal{C}$, le triangle $OTP$ est rectangle en $T$. D'après le théorème de Pythagore, on a
+\[\symcal{C}(P)=OP^2-OT^2=PT^2.\qedhere\]
+\end{proof}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=left:$O$] (O) at (2,0);
+\coordinate(X) at (3.5,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=right:$P$] (P) at ($(O)!1.7!345:(X)$);
+\coordinate(Y) at ($(O)!0.5!(P)$);
+\node[draw,dashed] (x) at (Y) [circle through={(P)}]{};
+\coordinate[label=above:$T$](T) at (intersection 2 of c and x);
+\draw (P)--(T)--(O)--cycle;
+\foreach \point in {P,T,O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figtangente}
+\end{figure}
+
+\subsection{Avec une sécante}\label{subsecsecante}
+Le point $P$ est cette fois-ci quelconque. On considère alors une droite sécante au cercle et passant par $P$ (voir la figure \ref{figsecante}).
+\begin{thm}
+Soit un cercle $\symcal{C}$ de centre $O$, un point $P$ quelconque et une droite passant par $P$ sécante au cercle en $A$ et $B$. La puissance de $P$ par rapport à $\symcal{C}$ vaut alors
+\[\symcal{C}(P)=\mesalg{PA}\times\mesalg{PB}.\]
+\end{thm}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (2,0);
+\coordinate(X) at (3.5,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=left:$A$] (A) at ($(O)!1!155:(X)$);
+\coordinate(A') at ($(A)!2!(O)$);
+\coordinate[label=right:$P$] (P) at ($(O)!1.8!35:(X)$);
+\coordinate(Z) at ($(A')!0.5!(P)$);
+\node (x) at (Z) [circle through={(P)}]{};
+\coordinate[label=above:$B$](B) at (intersection 2 of c and x);
+\coordinate[label=above:$I$](I) at ($(A)!0.5!(B)$);
+\draw (P)--(B)--(I)--(A);
+\draw(A)--(O)--(B);
+\draw(P)--(O)--(I);
+\foreach \point in {A,P,B,O,I}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figsecante}
+\end{figure}
+
+\begin{proof}
+Soit $I$ le milieu de $[AB]$ : $AOB$ étant isocèle en $O$, la droite $(OI)$ est la médiatrice de $[AB]$. Les triangles $OIP$ et $OIA$ sont rectangles en $I$. On a donc $OP^2=OI^2+IP^2$ et $OA^2=OI^2+IA^2$.
+
+ Par conséquent,
+\begin{align*}
+\symcal{C}(P)&=PO^2-OA^2,\\
+&=(OI^2+IP^2)-(OI^2+IA^2),\\
+\intertext{soit en réduisant,}
+\symcal{C}(P)&=IP^2-IA^2,\\
+\intertext{puis en utilisant une identité remarquable et les égalités~\eqref{eqcarres} et~\eqref{eqcaracmilieu}}
+\symcal{C}(P)&=\mesalg{PI}^2-\mesalg{IA}^2,\\
+&=(\mesalg{PI}+\mesalg{IA})(\mesalg{PI}-\mesalg{IA}),\\
+&=(\mesalg{PI}+\mesalg{IA})(\mesalg{PI}+\mesalg{IB}),\\
+\intertext{et enfin, grâce au théorème~\ref{thchasles}}
+\symcal{C}(P)&=\mesalg{PA}\times\mesalg{PB}.\qedhere
+\end{align*}
+
+\end{proof}
+
+\begin{example}[Remarques]
+\begin{enumerate}
+\item Il est remarquable que la quantité $\mesalg{PA}\times\mesalg{PB}$ ne dépende pas de la sécante choisie : autrement dit, si deux sécantes passant par $P$ coupent le cercle respectivement en $A$ et $B$ et en $C$ et $D$, alors
+\[\mesalg{PA}\times\mesalg{PB}=\mesalg{PC}\times\mesalg{PD}.\]
+\item Si $P$ est intérieur au cercle, les demi-droites $[PA)$ et $[PB)$ sont de sens contraires : on retrouve le fait que $\symcal{C}(P)$ est dans ce cas négatif.
+\item Une tangente issue de $P$, comme on l'a évoqué en \ref{subsectangente}, peut être considérée comme une position limite d'une sécante pivotant autour de $P$, les points $A$ et $B$ étant alors confondus en $T$ : on aura bien de ce point de vue $\mesalg{PA}\times\mesalg{PB}=PT^2$.
+\end{enumerate}
+\end{example}
+
+\subsection{Utilisation du produit scalaire}
+On utilise ici la relation~\eqref{pscal0} pour donner une autre expression de la puissance d'un point par rapport à un cercle (voir figure~\ref{figpscal2}).
+\begin{thm}
+Soit un cercle $\symcal{C}$ de centre $O$, un point $P$ quelconque, et deux points de $\symcal{C}$ diamétralement opposés $A_1$ et $A_2$. La puissance de $P$ par rapport à $\symcal{C}$ vaut alors
+\[\symcal{C}(P)=\Vector{PA_1}\cdot\Vector{PA_2}.\]
+\end{thm}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (2,0);
+\coordinate(X) at (3.5,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=left:$A_1$] (A) at ($(O)!1!160:(X)$);
+\coordinate[label=right:$A_2$] (A') at ($(A)!2!(O)$);
+\coordinate[label=right:$P$] (P) at ($(O)!2.2!32:(X)$);
+\coordinate(Z) at ($(A')!0.5!(P)$);
+\node (x) at (Z) [circle through={(P)}]{};
+\coordinate[label=above:$B$](B) at (intersection 2 of c and x);
+\draw [semithick,->](P)--(A);
+\draw[semithick,->](P)--(A');
+\draw(A')--(B);
+\foreach \point in {P,B,O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figpscal2}
+\end{figure}
+
+\begin{proof}%\sloppy
+Tout d'abord, les droites $(PA_1)$ et $(PA_2)$ ne peuvent être toutes les deux tangentes à $\symcal{C}$ : en effet, deux tangentes en des points diamétralement opposés sont parallèles disjointes et ne peuvent avoir le point $P$ en commun. Quitte à permuter $A_1$ et $A_2$, il n'est donc pas restrictif de supposer que la droite $(PA_1)$ est sécante (et non tangente) à $\symcal{C}$.
+
+Soit alors $B$ la seconde intersection de la droite $(PA_1)$ avec le cercle. Le segment $[A_1A_2]$ étant un diamètre du cercle, le point $B$ est le projeté orthogonal de $A_2$ sur $(PA_1)$. On a donc d'après \ref{subsectangente}
+\begin{align*}
+\symcal{C}(P)&=\mesalg{PA_1}\times\mesalg{PB},\\
+&=\Vector{PA_1}\cdot\Vector{PA_2}.\qedhere
+\end{align*}
+\end{proof}
+
+
+\begin{remark}
+On se persuadera facilement, en observant la figure \ref{figpscal3}, que le raisonnement précédent est indépendant de la position de $P$ par rapport au cercle.
+\end{remark}
+%\dinofig[-0.5]{\figcaption{}\label{figpscal3}}
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O$] (O) at (2,0);
+\coordinate(X) at (3.5,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=left:$A_1$] (A) at ($(O)!1!160:(X)$);
+\coordinate[label=right:$A_2$] (A') at ($(A)!2!(O)$);
+\coordinate[label=above:$P$] (P) at ($(O)!0.6!70:(X)$);
+\coordinate(Z) at ($(A')!0.5!(P)$);
+\node (x) at (Z) [circle through={(P)}]{};
+\coordinate[label=above:$B$](B) at (intersection 2 of c and x);
+\draw [semithick,->](P)--(A);
+\draw[semithick,->](P)--(A');
+\draw(P)--(B);
+\draw(A')--(B);
+\foreach \point in {P,B,O}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figpscal3}
+\end{figure}
+
+\subsection{Dans un repère orthonormal}
+On se place ici dans un repère orthonormal et l'on considère un cercle $\symcal{C}$ de centre $\Omega(a,b)$ et de rayon $r$. On s'intéresse alors à l'expression de la puissance d'un point $M(x,y)$ quelconque par rapport au cercle $\symcal{C}$.
+\begin{thm}\label{threp}
+Soit dans le plan rapporté à un repère orthonormal un cercle $\symcal{C}$ de centre $\Omega(a,b)$ et de rayon $r$. Soit un point $M(x,y)$. La puissance de $M$ par rapport à $\symcal{C}$ est
+\[\symcal{C}(M) = x^2+y^2-2ax-2by+a^2+b^2-r^2.\]
+\end{thm}
+
+\begin{proof}
+On a
+\begin{align*}\symcal{C}(M)&=\Omega M^2-r^2\\
+&={(x-a)}^2+{(y-b)}^2-r^2,\\
+&=x^2-2ax+a^2+y^2-2by+b^2-r^2.\qedhere
+\end{align*}
+\end{proof}
+
+De plus, en remarquant que $M\in\symcal{C}$ si et seulement si la puissance de $M$ par rapport à $\symcal{C}$ est nulle, on établit le corollaire suivant :
+%\DinoAfourNBCommand{\par\pagebreak}
+\begin{coro*}
+Dans le plan rapporté à un repère orthonormal, le cercle $\symcal{C}$ de centre $\Omega(a,b)$ et de rayon $r$ admet pour équation
+\[x^2+y^2-2ax-2by+c=0,\]
+où $c=a^2+b^2-r^2$.
+\end{coro*}
+
+\section{Cocyclicité}
+On dit que quatre points distincts sont cocycliques s'ils appartiennent à un même cercle (un tel cercle est évidemment unique : ce que l'on affirme en disant que les points sont cocycliques est que cercle circonscrit au triangle formé par trois quelconques de ces points passe par le quatrième). On se propose d'établir le théorème suivant (voir figure~\ref{figcocy}).
+
+\begin{thm} Soit quatre points distincts $A$, $B$, $C$ et $D$ tels que les droites $(AB)$ et $(CD)$ soient sécantes en $P$. Les points $A$, $B$, $C$, $D$ sont cocycliques si et seulement si
+\[\mesalg{PA}\times\mesalg{PB}=\mesalg{PC}\times\mesalg{PD}.\]
+\end{thm}
+
+%\dinofig{\figcaption{}\label{figcocy}}
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate (O) at (2,0);
+\coordinate(X) at (4,0);
+\node[draw,label=above:$\symcal{C}$] (c) at (O) [circle through={(X)}]{};
+\coordinate[label=left:$A$] (A) at ($(O)!1!140:(X)$);
+\coordinate[label=below:$B$] (B) at ($(O)!1!310:(X)$);
+\coordinate[label=left:$C$] (C) at ($(O)!1!210:(X)$);
+\coordinate[label=above:$D$] (D) at ($(O)!1!65:(X)$);
+\coordinate[label=right:$\kern3pt P$](P) at (intersection of A--B and C--D);
+\draw(A)--(B);
+\draw(C)--(D);
+\foreach \point in {A,B,C,D,P}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figcocy}
+\end{figure}
+
+\begin{proof}
+Il s'agit de démontrer une équivalence. Nous procéderons donc classiquement en deux temps : d'abord le sens direct, puis la réciproque.
+
+Supposons pour commencer que les points $A$, $B$, $C$, $D$ soient sur un même cercle $\symcal{C}$. Alors les droites $(AB)$ et $(CD)$ étant des sécantes au cercle contenant chacune le point $P$, on a
+\[\symcal{C}(P)=\mesalg{PA}\times\mesalg{PB}=\mesalg{PC}\times\mesalg{PD}.\]
+
+Réciproquement, supposons que $\mesalg{PA}\times\mesalg{PB}=\mesalg{PC}\times\mesalg{PD}$. Soit alors $\symcal{C}\;$ le cercle circonscrit au triangle $ABC$ : il nous suffit de prouver que $D\in\symcal{C}$. La droite $(CD)$ coupe le cercle en $C$ et en un second point $M$ tel que
+\begin{align*}\mesalg{PC}\times\mesalg{PM}&=\symcal{C}(P)\\
+&=\mesalg{PA}\times\mesalg{PB}\\
+&=\mesalg{PC}\times\mesalg{PD}, \text{ par hypothèse.}
+\end{align*}
+On en déduit que $\mesalg{PD}=\mesalg{PM}$, donc que $D=M$ ($P$ ne peut être confondu avec $C$, car alors il serait lui même confondu avec $A$ ou $B$).
+\end{proof}
+
+
+\section{Axe radical de deux cercles}
+
+\subsection{Définition}
+On s'intéresse ici à l'ensemble des points qui ont même puissance par rapport à deux cercles non concentriques donnés.
+
+\begin{thm}
+Étant donné deux cercles non concentriques $\symcal{C}_1$ et $\symcal{C}_2$ de centres et de rayons respectifs $(O_1,r_1)$ et $(O_2,r_2)$, l'ensemble des points qui ont la même puissance par rapport à chacun des cercles est une droite $\Delta$ perpendiculaire à $(O_1O_2)$, nommée \emph{axe radical} des deux cercles.
+\end{thm}
+
+%\dinofig{\figcaption{}\label{figaxerad0}}
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\clip (0.3,-1.3) rectangle (5.1,1.9);
+\coordinate[label=below:$O_1$] (O1) at (1,0);
+\coordinate(X1) at (1.6,0);
+\node[draw,label=above:$\symcal{C_1}$] (c1) at (O1) [circle through={(X1)}]{};
+\coordinate[label=below:$O_2$] (O2) at (3.8,0);
+\coordinate[label=below:$I$] (I) at ($(O1)!0.5!(O2)$);
+\coordinate(X2) at (5,0);
+\node[draw,label=above:$\symcal{C_2}$] (c2) at (O2) [circle through={(X2)}]{};
+\coordinate(Y1) at ($(O1)!-1.2!(X1)$);
+\coordinate(Y2) at ($(O2)!1.1!(X2)$);
+\draw (Y1)--(Y2);
+\coordinate(Y) at (2,-1);
+\coordinate(U) at (2,0.5);
+\node (x) at (Y) [circle through={(U)}]{};
+\coordinate(Z1) at (intersection 1 of c1 and x);
+\coordinate(T1) at (intersection 2 of c1 and x);
+\coordinate(Z2) at (intersection 1 of c2 and x);
+\coordinate(T2) at (intersection 2 of c2 and x);
+\coordinate[label=left:$M$](M) at (intersection of Z1--T1 and Z2--T2);
+\coordinate(W1) at ($(O1)!0.5!(M)$);
+\coordinate(W2) at ($(O2)!0.5!(M)$);
+\node (w1) at (W1) [circle through={(M)}]{};
+\node(w2) at (W2) [circle through={(M)}]{};
+\coordinate[label=below:$H\kern13pt$](H) at (intersection 1 of w1 and w2);
+\coordinate[label=left:$\Delta$](V1) at ($(H)!1.5!(M)$);
+\coordinate(V2) at ($(H)!-1.1!(M)$);
+\draw[semithick](V1)--(V2);
+\foreach \point in {O1,O2,I,M,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figaxerad0}
+\end{figure}
+
+\begin{remark}
+Si les deux cercles sont concentriques et distincts, aucun point $M$ du plan n'est tel que $\symcal{C}_1(M)=\symcal{C}_2(M)$, c'est une conséquence immédiate de la définition de la puissance d'un point par rapport à un cercle.
+\end{remark}
+
+\begin{proof}
+Soit un point $M$ du plan et $H$ son projeté orthogonal sur la droite $(O_1O_2)$. Nous supposons que $\symcal{C}_1(M)=\symcal{C}_2(M)$ ; nous allons prouver que le point $H$ occupe une position fixe (indépendante de $M$) sur $(O_1O_2)$, ce qui prouvera que $M$ appartient à la perpendiculaire en $H$ à cette droite. Pour nous éviter une réciproque fastidieuse, nous procéderons par équivalence. Désignons par $I$ le milieu de $[O_1O_2]$ et exprimons l'égalité des puissances (voir la figure~\ref{figaxerad0}).
+\begin{align*}
+\symcal{C}_1(M)=\symcal{C}_2(M) &\iff O_1M^2-r_1^2=O_2M^2-r_2^2,\\
+\intertext{soit, en posant $k=r_1^2-r_2^2$,}
+\symcal{C}_1(M)=\symcal{C}_2(M) &\iff O_1M_1^2-O_2M2^2=k,\\
+&\iff (\Vector{O_1M}+\Vector{O_2M})\cdot(\Vector{O_1M}-\Vector{O_2M})=k.
+\end{align*}
+
+On remarque alors que
+\begin{equation*}
+\Vector{O_1M}+\Vector{O_2M}=\hspace{-0.5em}\underbrace{\Vector{O_1I}+\Vector{O_2I}}_{\substack{\vec{0}\text{, car } I\\\text{milieu de }[O_1O_2]}}\hspace{-0.5em}+\,2\Vector{IM}=2\Vector{IM}
+\end{equation*}
+et que
+\begin{equation*}
+\Vector{O_1M}-\Vector{O_2M}=\Vector{O_1M}+\Vector{MO_2}=\Vector{O_1O_2}.
+\end{equation*}
+
+On en déduit
+\begin{align*}
+\symcal{C}_1(M)=\symcal{C}_2(M) &\iff 2\Vector{IM}\cdot\Vector{O_1O2}=k,\\
+&\iff 2(\underbrace{\Vector{IH}+\Vector{HM}}_{\Vector{IM}})\cdot\Vector{O_1O_2}=k,\\
+&\iff 2\Vector{IH}\cdot\Vector{O_1O_2}+2\underbrace{\Vector{HM}\cdot\Vector{O_1O_2}}_{\substack{0 \text{, car}\\(HM)\perp(O_1O_2)}}=k.
+\end{align*}
+
+Puisque les points $I$, $H$, $O_1$ et $O_2$ sont sur la même droite, on peut passer aux mesures algébriques, et on obtient finalement :
+\begin{align}
+\symcal{C}_1(M)=\symcal{C}_2(M)&\iff 2\mesalg{IH}\cdot\mesalg{O_1O_2}=k,\notag\\
+&\iff\mesalg{IH}=\frac{r_1^2-r_2^2}{2\mesalg{O_1O_2}}.\label{eqposH}
+\end{align}
+
+
+On en déduit que $\symcal{C}_1(M)=\symcal{C}_2(M)$ si et seulement si le projeté orthogonal $H$ de $M$ sur $(O_1O_2)$ occupe la position (fixe) définie par la relation~\eqref{eqposH}. L'ensemble des points $M$ est donc la droite $\Delta$ perpendiculaire à $(O_1O_2)$ passant par $H$.
+\end{proof}
+
+\subsection{Détermination pratique}\label{subsecdetprat}
+On s'intéresse ici à la position relative des cercles $\symcal{C_1}$ et $\symcal{C_2}$.
+\subsubsection{Cercles sécants}
+Supposons que les cercles $\symcal{C_1}$ et $\symcal{C_2}$ soient sécants en deux points $A$ et $B$ (voir la figure~\ref{figaxerad1}). On a
+\[\symcal{C}_1(A)=\symcal{C}_2(A)=0 \text{ et }\symcal{C}_1(B)=\symcal{C}_2(B)=0 .
+\]
+Les points $A$ et $B$ ont tous deux la même puissance par rapport à chacun des deux cercles : l'axe radical $\Delta$ de $\symcal{C}_1$ et $\symcal{C}_2$ est donc la droite $(AB)$.
+
+
+%\dinofig{\figcaption{}\label{figaxerad1}}
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O_1$] (O1) at (0.8,0);
+\coordinate(X1) at (2,0);
+\node[draw,label=above:$\symcal{C_1}$] (c1) at (O1) [circle through={(X1)}]{};
+\coordinate[label=below:$O_2$] (O2) at (3,0);
+\coordinate(X2) at (4.8,0);
+\node[draw,label=above:$\symcal{C_2}$] (c2) at (O2) [circle through={(X2)}]{};
+\coordinate(Y1) at ($(O1)!-1.2!(X1)$);
+\coordinate(Y2) at ($(O2)!1.1!(X2)$);
+\draw (Y1)--(Y2);
+\coordinate[label=right:$\kern2pt A$](A) at (intersection 2 of c1 and c2);
+\coordinate[label=right:$\kern2pt B$](B) at (intersection 1 of c1 and c2);
+\coordinate[label=below:$H\kern-13pt$](H) at (intersection of O1--O2 and A--B);
+\coordinate[label=left:$\Delta$](V1) at ($(H)!1.7!(A)$);
+\coordinate(V2) at ($(H)!1.3!(B)$);
+\draw[semithick](V1)--(V2);
+\foreach \point in {O1,O2,A,B,H}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figaxerad1}
+\end{figure}
+
+\subsubsection{Cercles tangents}
+Supposons que les cercles $\symcal{C_1}$ et $\symcal{C_2}$ soient tangents (intérieurement ou extérieurement) en un point $T$ (voir la figure~\ref{figaxerad2}). On a
+$\symcal{C}_1(T)=\symcal{C}_2(T)=0$.
+Le point $T$ a la même puissance par rapport à chacun des deux cercles : l'axe radical $\Delta$ de $\symcal{C}_1$ et $\symcal{C}_2$ est donc la droite perpendiculaire en $T$ à $(O_1O_2)$.
+
+%\dinofig{\figcaption{}\label{figaxerad2}}
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O_1$] (O1) at (1.2,0);
+\coordinate[label=below:$\kern10pt T$](T) at (3,0);
+\node[draw,label=above:$\symcal{C_1}$] (c1) at (O1) [circle through={(T)}]{};
+\coordinate[label=below:$O_2$] (O2) at (1.8,0);
+%\coordinate(X2) at (4.8,0);
+\node[draw,label=above:$\symcal{C_2}$] (c2) at (O2) [circle through={(T)}]{};
+\coordinate(Y1) at ($(O1)!-1.3!(T)$);
+\coordinate(Y2) at ($(O2)!1.3!(T)$);
+\draw (Y1)--(Y2);
+\coordinate[label=left:$\Delta$](V1) at ($(T)!1!270:(O1)$);
+\coordinate(V2) at ($(T)!1!90:(O1)$);
+\draw[semithick](V1)--(V2);
+\foreach \point in {O1,O2,T}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figaxerad2}
+\end{figure}
+
+
+\subsubsection{Cas général}
+Il est toujours possible de tracer un cercle auxiliaire $\Gamma$ sécant à $\symcal{C}_1$ en $A_1$ et $B_1$, à $\symcal{C}_2$ en $A_2$ et $B_2$, et de telle sorte que les droites $(A_1B_1)$ et $(A_2B_2)$ soient elles-mêmes sécantes en un point $P$ (voir la figure~\ref{figaxerad3}). On est ainsi ramené à des constructions ans le cas de cercles sécants.
+
+Le point $P$ appartient à l'axe radical de $(A_1B_1)$ de $\symcal{C}_1$ et $\Gamma$, donc $\symcal{C}_1(P)=\Gamma(P)$. De même, $\symcal{C}_2(P)=\Gamma(P)$ et par conséquent $\symcal{C}_1(P)=\symcal{C}_2(P)$. Le point $P$ appartient donc à l'axe radical $\Delta$ de $\symcal{C}_1$ et $\symcal{C}_2$ : $\Delta$ est la perpendiculaire à $(O_1O_2)$ passant par $P$.
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate[label=below:$O_1$] (O1) at (0.4,0);
+\coordinate(X1) at (1.5,0);
+\node[draw,label=above:$\symcal{C_1}$] (c1) at (O1) [circle through={(X1)}]{};
+\coordinate[label=below:$O_2$] (O2) at (3.6,0);
+\coordinate(X2) at (5,0);
+\node[draw,label=above:$\symcal{C_2}$] (c2) at (O2) [circle through={(X2)}]{};
+\coordinate(Y1) at ($(O1)!-1.2!(X1)$);
+\coordinate(Y2) at ($(O2)!1.1!(X2)$);
+\draw (Y1)--(Y2);
+\coordinate(Y) at (2,-1);
+\coordinate(U) at (2,0.5);
+\node[draw,label=below:$\kern10pt\Gamma$] (g) at (Y) [circle through={(U)}]{};
+\coordinate[label=left:$A_1${\rule[-8pt]{0pt}{10pt}}](A1) at (intersection 2 of c1 and g);
+\coordinate[label=below:$B_1\kern10pt$](B1) at (intersection 1 of c1 and g);
+\coordinate[label=right: $A_2${\rule[-8pt]{0pt}{10pt}}](A2) at (intersection 1 of c2 and g);
+\coordinate[label=below:$\kern10pt B_2$](B2) at (intersection 2 of c2 and g);
+\coordinate[label=left:$P$](P) at (intersection of A1--B1 and A2--B2);
+\draw (P)--(B1);
+\draw (P)--(B2);
+\coordinate(W1) at ($(O1)!0.5!(P)$);
+\coordinate(W2) at ($(O2)!0.5!(P)$);
+\node (w1) at (W1) [circle through={(P)}]{};
+\node(w2) at (W2) [circle through={(P)}]{};
+\coordinate[label=below:$H\kern13pt$](H) at (intersection 1 of w1 and w2);
+\coordinate[label=left:$\Delta$](V1) at ($(H)!1.5!(P)$);
+\coordinate(V2) at ($(H)!-2.4!(P)$);
+\draw[semithick](V1)--(V2);
+\foreach \point in {O1,O2,P,H,A1,B1,A2,B2}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figaxerad3}
+\end{figure}
+
+\subsubsection{Dans un repère orthonormal}
+Soit un cercle $\symcal{C}_1$ de centre $\Omega_1(a_1,b_1)$ et de rayon $r_2$, un cercle $\symcal{C}_2$ de centre $\Omega_2(a_2,b_2)$ et de rayon $r_2$. On suppose $\Omega_1\neq\Omega_2$ et on nomme $\Delta$ l'axe radical de ces deux cercles. D'après le théorème~\ref{threp} page \pageref{threp}, l'appartenance de $M(x,y)$ à $\Delta$ se traduit par
+\begin{equation*}
+x^2+y^2-2a_1x-2b_1y+c_1=x^2+y^2-2a_2x-2b_2y+c_2,
+\end{equation*}
+où $c_1=a_1^2+b_1^2-r_1^2$ et $c_2=a_2^2+b_2^2-r_2^2$.
+
+\vspace\baselineskip\par Donc, après simplification :
+\[P\in \Delta \iff (a_2-a_1)x+(b_2-b_1)y+(c_1-c_2)/2=0.\]
+L'axe radical $\Delta$ admet pour équation
+\[(a_2-a_1)x+(b_2-b_1)y+(c_1-c_2)/2=0,\]
+ où l'on constate bien que $\Delta$ admet $\Vector{\Omega_1\Omega_2}$ pour vecteur normal.
+
+ \subsection{Centre radical}
+ Lorsqu'au~\ref{subsecdetprat} nous avons, pour traiter le cas général, exploité l'idée d'un cercle auxiliaire, nous avons implicitement démontré le théorème suivant (voir la figure~\ref{figcentrerad}).
+ \begin{thm}
+ Soient trois cercles $\symcal{C}_1$, $\symcal{C}_2$ et $\Gamma$ dont les centres sont distincts et non alignés. Les axes radicaux $\Delta$ de $\symcal{C}_1$ et $\symcal{C}_2$, $\symcal{D}_1$ de $\symcal{C}_1$ et $\Gamma$ et finalement $\symcal{D}_2$ de $\symcal{C}_2$ et $\Gamma$ sont concourants en un point $P$ nommé \emph{centre radical} des trois cercles.
+ \end{thm}
+
+\newcommand{\figurecentrerad}{%
+ \begin{figure}[ht]
+\centering
+\begin{tikzpicture}
+\coordinate (O1) at (0.4,0);
+\coordinate(X1) at (1.5,0);
+\node[draw,label=above:$\symcal{C_1}$] (c1) at (O1) [circle through={(X1)}]{};
+\coordinate (O2) at (3.6,0);
+\coordinate(X2) at (5,0);
+\node[draw,label=above:$\symcal{C_2}$] (c2) at (O2) [circle through={(X2)}]{};
+\coordinate(Y) at (2,-1);
+\coordinate(U) at (2,0.5);
+\node[draw,label=below:$\kern10pt\Gamma$] (g) at (Y) [circle through={(U)}]{};
+\coordinate(A1) at (intersection 2 of c1 and g);
+\coordinate(B1) at (intersection 1 of c1 and g);
+\coordinate(A2) at (intersection 1 of c2 and g);
+\coordinate(B2) at (intersection 2 of c2 and g);
+\coordinate[label=right:$\symcal{D}_1$](Y1) at ($(A1)!1.8!(B1)$);
+\coordinate[label=left:$\symcal{D}_2$](Y2) at ($(A2)!1.5!(B2)$);
+\coordinate[label=left:$P$](P) at (intersection of A1--B1 and A2--B2);
+\draw (P)--(Y1);
+\draw (P)--(Y2);
+\coordinate(W1) at ($(O1)!0.5!(P)$);
+\coordinate(W2) at ($(O2)!0.5!(P)$);
+\node (w1) at (W1) [circle through={(P)}]{};
+\node(w2) at (W2) [circle through={(P)}]{};
+\coordinate(H) at (intersection 1 of w1 and w2);
+\coordinate[label=left:$\Delta$](V1) at ($(H)!1.5!(P)$);
+\coordinate(V2) at ($(H)!-2.4!(P)$);
+\draw(V1)--(V2);
+\foreach \point in {P,A1,B1,A2,B2}
+\draw[black,fill=white](\point) circle (1.2pt);
+\end{tikzpicture}
+\figcaption{}\label{figcentrerad}
+\end{figure}
+}
+
+%\DinoiPhoneCommand{%
+%\afterpage{\clearpage
+%\figurecentrerad
+%\par
+%\vspace{0.7cm}
+%{
+%\centering\LARGE\textcolor{ColorOne}\decoone
+
+%}
+%}}
+
+%\DinoiPadStdCommand{\figurecentrerad}
+%\DinoiPadAirCommand{\figurecentrerad}
+%\DinoiPadProCommand{\figurecentrerad}
+%%\DinoAfourNBCommand{\figurecentrerad}
+%\DinoAfourColorCommand{\figurecentrerad}
+%\DinoiPadminiCommand{\figurecentrerad}
+%%\DinoSaisieCommand{\figurecentrerad}
+%\DinoiPhoneCommand{\figurecentrerad}
+\figurecentrerad
+
+\begin{proof}
+On définit $P$ comme intersection de $\symcal{D}_1$ et $\symcal{D}_2$ (le fait que les centres ne soient pas alignés garantit l'existence de $P$) :
+\begin{align*}
+P\in \symcal{D}_1&\implies \symcal{C}_1(P)=\Gamma(P)\text{ et }\\
+P\in \symcal{D}_2&\implies \symcal{C}_2(P)=\Gamma(P),
+\end{align*}
+dont on déduit que $\symcal{C}_1(P)=\symcal{C}_2(P)$. Autrement dit $P\in \Delta$.
+\end{proof}
+%\DinoAfourColorCommand{%
+%\par
+%\vspace{1.5cm}
+%{
+%\centering\LARGE\textcolor{ColorOne}\decoone
+%
+%}
+%}
+
+\endinput \ No newline at end of file
diff --git a/macros/luatex/latex/tango/examples/recurrence.tex b/macros/luatex/latex/tango/examples/recurrence.tex
new file mode 100644
index 0000000000..ee823068c4
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/recurrence.tex
@@ -0,0 +1,189 @@
+% !TEX TS-program = LuaLaTeX
+
+\renewcommand{\theprop}{(\ensuremath{\fnsymbol{prop}})}
+
+\tgotitle{Raisonnement par récurrence}
+%
+\section{Une propriété des entiers naturels}
+La propriété énoncée dans cette section est parfois présentée comme un axiome. Il n'entre toutefois pas dans nos intentions de construire une ou des axiomatiques, ne serait-ce que parce que cette notion est délicate. On se contentera donc d'un point de vue naïf, selon lequel un axiome est un énoncé dont on admet qu'il est vrai. Le lecteur doit toutefois savoir que les énoncés de la propriété~\ref{propppe} et du théorème~\ref{threc} ont des rôles en quelque sorte interchangeables : dans les axiomatiques classiques permettant de fonder l'arithmétique, prendre l'un comme axiome permet de démontrer l'autre comme théorème. Pour cette raison, le lecteur pourra trouver ailleurs des présentations proposant un axiome (ou parfois un principe) de \emph{récurrence}, la propriété~\ref{propppe} devenant alors un théorème.
+\par
+\vspace{0.5\baselineskip}\par
+Nous supposons donc connu l'ensemble $\N$ des entiers naturels, muni notamment d'une relation d'ordre notée ${≤}$ et nous admettons que cet ensemble possède la propriété suivante:
+%
+\begin{prop}
+Toute partie non vide de $\N$ possède un plus petit élément.\label{propppe}
+\end{prop}
+
+On traduit souvent cette propriété en disant que \N{} est \emph{bien ordonné}.
+%x
+%\par\noindent{\color{gray}\rule{\linewidth}{5pt}}\par\addvspace{-3pt}\par\nobreak
+
+%Cette propriété peut être considérée comme un des axiomes qui permettent de décrire l'ensemble \N{} des entiers naturels. Elle peut également se démontrer à partir d'un autre système d'axiomes, de portée équivalente (axiomes de Peano, notamment) ou de portée plus générale (Zermelo-Fraenkel, par exemple).
+
+%\par\noindent\hrulefill
+\section{Récurrence}
+\subsection{Introduction}
+\label{secexplerec}
+La propriété \ref{propppe} permet de formaliser une méthode consistant à établir la validité d'une assertion \frquote{de proche en proche}. Fixons-nous par exemple un réel $a$ strictement positif et, pour tout entier naturel $n$, considérons la propriété $P(n)$
+\[(1+a)^n\geq 1+na.\]
+
+Nous nous proposons de démontrer que cette propriété est vraie pour tout entier naturel~$n$.
+
+Prouvons dans un premier temps que $P(0)$ est vraie (\mbox{c.-à-d.} que si $n=0$ alors $P(n)$ est vraie) : puisqu'il est vrai que $(1+a)^0=1$ et $1+0\times a=1$, il est établi que $(1+a)^0\geq1+0\times a$, donc que $P(0)$ est vraie.
+
+Donnons-nous alors un entier naturel $n$ et supposons que $P(n)$ est vraie. Prouvons alors que nécessairement $P(n+1)$ est vraie :
+\begin{align*}
+(1+a)^n&\geq1+na,\\
+\intertext{soit, en multipliant les deux membres par $1+a$, qui est strictement positif,}
+(1+a)^{n+1}&\geq(1+a)(1+na),\\
+\intertext{d'où}
+(1+a)^{n+1}&\geq 1+(n+1)a+na^2,\\
+\intertext{et enfin}
+(1+a)^{n+1}&\geq 1+(n+1)a,\quad \text{car $na^2\geq0$.}
+\end{align*}
+
+Nous venons d'établir que, pour tout entier naturel $n$, si $P(n)$ est vraie alors $P(n+1)$ est vraie. En termes plus formels :
+\begin{equation}
+\forall n\in\N,\; P(n)\implies P(n+1).
+\label{eqhered}
+\end{equation}
+
+Nous notons maintenant $\symcal{A}$ l'ensemble des valeurs de l'entier naturel $n$ pour lesquelles $P(n)$ \emph{est fausse}. Nous allons prouver \emph{par l'absurde} que $\symcal{A}$ est vide, autrement dit que $P(n)$ est vraie pour tout entier naturel $n$.
+
+Supposons donc que $\symcal{A}$ est non vide. En vertu de la propriété \ref{propppe}, $\symcal{A}$ possède un plus petit élément que nous notons $m$. Puisque $P(0)$ est vraie, on peut affirmer que $0\notin\symcal{A}$ donc que $m>0$, ce qui nous assure que $m-1\in\N$. Le fait que $m-1<m$ nous prouve maintenant que $m-1\notin\symcal{A}$, puisque $m$ est le plus petit élément de $\symcal{A}$. Alors $P(m-1)$ est vraie, ce qui entraîne, d'après la proposition \eqref{eqhered}, que $P(m)$ est vraie également. L'entier $m$ étant élément de $\symcal{A}$ on aboutit à une contradiction. Finalement $\symcal{A}$ est vide et la propriété $P(n)$ est vraie pour tout entier $n$.
+
+\begin{remark}
+On traduit la proposition \eqref{eqhered} en disant que la propriété $P$ est \emph{héréditaire} à partir du rang $0$.
+\end{remark}
+
+\subsection{Un théorème}
+Nous souhaitons maintenant nous éviter le recours direct à la propriété \ref{propppe}, et en particulier un raisonnement par l'absurde nécessitant l'introduction un peu lourde d'une partie telle que $\symcal{A}$. Nous souhaitons également pouvoir facilement établir qu'une propriété est vraie non pas sur \N{} tout entier, mais plutôt pour tout entier supérieur à un entier $n_0$ donné. À cet effet nous formulons maintenant le \emph{théorème de récurrence}, dont la démonstration ne sera pas très différente de celle qui a été faite sur l'exemple de la section \ref{secexplerec}.
+\begin{thm}
+Soit un entier $n_0$ fixé et une propriété $P(n)$ dont l'énoncé dépend d'un entier $n$. Si $P(n_0)$ est vraie et si pour tout entier $n$ supérieur à $n_0$ l'implication
+\[P(n)\implies P(n+1)\]
+est vraie, alors la propriété $P(n)$ est vraie pour tout entier $n$ supérieur à $n_0$.
+\label{threc}
+\end{thm}
+\begin{proof}Considérons une propriété $P(n)$ vérifiant les hypothèses de notre théorème et montrons alors que $P(n)$ est vraie pour tout entier $n\geq n_0$.
+Nous noterons $\symcal{A}$ l'ensemble des entiers naturels $k$ pour lesquels que $P(n_0+k)$ est fausse. Le fait que $P(n_0)$ est vrai se traduit par
+\[
+0\notin\symcal{A}
+\]
+ et plus généralement, pour $n≥n_0$, en remarquant que $n$ peut s'écrire $n_0+(n-n_0)$,
+ \frquote{$P(n)$ est vrai} se traduit par $(n-n_0)\notin\symcal{A}$.
+ En posant $k=n-n_0$, l'hypothèse
+ \begin{align}
+ \forall n≥n_0,\; P(n)&\implies P(n+1)\notag\\
+ \intertext{nous assure donc que}
+ \forall k\in\N,\;k\notin\symcal{A}&\implies(k+1)\notin\symcal{A}. \label{eqheredA}
+ \end{align}
+
+Prouver que la propriété $P(n)$ est vraie pour tout entier $n$ supérieur à $n_0$ revient à prouver que $\symcal{A}$ est vide. Raisonnons par l'absurde et supposons que $\symcal{A}$ est non vide : en vertu de la propriété \ref{propppe}, $\symcal{A}$ possède alors un plus petit élément que nous notons~$m$. Nous savons que $m>0$, puisque $0\notin\symcal{A}$, et cela nous assure que $m-1\in\N$. Le fait que $m-1<m$ nous prouve maintenant que $m-1\notin\symcal{A}$, puisque $m$ est le plus petit élément de $\symcal{A}$. Alors d'après la proposition \eqref{eqheredA}, $m\notin\symcal{A}$, ce qui est en contradiction avec le fait que $m$ est le plus petit élément de $\symcal{A}$. Il est alors établi que la propriété $P(n)$ est vraie pour tout $n≥n_0$.
+ \end{proof}
+%
+\begin{remark}
+Un raisonnement par récurrence consiste donc à appliquer le théorème \ref{threc} pour démontrer qu'une propriété $P(n)$ est vraie pour tout entier $n$ supérieur à un certain entier $n_0$. Il se fait en trois étapes qui doivent, pour la clarté du propos, être suffisamment mises en évidence.
+\begin{enumerate}
+\item \textit{Initialisation :} on établit que $P(n_0)$ est vraie.
+\item \textit{Preuve du caractère héréditaire de la propriété :} on démontre que
+\[
+\forall n≥n_0,\; P(n)\implies P(n+1).
+\]
+\item \textit{Conclusion :} on a ainsi établi par récurrence que $P(n)$ est vraie pour tout $n≥n_0$.
+\end{enumerate}
+\end{remark}
+
+\subsection{Applications et exemples}
+
+\subsubsection{Une somme}
+On se propose de démontrer par récurrence que la somme $S_n$ des $n$ premiers entiers non nuls est égale à $n(n+1)/2$. Par définition on a donc
+\[
+S_n=\sum_{k=1}^n k\;\text{ ou si l'on préfère }\; S_n=1+2+\cdots+n-1+n.
+\]
+On veut démontrer par récurrence que la propriété $P(n)$, définie par
+\[
+S_n=\frac{n(n+1)}{2}\;,
+\]
+est vraie pour tout $n≥1$.
+\begin{enumerate}
+\item \textit{Initialisation :} on a $S_1=1$ et pour $n=1$, $n(n+1)/2=2/2=1$. Donc $P(1)$ est vraie.
+\item \textit{Hérédité :} donnons nous un entier $n≥1$ et supposons que $P(n)$ est vraie.
+Montrons alors que $P(n+1)$ est vraie c'est à dire que $S_{n+1}=((n+1)(n+2))/2$.
+On sait que $S_{n+1}=S_{n}+n+1$, donc
+\begin{align*}
+S_{n+1}&=\frac{n(n+1)}{2}+n+1,\\
+&=\frac{n(n+1)+2(n+1)}{2}\;,\\
+&=\frac{(n+1)(n+2)}{2}\:.
+\end{align*}
+On vient d'établir que $\forall n≥1,\;P(n)\implies P(n+1)$. La propriété $P(n)$ est donc héréditaire à partir du rang $1$.
+\item \textit{Conclusion :} la propriété $P(n)$ est vraie pour tout $n≥1$.
+\[
+\forall n≥1,\;S_n=\frac{n(n+1)}{2}\:.
+\]
+\end{enumerate}
+
+\subsubsection{Une autre somme}
+On se propose cette fois de démontrer par récurrence que la somme $T_n$ des carrés des $n$ premiers entiers non nuls est égale à $\bigl(n(n+1)(2n+1)\bigr)/6$. Par définition on a donc
+\[
+T_n=\sum_{k=1}^n k^2\;\text{ ou si l'on préfère }\; T_n=1^2+2^2+\cdots+(n-1)^2+n^2.
+\]
+On veut démontrer par récurrence que la propriété $P(n)$, définie par
+\[
+T_n=\frac{n(n+1)(2n+1)}{6}\;,
+\]
+est vraie pour tout $n≥1$.
+\begin{enumerate}
+\item \textit{Initialisation :} on a $T_1=1$ et pour $n=1$,
+\[\frac{n(n+1)(2n+1)}{6}=\frac{2\times3}{6}=1.\]
+ Donc $P(1)$ est vraie.
+\item \textit{Hérédité :} donnons nous un entier $n≥1$ et supposons que $P(n)$ est vraie.
+Montrons alors que $P(n+1)$ est vraie c'est à dire que
+\begin{align*}
+T_{n+1}&=\frac{(n+1)\bigl((n+1)+1)(2(n+1)+1\bigr)}{6}\;,\\
+&=\frac{(n+1)(n+2)(2n+3)}{6}\:.
+\end{align*}
+On sait que $T_{n+1}=T_{n}+(n+1)^2$, donc
+\begin{align*}
+T_{n+1}&=\frac{n(n+1)(2n+1)}{6}+(n+1)^2,\\
+&=\frac{n(n+1)(2n+1)+6(n+1)(n+1)}{6}\;,\\
+\intertext{soit, en factorisant $n+1$}
+T_{n+1}&=\frac{(n+1)\bigl(n(2n+1)+6(n+1)\bigr)}{6}\;,\\
+&=\frac{(n+1)(2n^2+n+6n+6)}{6}\;.\\
+\intertext{On remarque alors que $n+6n=7n$, que l'on peut aussi écrire $3n+4n$ d'où}
+T_{n+1}&=\frac{(n+1)(2n^2+3n+4n+6)}{6}\;,\\
+&=\frac{(n+1)\bigl(n(2n+3)+2(2n+3)\bigr)}{6}\;,\\
+&=\frac{(n+1)(n+2)(2n+3)}{6}\:.
+\end{align*}
+On vient d'établir que $\forall n≥1,\;P(n)\implies P(n+1)$. La propriété $P(n)$ est donc héréditaire à partir du rang $1$.
+\item \textit{Conclusion :} la propriété $P(n)$ est vraie pour tout $n≥1$.
+\[
+\forall n≥1,\;T_n=\frac{n(n+1)(2n+1)}{6}\:.
+\]
+\end{enumerate}
+
+\subsubsection{Divisibilité}
+Démontrer par récurrence que, pour tout entier naturel $n$, $n^3+2n$ est un multiple de $3$.
+On veut démontrer par récurrence que la propriété $P(n)$, définie par
+\[
+\exists\, k\in\N \text{ tel que }n^3+2n=3k,
+\]
+est vraie pour tout $n≥0$.
+\begin{enumerate}
+\item \textit{Initialisation :} Si $n=0$, $n^3+2n=0$ qui s'écrit aussi $3\times0$. Donc $P(0)$ est vraie.
+\item \textit{Hérédité :} Donnons nous un entier naturel $n$ et supposons que $P(n)$ est vraie. Montrons alors que $P(n+1)$ est vraie, c.-à-d. que $(n+1)^3+2(n+1)$ est divisible par~$3$.
+\begin{align*}
+(n+1)^3+2(n+1)&=n^3+3n^2+3n+1+2n+2,\\
+&=(n^3+2n)+3(n^2+n+1).
+\end{align*}
+L'hypothèse de récurrence nous dit que $P(n)$ est vraie, donc qu'il existe un entier $k$ tel que \mbox{$n^3+2n=3k$}. Alors
+\[(n+1)^3+2(n+1)=3(k+n^2+n+1),\]
+Ce qui prouve que $(n+1)^3+2(n+1)$ est un multiple de 3.
+
+On vient d'établir que $\forall n\in\N,\;P(n)\implies P(n+1)$. La propriété $P(n)$ est donc héréditaire à partir du rang $0$.
+\item \textit{Conclusion :} la propriété $P(n)$ est vraie pour tout $n\in\N$.
+\[
+\forall n\in\N,\; n^3+2n \text{ est divisible par $3$.}
+\]
+\end{enumerate}
+
+\endinput
diff --git a/macros/luatex/latex/tango/examples/rel-bin.tex b/macros/luatex/latex/tango/examples/rel-bin.tex
new file mode 100644
index 0000000000..ae2633e9d5
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/rel-bin.tex
@@ -0,0 +1,443 @@
+% !TEX TS-program = LuaLaTeX
+%\documentclass[ColorTheme=Red]{dino-iPhone}
+
+\tgotitle{Relations binaires}
+\tgoshorttoc
+\section*{Avertissement}
+{\itshape
+Ce chapitre de la \emph{Mathematica dinosaurorum} a un statut un peu particulier, dans la mesure où il regroupe des notions somme toute assez basiques et que je ne tiens pas à présenter en introduction à d'autres chapitres. Il s'agit donc d'un texte destiné à servir de référence, et pas nécessairement à être lu d'une traite. Les exemples y sont donc peu nombreux, de même que les théorèmes, car tout ceci figure ou figurera dans les chapitres qui font référence à celui-ci.
+
+}
+
+\section{Généralités}
+\subsection{Produit cartésien}
+Deux ensembles $E$ et $F$ étant donnés, on appelle produit cartésien de $E$ et $F$ l'ensemble noté~$E\times F$ des couples $(x,y)$ où $x\in E$ et $y\in F$ :
+\[z\in E\times F \iff \exists\, x \in E, \exists\, y\in F,\;\text{tels que}\; z=(x,y).\]
+
+Dans le cas où $E=F$, on peut noter $E^2$ au lieu de $E\times E$. Ce cas particulier est important : par exemple, l'ensemble des couples des coordonnées des points du plan rapporté à un repère donné est~$\mathbb{R}^2$. On comprend alors que l'ordre de chaque couple est important et qu'il faut distinguer $(x,y)$ et~$(y,x)$, dans le cas de l'exemple qui vient d'être donné, mais aussi d'une façon générale.
+
+Cette notion se généralise à plus de deux ensembles : par exemple~$\R^3$ est l'ensemble~\mbox{$\R\times\R\times\R$} des triplets ordonnés de réels.
+
+\subsection{Parties d'un ensemble}
+On dit qu'un ensemble $X$ est une partie d'un ensemble $E$ si tout élément de $X$ est un élément de $E$. On dit aussi que~$X$ est un sous-ensemble de $E$ ou que $X$ est inclus dans $E$, ce que l'on note $X \subset E$ :
+\[X\subset E \iff \forall x,\; (x\in X\implies x\in E).\]
+
+L'ensemble vide $\emptyset$ et l'ensemble $E$ lui-même sont des parties de $E$, et l'on note~$\Pt{E}$ l'ensemble de toutes les parties de $E$.
+\[X\in \Pt{E}\iff X\subset E.\]
+
+\begin{alert}
+La propriété ci-dessus exprime le fait qu'une inclusion dans $E$ se traduit par une appartenance à $\Pt{E}$. Si $A$ et $B$ sont des parties de $E$, ce sont des \emph{éléments} de $\Pt{E}$, de même que~$\emptyset$ et~$E$. En revanche $\{A\}$, qui est un ensemble admettant pour seul élément la partie $A$ de $E$, est une partie de~$\Pt{E}$ de même que $\{\emptyset\}$ et $\{\emptyset, A, B,E\}$. En tant que parties de $\Pt{E}$, ce sont aussi des éléments de $\Pt{\Pt{E}}$! On notera aussi que l'ensemble vide~$\emptyset$, qui ne contient aucun élément, ne doit pas être confondu avec $\{\emptyset\}$, qui est un ensemble qui contient l'ensemble vide pour seul élément : ces deux ensembles sont des parties de $\Pt{E}$, distinctes l'une de l'autre. Enfin, il apparaît que $\emptyset$ est à la fois un élément et une partie de $\Pt{E}$…
+\end{alert}
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Si $E=\{a,b\}$, $\Pt{E}=\{\emptyset,\{a\},\{b\},E\}$.
+\item Si $E=\emptyset$, $\Pt{E}=\{\emptyset\}$, $\Pt{\Pt{E}}=\{\emptyset,\{\emptyset\}\}$ et \[\Pt{\Pt{\Pt{E}}}=\{\emptyset,\{\emptyset\},\{\{\emptyset\}\},\{\emptyset,\{\emptyset\}\}\}.\]
+\end{enumerate}
+\end{example}
+
+\subsubsection{Opérations dans l'ensemble des parties}
+On définit l'union (notée $\cup$) et l'intersection (notée $\cap$) de deux parties de $E$ de la façon suivante :
+
+\smallskip\par
+\begin{itemize}
+\item\textit{Union :} $x\in A\cup B \iff ((x\in A)\;\text{ou}\;(x\in B))$.
+\item\textit{Intersection :} $x\in A\cap B \iff ((x\in A)\;\text{et}\;(x\in B))$.
+\end{itemize}
+\smallskip\par
+
+À propos de l'union, on notera qu'en mathématique le mot \frquote{ou} a \emph{toujours} un sens inclusif, c'est-à-dire \frquote{l'un ou l'autre ou les deux}. L'union et l'intersection de deux parties de $E$ sont elles-mêmes des parties de $E$.
+
+De même on définit le complémentaire d'une partie $A$ de $E$ comme étant la partie de $E$ constituée des éléments de $E$ qui n'appartiennent pas à~$A$. Ce complémentaire est noté $E\smallsetminus A$ ou~$\complement_{E} A$. Lorsque qu'il n'y a aucune ambiguïté concernant l'ensemble $E$, on peut même le noter~$\bar{A}$.
+\smallskip\par
+\begin{itemize}
+\item\textit{Complémentaire :} $x\in \complement_E A \iff ((x\in E)\;\text{et}\;(x\notin A))$.
+\end{itemize}
+
+\smallskip
+Enfin on définit également la \emph{différence ensembliste} de deux parties $A$ et $B$ de $E$, notée~$A\smallsetminus B$ comme étant l'ensemble des éléments de $A$ qui ne sont pas éléments de $B$.
+\smallskip\par
+\begin{itemize}
+\item\textit{Différence ensembliste :} $x\in A\smallsetminus B \iff ((x\in A)\;\text{et}\;(x\notin B))$.
+\end{itemize}
+
+\subsubsection{Partition d'un ensemble}
+Soit un ensemble $E$ et $\symcal{C}$ une ensemble de parties de $E$ (c'est-à-dire un sous-ensemble ou encore une partie de $\Pt{E}$), on dit que $\symcal{C}$ est une partition de $E$ si les deux conditions suivantes sont vérifiées :
+\begin{enumerate}
+\item Tout élément de $\symcal{C}$ est non vide.
+\item Tout élément de $E$ appartient à un élément de $\symcal{C}$ et un seul.\label{cond2}
+\end{enumerate}
+
+\begin{remark}On notera que la condition~\ref{cond2} ci-dessus peut s'expliciter en disant que les parties qui constituent $\symcal{C}$ sont deux à deux disjointes (c'est-à-dire d'intersection vide) et que leur réunion est égale à$E$.
+\end{remark}
+
+\subsection{Relation binaire entre deux ensembles}\label{relbin}
+Une \emph{relation binaire} $\symcal{R}$ entre deux ensembles $E$ et $F$ est définie par la donnée d'une partie~$\symcal{G}$ du produit cartésien~$E\times F$ (on a donc $\symcal{G}\in\Pt{E\times F}$). Cette partie, qui est donc un ensemble de couples, est le \emph{graphe} de la relation : par définition, un couple~$(x,y)$ de~$E\times F$ est lié par la relation~$\symcal{R}$ si~$(x,y)\in \symcal{G}$. Donner une relation binaire revient donc à donner son graphe. Si la relation est notée $\symcal{R}$, on écrit $x\mathrel{\symcal{R}}y$ ou $\symcal{R}(x,y)$ pour exprimer que~$x$ et~$y$, dans cet ordre, sont liés par la relation $\symcal{R}$. On a donc pour une relation~$\symcal{R}$ dont le graphe est $\symcal{G}$:
+\[\forall (x,y)\in E\times F, \; x\mathrel{\symcal{R}}y\iff(x,y)\in \symcal{G}.\]
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item L'égalité est une relation binaire qui peut être définie sur tout ensemble $E$. Son graphe est ce que l'on nomme la \emph{diagonale} de $E$, c'est à dire l'ensemble des couples $(x,y)$ de~$E^2$ tels que~$x=y$.
+
+%\item L'ordre strict dans l'ensemble des réels est une relation binaire notée~$<$ (on aurait également pu considérer un ordre large ou l'ordre inverse). Par définition, $x<y$ traduit le fait que $y-x$ est un réel strictement positif :
+%\[\forall (x,y) \in \R^2, \; x<y \iff (y-x)\in \R^{*}_+.\]
+%Le graphe de cette relation peut être représenté par l'ensemble des points du plan repéré dont l'ordonnée est strictement supérieure à l'abscisse, c'est à dire les points situés strictement au dessus de la droite d'équation $y=x$ (première bissectrice du repère).
+%\label{ord-strict}
+%On notera que la \emph{règle des signes}, reposant sur la \emph{partition} de $\R$ en trois ensembles qui sont $\R^*_-$, le singleton $\{0\}$ et $\R^*_+$, préexiste à la définition d'un ordre dans $\R$.
+
+\item Le relation $p$ définie entre $\R$ et $\R_+$ par
+\[\forall (x,y)\in \R\times \R_+,\; p(x,y)\iff y=x^2.\]
+Le graphe de $p$ peut être représenté, dans le demi-plan repéré des points d'ordonnée positive, par la parabole d'équation~$y=x^2$. On notera que cette relation est en réalité une fonction et que la notation $y=p(x)$ aurait été plus habituelle; nous y reviendrons.
+\end{enumerate}
+\end{example}
+
+% Dans le cas d'une
+%relation fonctionnelle (voir \S~\ref{Rfonc} ci-dessous), pour laquelle un seul élément y de $F$ est en relation avec un élément $x$ donné dans $E$, on écrit en général $y=\symcal{R}(x)$.
+%
+
+\section{Relations d'équivalence}
+\subsection{Définition}
+On dit qu'une relation $\symcal{R}$, définie sur $E$ (on se place donc dans le cas où $E=F$) est une relation d'équivalence si elle possède les trois propriétés suivantes :
+\begin{enumerate}
+\item Elle est \emph{réflexive}, c'est-à-dire que tout élément de $E$ est en relation avec lui même :
+\[\forall x \in E,\; x\mathrel{\symcal{R}}x.\]
+\item Elle est \emph{symétrique}:
+\[\forall (x,y)\in E\times E,\; (x\mathrel{\symcal{R}}y \implies y\mathrel{\symcal{R}}x).\]
+\item Elle est \emph{transitive} :
+%\[
+%\forall (x,y,z)\in E^3,\quad \left.\begin{aligned}
+%x&\mathrel{\symcal{R}}y\\
+%&\text{et}\\
+%y&\mathrel{\symcal{R}}z
+%\end{aligned}\right\}
+%\implies x\mathrel{\symcal{R}}z
+%\]
+\[
+\forall (x,y,z)\in E^3,\; \bigl((x\mathrel{\symcal{R}}y\;\text{ et }\;y\mathrel{\symcal{R}}z)\implies x\mathrel{\symcal{R}}z\bigr).
+\]
+\end{enumerate}
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item L'égalité est une relation d'équivalence sur tout ensemble, c'est une conséquence directe de la définition.
+\item Si l'on désigne par $\symfrak{D}$ l'ensemble des droites du plan, le parallélisme est une relation d'équivalence sur $\symfrak{D}$ : c'est immédiat également, on peut noter au passage que la transitivité traduit le fait que \frquote{deux droites parallèles à une même troisième sont parallèles entre elles}.
+\item Pour un ensemble $E$ donné, la relation dont le graphe est $E\times E$ est une relation d'équivalence. Tous les couples d'éléments de $E$ sont donc liés par cette relation.
+\item La relation $\equiv$ définie dans l'ensemble $\Z$ des entiers par
+\[\forall (m,n)\in\Z\times\Z,\; m\equiv n \iff (m-n) \text{ est un entier pair.}\]
+est une relation d'équivalence.
+
+Rappelons qu'un élément $p$ de $\Z$ est un entier pair s'il est divisible par~$2$, c'est-à-dire s'il existe $k$ appartenant à $\Z$ tel que~$p=2k$ et montrons que la relation~$\equiv$ remplit bien les conditions requises :
+\begin{enumerate}
+\item \emph{Réflexivité. — }Soit $m\in\Z$ un entier quelconque : $m-m=0=2\times0$. Donc~$m-m$ est pair. La relation $\equiv$ est réflexive.
+\item \emph{Symétrie. — }Soit $m$ et $n$ deux entiers tels que $m\equiv n$. Alors il existe un entier~$k$ tel que~$m-n=2k$. Il suffit alors d'écrire $n-m=2\times(-k)$ pour constater que $n\equiv m$. La relation~$\equiv$ est symétrique.
+\item\emph{Transitivité. — }Soit $(m,n,p)$ dans $\Z^3$ tels que $m\equiv n$ et $n\equiv p$. Il existe alors deux entiers~$k$ et~$k'$ tels que \mbox{$m-n=2k$} et $n-p=2k'$. Il suffit de remarquer que
+\[m-p=(m-n)+(n-p)=2(k+k'), \text{ où $(k+k')\in\Z$}\]
+pour établir que $m\equiv p$. La relation $\equiv$ est donc transitive.
+\end{enumerate}
+\end{enumerate}
+\end{example}
+%\subsection{Exemples}
+
+\subsection{Classes d'équivalence}
+Soit un ensemble $E$ et une relation d'équivalence $\symcal{R}$ sur$E$. On dit qu'une partie~$A$ de~$E$ est une classe d'équivalence modulo la relation~$\symcal{R}$ s'il existe un élément $x$ de~$E$ tel que~$A$ soit l'ensemble des éléments~$y$ de~$E$ pour lesquels la relation~$x\mathrel{\symcal{R}}y$ est vérifiée. On note alors~$A=\cl_{\symcal{R}} (x)$ ou~$A=\cl (x)$ s'il n'y a pas d'ambiguité.
+\[y\in\cl_{\symcal{R}} (x)\iff x\mathrel{\symcal{R}}y.\]
+
+\begin{thm}
+Soit un ensemble $E$ et une relation d'équivalence $\symcal{R}$ sur $E$. L'ensemble des classes d'équivalence modulo $\symcal{R}$ constitue une partition de $E$.
+\end{thm}
+
+\begin{proof}
+Tout d'abord la réflexivité de la relation $\symcal{R}$ entraîne que pour tout~$x$ appartenant à~$E$,~$x$ appartient à~$\cl(x)$. Par conséquent, tout $x\in E$ appartient à une classe et toute classe est non vide. Il nous reste à prouver que tout élément $x$ de $E$ appartient à une seule classe, c'est à dire que s'il existe un élément $y$ de $E$ tel que $x\in \cl(y)$, alors $\cl(x)=\cl(y)$.
+
+Nous allons procéder par double inclusion.
+\begin{itemize}
+\item Soit donc $y\in E$ tel que $x\in\cl(y)$. On sait que $y\mathrel{\symcal{R}}x$, donc,
+pour tout~$z\in \cl(x)$, on a à la fois $y\mathrel{\symcal{R}}x$ et $x\mathrel{\symcal{R}}z$ : par transitivité on obtient~$y\mathrel{\symcal{R}}z$, soit~$z\in\cl(y)$ :
+\[\forall z\in E, (z\in\cl(x)\implies z\in\cl(y), \text{ donc }\cl (x)\subset\cl (y).\]
+ \item Par symétrie de la relation d'équivalence $\symcal{R}$, on a aussi~$x\mathrel{\symcal{R}}y$. On peut alors refaire le même raisonnement que ci-dessus :
+ pour tout $z$ appartenant à $\cl(y)$ on a à la fois~$x\mathrel{\symcal{R}}y$ et~$y\mathrel{\symcal{R}}z$,
+ donc par transitivité $x\mathrel{\symcal{R}}z$, soit~\mbox{$z\in\cl(x)$} :
+\[\forall z\in E, (z\in\cl(y))\implies z\in\cl(x), \text{ donc }\cl (y)\subset\cl (x).\]
+\item Finalement $\cl(x)=\cl(y)$.\qedhere
+\end{itemize}
+\end{proof}
+
+\begin{remark}
+Réciproquement, toute partition $\symcal{C}$ d'un ensemble $E$ est l'ensemble des classes d'une relation d'équivalence. Il suffit en effet de considérer la relation $\sim$ telle que pour tout~$(x,y)$ dans $E^2$, on ait \textit{$x\sim y$ si $x$ appartient au même élément de $\symcal{C}$ que~$y$}, laquelle répond à la question.
+\end{remark}
+%\end{document}
+%\subsubsection{Notion de structure quotient}
+
+\section{Relations d'ordre}
+\subsection{Définition}
+On dit qu'une relation $\preccurlyeq$, définie sur $E$ (on se place donc ici encore dans le cas où~$E=F$) est une relation d'ordre si elle possède les trois propriétés suivantes :
+\begin{enumerate}
+\item Elle est \emph{réflexive}, c'est-à-dire que tout élément de $E$ est en relation avec lui même :
+\[\forall x \in E,\; x\preccurlyeq x.\]
+\item Elle est \emph{antisymétrique}:
+\[\forall (x,y)\in E\times E,\; \bigl((x\preccurlyeq y)\text{ et }(y\preccurlyeq x)\implies x=y\bigr).\]
+\item Elle est \emph{transitive} :
+%\[
+%\forall (x,y,z)\in E^3,\quad \left.\begin{aligned}
+%x&\mathrel{\symcal{R}}y\\
+%&\text{et}\\
+%y&\mathrel{\symcal{R}}z
+%\end{aligned}\right\}
+%\implies x\mathrel{\symcal{R}}z
+%\]
+\[
+\forall (x,y,z)\in E^3,\; \bigl((x\preccurlyeq y\;\text{ et }\;y\preccurlyeq z)\implies x\preccurlyeq z\bigr).
+\]
+\end{enumerate}
+
+\begin{remark}
+La démonstration du résultat suivant est immédiate.
+
+Une relation d'ordre $\preccurlyeq$ sur un ensemble $E$ étant donnée, la relation~$\succcurlyeq$, définie par
+\[\forall (x,y) \in E^2, x\succcurlyeq y \iff y\preccurlyeq x\,,\]
+est une relation d'ordre sur $\R$ nommée \emph{ordre inverse} de $\preccurlyeq$.
+\end{remark}
+
+%\begin{exemple}[Exemples]
+%\begin{enumerate}
+%\item La relation d'ordre strict sur l'ensemble $\R$ des réels, telle que nous l'avons rencontrée dans l'exemple~\ref{ord-strict} du paragraphe~\ref{relbin} n'est pas une relation d'ordre, car elle n'est pas réflexive. En revanche l'ordre large correspondant, défini par
+%\[\forall (x,y) \in \R^2, \; x\leq y \iff (y-x)\in \R_+\,,\]
+%est bien une relation d'ordre. En effet :
+%\begin{itemize}
+%\item Pour tout $x$ réel, $x-x=0$ et $0\in \R_+$, ce qui assure que la relation~$\leq$ est \emph{réflexive}.
+%\item Pour tout couple de réels $(x,y)$, si $x\leq y$ et $y\leq x$ alors $x=y$. En effet, en effet, $y\leq x$ signifie que $(x-y)\in \R_+$. Le réel $(y-x)$ se retrouve donc appartenir à la fois à $\R_+$ (car $x\leq y$) et à $\R_-$ (en tant qu'opposé de $(x-y)$) ; on en déduit que $y-x=0$ donc que $x=y$. La relation~$\leq$ est donc \emph{antisymétrique}.
+%\item Soit $(x,y,z)\in\R^3$, on a $z-x=(z-y)+(y-x)$. On en déduit que si $x\leq y$ et $y\leq z$, $z-x$ est élément de $\R_+$ et tant que somme de deux éléments de $\R_+$, ce qui revient à dire que $x\leq z$. Le relation~$\leq$ est donc \emph{transitive}.
+%\end{itemize}
+%\end{enumerate}
+%\end{exemple}
+
+\subsection{Ordre dans les ensembles de nombres}
+Les relations usuelles $<$ et $>$, définies sur les ensembles de nombres, \emph{ne sont pas} des relations d'ordre, il est facile de l'établir : ces relations \emph{ne sont pas} réflexives. Il est en revanche plus délicat de démontrer que les relations~$\leq$ et~$\geq$ sont des relations d'ordre, et même de tout simplement définir ces relations.
+ On pourrait songer à définir l'ordre dans $\R$ en disant que~$x\leq y$ si $(y-x)\in \R_{+}$… Mais alors il resterait à définir $\R_{+}$ sans utiliser l'ordre, ce qui ne semble nullement évident. C'est pour cette raison que nous nous contenterons d'affirmer que la relation $\leq$, telle que chacun la connaît, est bien une relation d'ordre sur $\R$ (ainsi d'ailleurs que sur $\N$, $\Z$, $\symbb{D}$ et $\Q$).
+
+%
+\subsection{Un peu de vocabulaire}
+On se donne dans ce paragraphe un ensemble $\symcal{E}$ sur lequel est définie une relation d'ordre~$\preccurlyeq$.
+\subsubsection{Ordre total}
+ On dit que la relation $\preccurlyeq$ définit un ordre total sur $\symcal{E}$ si pour tout couple~$(x,y)$ d'éléments de~$\symcal{E}$, la proposition
+ \XSmartphoneCommand{$\bigl((x\preccurlyeq y)\text{ ou }(y\preccurlyeq x)\bigr)$}
+ \SmartphoneCommand{%
+ \[
+ \bigl((x\preccurlyeq y)\text{ ou }(y\preccurlyeq x)\bigr)
+ \]%
+ }
+ est vraie.
+
+\subsubsection{Majorants, minorants \& C\up{ie}}
+Soit maintenant $\symcal{A}$ une partie de $\symcal{E}$.
+
+\begin{itemize}
+\item On dit qu'un élément $M$ de $\symcal{E}$ est un majorant de $\symcal{A}$, si $\forall x\in \symcal{A},\, x\preccurlyeq M$.
+\item On dit qu'un élément $m$ de $\symcal{E}$ est un minorant de $\symcal{A}$, si $\forall x\in \symcal{A},\, m\preccurlyeq x$.
+\item On dit que $\symcal{A}$ admet $A$ pour plus grand élément si $A\in \symcal{A}$ et si $A$ est un majorant de $\symcal{A}$.
+\item On dit que $\symcal{A}$ admet $a$ pour plus petit élément si $a\in \symcal{A}$ et si $a$ est un minorant de~$\symcal{A}$.
+\end{itemize}
+
+
+
+\begin{remark}
+Dans un ensemble muni d'une relation d'ordre, l'existence d'un majorant, d'un minorant, d'un plus petit ou d'un plus grand élément n'est nullement assurée. On a en revanche le résutat suivant.
+\end{remark}
+
+\begin{thm}
+Soit un ensemble $\symcal{E}$ sur lequel est définie une relation d'ordre $\preccurlyeq$ et soit $\symcal{A}$ une partie de~$\symcal{E}$. Si~$\symcal{A}$ admet une plus grand élément (respectivement un plus petit élément) pour la relation $\preccurlyeq$, ce plus grand élément (respectivement ce plus petit élément) est unique.
+\end{thm}
+\begin{proof}
+Nous proposons la démonstration dans le cas du plus petit élément, celle de l'autre cas est identique. Supposons que~$a$ et~$a'$ soient des plus petits éléments de $\symcal{A}$. D'après la définition d'un plus petit élément, on sait que pour tout~$x$ de~$\symcal{A}$, $a\preccurlyeq x$ et en particulier~\mbox{$a\preccurlyeq a'$}. Et de la même façon, on sait que pour tout $x$ de $\symcal{A}$, $a'\preccurlyeq x$ et en particulier~\mbox{$a'\preccurlyeq a$}. L'antisymétrie de la relation $\preccurlyeq$ nous assure alors que $a=a'$, d'où l'unicité du plus petit élément.
+\end{proof}
+
+Supposons maintenant que $\symcal{A}$ admette $A$ pour plus grand élément et soit $\symcal{M}$ l'ensemble de tous les majorants de $\symcal{A}$. Il va de soi que $\symcal{A}\cap\symcal{M}=\{A\}$. L'élément $A$ apparaît ainsi également comme le plus petit élément de $\symcal{M}$. De la même façon, si $\symcal{A}$ admet un plus petit élément, ce dernier est le plus grand des minorants de $\symcal{A}$.
+
+\begin{alert}
+Dans le cas où $\symcal{A}$ ne possède pas de plus grand élément, il n'est nullement assuré que~$\symcal{M}$ possède un plus petit élément, ni même d'ailleurs que $\symcal{M}$ soit non vide. Néanmoins il est possible que $\symcal{M}$ possède un plus petit élément, et ceci que $\symcal{A}$ possède ou non un plus grand élément. Ce plus petit élément de $\symcal{M}$ est alors par définition la \emph{borne supérieure} de~$\symcal{A}$ dans l'ensemble $\symcal{E}$ ordonné par $\preccurlyeq$.
+\end{alert}
+
+ \section{Applications, fonctions}\label{Rfonc}
+%%%Fonction caractéristique, cardinal de $\symcal{P}(E)$ ou $\symfrak{P}(E)$
+\subsection{Définition}
+On dit qu'une relation binaire $f$ entre deux ensembles $E$ et~$F$ est fonctionnelle ou qu'elle est une \emph{fonction} définie sur~$E$ et à valeurs dans $F$ ou encore une \emph{application} de~$E$ dans $F$ si tout élément $x$ de $E$ est en relation avec un élément~$y$ de~$F$ et un seul. Cet élément $y$ est appelé \emph{image} de~$x$ par~$f$ et noté $f(x)$ (autrement dit on écrit plus volontiers~$y=f(x)$ que~$x \mathrel{f}y$). L'ensemble $E$ est l'ensemble de départ de la fonction et l'ensemble $F$ son ensemble d'arrivée.
+
+Une application est donc déterminée par la donnée de son ensemble de départ, de son ensemble d'arrivée et d'un procédé décrivant une correspondance fonctionnelle entre ces deux ensembles. On note souvent :
+
+\begin{align*}&f\::\;E\to F\;,\quad x\longmapsto f(x)\,.\\
+\intertext{Par exemple :}
+&f\::\;\left]-1,1\right[\to\R\;,\quad x \longmapsto \frac{1}{x^2-1}\;,\\
+\intertext{ou}
+&g\::\;\Z\to\{0,1\}\;,\quad p\longmapsto
+\begin{cases} 0&\text{ si $p$ est pair,}\\
+1&\text{ sinon.}
+\end{cases}
+\end{align*}
+
+Il n'y a pas de distinction entre fonction et application, mais le contexte peut introduire certaines nuances. En effet, lorsque $E$ est une partie de l'ensemble $\R$ des nombres réels, $f(x)$ est souvent donné par une expression, sa valeur étant le résultat d'un calcul. On emploie alors plus volontiers le vocable \emph{fonction} et dans ce cas l'ensemble de départ peut ne pas être précisé et correspond alors à l'ensemble des valeurs de $x$ pour lesquelles le calcul de $f(x)$ est possible. On parle alors plutôt d'ensemble de définition que d'ensemble de départ.
+
+\begin{example}[Exemples]
+\begin{enumerate}
+\item Soit la fonction $f$ de la variable réelle $x$, telle que
+\[f(x)=\frac{x}{x^2-4}\;.
+\]
+Déterminons l'ensemble de définition $\symcal{D}_f$ de la fonction $f$. On a
+\begin{align*}
+x\in \symcal{D}_f &\iff x^2-4\neq 0\\
+&\iff x\neq -2 \text{ et } x\neq 2.
+\end{align*}
+
+Donc $\symcal{D}_f= \R\smallsetminus\{-2,2\}$.
+\item Soit la fonction $g$ telle que $g(x)=\sqrt{1-x^2}$. Déterminons l'ensemble de définition de $g$. On a
+\[
+x\in \symcal{D}_g \iff 1-x^2\geq 0.
+\]
+
+Il nous faut donc résoudre l'inéquation $1-x^2\geq0$. Le polynôme $1-x^2$ admet les nombres~$-1$ et~$1$ pour racines et le coefficient de $x^2$ est négatif :~\mbox{$1-x^2$} est donc positif dans l'intervalle des racines (on pourra consulter le volet consacré aux polynômes du second degré).
+
+Donc $\symcal{D}_g= \left[-1,1\right]$.
+\end{enumerate}
+\end{example}
+
+\subsection{Antécédents, surjections, injections \& bijections}
+\subsubsection{Notion d'antécédent}
+Soit une application $f$ de $E$ dans $F$ et soit~$b$ élément de~$F$. On dit qu'un élément~$a$ de~$E$ est un \emph{antécédent} de $b$ si $f(a)=b$, autrement dit si~$b$ est l'image de~$a$ par $f$.
+Alors que la définition d'une fonction entraîne que l'image d'un quelconque élément de $E$ existe et est unique, dans le cas d'une recherche d'antécédent, rien de ce genre n'est assuré.
+
+Considérons par exemple la fonction \emph{carré} définie par
+\[f\::\;\R\to\R\;,\quad x\longmapsto f(x)=x^2 \]
+et recherchons les antécédents par $f$ d'un élément~$y$ de~$\R$, c.-à-d. les solutions de l'équation d'inconnue~$x$ :~\mbox{$x^2=y$}.
+\begin{itemize}
+\item \textit{Si $y>0$} : $y$ admet deux antécédents qui sont $\sqrt{y}$ et $-\sqrt{y}$.
+\item \textit{Si $y=0$} : le seul antécédent de $0$ est $0$.
+\item \textit{Si $y<0$} : $y$ ne possède aucun antécédent.
+\end{itemize}
+\begin{remark}
+Il faut remarquer ici que la connaissance précise des ensembles de départ et d'arrivée est indispensable à la recherche des antécédents. Considérons la fonction
+\[g\::\;\R_+\to\R_+\;,\quad x\longmapsto g(x)=x^2. \]
+Les expressions de $g(x)$ et de $f(x)$ sont parfaitement identiques, mais, contrairement à ce que nous venons d'étudier pour la fonction $f$, dans le cas de la fonction $g$ tout élément~$y$ de l'ensemble d'arrivée possède un antécédent unique qui est $\sqrt{y}$.
+\end{remark}
+\subsubsection{Surjections, injections et bijections}
+\begin{remark}[Surjections]
+On dit qu'une application $f$ de $E$ dans $F$ est \emph{surjective} (ou encore que~$f$ est une \emph{surjection}) si tout élément de $F$ possède au moins un antécédent dans~$E$.
+\end{remark}
+\begin{remark}[Injections]
+On dit qu'une application $f$ de $E$ dans $F$ est \emph{injective} (ou encore que $f$ est une \emph{injection}) ou encore si deux éléments distincts quelconques de $E$, ont des images distinctes. De façon plus formelle,~\mbox{$f\::\;E\to F$} est injective si
+\begin{gather}\forall(x,y)\in E\times E, \;\bigl(x\neq y\implies f(x)\neq f(y)\bigr).\label{condinj1}\\
+\intertext{Ou, par contraposition, $f\::\;E\to F$ est injective si}
+\forall(x,y)\in E\times E, \;\bigl(f(x)= f(y)\implies x=y\bigr).\label{condinj2}
+\end{gather}
+
+On peut dire également que $f$ est injective si et seulement si tout élément de $F$ possède au plus un antécédent dans~$E$.
+\end{remark}
+
+\begin{remark}[Bijections]
+On dit qu'une application $f$ de $E$ dans $F$ est \emph{bijective} (ou encore que $f$ est une \emph{bijection}) si tout élément de $F$ possède un antécédent dans $E$ et un seul, autrement dit si $f$ est à la fois surjective et injective.
+
+Si l'application $f\::\;E\to F$ est bijective, l'application qui à tout élément de $F$ associe son unique antécédent dans $E$ est évidemment bijective : c'est la \emph{bijection réciproque} de~$f$, notée~$f^{-1}$.
+\end{remark}
+\begin{example}[Exemples]
+\begin{enumerate}
+\item \label{phi} Soit l'application
+\[
+\phi\::\;\R\smallsetminus\{1\}\to\R\,,\quad x\longmapsto \frac{2x}{x-1}\;.
+\]
+
+Donnons-nous un réel $y$ quelconque et recherchons ses antécédents, qui sont les solutions dans $\R\smallsetminus\{1\}$ de l'équation $\phi(x)=y$, que nous résolvons ici :
+\begin{align*}
+\frac{2x}{x-1}=y &\iff 2x=y(x-1)\text{ et } x\neq 1\,,\\
+&\iff x(2-y)=-y\text{ et } x\neq 1\,,\\
+&\iff x(y-2)=y\text{ et } x\neq 1\,.
+\end{align*}
+\begin{itemize}
+\item\textit{Si $y=2$}, l'équation est équivalente à $0=2$ et n'a donc pas de solution. Le réel $2$ n'a pas d'antécédent par $\phi$.
+\item\textit{Si $y\neq 2$}, l'équation admet \[x=\frac{y}{y-2}\] pour unique solution (il est clair en effet que $y/(y-2)$ ne peut être égal à $1$).
+\end{itemize}
+
+
+En résumé, le réel $2$ ne possède aucun antécédent et les réels différents de $2$ possèdent un antécédent et un seul. L'application $\phi$ est donc injective, mais n'est pas surjective.
+\item Soit maintenant l'application
+\[
+\psi\::\;\R\smallsetminus\{1\}\to\R\smallsetminus\{2\}\,,\quad x\longmapsto \frac{2x}{x-1}\;.
+\]
+
+On notera que les applications $\phi$ et $\psi$ ne diffèrent que par leur ensemble d'arrivée. Cependant, l'étude faite ci-dessus en \ref{phi} prouve que $\psi$ est bijective et que sa bijection réciproque est
+\[
+\psi^{-1}\::\;\R\smallsetminus\{2\}\to\R\smallsetminus\{1\}\,,\quad x\longmapsto \frac{x}{x-2}\;.
+\]
+\item L'application $\theta$ définie par
+\[
+\theta\::\;\R\to\R\,,\quad x\longmapsto x^2-1
+\]
+n'est ni injective ni surjective. En effet $\theta(x)$ est nul si et seulement si $x^2=1$, c.-à-d si et seulement si $x=-1$ ou $x=1$ : le réel $0$ possède donc deux antécedents pour $\theta$. Par ailleurs, pour tout réel~$x$,~$x^2\geq0$, donc $\theta(x)\geq-1$ : le réel $-2$, par exemple, ne possède aucun antécédent par $\theta$.
+\end{enumerate}
+\end{example}
+\subsection{Composée de deux applications}
+
+Soit deux applications $f\::\;E\to F$ et $g\::\;F\to G$, on appelle \emph{application composée de~$f$ par~$g$} et on note $g\rond f$ l'application de $E$ dans $G$ définie par :
+\[g\rond f\::\; E\to G\,,\quad x\longmapsto g\rond f(x) = g\bigl(f(x)\bigr).\]
+
+Notons qu'il est important pour définir $g\rond f$ que l'ensemble d'arrivée de $f$ coïncide avec l'ensemble de départ de~$g$.
+
+\begin{example}
+Soit
+\[
+f\::\;\R^*\to\R\,,\; x\mapsto \frac1x\;\text{ et }\;g\::\:\R\to\R\,,\; x\mapsto x^2+1\,.
+\]
+Déterminons $g\rond f$ qui est une application de $\R^*$ dans $\R$.
+
+On a pour tout $x\in\R^*$,
+\begin{align*}
+g\rond f(x) &= g\bigl(f(x)\bigr),\\
+&={\bigl(f(x)\bigr)}^2+1,\\
+&={\left(\frac1x\right)}^2+1,\\
+\intertext{ou, en réduisant au même dénominateur,}
+g\rond f(x)&= \frac{1+x^2}{x^2}\;.
+\end{align*}
+\begin{remark}
+On notera que la même lettre $x$ intervient dans les définitions de~$f$ et~$g$. Il s'agit bien sûr d'une lettre muette, qui pourrait dans chaque cas être remplacée par n'importe quelle autre lettre (en évitant tout de même les lettres $f$ et $g$!).
+\end{remark}
+\end{example}
+
+\begin{thm}Soit deux applications $f\::\;E\to F$ et $g\::\;F\to G$. Si $f$ et $g$ sont des bijections, alors l'application composée $g\rond f$ est une bijection dont la bijection réciproque est $f^{-1}\rond g^{-1}$.
+\end{thm}
+
+\begin{proof}
+Soit deux bijections $f\::\;E\to F$ et $g\::\;F\to G$. % et un élément $a$ de $E$.
+%Si $a$ est un antécédent de $b$ par $g\rond f$, on a $g\rond f(a)=c$, soit $g\bigl(f(a)\bigr)=c$.
+\begin{enumerate}
+\item\label{gofsurj} Donnons nous un élément $c$ quelconque de $G$. Les applications~$g$ et~$f$ étant surjectives, $c$ possède un antécédent~$b$ par $g$ et $b$ possède lui-même un antécédent $a$ par $f$. On a alors
+\[g\rond f(a) =g\bigl(f(a)\bigr)=g(b)=c.\]
+L'élément $c$ admet $a$ pour antécédent par $g\rond f$ qui est donc est donc application surjective.
+\item Supposons maintenant qu'il existe un élément $c$ de $G$ et $a$ et $a'$ éléments de $E$ tels que~$g\rond f(a)=g\rond f(a')$. Alors $g\bigl(f(a)\bigr)=g\bigl(f(a')\bigr)$ et puisque $g$ est injective on a, d'après la proposition \eqref{condinj2} p.~\pageref{condinj2}, $f(a) = f(a')$; l'application $f$ étant elle-même injective, on obtient finalement~$a=a'$. On a donc prouvé que
+\[\forall(a,a')\in E\times E, \;\bigl(g\rond f(a)= g\rond f(a')\implies a=a'\bigr),\]
+autrement dit que $g\rond f$ est injective.
+\item L'application $g\rond f$ est donc surjective et injective : elle est bijective. On remarque alors en employant les notations du point \ref{gofsurj} ci-dessus \mbox{que $a=f^{-1}(b)$} et $b=g^{-1}(c)$, \mbox{d'où $a=f^{-1}\bigl(g^{-1}(c)\bigr)$}, ce qui achève la démonstration en prouvant que
+\[{\bigl(g\rond f\bigr)}^{-1}=f^{-1}\rond g^{-1}.\qedhere\]
+\end{enumerate}
+\end{proof}
+
+\begin{remark}
+La réciproque de ce théorème est fausse. Considérons par exemple les applications suivantes :
+\[
+f\::\;\R_+\to\R\,,\; x\mapsto \sqrt{x}\;\text{ et }\;g\::\;\R\to\R_+\,,\; x\mapsto x^2.
+\]
+Pour tout réel $x$ positif, on a $g\bigl(f(x)\bigr)=\bigl(\sqrt{x}\bigr)^2=x$, par définition de la racine carrée. Par conséquent, on a
+\[g\rond f \::\;\R_+\to\R_+\,,\quad x\longmapsto x,\]
+qui est à l'évidence une bijection. Cependant, $f$ n'est pas surjective (les nombres strictement négatifs n'ont pas d'antécédent) et $g$ n'est pas injective (deux nombres opposés non nuls ont la même image).
+\end{remark}
+
+On a néanmoins le théorème suivant:
+\begin{thm}
+Soit deux applications $f\::\;E\to F$ et $g\::\;F\to G$. Si $g\rond f$ est injective, $f$ est injective. Si $g\rond f$ est surjective, $g$ est surjective.
+\end{thm}
+
+\begin{proof}
+\begin{itemize}
+\item Supposons $g\rond f$ injective et soit $x$ et $y$ éléments de $E$ tels que~\mbox{$f(x)=f(y)$}. Montrons que nécessairement $x=y$, ce qui établira que~$f$ est injective.
+
+Puisque $f(x)=f(y)$, $g\bigl(f(x)\bigr)=g\bigl(f(y)\bigr)$, soit $g\rond f(x)=g\rond f(y)$ : on en déduit que~$x=y$, car $g\rond f$ est injective par hypothèse. Par conséquent~$f$ est injective.
+\item Supposons $g\rond f$ surjective et soit $z$ un élément de $G$. L'application~$g\rond f$ étant surjective, il existe un élément $x$ de $E$ tel que $g\rond f(x)=z$, soit~$g\bigl(f(x)\bigr)=z$. L'élément~$z$ admet donc $f(x)$ pour antécédent par $g$, ce qui prouve que~$g$ est surjective. \qedhere
+\end{itemize}
+\end{proof}
+\endinput \ No newline at end of file
diff --git a/macros/luatex/latex/tango/examples/schoolwork.tex b/macros/luatex/latex/tango/examples/schoolwork.tex
new file mode 100644
index 0000000000..9ea9f9a2f0
--- /dev/null
+++ b/macros/luatex/latex/tango/examples/schoolwork.tex
@@ -0,0 +1,238 @@
+% !TEX TS-program = LuaLaTeX
+\documentclass[french,no-indent,FontSize=11pt]{tango}
+\usepackage{numprint}
+%
+\NewCommandCopy{\np}{\numprint}
+%
+\newcommand\headcontentL{}
+\newcommand\headcontentC{}
+\newcommand\headcontentR{}
+\newcommand\footcontentL{}
+\newcommand\footcontentC{}
+\newcommand\footcontentR{}
+\newlength\SWruleheight
+\setlength\SWruleheight{0.4pt}
+\NewDocumentCommand\headL{m}{\renewcommand\headcontentL%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+\NewDocumentCommand\headC{m}{\renewcommand\headcontentC%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+\NewDocumentCommand\headR{m}{\renewcommand\headcontentR%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+\NewDocumentCommand\footL{m}{\renewcommand\footcontentL%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+\NewDocumentCommand\footC{m}{\renewcommand\footcontentC%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+%
+\NewDocumentCommand\footR{m}{\renewcommand\footcontentR%
+{\sffamily\fontseries{l}\selectfont#1}}
+%
+\newpagestyle{schoolwork}{%
+\setheadrule{\SWruleheight}%
+\setfootrule{\SWruleheight}%
+\sethead{\headcontentL}%
+{\headcontentC}%
+{\headcontentR}%
+\setfoot{\footcontentL}%
+{\footcontentC}%
+{\footcontentR}
+}
+
+
+\headL{Le 13 novembre 2024}
+\headC{Entraînement au Devoir Commun \no 1}
+\headR{Durée : 2 heures}
+\footL{Lycée Jean-Baptiste \textsc{Colbert}}
+\footC{Classe de 1\iere~3}
+\footR{page~\thepage}
+%
+%
+\pagestyle{schoolwork}
+\geometry{top=2cm,outer=2cm,bottom=2cm,inner=2cm,headheight=18pt,headsep=25pt,footskip=34pt}
+
+\begin{document}
+
+
+\exo[Thème : suites — 4 points]
+
+
+On considère la suite $\left(u_n\right)$ définie par $u_0 = \numprint{10000}$ et pour tout entier naturel $n$
+\[u_{n+1} = 0{,}95u_n + 200.\]
+
+\begin{enumerate}
+\item Calculer $u_1$ et vérifier que $u_2 = \np{9415}$.
+\item
+ \begin{enumerate}
+ \item Démontrer, à l'aide d'un raisonnement par récurrence, que pour tout entier naturel $n$
+\[u_n >\np{4000}.\]
+\item Démontrer que la suite $\left(u_n\right)$ est décroissante. \end{enumerate}
+\item Pour tout entier naturel $n$, on considère la suite $\left(v_n\right)$ définie par $v_n = u_n - \np{4000}$.
+ \begin{enumerate}
+ \item Calculer $v_0$.
+ \item Démontrer que la suite $\left(v_n\right)$ est géométrique de raison égale à $0{,}95$.
+ \item En déduire que pour tout entier naturel $n$ :
+\[u_n = \np{4000} + \np{6000} \times 0{,}95^n.\]
+ \item Émettre une conjecture quant à la limite de la suite $\left(u_n\right)$ ?
+ \end{enumerate}
+\item En 2020, une espèce animale comptait \np{10000} individus. L'évolution observée les années précédentes conduit à estimer qu'à partir de l'année 2021, cette population baissera de 5~\% chaque début d'année.
+
+Pour ralentir cette baisse, il a été décidé de réintroduire $200$ individus à la fin de chaque année, à partir de 2021.
+
+Une responsable d'une association soutenant cette stratégie affirme que : \og l'espèce ne devrait pas s'éteindre, mais malheureusement, nous n'empêcherons pas une disparition de plus de la moitié de la population \fg.
+
+Que pensez-vous de cette affirmation ? Justifier la réponse.
+\end{enumerate}
+
+
+
+\exo[Thème : probablités — 4 points]
+
+Selon les autorités sanitaires d'un pays, 7~\% des habitants sont affectés par une certaine maladie.
+
+Dans ce pays, un test est mis au point pour détecter cette maladie. Ce test a les caractéristiques suivantes :
+\begin{itemize}
+\item Pour les individus malades, le test donne un résultat négatif dans $20 \,\%$ des cas ;
+\item Pour les individus sains, le test donne un résultat positif dans $1\,\%$ des cas.
+\end{itemize}
+
+Une personne est choisie au hasard dans la population et testée.
+
+On considère les événements suivants :
+\begin{itemize}
+\item $M$ : \og la personne est malade \fg{} ;
+\item $T$ : \og le test est positif \fg{}.
+\end{itemize}
+
+\begin{enumerate}
+\item Calculer la probabilité de l'événement $M \cap T$. On pourra s'appuyer sur un arbre pondéré.
+\item Démontrer que la probabilité que le test de la personne choisie au hasard soit positif, est de $\np{0,0653}$.
+\item On considère dans cette question que la personne choisie au hasard a eu un test positif.
+Quelle est la probabilité qu'elle soit malade ? On arrondira le résultat à $10^{-2}$.
+\item On choisit des personnes au hasard dans la population. La taille de la population de ce pays permet d'assimiler ce prélèvement à un tirage avec remise.
+
+On note $X$ la variable aléatoire qui donne le nombre d'individus ayant un test positif parmi les 10 personnes.
+ \begin{enumerate}
+ \item Préciser la nature et les paramètres de la loi de probabilité suivie par $X$.
+ \item Déterminer la probabilité pour qu'exactement deux personnes aient un test positif. On arrondira le résultat à $10^{-2}$ près.
+ \end{enumerate}
+\end{enumerate}
+
+\exo[Thème : géométrie dans l'espace — 2 points]
+
+
+
+Dans l'espace rapporté à un repère orthonormé $(O,\vec\imath,\vec\jmath,\vec k)$ , on considère les points
+\[A(-1,-1,3),\qquad B(1,1,2),\qquad C(1,-1,7).\]
+
+On considère également la droite $\Delta$ passant par les points $D(-1,6,8)$ et $E(11,- 9,2)$.
+
+Pour chacune des questions posées, quatre affirmations \textbf{dont une seule est correcte} sont proposées.
+Entourer la bonne réponse directement sur l'énoncé.
+
+Aucune justification n'est attendue.
+
+Une réponse correcte apporte 0,5 point. Une réponse incorrecte ou une absence de réponse n'enlève pas de point.
+
+
+ \begin{enumerate}
+ \item Une représentation paramétrique de la droite $\Delta$ est
+\medskip
+
+\textbf{a.} $\left\{
+ \begin{aligned}
+ x&= -1 + 11t\\
+ y&= 6 - 9t\\
+ z&= 8 +2t\\
+ \end{aligned} \right.~(t \in \symbb{R})$
+ \hfill
+\textbf{b.} $\left\{
+ \begin{aligned}
+ x&= -1 + 4t\\
+ y&= 6 - 5t\\
+ z&= 8 -2t\\
+ \end{aligned} \right.~(t \in \symbb{R})$
+ \hfill
+\textbf{c.} $\left\{
+ \begin{aligned}
+ x&= 11 -t\\
+ y&= - 9+6t\\
+ z&= 2 +8t\\
+ \end{aligned} \right.~(t \in \symbb{R})$
+ \hfill
+ \textbf{d.}
+ $\left\{
+ \begin{aligned}
+ x&= 4 -t\\
+ y&= -5 +6t\\
+ z&= -2 + 8 t\\
+ \end{aligned} \right.~(t \in \symbb{R})$\hfill\null
+
+\bigskip
+
+ \item Lequel de ces points appartient-il à la droite $\Delta$ ?
+
+\medskip
+
+ \textbf{a.} Le point $F(-3,1,6)$
+ \hfill \textbf{b.} Le point $G (5,\:-1{,}5,\:5)$
+ \hfill \textbf{c.} Le point $H (10,-3,10)$
+ \hfill \textbf{d.} Le point $K (12,-15,-6)$
+
+\bigskip
+
+ \item Pour savoir si les points $A$, $B$ et $C$ définissent un plan, il faut vérifier que $\overrightarrow{AB}$ et $\overrightarrow{AC}$ :
+
+\medskip
+
+ \textbf{a.} sont colinéaires.
+ \hfill \textbf{b.} sont coplanaires.
+ \hfill \textbf{c.} ne sont pas colinéaires.
+ \hfill \textbf{d.} ne sont pas coplanaires.
+
+\bigskip
+
+ \item La droite $\Delta$ et le plan (ABC) :
+
+\medskip
+
+ \begin{tabular}{ll}
+ \textbf{a.} sont strictement parallèles.
+ &\textbf{b.} ont une infinité de points communs.\\[12pt]
+ \textbf{c.} sont sécants en $I(-13,21,14)$
+ &\textbf{d.} sont sécants en $J(3,1,6)$
+ \end{tabular}
+
+ \bigskip
+
+\item Les droites $\delta$ et $\delta'$ de représentations paramétriques respectives :
+
+ $ \delta : \left\{
+ \begin{aligned}
+ x&= -1 + 11k\\
+ y&= 6 - 9k\\
+ z&= 8 +2k\\
+ \end{aligned} \right.~(k \in \symbb{R})$
+ \quad et\quad $\delta' : \left\{
+ \begin{aligned}
+ x&= 11 -\ell\\
+ y&= - 9+6\ell\\
+ z&= 2 +8\ell\\
+ \end{aligned} \right.~(\ell \in \symbb{R})$\quad sont :
+
+ \medskip
+
+ \begin{tabular}{ll}
+ \textbf{a.} sécantes au point de coordonnées $(1,1,1)$.
+ & \textbf{b.} sécantes au point de coordonnées $(-12,15,6)$.\\[12pt]
+ \textbf{c.} sécantes en un autre point
+ &\textbf{d.} non sécantes.
+ \end{tabular}
+
+
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/macros/luatex/latex/tango/lualatex/tango.cls b/macros/luatex/latex/tango/lualatex/tango.cls
new file mode 100644
index 0000000000..f188200b4c
--- /dev/null
+++ b/macros/luatex/latex/tango/lualatex/tango.cls
@@ -0,0 +1,2182 @@
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesClass{tango}%
+[2024/07/15 v0.8.0 tango document class. Michel Bovani]% %
+%
+% Ensure luatex engine
+\RequirePackage{iftex}[2019/10/24]
+\RequireLuaTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand\TgoTempa{}
+\newcommand\TgoTempb{}
+\newcommand\TgoTempc{}
+\newcommand\TgoSmallerSize{}
+\newcommand\TgoStatementNumberSuffix{}
+\newcommand\TgoStatementNumberPrefix{}
+\newcommand\TgoStatementSuffix{}
+\newcommand\TgoStatementName{}
+\newcommand\TgoTheoremName{Theorem}
+\newcommand\TgoDefinitionName{Definition}
+\newcommand\TgoPropositionName{Proposition}
+\newcommand\TgoLemmaName{Lemma}
+\newcommand\TgoCorollaryName{Corollary}
+\newcommand\TgoRemarkName{Remark}
+\newcommand\TgoExampleName{Example}
+\newcommand\TgoContentsName{Contents}
+\newcommand\TgoExerciseName{Exercise}
+\newcommand\TgoExercisesSubsectionName{Exercises}
+\newcommand\TgoExercisesSectionName{Exercises}
+\newcommand\TgoPublicationClass{article}
+\newcommand\TgoStatementIndent{\indent}
+\newif\ifTgoFrenchLanguage
+\newif\ifTgoNGermanLanguage
+\newif\ifTgoGermanLanguage
+\newif\ifTgoNAustrianLanguage
+\newif\ifTgoNSwissGermanLanguage
+\newif\ifTgoItalianLanguage
+\newif\ifTgoSpanishLanguage
+\newif\ifTgoEnglishLanguage
+\newif\ifTgoBritishLanguage
+\newif\ifTgoAmericanLanguage
+\newif\ifTgoCanadianLanguage
+\newif\ifTgoAustralianLanguage
+\newif\ifTgoNewZealandLanguage
+\newif\ifTgoNoStatement
+\newif\ifTgoBook
+\newif\ifTgoOneSide\TgoOneSidetrue
+\newif\ifTgoAfourPaperOutput\TgoAfourPaperOutputtrue
+\newif\ifTgoLetterOutput
+\newif\ifTgoBigTabletOutput
+\newif\ifTgoAfivePaperOutput
+\newif\ifTgoTabletOutput
+\newif\ifTgoSmallTabletOutput
+\newif\ifTgoeReaderOutput
+\newif\ifTgoSmartphoneOutput
+\newif\ifTgoSmallerSizeCommand
+\newif\ifTgoTitleIndentZero\TgoTitleIndentZerotrue
+\newcommand\TgoChapterTitleFont{RobotoCondensedBold}
+\NewDocumentCommand\TgoStatementNameOffset{}{}
+\NewDocumentCommand\SetTgoBaseFonts{}{%
+ \setmainfont{erewhon}%
+ \setmathfont{Erewhon Math}%
+ }%
+ \newlength\TgoAfterChapterSkip
+ \newlength\TgoStandardMargin
+ \newlength\TgoStatementParindent
+ \newlength\TgoTitleIndent
+ %%%
+\AddToHook{package/xcolor/after}
+{%
+\definecolor{ColorOne}{rgb}{0.15,0.15,0.15}
+\definecolor{ColorTwo}{rgb}{0.93,0.93,0.93}
+}
+\AddToHook{class/article/after}{%
+\TgoTenPointsFonts}
+\AddToHook{class/book/after}{%
+\TgoTenPointsFonts}
+%%
+%
+ %%
+ \DeclareKeys[tango]{
+ %%%%%% languages,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ french.code= {%
+ \TgoFrenchLanguagetrue
+ \TgoTitleIndentZerofalse
+ },
+ ngerman.code= {%
+ \TgoNGermanLanguagetrue
+ },
+ german.code= {%
+ \TgoGermanLanguagetrue
+ },
+naustrian.code= {%
+ \TgoNAustrianLanguagetrue
+ },
+nswissgerman.code= {%
+ \TgoNSwissGermanLanguagetrue
+ },
+ italian.code= {%
+ \TgoItalianLanguagetrue
+ },
+ spanish.code= {%
+ \TgoSpanishLanguagetrue
+ },
+english.code= {%
+ \TgoEnglishLanguagetrue
+ },
+british.code= {%
+ \TgoBritishLanguagetrue
+ },
+american.code= {%
+ \TgoAmericanLanguagetrue
+ },
+canadian.code= {%
+ \TgoCanadianLanguagetrue
+ },
+australian.code= {%
+ \TgoAustralianLanguagetrue
+ },
+newzealand.code= {%
+ \TgoNewZealandLanguagetrue
+ },
+ %%%%%% Default Statements %%%%%%%%%%%%%%%%%%%%%%%%
+ no-statement.if = TgoNoStatement,
+ %%%%%% No Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%
+ no-hyperref.if = TgoNoHyperref,
+ %%%%%% Parindentzero %%%%%%%%%%%%%%%%%%%%%%%%%%%
+ no-indent.if = TgoParindentZero,
+ indent.ifnot = TgoParindentZero,
+%%%%%% Parindentzero %%%%%%%%%%%%%%%%%%%%%%%%%%%
+ no-titleindent.if = TgoTitleIndentZero,
+ titleindent.ifnot = TgoTitleIndentZero,
+ %%%%%% ThmNamePos left/right %%%%%%%%%%%%%%%%%%%%%%%
+ ThmNamePos.choice:,
+ ThmNamePos / left.code:n =
+ {
+ \RenewDocumentCommand\TgoStatementNameOffset{}{}
+ },
+ ThmNamePos / right.code:n =
+ {
+ \RenewDocumentCommand\TgoStatementNameOffset{}{\hspace*{\fill}}
+ },
+%%%% book or article %%%%%%%%%%%%%%%%%%%%%%%%%%%
+PubliClass.choice:,
+PubliClass / article.code:n =
+{%
+\renewcommand\TgoPublicationClass{article}
+\TgoBookfalse
+},
+PubliClass / book.code:n =
+{%
+\renewcommand\TgoPublicationClass{book}
+\TgoBooktrue
+},
+%%%% oneside or two sides %%%%%%%%%%%%%%%%%%%%%%%%
+oneside.if = TgoOneSide ,
+twoside.ifnot = TgoOneSide ,
+%%%% Font Size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FontSize.choice:,
+FontSize / 9pt.code:n =
+{
+\RemoveFromHook{class/article/after}
+\AddToHook{class/article/after}{%
+\TgoNinePointsFonts}
+\RemoveFromHook{class/book/after}
+\AddToHook{class/book/after}{%
+\TgoNinePointsFonts}
+},
+FontSize / 10pt.code:n =
+{
+\RemoveFromHook{class/article/after}
+\AddToHook{class/article/after}{%
+\TgoTenPointsFonts}
+\RemoveFromHook{class/book/after}
+\AddToHook{class/book/after}{%
+\TgoTenPointsFonts}
+},
+FontSize / 11pt.code:n =
+{
+\RemoveFromHook{class/article/after}
+\AddToHook{class/article/after}{%
+\TgoElevenPointsFonts}
+\RemoveFromHook{class/book/after}
+\AddToHook{class/book/after}{%
+\TgoElevenPointsFonts}
+},
+FontSize / 12pt.code:n =
+{
+\RemoveFromHook{class/article/after}
+\AddToHook{class/article/after}{%
+\TgoTwelvePointsFonts}
+\RemoveFromHook{class/book/after}
+\AddToHook{class/book/after}{%
+\TgoTwelvePointsFonts}
+},
+FontSize / unknown.code:n =
+{
+ \ClassWarning{tango}{\MessageBreak Value #1 is unknown \MessageBreak
+ Possible choices are 9pt, 10pt, 11pt and 12pt.
+ \MessageBreak Selecting 10pt.}
+},
+%%%% ColorTheme %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ColorTheme.choice:,
+ColorTheme / Blue.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+ \definecolor{ColorOne}{rgb}{0.08, 0.05, 0.55}
+ \definecolor{ColorTwo}{rgb}{0.87, 0.94, 0.97}
+ }
+},
+ ColorTheme / Navy.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+ \definecolor{ColorOne}{rgb}{0.07, 0.37, 0.65}
+ \definecolor{ColorTwo}{rgb}{0.87, 0.95, 0.97}
+ }
+ },
+ColorTheme / USAF.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+ \definecolor{ColorOne}{rgb}{0.24, 0.41, 0.54}
+ \definecolor{ColorTwo}{rgb}{0.92, 0.94, 0.96}
+ }
+ },
+ ColorTheme / Azur.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.15, 0.32, 0.75}
+\definecolor{ColorTwo}{rgb}{0.88, 0.94, 0.97}
+}
+},
+ ColorTheme / Red.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.75,0.05,0.1}
+\definecolor{ColorTwo}{rgb}{1,0.94,0.9}
+}
+ },
+ ColorTheme / Framboise.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.64, 0.25, 0.45}
+\definecolor{ColorTwo}{rgb}{1, 0.95, 0.94}
+}
+ },
+ ColorTheme / Brique.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.68, 0.1, 0.0}
+\definecolor{ColorTwo}{rgb}{1, 0.95, 0.89}
+}
+},
+ ColorTheme / Sienne.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.55, 0.27, 0.1}
+\definecolor{ColorTwo}{rgb}{1, 0.95, 0.87}
+ }
+ },
+ ColorTheme / Caramel.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.66, 0.26, 0.0}
+\definecolor{ColorTwo}{rgb}{1, 0.96, 0.86}
+}
+},
+ ColorTheme / Olive.code:n =
+ {%
+ \RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.28, 0.43, 0.03}
+\definecolor{ColorTwo}{rgb}{0.95, 0.98, 0.9}
+}
+ },
+ ColorTheme / Tannen.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.09, 0.44, 0.28}
+\definecolor{ColorTwo}{rgb}{0.92, 0.97, 0.94}
+}
+},
+ ColorTheme / GrayGray.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.25,0.25,0.25}
+\definecolor{ColorTwo}{rgb}{0.95,0.95,0.95}
+}
+},
+ ColorTheme / BlackAndWhite.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0,0,0}
+\definecolor{ColorTwo}{rgb}{1,1,1}
+}
+},
+ ColorTheme / Ink.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.25, 0.25, 0.33}
+\definecolor{ColorTwo}{rgb}{0.94, 0.95, 0.97}
+}
+},
+ ColorTheme / Steel.code:n =
+{%
+\RemoveFromHook{package/xcolor/after}
+ \AddToHook{package/xcolor/after}%
+{ %
+\definecolor{ColorOne}{rgb}{0.27, 0.25, 0.2}
+\definecolor{ColorTwo}{rgb}{0.96, 0.96, 0.93}
+}
+},
+ ColorTheme / unknown.code:n =
+ {
+ \ClassWarning{tango}{\MessageBreak “ColorTheme” #1 is unknown!\MessageBreak
+Possible choices are: \MessageBreak
+Blue, Navy, USAF, Azur, Red, Framboise, Brique,
+ \MessageBreak Sienne, Caramel, Olive, Tannen, GrayGray, BlackAndWhite, Ink and Steel.
+\MessageBreak Stay in GrayGray}
+},
+%%%% User defined colors %%%%%%%%%%%%%%%%%%%%%%%%
+ColorOne.code = \AddToHook{package/xcolor/after}{\definecolor{ColorOne}#1},
+ColorTwo.code = \AddToHook{package/xcolor/after}{\definecolor{ColorTwo}#1},
+ColorOneNamed.code = \AddToHook{package/xcolor/after}{\colorlet{ColorOne}{#1}},
+ColorTwoNamed.code = \AddToHook{package/xcolor/after}{\colorlet{ColorTwo}{#1}},
+%%%% Output %%%%%%%%%%%%%%%%%%%%%%%%%%
+ Output.choice:,
+ Output / A4paper.code:n =
+ {
+\TgoAfourPaperOutputtrue
+ },
+Output / Letter.code:n =
+{
+\TgoLetterOutputtrue
+\TgoBigTabletOutputtrue
+\TgoAfourPaperOutputfalse
+},
+Output / BigTablet.code:n =
+ {
+\TgoBigTabletOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+Output / A5paper.code:n =
+ {
+\TgoAfivePaperOutputtrue
+\TgoTabletOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+Output / Tablet.code:n =
+ {
+\TgoTabletOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+Output / SmallTablet.code:n =
+ {
+\TgoSmallTabletOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+Output / eReader.code:n =
+ {
+\TgoeReaderOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+Output / Smartphone.code:n =
+ {
+\TgoSmartphoneOutputtrue
+\TgoAfourPaperOutputfalse
+ },
+ Output / unknown.code:n =
+ {
+ \ClassWarning{tango}{\MessageBreak Value #1 is unknown \MessageBreak
+ Possible choices are A4paper, A5paper, Letter, BigTablet,\MessageBreak
+ Tablet, SmallTablet, eReader and Smartphone.
+ \MessageBreak Selecting A4paper.}
+\TgoAfourPaperOutputtrue
+ },
+ %%%%% Stylistic Set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ StylisticSet.multichoice:,
+ StylisticSet / upint.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{RawFeature=+ss03}}
+ },
+ StylisticSet / leqslant.code:n =
+ {
+\AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{RawFeature=+ss04}}
+ },
+StylisticSet / smaller.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{RawFeature=+ss05}}
+ },
+StylisticSet / subsetneq.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{RawFeature=+ss06}}
+ },
+StylisticSet / parallelslant.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{RawFeature=+ss07}}
+ },
+ %%%%%%% Character Variants %%%%%%%%%%%%%%%%%%%%%%%%%%
+ CharacterVariant.multichoice:,
+ CharacterVariant / zero.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=0}}
+ },
+ CharacterVariant / hslash.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{CharacterVariant=1}}
+ },
+ CharacterVariant / emptyset.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{CharacterVariant=2}}
+ },
+ CharacterVariant / epsilon.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=3}}
+ },
+ CharacterVariant / kappa.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=4}}
+ },
+ CharacterVariant / pi.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=5}}
+ },
+ CharacterVariant / phi.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=6}}
+ },
+ CharacterVariant / rho.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=7}}
+ },
+ CharacterVariant / sigma.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=8}}
+ },
+ CharacterVariant / theta.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+{ \defaultfontfeatures+[Erewhon Math]{CharacterVariant=9}}
+ },
+CharacterVariant / Theta.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{CharacterVariant=10}}
+ },
+CharacterVariant / partial.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ {\defaultfontfeatures+[Erewhon Math]{CharacterVariant=11}}
+ },
+CharacterVariant / Ecal.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=20}}
+ },
+CharacterVariant / Qcal.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=21}}
+ },
+CharacterVariant / Tcal.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+ { \defaultfontfeatures+[Erewhon Math]{CharacterVariant=22}}
+ },
+ %%%%%%% Numbers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Numbers.choice:,
+ Numbers / MathOldStyle.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+{\defaultfontfeatures+[Erewhon Math]{Numbers=OldStyle}}
+ },
+ Numbers / TextOldStyle.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+{ \defaultfontfeatures+[erewhon]{Numbers=OldStyle}}
+ },
+Numbers / OldStyle.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+{ \defaultfontfeatures+{Numbers=OldStyle}
+ \defaultfontfeatures+[Erewhon Math]{RawFeature=-onum}}
+ },
+ Numbers / FullOldStyle.code:n =
+ {
+ \AddToHook{package/fontspec/after}%
+{ \defaultfontfeatures+{Numbers=OldStyle}}
+ },
+ %%%% usage
+ french.usage=load,
+ no-statement.usage=load,
+ no-hyperref.usage=load,
+ indent.usage=load,
+no-indent.usage=load,
+ThmNamePos.usage=general,
+oneside.usage=load,
+twoside.usage=load,
+PubliClass.usage=load,
+FontSize.usage=general,
+ColorTheme.usage=general,
+ColorOne.usage=general,
+ColorTwo.usage=general,
+Output.usage=load,
+StylisticSet.usage=load,
+CharacterVariant.usage=load,
+Numbers.usage=load
+}
+%%%%%
+\ProcessKeyOptions[tango]
+%%%%%
+\NewDocumentCommand\tgosetup{}{\SetKeys[tango]}
+%%%%%%%%
+%%%%%%% 10pt %%%%%%%%%%%%%
+\NewDocumentCommand\TgoTenPointsFonts{}{%
+\renewcommand\TgoSmallerSize{%
+\TgoSmallerSizeCommandtrue%
+\tgosetup{FontSize=9pt}%
+\TgoSmallerSizeCommandfalse%
+}%
+\renewcommand\normalsize{%
+ \fontsize{10}{12.7}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip{4.5pt plus 2.5pt minus 1.5pt}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI%
+ }%
+\normalsize%
+\ifTgoSmallerSizeCommand%
+\else%
+\setlength\TgoStandardMargin{1.5em}%
+\fi%
+\ifx\MakeRobust\@undefined \else%
+ \MakeRobust\normalsize%
+\fi%
+\DeclareRobustCommand\small{%
+ \fontsize{9}{11.45}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip {0pt plus 3pt}%
+ \setlength\belowdisplayshortskip {4pt plus 2pt minus 2pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus2\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength \belowdisplayskip {\abovedisplayskip}%
+ \let\@listi\@listI%
+ }%
+\DeclareRobustCommand\footnotesize{%
+ \fontsize{8}{10.2}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 2pt minus 4pt}%
+ \setlength\abovedisplayshortskip{0pt plus 1 pt}%
+ \setlength\belowdisplayshortskip{3pt plus 2pt minus 1 pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength \belowdisplayskip {\abovedisplayskip}%
+ }%
+\DeclareRobustCommand\scriptsize{\fontsize{7}{8.9}\selectfont}%
+\DeclareRobustCommand\tiny{\fontsize{5}{6.4}\selectfont}%
+\DeclareRobustCommand\large{\fontsize{11.5}{14.6}\selectfont}%
+\DeclareRobustCommand\Large{\fontsize{14}{17}\selectfont}%
+\DeclareRobustCommand\LARGE{\fontsize{17}{20}\selectfont}%
+\DeclareRobustCommand\huge{\fontsize{20}{23}\selectfont}%
+\DeclareRobustCommand\Huge{\fontsize{24}{27}\selectfont}%
+\DeclareRobustCommand\HUGE{\fontsize{58}{58}\selectfont}%
+}%
+%%%%%%%%%%%%%% 11pt %%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand\TgoElevenPointsFonts{}{%
+\renewcommand\TgoSmallerSize{%
+\TgoSmallerSizeCommandtrue%
+\tgosetup{FontSize=10pt}%
+\TgoSmallerSizeCommandfalse%
+}%
+\renewcommand\normalsize{%
+ \fontsize{11}{13.9}\selectfont%
+ \setlength\abovedisplayskip {6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip {4.5pt plus 2.5pt minus 2 pt}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI}%
+\normalsize%
+\ifTgoSmallerSizeCommand%
+\else%
+\setlength\TgoStandardMargin{1.5em}%
+\fi%
+\ifx\MakeRobust\@undefined \else%
+ \MakeRobust\normalsize%
+\fi%
+\DeclareRobustCommand\small{%
+ \fontsize{10}{12.7}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip {4pt plus 2 pt minus 2pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus2\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI%
+ }%
+\DeclareRobustCommand\footnotesize{%
+ \fontsize{9}{11.35}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 2pt minus 4pt}%
+ \setlength\abovedisplayshortskip{0pt plus 1pt}%
+ \setlength\belowdisplayshortskip{3pt plus 2pt minus 1pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+}%
+\DeclareRobustCommand\scriptsize{\fontsize{8}{10.2}\selectfont}%
+\DeclareRobustCommand\tiny{\fontsize{6}{7.6}\selectfont}%
+\DeclareRobustCommand\large{\fontsize{13}{15.85}\selectfont}%
+\DeclareRobustCommand\Large{\fontsize{15}{18}\selectfont}%
+\DeclareRobustCommand\LARGE{\fontsize{18}{21}\selectfont}%
+\DeclareRobustCommand\huge{\fontsize{21}{24}\selectfont}%
+\DeclareRobustCommand\Huge{\fontsize{24}{27}\selectfont}%
+\DeclareRobustCommand\HUGE{\fontsize{60}{60}\selectfont}%
+}%
+%%%%%%% 12pt %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand\TgoTwelvePointsFonts{}{%
+\renewcommand\TgoSmallerSize{%
+\TgoSmallerSizeCommandtrue%
+\tgosetup{FontSize=11pt}%
+\TgoSmallerSizeCommandfalse%
+}%
+\renewcommand\normalsize{%
+ \fontsize{12}{15.1}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip {4.5pt plus 2.5pt minus2pt}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI}%
+\normalsize%
+\ifTgoSmallerSizeCommand%
+\else%
+\setlength\TgoStandardMargin{1.5em}%
+\fi%
+\ifx\MakeRobust\@undefined \else%
+ \MakeRobust\normalsize%
+\fi%
+\DeclareRobustCommand\small{%
+ \fontsize{11}{13.9}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip{4pt plus 2pt minus 2pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus2\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI%
+ }%
+\DeclareRobustCommand\footnotesize{%
+ \fontsize{10}{12.7}\selectfont%
+ \setlength\abovedisplayskip {6pt plus 2pt minus 4pt}%
+ \setlength\abovedisplayshortskip{0pt plus 1pt}%
+ \setlength\belowdisplayshortskip{3pt plus 2pt minus 1pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+}%
+\DeclareRobustCommand\scriptsize{\fontsize{9}{11.45}\selectfont}%
+\DeclareRobustCommand\tiny{\fontsize{7}{8.9}\selectfont}%
+\DeclareRobustCommand\large{\fontsize{14.2}{16.85}\selectfont}%
+\DeclareRobustCommand\Large{\fontsize{16.5}{19.2}\selectfont}%
+\DeclareRobustCommand\LARGE{\fontsize{19.2}{22}\selectfont}%
+\DeclareRobustCommand\huge{\fontsize{22}{25}\selectfont}%
+\DeclareRobustCommand\Huge{\fontsize{25}{28}\selectfont}%
+\DeclareRobustCommand\HUGE{\fontsize{63}{63}\selectfont}%
+}%
+%%
+%%%%%%% 9pt %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand\TgoNinePointsFonts{}{%
+\renewcommand\TgoSmallerSize{}
+\renewcommand\normalsize{%
+ \fontsize{9}{11.45}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip{4.5pt plus 2.5pt minus 2pt}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI}%
+\normalsize%
+\setlength\TgoStandardMargin{1.5em}%
+\ifx\MakeRobust\@undefined\else%
+ \MakeRobust\normalsize%
+\fi%
+\DeclareRobustCommand\small{%
+ \fontsize{8}{10.25}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 3pt minus 2pt}%
+ \setlength\abovedisplayshortskip{0pt plus 3pt}%
+ \setlength\belowdisplayshortskip{4pt plus 2pt minus 2pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus2\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \let\@listi\@listI%
+ }%
+\DeclareRobustCommand\footnotesize{%
+ \fontsize{7}{9}\selectfont%
+ \setlength\abovedisplayskip{6pt plus 2pt minus 4pt}%
+ \setlength\abovedisplayshortskip{0pt plus 1pt}%
+ \setlength\belowdisplayshortskip{3pt plus 2pt minus 1pt}%
+ \def\@listi{\leftmargin\leftmargini%
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@%
+ \parsep 2\p@ \@plus\p@ \@minus\p@%
+ \itemsep \parsep}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+}%
+\DeclareRobustCommand\scriptsize{\fontsize{6}{7.7}\selectfont}%
+\DeclareRobustCommand\tiny{\fontsize{5}{6.4}\selectfont}%
+\DeclareRobustCommand\large{\fontsize{10.3}{13}\selectfont}%
+\DeclareRobustCommand\Large{\fontsize{12.7}{15.4}\selectfont}%
+\DeclareRobustCommand\LARGE{\fontsize{15.2}{17.3}\selectfont}%
+\DeclareRobustCommand\huge{\fontsize{18}{20}\selectfont}%
+\DeclareRobustCommand\Huge{\fontsize{20}{24}\selectfont}%
+\DeclareRobustCommand\HUGE{\fontsize{52}{52}\selectfont}%
+}%
+%%
+%%
+\ifTgoOneSide%
+ \LoadClass[oneside]{\TgoPublicationClass}%
+ \else%
+ \LoadClass[twoside]{\TgoPublicationClass}%
+\fi%
+%%%%%%%%%%%
+\RequirePackage{xcolor}
+%%%%
+\RequirePackage{mathtools}
+\RequirePackage{amsthm}
+%%%%
+\RequirePackage{graphicx,microtype,geometry,enumitem,float,afterpage}
+%
+\RequirePackage{titletoc}
+%
+\RequirePackage[pagestyles,toctitles,newlinetospace,clearempty,noindentafter]{titlesec}
+%
+%
+\assignpagestyle{\chapter}{empty}
+\assignpagestyle{\part}{empty}
+\RequirePackage{ccaption,caption}
+\DeclareCaptionLabelFormat{tango}{\sffamily\fontseries{sb}\selectfont#1\nobreakspace#2}
+\captionsetup{font={sf,small},labelformat=tango,labelfont={color=ColorOne}}
+\newfixedcaption{\tgofigcaption}{figure}
+\newfixedcaption{\tgotabcaption}{table}
+ %%% Fontes
+ %%
+ \RequirePackage{fontspec}
+\RequirePackage{unicode-math}[2020/01/31]
+ \defaultfontfeatures+{Ligatures=TeX,RawFeature={+pnum}}
+%
+ \SetTgoBaseFonts
+ %%
+ \thinmuskip=2.5mu
+ \medmuskip=3mu plus 1mu minus 3mu
+ \thickmuskip=4mu plus 3mu minus 0.5mu
+ %%
+\setmonofont{Inconsolatazi4}[Scale=MatchLowercase]
+%
+ \setsansfont{NotoSans}[%
+ Scale=0.9,
+ Ligatures=TeX,
+ UprightFeatures={
+Font=NotoSansMedium
+},
+ItalicFeatures={
+Font=NotoSansMediumItalic
+},
+BoldFeatures={
+Font=NotoSansBold
+},
+BoldItalicFeatures={
+Font=NotoSansBoldItalic
+},
+FontFace={ul}{n}{Font=NotoSansThin},
+FontFace={ul}{it}{Font=NotoSansThinItalic},
+FontFace={el}{n}{Font=NotoSansExtraLight},
+FontFace={el}{it}{Font=NotoSansExtraLightItalic},
+FontFace={l}{n}{Font=NotoSansLight},
+FontFace={l}{it}{Font=NotoSansLightItalic},
+FontFace={sl}{n}{Font=NotoSansRegular},
+FontFace={sl}{it}{Font=NotoSansItalic},
+FontFace={sb}{n}{Font=NotoSansSemiBold},
+FontFace={sb}{it}{Font=NotoSansSemiBoldItalic},
+FontFace={eb}{n}{Font=NotoSansExtraBold},
+FontFace={eb}{it}{Font=NotoSansExtraBoldItalic},
+FontFace={ub}{n}{Font=NotoSansBlack},
+FontFace={ub}{it}{Font=NotoSansBlackItalic},
+]
+%%
+\DeclareFontSeriesDefault[sf]{md}{sl}
+%
+%
+\RequirePackage{fourier-orns}%
+%
+%% OTF Fonts Commands
+%%
+\NewDocumentCommand{\superiors}{}{\addfontfeature{RawFeature=+sups}}
+\NewDocumentCommand{\scinferiors}{}{\addfontfeature{RawFeature=+sinf}}
+\NewDocumentCommand{\smartfracs}{}{\addfontfeature{RawFeature=+frac}}
+\NewDocumentCommand{\fullsc}{m}{{\addfontfeature{RawFeature=+c2sc}\MakeUppercase{#1}}}
+\DeclareTextFontCommand{\textsup}{\superiors}
+\DeclareTextFontCommand{\textscinf}{\scinferiors}
+\DeclareTextFontCommand{\smartfrac}{\smartfracs}
+\NewDocumentCommand{\olddigits}{}{\addfontfeature{RawFeature={-lnum,+onum}}}
+\NewDocumentCommand{\propdigits}{}{\addfontfeature{RawFeature={-tnum,+pnum}}}
+\NewDocumentCommand{\liningdigits}{}{\addfontfeature{RawFeature={-onum,+lnum}}}
+\NewDocumentCommand{\tabulardigits}{}{\addfontfeature{RawFeature={-pnum,+tnum}}}
+%
+ %
+ %%%%%%%% My taylor is rich %%%%%%%%%%%
+%
+\RequirePackage{iflang}
+\RequirePackage{babel}
+\IfLanguageName{nil}{%
+\ClassError{tango}{No language option is given}
+{%
+You *must* pass at least one language\MessageBreak
+option for babel to the tango class.}
+}{}
+%
+%
+\ifTgoFrenchLanguage
+\frenchsetup{StandardLists,og=«, fg=»,PartNameFull=false,
+SmallCapsFigTabCaptions=false,
+CustomiseFigTabCaptions=false}
+\addto\captionsfrench{% DF
+\renewcommand\TgoTheoremName{Théorème}
+\renewcommand\TgoDefinitionName{Définition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemme}
+\renewcommand\TgoCorollaryName{Corollaire}
+\renewcommand\TgoRemarkName{Remarque}
+\renewcommand\TgoExampleName{Exemple}
+\renewcommand\TgoContentsName{Sommaire}
+\renewcommand\TgoExerciseName{Exercice}
+\renewcommand\TgoExercisesSubsectionName{Exercices}
+\renewcommand\TgoExercisesSectionName{Exercices}
+}
+\fi
+%%%
+\ifTgoNGermanLanguage
+\addto\captionsngerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoGermanLanguage
+\addto\captionsgerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoNAustrianLanguage
+\addto\captionsnaustrian{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoNSwissGermanLanguage
+\addto\captionsnswissgerman{%
+\renewcommand\TgoTheoremName{Satz}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Korollar}%% ????
+\renewcommand\TgoRemarkName{Bemerkung}
+\renewcommand\TgoExampleName{Beispiel}
+\renewcommand\TgoContentsName{Inhaltsverzeichnis}
+\renewcommand\TgoExerciseName{Übung}
+\renewcommand\TgoExercisesSubsectionName{Übungen}
+\renewcommand\TgoExercisesSectionName{Übungen}
+}
+\fi
+%
+%%%
+\ifTgoItalianLanguage
+\addto\captionsitalian{%
+\renewcommand\TgoTheoremName{Teorema}
+\renewcommand\TgoDefinitionName{Definizione}
+\renewcommand\TgoPropositionName{Proposizione}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollario}
+\renewcommand\TgoRemarkName{Nota}%%????
+\renewcommand\TgoExampleName{Esempio}
+\renewcommand\TgoContentsName{Sommario}%%Contenuti????
+\renewcommand\TgoExerciseName{Esercizio}
+\renewcommand\TgoExercisesSubsectionName{Esercizi}
+\renewcommand\TgoExercisesSectionName{Esercizi}
+}
+\fi
+%
+%%%
+\ifTgoSpanishLanguage
+\addto\captionsspanish{%
+\renewcommand\TgoTheoremName{Teorema}
+\renewcommand\TgoDefinitionName{Definición}
+\renewcommand\TgoPropositionName{Proposición}
+\renewcommand\TgoLemmaName{Lema}
+\renewcommand\TgoCorollaryName{Corolario}
+\renewcommand\TgoRemarkName{Osservación}%%????
+\renewcommand\TgoExampleName{Ejemplo}
+\renewcommand\TgoContentsName{Sumario}%%????
+\renewcommand\TgoExerciseName{Ejercicio}
+\renewcommand\TgoExercisesSubsectionName{Ejercicios}
+\renewcommand\TgoExercisesSectionName{Ejercicios}
+}
+\fi
+%
+%%%
+\ifTgoEnglishLanguage
+\addto\captionsenglish{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoBritishLanguage
+\addto\captionsbritish{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoAmericanLanguage
+\addto\captionsamerican{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoCanadianLanguage
+\addto\captionscanadian{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoAustralianLanguage
+\addto\captionsaustralian{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%%
+\ifTgoNewZealandLanguage
+\addto\captionsnewzealand{%
+\renewcommand\TgoTheoremName{Theorem}
+\renewcommand\TgoDefinitionName{Definition}
+\renewcommand\TgoPropositionName{Proposition}
+\renewcommand\TgoLemmaName{Lemma}
+\renewcommand\TgoCorollaryName{Corollary}
+\renewcommand\TgoRemarkName{Remark}
+\renewcommand\TgoExampleName{Example}
+\renewcommand\TgoContentsName{Contents}
+\renewcommand\TgoExerciseName{Exercise}
+\renewcommand\TgoExercisesSubsectionName{Exercises}
+\renewcommand\TgoExercisesSectionName{Exercises}
+}
+\fi
+%
+%%% Last package
+\ifTgoNoHyperref
+\else
+\RequirePackage[colorlinks,linkcolor=ColorOne,urlcolor=ColorOne]{hyperref}
+\fi
+%%
+ %%%
+%%%%%%% parindent %%%%%%%%%%%%%%%%%%%%%%%%
+\setlength\parindent{\TgoStandardMargin}
+\setlength{\parskip}{0pt plus 1pt}
+\ifTgoSmartphoneOutput
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{3pt plus 2pt minus1pt}
+\else
+\ifTgoParindentZero
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{3pt plus 1pt}
+\fi\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand\TgoCurrentLists{}
+%\ifTgoFrenchLanguage
+%\setlength{\TgoTitleIndent}{\parindent}
+%\else
+%\setlength{\TgoTitleIndent}{0em}
+%\fi
+\ifTgoTitleIndentZero
+\setlength{\TgoTitleIndent}{0em}
+\else
+\setlength{\TgoTitleIndent}{\parindent}
+\fi
+%
+%
+\renewcommand\labelitemi{\textbullet}
+\renewcommand\labelitemii{\textopenbullet}
+\renewcommand\labelitemiii{\starredbullet}
+\renewcommand\labelitemiv{\textperiodcentered}
+%%%%%
+\NewDocumentCommand\renewtgolabels{%
+s E{1234}{ {} {} {} {} }%
+}
+{%
+\IfBooleanTF{#1}%
+{%
+\IfBlankTF{#2}%
+{\renewcommand\labelitemi{\textbullet}}%
+{\renewcommand\labelitemi{#2}}%
+\IfBlankTF{#3}%
+{\renewcommand\labelitemii{\textopenbullet}}%
+{\renewcommand\labelitemii{#3}}%
+\IfBlankTF{#4}%
+{\renewcommand\labelitemiii{\starredbullet}}%
+{\renewcommand\labelitemiii{#4}}%
+\IfBlankTF{#5}%
+{\renewcommand\labelitemiv{\textperiodcentered}}%
+{\renewcommand\labelitemiv{#5}}%
+}%
+{%
+\IfBlankF{#2}{\renewcommand\labelitemi{#2}}%
+\IfBlankF{#3}{\renewcommand\labelitemii{#3}}%
+\IfBlankF{#4}{\renewcommand\labelitemiii{#4}}%
+\IfBlankF{#5}{\renewcommand\labelitemiv{#5}}%
+}%
+\TgoCurrentLists%
+}%
+\NewDocumentCommand\tgosmartlists{}
+{%
+\RenewDocumentCommand\TgoCurrentLists{}{\tgosmartlists}
+\setlength{\leftmargini}{\TgoStandardMargin}
+\setlength{\leftmarginii}{\TgoStandardMargin}
+\setlength{\leftmarginiii}{\TgoStandardMargin}
+\setlength{\leftmarginiv}{\TgoStandardMargin}
+\setlist{
+ itemsep=0.3ex plus 0.1ex minus 0.1ex,
+ parsep=0.3ex plus 0.1ex minus 0.1ex,
+ topsep=0.3ex plus 0.2ex minus 0.1ex,
+ partopsep=0.3ex plus 0.1ex minus 0.1ex
+}
+\setlist[itemize]{nosep, leftmargin=\TgoStandardMargin, align=left, labelsep=0.5em, labelindent=\TgoStandardMargin+\parindent,
+itemindent=*}
+%
+\setlist[itemize,1]{leftmargin=0em, align=left, labelsep=0.5em, labelindent=\parindent, itemindent=* }
+%
+\setlist[enumerate]{nosep, leftmargin=\TgoStandardMargin, align=left, labelsep=0.5em,
+labelindent=\TgoStandardMargin+\parindent,widest=0, itemindent=*}
+%
+\setlist[enumerate,1]{leftmargin=0em, align=left, labelsep=0.5em, labelindent=\parindent, itemindent=* }
+%
+}
+%%%
+\NewDocumentCommand\tgostandardlists{}
+{%
+\RenewDocumentCommand\TgoCurrentLists{}{\tgostandardlists}
+\setlength{\leftmargini}{\TgoStandardMargin}
+\setlength{\leftmarginii}{\TgoStandardMargin}
+\setlength{\leftmarginiii}{\TgoStandardMargin}
+\setlength{\leftmarginiv}{\TgoStandardMargin}
+\setlist{
+ itemsep=0.4ex plus 0.2ex minus 0.2ex,
+ parsep=0.4ex plus 0.2ex minus 0.2ex,
+ topsep=0.8ex plus 0.4ex minus 0.4ex,
+ partopsep=0.4ex plus 0.2ex minus 0.2ex
+}
+\setlist[itemize]{leftmargin=\TgoStandardMargin, align=left, labelindent=0em,
+labelwidth=0.75\TgoStandardMargin, labelsep=0.25\TgoStandardMargin, itemindent=!}
+%%
+\setlist[itemize,1]{leftmargin=2\TgoStandardMargin, align=left, labelindent=\TgoStandardMargin, labelwidth=0.75\TgoStandardMargin, labelsep=0.25\TgoStandardMargin, itemindent=!}
+%
+\setlist[enumerate]{leftmargin=\TgoStandardMargin, align=left, labelindent=0em,
+labelwidth=0.75\TgoStandardMargin, labelsep=0.25\TgoStandardMargin, itemindent=!}
+%
+\setlist[enumerate,1]{leftmargin=2\TgoStandardMargin, align=left, labelindent=\TgoStandardMargin, labelwidth=0.75\TgoStandardMargin, labelsep=0.25\TgoStandardMargin, itemindent=!}
+}
+\renewcommand{\labelenumii}{\alph{enumii}.}
+
+\tgostandardlists
+%
+%
+%\NewDocumentCommand\testlists{}{
+%\setlength{\leftmargini}{\TgoStandardMargin}
+%\setlength{\leftmarginii}{\TgoStandardMargin}
+%\setlength{\leftmarginiii}{\TgoStandardMargin}
+%\setlength{\leftmarginiv}{\TgoStandardMargin}
+%\setlist{
+% itemsep=0.4ex plus 0.2ex minus 0.2ex,
+% parsep=0.4ex plus 0.2ex minus 0.2ex,
+% topsep=0.8ex plus 0.4ex minus 0.4ex,
+% partopsep=0.4ex plus 0.2ex minus 0.2ex
+%}
+%\setlist[itemize]{nosep, leftmargin=\TgoStandardMargin, align=left, labelsep=0.5em, labelindent=\TgoStandardMargin+\parindent,
+%itemindent=*}
+%%
+%\setlist[itemize,1]{leftmargin=0em, align=left, labelsep=0.5em, labelindent=\parindent, itemindent=* }
+%%
+%\setlist[enumerate]{nosep, leftmargin=\TgoStandardMargin, align=left, labelsep=0.5em,
+%labelindent=\TgoStandardMargin+\parindent,widest=0, itemindent=*}
+%%
+%\setlist[enumerate,1]{leftmargin=0em, align=left, labelsep=0.5em, labelindent=\parindent, itemindent=* }
+%%
+%}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpagestyle{tango}{
+ \ifTgoOneSide
+\ifTgoBook
+ \sethead {\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\chaptertitle}{}
+ {\sffamily\thepage} % all
+ \else
+ \sethead{\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\sectiontitle}{}
+ {\sffamily\thepage}% all
+ \fi
+\else
+\ifTgoBook
+\sethead[\sffamily\thepage]
+[\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\chaptertitle][] % even
+ {}{\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\sectiontitle}
+ {\sffamily\thepage} % odd
+\else
+ \sethead[\sffamily\thepage][\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\sectiontitle][] % even
+ {}{\sffamily\addfontfeature{RawFeature=+c2sc}\MakeUppercase\sectiontitle}
+ {\sffamily\thepage}% odd
+\fi
+\fi}
+ %%%%%%%%%%%%
+\pagestyle{tango}
+%%%%%%%%%%%%%%
+%%% Mise en forme des titres %%%%%%%%%%%%%%%
+\setcounter{secnumdepth}{2}
+%%%
+\ifTgoBook
+\newcommand\TgoChapterBox[1]{%
+{\filright\sffamily\addfontfeature{RawFeature=-onum}\fontseries{eb}\selectfont\HUGE\hspace*{-0.06em}\thechapter}%
+\quad\parbox{0.75\textwidth}{\filright#1}
+}
+\titleformat{\part}[display]{\centering\color{ColorOne}\sffamily
+\addfontfeature{RawFeature=-onum}\fontseries{eb}\selectfont\Huge}
+{\LARGE\partname~\thepart}{\baselineskip}{}
+%%
+\titleformat{name=\chapter}[block]{\filright\color{ColorOne}\fontspec{\TgoChapterTitleFont}\addfontfeature{RawFeature=-onum}\huge}
+{}{0em}{\TgoChapterBox}
+%%%
+\titleformat{name=\chapter,numberless}[block]{\filright\color{ColorOne}\fontspec{\TgoChapterTitleFont}\addfontfeature{RawFeature=-onum}\huge}
+{}{0em}{}
+\fi%
+\titleformat{\section}{\color{ColorOne}\sffamily\addfontfeature{RawFeature=-onum}%
+\fontseries{b}\selectfont\large}{\thesection}{1em}{\uppercase}%
+\titleformat{\subsection}{\color{ColorOne}\sffamily\fontseries{sb}\selectfont\large}{\thesubsection}{1em}{}%
+\titleformat{\subsubsection}{\color{ColorOne}\sffamily\fontseries{sb}\selectfont}{\thesubsubsection}{0.7em}{}%
+\titleformat{\paragraph}[runin]{\itshape}{\theparagraph.}{0.5em}{}[. — ]%
+\titleformat{\subparagraph}[runin]{}{\thesubparagraph.}{0.5em}{}[. — ]%
+\titlespacing{\chapter}{\TgoTitleIndent}{0pt}{6ex}%
+\titlespacing{\section}{\TgoTitleIndent}{12pt plus 5pt minus 4pt}{6pt plus 3pt minus 2pt}%
+\titlespacing{\subsection}{\TgoTitleIndent}{12pt plus 5pt minus 4pt}{6pt plus 3pt minus 2pt}%
+\titlespacing{\subsubsection}{\TgoTitleIndent}{7pt plus 3pt minus 2pt}{3pt plus 2pt minus 1pt}%
+\titlespacing{\paragraph}{\TgoTitleIndent}{7pt plus 3pt minus 2pt}{3pt plus 1pt minus 1pt}%
+\titlespacing{\subparagraph}{\TgoTitleIndent}{4pt plus 2pt minus 2pt}{3pt plus 1pt minus 1pt}%
+%
+\ifTgoBook
+\NewCommandCopy{\tgotitle}{\chapter}
+\else%%article
+\NewDocumentCommand\tgotitle{s m}{%
+\IfBooleanTF{#1}{%
+\clearpage\thispagestyle{empty}
+% \vspace*{5\p@}%
+ {\parindent=0pt \raggedright
+ \normalfont
+ \interlinepenalty\@M
+\advance\leftskip by \TgoTitleIndent
+\fontspec{\TgoChapterTitleFont}\huge\color{ColorOne}#2
+\par} \vspace {\TgoAfterChapterSkip}\par}
+ {%
+\clearpage\thispagestyle{empty}
+% \vspace*{5\p@}%
+ {\parindent=0pt \raggedright
+ \normalfont
+ \interlinepenalty\@M
+\advance\leftskip by \TgoTitleIndent
+\fontspec{\TgoChapterTitleFont}\huge\color{ColorOne}#2
+\par} \vspace {\TgoAfterChapterSkip}\par}
+ }
+ \fi
+%%%%%%%
+%%%%%%%Table des matières
+%%%%%%%
+\ifTgoBook\else
+\RenewDocumentCommand\tableofcontents{}{%
+{\color{ColorOne}\parskip=0pt%
+\noindent\titlerule[1.3pt]%
+\vspace{-1\baselineskip}\vspace{1.6pt} \par %
+\noindent\titlerule[.5pt]%
+}%
+ \vspace{-10pt}\par%
+ \section*{\contentsname}
+ \@starttoc{toc}%
+{\color{ColorOne}\parskip=0pt%
+\noindent\titlerule[0.5pt]%
+\vspace{-1\baselineskip}\vspace{2.4pt} \par %
+\noindent\titlerule[1.3pt]%
+}%
+\par %
+\vspace{2\baselineskip}%
+\par %
+ }%
+ \fi
+ \IfPackageLoadedTF{hyperref}%
+{%
+\NewCommandCopy{\TgoOriginalToc}{\tableofcontents}%
+\RenewDocumentCommand\tableofcontents{}{{\hypersetup{hidelinks}\TgoOriginalToc}}%
+}%
+{}
+%%
+%%
+\ifTgoBook
+\NewDocumentCommand\tgoshorttoc{}{}
+\titlecontents{part}
+ [50pt] % ie, 1.5em (chapter) + 2.3em
+ {\large\sffamily\fontseries{sb}\selectfont\color{ColorOne}}
+ {\contentslabel{50pt}}
+ {\hspace*{-50pt}}
+ {\titlerule*[1pc]{}\contentspage}
+\titlecontents{chapter}
+ [16pt] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily\fontseries{b}\selectfont\color{ColorOne}}
+ {\contentslabel{16pt}}
+ {\hspace*{-6pt}}
+ {\titlerule*[1pc]{}\contentspage}
+\titlecontents{section}
+ [3.6em] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily\fontseries{m}\selectfont}
+ {\contentslabel{2.5em}}
+ {\hspace*{-2.5em}}
+ {\titlerule*[1pc]{.}\contentspage}
+\titlecontents{subsection}
+ [6.4em] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily\fontseries{l}\selectfont}
+ {\contentslabel{3.2em}}
+ {\hspace*{-3.2em}}
+ {\titlerule*[1pc]{.}\contentspage}
+ \else
+ \NewCommandCopy{\tgoshorttoc}{\tableofcontents}
+ \RenewDocumentCommand\tableofcontents{}{}
+ \ifTgoFrenchLanguage
+ \renewcommand{\frenchcontentsname}{\TgoContentsName}
+\fi
+ \setcounter{tocdepth}{2}
+ \titlecontents{section}
+ [1.7em] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily\fontseries{sb}\selectfont}
+ {\contentslabel{2.em}}
+ {\hspace*{-2.em}}
+ {\titlerule*[1pc]{}\contentspage}
+\titlecontents{subsection}
+ [4em] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily}
+ {\contentslabel{2.7em}}
+ {\hspace*{-2.7em}}
+ {\titlerule*[1pc]{.}\contentspage}
+\titlecontents{subsubsection}
+ [6em] % ie, 1.5em (chapter) + 2.3em
+ {\sffamily\fontseries{l}\selectfont}
+ {\contentslabel{3.5em}}
+ {\hspace*{-3.5em}}
+ {\titlerule*[1pc]{.}\contentspage}
+ \fi
+%
+%%Init
+\NewDocumentCommand\AfourCommand{+m}{}
+%
+\NewDocumentCommand\LetterCommand{+m}{}
+%
+\NewDocumentCommand\BigTabletCommand{+m}{}
+%
+\NewDocumentCommand\TabletCommand{+m}{}
+%
+\NewDocumentCommand\AfiveCommand{+m}{}
+%
+\NewDocumentCommand\SmallTabletCommand{+m}{}
+%
+\NewDocumentCommand\eReaderCommand{+m}{}
+%
+\NewDocumentCommand\SmartphoneCommand{+m}{}
+%
+\NewDocumentCommand\XAfourCommand{+m}{}
+%
+\NewDocumentCommand\XLetterCommand{+m}{}
+%
+\NewDocumentCommand\XBigTabletCommand{+m}{}
+%
+\NewDocumentCommand\XTabletCommand{+m}{}
+%
+\NewDocumentCommand\XAfiveCommand{+m}{}
+%
+\NewDocumentCommand\XSmallTabletCommand{+m}{}
+%
+\NewDocumentCommand\XeReaderCommand{+m}{}
+%
+\NewDocumentCommand\XSmartphoneCommand{+m}{}
+ %
+%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%Output Format %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%%%% Afour %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\ifTgoAfourPaperOutput
+%
+\RenewDocumentCommand\AfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XeReaderCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmartphoneCommand{+m}{#1}
+ %
+ %%
+%\ifTgoOneSide
+\geometry{paperwidth=21cm,paperheight=29.7cm,
+heightrounded,top=2cm,inner=2.75cm,outer=2.75cm,bottom=3.6cm,
+headheight=16pt,headsep=21pt,footskip=50pt}
+%\else
+%\geometry{paperwidth=21cm,paperheight=29.7cm,
+%heightrounded,top=2cm,inner=2.3cm,outer=3.2cm,bottom=3.6cm,
+%headheight=16pt,headsep=21pt,footskip=50pt}
+%\fi
+%
+\setlength{\TgoAfterChapterSkip}{21pt}
+%
+\NewDocumentCommand\tgocover{O{A4Cover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+%
+\fi
+%%%%%%%
+%%%%%% Big Tablet or Letter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoBigTabletOutput
+%
+\ifTgoLetterOutput
+%
+\RenewDocumentCommand\LetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\else
+%
+\RenewDocumentCommand\BigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\fi
+%
+\RenewDocumentCommand\XAfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XeReaderCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmartphoneCommand{+m}{#1}
+ %
+%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%
+%
+%%
+\ifTgoLetterOutput
+%\ifTgoOneSide
+\geometry{paperwidth=8.5in,paperheight=11in,
+heightrounded,top=1.9cm,inner=2.8cm,outer=2.8cm,bottom=3cm,
+headheight=16pt,headsep=20pt,footskip=14pt}
+%\else
+%\geometry{paperwidth=8.5in,paperheight=11in,
+%heightrounded,top=1.9cm,inner=2.4cm,outer=3.2cm,bottom=3.6cm,
+%headheight=16pt,headsep=20pt,footskip=14pt}
+%\fi
+%
+\setlength{\TgoAfterChapterSkip}{22pt}
+%
+\NewDocumentCommand\tgocover{O{LetterCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+%
+\else
+%
+\setlength{\TgoAfterChapterSkip}{21pt}
+%
+\geometry{paperwidth=19.8cm,paperheight=26.4cm,
+heightrounded,top=1.8cm,inner=2.4cm,outer=2.4cm,bottom=2.7cm,
+headheight=16pt,headsep=14pt,footskip=14pt}
+%
+\NewDocumentCommand\tgocover{O{BigTabletCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+\fi
+\fi
+%%%%%%%
+%%%%%% Tablet or A5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoTabletOutput
+%
+\ifTgoAfivePaperOutput
+\RenewDocumentCommand\AfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\else
+%
+\RenewDocumentCommand\TabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\fi
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XeReaderCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmartphoneCommand{+m}{#1}
+ %
+%
+%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%
+%
+%%
+\ifTgoAfivePaperOutput
+%\ifTgoOneSide
+\geometry{paperwidth=14.85cm,paperheight=21cm,
+heightrounded,top=1.2cm,inner=1.8cm,outer=1.8cm,bottom=2.4cm,
+headheight=16pt,headsep=11pt,footskip=14pt}
+%\else
+%\geometry{paperwidth=14.85cm,paperheight=21cm,
+%heightrounded,top=1.3cm,inner=1.5cm,outer=2.1cm,bottom=2.4cm,
+%headheight=16pt,headsep=11pt,footskip=14pt}
+%\fi
+%
+\setlength{\TgoAfterChapterSkip}{15pt}
+%
+\NewDocumentCommand\tgocover{O{A5Cover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+%%
+\else
+%%%
+\geometry{paperwidth=16cm,paperheight=22.88cm,
+heightrounded,top=1.2cm,inner=1.4cm,outer=1.4cm,bottom=1.8cm,
+headheight=16pt,headsep=11pt,footskip=14pt}
+%
+\setlength{\TgoAfterChapterSkip}{18pt}
+%
+\NewDocumentCommand\tgocover{O{TabletCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+\fi
+\fi
+%%%%%% Small Tablet%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoSmallTabletOutput
+%
+\RenewDocumentCommand\SmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XeReaderCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmartphoneCommand{+m}{#1}
+ %
+%%%%%%%%%%%%%%%%%%%%%
+\setlength{\TgoAfterChapterSkip}{11pt}
+%%
+ \geometry{paperwidth=12cm,paperheight=18.24cm,
+heightrounded,top=1.1cm,inner=0.75cm,outer=0.75cm,bottom=1.3cm,
+headheight=14pt,headsep=6pt,footskip=13pt}
+%
+\NewDocumentCommand\tgocover{O{SmallTabletCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\emergencystretch=2.5em
+\tolerance800
+\clubpenalty1000
+\widowpenalty1000%
+\fi
+%%%%%% eReader %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoeReaderOutput
+%
+\RenewDocumentCommand\eReaderCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmartphoneCommand{+m}{#1}
+ %
+%%%%%%%%%%%%%%%%%%%%%
+\setlength{\TgoAfterChapterSkip}{3pt}
+%%%%%%%%%%%
+%
+%
+\geometry{paperwidth=10.7cm,paperheight=14.4cm,
+heightrounded,top=0.82cm,left=0.5cm,right=0.5cm,bottom=0.8cm,
+headheight=18pt,headsep=5pt,footskip=10pt}
+%%
+%
+\NewDocumentCommand\tgocover{O{eReaderCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\sloppy
+\fi
+%%%%%%%% Smartphone %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoSmartphoneOutput
+%
+\RenewDocumentCommand\SmartphoneCommand{+m}{#1}
+%
+\RenewDocumentCommand\XLetterCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfourCommand{+m}{#1}
+%
+\RenewDocumentCommand\XBigTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XAfiveCommand{+m}{#1}
+%
+\RenewDocumentCommand\XTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XSmallTabletCommand{+m}{#1}
+%
+\RenewDocumentCommand\XeReaderCommand{+m}{#1}
+ %
+%%%%%%%%%%%%%%%%%%%%%
+\setlength{\TgoAfterChapterSkip}{7pt}%
+%%%%%%%%%%%
+%
+%%
+\geometry{paperwidth=10cm,paperheight=18cm,
+heightrounded,top=1.1cm,inner=0.32cm,outer=0.32cm,bottom=1cm,
+headheight=14pt,headsep=10pt,footskip=17pt}
+%
+\NewDocumentCommand\tgocover{O{SmartphoneCover}}{\InputIfFileExists{#1}{}{%
+\ClassWarning{tango}{Fichier #1.tex absent}}}
+\flushbottom\sloppy
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setlength{\abovecaptionskip}{4pt plus 1pt minus 1pt}
+\setlength{\belowcaptionskip}{4pt plus 1 pt minus 1pt}
+%
+%
+\setlength{\textfloatsep}{10pt plus 4 pt minus 3pt}
+\setlength{\intextsep}{4pt plus 2pt minus 1 pt}
+%
+%%%Environnements %%%%%%%%%%%%%%%%%%%
+%
+%%%%%% Stolen to amsthm %%%%%%%%%%%%%%%
+%
+\RenewDocumentCommand\qedsymbol{}{{\ensuremath{\color{ColorOne}\rule{7pt}{7pt}}}}%
+\RenewDocumentEnvironment{proof}{o}{%
+\IfValueTF{#1}%
+{\renewcommand\TgoTempa{#1}}
+{\renewcommand\TgoTempa{\proofname}}
+\pushQED{\qed}%
+\par\nobreak\addvspace{6pt plus 3pt minus 2pt}%
+{\color{ColorOne}\sffamily\fontseries{m}\selectfont\itshape%
+ \TgoTempa}\par\nobreak
+ }%
+{\popQED\par\addvspace{6pt plus 3pt minus 2pt}}
+%%%%
+%%%%
+\newcounter{tgoexo}%
+%%
+\NewDocumentCommand\exo{s d<> o}{%
+\IfValueTF{#2}%
+{%
+\renewcommand\TgoTempa{#2}%
+}%
+{%
+\renewcommand\TgoTempa{\TgoExerciseName}%
+}%
+\IfBooleanTF{#1}%
+{%
+\renewcommand\TgoTempb{\TgoTempa}%
+}%
+{%
+\refstepcounter{tgoexo}%
+\renewcommand\TgoTempb{\TgoTempa~\thetgoexo}%
+}%
+\IfValueTF{#3}%
+{%
+\renewcommand\TgoTempc{\TgoTempb\space(#3)}%
+}%
+{%
+\renewcommand\TgoTempc{\TgoTempb}%
+}%
+\@afterindenttrue
+\vspace{5pt plus 2pt minus 2pt}
+\par%
+\textsf{\fontseries{sb}\selectfont\TgoTempc}%
+\par\nobreak\vspace{0pt plus 1pt}\par%
+}%
+%
+\newsavebox{\TgoBox}
+%%%%
+%
+\NewDocumentCommand\sec@exo{m}{%
+\titleformat{\subsection}[block]{\filcenter\color{ColorOne}\sffamily\addfontfeature{RawFeature=-onum}%
+\fontseries{b}\selectfont}{\thesubsection}{1em}{\MakeUppercase}%
+\titlespacing{\subsection}{0em}{10pt plus 10pt minus 4pt}{8pt plus 5pt minus 3pt}%
+\subsection*{#1}
+\addcontentsline{toc}{subsection}{\protect\numberline{}#1}
+}
+%
+\NewDocumentCommand\secexo{O{\TgoExercisesSubsectionName}}{%
+\sec@exo{#1}
+\tgostandardlists
+}%
+\ExpandArgs{c}\NewDocumentCommand{secexo*}{O{\TgoExercisesSubsectionName}}{%
+\sec@exo{#1}
+\TgoSmallerSize
+\tgostandardlists
+}%
+\NewDocumentCommand\endsecexo{}
+{\renewtgolabels\par\addvspace{10pt plus 3pt minus 2pt}\par}%
+%
+\ExpandArgs{c}\NewDocumentCommand{endsecexo*}{}
+{\renewtgolabels\par\addvspace{10pt plus 3pt minus 2pt}\par}%
+%
+\NewDocumentCommand\chap@exo{m}{%
+\titleformat{\section}[block]{\filcenter\color{ColorOne}\sffamily\addfontfeature{RawFeature=-onum}%
+\fontseries{b}\selectfont\large}{\thesection}{1em}{\MakeUppercase}%
+\tgostandardlists
+\titlespacing{\section}{0em}{18pt plus 10pt minus 4pt}{8pt plus 5pt minus 3pt}%
+\section*{#1}
+\addcontentsline{toc}{section}{\protect\numberline{}#1}
+}
+%
+\NewDocumentCommand\chapexo{O{\TgoExercisesSectionName}}{%
+\chap@exo{#1}
+}%
+\ExpandArgs{c}\NewDocumentCommand{chapexo*}{O{\TgoExercisesSectionName}}{%
+\chap@exo{#1}
+\TgoSmallerSize
+}%
+\NewDocumentCommand\endchapexo{}
+{\renewlabelitems\par\addvspace{18pt plus 3pt minus 2pt}\par}%
+%
+\ExpandArgs{c}\NewDocumentCommand{endchapexo*}{}
+{\renewlabelitems\par\addvspace{18pt plus 3pt minus 2pt}\par}%
+%%%%
+%%
+\NewDocumentEnvironment{example}{O{\TgoExampleName}}{%
+\par\addvspace{6pt plus 3pt minus 2pt}%
+{\sffamily\itshape #1}\par\nobreak%
+\@afterheading}%
+{\par\addvspace{6pt plus 3pt minus 2pt}\par}
+%%%
+\NewDocumentEnvironment{remark}{O{\TgoRemarkName}}{%
+\par\addvspace{6pt plus 3pt minus 2pt}%
+{\sffamily\itshape #1. \textemdash~}\ignorespaces}%
+{\par\addvspace{6pt plus 3pt minus 2pt}}
+%%%
+%%%
+\NewDocumentEnvironment{alert}{O{\caution}}{%
+\par\addvspace{6pt plus 3pt minus 2pt}\noindent%
+{\color{ColorOne}\Large #1}\hspace{1ex}\ignorespaces}%
+{\par\addvspace{6pt plus 3pt minus 2pt}}
+%
+%%
+\NewDocumentCommand\newstatement{s m m m o}{%
+\setlength\TgoStatementParindent{\parindent}
+\ExpandArgs{c}\NewDocumentCommand{#2}{d<> o}%
+{% beginning env commands
+\refstepcounter{#3}
+\IfBooleanTF{#1}
+{%
+\renewcommand\TgoTempa{#3}
+\renewcommand\TgoTempb{subsection}
+\ifx\TgoTempa\TgoTempb
+\ifTgoTitleIndentZero
+\renewcommand\TgoStatementIndent{\noindent}
+\setlength\TgoStatementParindent{0em}
+\fi
+\renewcommand\TgoStatementNumberPrefix{\large\fontseries{sb}\selectfont%
+\UseName{the#3}\hspace{1em}}%
+\else
+\renewcommand\TgoTempb{subsubsection}
+\ifx\TgoTempa\TgoTempb
+\ifTgoTitleIndentZero
+\renewcommand\TgoStatementIndent{\noindent}
+\setlength\TgoStatementParindent{0em}
+\fi
+\fi
+\renewcommand\TgoStatementNumberPrefix{\fontseries{sb}\selectfont%
+\UseName{the#3}\hspace{1em}}%
+\fi
+\renewcommand\TgoStatementNumberSuffix{}%
+}
+{
+\renewcommand\TgoStatementNumberSuffix{~\UseName{the#3}}%
+\renewcommand\TgoStatementNumberPrefix{}%
+}
+\IfValueTF{##2}%
+{%
+\renewcommand\TgoStatementSuffix{~{\normalshape(##2)}}%
+}%
+{%
+\renewcommand\TgoStatementSuffix{}%
+}%
+\renewcommand\TgoStatementName{#4}
+\IfValueT{##1}{%
+\renewcommand\TgoStatementName{##1}
+}
+\par%
+\addvspace{8pt plus 3pt minus 2pt}%
+\begin{lrbox}{\TgoBox}%
+\par%
+%\begin{minipage}{\linewidth-\fboxsep-\TgoStatementParindent}\IfValueT{#5}{#5}%
+\begin{minipage}{\linewidth-\TgoStatementParindent}\IfValueT{#5}{#5}%
+}%
+\ExpandArgs{c}\NewDocumentCommand{end#2}{}
+{% end env commands
+\end{minipage}\end{lrbox}
+\TgoStatementIndent\parbox{\linewidth-\TgoStatementParindent}{
+{\color{ColorOne}\sffamily\fontseries{m}\selectfont\scshape\TgoStatementNameOffset%
+\TgoStatementNumberPrefix\fontseries{sb}\selectfont\TgoStatementName%
+\TgoStatementNumberSuffix\TgoStatementSuffix\par\nobreak}%
+\vspace{2pt}\par%
+\addtolength\leftskip{-\fboxsep}
+\addtolength\rightskip{-\fboxsep}
+\colorbox{ColorTwo}{%
+\usebox{\TgoBox}}}%
+\par\addvspace{6pt plus 3pt minus 2pt}\par%
+}%
+\ExpandArgs{c}\NewDocumentCommand{#2*}{d<> o}%
+{% beginning env commands
+\IfValueTF{##2}%
+{%
+\renewcommand\TgoStatementSuffix{~{\normalshape(##2)}}%
+}%
+{%
+\renewcommand\TgoStatementSuffix{}%
+}%
+\renewcommand\TgoStatementName{#4}
+\IfValueT{##1}{%
+\renewcommand\TgoStatementName{##1}
+}
+\par%
+\addvspace{8pt plus 3pt minus 2pt}%
+\begin{lrbox}{\TgoBox}%
+\par%
+%\begin{minipage}{\linewidth-\fboxsep-\TgoStatementParindent}\IfValueT{#5}{#5}%
+\begin{minipage}{\linewidth-\TgoStatementParindent}\IfValueT{#5}{#5}
+}%
+\ExpandArgs{c}\NewDocumentCommand{end#2*}{}
+{% end env commands
+\end{minipage}\end{lrbox}
+\TgoStatementIndent\parbox{\linewidth-\TgoStatementParindent}{
+{\color{ColorOne}\sffamily\fontseries{m}\selectfont\scshape\TgoStatementNameOffset%
+\fontseries{sb}\selectfont\TgoStatementName\TgoStatementSuffix\par\nobreak}%
+\vspace{2pt}\par%
+\addtolength\leftskip{-\fboxsep}
+\addtolength\rightskip{-\fboxsep}
+\colorbox{ColorTwo}{%
+\usebox{\TgoBox}}}%
+\par\addvspace{6pt plus 3pt minus 2pt}\par%
+}%
+}%%%%
+%%%%%%%%%%%%
+%%%%%%%%%%%%%
+%%%%%%%%%%%%
+\NewDocumentCommand\renewstatement{s m m m o}{%
+\setlength\TgoStatementParindent{\parindent}
+\ExpandArgs{c}\RenewDocumentCommand{#2}{d<> o}%
+{% beginning env commands
+\refstepcounter{#3}
+\IfBooleanTF{#1}
+{%
+\renewcommand\TgoTempa{#3}
+\renewcommand\TgoTempb{subsection}
+\ifx\TgoTempa\TgoTempb
+\ifTgoTitleIndentZero
+\renewcommand\TgoStatementIndent{\noindent}
+\setlength\TgoStatementParindent{0em}
+\fi
+\renewcommand\TgoStatementNumberPrefix{\large\fontseries{sb}\selectfont%
+\UseName{the#3}\hspace{1em}}%
+\else
+\renewcommand\TgoTempb{subsubsection}
+\ifx\TgoTempa\TgoTempb
+\ifTgoTitleIndentZero
+\renewcommand\TgoStatementIndent{\noindent}
+\setlength\TgoStatementParindent{0em}
+\fi
+\fi
+\renewcommand\TgoStatementNumberPrefix{\fontseries{sb}\selectfont%
+\UseName{the#3}\hspace{1em}}%
+\fi
+\renewcommand\TgoStatementNumberSuffix{}%
+}
+{
+\renewcommand\TgoStatementNumberSuffix{~\UseName{the#3}}%
+\renewcommand\TgoStatementNumberPrefix{}%
+}
+\IfValueTF{##2}%
+{%
+\renewcommand\TgoStatementSuffix{~{\normalshape(##2)}}%
+}%
+{%
+\renewcommand\TgoStatementSuffix{}%
+}%
+\renewcommand\TgoStatementName{#4}
+\IfValueT{##1}{%
+\renewcommand\TgoStatementName{##1}
+}
+\par%
+\addvspace{8pt plus 3pt minus 2pt}%
+\begin{lrbox}{\TgoBox}%
+\par%
+%\begin{minipage}{\linewidth-\fboxsep-\TgoStatementParindent}\IfValueT{#5}{#5}%
+\begin{minipage}{\linewidth-\TgoStatementParindent}\IfValueT{#5}{#5}
+}%
+\ExpandArgs{c}\RenewDocumentCommand{end#2}{}
+{% end env commands
+\end{minipage}\end{lrbox}
+\TgoStatementIndent\parbox{\linewidth-\TgoStatementParindent}{
+{\color{ColorOne}\sffamily\fontseries{m}\selectfont\scshape\TgoStatementNameOffset%
+\TgoStatementNumberPrefix\fontseries{sb}\selectfont\TgoStatementName%
+\TgoStatementNumberSuffix\TgoStatementSuffix\par\nobreak}%
+\vspace{2pt}\par%
+\addtolength\leftskip{-\fboxsep}
+\addtolength\rightskip{-\fboxsep}
+\colorbox{ColorTwo}{%
+\usebox{\TgoBox}}}%
+\par\addvspace{6pt plus 3pt minus 2pt}\par%
+}%
+\ExpandArgs{c}\RenewDocumentCommand{#2*}{d<> o}%
+{% beginning env commands
+\IfValueTF{##2}%
+{%
+\renewcommand\TgoStatementSuffix{~{\normalshape(##2)}}%
+}%
+{%
+\renewcommand\TgoStatementSuffix{}%
+}%
+\renewcommand\TgoStatementName{#4}
+\IfValueT{##1}{%
+\renewcommand\TgoStatementName{##1}
+}
+\par%
+\addvspace{8pt plus 3pt minus 2pt}%
+\begin{lrbox}{\TgoBox}%
+\par%
+%\begin{minipage}{\linewidth-\fboxsep-\TgoStatementParindent}\IfValueT{#5}{#5}%
+\begin{minipage}{\linewidth-\TgoStatementParindent}\IfValueT{#5}{#5}
+}%
+\ExpandArgs{c}\RenewDocumentCommand{end#2*}{}
+{% end env commands
+\end{minipage}\end{lrbox}
+\TgoStatementIndent\parbox{\linewidth-\TgoStatementParindent}{
+{\color{ColorOne}\sffamily\fontseries{m}\selectfont\scshape\TgoStatementNameOffset%
+\fontseries{sb}\selectfont\TgoStatementName\TgoStatementSuffix\par\nobreak}%
+\vspace{2pt}\par%
+\addtolength\leftskip{-\fboxsep}
+\addtolength\rightskip{-\fboxsep}
+\colorbox{ColorTwo}{%
+\usebox{\TgoBox}}}%
+\par\addvspace{6pt plus 3pt minus 2pt}\par%
+}%
+}%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifTgoNoStatement
+\else
+\newcounter{thm}
+\newstatement{thm}{thm}{\TgoTheoremName}[\itshape]
+\newcounter{defin}
+\newstatement{defin}{defin}{\TgoDefinitionName}
+\newcounter{coro}
+\newstatement{coro}{coro}{\TgoCorollaryName}
+\newcounter{propo}
+\newstatement{propo}{propo}{\TgoPropositionName}[\itshape]
+\newcounter{lem}
+\newstatement{lem}{lem}{\TgoLemmaName}
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%
+\AtBeginDocument{%
+ \Umathchardef\Bbbbackslash = 0 0 "E020 \relax
+ \Umathchardef\varemptyset = 0 0 "E021 \relax
+ \Umathchardef\mupvarzero = 0 0 "E022 \relax
+ \Umathchardef\mbfvarzero = 0 0 "E023 \relax
+ \Umathchardef\mupvarpartial = 0 0 "E030 \relax
+ \Umathchardef\mupvarvarpi = 0 0 "E032 \relax
+ \Umathchardef\mbfvarpartial = 0 0 "E040 \relax
+ \Umathchardef\mbfvarvarrho = 0 0 "E041 \relax
+ \Umathchardef\mbfvarvarpi = 0 0 "E042 \relax
+ \Umathchardef\mbfvec = 0 0 "E044 \relax
+ \Umathchardef\mbfwp = 0 0 "E045 \relax
+ \Umathchardef\mbfdotlessi = 0 0 "E046 \relax
+ \Umathchardef\mbfdotlessj = 0 0 "E047 \relax
+ \Umathchardef\mbfhbar = 0 0 "E048 \relax
+ \Umathchardef\mbfell = 0 0 "E049 \relax
+ \Umathchardef\mbftriangleleft = 0 0 "E04E \relax
+ \Umathchardef\mbftriangleright = 0 0 "E04F \relax
+ \Umathchardef\mbfitvarpartial = 0 0 "E060 \relax
+ \Umathchardef\mbfitvarvarrho = 0 0 "E061 \relax
+ \Umathchardef\mbfitvarvarpi = 0 0 "E062 \relax
+ \Umathchardef\mbfitwp = 0 0 "E065 \relax
+ \Umathchardef\mbfimath = 0 0 "E066 \relax
+ \Umathchardef\mbfjmath = 0 0 "E067 \relax
+ \Umathchardef\mbfithbar = 0 0 "E068 \relax
+ \Umathchardef\mbfitell = 0 0 "E069 \relax
+ \Umathchardef\mitvarpartial = 0 0 "E070 \relax
+ \Umathchardef\mitvarvarrho = 0 0 "E071 \relax
+ \Umathchardef\mitvarvarpi = 0 0 "E072 \relax
+ \Umathchardef\mithbar = 0 0 "E078 \relax
+ \Umathchardef\mapstochar = 3 0 "E08D \relax
+ \Umathchardef\lhook = 3 0 "E08E \relax
+ \Umathchardef\rhook = 3 0 "E08F \relax
+ \Umathchardef\parallelslant = 3 0 "E090 \relax
+ \Umathchardef\nparallelslant = 3 0 "E091 \relax
+ \Umathchardef\shortparallelslant = 3 0 "E092 \relax
+ \Umathchardef\nshortparallelslant = 3 0 "E093 \relax
+ \Umathchardef\lesseqslantgtr = 3 0 "E094 \relax
+ \Umathchardef\gtreqslantless = 3 0 "E095 \relax
+ \Umathchardef\lesseqqslantgtr = 3 0 "E096 \relax
+ \Umathchardef\gtreqqslantless = 3 0 "E097 \relax
+ \Umathchardef\nleqqslant = 3 0 "E098 \relax
+ \Umathchardef\ngeqqslant = 3 0 "E099 \relax
+ \Umathchardef\varsymscrE = 0 0 "E07D \relax
+ \Umathchardef\varsymscrQ = 0 0 "E07E \relax
+ \Umathchardef\varsymscrT = 0 0 "E07F \relax
+ \Umathchardef\varsymbfscrE = 0 0 "E06D \relax
+ \Umathchardef\varsymbfscrQ = 0 0 "E06E \relax
+ \Umathchardef\varsymbfscrT = 0 0 "E06F \relax
+ % \widearc and\overrightarc
+ \newcommand*{\widearc}{\Umathaccent 0 0 "E540 }%
+ \newcommand*{\overrightarc}{\Umathaccent 0 0 "20D5 }%
+ % From FourierOrns
+ \Umathchardef\forbidden = 0 0 "E0B0 \relax
+ \Umathchardef\beware = 0 0 "E0B1 \relax
+ \Umathchardef\boom = 0 0 "E0B2 \relax
+ \Umathchardef\thething = 0 0 "E0B4 \relax
+ \Umathchardef\xswordsup = 0 0 "E0B5 \relax
+ \Umathchardef\xswordsdown = 0 0 "E0B6 \relax
+ % amssymb
+ \IfPackageLoadedTF{amssymb}%
+ {\ClassWarning{tango}{%
+ Tango provides all AMS symbols.\MessageBreak
+ Loading amssymb.sty is not advisable.\MessageBreak
+ Reported}%
+ }%
+ {% AMS Symbols not referenced in unicode-math-table.tex
+ % \Umathchardef\<cmd> = <math type> <family> <slot>
+ % <math type> : \mathord=0 \mathrel=3 ; <family>=0
+ \Umathchardef\circledR = 0 0 "24C7 \relax
+ \Umathchardef\circledS = 0 0 "24C8 \relax
+ \Umathchardef\diagup = 0 0 "27CB \relax
+ \Umathchardef\diagdown = 0 0 "27CD \relax
+ \Umathchardef\shortmid = 3 0 "E0A2 \relax
+ \Umathchardef\shortparallel = 3 0 "E0A3 \relax
+ \Umathchardef\nshortmid = 3 0 "E0A4 \relax
+ \Umathchardef\nshortparallel = 3 0 "E0A5 \relax
+ \Umathchardef\lvertneqq = 3 0 "E0A6 \relax
+ \Umathchardef\gvertneqq = 3 0 "E0A7 \relax
+ \Umathchardef\nleqslant = 3 0 "E0A8 \relax
+ \Umathchardef\ngeqslant = 3 0 "E0A9 \relax
+ \Umathchardef\nleqq = 3 0 "E0AA \relax
+ \Umathchardef\ngeqq = 3 0 "E0AB \relax
+ \Umathchardef\varsubsetneq = 3 0 "E0AC \relax
+ \Umathchardef\varsupsetneq = 3 0 "E0AD \relax
+ \Umathchardef\nsubseteqq = 3 0 "E0AE \relax
+ \Umathchardef\nsupseteqq = 3 0 "E0AF \relax
+ \Umathchardef\varsubsetneqq = 3 0 "E09C \relax
+ \Umathchardef\varsupsetneqq = 3 0 "E09D \relax
+ \Umathchardef\npreceq = 3 0 "E09E \relax
+ \Umathchardef\nsucceq = 3 0 "E09F \relax
+ \let\centerdot\cdotp
+ \let\restriction\upharpoonright
+ \let\doteqdot\Doteq
+ \let\doublecup\Cup
+ \let\doublecap\Cap
+ \let\llless\lll
+ \let\gggtr\ggg
+ \let\circlearrowleft\acwopencirclearrow
+ \let\circlearrowright\cwopencirclearrow
+ \let\lozenge\mdlgwhtlozenge
+ \let\blacklozenge\mdlgblklozenge
+ \let\square\mdlgwhtsquare
+ \let\blacksquare\mdlgblksquare
+ \let\dashleftarrow\leftdasharrow
+ \let\dashrightarrow\rightdasharrow
+ \let\ntriangleleft\nvartriangleleft
+ \let\ntriangleright\nvartriangleright
+ \let\varpropto\propto
+ \let\thicksim\sim
+ \let\thickapprox\approx
+ \let\smallsmile\smile
+ \let\smallfrown\frown
+ }%
+ % latexsym
+ \IfPackageLoadedTF{latexsym}%
+ {\ClassWarning{tango}{%
+ Tango provides all LaTeX symbols.\MessageBreak
+ Loading latexsym.sty is not advisable.\MessageBreak
+ Reported}%
+ }%
+ {\let\lhd\vartriangleleft
+ \let\rhd\vartriangleright
+ \let\unlhd\trianglelefteq
+ \let\unrhd\trianglerighteq
+ \let\leadsto\rightcurvedarrow
+ \let\Box\lgwhtsquare
+ \let\Diamond\mdlgwhtdiamond
+ }%
+}
+\endinput \ No newline at end of file
diff --git a/macros/texinfo/latest/htmlxref.cnf b/macros/texinfo/latest/htmlxref.cnf
index 3ef8642eab..c803a070a5 100644
--- a/macros/texinfo/latest/htmlxref.cnf
+++ b/macros/texinfo/latest/htmlxref.cnf
@@ -1,6 +1,6 @@
# htmlxref.cnf - reference file for free Texinfo manuals on the web.
-htmlxrefversion=2024-06-28.08; # UTC
+htmlxrefversion=2024-07-20.12; # UTC
# Copyright 2010-2024 Free Software Foundation, Inc.
#
@@ -300,6 +300,9 @@ emacs node ${EMACS}/html_node/emacs/
url mono ${EMACS}/html_mono/url.html
url node ${EMACS}/html_node/url/
#
+ use-package mono ${EMACS}/html_mono/use-package.html
+ use-package node ${EMACS}/html_node/use-package/
+ #
vhdl-mode mono ${EMACS}/html_mono/vhdl-mode.html
vhdl-mode node ${EMACS}/html_node/vhdl-mode/
#
@@ -656,7 +659,7 @@ pspp node ${GS}/pspp/manual/html_node/
pyconfigure mono ${GS}/pyconfigure/manual/pyconfigure.html
pyconfigure node ${GS}/pyconfigure/manual/html_node/
-R = https://cran.r-project.org/doc/manuals
+R = https://CRAN.R-project.org/doc/manuals
R-intro mono ${R}/R-intro.html
R-lang mono ${R}/R-lang.html
R-exts mono ${R}/R-exts.html
diff --git a/macros/unicodetex/latex/polyglossia/README.md b/macros/unicodetex/latex/polyglossia/README.md
index d0ba2a157a..a3f65bbb9d 100644
--- a/macros/unicodetex/latex/polyglossia/README.md
+++ b/macros/unicodetex/latex/polyglossia/README.md
@@ -1,4 +1,4 @@
-# THE POLYGLOSSIA PACKAGE v2.1
+# THE POLYGLOSSIA PACKAGE v2.2
## Multilingual typesetting with XeLaTeX and LuaLaTeX
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX.
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.dtx b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
index 09cac66703..9e018afc66 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.dtx
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
@@ -8,7 +8,7 @@
\iffalse
%</internal>
%<*README>
-# THE POLYGLOSSIA PACKAGE v2.1
+# THE POLYGLOSSIA PACKAGE v2.2
## Multilingual typesetting with XeLaTeX and LuaLaTeX
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX.
@@ -65,7 +65,8 @@ to track the issues and follow progress.
____________________________
The polyglossia package
- (C) 2008–2010 François Charette
+ (C) 2008–2010 François Charette
+ (C) 2023-2024 Udi Fogiel
(C) 2011–2024 Arthur Reutenauer
(C) 2013 Elie Roux
(C) 2019 Bastien Roucariès
@@ -76,19 +77,29 @@ to track the issues and follow progress.
\endpreamble
\postamble
- Copyright (C) 2024 by Arthur Reutenauer <arthur 'dot' reutenauer 'at' normalesup 'dot' org>
+ Copyright (C) 2024 by The Polyglossia Team http://github.com/reutenauer/polyglossia/
- This work may be distributed and/or modified under the
- conditions of the LaTeX Project Public License, either version 1.3
- of this license of (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 `maintained'.
+ Except where otherwise noted, Polyglossia is placed under the terms of the
+ MIT licence (https://opensource.org/licenses/MIT).
+
+ 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, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR
+ A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ 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.
- The Current Maintainer of this work is Arthur Reutenauer.
+ Please report issues to http://github.com/reutenauer/polyglossia/issues
\endpostamble
@@ -98,8 +109,8 @@ to track the issues and follow progress.
\generate{\file{farsical.sty}{\from{polyglossia.dtx}{farsical.sty}}}
\generate{\file{hebrewcal.sty}{\from{polyglossia.dtx}{hebrewcal.sty}}}
\generate{\file{hijrical.sty}{\from{polyglossia.dtx}{hijrical.sty}}}
+\generate{\file{polyglossia-cjk-spacing.lua}{\from{polyglossia.dtx}{polyglossia-cjk-spacing.lua}}}
\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}}
-\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}}
\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}}
\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}}
\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}}
@@ -109,7 +120,7 @@ to track the issues and follow progress.
\generate{\file{babelsh.def}{\from{polyglossia.dtx}{babelsh.def}}}
\generate{\file{cal-util.def}{\from{polyglossia.dtx}{cal-util.def}}}
\generate{\file{xgreek-fixes.def}{\from{polyglossia.dtx}{xgreek-fixes.def}}}
-\generate{\file{gloss-acadien.ldf}{\from{polyglossia.dtx}{gloss-acadien.ldf}}}
+\generate{\file{gloss-acadian.ldf}{\from{polyglossia.dtx}{gloss-acadian.ldf}}}
\generate{\file{gloss-aeb.ldf}{\from{polyglossia.dtx}{gloss-aeb.ldf}}}
\generate{\file{gloss-af.ldf}{\from{polyglossia.dtx}{gloss-af.ldf}}}
\generate{\file{gloss-afb.ldf}{\from{polyglossia.dtx}{gloss-afb.ldf}}}
@@ -163,6 +174,7 @@ to track the issues and follow progress.
\generate{\file{gloss-ckb-Arab.ldf}{\from{polyglossia.dtx}{gloss-ckb-Arab.ldf}}}
\generate{\file{gloss-ckb-Latn.ldf}{\from{polyglossia.dtx}{gloss-ckb-Latn.ldf}}}
\generate{\file{gloss-ckb.ldf}{\from{polyglossia.dtx}{gloss-ckb.ldf}}}
+\generate{\file{gloss-classiclatin.ldf}{\from{polyglossia.dtx}{gloss-classiclatin.ldf}}}
\generate{\file{gloss-cop.ldf}{\from{polyglossia.dtx}{gloss-cop.ldf}}}
\generate{\file{gloss-coptic.ldf}{\from{polyglossia.dtx}{gloss-coptic.ldf}}}
\generate{\file{gloss-croatian.ldf}{\from{polyglossia.dtx}{gloss-croatian.ldf}}}
@@ -195,6 +207,7 @@ to track the issues and follow progress.
\generate{\file{gloss-dsb.ldf}{\from{polyglossia.dtx}{gloss-dsb.ldf}}}
\generate{\file{gloss-dutch.ldf}{\from{polyglossia.dtx}{gloss-dutch.ldf}}}
\generate{\file{gloss-dv.ldf}{\from{polyglossia.dtx}{gloss-dv.ldf}}}
+\generate{\file{gloss-ecclesiasticlatin.ldf}{\from{polyglossia.dtx}{gloss-ecclesiasticlatin.ldf}}}
\generate{\file{gloss-el-monoton.ldf}{\from{polyglossia.dtx}{gloss-el-monoton.ldf}}}
\generate{\file{gloss-el-polyton.ldf}{\from{polyglossia.dtx}{gloss-el-polyton.ldf}}}
\generate{\file{gloss-el.ldf}{\from{polyglossia.dtx}{gloss-el.ldf}}}
@@ -277,9 +290,6 @@ to track the issues and follow progress.
\generate{\file{gloss-lao.ldf}{\from{polyglossia.dtx}{gloss-lao.ldf}}}
\generate{\file{gloss-latex.ldf}{\from{polyglossia.dtx}{gloss-latex.ldf}}}
\generate{\file{gloss-latin.ldf}{\from{polyglossia.dtx}{gloss-latin.ldf}}}
-\generate{\file{gloss-latinclassic.ldf}{\from{polyglossia.dtx}{gloss-latinclassic.ldf}}}
-\generate{\file{gloss-latinecclesiastic.ldf}{\from{polyglossia.dtx}{gloss-latinecclesiastic.ldf}}}
-\generate{\file{gloss-latinmedieval.ldf}{\from{polyglossia.dtx}{gloss-latinmedieval.ldf}}}
\generate{\file{gloss-latvian.ldf}{\from{polyglossia.dtx}{gloss-latvian.ldf}}}
\generate{\file{gloss-lithuanian.ldf}{\from{polyglossia.dtx}{gloss-lithuanian.ldf}}}
\generate{\file{gloss-lo.ldf}{\from{polyglossia.dtx}{gloss-lo.ldf}}}
@@ -292,6 +302,7 @@ to track the issues and follow progress.
\generate{\file{gloss-malay.ldf}{\from{polyglossia.dtx}{gloss-malay.ldf}}}
\generate{\file{gloss-malayalam.ldf}{\from{polyglossia.dtx}{gloss-malayalam.ldf}}}
\generate{\file{gloss-marathi.ldf}{\from{polyglossia.dtx}{gloss-marathi.ldf}}}
+\generate{\file{gloss-medievallatin.ldf}{\from{polyglossia.dtx}{gloss-medievallatin.ldf}}}
\generate{\file{gloss-mk.ldf}{\from{polyglossia.dtx}{gloss-mk.ldf}}}
\generate{\file{gloss-ml.ldf}{\from{polyglossia.dtx}{gloss-ml.ldf}}}
\generate{\file{gloss-mn.ldf}{\from{polyglossia.dtx}{gloss-mn.ldf}}}
@@ -351,16 +362,9 @@ to track the issues and follow progress.
\generate{\file{gloss-welsh.ldf}{\from{polyglossia.dtx}{gloss-welsh.ldf}}}
\generate{\file{gloss-zh-CN.ldf}{\from{polyglossia.dtx}{gloss-zh-CN.ldf}}}
\generate{\file{gloss-zh-TW.ldf}{\from{polyglossia.dtx}{gloss-zh-TW.ldf}}}
-\generate{\file{arabicdigits.map}{\from{polyglossia.dtx}{arabicdigits.map}}}
-\generate{\file{bengalidigits.map}{\from{polyglossia.dtx}{bengalidigits.map}}}
-\generate{\file{devanagaridigits.map}{\from{polyglossia.dtx}{devanagaridigits.map}}}
-\generate{\file{farsidigits.map}{\from{polyglossia.dtx}{farsidigits.map}}}
-\generate{\file{gurmukhidigits.map}{\from{polyglossia.dtx}{gurmukhidigits.map}}}
-\generate{\file{odiadigits.map}{\from{polyglossia.dtx}{odiadigits.map}}}
-\generate{\file{thaidigits.map}{\from{polyglossia.dtx}{thaidigits.map}}}
\def\MetaPrefix{-- }
+\generate{\file{polyglossia-cjk-spacing.lua}{\from{polyglossia.dtx}{polyglossia-cjk-spacing.lua}}}
\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}}
-\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}}
\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}}
\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}}
\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}}
@@ -405,8 +409,10 @@ to track the issues and follow progress.
]{hyperref}
\usepackage{array}
\usepackage{metalogo}
-\let\XeTeX\undefined
-\let\XeLaTeX\undefined
+\ifxetex
+ \let\XeTeX\undefined
+ \let\XeLaTeX\undefined
+\fi
\usepackage[babelshorthands]{polyglossia}
\usepackage{farsical}
%
@@ -506,15 +512,23 @@ to track the issues and follow progress.
\usepackage[osf]{libertine}
% Monospace: Package dejavu-otf
\setmonofont[Scale=MatchLowercase]{DejaVuSansMono}
-% Libertine includes Hebrew, but we load it separately since
-% osf is not supported with this script and we want to avoid the
-% respective warnings
-\newfontfamily\hebrewfont[Script=Hebrew]{Linux Libertine O}
+% Package culmus
+\newfontfamily\hebrewfont[Script=Hebrew]{DavidCLM}[
+ UprightFont = *-Medium,
+ BoldFont = *-Bold,
+ Extension = .otf,
+ ItalicFont = *-MediumItalic,
+ BoldItalicFont = *-BoldItalic]
% Package dejavu-otf
\newfontfamily\armenianfont[Script=Armenian,Scale=MatchLowercase]{DejaVuSans}
\newfontfamily\georgianfont[Scale=MatchLowercase]{DejaVuSerif}
% Package amiri
-\newfontfamily\arabicfont[Script=Arabic]{Amiri-Regular}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}[%
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ Extension = .ttf,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic]
% No Syriac otf/ttf font seems available on CTAN
% This one, from the Syriac Institute, is included on Linux
% in the x11-fonts set and can be downloaded from
@@ -850,7 +864,7 @@ to track the issues and follow progress.
% dv & divehi & \tabularnewline
% el & greek & \tabularnewline
% el-monoton & greek & variant=monotonic [\emph{default}] \tabularnewline
-% el-polyton & greek & varant=polytonic \tabularnewline
+% el-polyton & greek & variant=polytonic \tabularnewline
% en & english & \tabularnewline
% en-AU & english & variant=australian \tabularnewline
% en-CA & english & variant=canadian \tabularnewline
@@ -1164,13 +1178,25 @@ to track the issues and follow progress.
%
% \section{Font setup}
%
-% With polyglossia it is possible to associate a specific font with any script or language
+% With \pkg{polyglossia} it is possible to associate a specific font with any script or language
% that occurs in the document. That font should always be defined as
-% \cmd{\⟨script⟩font}\ or \cmd{\⟨language⟩font}.
+% \cmd{\⟨script⟩font}\ or \cmd{\⟨language⟩font}. Note that ¦⟨language⟩¦ points to the \pkg{polyglossia}
+% language name, ¦⟨script⟩¦ might point either to an OpenType script name as defined by \pkg{fontspec}
+% (\eg ¦Latin¦) \new{2.2}or a BCP-47 script tag (\eg ¦Latn¦), though the script is fully lower-cased
+% in the \cmd{\⟨script⟩font}\ command.
+%
% For instance, if the default font defined by \cmd\setmainfont\
% does not support Greek, then one can define the font used to display Greek with:\\
-% \centerline{ \cmd\newfontfamily\cmd{\greekfont[Script=Greek,\meta{…}]\marg{font}}. }
-% Note that polyglossia will use the font defined as is, so assure to do all necessary settings
+% \centerline{\cmd\newfontfamily\cmd{\greekfont[Script=Greek,\meta{…}]\marg{font}}}
+% ^^A
+% If you want to setup a blackletter font specifically for the German blackletter script variant,
+% you might do so by:\\
+% \centerline{\cmd\newfontfamily\cmd{\latffont[\meta{…}]\marg{font}}}
+% ^^A
+% Setting up a font specifically for traditional Chinese is possible via:\\
+% \centerline{\cmd\newfontfamily\cmd{\hantfont[Script=CJK,\meta{…}]\marg{font}}}
+% ^^A
+% Note that \pkg{polyglossia} will use the font defined as is, so assure to do all necessary settings
% (please refer to the \pkg{fontspec} documentation for details).
% For instance, if \cmd\arabicfont\ is explicitly defined, then the option ¦Script=Arabic¦ should
% be included in that definition.
@@ -1180,10 +1206,12 @@ to track the issues and follow progress.
% \cmd{\⟨script⟩fontsf} or \cmd{\⟨language⟩fontsf} and \cmd{\⟨script⟩fonttt} or \cmd{\⟨language⟩fonttt}, respectively.
%
% Whenever a new language is activated, \pkg{polyglossia} will first check whether
-% a font has been defined for that language or – for languages in non-Latin scripts –
-% for the script it uses. If it is not defined, it will use the currently active font
-% and – in the case of OpenType fonts – will attempt to turn on the appropriate
-% OpenType tags for the script and language used, in case these are available in
+% a font has been defined for that language. If this is not the case, it will check whether a font associated
+% with the BCP-47 script tag of the current language is defined. If this also isn't the case, \pkg{polyglossia}
+% will finally check (but this only for languages in non-Latin scripts) whether there is a font associated
+% with the OpenType script tag. If none of these fonts is defined, \pkg{polyglossia} will use the currently
+% active font as defined by ¦\setmainfont¦, ¦\setsansfont¦ or ¦\setmonofont¦ and – in the case of OpenType fonts –
+% will attempt to turn on the appropriate OpenType tags for the script and language used, in case these are available in
% the font, by means of \pkg{fontspec}’s \cmd\addfontfeature. If the current font
% does not appear to support the script of that language, an error message is
% displayed.
@@ -1978,7 +2006,7 @@ to track the issues and follow progress.
% \end{table}
% \item \xpgchoicekey[1.46]{hyphenation}{\xpgvalue{classic}, \xpgvalue{modern}, or \xpgvalue{liturgical}}
% There are three different sets of hyphenation patterns for Latin. Separate
-% documention for them is available on the
+% documentation for them is available on the
% Internet.\footnote{Refer to \url{https://github.com/gregorio-project/hyphen-la/blob/master/doc/README.md\#hyphenation-styles}}
% Each of the four variants mentioned above has its default set of hyphenation
% patterns as indicated by table \ref{tab:latin-hyphenation}. Use the
@@ -2050,7 +2078,7 @@ to track the issues and follow progress.
% \item[¦'AE¦] for Ǽ (AE ligature with acute), also available for \'Œ
% \end{shorthands}
% \item \xpgboolkeyfalse[1.46]{prosodicshorthands}
-% Enable shorthands for prosodic marks (macrons and breves) very similiar to
+% Enable shorthands for prosodic marks (macrons and breves) very similar to
% those provided by \pkg{babel-latin} using the ¦withprosodicmarks¦
% modifier.
% Note that the active ¦=¦ character used for macrons will cause problems with
@@ -2956,7 +2984,7 @@ to track the issues and follow progress.
% \subsection{Islamic calendar (hijrical.sty)}\label{sec:hijrical}
% This package computes dates in the lunar Islamic (Hijra) calendar.\footnote{ %
% It makes use of the arithmetical algorithm in chapter 6 of
-% Reingold \& Gershowitz, \textit{Calendrical calculation: the Millenium edition}
+% Reingold \& Gershowitz, \textit{Calendrical calculation: the Millennium edition}
% (Cambridge University Press, 2001).\label{reingold}}
% It provides two macros for the end-user.
% The command
@@ -3091,6 +3119,31 @@ to track the issues and follow progress.
%
% \bgroup\footnotesize
%
+% \subsection*{2.2 (2024/07/15)}
+%
+% \subsubsection*{Bug fixes}
+% \begin{itemize}
+% \item Fix \texttt{lang} environment (\TXI{633}).
+% \item Fix first number of Maghrib abjad numbering for Algeria, Morocco and
+% Tunisia (\TXI{640}).
+% \item Fix some captions strings in Bulgarian, Chinese, Esperanto, Estonian, Hindi,
+% Latvian, and Slovak (\TXP{651})
+% \item Improve performance with multilingual documents that have a TOC (\TXI{641}).
+% \end{itemize}
+%
+% \subsubsection*{New Features}
+% \begin{itemize}
+% \item Add possibility to associate a font to a language/variant with reference to
+% a BCP-47 script tag (\TXI{636}).
+% \end{itemize}
+%
+% \subsubsection*{Internal work}
+% \begin{itemize}
+% \item The major rewrite of the package code has been finished. More code has been cleaned up,
+% and \pkg{polyglossia} employs modern concepts (\pkg{latex3} and modern \LaTeXe).
+% All key-val handling uses \pkg{l3keys} now rather than \pkg{xkeyval}.
+% \end{itemize}
+%
% \subsection*{2.1 (2024/03/07)}
%
% \subsubsection*{Bug fixes}
@@ -4149,7 +4202,7 @@ to track the issues and follow progress.
% \section{Acknowledgements (by François Charette)}
% \pkg{Polyglossia} is notable for being a recycle box of previous contributions
% by other people. I take this opportunity to thank the following individuals,
-% whose splendid work has made my task almost trivial in comparision: \TA{Johannes
+% whose splendid work has made my task almost trivial in comparison: \TA{Johannes
% Braams} and the numerous contributors to the \pkg{babel} package (in particular
% \TA{Boris Lavva} and others for its Hebrew support), \TA{Alexej Kryukov} (\pkg{antomega}),
% \TA{Will Robertson} (\pkg{fontspec}), \TA{Apostolos Syropoulos} (\pkg{xgreek}), \TA{Youssef Jabri}
@@ -4176,7 +4229,7 @@ to track the issues and follow progress.
% since we took over.
% In alphabetical order: \TA{Ignas Anikevicius}, \TA{Sina Ahmadi}, \TA{Matthew Bertucci}, \TA{Wouter Bolsterlee}, \TA{Christian Buhtz},
% \TA{Ashok Das}, \TA{Oleg Domanov}, user \TA{fakhriaunur}, \TA{Philipp Gesang}, \TA{Kevin Godby},
-% \TA{Enrico Gregorio}, \TA{Khaled Hosny}, \TA{Najib Idrissi}, user \TA{julroy67}, \TA{Dohyun Kim}, \TA{Phil Kime},
+% \TA{Enrico Gregorio}, \TA{Khaled Hosny}, \TA{Stephen Huan}, \TA{Najib Idrissi}, user \TA{julroy67}, \TA{Dohyun Kim}, \TA{Phil Kime},
% \TA{Mike Kroutikov}, \TA{Ivan Kokan}, \TA{Caleb Maclennan}, \TA{Gyula Magyarkuti}, \TA{José Mancera}, \TA{Miquel Ortega},
% \TA{Yevgen Pogribnyi}, \TA{Will Robertson}, \TA{Maïeul Rouquette}, \TA{Elie Roux}, \TA{Hugo Roy}, \TA{Guy Rutenberg},
% \TA{Marcin Serwin}, \TA{Arvinder Singh}, \TA{Avisek Jena}, \TA{Philipp Stephani}, \TA{Niranjan Tambe}, \TA{Takuji Tanaka},
@@ -4208,33 +4261,28 @@ to track the issues and follow progress.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage
- {polyglossia} {2024/03/07} {v2.1}
+ {polyglossia} {2024/07/15} {v2.2}
{Modern multilingual typesetting with XeLaTeX and LuaLaTeX}
+% TODO Handle remaining uses in the gloss files (\patchcmd)
+% and remove package call afterwards
\RequirePackage{etoolbox}
-\RequirePackage{xkeyval}[2008/08/13]
% Will raise error if used with anything else than XeTeX or LuaTeX
\RequirePackage{fontspec}[2010/06/08]% v2.0
\RequirePackage{iftex}
\prg_generate_conditional_variant:Nnn \clist_if_in:Nn {Ne} {TF, T, F} % check if needed
-% correct a bug in tracklang
-\AddToHook{package/tracklang/after}{%
- \IfPackageAtLeastTF{tracklang}{2019/08/30}
- {}
- {\cs_gset_eq:NN \AddTrackedLangage \AddTrackedLanguage}
-}
-
%% The following is for compatibility with Babel-aware package:
% \languageshorthands is provided by babelsh.def, which is
% only loaded by some glosses, but some classes presuppose
% it is there generally. So let's provide a stub:
\ProvideDocumentCommand \languageshorthands { m } {}
% These have to be provided at the end of the preamble
-\AddToHook{begindocument/before}{
- \cs_gset_eq:NN \bbl@set@language \xpg@set@language@aux % for biblatex
- \cs_gset_eq:NN \bbl@main@language \xpg@main@language % for biblatex
+\hook_gput_code:nnn {begindocument/before} {.}
+{
+ \cs_gset_eq:NN \bbl@set@language \xpg_set_language_aux:nn % for biblatex
+ \cs_gset_eq:NN \bbl@main@language \xpg_main_language_tl % for biblatex
\ProvideDocumentCommand \texorpdfstring { m m } { #1 } % dummy command if hyperref is not loaded
}
@@ -4243,16 +4291,15 @@ to track the issues and follow progress.
%% \l@nohyphenation is defined in polyglossia.lua
\sys_if_engine_luatex:TF
{
- \RequirePackage{luatexbase} % already included by fontspec, but needed here
- \RequireLuaModule{polyglossia}
+ \lua_load_module:n{polyglossia}
}{
\cs_if_free:cT { l@nohyphenation }
{ \chardef\l@nohyphenation=255 }
}
-% Which version of XeTeX do we use? What is the boudary class? 4095 or 255
+% Which version of XeTeX do we use? What is the boundary class? 4095 or 255
\cs_if_exist:cTF { e@alloc@intercharclass@top }
- { \let\xpg@boundaryclass=\e@alloc@intercharclass@top }
+ { \cs_gset_eq:NN \xpg@boundaryclass \e@alloc@intercharclass@top }
{ \chardef\xpg@boundaryclass=\@cclv }
% Useful for getting list of loaded languages and variants. Like babel's bbl@loaded
@@ -4288,18 +4335,18 @@ to track the issues and follow progress.
\cs_new_nopar:Nn \__xpg_at_begin_document:
{
% save various command
- \let\latin@alph\@alph % TODO rename when we have the C locale
- \let\latin@Alph\@Alph % TODO rename when we have the C locale
+ \cs_gset_eq:cc{latin@alph}{@alph}% TODO rename when we have the C locale
+ \cs_gset_eq:cc{latin@Alph}{@Alph}% TODO rename when we have the C locale
% push to C language gloss
- \let\polyglossia@Clang@@arabic\@arabic
- \let\polyglossia@Clang@arabic\arabic
+ \cs_gset_eq:cc{xpg_Clang_arabic}{@arabic}
\xpg_initial_setup:
% apply \familydefault changes
- \xpg@set@familydefault
+ \xpg_set_familydefault:
}
-\AddToHook{begindocument}{
+\hook_gput_code:nnn {begindocument} {.}
+{
\__xpg_at_begin_document:
}
@@ -4307,7 +4354,8 @@ to track the issues and follow progress.
% loaded after \set[main|other]language
% Track whether the main language has been set
\bool_new:N \g_xpg_main_lang_set_bool
-\AddToHook{begindocument/end}{
+\hook_gput_code:nnn {begindocument/end} {.}
+{
% now we have the C locale definition: select the language
\__xpg_at_begin_document_selectlanguage:
\bool_gset_true:N \g_xpg_main_lang_set_bool
@@ -4315,99 +4363,177 @@ to track the issues and follow progress.
\__xpg_at_begin_document_hyphenation:
}
-%% custom message macros
-\providecommand*{\xpg@error}[1]{
- \PackageError{polyglossia}{#1}{}
+%
+% MESSAGES
+%
+
+% message templates
+\msg_new:nnn { polyglossia } { general } { #1 }
+
+\msg_new:nnn { polyglossia } { languagenotloaded }
+{
+ The~ language~ #1~ is~ not~ loaded.~ You~ must~ load~ it~ in~ order~ to~ use~ it.
}
+\msg_redirect_name:nnn { polyglossia } { languagenotloaded } { critical }
-\providecommand*{\xpg@warning}[1]{
- \PackageWarning{polyglossia}{#1}
+\msg_new:nnn { polyglossia } { languagenolongerloaded }
+{
+ The~ language~ #1~ is~ no~ longer~ loaded.~ Please~ rerun~ LaTeX.
}
+\msg_redirect_name:nnn { polyglossia } { languagenolongerloaded } { warning }
-\providecommand*{\xpg@info}[1]{
- \PackageInfo{polyglossia}
- {#1\@gobble}
-} %% the \@gobble is to prevent displaying the line nr
+\msg_new:nnn { polyglossia } { unknownlocalnumeral }
+{
+ Unknown~ key~ "#1"~ in~ \string\localnumeral.
+}
-%TODO change all instances of \xpg@nopatterns in gloss-*.ldf files
-\providecommand*{\xpg@nopatterns@fallback}[2][nohyphenation]{
- \xpg@warning{No~ hyphenation~ patterns~ were~ loaded~ for~ `#2'\MessageBreak
- I~ will~ use~ \string\language=\string\l@ #1\space instead}
- \expandafter\adddialect\csname l@#2\expandafter\endcsname\csname l@#1\endcsname\relax}
+\msg_new:nnn { polyglossia } { localnumeralemptyvalue }
+{
+ Keys~ of~ \string\localnumeral~ must~ have~ a~ value.
+}
-\providecommand*{\xpg@nopatterns}[1]{
- \xpg@warning{No~ hyphenation~ patterns~ were~ loaded~ for~ `#1'\MessageBreak
- I~ will~ use~ \string\language=\string\l@nohyphenation\space instead}
- %%TODO? \expandafter\adddialect\csname l@#1\endcsname\l@nohyphenation\relax
- }
+\msg_new:nnn { polyglossia } { illvalue }
+{
+ Illegal~ value~ (#1)~ for~ #2!
+}
-\def\xpg@ill@value#1#2{
- \xpg@warning{Illegal~ value~ (#1)~ for~ #2}}
+\msg_new:nnn { polyglossia } { illarg }
+{
+ Invalid~ argument~ (#1)~ for~ #2!
+}
-% error out if lang is not loaded
-\cs_new_nopar:Nn \xpg_error_if_lang_not_loaded:n
+\msg_new:nnn { polyglossia } { nopatterns }
{
- \seq_if_in:NeF \__xpg_langs_loaded {#1}
- {
- \xpg@error{language~ #1~ is~ not~ loaded.~ Please~ load~ it~ before~ using~ it.}
- }
+ No~ hyphenation~ patterns~ were~ loaded~ for~ `#2' \iow_newline:
+ I~ will~ use~ \string\language=\string\l@ #1\space instead.
}
-\msg_new:nnn { polyglossia } { languagenotloaded }
+\msg_new:nnn { polyglossia } { undefcmd }
{
- The~ language~ #1~ is~ not~ loaded.~ You~ should~ load~ it.
+ \tl_to_str:N {#1} ~ is~ not~ defined!
}
-\msg_redirect_name:nnn { polyglossia } { languagenotloaded } { critical }
-\msg_new:nnn { polyglossia } { languagenolongerloaded }
+%% custom message macros
+\cs_new_nopar:Nn \xpg_error_msg:n
{
- The~ language~ #1~ is~ no~ longer~ loaded.~ Please~ rerun~ LaTeX.
+ \exp_args:Nnne \msg_error:nnn { polyglossia } { general } { #1 }
}
-\msg_redirect_name:nnn { polyglossia } { languagenolongerloaded } { warning }
-\msg_new:nnn { polyglossia } { unknownlocalnumeral }
+\cs_new_nopar:Nn \xpg_warning_msg:n
{
- Unknown~ key~ "#1"~ in~ \string\localnumeral.
+ \exp_args:Nnne \msg_warning:nnn { polyglossia } { general } { #1 }
}
-\msg_new:nnn { polyglossia } { localnumeralemptyvalue }
+\cs_new_nopar:Nn \xpg_info_msg:n
+{
+ \exp_args:Nnne \msg_info:nnn { polyglossia } { general } { #1 }
+}
+
+\cs_new_nopar:Nn \xpg_no_patterns_msg:n
{
- Keys~ of~ \string\localnumeral~ must~ have~ value.
+ \msg_warning:nnnn { polyglossia } { nopatterns } { nohyphenation } { #1 }
}
+\cs_new_nopar:Nn \xpg_ill_value_msg:nn
+{
+ \msg_warning:nnnn { polyglossia } { illvalue } { #1 } { #2 }
+}
+
+\cs_new_nopar:Nn \xpg_ill_arg_msg:nn
+{
+ \msg_error:nnnn { polyglossia } { illarg } { #1 } { #2 }
+}
+
+% error out if lang is not loaded
+\cs_new_nopar:Nn \xpg_error_if_lang_not_loaded:n
+{
+ \seq_if_in:NeF \__xpg_langs_loaded {#1}
+ {
+ \msg_error:nnn { polyglossia } { languagenotloaded } { #1 }
+ }
+}
%% use macro if defined, else warn that it is not
\cs_new_nopar:Nn \__xpg_use_or_warn:N
{
\cs_if_exist_use:NF {#1}
{
- \xpg@warning { \tl_to_str:N {#1} ~ is~ not~ defined }
+ \msg_error:nnn { polyglossia } { undefcmd } { #1 }
}
}
\cs_generate_variant:Nn \__xpg_use_or_warn:N {c}
+% gloss message interface
+\cs_set_eq:cc { xpg@error } { xpg_error_msg:n }
+\cs_set_eq:cc { xpg@warning } { xpg_warning_msg:n }
+\cs_set_eq:cc { xpg@info } { xpg_info_msg:n }
+\cs_set_eq:cc { xpg@ill@value } { xpg_ill_value_msg:nn }
+
+
+\NewDocumentCommand \XPGNoPatternsFallback { O{ nohyphenation } m }
+{
+ \msg_warning:nnnn { polyglossia } { nopatterns } { #1 } { #2 }
+ \exp_args:Ncc \adddialect {l@#2} {l@#1}
+}
+
+\NewDocumentCommand \CheckHyphenationPatterns { m }
+{
+ \xpg_if_language_defined:nF {#1}
+ {
+ \XPGNoPatternsFallback{#1}
+ }
+}
+
+%
+% END MESSAGES
+
%% ensure directionality if bidi is loaded, else ignore
-\def\@@ensure@dir#1{\ifcsundef{@ensure@dir}{#1}{\@ensure@dir{#1}}}
-\def\@@ensure@maindir#1{\ifcsundef{@ensure@maindir}{#1}{\@ensure@maindir{#1}}}
+%%% FIXME still used?
+\cs_new_nopar:Npn \@@ensure@dir #1
+{
+ \cs_if_exist_use:c{@ensure@dir}{#1}
+}
-%% Used by the language definitions files for right-to-left languages
-\NewDocumentCommand \RequireBidi {}
+\cs_new_nopar:Npn \@@ensure@maindir #1
{
- \sys_if_engine_luatex:TF
- {\ifx\@onlypreamble\@notprerr\else\RequirePackage{luabidi}\fi}
- {\ifx\@onlypreamble\@notprerr\else\RequirePackage{bidi}\fi}
+ \cs_if_exist_use:c{@ensure@maindir}{#1}
}
-% if #1 is LR run #2 else #3
+% if we are in the document preamble run T else F
+\prg_set_conditional:Nnn \xpg_if_in_preamble: {T, F, TF}
+{
+ \cs_if_eq:NNTF { \@onlypreamble } { \@notprerr }
+ {
+ \prg_return_false:
+ }
+ {
+ \prg_return_true:
+ }
+}
+
+%% Used by the language definitions files for right-to-left languages
+\DeclareDocumentCommand \RequireBidi {}
+ {
+ \xpg_if_in_preamble:T
+ {
+ \sys_if_engine_luatex:TF
+ { \RequirePackage{luabidi} }
+ { \RequirePackage{bidi} }
+ }
+ \DeclareDocumentCommand \RequireBidi {} {}
+ }
+
+% if #1 is LR run T else F
\prg_set_conditional:Nnn \__xpg_if_LR_str:n {p, T, F, TF}
{
- \str_case_e:nnF{#1}{
+ \str_case_e:nnF{#1}
+ {
{LR}{\prg_return_true:}
{RL}{\prg_return_false:}
}
{
- \xpg@error{Unknown~ direction~#1}
+ \xpg_error_msg:n {Unknown~ direction~#1}
\prg_return_false:
}
}
@@ -4420,17 +4546,18 @@ to track the issues and follow progress.
{
\__xpg_if_LR_str:nF {#1}
{
- \xpg@error{right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}
+ \xpg_error_msg:n {right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}
}
}
\cs_new_nopar:Nn \__xpg_set_text_direction:n
{
\__xpg_if_LR_str:nF {#1}
{
- \xpg@error{right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}
+ \xpg_error_msg:n {right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}
}
}
-\AddToHook{package/bidi/after}{
+\hook_gput_code:nnn {package/bidi/after} {.}
+{
\cs_gset_nopar:Nn \__xpg_set_par_direction:n
{
\__xpg_if_LR_str:nTF{#1}
@@ -4452,7 +4579,8 @@ to track the issues and follow progress.
}
}
}
-\AddToHook{package/luabidi/after}{
+\hook_gput_code:nnn {package/luabidi/after} {.}
+{
\cs_gset_nopar:Nn \__xpg_set_par_direction:n
{
\__xpg_if_LR_str:nTF{#1}
@@ -4481,13 +4609,21 @@ to track the issues and follow progress.
{ \cs_new_nopar:Nn \__xpg_setRTLmain: { \@RTLmaintrue\setnonlatin } }
%% compatibility with babel
-\let\addto\gappto % gappto is defined in etoolbox
+\cs_set:Npn \addto #1 #2
+{
+ \cs_if_exist:NF { #1 }
+ { \cs_new:Npn { #1 } {} }
+ \tl_gput_right:Nn { #1 } { #2 }
+}
-%% NEW EXPERIMENTAL SETUP INTERFACE FOR GLOSS FILES
+%% SETUP INTERFACE FOR GLOSS FILES
%% options currently available:
%% language : the name of the language (as understood by fontspec)
%% hyphennames : the different hyphenation patterns to try (comma separated list)
-%%% TODO: if pattern is prefixed by !, then it should be loaded as a fallback, with \xpg@nopatterns@fallback - i.e. with a warning: e.g. sanskrit for hindi, or catalan for asturian. – Also for languages with variants! (English and German, etc.)
+%%% TODO: if pattern is prefixed by !, then it should be loaded as a fallback,
+%%%% with \CheckHyphenationPatterns - i.e. with a warning: e.g. sanskrit for hindi,
+%%%% or catalan for asturian. – Also for languages with variants!
+%%%% (English and German, etc.)
%% script : the name of the script (as understood by fontspec) – default is Latin
%% scripttag : the OpenType tag for the script
%% langtag : the OpenType tag for the language
@@ -4495,19 +4631,20 @@ to track the issues and follow progress.
%% frenchspacing : boolean
%% indentfirst : boolean
%% fontsetup : boolean
-%% TODO: nouppercase : boolean (for scripts like Arabic, Devanagari, etc which have no concept of uppercase/lowercase)
+%% TODO: nouppercase : boolean (for scripts like Arabic, Devanagari, etc which have
+%% no concept of uppercase/lowercase)
%% TODO: localalph = {<alph_csname>,<Alph_csname>}
%% TODO: localnumeral = <csname>
%% or even better localdigits = {0123456789} for fully automatic setup
-\newcommand*\PolyglossiaSetup[2]{
+\NewDocumentCommand \PolyglossiaSetup { m m }
+{
\__xpg_keys_define_lang:n{#1}
\keys_set:nn { polyglossia / #1 } { #2 }
\__xpg_setup_hyphen:n {#1}
%define booleans etoolbox style and set defaults
%% TODO ? \providetoggle{#1@setup@done}%
- % we initialize these so that we can use \gappto below
- \csgdef{init@extras@#1}{}
- \csgdef{init@noextras@#1}{} % we don't use this yet: remove?
+ % we initialize this so that we can append below
+ \cs_gset:cpn {init@extras@#1} {}
% here we do the fontsetup:
\__xpg_auto_setupfont:n { #1 }
%% TODO? \toggletrue{#1@setup@done}
@@ -4526,35 +4663,41 @@ to track the issues and follow progress.
\clist_map_inline:nn { #1 } { \keys_set:nn { polyglossia / ##1 } { #2 } }
}
-
+\bool_new:N \l__xpg_have_hyphen_bool
% setup hyphennames from a str list of hyphen
\cs_new:Nn \__xpg_setup_hyphen:n
{
- \clist_set:Ne{\l_tmpa_clist}{\prop_item:Nn \g_xpg_langsetup_prop {#1 / hyphennames}}
- \providebool{havehyphen}
- \boolfalse{havehyphen}
+ \clist_set:Ne{\l_tmpa_clist}{\prop_item:Nn \l_xpg_langsetup_prop {#1 / hyphennames}}
+ \bool_set_false:N \l__xpg_have_hyphen_bool
% for each hyphen in the set until we find one that works
- \clist_map_inline:Nn \l_tmpa_clist {
- \ifbool{havehyphen}{}{
+ \clist_map_inline:Nn \l_tmpa_clist
+ {
+ \bool_if:NF \l__xpg_have_hyphen_bool
+ {
% check if language hyphenname is defined
- \__xpg_check_if_exist_l@:nF{#1}{
+ \__xpg_pattern_check_if_exists:nF{#1}
+ {
% if not, first consider nohyphenation
\str_if_eq:nnTF{##1}{nohyphenation}
{
\cs_gset_eq:cc{l@#1}{l@##1}
- \global\booltrue{havehyphen}
- }{
+ \bool_gset_true:N \l__xpg_have_hyphen_bool
+ }
+ {
% then test if hyphenation is defined
- \xpg@ifdefined{##1}{
+ \xpg_if_language_defined:nT {##1}
+ {
% test if language hyphenation is nohyphenation
- \cs_if_eq:cNF{l@#1}{\l@nohyphenation}{\global\booltrue{havehyphen}}{%
+ \cs_if_eq:cNTF{l@#1}{\l@nohyphenation}
+ { \bool_gset_true:N \l__xpg_have_hyphen_bool }
+ {
% if false define language to hyphenation if it is not equal...
\str_if_eq:nnF{#1}{##1}{\cs_gset_eq:cc{l@#1}{l@##1}}
% ...and load
- \xpg@set@hyphenation@patterns{##1}
- \global\booltrue{havehyphen}
- }
- }{}
+ \xpg_set_hyphenation_patterns:n {##1}
+ \bool_gset_true:N \l__xpg_have_hyphen_bool
+ }
+ }
}
}
}
@@ -4562,19 +4705,17 @@ to track the issues and follow progress.
% if l@#1 does not yet exist,
% we assign it to nohyphenation
% we do this here in case and if the hyphennames key was omitted
- \ifbool{havehyphen}{}{
- \xpg@ifdefined{#1}{}
- {
- \xpg@nopatterns{#1}
- \expandafter\adddialect\csname l@#1\endcsname\l@nohyphenation\relax
- }
+ \bool_if:NF \l__xpg_have_hyphen_bool
+ {
+ \CheckHyphenationPatterns{#1}
}
- \csdef{#1@language}{
- \polyglossia@setup@language@patterns{#1}
+ \cs_gset:cpn {#1@language}
+ {
+ \SetupPolyglossiaLangPatterns{#1}
}
% setup hyphenmins
\clist_set:Ne \l_tmpa_clist
- { \prop_item:Nn \g_xpg_langsetup_prop {#1 / hyphenmins} }
+ { \prop_item:Nn \l_xpg_langsetup_prop {#1 / hyphenmins} }
\cs_if_eq:cNF {l@#1} \l@nohyphenation
{
\use:x
@@ -4586,7 +4727,8 @@ to track the issues and follow progress.
}
}
-\newcommand*\polyglossia@setup@language@patterns[1]{
+\NewDocumentCommand \SetupPolyglossiaLangPatterns { m }
+{
\bool_if:NTF \g__xpg_hyphenation_disabled_bool
{
\tl_gset:Ne \g__xpg_lastlanguage_tl {\the\csname l@#1\endcsname}
@@ -4600,32 +4742,29 @@ to track the issues and follow progress.
\language=\l@nohyphenation
}
{
- \xpg@set@hyphenation@patterns{#1}
+ \xpg_set_hyphenation_patterns:n {#1}
}
}
{
% Since this function is sometimes called from the gloss files
% directly, we need to check whether the requested hyphenname exists.
- \xpg@ifdefined{#1}{}
- {
- \xpg@nopatterns{#1}
- \expandafter\adddialect\csname l@#1\endcsname\l@nohyphenation\relax%
- }
- \xpg@set@hyphenation@patterns{#1}
+ \CheckHyphenationPatterns{#1}
+ \xpg_set_hyphenation_patterns:n {#1}
}
}
}
-\prop_new:N \g_xpg_langsetup_prop
+\prop_new_linked:N \l_xpg_langsetup_prop
\cs_new_protected:Npn \__xpg_keys_define_lang:n #1
{
- \keys_define:nn {polyglossia}{
+ \keys_define:nn {polyglossia}
+ {
% the script font
#1 / script
.code:n = {
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/script}{##1}
- \prop_gput:Nne{\g_xpg_langsetup_prop}{#1/lcscript}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/script}{##1}
+ \prop_put:Nne \l_xpg_langsetup_prop {#1/lcscript}
{\tl_if_empty:nF{##1}{\str_lowercase:n{##1}}}
},
#1 / script
@@ -4634,84 +4773,89 @@ to track the issues and follow progress.
.initial:n = latin,
% the opentype script tag
#1 / scripttag
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/scripttag}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/scripttag}{##1}},
#1 / scripttag
.default:n = {},
#1 / scripttag
.initial:n = {},
% the language full name
#1 / language
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/language}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/language}{##1}},
#1 / language
.value_required:n = true,
#1 / language
.initial:x = {\str_uppercase:n#1},
% the language tag
#1 / langtag
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/langtag}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/langtag}{##1}},
#1 / langtag
.value_required:n = true,
#1 / langtag
.initial:n = {},
% the BCP-47 tag
#1 / bcp47
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47}{##1}},
#1 / bcp47
.value_required:n = true,
#1 / bcp47
.initial:n = {},
% the BCP-47 language tag
#1 / bcp47-language
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-language}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-language}{##1}},
#1 / bcp47-language
.value_required:n = true,
#1 / bcp47-language
.initial:n = {},
% the BCP-47 region tag
#1 / bcp47-region
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-region}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-region}{##1}},
#1 / bcp47-region
.value_required:n = false,
#1 / bcp47-region
.initial:n = {},
% the BCP-47 script tag
#1 / bcp47-script
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-script}{##1}},
+ .code:n =
+ {
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-script}{##1}
+ \prop_put:Nne \l_xpg_langsetup_prop {#1/lc-bcp47-script}
+ {\tl_if_empty:nF{##1}{\str_lowercase:n{##1}}}
+ },
#1 / bcp47-script
.value_required:n = true,
#1 / bcp47-script
- .initial:n = {},
+ .initial:n = {Latn},
% the BCP-47 variant tag
#1 / bcp47-variant
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-variant}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-variant}{##1}},
#1 / bcp47-variant
.value_required:n = false,
#1 / bcp47-variant
.initial:n = {},
% the BCP-47 extension-t tag
#1 / bcp47-extension-t
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-extension-t}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-extension-t}{##1}},
#1 / bcp47-extension-t
.value_required:n = false,
#1 / bcp47-extension-t
.initial:n = {},
% the BCP-47 extension-u tag
#1 / bcp47-extension-u
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-extension-u}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-extension-u}{##1}},
#1 / bcp47-extension-u
.value_required:n = false,
#1 / bcp47-extension-u
.initial:n = {},
% the BCP-47 extension-x tag
#1 / bcp47-extension-x
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-extension-x}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-extension-x}{##1}},
#1 / bcp47-extension-x
.value_required:n = false,
#1 / bcp47-extension-x
.initial:n = {},
% the BCP-47 casing alias
#1 / bcp47-casing
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/bcp47-casing}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/bcp47-casing}{##1}},
#1 / bcp47-casing
.value_required:n = false,
#1 / bcp47-casing
@@ -4720,7 +4864,7 @@ to track the issues and follow progress.
#1 / hyphennames
.code:n = {
\clist_set:Nn{\l_tmpa_clist}{##1}
- \prop_gput:Nne{\g_xpg_langsetup_prop}{#1/hyphennames}{\clist_use:Nn \l_tmpa_clist {,}}
+ \prop_put:Nne \l_xpg_langsetup_prop {#1/hyphennames}{\clist_use:Nn \l_tmpa_clist {,}}
},
#1 / hyphennames
.value_required:n = true,
@@ -4733,8 +4877,8 @@ to track the issues and follow progress.
{LR}{}
{RL}{\RequireBidi}
}
- {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/direction}{##1}}
- {\xpg@error{Unknown~ direction~ "##1"~ for~ language~ "#1"}}
+ { \prop_put:Nnn \l_xpg_langsetup_prop {#1/direction}{##1} }
+ { \xpg_error_msg:n {Unknown~ direction~ "##1"~ for~ language~ "#1"} }
},
#1 / direction
.value_required:n = true,
@@ -4745,9 +4889,9 @@ to track the issues and follow progress.
.code:n = {
% check syntax
\int_compare:nNnF { \clist_count:n {##1} } = {2}
- {\xpg@error{hypenmins~should~be~a~list~of~two~entries,~got~"##1"}}
+ { \xpg_error_msg:n {hypenmins~should~be~a~list~of~two~entries,~got~"##1"} }
% set prop
- \prop_gput:Nnn \g_xpg_langsetup_prop {#1/hyphenmins} {##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/hyphenmins} {##1}
},
#1 / hyphenmins
.value_required:n = true,
@@ -4758,9 +4902,9 @@ to track the issues and follow progress.
.code:n = {
% check syntax
\int_compare:nNnF { \clist_count:n {##1} } = {1}
- {\xpg@error{totalhyphenhypenmin~should~be~a~single~entry,~got~"##1"}}
+ { \xpg_error_msg:n {totalhyphenhypenmin~should~be~a~single~entry,~got~"##1"} }
% set prop
- \prop_gput:Nnn \g_xpg_langsetup_prop {#1/totalhyphenmin} {##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/totalhyphenmin} {##1}
},
#1 / totalhyphenmin
.value_required:n = false,
@@ -4779,35 +4923,35 @@ to track the issues and follow progress.
% environment name
#1 / envname
.code:n = {
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/envname}{##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/envname}{##1}
},
#1/ envname.value_required:n = true,
#1/ envname.initial:n = {#1},
% babel name
#1 / babelname
.code:n = {
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/babelname}{##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/babelname}{##1}
},
#1/ babelname.value_required:n = true,
#1/ babelname.initial:n = {#1},
% default numerals
#1 / localnumeral
. code:n = {
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/localnumeral}{##1}
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/Localnumeral}{##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/localnumeral}{##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/Localnumeral}{##1}
},
#1 / localnumeral.value_required:n = true,
- #1 / localnumeral.initial:n = {polyglossia@C@localnumeral},
+ #1 / localnumeral.initial:n = {xpg_C_localnumeral:nn},
% uppercased
#1 / Localnumeral
. code:n = {
- \prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/Localnumeral}{##1}
+ \prop_put:Nnn \l_xpg_langsetup_prop {#1/Localnumeral}{##1}
},
#1 / Localnumeral.value_required:n = true,
- #1 / Localnumeral.initial:n = {polyglossia@C@localnumeral},
+ #1 / Localnumeral.initial:n = {xpg_C_localnumeral:nn},
% environment define command (by default create the environment)
#1 / DefineCommandsCmd
- .code:n = {\prop_gput:Nnn{\g_xpg_langsetup_prop}{#1/DefineCommandsCmd}{##1}},
+ .code:n = {\prop_put:Nnn \l_xpg_langsetup_prop {#1/DefineCommandsCmd}{##1}},
#1 / DefineCommandsCmd
.value_required:n = true,
#1 / DefineCommandsCmd
@@ -4815,9 +4959,20 @@ to track the issues and follow progress.
}
}
+\DeclareExpandableDocumentCommand \babelname { }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \languagename / babelname }
+ }
+
+\DeclareExpandableDocumentCommand \mainbabelname { }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \mainlanguagename / babelname }
+ }
+
% TODO move to C module
-\newcommand*{\polyglossia@C@localnumeral}[2]{
- \polyglossia@Clang@@arabic{#2}
+\cs_new:Nn \xpg_C_localnumeral:nn
+{
+ \xpg_Clang_arabic{#2}
}
\cs_new:Npn \__xpg_localnumeral_parse:nn #1 #2
@@ -4841,7 +4996,7 @@ to track the issues and follow progress.
\__xpg_localnumeral_parse:nn
} { #2 }
}
- { \use:c { \prop_item:Ne \g_xpg_langsetup_prop
+ { \use:c { \prop_item:Ne \l_xpg_langsetup_prop
{ \languagename / #3 } } { } { #1 } }
}
@@ -4876,31 +5031,31 @@ to track the issues and follow progress.
\cs_new_nopar:Npn \__xpg_indent_first:n #1
{
\bool_if:cTF { g__xpg_#1_if_bool }
- { \french@indent } { \nofrench@indent }
+ { \__xpg_french_indent: } { \__xpg_no_french_indent: }
}
\cs_new:Nn \__xpg_lang_set_par_direction:n
{
- \prop_get:NeNTF \g_xpg_langsetup_prop {#1/direction} \l_tmpa_tl
+ \prop_get:NeNTF \l_xpg_langsetup_prop {#1/direction} \l_tmpa_tl
{
\__xpg_set_par_direction:n{\l_tmpa_tl}
}
{
- \xpg@error{Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
- \prop_show:N{\g_xpg_langsetup_prop}
+ \xpg_error_msg:n {Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
+ \prop_show:N{\l_xpg_langsetup_prop}
}
}
\cs_new:Nn \__xpg_lang_set_text_direction:nn
{
- \prop_get:NeNTF \g_xpg_langsetup_prop {#1/direction} \l_tmpa_tl
+ \prop_get:NeNTF \l_xpg_langsetup_prop {#1/direction} \l_tmpa_tl
{
\__xpg_set_text_direction:n{\l_tmpa_tl}{#2}
}
{
- \xpg@error{Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
- \prop_show:N{\g_xpg_langsetup_prop}
+ \xpg_error_msg:n {Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
+ \prop_show:N{\l_xpg_langsetup_prop}
}
}
@@ -4931,7 +5086,7 @@ to track the issues and follow progress.
{
\bool_gset_true:N \g__xpg_hyphenation_disabled_bool
\tl_gset:Ne \g__xpg_lastlanguage_tl { \the\language }
- % We do not call \xpg@set@hyphenation@patterns here to avoid a warning message.
+ % We do not call \xpg_set_hyphenation_patterns:n here to avoid a warning message.
% "nohyphenation" is not listed in language.dat.lua.
\language=\l@nohyphenation
}
@@ -4943,19 +5098,19 @@ to track the issues and follow progress.
{
\bool_gset_false:N \g__xpg_hyphenation_disabled_bool
\language=\tl_use:N{\g__xpg_lastlanguage_tl}
- }%
+ }
}
\cs_new:Npn \__xpg_auto_setupfont:n #1
{
\bool_if:cTF { g__xpg_#1_fontsetup_bool }
{
- \str_if_eq:eeTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/lcscript}}{latin}
- {\xpg@fontsetup@latin{#1}}
- {\xpg@fontsetup@nonlatin{#1}}
+ \str_if_eq:eeTF{\prop_item:Nn{\l_xpg_langsetup_prop}{#1/lcscript}}{latin}
+ {\SetupLatinPolyglossiaFont{#1}}
+ {\SetupNonLatinPolyglossiaFont{#1}}
}
{
- \xpg@info{Skipping~ automatic~ font~ setup~ for~ language~ #1}
+ \xpg_info_msg:n{Skipping~ automatic~ font~ setup~ for~ language~ #1}
}
}
@@ -4967,40 +5122,40 @@ to track the issues and follow progress.
\bool_if:nTF{\tl_if_empty_p:n{#1} || \tl_if_empty_p:n{#2}}
{
% maybe an error ?
- \xpg@warning{Asking~ to~ add~ empty~ feature~to~ main~ font~
+ \xpg_warning_msg:n{Asking~ to~ add~ empty~ feature~to~ main~ font~
(Language="#2"~ to~ langtag~ "#1")}
}
{
- \str_if_eq:nnTF{#2}{Turkish}{
+ \str_if_eq:nnTF{#2}{Turkish}
+ {
\fontspec_if_language:nTF {TRK}
{
\addfontfeature{Language=Turkish}
}
{
- \fontspec_if_language:nTF {TUR}
+ \fontspec_if_language:nT {TUR}
{
\addfontfeature{Language=Turkish}
- }{}
+ }
}
}{
- \fontspec_if_language:nTF{#1}
+ \fontspec_if_language:nT{#1}
{
\addfontfeature{Language=#2}
}
- {}
}
}
}
-\cs_generate_variant:Nn \__xpg_add_font_feature_language:nn { on , no, oo , Vn, nV, VV , xn, nx, xx}
+\cs_generate_variant:Nn \__xpg_add_font_feature_language:nn { ee }
-% add fontfeature Script=#2 to scripttag #1
-% do nothing if #1 or #2 is empty
+% add fontfeature Script=#3 to scripttag #2 for family #1
+% do nothing if #2 or #3 is empty
\cs_new:Nn \__xpg_add_font_feature_script:nnn
{
\bool_if:nTF{\tl_if_empty_p:n{#2} || \tl_if_empty_p:n{#3}}
{
% maybe an error ?
- \xpg@warning{Asking~ to~ add~ empty~ feature~to~ main~ font
+ \xpg_warning_msg:n{Asking~ to~ add~ empty~ feature~to~ main~ font
(Script="#3"~ to~ scripttag~ "#2")}
}
{
@@ -5036,118 +5191,58 @@ to track the issues and follow progress.
\regex_replace_once:nnN { \.[^\.]* \Z } { } \xpg_fname_str
% ... and, finally, quotation marks
\regex_replace_once:nnN { " } { } \xpg_fname_str
- \xpg@error{
- The~ current~ main ~ \xpg_ffamily_tl\space font,~ \xpg_fname_str,~ does~ not~ contain~ the~"#3"~ script!\MessageBreak
- Please~ define~\csname\tl_if_empty:nF{#3}{\str_lowercase:n{#3}}font\xpg_ffamilysh_tl\endcsname~
- with~ \string\newfontfamily\space command
+ \xpg_error_msg:n
+ {
+ The~ current~ main ~ \xpg_ffamily_tl\space font,~ \xpg_fname_str,~ does~ not~ contain~ the~"#3"~ script! \iow_newline:
+ Please~ define~\csname\tl_if_empty:nF{#3}{\str_lowercase:n{#3}}font\xpg_ffamilysh_tl\endcsname~
+ with~ \string\newfontfamily\space command
}
}
}
}
-\cs_generate_variant:Nn \__xpg_add_font_feature_script:nnn { non , nno, noo , nVn, nnV, nVV , nxn, nnx, nxx}
-
-\def\xpg@fontsetup@latin#1{
- \begingroup
- \csgdef{#1@font@rm}{
- \cs_if_exist_use:cF{#1font}{
- \rmfamilylatin
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- }
- }
- \csgdef{#1@font@sf}{
- \cs_if_exist_use:cF{#1fontsf}{
- \sffamilylatin
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- }
- }
- \csgdef{#1@font@tt}{
- \cs_if_exist_use:cF{#1fonttt}{
- \ttfamilylatin
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- }
- }
- \endgroup
-}
+\cs_generate_variant:Nn \__xpg_add_font_feature_script:nnn { nee }
-\def\xpg@fontsetup@nonlatin#1{
- \begingroup
- \csgdef{#1@font@rm}{
- \cs_if_exist_use:cF{#1font}
- {
- \providetoggle{#1@use@script@font}
- \str_if_eq:nnTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- {\rmfamilylatin}
- {\cs_if_exist_use:cTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/lcscript} font}
- {
- \toggletrue{#1@use@script@font}
- }
- {
- \rmfamilylatin
- }
- }
- \iftoggle{#1@use@script@font}{}{
- \__xpg_add_font_feature_script:nxx{rm}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/scripttag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}
- }%
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- }%
- \def\familytype{rm}
- }%
- \csgdef{#1@font@sf}{
- \cs_if_exist_use:cF{#1fontsf}
+%% TODO: probably can be cleaned a little more
+\cs_new_protected:Npn \__xpg_setup_font:nnnnn #1 #2 #3 #4 #5 % #1 = lang, #2 = family, #3 = family, #4 = gobble, #5 gobble
+ {
+ \cs_set_protected_nopar:cpn { #1@font@#2 }
{
- \providetoggle{#1@use@script@fontsf}
- \str_if_eq:nnTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- {\sffamilylatin}
- {\cs_if_exist_use:cTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/lcscript} fontsf}
+ \cs_if_exist_use:cF{ #1font#3 }
{
- \toggletrue{#1@use@script@fontsf}
- }
- {
- \sffamilylatin
- }
- }
- \iftoggle{#1@use@script@fontsf}{}{
- \__xpg_add_font_feature_script:nxx{sf}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/scripttag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}
- }%
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- }%
- \def\familytype{sf}
- }%
- \csgdef{#1@font@tt}{
- \cs_if_exist_use:cF{#1fonttt}
- {
- \providetoggle{#1@use@script@fonttt}
- \str_if_eq:nnTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
- {\ttfamilylatin}
- {\cs_if_exist_use:cTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/lcscript} fonttt}
- {
- \toggletrue{#1@use@script@fonttt}
- }
- {
- \ttfamilylatin
- }
- }
- \iftoggle{#1@use@script@fonttt}{}{
- \__xpg_add_font_feature_script:nxx{tt}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/scripttag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/script}}
- }
- \__xpg_add_font_feature_language:xx{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/langtag}}
- {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/language}}
+ \cs_if_exist_use:cF { \prop_item:Nn \l_xpg_langsetup_prop { #1 / lc-bcp47-script } font#3 }
+ {
+ #4 { \prop_item:Nn \l_xpg_langsetup_prop { #1 / lcscript } font#3 }
+ {
+ \use:c { #2familylatin }
+ #5
+ {
+ \__xpg_add_font_feature_script:nee { #2 }
+ { \prop_item:Nn \l_xpg_langsetup_prop { #1 / scripttag } }
+ { \prop_item:Nn \l_xpg_langsetup_prop { #1 / script } }
+ }
+ }
+ }
+ \__xpg_add_font_feature_language:ee
+ { \prop_item:Nn \l_xpg_langsetup_prop { #1 / langtag } }
+ { \prop_item:Nn \l_xpg_langsetup_prop { #1 / language } }
+ }
+ \tl_set:Nn \familytype { #2 }
}
- \def\familytype{tt}
}
- \endgroup
-}
+
+\NewDocumentCommand \SetupLatinPolyglossiaFont { m }
+ {
+ \__xpg_setup_font:nnnnn { #1 } { rm } { } { \use_ii:nn } { \use_none:n }
+ \__xpg_setup_font:nnnnn { #1 } { sf } { sf } { \use_ii:nn } { \use_none:n }
+ \__xpg_setup_font:nnnnn { #1 } { tt } { tt } { \use_ii:nn } { \use_none:n }
+ }
+
+\NewDocumentCommand \SetupNonLatinPolyglossiaFont { m }
+ {
+ \__xpg_setup_font:nnnnn { #1 } { rm } { } { \cs_if_exist_use:cF } { \use:n }
+ \__xpg_setup_font:nnnnn { #1 } { sf } { sf } { \cs_if_exist_use:cF } { \use:n }
+ \__xpg_setup_font:nnnnn { #1 } { tt } { tt } { \cs_if_exist_use:cF } { \use:n }
+ }
%%% END OF PolyglossiaSetup
@@ -5156,40 +5251,53 @@ to track the issues and follow progress.
\cs_new_nopar:Nn \__xpg_local_marks:n { }
\cs_new_nopar:Nn \__xpg_enable_local_marks:
{
- \xpg@info{Option:~ localmarks}
+ \xpg_info_msg:n{Option:~ localmarks}
\cs_gset_nopar:Nn \__xpg_local_marks:n
{
- \def\xpg@tmp@lang{##1}
- \DeclareRobustCommand\markboth[2]{
- \begingroup
- \let\label\relax \let\index\relax \let\glossary\relax
- \unrestored@protected@xdef\@themark
- {
- {\lowercase{\foreignlanguage{\xpg@tmp@lang}}{\protect\@@ensure@maindir{####1}}}
- {\lowercase{\foreignlanguage{\xpg@tmp@lang}}{\protect\@@ensure@maindir{####2}}}
- }
- \@temptokena \expandafter{\@themark}
- \mark{\the\@temptokena}
- \endgroup
- \if@nobreak\ifvmode\nobreak\fi\fi
- }
- \DeclareRobustCommand\markright[1]{
- \begingroup
- \let\label\relax \let\index\relax \let\glossary\relax
- \expandafter\@markright\@themark
- {\lowercase{\foreignlanguage{\xpg@tmp@lang}}{\protect\@@ensure@maindir{####1}}}
- \@temptokena \expandafter{\@themark}
- \mark{\the\@temptokena}
- \endgroup
- \if@nobreak\ifvmode\nobreak\fi\fi
- }
+ \DeclareDocumentCommand \markboth { m m }
+ {
+ \group_begin:
+ \cs_set_eq:cc { label } { relax }
+ \cs_set_eq:cc { index } { relax }
+ \cs_set_eq:cc { glossary } { relax }
+ \unrestored@protected@xdef\@themark
+ {
+ {\foreignlanguage{##1}{\protect\@@ensure@maindir{####1}}}
+ {\foreignlanguage{##1}{\protect\@@ensure@maindir{####2}}}
+ }
+ \@temptokena \expandafter{\@themark}
+ \mark_insert:nn{2e-left}{####1}
+ \mark_insert:nn{2e-right}{####2}
+ \tl_if_empty:nF{####2}{ \mark_insert:nn{2e-right-nonempty}{####2} }
+ \mark{\the\@temptokena}
+ \group_end:
+ \if@nobreak\ifvmode\nobreak\fi\fi
+ }
+ \DeclareDocumentCommand \markright { m }
+ {
+ \group_begin:
+ \cs_set_eq:cc { label } { relax }
+ \cs_set_eq:cc { index } { relax }
+ \cs_set_eq:cc { glossary } { relax }
+ \expandafter\@markright\@themark
+ {\foreignlanguage{##1}{\protect\@@ensure@maindir{####1}}}
+ \@temptokena \expandafter{\@themark}
+ \mark_insert:nn{2e-right}{####1}
+ \tl_if_empty:nF{####1}{ \mark_insert:nn{2e-right-nonempty}{####1} }
+ \mark{\the\@temptokena}
+ \group_end:
+ \if@nobreak\ifvmode\nobreak\fi\fi
+ }
}
}
%we call this macro when a gloss file is not found for a given language
-\def\xpg@nogloss#1{
- \xpg@warning{File~ gloss-#1.ldf~ do~ not~ exists!\MessageBreak
- I~ will~ nevertheless~ try~ to~ use~ hyphenation~ patterns~ for~ #1.}
+\cs_new_nopar:Nn \__xpg_no_gloss:n
+{
+ \xpg_warning_msg:n
+ {File~ gloss-#1.ldf~ do~ not~ exists! \iow_newline:
+ I~ will~ nevertheless~ try~ to~ use~ hyphenation~ patterns~ for~ #1.}
+
\PolyglossiaSetup{#1}{hyphenmins={2,3},hyphennames={#1},fontsetup=true}
% the above amounts to:
%\ifcsundef{l@#1}%
@@ -5198,59 +5306,64 @@ to track the issues and follow progress.
%\csdef{#1@language}{\language=\csname l@#1\endcsname}%
}
-\newcommand{\xpg@input}[1]{
+\cs_new_nopar:Nn \xpg_input:n
+{
% Store catcode of @ before making at letter
- \chardef\xpg@saved@at@catcode\catcode`\@
- \makeatletter
- \input{#1}
+ \cs_set_protected_nopar:Npx \__xpg_restore_at_catcode:
+ { \char_set_catcode:nn { `@ } { \char_value_catcode:n {`\@ } } }
+ \char_set_catcode_letter:N @
+ \file_input:n { #1 }
% restore former @ catcode
- \catcode`\@=\xpg@saved@at@catcode
+ \__xpg_restore_at_catcode:
}
% try to load a language file
-\cs_new:Nn \__xpg_load_lang_definition:nn {
- \file_if_exist:nTF{gloss-#2.ldf}
+\cs_new:Nn \__xpg_load_lang_definition:nn
+{
+ \file_if_exist:nTF{gloss-#2.ldf}
{
- % Temporarily force catcode of ~ to 13 since babelsh.def
+ \tl_set:Nn \xpg__tmp_default_options_tl { #1 }
+ % Temporarily force catcode of ~ to 13 (active) since babelsh.def
% requires it. This is needed particularly with LaTeX3
% packages which force \ExplSyntaxOn (#425)
- \protected\edef\xpg@restore@tilde@catcode{\catcode 126 = \the\catcode 126\relax}
- \catcode 126 = 13
- \xpg@input{gloss-#2.ldf}
- \setkeys{#2}{#1}
+ \cs_gset_protected:Npx \__xpg_restore_tilde_catcode:
+ { \char_set_catcode:nn { 126 } { \char_value_catcode:n { 126 } } }
+ \char_set_catcode_active:n { 126 }
+ \xpg_input:n {gloss-#2.ldf}
% restore former ~ catcode
- \xpg@restore@tilde@catcode
+ \__xpg_restore_tilde_catcode:
}
{
- \xpg@nogloss{#2}
+ \__xpg_no_gloss:n {#2}
}
}
\cs_generate_variant:Nn \__xpg_load_lang_definition:nn { ee }
% load a master language from an alias file
-\newcommand*\xpg@load@master@language[1] {
- \xpg@input{gloss-#1.ldf}
+\NewDocumentCommand \InheritGlossFile { m }
+{
\seq_if_in:NeF \__xpg_langs_loaded {#1}
{
+ \xpg_input:n {gloss-#1.ldf}
% define environment and command if not alias
\str_if_eq:eeT {\prop_item:Ne \__xpg_alias {#1/target}} {#1} {
- \use:c{\prop_item:Nn{\g_xpg_langsetup_prop}
+ \use:c{\prop_item:Nn{\l_xpg_langsetup_prop}
{#1/DefineCommandsCmd}}
{#1}
}
+ \seq_gput_right:Nn \__xpg_langs_loaded {#1}
}
\__xpg_register_language:nn{}{#1}
- \seq_gput_right:Nn \__xpg_langs_loaded {#1}
}
-\prop_new:N \__xpg_alias
+\prop_new_linked:N \__xpg_alias
% define environment and command if not alias
\cs_new:Nn \xpg_define_language_commands:n {
\str_if_eq:eeT {\prop_item:Ne \__xpg_alias {#1/target}} {#1}
{
\exp_args:Ne
- \NewDocumentEnvironment {\prop_item:Nn{\g_xpg_langsetup_prop}{#1/envname}} { O{} }
+ \NewDocumentEnvironment {\prop_item:Nn{\l_xpg_langsetup_prop}{#1/envname}} { O{} }
{
\otherlanguage [ ##1 ] { #1 }
}
@@ -5278,7 +5391,7 @@ to track the issues and follow progress.
% target to self fall back to language table
\str_if_eq:eeTF { \prop_item:Ne \__xpg_alias {#1/target} } { #1 }
{
- \prop_item:Nn{\g_xpg_langsetup_prop} {#1/#2}
+ \prop_item:Nn{\l_xpg_langsetup_prop} {#1/#2}
}
% load alias by recursion
{
@@ -5401,20 +5514,29 @@ to track the issues and follow progress.
\clist_if_in:NeF \xpg@loaded {#2}{
\clist_gput_right:Ne \xpg@loaded {#2}
}
- % Register the language options
- \__xpg_set_language_options:nnn {#2} {#1} {@xpg@set@langvariant}
+ \group_begin:
+ % set language options
+ \__xpg_set_language_options:nn {#2} {#1}
% register babelname
- \prop_get:NeN \g_xpg_langsetup_prop {#2/babelname} \l_tmpa_tl
+ \prop_get:NeN \l_xpg_langsetup_prop {#2/babelname} \l_tmpa_tl
\clist_if_in:NeF \xpg@bloaded {\l_tmpa_tl}{
\clist_gput_right:Ne \xpg@bloaded {\l_tmpa_tl}
}
% register BCP-47 ID
- \prop_get:NeN \g_xpg_langsetup_prop {#2/bcp47} \l_tmpa_tl
+ \prop_get:NeN \l_xpg_langsetup_prop {#2/bcp47} \l_tmpa_tl
\clist_if_in:NeF \xpg@bcp@loaded {\l_tmpa_tl}{
\clist_gput_right:Ne \xpg@bcp@loaded {\l_tmpa_tl}
}
+ % register variant
+ \prop_get:NnNT \l_xpg_curropt_prop {#2/variant} \l_tmpa_tl {
+ \clist_if_in:NeF \xpg@vloaded {\l_tmpa_tl}{
+ \clist_gput_right:Ne \xpg@vloaded {\l_tmpa_tl}
+ }}
+ \group_end:
}
+\prop_new_linked:N \l_xpg_curropt_prop
+
\DeclareDocumentCommand \setdefaultlanguage { O{} m }
{
% latex is an internal language, so do not record
@@ -5429,12 +5551,13 @@ to track the issues and follow progress.
\__xpg_load_lang_definition:nn{#1}{#2}
% define environment and command if not alias
\str_if_eq:eeT {\prop_item:Ne \__xpg_alias {#2/target}} {#2} {
- \use:c{\prop_item:Ne{\g_xpg_langsetup_prop}
+ \use:c{\prop_item:Ne{\l_xpg_langsetup_prop}
{#2/DefineCommandsCmd}}
{#2}
}
\seq_gput_right:Ne \__xpg_langs_loaded {#2}
}
+ \cs_set_nopar:Npe \mainlanguagevariant { \prop_item:Ne \l_xpg_curropt_prop { \xpg_alias_base_lang:n{#2} / variant } }
\exp_args:Nee \__xpg_set_default_language:nn {\xpg_alias_add_to_option_i:nn{#2}{#1}}
{\xpg_alias_base_lang:n{#2}}
}
@@ -5442,70 +5565,22 @@ to track the issues and follow progress.
\cs_new:Nn \__xpg_set_default_language:nn
{
- \gdef\xpg@main@language{#2}
- \tl_if_blank:nTF {#1}
- {
- \cs_gset_nopar:Npn \mainlanguagevariant {}
- }
- {
- % Register the language options
- \__xpg_set_language_options:nnn {#2} {#1} {@xpg@main@langvariant}
- }
- \csgdef{#2@gvar}{\mainlanguagevariant}
+ \tl_gset:Nn \xpg_main_language_tl {#2}
%% The following settings are for the default language and script
% this tells bidi.sty or luabidi.sty that the document is RTL
- \__xpg_if_LR_str:eF{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/direction}}
+ \__xpg_if_LR_str:eF{\prop_item:Nn{\l_xpg_langsetup_prop}{#2/direction}}
{
\__xpg_setRTLmain:
}
\cs_gset_nopar:Nn \__xpg_at_begin_document_selectlanguage: {
\selectbackgroundlanguage{#2}
- \selectlanguage[#1]{#2}%
+ \selectlanguage[#1]{#2}
}
- \xpg@info{Default~ language~ is~ #2}
- \polyglossia@set@language@name[#1]{#2}
+ \str_if_eq:eeF { #2 } { latex }
+ { \xpg_info_msg:n{Default~ language~ is~ #2} }
+ \xpg_set_language_name:n { #2 }
\cs_gset_nopar:Npn \mainlanguagename {#2}
- % Store babelname of main language (for external packages such as biblatex)
- \cs_gset_nopar:Npe \mainbabelname { \prop_item:Nn \g_xpg_langsetup_prop {#2/babelname} }
- % Store babelname of current language (for external packages such as biblatex)
- \cs_gset_eq:NN \babelname \mainbabelname
- \cs_gset_eq:cc{#2@gbabelname}{babelname}%
- % Store BCP-47 ID and subtags of main language:
- % 1. store main.* (sub)tags
- \cs_gset_nopar:cpe {bcp47.main.tag} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47 } }
- \cs_gset_nopar:cpe {bcp47.main.language} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-language } }
- \cs_gset_nopar:cpe {bcp47.main.region} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-region } }
- \cs_gset_nopar:cpe {bcp47.main.script} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-script } }
- \cs_gset_nopar:cpe {bcp47.main.variant} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-variant } }
- \cs_gset_nopar:cpe {bcp47.main.extension.t} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47extension-t } }
- \cs_gset_nopar:cpe {bcp47.main.extension.u} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-extension-u } }
- \cs_gset_nopar:cpe {bcp47.main.extension.x} { \prop_item:Nn \g_xpg_langsetup_prop { #2 / bcp47-extension-x } }
- % For casing, we fall back to language if bcp47-casing is not explicitly set
- \cs_set_nopar:cpx {tmpcasing} { \prop_item:Ne \g_xpg_langsetup_prop { #2 / bcp47-casing } }
- \str_if_empty:NTF \tmpcasing
- { \cs_gset_nopar:cpe {bcp47.main.casing} { \prop_item:Nn \g_xpg_langsetup_prop {#2 / bcp47-language} } }
- { \cs_gset_nopar:cpe {bcp47.main.casing} { \tmpcasing } }
- % 2. Store lang (sub)tags
- \cs_gset_eq:cc {bcp47.tag} {bcp47.main.tag}
- \cs_gset_eq:cc {bcp47.language} {bcp47.main.language}
- \cs_gset_eq:cc {bcp47.region} {bcp47.main.region}
- \cs_gset_eq:cc {bcp47.script} {bcp47.main.script}
- \cs_gset_eq:cc {bcp47.variant} {bcp47.main.variant}
- \cs_gset_eq:cc {bcp47.extension.t} {bcp47.main.extension.t}
- \cs_gset_eq:cc {bcp47.extension.u} {bcp47.main.extension.u}
- \cs_gset_eq:cc {bcp47.extension.x} {bcp47.main.extension.x}
- \cs_gset_eq:cc {bcp47.casing} {bcp47.main.casing}
- % 3. Store global language BCP47 settings (with default subtags as set by main language options)
- \cs_gset_eq:cc{#2@g.bcp47.tag}{bcp47.tag}
- \cs_gset_eq:cc{#2@g.bcp47.language}{bcp47.language}
- \cs_gset_eq:cc{#2@g.bcp47.region}{bcp47.region}
- \cs_gset_eq:cc{#2@g.bcp47.script}{bcp47.script}
- \cs_gset_eq:cc{#2@g.bcp47.variant}{bcp47.variant}
- \cs_gset_eq:cc{#2@g.bcp47.extension.t}{bcp47.extension.t}
- \cs_gset_eq:cc{#2@g.bcp47.extension.u}{bcp47.extension.u}
- \cs_gset_eq:cc{#2@g.bcp47.extension.x}{bcp47.extension.x}
- \cs_gset_eq:cc{#2@g.bcp47.casing}{bcp47.casing}
}
\DeclareCommandCopy \setmainlanguage \setdefaultlanguage
@@ -5516,11 +5591,11 @@ to track the issues and follow progress.
{
\str_case:nnF {#1}
{
- {bcp-47} { \csuse{bcp47.tag} }
- {bcp47} { \csuse{bcp47.tag} }
+ {bcp-47} { \use:c{bcp47.tag} }
+ {bcp47} { \use:c{bcp47.tag} }
}
{
- \xpg@error{Invalid~ \string\languageid\space argument:~ #1}
+ \xpg_ill_arg_msg:nn { #1 } { \languageid }
}
}
@@ -5530,11 +5605,11 @@ to track the issues and follow progress.
{
\str_case:nnF {#1}
{
- {bcp-47} { \csuse{bcp47.main.tag} }
- {bcp47} { \csuse{bcp47.main.tag} }
+ {bcp-47} { \use:c{bcp47.main.tag} }
+ {bcp47} { \use:c{bcp47.main.tag} }
}
{
- \xpg@error{Invalid~ \string\mainlanguageid\space argument:~ #1}
+ \xpg_ill_arg_msg:nn { #1 } { \mainlanguageid }
}
}
% Kernel command to access to BCP-47 data.
@@ -5554,281 +5629,205 @@ to track the issues and follow progress.
% and main.* variants thereof
% See https://github.com/latex3/latex2e/issues/1035
\DeclareExpandableDocumentCommand \BCPdata {m}
+ {
+ \cs_if_exist_use:cF{bcp47.#1}
+ { \xpg_ill_arg_msg:nn { #1 } { \BCPdata } }
+ }
+
+\clist_map_inline:nn
+ {
+ language, region, script, variant,
+ extension.t, extension.u, extension.x
+ }{
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \tl_replace_once:Nnn \l_tmpa_tl { . } { - }
+ \cs_gset_nopar:cpe { bcp47.#1 }
+ {
+ \exp_not:n { \prop_item:Ne \l_xpg_langsetup_prop } { \exp_not:N \languagename / bcp47-\l_tmpa_tl }
+ }
+ \cs_gset_nopar:cpe { bcp47.main.#1 }
+ {
+ \exp_not:n { \prop_item:Ne \l_xpg_langsetup_prop } { \exp_not:N \mainlanguagename / bcp47-\l_tmpa_tl }
+ }
+ }
+\cs_gset_nopar:cpn { bcp47.casing }
+ {
+ \tl_if_empty:eTF { \prop_item:Ne \l_xpg_langsetup_prop { \languagename / bcp47-casing } }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \languagename / bcp47-language }
+ }{
+ \prop_item:Ne \l_xpg_langsetup_prop { \languagename / bcp47-casing }
+ }
+ }
+\cs_gset_nopar:cpn { bcp47.main.casing }
+ {
+ \tl_if_empty:eTF { \prop_item:Ne \l_xpg_langsetup_prop { \mainlanguagename / bcp47-casing } }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \mainlanguagename / bcp47-language }
+ }{
+ \prop_item:Ne \l_xpg_langsetup_prop { \mainlanguagename / bcp47-casing }
+ }
+ }
+\cs_gset_nopar:cpn { bcp47.tag }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \languagename / bcp47 }
+ }
+\cs_gset_nopar:cpn { bcp47.main.tag }
+ {
+ \prop_item:Ne \l_xpg_langsetup_prop { \mainlanguagename / bcp47 }
+ }
+
+\cs_new_nopar:Npn \languagevariant
+ {
+ \prop_item:Ne \l_xpg_curropt_prop { \languagename / variant }
+ }
+
+\cs_new:Nn \xpg_set_language_name:n
{
- \cs_if_exist_use:cF{bcp47.#1}
- { \xpg@error{Invalid~ \string\BCPdata\space argument:~ #1} }
-}
-
-% main babel name
-\cs_new_nopar:Npn \mainlanguagename {}
-\cs_new_nopar:Npn \mainbabelname {}
-\cs_new_nopar:cpn {bcp47.main.tag} {}
-\cs_new_nopar:cpn {bcp47.main.language} {}
-\cs_new_nopar:cpn {bcp47.main.region} {}
-\cs_new_nopar:cpn {bcp47.main.script} {}
-\cs_new_nopar:cpn {bcp47.main.variant} {}
-\cs_new_nopar:cpn {bcp47.main.extension.t} {}
-\cs_new_nopar:cpn {bcp47.main.extension.u} {}
-\cs_new_nopar:cpn {bcp47.main.extension.x} {}
-\cs_new_nopar:cpn {bcp47.main.casing} {}
-\cs_new_nopar:Npn \mainlanguagevariant {}%
-% Store main language variant for external packages
-\define@key{xpg@main@langvariant}{variant}{
- \cs_gset_nopar:Npn \mainlanguagevariant {#1}
-}
-
-\cs_new_nopar:Npn \babelname {}
-\def\languagevariant{}
-% Store current language variant for external packages
-\define@key{xpg@set@langvariant}{variant}{
- \def\languagevariant{#1}
-}
-
-\newcommand*\polyglossia@set@language@name[2][]{
- \def\languagename{#2}
- \tl_if_blank:nTF {#1}{
- \ifcsundef{#2@gvar}{\def\languagevariant{}}{\def\languagevariant{\csuse{#2@gvar}}}
- }{
- % Register the language options
- \__xpg_set_language_options:nnn {#2} {#1} {@xpg@set@langvariant}
- \cs_set_eq:cc{#2@var}{languagevariant}
- }%
+ \cs_set:Npn \languagename { #1 }
}
-
-\newcommand*{\resetdefaultlanguage}[2][]{
+\NewDocumentCommand \resetdefaultlanguage { O{} m }
+{
\__xpg_reset_default_language:nn
{\xpg_alias_add_to_option_i:nn{#2}{#1}}
{\xpg_alias_base_lang:n{#2}}
}
-\cs_new:Nn \__xpg_store_bcp_info:nn
-{
- % Store BCP-47 ID and subtags of current language
- \tl_if_blank:nTF {#1}{
- % tag (e.g., en-US)
- \ifcsundef{#2@g.bcp47.tag}{
- \csedef{bcp47.tag}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47 } }
- }{
- \csedef{bcp47.tag}{\csuse{#2@g.bcp47.tag}}
- }
- % language (e.g., en)
- \ifcsundef{#2@g.bcp47.language}{
- \csedef{bcp47.language}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-language } }
- }{
- \csedef{bcp47.language}{\csuse{#2@g.bcp47.language}}
- }
- % region (e.g., US)
- \ifcsundef{#2@g.bcp47.region}{%
- \csedef{bcp47.region}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-region } }
- }{
- \csedef{bcp47.region}{\csuse{#2@g.bcp47.region}}%
- }
- % script (e.g., Latn)
- \ifcsundef{#2@g.bcp47.script}{
- \csedef{bcp47.script}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-script } }
- }{
- \csedef{bcp47.script}{\csuse{#2@g.bcp47.script}}
- }
- % variant (e.g., 1996)
- \ifcsundef{#2@g.bcp47.variant}{
- \csedef{bcp47.variant}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-variant } }
- }{
- \csedef{bcp47.variant}{\csuse{#2@g.bcp47.variant}}
- }
- % extension.t (tranformation)
- \ifcsundef{#2@g.bcp47.extension.t}{%
- \csedef{bcp47.extension.t}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-t } }
- }{
- \csedef{bcp47.extension.t}{\csuse{#2@g.bcp47.extension.t}}
- }
- % extension.u (additional locale information)
- \ifcsundef{#2@g.bcp47.extension.u}{%
- \csedef{bcp47.extension.u}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-u } }
- }{
- \csedef{bcp47.extension.u}{\csuse{#2@g.bcp47.extension.u}}
- }
- % extension.x (private use area)
- \ifcsundef{#2@g.bcp47.extension.x}{
- \csedef{bcp47.extension.x}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-x } }
- }{
- \csedef{bcp47.extension.x}{\csuse{#2@g.bcp47.extension.x}}
- }
- % casing
- \ifcsundef{#2@g.bcp47.casing}{
- % For casing, we fall back to language if bcp47-casing is not explicitly set
- \cs_set_nopar:cpx {tmpcasing} { \prop_item:Ne \g_xpg_langsetup_prop { #2 / bcp47-casing } }
- \str_if_empty:NTF \tmpcasing
- { \cs_gset_eq:cc {bcp47.casing} {bcp47.language} }
- { \csedef{bcp47.casing}{ \tmpcasing } }
- }{
- \csedef{bcp47.casing}{\csuse{#2@g.bcp47.casing}}
- }
- }{
- \csedef{bcp47.tag}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47 } }
- \csedef{bcp47.language}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-language } }
- \csedef{bcp47.region}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-region } }
- \csedef{bcp47.script}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-script } }
- \csedef{bcp47.variant}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-variant } }
- \csedef{bcp47.extension.t}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-t } }
- \csedef{bcp47.extension.u}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-u } }
- \csedef{bcp47.extension.x}{ \prop_item:Nn{ \g_xpg_langsetup_prop}{ #2 / bcp47-extension-x } }
- % For casing, we fall back to language if bcp47-casing is not explicitly set
- \cs_set_nopar:cpx {tmpcasing} { \prop_item:Ne \g_xpg_langsetup_prop { #2 / bcp47-casing } }
- \str_if_empty:NTF \tmpcasing
- { \cs_gset_eq:cc {bcp47.casing} {bcp47.language} }
- { \csedef{bcp47.casing}{ \tmpcasing } }
- }
-}
-
\cs_new:Nn \__xpg_reset_default_language:nn
{
\xpg_error_if_lang_not_loaded:n{#2}
% disable globalnumbers of previously defined default language
- \csuse{no\xpg@main@language @globalnumbers}
- \csuse{noextras@\xpg@main@language}%
+ \use:c{no\xpg_main_language_tl @globalnumbers}
+ \use:c{noextras@\xpg_main_language_tl}
% This is a hook for external packages which want to access variants
% via babelname (such as biblatex)
- \cs_if_exist_use:c{noextras@bbl@\mainbabelname}%
- \csuse{init@noextras@\xpg@main@language}%
- \polyglossia@set@language@name[#1]{#2}%
- \__xpg_if_LR_str:eF{\prop_item:Ne{\g_xpg_langsetup_prop}{#2/direction}}
+ \cs_if_exist_use:c{noextras@bbl@\mainbabelname}
+ \use:c{init@noextras@\xpg_main_language_tl}
+ \xpg_set_language_name:n { #2 }
+ \__xpg_if_LR_str:eF{\prop_item:Ne{\l_xpg_langsetup_prop}{#2/direction}}
{
\@rlmaintrue\@rl@footnotetrue
}
- \selectlanguage[#1]{#2}%
- \selectbackgroundlanguage{#2}%
- % Store babelname of current language (for external packages such as biblatex)
- \tl_if_blank:nTF {#1}{%
- \ifcsundef{#2@gbabelname}{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }{
- \edef\babelname{\csuse{#2@gbabelname}}
- }
- }{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }
- % Store variant
- \tl_if_blank:nTF {#1}
- {
- \cs_gset_nopar:Npn \mainlanguagevariant {}
- }
- {
- % Register the language options
- \__xpg_set_language_options:nnn {#2} {#1} {@xpg@main@langvariant}
- }
- \csgdef{#2@gvar}{\mainlanguagevariant}
- % Store BCP-47 id of current language
- \__xpg_store_bcp_info:nn {#1}{#2}
+ \selectlanguage[#1]{#2}
+ \selectbackgroundlanguage{#2}
+ \cs_set_nopar:Npe \mainlanguagevariant { \prop_item:Ne \l_xpg_curropt_prop { \xpg_alias_base_lang:n{#2} / variant } }
}
% This saves the normalfont for the latin script since we may change normalfont in other scripts
-\let\normalfontlatin=\normalfont
+\cs_set_eq:cc { normalfontlatin } { normalfont }
% Provide default fonts (as set with \setmainfont, \setsansfont and \setmonofont)
% for Latin scripts and as a fallback for non-Latin scripts.
-\DeclareRobustCommand\xpg@defaultfont@rm{
+\cs_set_protected:Nn \xpg_defaultfont_rm:
+{
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}
\fontfamily\rmdefault
- \ifdefined\UseHook\UseHook{rmfamily}\fi
+ \hook_use:n { rmfamily }
\selectfont
}
-\DeclareRobustCommand\xpg@defaultfont@sf{
+
+\cs_set_protected:Nn \xpg_defaultfont_sf:
+{
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}
\fontfamily\sfdefault
- \ifdefined\UseHook\UseHook{sffamily}\fi
+ \hook_use:n { sffamily }
\selectfont
}
-\DeclareRobustCommand\xpg@defaultfont@tt{
+
+\cs_set_protected:Nn \xpg_defaultfont_tt:
+{
\tl_if_empty:NF{\g__fontspec_nfss_enc_tl}{\fontencoding{\g__fontspec_nfss_enc_tl}}
\fontfamily\ttdefault
- \ifdefined\UseHook\UseHook{ttfamily}\fi
+ \hook_use:n { ttfamily }
\selectfont
}
-\def\xpg@patch@fontfamilies{
+\cs_new:Nn \__xpg_patch_fontfamilies:
+{
% This robustifies the redefinitions of \<xx>family (suggestion by Enrico Gregorio)
% e.g. to prevent expansion of the \familytype redefinition in auxiliary files
- \csgappto{rmfamily~}{\def\familytype{rm}}
- \csgappto{sffamily~}{\def\familytype{sf}}
- \csgappto{ttfamily~}{\def\familytype{tt}}
+ \tl_put_right:cn {rmfamily~} {\tl_set:Nn \familytype {rm}}
+ \tl_put_right:cn {sffamily~} {\tl_set:Nn \familytype {sf}}
+ \tl_put_right:cn {ttfamily~} {\tl_set:Nn \familytype {tt}}
}
% These switches activate the default fonts
% Note that a simple \let\rmfamilylatin=\rmfamily
% does not work reliably (see #24)
-\cs_gset_eq:cc{rmfamilylatin}{xpg@defaultfont@rm}
-\cs_gset_eq:cc{sffamilylatin}{xpg@defaultfont@sf}
-\cs_gset_eq:cc{ttfamilylatin}{xpg@defaultfont@tt}
-
-\def\xpg@set@familydefault{
- % We need the \edef route here in order
- % to detect both \renewcommand and \let
- % changes.
- \edef\tempa{\familydefault}
- \edef\tempb{\sfdefault}
- \ifcsequal{tempa}{tempb}
- {\def\familytype{sf}}
- {\edef\tempb{\ttdefault}
- \ifcsequal{tempa}{tempb}
- {\def\familytype{tt}}
- {\def\familytype{rm}}}
- \xpg@patch@fontfamilies
+\cs_set_eq:cc{rmfamilylatin}{xpg_defaultfont_rm:}
+\cs_set_eq:cc{sffamilylatin}{xpg_defaultfont_sf:}
+\cs_set_eq:cc{ttfamilylatin}{xpg_defaultfont_tt:}
+
+\cs_new:Nn \xpg_set_familydefault:
+{
+ \tl_set:Ne \l_tmpa_tl { \familydefault }
+ \tl_set:Ne \l_tmpb_tl { \sfdefault }
+ \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl
+ { \tl_set:Nn \familytype {sf} }
+ { \tl_set_eq:NN \l_tmpb_tl \ttdefault
+ \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl
+ { \tl_set:Nn \familytype {tt} }
+ { \tl_set:Nn \familytype {rm} }
+ }
+ \__xpg_patch_fontfamilies:
% This (re-)saves the normalfont for the latin script since we may
% change normalfont in other scripts
- \let\normalfontlatin=\normalfont
+ \cs_set_eq:cc{ normalfontlatin }{ normalfont }
% And for all cases, we also reset \<xx>familylatin
- \cs_gset_eq:cc{rmfamilylatin}{xpg@defaultfont@rm}
- \cs_gset_eq:cc{sffamilylatin}{xpg@defaultfont@sf}
- \cs_gset_eq:cc{ttfamilylatin}{xpg@defaultfont@tt}
-}
-
-\def\resetfontlatin{
- \DeclareRobustCommand\rmfamily{\xpg@defaultfont@rm}
- \DeclareRobustCommand\sffamily{\xpg@defaultfont@sf}
- \DeclareRobustCommand\ttfamily{\xpg@defaultfont@tt}
- \xpg@patch@fontfamilies
- \global\let\normalfont=\normalfontlatin
-}
-
-\def\selectfontfamilylatin{
- \def\tmp@tt{tt}\def\tmp@sf{sf}
- \ifx\familytype\tmp@tt
- \ttfamilylatin
- \else\ifx\familytype\tmp@sf
- \sffamilylatin
- \else\rmfamilylatin\fi\fi}
-
-\def\xpg@select@fontfamily#1{
- \def\tmp@tt{tt}\def\tmp@sf{sf}
- \ifx\familytype\tmp@tt
- \__xpg_use_or_warn:c{#1@font@tt}
- \else\ifx\familytype\tmp@sf
- \__xpg_use_or_warn:c{#1@font@sf}
- \else\__xpg_use_or_warn:c{#1@font@rm}\fi\fi}
-
-\def\xpg@set@normalfont#1{
- \letcs{\rmfamily}{#1@font@rm}
- \letcs{\sffamily}{#1@font@sf}
- \letcs{\ttfamily}{#1@font@tt}
- \robustify\rmfamily
- \robustify\sffamily
- \robustify\ttfamily
- \gdef\normalfont{\protect\xpg@select@fontfamily{#1}
- \fontseries{\seriesdefault}\selectfont
- \fontshape{\shapedefault}
- \ifdefined\UseHook\UseHook{normalfont}\fi
- \selectfont}
- \gdef\reset@font{\protect\normalfont}
-}
-
-\let\@@fterindentfalse\@afterindentfalse
-\def\french@indent{
- \let\@afterindentfalse\@afterindenttrue
+ \cs_set_eq:cc{ rmfamilylatin }{ xpg_defaultfont_rm: }
+ \cs_set_eq:cc{ sffamilylatin }{ xpg_defaultfont_sf: }
+ \cs_set_eq:cc{ ttfamilylatin }{ xpg_defaultfont_tt: }
+}
+
+\cs_set_nopar:Nn \xpg_select_fontfamily:n
+{
+ \str_if_eq:VnTF \familytype { tt }
+ { \__xpg_use_or_warn:c { #1@font@tt } }
+ { \str_if_eq:VnTF \familytype { sf }
+ { \__xpg_use_or_warn:c { #1@font@sf } }
+ { \__xpg_use_or_warn:c { #1@font@rm } }
+ }
+}
+
+\cs_set_protected:Npn \xpg_select_default_fontfamily:n #1
+ {
+ \tl_set:Ne \l_tmpa_tl { \familydefault }
+ \tl_set:Ne \l_tmpb_tl { \sfdefault }
+ \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl
+ { \tl_set:Nn \familytype {sf} }
+ { \tl_set_eq:NN \l_tmpb_tl \ttdefault
+ \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl
+ { \tl_set:Nn \familytype {tt} }
+ { \tl_set:Nn \familytype {rm} }
+ }
+ \xpg_select_fontfamily:n{#1}
+ }
+
+\cs_new_nopar:Nn \xpg_set_normalfont:n
+{
+ \cs_set_eq:cc { rmfamily } { #1@font@rm }
+ \cs_set_eq:cc { sffamily } { #1@font@sf }
+ \cs_set_eq:cc { ttfamily } { #1@font@tt }
+ \cs_set_nopar:Npn \normalfont
+ { \xpg_select_default_fontfamily:n {#1}
+ \fontseries{\seriesdefault}\selectfont
+ \fontshape{\shapedefault}
+ \hook_use:n { normalfont }
+ \selectfont
+ }
+ \cs_set_nopar:Npn \reset@font {\protect\normalfont}
+}
+
+\cs_gset_eq:cc { @@fterindentfalse } { @afterindentfalse }
+\cs_new_nopar:Nn \__xpg_french_indent:
+{
+ \cs_set_eq:cc { @afterindentfalse } { @afterindenttrue }
\@afterindenttrue
}
-\def\nofrench@indent{
- \let\@afterindentfalse\@@fterindentfalse
+\cs_new_nopar:Nn \__xpg_no_french_indent:
+{
+ \cs_set_eq:cc { @afterindentfalse } { @@fterindentfalse }
\@afterindentfalse
}
@@ -5839,10 +5838,10 @@ to track the issues and follow progress.
\cs_new:Nn \__xpg_select_background_language:n
{
- \str_if_eq:eeTF{\prop_item:Nn{\g_xpg_langsetup_prop}{#1/lcscript}}{latin}
+ \str_if_eq:eeTF { \prop_item:Nn{\l_xpg_langsetup_prop}{#1/lcscript} } { latin }
{}
- {\xpg@set@normalfont{#1}}
- \csuse{#1@globalnumbers}
+ { \xpg_set_normalfont:n{#1} }
+ \use:c{#1@globalnumbers}
}
\cs_generate_variant:Nn \__xpg_select_background_language:n {e}
% Declare secondary language #2 with language options #1
@@ -5853,7 +5852,7 @@ to track the issues and follow progress.
\__xpg_load_lang_definition:ee {#1} {#2}
% define environment and command if not alias
\str_if_eq:eeT {\prop_item:Ne \__xpg_alias {#2/target}} {#2} {
- \use:c{\prop_item:Ne{\g_xpg_langsetup_prop}
+ \use:c{\prop_item:Ne{\l_xpg_langsetup_prop}
{#2/DefineCommandsCmd}}
{#2}
}
@@ -5866,28 +5865,13 @@ to track the issues and follow progress.
\cs_new:Nn \__xpg_set_otherlanguage:nn
{
\__xpg_register_language:nn{#1}{#2}
- % If a variant is set, store it.
- \gdef\otherlanguagevariant{}
- % Register the language options
- \__xpg_set_language_options:nnn {#2} {#1} {@xpg@other@langvariant}
-
- \csgdef{#2@gvar}{\otherlanguagevariant}
- \prop_get:NeNT \g_xpg_langsetup_prop {#2/babelname} \l_tmpa_tl
- { \xdef\otherlanguagebabelname{\l_tmpa_tl} }
- \cs_gset_eq:cc{#2@gbabelname}{otherlanguagebabelname}
}
\cs_generate_variant:Nn \__xpg_set_otherlanguage:nn { ee }
-
-% Store main language variant for external packages
-\define@key{xpg@other@langvariant}{variant}{
- \gdef\otherlanguagevariant{#1}
-}
-
\NewDocumentCommand \setotherlanguages { m }
- {
+{
\clist_map_function:eN { #1 } \setotherlanguage
- }
+}
\cs_set:Nn \xpg_common_language:
{% FIXME is this really needed???
@@ -5910,7 +5894,8 @@ to track the issues and follow progress.
% for specific (esp. tag-based) aliases
% where \text<alias> would cause clashes
% (e.g., \textit)
-\newcommand\textlang[3][]{
+\NewDocumentCommand \textlang { O{} m +m }
+{
\__xpg_textlanguage:een {#1} {#2} {#3}
}
@@ -5919,45 +5904,20 @@ to track the issues and follow progress.
% inside case changing commands (e.g. \MakeUppercase)
\tl_put_right:Nn \l_text_case_exclude_arg_tl { \textlang }
-% Alias to {<lang>}, but more suitable
-% for specific (esp. tag-based) aliases
-% where {<alias>} would cause clashes
-% (e.g., \fi)
-\DeclareEnvironmentCopy { lang } { otherlanguage }
-
% wrapper for foreignlanguage and otherlanguage*
-\newcommand*\polyglossia@setforeignlanguage[2][]{
- \select@@language[#1]{#2}
+\cs_new_nopar:Nn \xpg_set_foreign_language:nn
+{
+ \xpg_select_language:nn { #1 } { #2 }
\__xpg_register_language:nn{#1}{#2}
- % Store babelname of current language (for external packages such as biblatex)
- \tl_if_blank:nTF {#1}{
- \ifcsundef{#2@gbabelname}{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }{
- \edef\babelname{\csuse{#2@gbabelname}}
- }
- }{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }
- % Store BCP-47 id of current language
- \__xpg_store_bcp_info:nn {#1}{#2}
-}
-
-% Expandable lowercasing. We use this to assure keyval
-% options are lowercased (also when used in \MakeUppercase
-% contexts e.g. in headings)
-% Macro adapted from tudscr.sty
-\newcommand*\xpg@str@lowercase[2]{
- \protected@edef#1{
- \lowercase{\def\noexpand#1{#2}}
- }#1
}
% lowercase options before passing to setkeys
-\cs_new:Nn \__xpg_set_keys:nn
+\NewDocumentCommand \SetGlossOptions { m m }
{
- \xpg@str@lowercase{\xpg@tmp@opts}{#2}
- \exp_args:Nne \setkeys{#1}{\xpg@tmp@opts}
+ % \text_lowercase:n fully expands
+ % (as opposed to \str_lowercase:n)
+ \use:c { xpg_#1_default_options_tl }
+ \exp_args:Ne \keys_set:ne{ polyglossia / gloss / #1 }{ \text_lowercase:n {#2} }
}
% joint code of \foreignlanguage, otherlanguage*
@@ -5967,54 +5927,30 @@ to track the issues and follow progress.
\cs_new:Nn \xpg_otherlanguage:nn
{
\xpg_error_if_lang_not_loaded:n{#2}
- \__xpg_set_keys:nn{#2}{#1}
- \polyglossia@setforeignlanguage[#1]{#2}
+ \SetGlossOptions{#2}{#1}
+ \xpg_set_foreign_language:nn { #1 } { #2 }
% Hook for external packages such as biblatex
\polyglossia@language@switched
% buggy restoration heure
- \csuse{inlineextras@#2}
+ \use:c{inlineextras@#2}
% This is a hook for external packages which want to access variants
% via babelname (such as biblatex)
\cs_if_exist_use:c{inlineextras@bbl@\babelname}
}
\DeclareDocumentCommand { \foreignlanguage } { O{} m +m }
- {
+{
\__xpg_foreignlanguage:eeen {#1} {#2} {\xpg_alias_base_lang:n{#2}} {#3}
- }
+}
% prevent case changing of language name in \foreignlanguage
\tl_put_right:Nn \l_text_case_exclude_arg_tl { \foreignlanguage }
-% Direct access to polyglossia@setforeignlanguage
+% Direct access to \xpg_set_foreign_language:nn
% used in captions
-\newcommand{\setforeignlanguage}[2][]
+\NewDocumentCommand \setforeignlanguage { O{} m }
{
- \polyglossia@setforeignlanguage[#1]{#2}
-}
-
-% Stack to store matrix languages
-\seq_new:N \__xpg_current_matrixlang_stack
-
-% Store embedding language when an embedded language is switched to
-\cs_new_nopar:Nn \__xpg_store_matrixlang:
-{
- \seq_gput_left:Nn \__xpg_current_matrixlang_stack \languagename
-}
-
-% When an embedded language is closed, reset to the embedding language
-% and remove stored matrix language from stack
-\cs_new_nopar:Nn \__xpg_reset_to_matrixlang:
-{
- % if stack is empty, use main language
- \seq_gpop_left:NNTF \__xpg_current_matrixlang_stack \l_tmpa_tl
- { \cs_set_eq:NN \__xpg_current_matrixlang \l_tmpa_tl }
- { \cs_set_eq:NN \__xpg_current_matrixlang \mainlanguagename }
- % Reset the language's/script's font families if the embedding script is latin
- \str_if_eq:eeT{\prop_item:Ne{\g_xpg_langsetup_prop}{\__xpg_current_matrixlang/lcscript}}{latin}
- {\resetfontlatin}
- % In case a \<lang>font is defined, re-activate that
- \exp_args:Ne \xpg@set@normalfont{\__xpg_current_matrixlang}
+ \xpg_set_foreign_language:nn { #1 } { #2 }
}
% internal wrapper for foreign language
@@ -6028,12 +5964,10 @@ to track the issues and follow progress.
{
\msg_show:nnn { polyglossia } { languagenotloaded } {#2}
}{
- \__xpg_store_matrixlang:
\group_begin:
\xpg_otherlanguage:nn{ \xpg_alias_add_to_option_i:nn{#2}{#1} }{ #3 }
\__xpg_lang_set_text_direction:nn{#3}{#4}
\group_end:
- \__xpg_reset_to_matrixlang:
}
}
\cs_generate_variant:Nn \__xpg_foreignlanguage:nnnn {eeen}
@@ -6042,11 +5976,9 @@ to track the issues and follow progress.
% otherlanguage* is the environment equivalent of \foreignlanguage
\DeclareDocumentEnvironment { otherlanguage* } { O{} m }
{
- \__xpg_store_matrixlang:
\__xpg_otherlanguage:eee { #1 } { #2 } { \xpg_alias_base_lang:n { #2 } }
}{
- \egroup% \group_end: does not work here!
- \__xpg_reset_to_matrixlang:
+ \c_group_end_token% \group_end: does not work here!
}
% internal wrapper
@@ -6061,7 +5993,7 @@ to track the issues and follow progress.
}{
\xpg_otherlanguage:nn{ \xpg_alias_add_to_option_i:nn{#2}{#1} }{ #3 }
\__xpg_lang_set_text_direction:nn{#3}%
- \bgroup% \group_begin: does not work here!
+ \c_group_begin_token% \group_begin: does not work here!
}
}
\cs_generate_variant:Nn \__xpg_otherlanguage:nnn { eee }
@@ -6077,9 +6009,6 @@ to track the issues and follow progress.
}
\cs_generate_variant:Nn \__xpg_textlanguage:nnn {een}
-% Track whether we are in an inline lang (\text...) switch
-\bool_new:N \l__xpg_inline_lang_bool
-
% use by \text<lang> and \textlang. Equivalent to \foreignlanguage,
% except that dates are localized.
% #1: option
@@ -6093,41 +6022,43 @@ to track the issues and follow progress.
\msg_show:nnn { polyglossia } { languagenotloaded } {#2}
}
{
- \__xpg_store_matrixlang:
\group_begin:
- \bool_set_true:N \l__xpg_inline_lang_bool
\xpg_otherlanguage:nn{#1}{#3}
- \csuse{date#3}
+ \use:c{date#3}
% This is a hook for external packages which want to access variants
% via babelname (such as biblatex)
\cs_if_exist_use:c{date@bbl@\babelname}
\__xpg_lang_set_text_direction:nn{#3}{#4}
\group_end:
- \__xpg_reset_to_matrixlang:
}
}
\cs_generate_variant:Nn \__xpg_textlanguage:nnnn {nnen}
% Define language-specific hyphenation exceptions
-\newcommand\pghyphenation[3][]{
- \bgroup
- \xpg_error_if_lang_not_loaded:n{#2}
- \setkeys{#2}{#1}
- \select@@language[#1]{#2}
+\NewDocumentCommand \pghyphenation {O{} m m}
+{
+ \c_group_begin_token
+ \xpg_error_if_lang_not_loaded:n { #2 }
+ \SetGlossOptions{#2}{#1}
+ \xpg_select_language:nn { #1 } { #2 }
\hyphenation{#3}
- \egroup
+ \c_group_end_token
}
% Hook that other package authors can use
% (for instance biblatex):
% Do not rename!
-\newcommand*{\xpg@hook@setlanguage}{}
+\cs_set_nopar:Npn \xpg@hook@setlanguage {}
-\def\xpg@pop@language@i#1#2{
- \xpg@set@language@aux[#1]{#2}
+\cs_set_nopar:Nn \__xpg_pop_language:nn
+{
+ \xpg_set_language_aux:nn { #1 } { #2 }
\xpg@hook@setlanguage
- \let\emp@langname\@undefined}
+% FIXME This seems to be a very old relict.
+% The macro is nowhere used. Probably remove.
+% \let\emp@langname\@undefined
+}
\DeclareDocumentCommand \selectlanguage {s O{} m}
{
@@ -6146,131 +6077,124 @@ to track the issues and follow progress.
\cs_new:Nn \__xpg_select_language:nnn
{
% Register the language options
- \__xpg_set_language_options:nnn {#3} {#2} {@xpg@set@langvariant}
+ \__xpg_set_language_options:nn {#3} {#2}
\IfBooleanTF { #1 } % The starred variant does not write to the aux
{
- \xpg@set@language@nonaux[#2]{#3}
+ \xpg_set_language_nonaux:nn { #2 } { #3 }
}{
- \cs_set_nopar:Npe \xpg@pop@language { \exp_not:N \xpg@pop@language@i {#2} {#3} }
- \group_insert_after:N \xpg@pop@language
- \xpg@set@language@aux[#2]{#3}
+ \cs_set_nopar:Ne \xpg_pop_language: { \exp_not:N \__xpg_pop_language:nn { #2 } { #3 } }
+ \group_insert_after:N \xpg_pop_language:
+ \xpg_set_language_aux:nn { #2 } { #3 }
}
- \__xpg_register_language:nn{#2}{#3}
+ \__xpg_register_language:nn { #2 } { #3 }
}
\cs_generate_variant:Nn \__xpg_select_language:nnn { nee, nne }
-
% set lang option #2 for lang #1
-\cs_new:Nn \__xpg_set_language_options:nnn
+\cs_new:Nn \__xpg_set_language_options:nn
{
- \tl_if_blank:nF {#2}
+ \cs_if_exist:cT { xpg_#1_default_options_prop }
{
- % If the optional argument sets a value for the key “variant”, copy it to xpg@langvariant
- \clist_map_inline:nn { #2 } {
- \xpg@parsevariantkeyvalue##1=#3:#1\relax
- }%
- \__xpg_set_keys:nn{#1}{#2}
+ \prop_concat:ccc { l_xpg_curropt_prop } { l_xpg_curropt_prop }
+ { xpg_#1_default_options_prop }
}
+ \xpg__keyval_parser:eeN { #2 } { #1 } \l_xpg_curropt_prop
+ \SetGlossOptions{#1}{#2}
}
% Initialize default language options, so that
% \iflanguageoption has the info it needs also
% for default settings
-\newcommand*\xpg@initialize@gloss@options[2]{
- \__xpg_set_language_options:nnn {#1} {#2} {@xpg@set@langvariant}
-}
+\NewDocumentCommand \InitializeGlossOptions { m m }
+{
+ \tl_new:c { xpg_#1_default_options_tl }
+ \prop_new:c { xpg_#1_default_options_prop }
+ \keys_precompile:nec { polyglossia / gloss / #1 }
+ { \text_lowercase:n { #2, \xpg__tmp_default_options_tl } }
+ { xpg_#1_default_options_tl }
+ \xpg__keyval_parser:enc { #2, \xpg__tmp_default_options_tl } { #1 }
+ { xpg_#1_default_options_prop }
+ \prop_concat:ccc { l_xpg_curropt_prop } { l_xpg_curropt_prop }
+ { xpg_#1_default_options_prop }
+ \use:c { xpg_#1_default_options_tl }
+ \__xpg_set_language_options:nn {#1} {#2}
+}
+\tl_new:N \xpg__tmp_default_options_tl
+\cs_generate_variant:Nn \keys_precompile:nnN { nec }
% Record synonymous keyvals such as variant=us and variant=american
-% Syntax: \xpg@set@alias@values{<lang>}{<key>}{<val>}{<alias vals, comma-separated>}
-\newcommand*\xpg@set@alias@values[4]{%
- \prop_if_exist:cF { xpg@alias@keyvals@#1@#3 }
- { \prop_new:c {xpg@alias@keyvals@#1@#3} }
- \prop_put:cnn { xpg@alias@keyvals@#1@#3 }
- {#2}{#4}
- \prop_if_exist:cF { xpg@alias@keyvals@#1@#4 }
- { \prop_new:c {xpg@alias@keyvals@#1@#4} }
- \prop_put:cnn { xpg@alias@keyvals@#1@#4 }
- {#2}{#3}
-}
-
-% Patch xkeyval to record default values of keys
-\pretocmd{\XKV@define@default}{%
- \csgdef{xpg@default@opt@\XKV@header #1}{#2}
-}{}{\xpg@warning{Patching xkeyval failed!}}
-
-% Helper to get and register option keyvals
-\def\xpg@parsevariantkeyvalue#1=#2@#3:#4\relax{
- \def\@tmpa{#1}
- \def\@tmpb{variant}
- % variant values are stored in specific macros
- % (\xpg@main@langvariant, \xpg@other@langvariant
- % and \xpg@set@langvariant)
- \ifx\@tmpa\@tmpb\setkeys{#3}{#1=#2}\fi
- \tl_if_empty:nTF{#2}
- {
- \ifcsdef{xpg@default@opt@KV@#4@#1}
- {\xpg@store@opt@keyval#1:\csuse{xpg@default@opt@KV@#4@#1}=:#4\relax}
- {}%
- }
- { \xpg@store@opt@keyval#1:#2:#4\relax }
-}%
-
-% Store option keys and values
-% This strips trailing '=' from values.
-\def\xpg@store@opt@keyval#1:#2=:#3\relax{
- \prop_if_exist:cF { xpg@current@options@#3 }
- { \prop_new:c {xpg@current@options@#3} }
- \prop_put:cnn { xpg@current@options@#3 }
- {#1}{#2}
+% Syntax: \SetLanguageAliasValues{<lang>}{<key>}{<alias vals, comma-separated>}
+\int_new:N \l_xpg_alias_keyvals_int
+\int_set:Nn \l_xpg_alias_keyvals_int { 2 }
+\NewDocumentCommand \SetLanguageAliasValues { m m m }
+{
+ \clist_map_inline:nn { #3 }
+ {
+ \int_const:cn { c_xpg_alias_keyvals_#1_#2_##1_int } { \l_xpg_alias_keyvals_int }
+ }
+ \int_incr:N \l_xpg_alias_keyvals_int
}
+\cs_new:Npn \xpg__keyval_parser:nnN #1 #2 #3 % #1 = key-vals, #2 = language, #3 = prop
+ {
+ \keyval_parse:nnn
+ { \xpg__keyval_parser_default:nnn { #2 } { #3 } }
+ { \xpg__keyval_parser_nondefault:nnnn { #2 } { #3 } }
+ { #1 }
+ }
+\cs_generate_variant:Nn \xpg__keyval_parser:nnN { eeN, enc }
+
+\cs_new:Npn \xpg__keyval_parser_default:nnn #1 #2 #3 % #1 = lang, #2 = prop, #3 = key
+ {
+ \str_set:Nn \l_tempa_str { #1 / #3 }
+ \str_concat:NNN \l_tempa_str \c__keys_default_root_str \l_tempa_str
+ \prop_put:Nne #2 { #1 / #3 } { \use:c { \l_tempa_str } }
+ }
+
+\cs_new:Npn \xpg__keyval_parser_nondefault:nnnn #1 #2 #3 #4 % #1 = lang, #2 = prop, #3 = key, #4 = value
+ {
+ \prop_put:Nnn #2 { #1 / #3 } { #4 }
+ }
\prg_set_conditional:Npnn \__xpg_check_option_value:NNN #1#2#3 { p , T , F , TF }
-{
- \prop_get:cnNTF {xpg@current@options@#1} {#2} \l_tmpa_tl
- {
- \str_if_eq:eeTF{\l_tmpa_tl}{#3}
- {\prg_return_true:}
+ {
+ \bool_lazy_or:nnTF
+ {
+ \str_if_eq_p:ee { \prop_item:Nn \l_xpg_curropt_prop { #1 / #2 } } { #3 }
+ } {
+ \int_compare_p:nNn
{
- \prop_get:cnNTF {xpg@alias@keyvals@#1@#3} {#2} \l_tmpb_tl
- {
- \clist_set:Ne{\l_tmpa_clist}{\l_tmpb_tl}
- \providetoggle{xpgvalfound}
- \togglefalse{xpgvalfound}
- \clist_map_inline:Nn \l_tmpa_clist {
- \str_if_eq:eeT{##1}{\l_tmpa_tl}
- { \toggletrue{xpgvalfound} }
- }
- \iftoggle{xpgvalfound}{\prg_return_true:}{\prg_return_false:}
- }
- {
- \prg_return_false:
- }
- }
- }
- {
- \prg_return_false:
- }
+ \cs_if_exist_use:cF { c_xpg_alias_keyvals_#1_#2_#3_int } { 0 }
+ } = {
+ \cs_if_exist_use:cF { c_xpg_alias_keyvals_#1_#2_\prop_item:Nn \l_xpg_curropt_prop { #1 / #2 }_int } { 1 }
+ }
+ } { \prg_return_true: } { \prg_return_false: }
+ }
+
+\prg_set_conditional:Npnn \xpg_if_main_language:n #1 { T, F, TF }
+{
+ \str_if_eq:VnTF \xpg_main_language_tl { #1 }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\cs_set_eq:NN \IfMainLanguageTF \xpg_if_main_language:nTF
+
+\cs_set_eq:NN \IfMainLanguageT \xpg_if_main_language:nT
+
+\cs_set_eq:NN \IfMainLanguageF \xpg_if_main_language:nF
+
% Test if option value is set
\DeclareDocumentCommand \iflanguageoption { m m m m m }
{
\__xpg_check_option_value:NNNTF{#1}{#2}{#3}{#4}{#5}
}
-
-% Append any variant to csv list of variants
-\define@key{xpg@langvariant}{variant}{
- \clist_if_in:NeF \xpg@vloaded {#1}{
- \clist_gput_right:Ne \xpg@vloaded {#1}
- }
-}
-
% Test if language is loaded
\DeclareDocumentCommand \iflanguageloaded { m m m }
{
- \AddToHook{begindocument/end}{
+ \hook_gput_code:nnn {begindocument/end} {.}
+ {
\clist_if_in:NeTF \xpg@loaded{#1}{#2}{#3}
}
}
@@ -6278,7 +6202,8 @@ to track the issues and follow progress.
% Same for babellanguage is loaded
\DeclareDocumentCommand \ifbabellanguageloaded { m m m }
{
- \AddToHook{begindocument/end}{
+ \hook_gput_code:nnn {begindocument/end} {.}
+ {
\clist_if_in:NeTF \xpg@bloaded{#1}{#2}{#3}
}
}
@@ -6286,7 +6211,8 @@ to track the issues and follow progress.
% Same for languageid
\DeclareDocumentCommand \iflanguageidloaded { m m m m }
{
- \AddToHook{begindocument/end}{
+ \hook_gput_code:nnn {begindocument/end} {.}
+ {
\str_case:nnTF {#1}
{
{bcp-47} { \clist_if_in:NeTF \xpg@bcp@loaded{#2}{#3}{#4} }
@@ -6294,7 +6220,7 @@ to track the issues and follow progress.
}
{}
{
- \xpg@error{Invalid~ \string\iflanguageidloaded\space argument:~ #1}
+ \xpg_ill_arg_msg:nn { #1 } { \iflanguageidloaded }
}
}%
}
@@ -6324,53 +6250,46 @@ to track the issues and follow progress.
}
-\newcommand*{\xpg@set@language@nonaux}[2][]{
- \@select@language[#1]{#2}
+\cs_new_nopar:Nn \xpg_set_language_nonaux:nn
+{
+ \__xpg_start_language:nn { #1 } { #2 }
}
-\newcommand*{\xpg@set@language@aux}[2][]{
- % Store babelname of current language (for external packages such as biblatex)
- \tl_if_blank:nTF {#1}{
- \ifcsundef{#2@gbabelname}{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }{
- \edef\babelname{\csuse{#2@gbabelname}}
- }
- }{
- \edef\babelname{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/babelname}}
- }
- % Store BCP-47 id of current language
- \__xpg_store_bcp_info:nn {#1}{#2}
- \@select@language[#1]{#2}
+\cs_new_nopar:Nn \xpg_set_language_aux:nn
+{
+ \__xpg_start_language:nn { #1 } { #2 }
% Write to the aux
- \xpg@set@language@only@aux[#1]{#2}
+ \xpg_set_language_only_aux:nn { #1 } { #2 }
}
-\newcommand*{\xpg@set@language@only@aux}[2][]{
+\cs_new_nopar:Nn \xpg_set_language_only_aux:nn
+{
% Write to the aux (toc files)
\if@filesw
\addtocontents{toc}{\selectlanguage*[#1]{#2}}
\fi
}
-\AtBeginDocument{
+\hook_gput_code:nnn {begindocument} {.}
+{
\if@filesw
- \immediate\write\@mainaux
- {\ProvideDocumentCommand\selectlanguage{sO{}m}{}}
+ \immediate\write\@mainaux
+ {\ProvideDocumentCommand\selectlanguage{sO{}m}{}}
\fi
}
% Since captions might float to other language regions,
% we need to change the language here (#542)
-\AddToHook{cmd/caption/before}{
+\hook_gput_code:nnn {cmd/caption/before} {.}
+{
\ifhmode\unskip\fi
\addtocontents{lof}{\protect\setforeignlanguage{\languagename}}
\addtocontents{lot}{\protect\setforeignlanguage{\languagename}}
}
% check if language is defined
-\prg_set_conditional:Npnn \__xpg_check_if_exist_l@:n #1 { F, TF }
+\prg_set_conditional:Npnn \__xpg_pattern_check_if_exists:n #1 { F, TF }
{
\bool_lazy_and:nnTF
{ \cs_if_exist_p:c { l@#1 } }
@@ -6379,82 +6298,125 @@ to track the issues and follow progress.
{ \prg_return_false: }
}
-\def\polyglossia@luatex@load@lang#1{
+\cs_new_nopar:Nn \__xpg_luatex_load_lang:n
+{
% if \l@#1 is not properly defined, call lua function newloader(#1),
% and assign the returned number to \l@#1
- \__xpg_check_if_exist_l@:nF {#1}
+ \__xpg_pattern_check_if_exists:nF {#1}
{
\directlua { token.set_char('l@#1', polyglossia.newloader'#1') }
}
}
-% This check is also used by biblatex, so don't
-% rename silently.
-\newcommand\xpg@ifdefined[3]{
+% check if language is defined
+\prg_set_conditional:Npnn \xpg_if_language_defined:n #1 { T, F, TF }
+{
% With luatex, we first need to define \l@#1.
\sys_if_engine_luatex:T
{
- \polyglossia@luatex@load@lang{#1}
+ \__xpg_luatex_load_lang:n {#1}
}
- \__xpg_check_if_exist_l@:nTF{#1}{#2}{#3}
+ \__xpg_pattern_check_if_exists:nTF{#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+% Aliases for gloss files
+\cs_gset_eq:cc { IfLanguageDefinedTF } { xpg_if_language_defined:nTF }
+\cs_gset_eq:cc { IfLanguageDefinedT } { xpg_if_language_defined:nT }
+\cs_gset_eq:cc { IfLanguageDefinedF } { xpg_if_language_defined:nF }
+
+% Check if patterns for language #1 is defined. If not, try
+% the comma-separated list of fallbacks in #2
+\NewDocumentCommand \TryPatternWithFallback { m m }
+{
+ \xpg_if_language_defined:nF { #1 }
+ {
+ \clist_clear_new:N \l_xpg_lang_patterns
+ \clist_set:Ne \l_xpg_lang_patterns { #2 }
+ \bool_set_false:N \l_tmpa_bool
+ \clist_map_inline:Nn \l_xpg_lang_patterns
+ {
+ \xpg_if_language_defined:nT { ##1 }
+ {
+ \cs_gset_eq:cc { l@#1 } { l@##1 }
+ \bool_set_true:N \l_tmpa_bool
+ \clist_map_break:
+ }
+ }
+ \bool_if:NF \l_tmpa_bool
+ {
+ \xpg_warning_msg:n
+ {No~ hyphenation~ patterns~ for~ #1~ found \iow_newline:
+ Falling~ back~ to~ the~ default~ patterns~ (=~English)!}
+ \exp_args:Nc \adddialect {l@#1} 0
+ }
+ }
+}
+
+% This old term is used by biblatex, so don't drop!
+\cs_gset_eq:cc { xpg@ifdefined } { xpg_if_language_defined:nTF }
+
% Set \bbl@hyphendata@\the\language, which is (lua)babel's
% hyphenation pattern hook
% FIXME Clarifiy why/when this is needed.
-\newcommand*\xpg@set@bbl@hyphendata[1]{
+\cs_new:Nn \xpg_set_bbl_hyphendata:n
+{
\sys_if_engine_luatex:T
{
- \ifcsdef{bbl@hyphendata@#1}{}{
- \global\@namedef{bbl@hyphendata@\the\language}{}
+ \cs_if_exist:cF {bbl@hyphendata@#1}
+ {
+ \cs_gset:cpn {bbl@hyphendata@\the\language} {}
}
}
}
% Set hyphenation patterns for a given language. This does the right
% thing both for XeTeX and LuaTeX
-\newcommand*\xpg@set@hyphenation@patterns[1]{
- \sys_if_engine_luatex:T { \polyglossia@luatex@load@lang{#1} }
+\cs_new:Nn \xpg_set_hyphenation_patterns:n
+{
+ \sys_if_engine_luatex:T { \__xpg_luatex_load_lang:n {#1} }
\language=\csname l@#1\endcsname
}
-\newcommand*\@select@language[2][]{
+\cs_new:Nn \__xpg_start_language:nn
+{
% hook for compatibility with biblatex
- \select@language{#2}
- \xpg@set@bbl@hyphendata{\the\language}
+ \select@language { #2 }
+ \xpg_set_bbl_hyphendata:n {\the\language}
\xpg_initial_setup:
- \select@@language[#1]{#2}%
+ \xpg_select_language:nn { #1 } { #2 }
% Hook for external packages such as biblatex
- \polyglossia@language@switched%
- \__xpg_lang_set_par_direction:n{#2}
- \csuse{captions#2}%
- \csuse{date#2}%
+ \polyglossia@language@switched
+ \__xpg_lang_set_par_direction:n {#2}
+ \use:c {captions#2}
+ \use:c {date#2}
% These are hooks for external packages which want to access variants
% via babelname (such as biblatex)
- \cs_if_exist_use:c{captions@bbl@\babelname}
- \cs_if_exist_use:c{date@bbl@\babelname}
- \__xpg_local_marks:n{#2}
- \csuse{init@extras@#2}%
+ \cs_if_exist_use:c {captions@bbl@\babelname}
+ \cs_if_exist_use:c {date@bbl@\babelname}
+ \__xpg_local_marks:n {#2}
+ \use:c {init@extras@#2}
\__xpg_indent_first:n { #2 }
- \csuse{blockextras@#2}%
+ \cs_if_exist_use:c {blockextras@#2}
% This is a hook for external packages which want to access variants
% via babelname (such as biblatex)
- \cs_if_exist_use:c{blockextras@bbl@\babelname}
- }
+ \cs_if_exist_use:c {blockextras@bbl@\babelname}
+}
% hook for compatibility with biblatex
% (probably no longer used due to the
% more general hook that follows, but
% we keep it for backwards comp.)
-\def\select@language#1{}
+\cs_set:Npn \select@language #1 {}
% Hook for external packages such as biblatex
% do not rename!
-\def\polyglossia@language@switched{}
+\cs_new:Npn \polyglossia@language@switched {}
-% remove all custumization for language #1
+% remove all customization for language #1
\cs_new:Npn \noextrascurrent #1
-{%
+{
\cs_if_exist_use:c{noextras@#1}%
% This is a hook for external packages which want to access variants
% via babelname (such as biblatex)
@@ -6462,160 +6424,105 @@ to track the issues and follow progress.
}
% Common code for `\select@language' and `\foreignlanguage'.
-\newcommand{\select@@language}[2][]{%
+\cs_new:Nn \xpg_select_language:nn
+{
% disable the extras and number settings of the previous language
\cs_if_exist:cT{languagename}
{
\noextrascurrent{\languagename}
\cs_if_exist_use:c{no\languagename @numbers}
\sys_if_engine_xetex:T{
- \__xpg_if_LR_str:eTF{\prop_item:Ne{\g_xpg_langsetup_prop}{\languagename/direction}}
+ \__xpg_if_LR_str:eTF{\prop_item:Ne{\l_xpg_langsetup_prop}{\languagename/direction}}
{
- \__xpg_if_LR_str:eF{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/direction}}
+ \__xpg_if_LR_str:eF{\prop_item:Nn{\l_xpg_langsetup_prop}{#2/direction}}
{\setnonlatin} % LTR -> RTL
}
{
- \__xpg_if_LR_str:eT{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/direction}}
+ \__xpg_if_LR_str:eT{\prop_item:Nn{\l_xpg_langsetup_prop}{#2/direction}}
{\setlatin} % RTL -> LTR
}
}
}
- \polyglossia@set@language@name[#1]{#2}
- % Set the language's/script's font families
- \str_if_eq:eeT{\prop_item:Nn{\g_xpg_langsetup_prop}{#2/lcscript}} {latin}
- {
- \resetfontlatin
- }
- \bool_if:NF \l__xpg_inline_lang_bool
- { % This for non-inline font switches
- % in case a \<lang>font is defined
- \xpg@set@normalfont{#2}
- }
- \xpg@select@fontfamily{#2}
+ \xpg_set_language_name:n { #2 }
+ \xpg_set_normalfont:n { #2 }
+ \xpg_select_fontfamily:n { #2 }
\__xpg_use_or_warn:c{#2@language}
\cs_if_exist_use:c{#2@numbers}
- \use@localhyphenmins[#1]{#2}
+ \__xpg_use_localhyphenmins:nn { #1 } { #2 }
\__xpg_french_spacing:n { #2 }
}
-\let\xpg@pop@language\relax
+\cs_undefine:N \xpg_pop_language:
-%
-% Keep track of the active (nested) languages and options
-%
-\clist_new:N \l_xpg_lang_stack
-
-\cs_new:Nn \__xpg_stack_language:nn
-{
- \clist_gpush:Nn \l_xpg_lang_stack {#1:#2}
-}
+\DeclareDocumentEnvironment { otherlanguage } { O{} m }
+ {
+ \selectlanguage[#1]{#2}
+ } { }
-\cs_generate_variant:Nn \__xpg_stack_language:nn {nx}
+% Alias to {<lang>}, but more suitable
+% for specific (esp. tag-based) aliases
+% where {<alias>} would cause clashes
+% (e.g., \fi)
+\DeclareEnvironmentCopy { lang } { otherlanguage }
-\cs_new:Nn \__xpg_unstack_language:n
+\NewDocumentCommand \setlocalhyphenmins { m m m }
{
- \clist_gpop:NNTF \l_xpg_lang_stack \l_tmpa_tl {
- % Stored format = options:language => split:
- \seq_set_split:Nne \l_tmpa_seq {:} \l_tmpa_tl
- \seq_get_left:NN \l_tmpa_seq \l_tmpb_tl
- \seq_get_right:NN \l_tmpa_seq \l_tmpc_tl
- % Execute passed command with language and maybe options
- % and re-set stored language's keys
- \tl_if_empty:NTF \l_tmpb_tl {\cs_if_exist_use:c{#1}{\l_tmpc_tl}}
- {\__xpg_set_keys:nn{\l_tmpc_tl}{\l_tmpb_tl}
- \cs_if_exist_use:c{#1}[\l_tmpb_tl]{\l_tmpc_tl}
- }
- }
- {}
-}
-
-\DeclareDocumentEnvironment { otherlanguage } { O{} m }
- {
- % Get real current (pre-switch) options (incl. defaults)
- \clist_clear_new:N \l_xpg_current_options
- \prop_if_exist:cF { xpg@current@options@\languagename }
- { \prop_new:c {xpg@current@options@\languagename} }
- \prop_map_inline:cn {xpg@current@options@\languagename}
+ \xpg_if_language_defined:nTF{#1}
+ {
+ \cs_if_eq:ccTF { l@#1 } { l@nohyphenation }
{
- \clist_put_right:Nn \l_xpg_current_options {##1=##2}
+ \xpg_warning_msg:n {\string\setlocalhyphenmin\space~ useless~ for~ unhyphenated~ language~ #1}
+ }{
+ \providehyphenmins{#1}{#2#3}
}
- % Store current (pre-switch) options and language on stack
- \__xpg_stack_language:nx{\clist_use:Nn \l_xpg_current_options {,}}{\languagename}
- \selectlanguage[#1]{#2}
- }
- {
- % restore previous language in aux file and remove closed one from stack
- \__xpg_unstack_language:n{xpg@set@language@only@aux}
- }
-
-\newcommand{\setlocalhyphenmins}[3]{
- \xpg@ifdefined{#1}{
- \expandafter\ifx\csname l@#1\endcsname\l@nohyphenation
- \xpg@warning{\string\setlocalhyphenmin\space~ useless~ for~ unhyphenated~ language~ #1}
- \else
- \providehyphenmins{#1}{#2#3}
- \fi
}{
- \xpg@warning{\string\setlocalhyphenmin\space~ useless~ for~ unknown~ language~ #1}
+ \xpg_warning_msg:n {\string\setlocalhyphenmin\space~ useless~ for~ unknown~ language~ #1}
}
}
% \setlanghyphenmins[options]{lang}{l}{r}
-\newcommand*\setlanghyphenmins[4][]{%
+\NewDocumentCommand \setlanghyphenmins { O{} m m m }
+{
% Check for real language name and options
- \edef\xpg@tmp@opts{\xpg_alias_add_to_option_i:nn{#2}{#1}}
- \edef\xpg@tmp@lang{\xpg_alias_base_lang:n{#2}}
- \bgroup
- \xpg_error_if_lang_not_loaded:n{\xpg@tmp@lang}
- \__xpg_set_keys:nn{\xpg@tmp@lang}{\xpg@tmp@opts}
+ \tl_set:Nx \l_tmp_opts_tl { \xpg_alias_add_to_option_i:nn{#2}{#1} }
+ \tl_set:Nx \l_tmp_lang_tl { \xpg_alias_base_lang:n{#2} }
+ \c_group_begin_token
+ \xpg_error_if_lang_not_loaded:n{\l_tmp_lang_tl}
+ \SetGlossOptions{\l_tmp_lang_tl}{ \l_tmp_opts_tl }
% Store bcp47.tag@hypenmins
- \tl_if_blank:nTF {\xpg@tmp@opts}{%
- \ifcsundef{\csname xpg@tmp@lang\endcsname @g.bcp47.tag}{
- \csedef{tmp@bcp47.tag}{\prop_item:Ne{\g_xpg_langsetup_prop}{ \xpg@tmp@lang / bcp47 }}
- }{
- \csedef{tmp@bcp47.tag}{\csuse{#2@g.bcp47.tag}}
- }
- }{
- \csedef{tmp@bcp47.tag}{\prop_item:Ne{\g_xpg_langsetup_prop}{ \xpg@tmp@lang / bcp47 }}
- }
- \csgdef{\csname tmp@bcp47.tag\endcsname @hyphenmins}{{#3}{#4}}
- \egroup
+ \cs_set_nopar:cpe {tmp@bcp47.tag} { \prop_item:Ne{\l_xpg_langsetup_prop}{ \l_tmp_lang_tl / bcp47 } }
+ \cs_gset:cpn {\csname tmp@bcp47.tag\endcsname @hyphenmins} {{#3}{#4}}
+ \c_group_end_token
}
-% \use@localhypenmins[options]{lang}
-\newcommand*\use@localhyphenmins[2][]{
- \bgroup
- \xpg_error_if_lang_not_loaded:n{#2}
- \__xpg_set_keys:nn{#2}{#1}
+% \__xpg_use_localhyphenmins:nn {options}{lang}
+\cs_new_nopar:Nn \__xpg_use_localhyphenmins:nn
+{
+ \c_group_begin_token
+ \xpg_error_if_lang_not_loaded:n {#2}
+ \SetGlossOptions {#2} {#1}
% Use bcp47.tag@hypenmins
- \tl_if_blank:nTF {#1}{
- \ifcsundef{#2@g.bcp47.tag}{
- \csxdef{tmp@bcp47.tag}{\prop_item:Nn{\g_xpg_langsetup_prop}{ #2 / bcp47 }}
- }{
- \csxdef{tmp@bcp47.tag}{\csuse{#2@g.bcp47.tag}}
- }
- }{
- \csxdef{tmp@bcp47.tag}{\prop_item:Nn{\g_xpg_langsetup_prop}{ #2 / bcp47 }}
- }
- \egroup
- \ifcsundef{\csname tmp@bcp47.tag\endcsname @hyphenmins}{
- \ifcsundef{#2hyphenmins}{}
+ \cs_gset_nopar:cpe {tmp@bcp47.tag} { \prop_item:Nn{\l_xpg_langsetup_prop}{ #2 / bcp47 } }
+ \c_group_end_token
+ \cs_if_exist:cTF {\csname tmp@bcp47.tag\endcsname @hyphenmins}
+ {
+ \tl_set:Ne \l_tmpa_tl { \use:c{\csname tmp@bcp47.tag\endcsname @hyphenmins} }
+ \expandafter \set@hyphenmins \l_tmpa_tl
+ }{
+ \cs_if_exist:cT{#2hyphenmins}
{
\expandafter\expandafter\expandafter\set@hyphenmins\csname #2hyphenmins\endcsname\relax
}
- }{
- \edef\tmpa{\csuse{\csname tmp@bcp47.tag\endcsname @hyphenmins}}
- \expandafter\expandafter\expandafter\set@hyphenmins\tmpa\relax
}
- \sys_if_engine_luatex:T{
+ \sys_if_engine_luatex:T
+ {
% Set \totalhyphenmin if specified
- \prop_get:NeNTF \g_xpg_langsetup_prop {#2/totalhyphenmin} \l_tmpa_tl
+ \prop_get:NeNT \l_xpg_langsetup_prop {#2/totalhyphenmin} \l_tmpb_tl
{
- \xpg@info{totalhyphenmin: '\l_tmpa_tl'}
- \expandafter\hyphenationmin \l_tmpa_tl
+ \xpg_info_msg:n {totalhyphenmin: '\l_tmpb_tl'}
+ \expandafter\hyphenationmin \l_tmpb_tl
}
- {}
}
}
@@ -6627,23 +6534,26 @@ to track the issues and follow progress.
\DeclareDocumentEnvironment { hyphenrules } { O{} m }
{
% Check for real language name and options
- \edef\xpg@tmp@opts{\xpg_alias_add_to_option_i:nn{#2}{#1}}
- \edef\xpg@tmp@lang{\xpg_alias_base_lang:n{#2}}
+ \tl_set:Nx \l_tmp_opts_tl { \xpg_alias_add_to_option_i:nn{#2}{#1} }
+ \tl_set:Nx \l_tmp_lang_tl { \xpg_alias_base_lang:n{#2} }
% Register the language options
- \__xpg_set_language_options:nnn {\xpg@tmp@lang} {\xpg@tmp@opts} {@xpg@set@langvariant}
+ \__xpg_set_language_options:nn { \l_tmp_lang_tl } { \l_tmp_opts_tl }
% Now switch patterns
- \__xpg_use_or_warn:c{\use:c{xpg@tmp@lang}@language}
+ \__xpg_use_or_warn:c{\use:c{l_tmp_lang_tl}@language}
% And activate hyphenmins
- \use@localhyphenmins[\xpg@tmp@opts]{\xpg@tmp@lang}
+ \__xpg_use_localhyphenmins:nn { \l_tmp_opts_tl } { \l_tmp_lang_tl }
}
{ }
-\AddToHook{begindocument/before}{
- \IfPackageLoadedTF{bidi}{
- \providecommand*{\aemph}[1]{$\overline{\hboxR{#1}}$}
+\hook_gput_code:nnn {begindocument/before} {.}
+{
+ \IfPackageLoadedTF{bidi}
+ {
+ \ProvideDocumentCommand \aemph { m } { $\overline{\hboxR{#1}}$ }
}{}
- \IfPackageLoadedTF{luabidi}{
- \providecommand*{\aemph}[1]{$\overline{\hbox{\RL{#1}}}$}
+ \IfPackageLoadedTF{luabidi}
+ {
+ \ProvideDocumentCommand \aemph { m } { $\overline{\hbox{\RL{#1}}}$ }
}{}
}
@@ -6677,7 +6587,8 @@ to track the issues and follow progress.
.value_required:n = true,
}
-\keys_set:nn { polyglossia } {
+\keys_set:nn { polyglossia }
+{
localmarks = false,
verbose = true,
babelshorthands = false,
@@ -6694,23 +6605,35 @@ to track the issues and follow progress.
\sys_if_engine_luatex:T{
\str_if_eq:eeF{\g_xpg_luatex_renderer_str}{none}
{
- \xpg@info{Setting~ LuaTeX~ font~ renderer~ to~ \g_xpg_luatex_renderer_str}
+ \xpg_info_msg:n{Setting~ LuaTeX~ font~ renderer~ to~ \g_xpg_luatex_renderer_str}
\exp_args:Ne \defaultfontfeatures{Renderer=\g_xpg_luatex_renderer_str}
}
}
-\bool_if:nF \g_xpg_verbose_bool {
- \gdef\@latex@info#1{\relax} % no latex info
- \gdef\@font@info#1{\relax} % no latex font info
- \gdef\@font@warning#1{\relax} % no latex font warnings
- \gdef\zf@PackageInfo#1{\relax} % no fontspec info
- \gdef\xpg@info#1{\relax} % no polyglossia info
+\bool_if:nF \g_xpg_verbose_bool
+{
+ \cs_gset_nopar:Npn \@latex@info #1 { \relax } % no latex info
+ \cs_gset_nopar:Npn \@font@info #1 { \relax } % no latex font info
+ \cs_gset_nopar:Npn \@font@warning #1 { \relax } % no latex font warnings
+ \msg_redirect_module:nnn { fontspec } { info } { none } % no fontspec info
+ \msg_redirect_module:nnn { polyglossia } { info } { none } % no polyglossia info
}
\bool_if:nT \g_xpg_localmarks_bool {
\__xpg_enable_local_marks:
}
+% common code to initiate babelshordhands in glosses
+\cs_new:Npn \InitializeBabelShorthands
+{
+ \cs_if_exist:cF {initiate@active@char}
+ {
+ \file_input:n {babelsh.def}
+ \initiate@active@char{"}
+ \shorthandoff{"}
+ }
+}
+
% Control shorthand (de-)activation
% This checks that the shorthand char is only deactivated
% if we have activated it ourselves and hence keeps
@@ -6738,21 +6661,22 @@ to track the issues and follow progress.
% Inherit shorthands in other languages
\NewDocumentCommand \inheritbabelshorthands { m m }
{
- \AddToHook{begindocument/before}{
+ \hook_gput_code:nnn {begindocument/before} {.}
+ {
% Load the involved languages if necessary
% Error if they do not exist
\tl_set:Nn \l__xpg_tmpa_lang_tl { \xpg_alias_base_lang:n{#1} }
\clist_if_in:NeF \xpg@loaded {\l__xpg_tmpa_lang_tl}{
\file_if_exist:nTF{gloss-\l__xpg_tmpa_lang_tl .ldf}
{ \setotherlanguage{#1} }
- { \xpg@error{ Source~ language~ #1,~ used~ in~
+ { \xpg_error_msg:n { Source~ language~ #1,~ used~ in~
\string\inheritbabelshorthands,~ does~ not~ exist } }
}
\tl_set:Nn \l__xpg_tmpb_lang_tl { \xpg_alias_base_lang:n{#2} }
\clist_if_in:NeF \xpg@loaded {\l__xpg_tmpb_lang_tl}{
\file_if_exist:nTF{gloss-\l__xpg_tmpb_lang_tl .ldf}
{ \setotherlanguage{#2} }
- { \xpg@error{ Target~ language~ #2,~ used~ in~
+ { \xpg_error_msg:n { Target~ language~ #2,~ used~ in~
\string\inheritbabelshorthands,~ does~ not~ exist } }
}
% Test whether the requested shorthands exist
@@ -6764,7 +6688,7 @@ to track the issues and follow progress.
{ \bool_set_true:N \l__xpg_no_shorthands_bool }
\bool_if:nT { \l__xpg_no_shorthands_bool }
{
- \xpg@error{ No~ babel~ shorthands~ exist~ for~ language~ #1 }
+ \xpg_error_msg:n { No~ babel~ shorthands~ exist~ for~ language~ #1 }
}
% If so, apply:
\bool_if:nF { \l__xpg_no_shorthands_bool }
@@ -6789,7 +6713,7 @@ to track the issues and follow progress.
\iflanguageloaded{\l__xpg_tmpa_lang_tl}{
\use:c{\l__xpg_tmpa_lang_tl @shorthands}
}{
- \xpg@error{ Language~ #1,~ requested~ in~
+ \xpg_error_msg:n { Language~ #1,~ requested~ in~
\string\startbabelshorthands,~ is~ not~ loaded }
}
}
@@ -7090,7 +7014,7 @@ to track the issues and follow progress.
\ifnum#1<5000
\Hebrewnumeral{#1}%
\else
- \ifnum#1<6000 % current millenium, print without thousands
+ \ifnum#1<6000 % current millennium, print without thousands
\@tempcnta=#1\relax
\if@xpg@hebrew@fullyear\else\advance\@tempcnta by -5000\fi
\Hebrewnumeral{\@tempcnta}%
@@ -7419,7 +7343,7 @@ l3calc. Please update expl3!
\@ifundefined{@Remainder}{\input{cal-util.def}}{}
%% The following functions are straightforward implementation
-%% of Reingold & Dershowitz, Calendrical Calculations, The Millenium Edition
+%% of Reingold & Dershowitz, Calendrical Calculations, The Millennium Edition
%%
\def\@FixedFromHijri#1#2#3#4{% year,month,day,counter
@@ -7494,82 +7418,15 @@ Shawwāl\or Dhū ’l-Qaʿda\or Dhū ’l-Ḥijja\fi}
% \end{macrocode}
% \iffalse
%</hijrical.sty>
-%<*polyglossia-french.lua>
+%<*polyglossia-cjk-spacing.lua>
% \fi
% \clearpage
%
-% \subsection{polyglossia-french.lua}
+% \subsection{polyglossia-cjk-spacing.lua}
% \begin{macrocode}
--
--- polyglossia-punct.lua
--- part of polyglossia v2.1 -- 2024/03/07
---
-
-require('polyglossia-punct')
-
-local function set_left_space(lang, char, kern, rubber)
- polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
-end
-
-local function set_right_space(lang, char, kern, rubber)
- polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
-end
-
-local function activate_french_punct(thincolonspace, autospaceguillemets)
- -- We need different language tags here to make switching of options possible
- -- within a paragraph.
- local lang = "french"
- if thincolonspace then
- lang = lang.."-thincolon"
- end
- if autospaceguillemets then
- lang = lang.."-autospace"
- end
-
- polyglossia.activate_punct(lang)
- polyglossia.clear_spaced_characters(lang)
-
- if thincolonspace then
- set_left_space(lang, ':', 0.5)
- else
- set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
- end
-
- set_left_space(lang, '!', 0.5)
- set_left_space(lang, '?', 0.5)
- set_left_space(lang, ';', 0.5)
- set_left_space(lang, '‼', 0.5)
- set_left_space(lang, '⁇', 0.5)
- set_left_space(lang, '⁈', 0.5)
- set_left_space(lang, '⁉', 0.5)
- set_left_space(lang, '‽', 0.5) -- U+203D (interrobang)
-
- if autospaceguillemets then
- set_left_space(lang, '»', 0.5)
- set_left_space(lang, '›', 0.5)
- set_right_space(lang, '«', 0.5)
- set_right_space(lang, '‹', 0.5)
- end
-end
-
-local function deactivate_french_punct()
- polyglossia.deactivate_punct()
-end
-
-polyglossia.activate_french_punct = activate_french_punct
-polyglossia.deactivate_french_punct = deactivate_french_punct
-% \end{macrocode}
-% \iffalse
-%</polyglossia-french.lua>
-%<*polyglossia-korean.lua>
-% \fi
-% \clearpage
-%
-% \subsection{polyglossia-korean.lua}
-% \begin{macrocode}
---
--- polyglossia-korean.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- polyglossia-cjk-spacing.lua
+-- part of polyglossia v2.2 -- 2024/07/15
--
local glyph_id = node.id"glyph"
@@ -7577,13 +7434,17 @@ local hbox_id = node.id"hlist"
local vbox_id = node.id"vlist"
local glue_id = node.id"glue"
local penalty_id = node.id"penalty"
-local disc_id = node.id"disc"
+local whatsit_id = node.id"whatsit"
+local math_id = node.id"math"
--
--- attr_korean: variant = plain (0), classic (1), modern (2)
+-- attr_cjk: variant = plain: 0, JP/classic: 1, KR/modern: 2, SC: 3, TC: 4
+--
+local attr_cjk = luatexbase.attributes["xpg@attr@cjkspacing"]
+--
+-- attr_josa: ONLY For Korean. DO NOT declare \newattribute for other langs
--
-local attr_korean = luatexbase.attributes["xpg@attr@korean"]
-local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
+local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
--
-- characters after which linebreak is not allowed
@@ -7632,9 +7493,9 @@ local nobr_after = {
-- characters before which linebreak is not allowed
-- (currently, not much differences among the followings)
-- 1: normal chars
--- 2: hangul jamo vowels and trailing consonants
+-- 2: hangul jamo vowels and trailing consonants plus combinings
-- 3: kana small letters
--- 0: dashes (supress visible spacing)
+-- 0: dashes (suppress visible spacing after this char)
--
local nobr_before = setmetatable({
[0x21] = 1, -- ! EXCLAMATION MARK
@@ -7645,7 +7506,7 @@ local nobr_before = setmetatable({
[0x2D] = 0, -- - HYPHEN-MINUS
[0x2E] = 1, -- . FULL STOP
[0x2F] = 0, -- / SOLIDUS
- [0x3A] = 0, -- : COLON
+ [0x3A] = 1, -- : COLON
[0x3B] = 1, -- ; SEMICOLON
[0x3E] = 1, -- > GREATER-THAN SIGN
[0x3F] = 1, -- ? QUESTION MARK
@@ -7657,11 +7518,11 @@ local nobr_before = setmetatable({
[0xBB] = 1, -- » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
[0x2013] = 0, -- – EN DASH
[0x2014] = 0, -- — EM DASH
- [0x2015] = 1, -- ― HORIZONTAL BAR
+ [0x2015] = 0, -- ― HORIZONTAL BAR
[0x2019] = 1, -- ’ RIGHT SINGLE QUOTATION MARK
[0x201D] = 1, -- ” RIGHT DOUBLE QUOTATION MARK
- [0x2025] = 1, -- ‥ TWO DOT LEADER
- [0x2026] = 1, -- … HORIZONTAL ELLIPSIS
+ [0x2025] = 0, -- ‥ TWO DOT LEADER
+ [0x2026] = 0, -- … HORIZONTAL ELLIPSIS
[0x232A] = 1, -- 〉 RIGHT-POINTING ANGLE BRACKET
[0x3001] = 1, -- 、 IDEOGRAPHIC COMMA
[0x3002] = 1, -- 。 IDEOGRAPHIC FULL STOP
@@ -7693,10 +7554,10 @@ local nobr_before = setmetatable({
[0x308E] = 3, -- ゎ HIRAGANA LETTER SMALL WA
[0x3095] = 3, -- ゕ HIRAGANA LETTER SMALL KA
[0x3096] = 3, -- ゖ HIRAGANA LETTER SMALL KE
- [0x3099] = 1, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309A] = 1, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
- [0x309B] = 1, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309C] = 1, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x3099] = 2, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309A] = 2, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309B] = 2, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309C] = 2, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
[0x309D] = 1, -- ゝ HIRAGANA ITERATION MARK
[0x309E] = 1, -- ゞ HIRAGANA VOICED ITERATION MARK
[0x30A0] = 1, -- ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
@@ -7716,9 +7577,9 @@ local nobr_before = setmetatable({
[0x30FC] = 1, -- ー KATAKANA-HIRAGANA PROLONGED SOUND MARK
[0x30FD] = 1, -- ヽ KATAKANA ITERATION MARK
[0x30FE] = 1, -- ヾ KATAKANA VOICED ITERATION MARK
- [0xFE30] = 1, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
- [0xFE31] = 1, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
- [0xFE32] = 1, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
+ [0xFE30] = 0, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ [0xFE31] = 0, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
+ [0xFE32] = 0, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
[0xFE36] = 1, -- ︶ PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
[0xFE38] = 1, -- ︸ PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
[0xFE3A] = 1, -- ︺ PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
@@ -7745,18 +7606,18 @@ local nobr_before = setmetatable({
[0xFF63] = 1, -- 」 HALFWIDTH RIGHT CORNER BRACKET
[0xFF64] = 1, -- 、 HALFWIDTH IDEOGRAPHIC COMMA
[0xFF65] = 1, -- ・ HALFWIDTH KATAKANA MIDDLE DOT
- [0xFF9E] = 1, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
- [0xFF9F] = 1, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+ [0xFF9E] = 2, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
+ [0xFF9F] = 2, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
}, { __index = function(_,c)
if c >= 0x1160 and c <= 0x11FF then return 2 end
if c >= 0xD7B0 and c <= 0xD7FF then return 2 end
- if c >= 0x302A and c <= 0x302F then return 1 end
+ if c >= 0x302A and c <= 0x302F then return 2 end -- tone marks
if c >= 0x31F0 and c <= 0x31FF then return 3 end
if c >= 0xFF67 and c <= 0xFF70 then return 3 end
- if c >= 0xFE00 and c <= 0xFE0F then return 1 end
+ if c >= 0xFE00 and c <= 0xFE0F then return 2 end -- variation selectors
if c >= 0xFE10 and c <= 0xFE19 and not (c == 0xFE17) then return 1 end
if c >= 0xFE50 and c <= 0xFE58 then return 1 end
- if c >= 0xE0100 and c <= 0xE01EF then return 1 end
+ if c >= 0xE0100 and c <= 0xE01EF then return 2 end -- variation selecters
end
})
@@ -7774,6 +7635,7 @@ local function is_cjk (c)
or c >= 0xFF00 and c <= 0xFFEF
or c >= 0x1F100 and c <= 0x1F2FF
or c >= 0x20000 and c <= 0x2FA1F
+ or c >= 0x30000 and c <= 0x323AF
or nobr_after[c] and c > 0x2014
or nobr_before[c] and c > 0x2014
end
@@ -7813,8 +7675,28 @@ local charclass = setmetatable({
}, { __index = function() return 0 end })
--
+-- get character class
+-- var : variant = plain, JP/classic, KR/modern, SC, TC
+-- c : codepoint
+--
+local function get_charclass (var, c)
+ if var < 3 then
+ return charclass[c]
+ elseif var == 3 then
+ -- SC : these are left aligned
+ return (c == 0xFF01 or c == 0xFF1F) and 4 -- FULLWIDTH EXCLAMATION/QUESTION MARK
+ or (c == 0xFF1A or c == 0xFF1B) and 2 -- FULLWIDTH COLON/SEMICOLON
+ or charclass[c]
+ end
+ -- TC : these are center aligned
+ return (c == 0x3001 or c == 0xFF0C) and 3 -- IDEOGRAPHIC/FULLWIDTH COMMA
+ or (c == 0x3002 or c == 0xFF0E) and 3 -- IDEOGRAPHIC/FULLWIDTH FULL STOP -- 5 ?
+ or charclass[c]
+end
+
+--
-- table for spacing between char classes
--- 1 stands for 0.5*fontsize when variant=classic
+-- 1 stands for 0.5*fontsize when variant = JP/classic or SC or TC
--
local intercharclass = { [0] =
{ [0] = nil, {1,1}, nil, {.5,.5} },
@@ -7846,7 +7728,7 @@ end
--
-- return 0.5*fontsize of given fontid
--- space: true if variant=modern; then 0.5*interword_space
+-- space: true if variant=KR/modern; then 0.5*interword_space
--
local function get_font_size (fid, space)
local size = font.getparameters(fid)
@@ -7860,7 +7742,7 @@ end
--
-- charclass 1 thru 4 will be packed in \hbox to 0.5em{\hss? curr \hss?}
--- when variant=classic/modern
+-- when variant ~= plain
--
local function glyph_to_box (head, curr, class)
local g, h = curr
@@ -7889,7 +7771,7 @@ end
--
-- insert spacing defined as charclass[a][b] between a and b
-- f: fontid
--- var: variant = plain, classic, modern
+-- var: variant = plain, JP/classic, KR/modern, SC, TC
-- cc: charclass of current char
-- nc: charclass of next char
-- nobr: linebreak is not allowed
@@ -7908,12 +7790,16 @@ end
--
-- insert inter-character spacing in other normal cases
--- f: fontid
--- var: variant = plain, classic, modern
--- x: true between cjk and non-cjk (a little more spacing)
+-- f: fontid
+-- var: variant = plain, JP/classic, KR/modern, SC, TC
+-- nobr: no linebreak
+-- x: true between cjk and non-cjk (a little more spacing)
--
-local function insert_penalty_glue (head, curr, f, var, x)
- if var ~= 1 then
+local function insert_penalty_glue (head, curr, f, var, nobr, x)
+ if nobr then
+ local penalty = get_new_penalty(10000)
+ head, curr = node.insert_after(head, curr, penalty)
+ elseif var == 0 or var == 2 then
local penalty = get_new_penalty(50)
head, curr = node.insert_after(head, curr, penalty)
end
@@ -7929,53 +7815,64 @@ end
--
-- main process for linebreak and inter-character spacing
--- lb: true if pre_linebreak_filter
--
-local function korean_break (head, lb)
+local function cjk_break (head)
local curr = head
while curr do
- if curr.id == glyph_id then
- local var = node.has_attribute(curr, attr_korean)
+ if attr_cjk and (curr.id == glyph_id or curr.id == math_id and curr.subtype == 1) then
+ local var = node.has_attribute(curr, attr_cjk)
if var then
- local c, f = curr.char or 0, curr.font or 0
- local cc, cjkc = charclass[c], is_cjk(c)
+ local c, f = curr.char or 0, curr.font
+ local cc, cjkc = get_charclass(var, c), is_cjk(c)
-- compress cjk punctuations when charclass is 1 thru 4
if var > 0 and cc > 0 and cc < 5 then
head, curr = glyph_to_box(head, curr, cc)
end
- local next = curr.next
- if next and next.id == glyph_id then
+ local next = node.getnext(curr)
+ while next and next.id == whatsit_id do -- skip whatsit nodes
+ curr, next = next, node.getnext(next)
+ end
+
+ if next and (next.id == glyph_id or next.id == math_id and next.subtype == 0) then
local n = next.char or 0
- local nc = charclass[n]
+ f = f or next.font or 0 -- in case of curr == math_off
+
+ -- skip combining. or dash+dash case to suppress stretching
+ if nobr_before[n] == 2 or (nobr_before[c] == 0 and nobr_before[n] == 0) then
+ goto skip_combining
+ end
+
+ local nc = get_charclass(var, n)
local nobr = nobr_before[n] or nobr_after[c]
-- insert spacing as of intercharclass
if var > 0 and intercharclass[cc][nc] then
head, curr = insert_cjk_penalty_glue(head, curr, f, var, cc, nc, nobr)
- -- or insert spacing when linebreak is allowed
- elseif not nobr then
+ else
local cjkn = is_cjk(n)
-- if curr or next is cjk char
if cjkc or cjkn then
- -- if between cjk and non-cjk
- if var > 0 and not (cjkc and cjkn) and nobr_before[c] ~= 0 then
- head, curr = insert_penalty_glue(head, curr, f, var, true)
+ -- plain variant / cjk+cjk / nobr cjk+noncjk / after dash
+ -- : insert a 0pt glue
+ if var == 0 or (cjkc and cjkn) or nobr or nobr_before[c] == 0 then
+ head, curr = insert_penalty_glue(head, curr, f, var, nobr)
- -- or under pre_linebreak_filter
- elseif lb then
- head, curr = insert_penalty_glue(head, curr, f, var)
+ -- other cases: insert a small glue
+ else
+ head, curr = insert_penalty_glue(head, curr, f, var, nobr, true)
end
end
end
end
end
end
- curr = curr.next
+ ::skip_combining::
+ curr = node.getnext(curr)
end
return head
end
@@ -7989,7 +7886,7 @@ end
local function reorder_tm (head)
local curr, tone = node.slide(head)
while curr do
- if curr.id == glyph_id and node.has_attribute(curr, attr_korean) then
+ if curr.id == glyph_id and node.has_attribute(curr, attr_cjk) then
local f = font.getfont(curr.font) or font.fonts[curr.font]
if f and f.hb then -- harfbuzz do the right thing
tone = nil
@@ -8005,7 +7902,7 @@ local function reorder_tm (head)
end
end
end
- curr = curr.prev
+ curr = node.getprev(curr)
end
return head
end
@@ -8092,7 +7989,7 @@ local function get_prev_char (p)
local pc = get_prev_char(node.slide(p.head))
if pc then return pc end
end
- p = p.prev
+ p = node.getprev(p)
end
end
@@ -8107,10 +8004,10 @@ local function auto_josa (head)
if josa then
local cc = curr.char or 0
if josa == 0 then
- josa = josa_code[get_prev_char(curr.prev) or 0x30]
+ josa = josa_code[get_prev_char(node.getprev(curr)) or 0x30]
end
if cc == 0xC774 then
- local n = curr.next
+ local n = node.getnext(curr)
if n and n.char and n.char >= 0xAC00 and n.char <= 0xD7A3 then
else
cc = 0xAC00
@@ -8129,7 +8026,7 @@ local function auto_josa (head)
node.unset_attribute(curr, attr_josa)
end
end
- curr = curr.next
+ curr = node.getnext(curr)
end
for _,v in ipairs(tofree) do node.free(v) end
return head
@@ -8140,45 +8037,86 @@ end
-- As char value of glyphs can be changed by opentype GSUB process,
-- we have to occupy the first position among callback functions.
--
-local prepend_to_callback
-if luatexbase.base_add_to_callback then
- prepend_to_callback = function(name, func, desc)
- luatexbase.add_to_callback(name, func, desc, 1)
+luatexbase.add_to_callback( "pre_shaping_filter",
+function(head)
+ if attr_josa then head = auto_josa(head) end
+ head = cjk_break(head)
+ if attr_josa then head = reorder_tm(head) end
+ return head
+end,
+"polyglossia.lang_cjk_spacing")
+
+-- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
+% \end{macrocode}
+% \iffalse
+%</polyglossia-cjk-spacing.lua>
+%<*polyglossia-french.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-french.lua}
+% \begin{macrocode}
+--
+-- polyglossia-punct.lua
+-- part of polyglossia v2.2 -- 2024/07/15
+--
+
+require('polyglossia-punct')
+
+local function set_left_space(lang, char, kern, rubber)
+ polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function set_right_space(lang, char, kern, rubber)
+ polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function activate_french_punct(thincolonspace, autospaceguillemets)
+ -- We need different language tags here to make switching of options possible
+ -- within a paragraph.
+ local lang = "french"
+ if thincolonspace then
+ lang = lang.."-thincolon"
end
-else
- prepend_to_callback = function(name, func, desc)
- local t = { {func, desc} }
- for _,v in ipairs(luatexbase.callback_descriptions(name)) do
- table.insert(t, {luatexbase.remove_from_callback(name, v)})
- end
- for _,v in ipairs(t) do
- luatexbase.add_to_callback(name, v[1], v[2])
- end
+ if autospaceguillemets then
+ lang = lang.."-autospace"
+ end
+
+ polyglossia.activate_punct(lang)
+ polyglossia.clear_spaced_characters(lang)
+
+ if thincolonspace then
+ set_left_space(lang, ':', 0.5)
+ else
+ set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
+ end
+
+ set_left_space(lang, '!', 0.5)
+ set_left_space(lang, '?', 0.5)
+ set_left_space(lang, ';', 0.5)
+ set_left_space(lang, '‼', 0.5)
+ set_left_space(lang, '⁇', 0.5)
+ set_left_space(lang, '⁈', 0.5)
+ set_left_space(lang, '⁉', 0.5)
+ set_left_space(lang, '‽', 0.5) -- U+203D (interrobang)
+
+ if autospaceguillemets then
+ set_left_space(lang, '»', 0.5)
+ set_left_space(lang, '›', 0.5)
+ set_right_space(lang, '«', 0.5)
+ set_right_space(lang, '‹', 0.5)
end
end
-prepend_to_callback ("pre_linebreak_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head, true)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
-
-prepend_to_callback ("hpack_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
+local function deactivate_french_punct()
+ polyglossia.deactivate_punct()
+end
--- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
+polyglossia.activate_french_punct = activate_french_punct
+polyglossia.deactivate_french_punct = deactivate_french_punct
% \end{macrocode}
% \iffalse
-%</polyglossia-korean.lua>
+%</polyglossia-french.lua>
%<*polyglossia-latin.lua>
% \fi
% \clearpage
@@ -8187,7 +8125,7 @@ prepend_to_callback ("hpack_filter",
% \begin{macrocode}
--
-- polyglossia-latin.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia-punct')
@@ -8242,14 +8180,13 @@ polyglossia.deactivate_latin_punct = deactivate_latin_punct
% \begin{macrocode}
--
-- polyglossia-punct.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia') -- just in case...
local add_to_callback = luatexbase.add_to_callback
-local remove_from_callback = luatexbase.remove_from_callback
-local priority_in_callback = luatexbase.priority_in_callback
+local declare_callback_rule = luatexbase.declare_callback_rule
local new_attribute = luatexbase.new_attribute
local node = node
@@ -8573,13 +8510,16 @@ local function activate(lang)
-- important to be able to intermix languages with different spacings
-- in one paragraph.
tex.setattribute(punct_attr, id)
- for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
- if not priority_in_callback(callback_name, "polyglossia-punct.process") then
- add_to_callback(callback_name, process, "polyglossia-punct.process", 1)
- end
- end
end
+add_to_callback("pre_linebreak_filter",process,"polyglossia-punct.process")
+add_to_callback("hpack_filter",process,"polyglossia-punct.process")
+declare_callback_rule("pre_linebreak_filter",
+ "polyglossia-punct.process", "before", "luaotfload.node_processor")
+declare_callback_rule("hpack_filter",
+ "polyglossia-punct.process", "before", "luaotfload.node_processor")
+
+
local function deactivate()
tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
-- Though it would make compilation slightly faster, it is not possible to
@@ -8610,7 +8550,7 @@ polyglossia.clear_spaced_characters = clear_spaced_characters
% \begin{macrocode}
--
-- polyglossia-sanskrit.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia-punct')
@@ -8660,31 +8600,29 @@ polyglossia.deactivate_sanskrit_punct = deactivate_sanskrit_punct
% \begin{macrocode}
--
-- polyglossia-tibt.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia') -- just in case...
local add_to_callback = luatexbase.add_to_callback
local remove_from_callback = luatexbase.remove_from_callback
+local declare_callback_rule = luatexbase.declare_callback_rule
local priority_in_callback = luatexbase.priority_in_callback
local next, type = next, type
-
-local nodes, fonts, node = nodes, fonts, node
-
-local nodecodes = nodes.nodecodes --- <= preloaded node.types()
+local node = node
local insert_node_before = node.insert_before
local insert_node_after = node.insert_after
-local remove_node = nodes.remove
+local remove_node = node.remove
local copy_node = node.copy
local has_attribute = node.has_attribute
local end_of_math = node.end_of_math
if not end_of_math then -- luatex < .76
local traverse_nodes = node.traverse_id
- local math_code = nodecodes.math
+ local math_code = node.id('math_char')
local end_of_math = function (n)
for n in traverse_nodes(math_code, n.next) do
return n
@@ -8692,10 +8630,10 @@ if not end_of_math then -- luatex < .76
end
end
--- node types as of April 2013
-local glyph_code = nodecodes.glyph
-local penalty_code = nodecodes.penalty
-local kern_code = nodecodes.kern
+-- node types as of April 2024
+local glyph_code = node.id('glyph')
+local penalty_code = node.id('penalty')
+local kern_code = node.id('kern')
-- we make a new node, so that we can copy it later on
local penalty_node = node.new(penalty_code)
@@ -8726,7 +8664,6 @@ local function process(head)
end
end
elseif id == math_code then
- -- warning: this is a feature of luatex > 0.76
start = end_of_math(start) -- weird, can return nil .. no math end?
end
if start then
@@ -8739,15 +8676,13 @@ end
local callback_name = "pre_linebreak_filter"
local function activate()
- if not priority_in_callback (callback_name, "polyglossia-tibt.process") then
- add_to_callback(callback_name, process, "polyglossia-tibt.process", 1)
- end
+ add_to_callback(callback_name, process, "polyglossia-tibt.process")
+ declare_callback_rule(callback_name,
+ "polyglossia-tibt.process", "before", "luaotfload.node_processor")
end
local function desactivate()
- if priority_in_callback (callback_name, "polyglossia-tibt.process") then
- remove_from_callback(callback_name, "polyglossia-tibt.process")
- end
+ remove_from_callback(callback_name, "polyglossia-tibt.process")
end
polyglossia.activate_tibt_eol = activate
@@ -8763,7 +8698,7 @@ polyglossia.desactivate_tibt_eol = desactivate
% \begin{macrocode}
--
-- polyglossia.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
local module_name = "polyglossia"
@@ -8839,7 +8774,7 @@ local function newloader(langentry)
end
-- language info will be written into the .log file
- local s = { "Language data for " .. langentry }
+ local s = { }
for k, v in pairs(langdata) do
if type(v) == 'table' then -- for 'synonyms'
s[#s+1] = k .. "\t" .. table.concat(v,',')
@@ -8847,7 +8782,10 @@ local function newloader(langentry)
s[#s+1] = k .. "\t" .. tostring(v)
end
end
- log_info(table.concat(s,"\n"))
+ local a = {}
+ for _,n in pairs(s) do table.insert(a, n) end
+ table.sort(a)
+ log_info("Language data for " .. langentry .. "\n" .. table.concat(a,"\n"))
--
-- LaTeX's \newlanguage increases language register (count19),
@@ -8857,7 +8795,7 @@ local function newloader(langentry)
-- this possible situation, our newloader() function will
-- unfortunately overwrite the language \lang@xyz.
--
- -- Threfore here we will compare LaTeX's \newlanguage number with
+ -- Therefore here we will compare LaTeX's \newlanguage number with
-- LuaTeX's lang.new() id and select the bigger one for our new
-- language object. Also we will update LaTeX's language register
-- by this new id, so that another possible \newlanguage should not
@@ -8872,7 +8810,7 @@ local function newloader(langentry)
local newlangid = math.max(langcnt, langid)
-- set language register for possible \newlanguage
tex.setcount('global', lang_register, newlangid)
- -- get new lang object if needeed
+ -- get new lang object if needed
if langid ~= newlangid then
langobject = lang.new(newlangid)
end
@@ -9716,7 +9654,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%% This is an algorithm from Reingold & Dershowitz,
-%% Calendrical Calculations, The Millenium Edition
+%% Calendrical Calculations, The Millennium Edition
%%
\def\@FixedFromGregorian#1#2#3#4{%
\setcounter{tmpA}{(#1-1)*365}%
@@ -10069,36 +10007,36 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \end{macrocode}
% \iffalse
%</xgreek-fixes.def>
-%<*gloss-acadien.ldf>
+%<*gloss-acadian.ldf>
% \fi
% \clearpage
%
-% \subsection{gloss-acadien.ldf}
+% \subsection{gloss-acadian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for Canadian (Acadian) French]
% We provide this as a babel alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
-%</gloss-acadien.ldf>
+%</gloss-acadian.ldf>
%<*gloss-aeb.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-aeb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-aeb.ldf}[polyglossia: module for aeb (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -10109,13 +10047,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-af.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-af.ldf}[polyglossia: module for af (Afrikaans)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{afrikaans}
+\InheritGlossFile{afrikaans}
% \end{macrocode}
% \iffalse
@@ -10126,13 +10064,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-afb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-afb.ldf}[polyglossia: module for afb (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -10143,7 +10081,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-afrikaans.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-afrikaans.ldf}[polyglossia: module for Afrikaans]
@@ -10161,22 +10099,21 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{afrikaans}{af}
-\define@boolkey{afrikaans}[afrikaans@]{babelshorthands}[true]{}
-
+\DeclareKeys[polyglossia/gloss/afrikaans]
+ {
+ babelshorthands.if = afrikaans@babelshorthands,
+ babelshorthands.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{afrikaans}{babelshorthands=false}
+\InitializeGlossOptions{afrikaans}{babelshorthands=false}
\ifsystem@babelshorthands
- \setkeys{afrikaans}{babelshorthands=true}
+ \SetGlossOptions{afrikaans}{babelshorthands=true}
\else
- \setkeys{afrikaans}{babelshorthands=false}
+ \SetGlossOptions{afrikaans}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\afrikaans@shorthands{%
\xpg@activate@shorthands%
@@ -10248,7 +10185,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-albanian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-albanian.ldf}[polyglossia: module for Albanian]
@@ -10305,13 +10242,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-am.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-am.ldf}[polyglossia: module for am (Amharic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{amharic}
+\InheritGlossFile{amharic}
% \end{macrocode}
% \iffalse
@@ -10322,13 +10259,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-american.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-american.ldf}[polyglossia: module for American English]
% We provide this as a babel alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -10339,7 +10276,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-amharic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-amharic.ldf}[polyglossia: module for Amharic]
\PolyglossiaSetup{amharic}{
@@ -10559,13 +10496,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-apd.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-apd.ldf}[polyglossia: module for apd (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -10576,13 +10513,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-IQ.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-IQ.ldf}[polyglossia: module for ar-IQ (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-IQ,bcp47-language=ar,bcp47-region=IQ}%
@@ -10595,13 +10532,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-JO.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-JO.ldf}[polyglossia: module for ar-JO (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-JO,bcp47-language=ar,bcp47-region=JO}%
@@ -10614,13 +10551,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-LB.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-LB.ldf}[polyglossia: module for ar-LB (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-LB,bcp47-language=ar,bcp47-region=LB}%
@@ -10633,13 +10570,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-MR.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-MR.ldf}[polyglossia: module for ar-MR (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-MR,bcp47-language=ar,bcp47-region=MR}%
@@ -10652,13 +10589,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-PS.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-PS.ldf}[polyglossia: module for ar-PS (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-PS,bcp47-language=ar,bcp47-region=PS}%
@@ -10671,13 +10608,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-SY.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-SY.ldf}[polyglossia: module for ar-SY (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-SY,bcp47-language=ar,bcp47-region=SY}%
@@ -10690,13 +10627,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar-YE.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar-YE.ldf}[polyglossia: module for ar-YE (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
\SetLanguageKeys{arabic}{bcp47=ar-YE,bcp47-language=ar,bcp47-region=YE}%
@@ -10709,13 +10646,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ar.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ar.ldf}[polyglossia: module for ar (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -10726,7 +10663,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-arabic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-arabic.ldf}[polyglossia: module for Arabic]
\RequireBidi
@@ -10766,104 +10703,112 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*[locale=default]{arabic}{apd}
\setlanguagealias*[locale=mashriq]{arabic}{ar-PS}
-\define@boolkey{arabic}[arabic@]{abjadalph}[true]{}
-
\newif\ifeastern@numerals
-\define@choicekey*+{arabic}{numerals}[\xpg@val\xpg@nr]{mashriq,maghrib,eastern,western}[mashriq]{%
- \ifcase\xpg@nr\relax
- % mashriq:
- \eastern@numeralstrue%
- \or
- % maghrib:
- \eastern@numeralsfalse
- \or
- % eastern:
- \eastern@numeralstrue%
- \or
- % western:
- \eastern@numeralsfalse
- \fi
- \xpg@info{Option: Arabic, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Arabic numerals option `#1'}}
-
-%this is needed for \abjad in arabicnumbers.sty
-\define@boolkey{arabic}[arabic@]{abjadjimnotail}[true]{%
- \ifarabic@abjadjimnotail
- \abjad@jim@notailtrue%
- \else
- \abjad@jim@notailfalse
- \fi}
-
-\define@choicekey*+{arabic}{locale}[\xpg@val\xpg@nr]{default,mashriq,libya,algeria,tunisia,morocco,mauritania}[default]{%
- \ifcase\xpg@nr\relax
- % default:
- \eastern@numeralstrue%
- \SetLanguageKeys{arabic}{bcp47=ar-YE,bcp47-language=ar}%
- \xpg@info{Option: arabic, locale=default}%
- \or
- % mashriq:
- \eastern@numeralstrue%
- \SetLanguageKeys{arabic}{bcp47=ar-IQ,bcp47-language=ar}%
- \xpg@info{Option: arabic, locale=mashriq}%
- \or
- % libya:
- \eastern@numeralstrue%
- \SetLanguageKeys{arabic}{bcp47=ayl,bcp47-language=ar,bcp47-region=LY}%
- \xpg@info{Option: arabic, locale=libya}%
- \or
- % algeria:
- \eastern@numeralsfalse%
- \SetLanguageKeys{arabic}{bcp47=arq,bcp47-language=ar,bcp47-region=DZ,bcp47-extension-u=nu-latn}%
- \xpg@info{Option: arabic, locale=algeria}%
- \or
- % tunisia:
- \eastern@numeralsfalse%
- \SetLanguageKeys{arabic}{bcp47=aeb,bcp47-language=ar,bcp47-region=TN,bcp47-extension-u=nu-latn}%
- \xpg@info{Option: arabic, locale=tunisia}%
- \or
- % morocco:
- \eastern@numeralsfalse%
- \SetLanguageKeys{arabic}{bcp47=ary,bcp47-language=ar,bcp47-region=MA,bcp47-extension-u=nu-latn}%
- \xpg@info{Option: arabic, locale=morocco}%
- \or
- % mauritania:
- \eastern@numeralstrue%
- \SetLanguageKeys{arabic}{bcp47=ar-MR,bcp47-language=ar,bcp47-region=MR}%
- \xpg@info{Option: arabic, locale=mauritania}%
- \fi
- \gdef\@@arabic@month{\@arabic@month{#1}}
- }{\xpg@warning{Unknown Arabic locale `#1'}}
-
\newif\if@hijrical
-\define@choicekey*+{arabic}{calendar}[\xpg@val\xpg@nr]{gregorian,hijri,islamic}[gregorian]{%
- \ifcase\xpg@nr\relax
- % gregorian:
- \@hijricalfalse
- \or
- % hijri:
- \@hijricaltrue
- \or
- % islamic:
- \@hijricaltrue
- \fi
- \xpg@info{Option: Arabic, calendar=\xpg@val}%
-}{\xpg@warning{Unknown Arabic calendar option `#1'}}
-
-
-\define@key{arabic}{hijricorrection}[0]{%
- \gdef\arabic@hijri@correction{#1}}%
-
\newif\ifarabic@customsep\arabic@customsepfalse
-\def\xpg@sepmark{}
-\define@key{arabic}{sectionsep}[.]{%
- \arabic@customseptrue%
- \gdef\xpg@sepmark{#1}%
-}
+
+\DeclareKeys[polyglossia/gloss/arabic]
+ {
+ hijricorrection.code = \gdef\arabic@hijri@correction{#1},
+ hijricorrection.default:n = 0,
+ sectionsep.code = \gdef\xpg@sepmark{#1}\arabic@customseptrue,
+ sectionsep.default:n = .,
+ abjadalph.if = arabic@abjadalph,
+ abjadalph.default:n = true,
+ abjadjimnotail.if = abjad@jim@notail,
+ abjadjimnotail.default:n = true,
+ numerals.choice:,
+ numerals / mashriq.code =
+ {%
+ \eastern@numeralstrue
+ },
+ numerals / maghrib.code =
+ {%
+ \eastern@numeralsfalse
+ },
+ numerals / eastern.code =
+ {%
+ \eastern@numeralstrue
+ },
+ numerals / western.code =
+ {%
+ \eastern@numeralsfalse
+ },
+ numerals.default:n = mashriq,
+ numerals/unknown.code = \xpg@warning{Unknown Arabic numerals option `#1'},
+ locale.choice:,
+ locale / default.code =
+ {%
+ \eastern@numeralstrue
+ \def\abjad@one{ا}%
+ \SetLanguageKeys{arabic}{bcp47=ar-YE,bcp47-language=ar}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / mashriq.code =
+ {%
+ \eastern@numeralstrue
+ \def\abjad@one{ا}%
+ \SetLanguageKeys{arabic}{bcp47=ar-IQ,bcp47-language=ar}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / libya.code =
+ {%
+ \eastern@numeralstrue
+ \def\abjad@one{ا}%
+ \SetLanguageKeys{arabic}{bcp47=ayl,bcp47-language=ar,bcp47-region=LY}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / algeria.code =
+ {%
+ \eastern@numeralsfalse
+ \def\abjad@one{أ}%
+ \SetLanguageKeys{arabic}{bcp47=arq,bcp47-language=ar,bcp47-region=DZ,bcp47-extension-u=nu-latn}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / tunisia.code =
+ {%
+ \eastern@numeralsfalse
+ \def\abjad@one{أ}%
+ \SetLanguageKeys{arabic}{bcp47=aeb,bcp47-language=ar,bcp47-region=TN,bcp47-extension-u=nu-latn}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / morocco.code =
+ {%
+ \eastern@numeralsfalse
+ \def\abjad@one{أ}%
+ \SetLanguageKeys{arabic}{bcp47=ary,bcp47-language=ar,bcp47-region=MA,bcp47-extension-u=nu-latn}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale / mauritania.code =
+ {%
+ \eastern@numeralstrue
+ \def\abjad@one{ا}%
+ \SetLanguageKeys{arabic}{bcp47=ar-MR,bcp47-language=ar,bcp47-region=MR}%
+ \gdef\@@arabic@month{\@arabic@month{#1}}%
+ },
+ locale.default:n = default,
+ locale/unknown.code = \xpg@warning{Unknown Arabic locale `#1'},
+ calendar.choice:,
+ calendar / gregorian.code =
+ {%
+ \@hijricalfalse
+ },
+ calendar / hijri.code =
+ {%
+ \@hijricaltrue
+ },
+ calendar / islamic.code =
+ {%
+ \@hijricaltrue
+ },
+ calendar.default:n = gregorian,
+ calendar/unknown.code = \xpg@warning{Unknown Arabic calendar option `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{arabic}{locale=default,calendar=gregorian,numerals=mashriq,hijricorrection=0,abjadjimnotail=false}
+\InitializeGlossOptions{arabic}{locale=default,calendar=gregorian,numerals=mashriq,hijricorrection=0,abjadjimnotail=false}
% Register alias options
-\xpg@set@alias@values{arabic}{calendar}{islamic}{hijri}
+\SetLanguageAliasValues{arabic}{calendar}{islamic,hijri}
\def\arabicgregmonth@default#1{\ifcase#1%
% Egypt, Sudan, Yemen and Golf states
@@ -10883,9 +10828,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\arabicgregmonth@mauritania#1{\ifcase#1%
\or يناير\or فبراير\or مارس\or إبريل\or مايو\or يونيو\or يوليو\or أغشت\or شتمبر\or أكتوبر\or نوفمبر\or دجمبر\fi}
-\def\@arabic@month#1{\ifcsdef{arabicgregmonth@#1}{\expandafter\csname arabicgregmonth@#1\endcsname}%
-{\xpg@warning{Option `locale=#1' is not defined for Arabic: using `default' instead}%
-\arabicgregmonth@default}}
+\def\@arabic@month#1{%
+ \@ifundefined{arabicgregmonth@#1}%
+ {\xpg@warning{Option `locale=#1' is not defined for Arabic: using `default' instead}%
+ \arabicgregmonth@default}%
+ {\expandafter\csname arabicgregmonth@#1\endcsname}%
+}
%\Hijritoday is now locale-aware and will format the date with this macro:
\DefineFormatHijriDate{arabic}{\@ensure@RTL{\arabicnumber{\value{Hijriday}}%
@@ -10917,18 +10865,18 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\datearabic{%
\def\today{%
- \if@hijrical%
+ \if@hijrical
\Hijritoday[\arabic@hijri@correction]%
\else%
- \if@RTL%
+ \if@RTL
\arabicnumber\day\space\@@arabic@month{\month}%
\space\arabicnumber\year%
\else% in LR environment we format the gregorian date within \textenglish
- \ifcsdef{english@loaded}{\textenglish{\today}}%else US format
- {\normalfontlatin\ifcase\month\or January\or February\or March\or April\or May\or June\or%
- July\or August\or September\or October\or November\or December\fi%
+ \iflanguageloaded{english}{\textenglish{\today}}%else US format
+ {\normalfontlatin\ifcase\month\or January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
\space\number\day,\space\number\year}%
- \fi%
+ \fi
\fi}}
% Use \providecommand here as the ldf file might
@@ -10954,10 +10902,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\or ح\or ط\or ي\or ك\or ل\or م\or ن%
\or س\or ع\or ف\or ص\or ق\or ر\or ش%
\or ت\or ث\or خ\or ذ\or ض\or ظ\or غ%
- \else\xpg@ill@value{#1}{arabic@abjad@alph}\fi%
+ \else\xpg@ill@value{#1}{arabic@abjad@alph}\fi
}
-
\def\abjadmaghribi#1{%
\ifnum#1>1999\xpg@ill@value{#1}{abjad}%
\else
@@ -10980,111 +10927,111 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%maghribi س -> ص ص -> ض ش -> س ض -> ظ ظ -> غ غ -> ش
\def\abj@maghribi@num@ii#1{%
- \ifcase#1\or ي\or ك\or ل\or م\or ن%
+ \ifcase#1\abjad@zero\or ي\or ك\or ل\or م\or ن%
\or ص\or ع\or ف\or ض\fi
- \ifnum#1=\z@\abjad@zero\fi\abj@num@i}
+ \abj@num@i}
\def\abj@maghribi@num@iii#1{%
\ifcase#1\or ق\or ر\or س\or ت\or ث%
\or خ\or ذ\or ظ\or غ\fi
- \ifnum#1=\z@\fi\abj@maghribi@num@ii}
+ \abj@maghribi@num@ii}
\def\abj@maghribi@num@iv#1{%
\ifcase#1\or ش\fi
- \ifnum#1=\z@\fi\abj@maghribi@num@iii}
+ \abj@maghribi@num@iii}
\def\arabic@numbers{%
\ifarabic@abjadalph
- \let\@alph\abjadalph%
- \let\@Alph\abjadalph%
+ \let\@alph\abjadalph
+ \let\@Alph\abjadalph
\else
- \let\@alph\abjad%
- \let\@Alph\abjad%
+ \let\@alph\abjad
+ \let\@Alph\abjad
\fi
}
\def\noarabic@numbers{%
- \let\@alph\latin@alph%
- \let\@Alph\latin@Alph%
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph
}
% Store original definition
\let\xpg@save@arabic\@arabic
\def\arabic@globalnumbers{%
- \let\@arabic\arabicnumber%
+ \let\@arabic\arabicnumber
\renewcommand\thefootnote{\localnumeral*{footnote}}%
\renewcommand\theequation{\localnumeral*{equation}}%
}
\def\noarabic@globalnumbers{%
- \let\@arabic\xpg@save@arabic%
+ \let\@arabic\xpg@save@arabic
}
\def\arabic@xetex@capsformat{%
- \let\xpg@save@sepmark\@SepMark%
+ \let\xpg@save@sepmark\@SepMark
\SepMark{\xpg@sepmark}
}
\def\noarabic@xetex@capsformat{%
- \ifcsdef{xpg@save@sepmark}{%
+ \ifcsname xpg@save@sepmark\endcsname
\SepMark{\xpg@save@sepmark}
- }{}%
+ \fi
}
\def\arabic@luatex@capsformat{%
%
% change chapter and part headings
\ifarabic@customsep
- \ifcsdef{chapter}{%
- \let\xpg@save@thesection\thesection%
+ \ifcsname chapter\endcsname
+ \let\xpg@save@thesection\thesection
\renewcommand*\thesection{\thechapter\xpg@sepmark\@arabic\c@section}
- \let\xpg@save@theequation\theequation%
+ \let\xpg@save@theequation\theequation
\renewcommand*\theequation{%
\ifnum \c@chapter>\z@ \thechapter\xpg@sepmark\fi\@arabic\c@equation}
- \let\xpg@save@thefigure\thefigure%
+ \let\xpg@save@thefigure\thefigure
\renewcommand*\thefigure{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@figure}
- \let\xpg@save@thetable\thetable%
+ \let\xpg@save@thetable\thetable
\renewcommand*\thetable{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@table}
- }{}
- \let\xpg@save@thesubsection\thesubsection%
+ \fi
+ \let\xpg@save@thesubsection\thesubsection
\renewcommand\thesubsection
{\thesection\xpg@sepmark\@arabic\c@subsection}
- \let\xpg@save@thesubsubsection\thesubsubsection%
+ \let\xpg@save@thesubsubsection\thesubsubsection
\renewcommand\thesubsubsection{\thesubsection\xpg@sepmark\@arabic\c@subsubsection}
- \let\xpg@save@theparagraph\theparagraph%
+ \let\xpg@save@theparagraph\theparagraph
\renewcommand\theparagraph
{\thesubsubsection\xpg@sepmark\@arabic\c@paragraph}
- \let\xpg@save@thesubparagraph\thesubparagraph%
+ \let\xpg@save@thesubparagraph\thesubparagraph
\renewcommand\thesubparagraph{\theparagraph\xpg@sepmark\@arabic\c@subparagraph}
- \fi% (end \ifarabic@customsep)
+ \fi % (end \ifarabic@customsep)
}
\def\noarabic@luatex@capsformat{%
- \ifcsdef{xpg@save@thesection}{%
- \let\thesection\xpg@save@thesection%
- }{}%
- \ifcsdef{xpg@save@theequation}{%
- \let\theequation\xpg@save@theequation%
- }{}%
- \ifcsdef{xpg@save@thefigure}{%
- \let\thefigure\xpg@save@thefigure%
- }{}%
- \ifcsdef{xpg@save@thetable}{%
- \let\thetable\xpg@save@thetable%
- }{}%
- \ifcsdef{xpg@save@thesubsection}{%
- \let\thesubsection\xpg@save@thesubsection%
- \ifcsdef{xpg@save@thesubsubsection}{%
- \let\thesubsubsection\xpg@save@thesubsubsection%
- }{}%
- }{}%
- \ifcsdef{xpg@save@theparagraph}{%
- \let\theparagraph\xpg@save@theparagraph%
- }{}%
- \ifcsdef{xpg@save@thesubparagraph}{%
- \let\thesubparagraph\xpg@save@thesubparagraph%
- }{}%
+ \ifcsname xpg@save@thesection\endcsname
+ \let\thesection\xpg@save@thesection
+ \fi
+ \ifcsname xpg@save@theequation\endcsname
+ \let\theequation\xpg@save@theequation
+ \fi
+ \ifcsname xpg@save@thefigure\endcsname
+ \let\thefigure\xpg@save@thefigure
+ \fi
+ \ifcsname xpg@save@thetable\endcsname
+ \let\thetable\xpg@save@thetable
+ \fi
+ \ifcsname xpg@save@thesubsection\endcsname
+ \let\thesubsection\xpg@save@thesubsection
+ \ifcsname xpg@save@thesubsubsection\endcsname
+ \let\thesubsubsection\xpg@save@thesubsubsection
+ \fi
+ \fi
+ \ifcsname xpg@save@theparagraph\endcsname
+ \let\theparagraph\xpg@save@theparagraph
+ \fi
+ \ifcsname xpg@save@thesubparagraph\endcsname
+ \let\thesubparagraph\xpg@save@thesubparagraph
+ \fi
}
\def\blockextras@arabic{%
@@ -11096,7 +11043,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\fi
\fi
}
-%
+
\def\noextras@arabic{%
\ifarabic@customsep
\ifxetex
@@ -11116,7 +11063,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-armenian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-armenian.ldf}[polyglossia: module for Armenian]
@@ -11139,43 +11086,49 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@eastern@armenian
\@eastern@armenianfalse
-\define@choicekey*+{armenian}{variant}[\xpg@val\xpg@nr]{western,eastern}[western]{%
- \ifcase\xpg@nr\relax
- % western:
- \@eastern@armenianfalse%
- \or
- % eastern:
- \@eastern@armeniantrue%
- \fi
- \xpg@info{Option: Armenian, variant=\xpg@val}%
-}{\xpg@warning{Unknown Armenian variant `#1'}}
\newif\if@armenian@numerals
\@armenian@numeralsfalse
-\define@key{armenian}{numerals}[armenian]{%
- \ifstrequal{#1}{arabic}{%
- \@armenian@numeralsfalse%
- \SetLanguageKeys{armenian}{bcp47-extension-u=nu-latn}%
- }{%
- \@armenian@numeralstrue%
- \SetLanguageKeys{armenian}{bcp47-extension-u={}}%
- }%
-}
-\define@boolkey{armenian}[armenian@]{capitalyiwn}[true]{%
- \ifarmenian@capitalyiwn
- % MakeUppercase capitalizes the ligature of letters ech and yiwn (U+0587)
- % to capital ech and yiwn (also the output if Armenian is not selected at all)
- \SetLanguageKeys{armenian}{bcp47-casing=hy-x-yiwn,bcp47-extension-x=yiwn}
- \else
- % Capitalize ech and yiwn ligature to capital ech and vew,
- % following Armenian spelling reform
- \SetLanguageKeys{armenian}{bcp47-casing=hy,bcp47-extension-x={}}
- \fi
-}
+\DeclareKeys[polyglossia/gloss/armenian]
+ {
+ variant.choice:,
+ variant / western.code =
+ {%
+ \@eastern@armenianfalse
+ },
+ variant / eastern.code =
+ {%
+ \@eastern@armeniantrue
+ },
+ variant.default:n = western,
+ variant/unknown.code = \xpg@warning{Unknown Armenian variant `#1'},
+ numerals.choice:,
+ numerals / armenian.code =
+ {%
+ \@armenian@numeralstrue
+ \SetLanguageKeys{armenian}{bcp47-extension-u={}}%
+ },
+ numerals / arabic.code =
+ {%
+ \@armenian@numeralsfalse
+ \SetLanguageKeys{armenian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = armenian,
+ capitalyiwn.choice:,
+ capitalyiwn / true.code =
+ {%
+ \SetLanguageKeys{armenian}{bcp47-casing=hy-x-yiwn,bcp47-extension-x=yiwn}%
+ },
+ capitalyiwn / false.code =
+ {%
+ \SetLanguageKeys{armenian}{bcp47-casing=hy,bcp47-extension-x={}}%
+ },
+ capitalyiwn.default:n = true
+ }
% Register default options
-\xpg@initialize@gloss@options{armenian}{numerals=armenian,variant=western}
+\InitializeGlossOptions{armenian}{numerals=armenian,variant=western}
% Taken from ArmTeX. Audit!
\def\captionsarmenian{%
@@ -11324,13 +11277,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-arq.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-arq.ldf}[polyglossia: module for arq (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -11341,13 +11294,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ary.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ary.ldf}[polyglossia: module for ary (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -11358,13 +11311,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-arz.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-arz.ldf}[polyglossia: module for arz (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -11375,13 +11328,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ast.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ast.ldf}[polyglossia: module for ast (Asturian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{asturian}
+\InheritGlossFile{asturian}
% \end{macrocode}
% \iffalse
@@ -11392,7 +11345,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-asturian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Translated by Xuacu <xuacusk8 at gmail dot com>
% Contributed by Kevin Godby <godbyk at gmail dot com>
@@ -11452,13 +11405,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-australian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-australian.ldf}[polyglossia: module for Australian English]
% We provide this as a babel alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -11469,13 +11422,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-austrian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-austrian.ldf}[polyglossia: module for Austrian German (old spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -11486,13 +11439,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ayl.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ayl.ldf}[polyglossia: module for ayl (Arabic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{arabic}
+\InheritGlossFile{arabic}
% \end{macrocode}
% \iffalse
@@ -11503,13 +11456,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bahasa.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bahasa.ldf}[polyglossia: module for Bahasa Indonesia]
% We provide this as a babel alias
-\xpg@load@master@language{malay}
+\InheritGlossFile{malay}
% \end{macrocode}
% \iffalse
@@ -11520,14 +11473,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bahasai.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bahasai.ldf}[polyglossia: module for Bahasa Indonesia]
% We only provide this gloss for babel compatibility. Since bahasai is
% a malay variety, we use 'malay' with variant 'indonesian' now.
-\xpg@load@master@language{malay}
+\InheritGlossFile{malay}
% \end{macrocode}
% \iffalse
@@ -11538,14 +11491,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bahasam.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bahasam.ldf}[polyglossia: module for Bahasa Melayu]
% We only provide this gloss for babel compatibility. Since bahasam is
% a malay variety, we use 'malay' with variant 'malaysian' now.
-\xpg@load@master@language{malay}
+\InheritGlossFile{malay}
% \end{macrocode}
% \iffalse
@@ -11556,7 +11509,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-basque.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-basque.ldf}[polyglossia: module for Basque]
\PolyglossiaSetup{basque}{
@@ -11614,13 +11567,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-be-tarask.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-be-tarask.ldf}[polyglossia: module for be-tarask (Belarusian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{belarusian}
+\InheritGlossFile{belarusian}
% \end{macrocode}
% \iffalse
@@ -11631,13 +11584,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-be.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-be.ldf}[polyglossia: module for be (Belarusian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{belarusian}
+\InheritGlossFile{belarusian}
% \end{macrocode}
% \iffalse
@@ -11648,7 +11601,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-belarusian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-belarusian.ldf}[polyglossia: module for Belarusian]
@@ -11676,63 +11629,68 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*{belarusian}{be}
\def\belarusian@spelling{modern}
-\define@choicekey*+{belarusian}{spelling}[\xpg@val\xpg@nr]{modern,classic,tarask}[modern]{%
- \ifcase\xpg@nr\relax
- % modern:
- \def\belarusian@spelling{modern}%
- \SetLanguageKeys{belarusian}{bcp47=be,bcp47-variant=1959acad}%
- \or
- % classic:
- \def\belarusian@spelling{tarask}%
- \SetLanguageKeys{belarusian}{bcp47=be-tarask,bcp47-variant=tarask}%
- \or
- % tarask:
- \def\belarusian@spelling{tarask}%
- \SetLanguageKeys{belarusian}{bcp47=be-tarask,bcp47-variant=tarask}%
- \fi
-}{\xpg@warning{Unknown Belarusian spelling `#1'}}
-
\newif\ifcyrillic@numerals
\newif\ifcyrillic@asbuk@numerals
-\define@choicekey*+{belarusian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
- \ifcase\xpg@nr\relax
- % arabic:
- \cyrillic@numeralsfalse%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic-trad:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic-alph:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralstrue%
- \fi
- \xpg@info{Option: Belarusian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Belarusian numerals value `#1'}}
-\define@boolkey{belarusian}[belarusian@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/belarusian]
+ {
+ babelshorthands.if = belarusian@babelshorthands,
+ babelshorthands.default:n = true,
+ spelling.choice:,
+ spelling / modern.code =
+ {%
+ \def\belarusian@spelling{modern}%
+ \SetLanguageKeys{belarusian}{bcp47=be,bcp47-variant=1959acad}%
+ },
+ spelling / classic.code =
+ {%
+ \def\belarusian@spelling{tarask}%
+ \SetLanguageKeys{belarusian}{bcp47=be-tarask,bcp47-variant=tarask}%
+ },
+ spelling / tarask.code =
+ {%
+ \def\belarusian@spelling{tarask}%
+ \SetLanguageKeys{belarusian}{bcp47=be-tarask,bcp47-variant=tarask}%
+ },
+ spelling.default:n = modern,
+ spelling/unknown.code = \xpg@warning{Unknown Belarusian spelling `#1'},
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \cyrillic@numeralsfalse
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic-trad.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic-alph.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralstrue
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Belarusian numerals value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{belarusian}{babelshorthands=false,numerals=arabic,spelling=modern}
+\InitializeGlossOptions{belarusian}{babelshorthands=false,numerals=arabic,spelling=modern}
% Register alias options
-\xpg@set@alias@values{belarusian}{spelling}{classic}{tarask}
+\SetLanguageAliasValues{belarusian}{spelling}{classic,tarask}
\ifsystem@babelshorthands
- \setkeys{belarusian}{babelshorthands=true}
+ \SetGlossOptions{belarusian}{babelshorthands=true}
\else
- \setkeys{belarusian}{babelshorthands=false}
+ \SetGlossOptions{belarusian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\belarusian@shorthands{%
\xpg@activate@shorthands%
@@ -11976,7 +11934,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bengali.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Translations provided by সাজেদুর রহিম জোয়ারদার <toshazed@gmail.com>
% TODO implement Bengali calendar
@@ -12005,30 +11963,36 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifbengali@devanagari@numerals
\newif\ifbengali@bengali@numerals
-\define@choicekey*+{bengali}{numerals}[\xpg@val\xpg@nr]{Devanagari,Bengali,Western}[Devanagari]{%
- \ifcase\xpg@nr\relax
- % Devanagari:
- \bengali@bengali@numeralsfalse%
- \bengali@devanagari@numeralstrue%
- \or
- % Bengali:
- \bengali@bengali@numeralstrue%
- \bengali@devanagari@numeralsfalse%
- \or
- % Western:
- \bengali@bengali@numeralsfalse%
- \bengali@devanagari@numeralsfalse%
- \fi
- \xpg@info{Option: Bengali, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Bengali numeral `#1'}}
\def\extras@bengali{}
\def\noextras@bengali{}
-\define@boolkey{bengali}[bengali@]{changecounternumbering}[true]{}
+\DeclareKeys[polyglossia/gloss/bengali]
+ {
+ changecounternumbering.if = bengali@changecounternumbering,
+ changecounternumbering.default:n = true,
+ numerals.choice:,
+ numerals / devanagari.code =
+ {%
+ \bengali@bengali@numeralsfalse
+ \bengali@devanagari@numeralstrue
+ },
+ numerals / bengali.code =
+ {%
+ \bengali@bengali@numeralstrue
+ \bengali@devanagari@numeralsfalse
+ },
+ numerals / western.code =
+ {%
+ \bengali@bengali@numeralsfalse
+ \bengali@devanagari@numeralsfalse
+ },
+ numerals.default:n = devanagari,
+ numerals/unknown.code = \xpg@warning{Unknown Bengali numeral `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{bengali}{changecounternumbering=false,numerals=Devanagari}
+\InitializeGlossOptions{bengali}{changecounternumbering=false,numerals=Devanagari}
\def\captionsbengali{%
\def\refname{তথ্যসূত্রসমূহ}%
@@ -12117,13 +12081,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bg.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bg.ldf}[polyglossia: module for bg (Bulgarian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{bulgarian}
+\InheritGlossFile{bulgarian}
% \end{macrocode}
% \iffalse
@@ -12134,13 +12098,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bn.ldf}[polyglossia: module for bn (Bengali)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{bengali}
+\InheritGlossFile{bengali}
% \end{macrocode}
% \iffalse
@@ -12151,13 +12115,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bo.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bo.ldf}[polyglossia: module for bo (Tibetan)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{tibetan}
+\InheritGlossFile{tibetan}
% \end{macrocode}
% \iffalse
@@ -12168,7 +12132,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bosnian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bosnian.ldf}[polyglossia: module for Bosnian]
@@ -12232,13 +12196,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-br.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-br.ldf}[polyglossia: module for br (Breton)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{breton}
+\InheritGlossFile{breton}
% \end{macrocode}
% \iffalse
@@ -12249,7 +12213,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-brazil.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-brazil.ldf}[polyglossia: module for Brazilian Portuguese]
@@ -12257,7 +12221,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% 'brazil' was selected in accordance with babel.
% Since brazil is a variety of portuguese, we use 'portuguese' now.
-\xpg@load@master@language{portuguese}
+\InheritGlossFile{portuguese}
% \end{macrocode}
% \iffalse
@@ -12268,7 +12232,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-breton.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-breton.ldf}[polyglossia: module for Breton]
\PolyglossiaSetup{breton}{
@@ -12376,13 +12340,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-british.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-british.ldf}[polyglossia: module for British English]
% We provide this as a babel alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -12393,13 +12357,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bs.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bs.ldf}[polyglossia: module for bs (Bosnian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{bosnian}
+\InheritGlossFile{bosnian}
% \end{macrocode}
% \iffalse
@@ -12410,7 +12374,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-bulgarian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-bulgarian.ldf}[polyglossia: module for Bulgarian]
\PolyglossiaSetup{bulgarian}{
@@ -12473,15 +12437,15 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\figurename{Фигура}%
\def\tablename{Таблица}%
%\def\thepart{}%
- %\def\partname{}%
+ \def\partname{Част}%
\def\pagename{Стр.}%
\def\seename{вж.}%
\def\alsoname{вж.\ също и}%
\def\enclname{Приложения}%
\def\ccname{копия}%
- %\def\headtoname{}%
- \def\proofname{Proof}%
- \def\glossaryname{Glossary}%
+ \def\headtoname{За}%
+ \def\proofname{Доказателство}%
+ \def\glossaryname{Притурка}%
}
\def\datebulgarian{%
@@ -12512,13 +12476,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ca.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ca.ldf}[polyglossia: module for ca (Catalan)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{catalan}
+\InheritGlossFile{catalan}
% \end{macrocode}
% \iffalse
@@ -12529,13 +12493,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-canadian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-canadian.ldf}[polyglossia: module for Canadian English]
% We provide this as a babel alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -12546,13 +12510,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-canadien.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-canadien.ldf}[polyglossia: module for Canadian French]
% We provide this as a babel alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -12563,7 +12527,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-catalan.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-catalan.ldf}[polyglossia: module for Catalan]
\PolyglossiaSetup{catalan}{
@@ -12581,21 +12545,21 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{catalan}{ca}
-\define@boolkey{catalan}[catalan@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/catalan]
+ {
+ babelshorthands.if = catalan@babelshorthands,
+ babelshorthands.default:n = true,
+ }
\ifsystem@babelshorthands
- \setkeys{catalan}{babelshorthands=true}
+ \SetGlossOptions{catalan}{babelshorthands=true}
\else
- \setkeys{catalan}{babelshorthands=false}
+ \SetGlossOptions{catalan}{babelshorthands=false}
\fi
% Register default options
-\xpg@initialize@gloss@options{catalan}{babelshorthands=false}
+\InitializeGlossOptions{catalan}{babelshorthands=false}
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
%%% adapted from Babel's catalan.ldf
\newdimen\leftllkern \newdimen\rightllkern \newdimen\raiselldim
@@ -12732,7 +12696,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-chinese.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-chinese.ldf}[polyglossia: module for Chinese]
@@ -12756,51 +12720,60 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*[variant=simplified]{chinese}{zh-CN}
\setlanguagealias*[variant=traditional]{chinese}{zh-TW}
-\providebool{chinese@traditional}
+\@ifundefined{ifchinese@traditional}%
+ {\newif\ifchinese@traditional}{}
-\def\chinese@variant{chinese}
-
-\newif\ifchinese@numerals
-\define@key{chinese}{numerals}[arabic]{%
- \ifstrequal{#1}{chinese}%
- {\chinese@numeralstrue%
- \SetLanguageKeys{chinese}{bcp47-extension-u=nu-hant}%
- }{\chinese@numeralsfalse%
- \SetLanguageKeys{chinese}{bcp47-extension-u=nu-latn}%
- }%
-}
+\@ifundefined{ifchinese@numerals}%
+ {\newif\ifchinese@numerals}{}
+\def\chinese@variant{chinese}
-\define@choicekey*+{chinese}{variant}[\xpg@val\xpg@nr]{cn,simplified,tw,traditional}[cn]{%
- \ifcase\xpg@nr\relax
- % cn:
- \chinese@traditionalfalse
- \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
- \xpg@info{Option: Chinese, variant=simplified}%
- \or
- % simplified:
- \chinese@traditionalfalse
- \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
- \xpg@info{Option: Chinese, variant=simplified}%
- \or
- % tw:
- \chinese@traditionaltrue
- \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
- \xpg@info{Option: Chinese, variant=traditional}%
- \or
- % traditional:
- \chinese@traditionaltrue
- \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
- \xpg@info{Option: Chinese, variant=traditional}%
- \fi
-}{\xpg@warning{Unknown Chinese variant `#1'}}
+\DeclareKeys[polyglossia/gloss/chinese]
+ {
+ variant.choice:,
+ variant / cn.code =
+ {%
+ \chinese@traditionalfalse
+ \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
+ },
+ variant / simplified.code =
+ {%
+ \chinese@traditionalfalse
+ \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
+ },
+ variant / tw.code =
+ {%
+ \chinese@traditionaltrue
+ \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
+ },
+ variant / traditional.code =
+ {%
+ \chinese@traditionaltrue
+ \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
+ },
+ variant.default:n = cn,
+ variant/unknown.code = \xpg@warning{Unknown Chinese variant `#1'},
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \chinese@numeralsfalse
+ \SetLanguageKeys{chinese}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / chinese.code =
+ {%
+ \chinese@numeralstrue
+ \SetLanguageKeys{chinese}{bcp47-extension-u=nu-hant}%
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Chinese numerals value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{chinese}{variant=cn,numerals=arabic}
-%\xpg@initialize@gloss@options{chinese}{variant=tw,numerals=arabic}
+\InitializeGlossOptions{chinese}{variant=cn,numerals=arabic}
+%\InitializeGlossOptions{chinese}{variant=tw,numerals=arabic}
% Register alias options
-\xpg@set@alias@values{chinese}{variant}{cn}{simplified}
-\xpg@set@alias@values{chinese}{variant}{tw}{traditional}
+\SetLanguageAliasValues{chinese}{variant}{cn,simplified}
+\SetLanguageAliasValues{chinese}{variant}{tw,traditional}
\def\chinese@capsformat{%
@@ -12852,7 +12825,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\enclname{附件}%
\def\ccname{抄送}%
\def\headtoname{收件人}%
- \def\\glossaryname{詞彙表}%
+ \def\glossaryname{詞彙表}%
}
\def\captions@chinese@simplified{%
\def\contentsname{目录}%
@@ -12875,7 +12848,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\enclname{附件}%
\def\ccname{抄送}%
\def\headtoname{收件人}%
- \def\\glossaryname{词汇表}%
+ \def\glossaryname{词汇表}%
}
\newcount\c@TempJNum%
@@ -13023,13 +12996,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ckb-Arab.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ckb-Arab.ldf}[polyglossia: module for ckb-Arab (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -13040,13 +13013,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ckb-Latn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ckb-Latn.ldf}[polyglossia: module for ckb-Latn (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -13057,30 +13030,47 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ckb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ckb.ldf}[polyglossia: module for ckb (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
%</gloss-ckb.ldf>
+%<*gloss-classiclatin.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-classiclatin.ldf}
+% \begin{macrocode}
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
+%
+\ProvidesFile{gloss-classiclatin.ldf}[polyglossia: module for classic Latin]
+
+% We provide this as a babel alias
+
+\InheritGlossFile{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-classiclatin.ldf>
%<*gloss-cop.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-cop.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-cop.ldf}[polyglossia: module for cop (Coptic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{coptic}
+\InheritGlossFile{coptic}
% \end{macrocode}
% \iffalse
@@ -13091,7 +13081,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-coptic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-coptic.ldf}[polyglossia: module for Coptic]
\PolyglossiaSetup{coptic}{
@@ -13147,7 +13137,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-croatian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-croatian.ldf}[polyglossia: module for Croatian]
\PolyglossiaSetup{croatian}{
@@ -13169,40 +13159,40 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\RequirePackage{luavlna}
\fi
-\define@boolkey{croatian}[croatian@]{babelshorthands}[true]{}
-
-\define@boolkey{croatian}[croatian@]{disabledigraphs}[true]{}
-
-% Alias kept for backwards compatibility. Please do not remove
-\define@boolkey{croatian}[croatian@]{disableligatures}[true]{%
- \xpg@warning{The option disableligatures is deprected.\MessageBreak
- Please use disabledigraphs instead}%
- \ifcroatian@disableligatures
- \croatian@disabledigraphstrue
- \else
- \croatian@disabledigraphsfalse
- \fi
-}
-
-\define@boolkey{croatian}[croatian@]{splithyphens}[true]{}
-
-\define@boolkey{croatian}[croatian@]{localalph}[true]{}
+\DeclareKeys[polyglossia/gloss/croatian]
+ {
+ babelshorthands.if = croatian@babelshorthands,
+ babelshorthands.default:n = true,
+ disabledigraphs.if = croatian@disabledigraphs,
+ disabledigraphs.default:n = true,
+ splithyphens.if = croatian@splithyphens,
+ splithyphens.default:n = true,
+ localalph.if = croatian@localalph,
+ localalph.default:n = true,
+ disableligatures.choices:nn = { true, false }
+ {%
+ \xpg@warning{The option disableligatures is deprecated.\MessageBreak
+ Please use disabledigraphs instead}%
+ \ifcase\UseName{l_keys_choice_int}\or
+ \croatian@disabledigraphstrue
+ \or
+ \croatian@disabledigraphsfalse
+ \fi
+ },
+ disableligatures.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{croatian}{babelshorthands=false,disabledigraphs=false,
+\InitializeGlossOptions{croatian}{babelshorthands=false,disabledigraphs=false,
splithyphens=true,localalph=true}
\ifsystem@babelshorthands
- \setkeys{croatian}{babelshorthands=true}
+ \SetGlossOptions{croatian}{babelshorthands=true}
\else
- \setkeys{croatian}{babelshorthands=false}
+ \SetGlossOptions{croatian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\let\xpg@hyphen@char-
\def\croatian@@splhyphen#1{%
@@ -13423,13 +13413,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-cy.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-cy.ldf}[polyglossia: module for cy (Welsh)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{welsh}
+\InheritGlossFile{welsh}
% \end{macrocode}
% \iffalse
@@ -13440,13 +13430,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-cz.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-cz.ldf}[polyglossia: module for cz (Czech)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{czech}
+\InheritGlossFile{czech}
% \end{macrocode}
% \iffalse
@@ -13457,7 +13447,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-czech.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-czech.ldf}[polyglossia: module for Czech]
@@ -13480,26 +13470,26 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\RequirePackage{luavlna}
\fi
-\define@boolkey{czech}[czech@]{babelshorthands}[true]{}
-
-\define@boolkey{czech}[czech@]{splithyphens}[true]{}
-
-\define@boolkey{czech}[czech@]{vlna}[true]{}
+\DeclareKeys[polyglossia/gloss/czech]
+ {
+ babelshorthands.if = czech@babelshorthands,
+ babelshorthands.default:n = true,
+ splithyphens.if = czech@splithyphens,
+ splithyphens.default:n = true,
+ vlna.if = czech@vlna,
+ vlna.default:n = true
+ }
% Register default options
-\xpg@initialize@gloss@options{czech}{babelshorthands=false,splithyphens=true,vlna=true}
+\InitializeGlossOptions{czech}{babelshorthands=false,splithyphens=true,vlna=true}
\ifsystem@babelshorthands
- \setkeys{czech}{babelshorthands=true}
+ \SetGlossOptions{czech}{babelshorthands=true}
\else
- \setkeys{czech}{babelshorthands=false}
+ \SetGlossOptions{czech}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\czech@@splithyphen#1{%
\def\czech@sh@tmp{%
@@ -13716,13 +13706,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-da.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-da.ldf}[polyglossia: module for da (Danish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{danish}
+\InheritGlossFile{danish}
% \end{macrocode}
% \iffalse
@@ -13733,7 +13723,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-danish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-danish.ldf}[polyglossia: module for Danish]
\PolyglossiaSetup{danish}{
@@ -13790,13 +13780,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-AT-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT-1901.ldf}[polyglossia: module for de-AT-1901 (Austrian German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13807,13 +13797,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-AT-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT-1996.ldf}[polyglossia: module for de-AT-1996 (Austrian German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13824,13 +13814,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-AT.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT.ldf}[polyglossia: module for de-AT (Austrian German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13841,13 +13831,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-CH-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH-1901.ldf}[polyglossia: module for de-CH-1901 (Swiss German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13858,13 +13848,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-CH-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH-1996.ldf}[polyglossia: module for de-CH-1996 (Swiss German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13875,13 +13865,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-CH.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH.ldf}[polyglossia: module for de-CH (Swiss German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13892,13 +13882,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-DE-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE-1901.ldf}[polyglossia: module for de-DE-1901 (Germany's German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13909,13 +13899,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-DE-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE-1996.ldf}[polyglossia: module for de-DE-1996 (Germany's German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13926,13 +13916,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-DE.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE.ldf}[polyglossia: module for de-DE (Germany's German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13943,13 +13933,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-AT-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT-1901-Latf.ldf}[polyglossia: module for de-AT-1901-Latf (Austrian German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13960,13 +13950,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-AT-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT-1996-Latf.ldf}[polyglossia: module for de-AT-1996-Latf (Austrian German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13977,13 +13967,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-AT.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-AT-Latf.ldf}[polyglossia: module for de-AT-Latf (Austrian German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -13994,13 +13984,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-CH-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH-1901-Latf.ldf}[polyglossia: module for de-CH-1901-Latf (Swiss German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14011,13 +14001,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-CH-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH-1996-Latf.ldf}[polyglossia: module for de-CH-1996-Latf (Swiss German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14028,13 +14018,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-CH.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-CH-Latf.ldf}[polyglossia: module for de-CH-Latf (Swiss German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14045,13 +14035,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-DE-1901.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE-1901-Latf.ldf}[polyglossia: module for de-DE-1901-Latf (Germany's German, old spelling)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14062,13 +14052,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-DE-1996.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE-1996-Latf.ldf}[polyglossia: module for de-DE-1996-Latf (Germany's German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14079,13 +14069,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf-DE.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-DE-Latf.ldf}[polyglossia: module for de-DE-Latf (Germany's German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14096,13 +14086,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de-Latf.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de-Latf.ldf}[polyglossia: module for de-Latf (German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14113,13 +14103,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-de.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-de.ldf}[polyglossia: module for de (German)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -14130,7 +14120,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-divehi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-divehi.ldf}[polyglossia: module for Divehi]
@@ -14185,13 +14175,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-dsb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-dsb.ldf}[polyglossia: module for dsb (Sorbian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -14202,7 +14192,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-dutch.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-dutch.ldf}[polyglossia: module for Dutch]
\PolyglossiaSetup{dutch}{
@@ -14219,24 +14209,24 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{dutch}{nl}
-\define@boolkey{dutch}[dutch@]{babelshorthands}[true]{}
-
-\define@boolkey{dutch}[dutch@]{tremahyphenation}[true]{}
+\DeclareKeys[polyglossia/gloss/dutch]
+ {
+ babelshorthands.if = dutch@babelshorthands,
+ babelshorthands.default:n = true,
+ tremahyphenation.if = dutch@tremahyphenation,
+ tremahyphenation.default:n = true
+ }
% Register default options
-\xpg@initialize@gloss@options{dutch}{babelshorthands=false,tremahyphenation=true}
+\InitializeGlossOptions{dutch}{babelshorthands=false,tremahyphenation=true}
\ifsystem@babelshorthands
- \setkeys{dutch}{babelshorthands=true}
+ \SetGlossOptions{dutch}{babelshorthands=true}
\else
- \setkeys{dutch}{babelshorthands=false}
+ \SetGlossOptions{dutch}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\xpg@trema#1{\allowhyphens\discretionary{-}{#1}{\"{#1}}\allowhyphens}
@@ -14412,30 +14402,47 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-dv.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-dv.ldf}[polyglossia: module for dv (Divehi)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{divehi}
+\InheritGlossFile{divehi}
% \end{macrocode}
% \iffalse
%</gloss-dv.ldf>
+%<*gloss-ecclesiasticlatin.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ecclesiasticlatin.ldf}
+% \begin{macrocode}
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
+%
+\ProvidesFile{gloss-ecclesiasticlatin.ldf}[polyglossia: module for ecclesiastic Latin]
+
+% We provide this as a babel alias
+
+\InheritGlossFile{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ecclesiasticlatin.ldf>
%<*gloss-el-monoton.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-el-monoton.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-el-monoton.ldf}[polyglossia: module for el-monoton (Greek)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{greek}
+\InheritGlossFile{greek}
% \end{macrocode}
% \iffalse
@@ -14446,13 +14453,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-el-polyton.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-el-polyton.ldf}[polyglossia: module for el-polyton (Greek)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{greek}
+\InheritGlossFile{greek}
% \end{macrocode}
% \iffalse
@@ -14463,13 +14470,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-el.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-el.ldf}[polyglossia: module for el (Greek)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{greek}
+\InheritGlossFile{greek}
% \end{macrocode}
% \iffalse
@@ -14480,13 +14487,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en-AU.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-en-AU.ldf}[polyglossia: module for en-AU (Australian English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14497,13 +14504,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en-CA.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
-\ProvidesFile{gloss-en-CA.ldf}[polyglossia: module for en-CA (Canadan English)]
+\ProvidesFile{gloss-en-CA.ldf}[polyglossia: module for en-CA (Canadian English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14514,13 +14521,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en-GB.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-en-GB.ldf}[polyglossia: module for en-GB (British English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14531,13 +14538,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en-NZ.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-en-NZ.ldf}[polyglossia: module for en-NZ (Newzealand English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14548,13 +14555,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en-US.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-en-US.ldf}[polyglossia: module for en-US (American English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14565,13 +14572,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-en.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-en.ldf}[polyglossia: module for en (English)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -14582,7 +14589,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-english.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-english.ldf}[polyglossia: module for English]
@@ -14614,9 +14621,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias[variant=canadian]{english}{canadian}
\setlanguagealias[variant=newzealand]{english}{newzealand}
-\providebool{british@hyphen}
-\providebool{english@ordinalmonthday}
-\providebool{british@dateformat}
+\@ifundefined{ifbritish@hyphen}%
+ {\newif\ifbritish@hyphen}{}
+\@ifundefined{ifenglish@ordinalmonthday}%
+ {\newif\ifenglish@ordinalmonthday}{}
+\@ifundefined{ifbritish@dateformat}%
+ {\newif\ifbritish@dateformat}{}
% US English (\l@english) is default
% Initialize its settings
@@ -14625,49 +14635,46 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\english@ordinalmonthdayfalse
\british@dateformatfalse
-% Option ordinalmonthday
-\define@boolkey{english}[english@]{ordinalmonthday}[true]{}
-
-\define@choicekey*+{english}{variant}[\xpg@val\xpg@nr]{uk,british,us,american,usmax,australian,newzealand,canadian}[us]{%
- \ifcase\xpg@nr\relax
+\DeclareKeys[polyglossia/gloss/english]
+ {
+ ordinalmonthday.if = english@ordinalmonthday,
+ ordinalmonthday.default:n = true,
+ variant.choices:nn = { uk, british, us, american, usmax, australian, newzealand, canadian }
+ {%
+ \ifcase\UseName{l_keys_choice_int}\or
% uk:
\british@hyphentrue
\british@dateformattrue
\english@ordinalmonthdaytrue
\SetLanguageKeys{english}{babelname=british,bcp47=en-GB,bcp47-language=en,bcp47-region=GB}%
- \xpg@info{Option: English, variant=british}%
\or
% british:
\british@hyphentrue
\british@dateformattrue
\english@ordinalmonthdaytrue
\SetLanguageKeys{english}{babelname=british,bcp47=en-GB,bcp47-language=en,bcp47-region=GB}%
- \xpg@info{Option: english variant=british}%
\or
% us:
\british@hyphenfalse
\british@dateformatfalse
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=american,bcp47=en-US,bcp47-language=en,bcp47-region=US}%
- \xpg@info{Option: English, variant=american}%
\or
% american:
\british@hyphenfalse
\british@dateformatfalse
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=american,bcp47=en-US,bcp47-language=en,bcp47-region=US}%
- \xpg@info{Option: English, variant=american}%
\or
% usmax:
\british@hyphenfalse
\british@dateformatfalse
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=american,bcp47=en-US,bcp47-language=en,bcp47-region=US}%
- \xpg@info{Option: english variant=american (with additional patterns)}%
- \xpg@ifdefined{usenglishmax}{}%
+ \IfLanguageDefinedF{usenglishmax}%
{\xpg@warning{No hyphenation patterns were loaded for "US English Max"\MessageBreak
I will use the standard patterns for US English instead}%
- \adddialect\l@usenglishmax\l@english\relax%
+ \adddialect\l@usenglishmax\l@english
}%
\def\english@variant{usenglishmax}%
\or
@@ -14678,8 +14685,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\british@dateformattrue
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=australian,bcp47=en-AU,bcp47-language=en,bcp47-region=AU}%
- \xpg@info{Option: English, variant=australian}%
- \adddialect\l@australian\l@english%
+ \adddialect\l@australian\l@english
\or
% newzealand:
% These use the british hyphenation patterns
@@ -14688,8 +14694,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\british@dateformattrue
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=newzealand,bcp47=en-NZ,bcp47-language=en,bcp47-region=NZ}%
- \xpg@info{Option: English, variant=newzealand}%
- \adddialect\l@newzealand\l@english%
+ \adddialect\l@newzealand\l@english
\or
% canadian:
% This is currently equivalent to usenglish (as in babel)
@@ -14697,45 +14702,35 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\british@dateformatfalse
\english@ordinalmonthdayfalse
\SetLanguageKeys{english}{babelname=canadian,bcp47=en-CA,bcp47-language=en,bcp47-region=CA}%
- \xpg@info{Option: English, variant=american}%
- \adddialect\l@canadian\l@english%
+ \adddialect\l@canadian\l@english
\fi
\ifbritish@hyphen
- \xpg@ifdefined{ukenglish}{}%
+ \IfLanguageDefinedF{ukenglish}%
{\xpg@warning{No hyphenation patterns were loaded for British English\MessageBreak
I will use the patterns for US English instead}%
- \adddialect\l@ukenglish\l@english\relax%
+ \adddialect\l@ukenglish\l@english
}%
\def\english@variant{ukenglish}%
\fi
-}{\xpg@warning{Unknown English variant `#1'}}
+ },
+ variant.default:n = us,
+ variant/unknown.code = \xpg@warning{Unknown English variant `#1'},
+ }
% Register default options
-\xpg@initialize@gloss@options{english}{variant=us,ordinalmonthday=false}
+\InitializeGlossOptions{english}{variant=us,ordinalmonthday=false}
% Register alias options
-\xpg@set@alias@values{english}{variant}{us}{american}
-\xpg@set@alias@values{english}{variant}{uk}{british}
+\SetLanguageAliasValues{english}{variant}{us,american}
+\SetLanguageAliasValues{english}{variant}{uk,british}
\ifxetex
% Check if \l@english is defined. If not, try to set it to some variety
- % (specific order as in the csv list below), or null language if everything fails
- \xpg@ifdefined{english}{}{%
- \def\do##1{%
- \xpg@ifdefined{#1}%
- {\csletcs{l@english}{l@#1}\listbreak}%
- {%
- \xpg@warning{No hyphenation patterns for English found"\MessageBreak
- I will use the 'null' language instead}%
- \adddialect\l@english0
- }%
- }%
- \docsvlist{british, american, usenglishmax, australian, newzealand}
- \xpg@ifdefined{english}{}{}
- }%
+ % (specific order as in the csv list), or null language if everything fails
+ \TryPatternWithFallback{english}{british, american, usenglishmax, australian, newzealand}
\fi
\def\english@language{%
- \polyglossia@setup@language@patterns{\english@variant}%
+ \SetupPolyglossiaLangPatterns{\english@variant}%
}%
\def\captionsenglish{%
@@ -14793,13 +14788,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-eo.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-eo.ldf}[polyglossia: module for eo (Esperanto)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{esperanto}
+\InheritGlossFile{esperanto}
% \end{macrocode}
% \iffalse
@@ -14810,13 +14805,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-es-ES.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-es-ES.ldf}[polyglossia: module for es-ES (Spain's Spanish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{spanish}
+\InheritGlossFile{spanish}
% \end{macrocode}
% \iffalse
@@ -14827,13 +14822,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-es-MX.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-es-MX.ldf}[polyglossia: module for es-MX (Mexican Spanish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{spanish}
+\InheritGlossFile{spanish}
% \end{macrocode}
% \iffalse
@@ -14844,13 +14839,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-es.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-es.ldf}[polyglossia: module for es (Spanish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{spanish}
+\InheritGlossFile{spanish}
% \end{macrocode}
% \iffalse
@@ -14861,7 +14856,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-esperanto.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-esperanto.ldf}[polyglossia: module for Esperanto]
\PolyglossiaSetup{esperanto}{
@@ -14892,10 +14887,10 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\figurename{Figuro}%
\def\tablename{Tabelo}%
%\def\thepart{}%
- %\def\partname{}%
+ \def\partname{Parto}%
\def\pagename{Paĝo}%
\def\seename{vidu}%
- \def\alsoname{Parto}%
+ \def\alsoname{vidu ankaŭ}%
\def\enclname{Aldono(j)}%
\def\ccname{Kopie al}%
\def\headtoname{Al}%
@@ -14941,7 +14936,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-estonian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-estonian.ldf}[polyglossia: module for Estonian]
\PolyglossiaSetup{estonian}{
@@ -14981,7 +14976,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\ccname{Koopia(d)}%
%\def\headtoname{}%
\def\proofname{Korrektuur}%
- \def\glossaryname{Glossary}% <-- need translation
+ \def\glossaryname{Sõnastik}%
}
\def\dateestonian{%
\def\today{\number\day.\space\ifcase\month\or
@@ -14998,13 +14993,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-et.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-et.ldf}[polyglossia: module for et (Estonian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{estonian}
+\InheritGlossFile{estonian}
% \end{macrocode}
% \iffalse
@@ -15015,13 +15010,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-eu.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-eu.ldf}[polyglossia: module for eu (Basque)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{basque}
+\InheritGlossFile{basque}
% \end{macrocode}
% \iffalse
@@ -15032,13 +15027,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fa.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fa.ldf}[polyglossia: module for fa (Persian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{persian}
+\InheritGlossFile{persian}
% \end{macrocode}
% \iffalse
@@ -15049,14 +15044,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-farsi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-farsi.ldf}[polyglossia: module for Farsi]
% We only provide this gloss for babel compatibility.
% The proper English language name is Persian.
-\xpg@load@master@language{persian}
+\InheritGlossFile{persian}
% \end{macrocode}
% \iffalse
@@ -15067,13 +15062,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fi.ldf}[polyglossia: module for fi (Finnish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{finnish}
+\InheritGlossFile{finnish}
% \end{macrocode}
% \iffalse
@@ -15084,7 +15079,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-finnish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-finnish.ldf}[polyglossia: module for Finnish]
\PolyglossiaSetup{finnish}{
@@ -15102,51 +15097,54 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{finnish}{fi}
-\define@boolkey{finnish}[finnish@]{babelshorthands}[true]{}
-
\newif\if@finnish@schoolhyphens
\newif\if@finnish@babelhyphens
-\define@choicekey*+{finnish}{hyphens}[\xpg@val\xpg@nr]{default,school,babel}[default]{%
- \ifcase\xpg@nr\relax
- % default:
- \@finnish@schoolhyphensfalse
- \@finnish@babelhyphensfalse
- \or
- % school:
- \@finnish@schoolhyphenstrue
- \@finnish@babelhyphensfalse
- \or
- % babel:
- \@finnish@schoolhyphensfalse
- \@finnish@babelhyphenstrue
- \fi
- \xpg@info{Option: Finnish, hyphens=\xpg@val}%
-}{\xpg@warning{Unknown Finnish hyphens `#1'}}
-
-% backwards compatibility
-\define@boolkey{finnish}[finnish@]{schoolhyphens}[true]{%
- \iffinnish@schoolhyphens
- \@finnish@schoolhyphenstrue
- \@finnish@babelhyphensfalse
- \else
- \@finnish@schoolhyphensfalse
- \fi
-}
+
+\DeclareKeys[polyglossia/gloss/finnish]
+ {
+ babelshorthands.if = finnish@babelshorthands,
+ babelshorthands.default:n = true,
+ hyphens.choice:,
+ hyphens / default.code =
+ {%
+ \@finnish@schoolhyphensfalse
+ \@finnish@babelhyphensfalse
+ },
+ hyphens / school.code =
+ {%
+ \@finnish@schoolhyphenstrue
+ \@finnish@babelhyphensfalse
+ },
+ hyphens / babel.code =
+ {%
+ \@finnish@schoolhyphensfalse
+ \@finnish@babelhyphenstrue
+ },
+ hyphens.default:n = default,
+ hyphens/unknown.code = \xpg@warning{Unknown Finnish hyphens `#1'},
+ schoolhyphens.choice:,
+ schoolhyphens / true.code =
+ {%
+ \@finnish@schoolhyphenstrue
+ \@finnish@babelhyphensfalse
+ },
+ schoolhyphens / false.code =
+ {%
+ \@finnish@schoolhyphensfalse
+ },
+ schoolhyphens.default:n = true
+ }
% Register default options
-\xpg@initialize@gloss@options{finnish}{babelshorthands=false,hyphens=default}
+\InitializeGlossOptions{finnish}{babelshorthands=false,hyphens=default}
\ifsystem@babelshorthands
- \setkeys{finnish}{babelshorthands=true}
+ \SetGlossOptions{finnish}{babelshorthands=true}
\else
- \setkeys{finnish}{babelshorthands=false}
+ \SetGlossOptions{finnish}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\finnish@shorthands{%
\xpg@activate@shorthands%
@@ -15191,15 +15189,15 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\finnish@language{%
\if@finnish@schoolhyphens
- \xpg@ifdefined{schoolfinnish}{%
- \polyglossia@setup@language@patterns{schoolfinnish}%
+ \IfLanguageDefinedTF{schoolfinnish}{%
+ \SetupPolyglossiaLangPatterns{schoolfinnish}%
}{%
\xpg@warning{Finnish 'School' hyphenation patterns (schoolfinnish) not available.\MessageBreak
I will use the standard patterns for Finnish instead}%
- \polyglossia@setup@language@patterns{finnish}%
+ \SetupPolyglossiaLangPatterns{finnish}%
}%
\else
- \polyglossia@setup@language@patterns{finnish}%
+ \SetupPolyglossiaLangPatterns{finnish}%
\fi
}
@@ -15253,13 +15251,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fr-CA-u-sd-canb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fr-CA-u-sd-canb.ldf}[polyglossia: module for fr-CA-u-sd-canb (Canadian French, Acadian subvariety)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -15270,13 +15268,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fr-CA.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fr-CA.ldf}[polyglossia: module for fr-CA (Canadian French)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -15287,13 +15285,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fr-CH.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fr-CH.ldf}[polyglossia: module for fr-CH (Swiss French)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -15304,13 +15302,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fr-FR.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fr-FR.ldf}[polyglossia: module for fr-FR (France's French)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -15321,13 +15319,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fr.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fr.ldf}[polyglossia: module for fr (French)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{french}
+\InheritGlossFile{french}
% \end{macrocode}
% \iffalse
@@ -15338,7 +15336,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-french.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-french.ldf}[polyglossia: module for French]
@@ -15368,43 +15366,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias[variant=canadian]{french}{canadien}
\def\french@variant{french}
-\define@choicekey*+{french}{variant}[\xpg@val\xpg@nr]{french,canadian,acadian,swiss}[french]{%
- \ifcase\xpg@nr\relax
- % french:
- \def\french@variant{french}%
- \SetLanguageKeys{french}{babelname=french,bcp47=fr-FR,bcp47-language=fr,bcp47-region=FR}%
- \french@thincolonspacefalse
- \or
- % canadian:
- \def\french@variant{canadien}%
- \SetLanguageKeys{french}{babelname=canadien,bcp47=fr-CA,bcp47-language=fr,bcp47-region=CA,bcp47-extension-u=sd-caqc}%
- \xpg@ifdefined{canadien}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
- I will use the standard patterns for French instead}%
- \adddialect\l@canadien\l@french\relax}%
- \french@thincolonspacefalse
- \or
- % acadian:
- \def\french@variant{acadian}%
- \SetLanguageKeys{french}{babelname=acadian,bcp47=fr-CA-u-sd-canb,bcp47-language=fr,bcp47-region=CA,bcp47-extension-u=sd-canb}%
- \xpg@ifdefined{acadian}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "French (Canada, Acadian)"\MessageBreak
- I will use the standard patterns for French instead}%
- \adddialect\l@acadian\l@french\relax}%
- \french@thincolonspacefalse
- \or
- % swiss:
- \def\french@variant{swissfrench}%
- \SetLanguageKeys{french}{babelname=french,bcp47=fr-CH,bcp47-language=fr,bcp47-region=CH}%
- \adddialect\l@swissfrench\l@french\relax%
- \french@thincolonspacetrue
- \fi
- \xpg@info{Option: French, variant=\xpg@val}%
-}{\xpg@warning{Unknown French variant `#1'}}
-
\def\french@language{%
- \polyglossia@setup@language@patterns{\french@variant}%
+ \SetupPolyglossiaLangPatterns{\french@variant}%
}%
\ifluatex
@@ -15424,91 +15388,103 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Save original footnote definition
% Do this at the end of the preamble to catch other
% packages' footnote changes (#391)
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
\let\xpg@orig@makefntext\@makefntext
}
-\define@boolkey{french}[french@]{frenchfootnote}[true]{}
-
-\define@boolkey{french}[french@]{autospacing}[true]{}
-\french@autospacingtrue
-
-\define@boolkey{french}[french@]{frenchpart}[true]{}
-\french@frenchparttrue
-
-\newif\iffrench@autospaceguillemets
-\define@boolkey{french}[french@]{autospaceguillemets}[true]{}
-\french@autospaceguillemetstrue
-
-\newif\iffrench@thincolonspace
-\define@boolkey{french}[french@]{thincolonspace}[true]{}
-\french@thincolonspacefalse
-
-% Backwards compatibility
-\define@boolkey{french}[french@]{automaticspacesaroundguillemets}[true]{%
- \iffrench@automaticspacesaroundguillemets
- \setkeys{french}{autospaceguillemets=true}%
- \else
- \setkeys{french}{autospaceguillemets=false}%
- \fi
-}
-
% name is for compatibility with babel
\let\french@ttfamilyORI\ttfamily
\DeclareRobustCommand\french@ttfamilyFB{\nofrench@punctuation\french@ttfamilyORI}
-% Allow to switch on autospacing in ttfamily context
-\define@boolkey{french}[french@]{autospacetypewriter}[true]{}
-\french@autospacetypewriterfalse
-
-% This is how babel-french has it
-\define@boolkey{french}[french@]{OriginalTypewriter}[true]{%
- \iffrench@OriginalTypewriter
- \setkeys{french}{autospacetypewriter=false}%
- \else
- \setkeys{french}{autospacetypewriter=true}%
- \fi
-}
-
% Configuration of item labels
\def\french@itemi{\textemdash}
\def\french@itemii{\textemdash}
\def\french@itemiii{\textemdash}
\def\french@itemiv{\textemdash}
-\define@key{french}{itemlabels}[\textemdash]{%
- \def\french@itemi{#1}
- \def\french@itemii{#1}
- \def\french@itemiii{#1}
- \def\french@itemiv{#1}
-}
-
-\define@key{french}{itemlabeli}[\textemdash]{%
- \def\french@itemi{#1}
-}
-
-\define@key{french}{itemlabelii}[\textemdash]{%
- \def\french@itemii{#1}
-}
-
-\define@key{french}{itemlabeliii}[\textemdash]{%
- \def\french@itemiii{#1}
-}
-
-\define@key{french}{itemlabeliv}[\textemdash]{%
- \def\french@itemiv{#1}
-}
+\newif\iffrench@autospacetypewriter
+\french@autospacetypewriterfalse
+\newif\iffrench@autospacing
+\french@autospacingtrue
+\newif\iffrench@frenchpart
+\french@frenchparttrue
+\newif\iffrench@autospaceguillemets
+\french@autospaceguillemetstrue
-\define@boolkey{french}[french@]{frenchitemlabels}[true]{}
+\DeclareKeys[polyglossia/gloss/french]
+ {
+ variant.choice:,
+ variant / french.code =
+ {%
+ \def\french@variant{french}%
+ \SetLanguageKeys{french}{babelname=french,bcp47=fr-FR,bcp47-language=fr,bcp47-region=FR}%
+ \french@thincolonspacefalse
+ },
+ variant / canadian.code =
+ {%
+ \def\french@variant{canadien}%
+ \SetLanguageKeys{french}{babelname=canadien,bcp47=fr-CA,bcp47-language=fr,bcp47-region=CA,bcp47-extension-u=sd-caqc}%
+ \IfLanguageDefinedF{canadien}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@canadien\l@french\relax}%
+ \french@thincolonspacefalse
+ },
+ variant / acadian.code =
+ {%
+ \def\french@variant{acadian}%
+ \SetLanguageKeys{french}{babelname=acadian,bcp47=fr-CA-u-sd-canb,bcp47-language=fr,bcp47-region=CA,bcp47-extension-u=sd-canb}%
+ \IfLanguageDefinedF{acadian}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada, Acadian)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@acadian\l@french\relax}%
+ \french@thincolonspacefalse
+ },
+ variant / swiss.code =
+ {%
+ \def\french@variant{swissfrench}%
+ \SetLanguageKeys{french}{babelname=french,bcp47=fr-CH,bcp47-language=fr,bcp47-region=CH}%
+ \adddialect\l@swissfrench\l@french\relax%
+ \french@thincolonspacetrue
+ },
+ variant.default:n = french,
+ variant/unknown.code = \xpg@warning{Unknown French variant `#1'},
+ frenchfootnote.if = french@frenchfootnote,
+ frenchfootnote.default:n = true,
+ autospacing.if = french@autospacing,
+ autospacing.default:n = true,
+ frenchpart.if = french@frenchpart,
+ frenchpart.default:n = true,
+ autospaceguillemets.if = french@autospaceguillemets,
+ autospaceguillemets.default:n = true,
+ thincolonspace.if = french@thincolonspace,
+ thincolonspace.default:n = true,
+ automaticspacesaroundguillemets.meta:n = {autospaceguillemets=#1},
+ autospacetypewriter.if = french@autospacetypewriter,
+ autospacetypewriter.default:n = true,
+ originaltypewriter.meta:n = {autospacetypewriter=#1},
+ itemlabeli.store = \french@itemi,
+ itemlabelii.store = \french@itemii,
+ itemlabeliii.store = \french@itemiii,
+ itemlabeliv.store = \french@itemiv,
+ frenchitemlabels.if = french@frenchitemlabels,
+ frenchitemlabels.default:n = true,
+ itemlabels.code =
+ \def\french@itemi{#1}%
+ \def\french@itemii{#1}%
+ \def\french@itemiii{#1}%
+ \def\french@itemiv{#1},
+ itemlabels.default:n = \textemdash
+ }
% Register default options
-\xpg@initialize@gloss@options{french}{variant=french,autospacing=true,thincolonspace=false,
+\InitializeGlossOptions{french}{variant=french,autospacing=true,thincolonspace=false,
autospaceguillemets=true,autospacetypewriter=false,
frenchfootnote=false,frenchitemlabels=false,
itemlabels=\textemdash,itemlabeli=\textemdash,itemlabelii=\textemdash,
itemlabeliii=\textemdash,itemlabeliv=\textemdash}
% Register alias options
-\xpg@set@alias@values{french}{variant}{canadian}{acadian}
+\SetLanguageAliasValues{french}{variant}{canadian,acadian}
\def\french@fontsetup{%
@@ -15679,100 +15655,100 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\french@capsformat{%
% Change part heading
% With titlesec
- \ifcsdef{titleformat}{%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part%
- \patchcmd{\NR@part}%
- {\partname\nobreakspace\thepart}%
- {\xpg@french@part\nobreakspace\partname}%
- {}%
- {\xpg@warning{Failed to patch part for French}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
+ \@ifundefined{titleformat}{%
+ % With KOMA
+ \@ifundefined{sectionformat}{%
+ % With memoir
+ \@ifundefined{@memptsize}{% (not \ifdefined\@memptsize)
+ % With standard classes
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\@ifundefined{part}{}{\xpg@warning{Failed to patch part for French}}}%
+ }% (end \ifdefined \@part)
+ }{% Hyperref
+ \let\xpg@save@part@format\NR@part%
+ \patchcmd{\NR@part}%
{\partname\nobreakspace\thepart}%
{\xpg@french@part\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{}%
- }%
- }{% (not \ifdefined\titleformat)
- % With KOMA
- \ifcsdef{sectionformat}{%
- \ifcsdef{partformat}{%
- \let\xpg@save@part@format\partformat%
- \renewcommand{\partformat}{\xpg@french@part~\partname}%
- }{}%
- }{% (not \ifdefined\sectionformat)
- % With memoir
- \ifcsdef{@memptsize}{%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part%
- \patchcmd{\NR@part}{\printpartname \partnamenum \printpartnum}%
- {\partnamefont\xpg@french@part\partnamenum\printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for French}}%
- }{% not hyperref
- \ifcsdef{@part}{%
+ }% (end \ifdefined\NR@part)
+ }{%
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
\let\xpg@save@part@format\@part%
\patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
{\partnamefont\xpg@french@part\partnamenum\printpartname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{}%
- }%
- }{% (not \ifdefined\@memptsize)
- % With standard classes
- \ifcsdef{NR@part}{% Hyperref
+ }%
+ }{% Hyperref (nameref)
\let\xpg@save@part@format\NR@part%
- \patchcmd{\NR@part}%
+ \patchcmd{\NR@part}{\printpartname \partnamenum \printpartnum}%
+ {\partnamefont\xpg@french@part\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }%
+ }% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\sectionformat)
+ \@ifundefined{partformat}{}{%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\xpg@french@part~\partname}%
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
{\partname\nobreakspace\thepart}%
{\xpg@french@part\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for French}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\xpg@french@part\nobreakspace\partname}%
- {}%
- {\ifcsdef{part}{\xpg@warning{Failed to patch part for French}}{}}%
- }{}% (end \ifdefined \NR@part)
- }% (end \ifdefined\@part)
- }% (end \ifdefined\@memptsize)
- }% (end \ifdefined\sectionformat)
+ }%
+ }{% Hyperref (nameref)
+ \let\xpg@save@part@format\NR@part%
+ \patchcmd{\NR@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }%
}% (end \ifdefined\titleformat)
}
\def\nofrench@capsformat{%
% Reset chapter and part heading
- \ifcsdef{titleformat}{%
- % With titlesec
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format%
- }{%
- \let\@part\xpg@save@part@format%
- }%
- }{}%
- }{% (not \ifdefined\titleformat)
- \ifcsdef{sectionformat}{%
- % With KOMA
- \ifcsdef{xpg@save@part@format}{%
- \let\partformat\xpg@save@part@format
- }{}%
- }{%
+ \@ifundefined{titleformat}{%
+ \@ifundefined{sectionformat}{%
% With memoir and standard classes
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format%
- }{%
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
\let\@part\xpg@save@part@format%
+ }{%
+ \let\NR@part\xpg@save@part@format%
}%
- }{}%
+ }%
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@part@format}{}{%
+ \let\partformat\xpg@save@part@format
+ }%
}% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
+ % With titlesec
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
+ \let\@part\xpg@save@part@format%
+ }{%
+ \let\NR@part\xpg@save@part@format%
+ }%
+ }%
}% (end \ifdefined\titleformat)
}
@@ -15783,7 +15759,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\if@xpg@french@footnote@set%
\else%
\iffrench@frenchfootnote%
- \ifdefstring{\xpg@main@language}{french}{%
+ \IfMainLanguageTF{french}{%
\ifx\@makefntext\undefined\else%
\long\def\french@makefntext##1{%
\parindent1em \noindent\quad%
@@ -15807,7 +15783,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\if@xpg@french@itemlabels@set%
\else%
\iffrench@frenchitemlabels
- \ifdefstring{\xpg@main@language}{french}{%
+ \IfMainLanguageTF{french}{%
\renewcommand{\labelitemi}{\french@itemi}%
\renewcommand{\labelitemii}{\french@itemii}%
\renewcommand{\labelitemiii}{\french@itemiii}%
@@ -15882,13 +15858,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-friulan.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-friulan.ldf}[polyglossia: module for Friulian]
% We only provide this gloss for babel compatibility.
-\xpg@load@master@language{friulian}
+\InheritGlossFile{friulian}
% \end{macrocode}
% \iffalse
@@ -15899,7 +15875,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-friulian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-friulian.ldf}[polyglossia: module for Friulian]
@@ -15953,7 +15929,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
Lui\or Avost\or Setembar\or Otobar\or Novembar\or Dicembar%
\fi\space dal\space\number\year}}
-\AtEndPreamble{% the user or the class might define different values
+\AddToHook{begindocument/before}{% the user or the class might define different values
\edef\xpgfu@savedvalues{%
\clubpenalty=\the\clubpenalty\space
\@clubpenalty=\the\@clubpenalty\space
@@ -15985,13 +15961,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-fur.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-fur.ldf}[polyglossia: module for fur (Friulian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{friulian}
+\InheritGlossFile{friulian}
% \end{macrocode}
% \iffalse
@@ -16002,13 +15978,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ga.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ga.ldf}[polyglossia: module for ga (Gaelic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{gaelic}
+\InheritGlossFile{gaelic}
% \end{macrocode}
% \iffalse
@@ -16019,7 +15995,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-gaelic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-gaelic.ldf}[polyglossia: module for Gaelic]
@@ -16043,23 +16019,28 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias[variant=scottish]{gaelic}{scottish}
\def\gaelic@variant{irish}
-\define@choicekey*+{gaelic}{variant}[\xpg@val\xpg@nr]{irish,scottish}[irish]{%
- \ifcase\xpg@nr\relax
- % irish:
- \gdef\gaelic@variant{irish}%
- \SetLanguageKeys{gaelic}{language=Irish,langtag=IRI,babelname=irish,bcp47=ga,bcp47-language=ga}%
- \xpg@fontsetup@latin{gaelic}%
- \or
- % scottish:
- \gdef\gaelic@variant{scottish}%
- \SetLanguageKeys{gaelic}{language=Gaelic,langtag=GAE,babelname=scottish,bcp47=gd,bcp47-language=gd}%
- \xpg@fontsetup@latin{gaelic}%
- \fi
- \xpg@info{Option: gaelic, variant=\xpg@val}%
-}{\xpg@warning{Unknown gaelic variant `#1'}}
+
+\DeclareKeys[polyglossia/gloss/gaelic]
+ {
+ variant.choice:,
+ variant / irish.code =
+ {%
+ \gdef\gaelic@variant{irish}%
+ \SetLanguageKeys{gaelic}{language=Irish,langtag=IRI,babelname=irish,bcp47=ga,bcp47-language=ga}%
+ \SetupLatinPolyglossiaFont{gaelic}%
+ },
+ variant / scottish.code =
+ {%
+ \gdef\gaelic@variant{scottish}%
+ \SetLanguageKeys{gaelic}{language=Gaelic,langtag=GAE,babelname=scottish,bcp47=gd,bcp47-language=gd}%
+ \SetupLatinPolyglossiaFont{gaelic}%
+ },
+ variant.default:n = irish,
+ variant/unknown.code = \xpg@warning{Unknown gaelic variant `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{gaelic}{variant=irish}
+\InitializeGlossOptions{gaelic}{variant=irish}
\def\captionsgaelic@irish{%
\def\refname{Tagairtí}%
@@ -16149,7 +16130,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-galician.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-galician.ldf}[polyglossia: module for Galician]
\PolyglossiaSetup{galician}{
@@ -16206,13 +16187,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-gd.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-gd.ldf}[polyglossia: module for gd (Gaelic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{gaelic}
+\InheritGlossFile{gaelic}
% \end{macrocode}
% \iffalse
@@ -16223,7 +16204,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-georgian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-georgian.ldf}[polyglossia: module for Georgian]
@@ -16243,34 +16224,37 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*{georgian}{ka}
\newif\ifgeorgian@numerals
-\define@key{georgian}{numerals}[arabic]{%
- \ifstrequal{#1}{georgian}%
- {\georgian@numeralstrue%
- \SetLanguageKeys{georgian}{bcp47-extension-u=nu-geor}%
- }%
- {\georgian@numeralsfalse%
- \SetLanguageKeys{georgian}{bcp47-extension-u=nu-latn}%
- }%
-}
-
-\define@boolkey{georgian}[georgian@]{babelshorthands}[true]{}
-\define@boolkey{georgian}[georgian@]{oldmonthnames}[true]{}
+\DeclareKeys[polyglossia/gloss/georgian]
+ {
+ babelshorthands.if = georgian@babelshorthands,
+ babelshorthands.default:n = true,
+ oldmonthnames.if = georgian@oldmonthnames,
+ oldmonthnames.default:n = true,
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \georgian@numeralsfalse
+ \SetLanguageKeys{georgian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / georgian.code =
+ {%
+ \georgian@numeralstrue
+ \SetLanguageKeys{georgian}{bcp47-extension-u=nu-geor}%
+ },
+ numerals.default:n = arabic
+ }
% Register default options
-\xpg@initialize@gloss@options{georgian}{babelshorthands=false,oldmonthnames=false,numerals=arabic}
+\InitializeGlossOptions{georgian}{babelshorthands=false,oldmonthnames=false,numerals=arabic}
\ifsystem@babelshorthands
- \setkeys{georgian}{babelshorthands=true}
+ \SetGlossOptions{georgian}{babelshorthands=true}
\else
- \setkeys{georgian}{babelshorthands=false}
+ \SetGlossOptions{georgian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\georgian@shorthands{%
\xpg@activate@shorthands%
@@ -16471,7 +16455,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-german.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-german.ldf}[polyglossia: module for German]
@@ -16520,51 +16504,11 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@german@oldspelling
\@german@oldspellingfalse
-\define@choicekey*+{german}{spelling}[\xpg@val\xpg@nr]{new,old,1901,1996}[new]{%
- \ifcase\xpg@nr\relax
- % new:
- \@german@oldspellingfalse
- \or
- % old:
- \@german@oldspellingtrue
- \or
- % 1901:
- \@german@oldspellingtrue
- \or
- % 1996:
- \@german@oldspellingfalse
- \fi
- \german@set@babelname%
- \xpg@info{Option: German, spelling=\xpg@val}%
-}{\xpg@warning{Unknown German spelling `#1'}}
\newif\if@austrian@locale
\@austrian@localefalse
\newif\if@swiss@locale
\@swiss@localefalse
-\define@choicekey*+{german}{variant}[\xpg@val\xpg@nr]{german,austrian,swiss}[german]{%
- \ifcase\xpg@nr\relax
- % german:
- \@swiss@localefalse%
- \@austrian@localefalse%
- \or
- % austrian:
- \@austrian@localetrue%
- \@swiss@localefalse%
- \or
- % swiss:
- \@swiss@localetrue%
- \@austrian@localefalse%
- \xpg@ifdefined{swissgerman}{}%
- {%
- \xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
- I will use the standard patterns for German (old spelling) instead}%
- \adddialect\l@swissgerman\l@german\relax%
- }%
- \fi
- \german@set@babelname%
- \xpg@info{Option: German, variant=\xpg@val}%
-}{\xpg@warning{Unknown German variant `#1'}}
\def\german@set@babelname{%
\if@german@oldspelling
@@ -16613,58 +16557,110 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\newif\if@german@blackletter
-\define@choicekey*+{german}{script}[\xpg@val\xpg@nr]{latin,blackletter,fraktur}[latin]{%
- \ifcase\xpg@nr\relax
- % latin:
- \@german@blackletterfalse%
- \or
- % blackletter:
- \@german@blacklettertrue%
- \or
- % fraktur:
- \@german@blacklettertrue%
- \fi
- \german@set@babelname%
- \xpg@info{Option: German, script=\xpg@val}%
-}{\xpg@warning{Unknown German script `#1'}}
-
-\define@boolkey{german}[german@]{capitaleszett}[true]{%
- \ifgerman@capitaleszett
- % MakeUppercase capitalizes the eszett (U+00DF) with U+1E9E
- \SetLanguageKeys{german}{bcp47-casing=de-x-eszett,bcp47-extension-x=eszett}
- \else
- % Capitalize eszett as <SS>
- \SetLanguageKeys{german}{bcp47-casing=de,bcp47-extension-x={}}
- \fi
-}
-
-
-% Option defunc'ed, as both XeTeX and LuaTeX meanwhile
-% use the experimental German hyphenation patterns by default.
-\define@boolkey{german}[german@]{latesthyphen}[true]{}
-\define@boolkey{german}[german@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/german]
+ {
+ babelshorthands.if = german@babelshorthands,
+ babelshorthands.default:n = true,
+ latesthyphen.if = german@latesthyphen,
+ latesthyphen.default:n = true,
+ capitaleszett.choice:,
+ capitaleszett / true.code =
+ {% MakeUppercase capitalizes the eszett (U+00DF) with U+1E9E
+ \SetLanguageKeys{german}{bcp47-casing=de-x-eszett,bcp47-extension-x=eszett}%
+ },
+ capitaleszett / false.code =
+ {% Capitalize eszett as <SS>
+ \SetLanguageKeys{german}{bcp47-casing=de,bcp47-extension-x={}}%
+ },
+ capitaleszett.default:n = true,
+ script.choice:,
+ script / latin.code =
+ {%
+ \@german@blackletterfalse
+ \german@set@babelname
+ },
+ script / blackletter.code =
+ {%
+ \@german@blacklettertrue
+ \german@set@babelname
+ },
+ script / fraktur.code =
+ {%
+ \@german@blacklettertrue
+ \german@set@babelname
+ },
+ script.default:n = latin,
+ script/unknown.code = \xpg@warning{Unknown German script `#1'},
+ spelling.choice:,
+ spelling / new.code =
+ {%
+ \@german@oldspellingfalse
+ \german@set@babelname
+ },
+ spelling / old.code =
+ {%
+ \@german@oldspellingtrue
+ \german@set@babelname
+ },
+ spelling / 1901.code =
+ {%
+ \@german@oldspellingtrue
+ \german@set@babelname
+ },
+ spelling / 1996.code =
+ {%
+ \@german@oldspellingfalse
+ \german@set@babelname
+ },
+ spelling.default:n = new,
+ spelling/unknown.code = \xpg@warning{Unknown German spelling `#1'},
+ variant.choice:,
+ variant / german.code =
+ {%
+ \@swiss@localefalse
+ \@austrian@localefalse
+ \german@set@babelname
+ },
+ variant / austrian.code =
+ {%
+ \@austrian@localetrue
+ \@swiss@localefalse
+ \german@set@babelname
+ },
+ variant / swiss.code =
+ {%
+ \@swiss@localetrue
+ \@austrian@localefalse
+ \IfLanguageDefinedF{swissgerman}
+ {%
+ \xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
+ I will use the standard patterns for German (old spelling) instead}%
+ \adddialect\l@swissgerman\l@german\relax
+ }%
+ \german@set@babelname
+ },
+ variant.default:n = german,
+ variant/unknown.code = \xpg@warning{Unknown German variant `#1'}
+ }
+
-\setkeys{german}{spelling,script,variant}
+\SetGlossOptions{german}{spelling,script,variant}
% Register default options
-\xpg@initialize@gloss@options{german}{variant=german,spelling=new,script=latin,babelshorthands=false}
+\InitializeGlossOptions{german}{variant=german,spelling=new,script=latin,babelshorthands=false}
% Register alias options
-\xpg@set@alias@values{german}{spelling}{new}{1996}
-\xpg@set@alias@values{german}{spelling}{old}{1901}
-\xpg@set@alias@values{german}{script}{blackletter}{fraktur}
+\SetLanguageAliasValues{german}{spelling}{new,1996}
+\SetLanguageAliasValues{german}{spelling}{old,1901}
+\SetLanguageAliasValues{german}{script}{blackletter,fraktur}
\ifsystem@babelshorthands
- \setkeys{german}{babelshorthands=true}
+ \SetGlossOptions{german}{babelshorthands=true}
\else
- \setkeys{german}{babelshorthands=false}
+ \SetGlossOptions{german}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\german@shorthands{%
\xpg@activate@shorthands%
@@ -16786,15 +16782,15 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\german@language{%
\if@german@oldspelling
\if@swiss@locale
- \polyglossia@setup@language@patterns{swissgerman}%
+ \SetupPolyglossiaLangPatterns{swissgerman}%
\else
- \polyglossia@setup@language@patterns{german}%
+ \SetupPolyglossiaLangPatterns{german}%
\fi
\if@austrian@locale
\adddialect\l@austrian\l@german%
\fi
\else
- \polyglossia@setup@language@patterns{ngerman}%
+ \SetupPolyglossiaLangPatterns{ngerman}%
\if@austrian@locale
\adddialect\l@naustrian\l@ngerman%
\fi
@@ -16825,13 +16821,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-germanb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-germanb.ldf}[polyglossia: module for German (old spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -16842,13 +16838,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-gl.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-gl.ldf}[polyglossia: module for gl (Galician)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{galician}
+\InheritGlossFile{galician}
% \end{macrocode}
% \iffalse
@@ -16859,13 +16855,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-grc.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-grc.ldf}[polyglossia: module for grc (Greek)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{greek}
+\InheritGlossFile{greek}
% \end{macrocode}
% \iffalse
@@ -16876,7 +16872,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-greek.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-greek.ldf}[polyglossia: module for Greek]
@@ -16900,7 +16896,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*[variant=ancient]{greek}{grc}
-\setlanguagealias*[varant=polytonic]{greek}{el-polyton}
+\setlanguagealias*[variant=polytonic]{greek}{el-polyton}
\setlanguagealias*[variant=monotonic]{greek}{el-monoton}
\setlanguagealias*{greek}{el}
@@ -16920,44 +16916,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@greek@ancient\@greek@ancientfalse
\newif\if@greek@poly\@greek@polyfalse
-\define@choicekey*+{greek}{variant}[\xpg@val\xpg@nr]{monotonic,mono,polytonic,poly,ancient,ancientgreek}[monotonic]{%
- \xpg@ifdefined{greek}{}{%
- \xpg@nopatterns{greek}%
- \adddialect\l@greek\l@nohyphenation
- }%
- \ifcase\xpg@nr\relax
- % monotonic:
- \@greek@polyfalse
- \@greek@ancientfalse
- \or
- % mono:
- \@greek@polyfalse
- \@greek@ancientfalse
- \or
- % polytonic:
- \@greek@polytrue
- \@greek@ancientfalse
- \or
- % poly:
- \@greek@polytrue
- \@greek@ancientfalse
- \or
- % ancient:
- \@greek@polyfalse
- \@greek@ancienttrue
- \or
- % ancientgreek:
- \@greek@polyfalse
- \@greek@ancienttrue
- \fi
- \greek@set@langdata
- \xpg@info{Option: Greek, variant=\xpg@val}%
-}{\xpg@warning{Unknown Greek variant `#1'}}
-
-
\def\greek@set@langdata{%
\if@greek@ancient
- \xpg@ifdefined{ancientgreek}{}%
+ \IfLanguageDefinedF{ancientgreek}%
{\xpg@warning{No hyphenation patterns were loaded for Ancient Greek\MessageBreak
I will use the patterns loaded for \string\l@greek\space instead}%
\adddialect\l@ancientgreek\l@greek\relax}%
@@ -16967,7 +16928,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\SetLanguageKeys{greek}{babelname=greek,bcp47=grc,bcp47-language=grc,bcp47-variant={}}%
\else
\if@greek@poly
- \xpg@ifdefined{polygreek}{}%
+ \IfLanguageDefinedF{polygreek}%
{\xpg@warning{No hyphenation patterns were loaded for Polytonic Greek\MessageBreak
I will use the patterns loaded for \string\l@greek\space instead}%
\adddialect\l@polygreek\l@greek\relax}%
@@ -16976,7 +16937,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\dategreek{\datepolygreek}%
\SetLanguageKeys{greek}{babelname=polutonikogreek,bcp47=el-polyton,bcp47-language=el,bcp47-variant=polyton}%
\else% monotonic greek
- \xpg@ifdefined{monogreek}{}%
+ \IfLanguageDefinedF{monogreek}%
{\xpg@warning{No hyphenation patterns were loaded for Monotonic Greek\MessageBreak
I will use the patterns loaded for \string\l@greek\space instead}%
\adddialect\l@monogreek\l@greek\relax}%
@@ -16990,42 +16951,85 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\greek@language{%
- \polyglossia@setup@language@patterns{\greek@variant}%
+ \SetupPolyglossiaLangPatterns{\greek@variant}%
}
\newif\if@greek@numerals
-\define@choicekey*+{greek}{numerals}[\xpg@val\xpg@nr]{greek,arabic}[greek]{%
- \ifcase\xpg@nr\relax
- % greek:
- \@greek@numeralstrue%
- \SetLanguageKeys{greek}{bcp47-extension-u=nu-grek}%
- \or
- % arabic:
- \@greek@numeralsfalse%
- \SetLanguageKeys{greek}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Greek, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Greek numerals value `#1'}}
-
-\define@boolkey{greek}[greek@]{capitaliota}[true]{%
- \ifgreek@capitaliota
- % \MakeUppercase converts the ypogegrammeni (subscript muted iota) to capital iota
- \SetLanguageKeys{greek}{bcp47-casing=el-x-iota,bcp47-extension-x=iota}
- \else
- % \MakeUppercase retains the subscript versions (default)
- \SetLanguageKeys{greek}{bcp47-casing=el,bcp47-extension-x={}}
- \fi
-}
-
-\define@boolkey{greek}{attic}[true]{\xpg@warning{Greek option `attic' is no longer required.}}
+\DeclareKeys[polyglossia/gloss/greek]
+ {
+ variant.choices:nn = { monotonic, mono,polytonic, poly,ancient, ancientgreek }
+ {%
+ \CheckHyphenationPatterns{greek}%
+ \ifcase\UseName{l_keys_choice_int}\or
+ % monotonic:
+ \@greek@polyfalse
+ \@greek@ancientfalse
+ \or
+ % mono:
+ \@greek@polyfalse
+ \@greek@ancientfalse
+ \or
+ % polytonic:
+ \@greek@polytrue
+ \@greek@ancientfalse
+ \or
+ % poly:
+ \@greek@polytrue
+ \@greek@ancientfalse
+ \or
+ % ancient:
+ \@greek@polyfalse
+ \@greek@ancienttrue
+ \or
+ % ancientgreek:
+ \@greek@polyfalse
+ \@greek@ancienttrue
+ \fi
+ \greek@set@langdata
+ },
+ variant.default:n = monotonic,
+ variant/unknown.code = \xpg@warning{Unknown Greek variant `#1'},
+ numerals.choice:,
+ numerals / greek.code =
+ {%
+ \@greek@numeralstrue
+ \SetLanguageKeys{greek}{bcp47-extension-u=nu-grek}%
+ },
+ numerals / arabic.code =
+ {%
+ \@greek@numeralsfalse
+ \SetLanguageKeys{greek}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = greek,
+ numerals/unknown.code = \xpg@warning{Unknown Greek numerals value `#1'},
+ capitaliota.choice:,
+ capitaliota / true.code =
+ {%
+ \@greek@capitaliotatrue
+ % \MakeUppercase converts the ypogegrammeni (subscript muted iota) to capital iota
+ \SetLanguageKeys{greek}{bcp47-casing=el-x-iota,bcp47-extension-x=iota}%
+ },
+ capitaliota / false.code =
+ {%
+ \@greek@capitaliotafalse
+ % \MakeUppercase retains the subscript versions (default)
+ \SetLanguageKeys{greek}{bcp47-casing=el,bcp47-extension-x={}}%
+ },
+ capitaliota.default:n = true,
+ attic.choices:nn = { true, false }
+ {%
+ \xpg@warning{Greek option `attic' is no longer required.}
+ },
+ capitaliota.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{greek}{variant=monotonic,numerals=greek}
+\InitializeGlossOptions{greek}{variant=monotonic,numerals=greek}
% Register alias options
-\xpg@set@alias@values{greek}{variant}{monotonic}{mono}
-\xpg@set@alias@values{greek}{variant}{polytonic}{poly}
+\SetLanguageAliasValues{greek}{variant}{monotonic,mono}
+\SetLanguageAliasValues{greek}{variant}{polytonic,poly}
\def\monogreekcaptions{%
\def\refname{Αναφορές}%
@@ -17344,13 +17348,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-he.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-he.ldf}[polyglossia: module for he (Hebrew)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{hebrew}
+\InheritGlossFile{hebrew}
% \end{macrocode}
% \iffalse
@@ -17361,7 +17365,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hebrew.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hebrew.ldf}[polyglossia: module for Hebrew]
@@ -17387,41 +17391,48 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{hebrew}{he}
-% hebrewcal options
-\define@key{hebrew}{marcheshvan}[true]{\setkeys{hebrewcal}{marcheshvan=#1}}
-\define@key{hebrew}{transliteration}[alt]{\setkeys{hebrewcal}{transliteration=#1}}
-\define@key{hebrew}{fullyear}[true]{\setkeys{hebrewcal}{fullyear=#1}}
-
\newif\if@calendar@hebrew
-\define@choicekey*+{hebrew}{calendar}[\xpg@val\xpg@nr]{hebrew,gregorian}[gregorian]{%
- \ifcase\xpg@nr\relax
- % hebrew:
- \@calendar@hebrewtrue
- \or
- % gregorian:
- \@calendar@hebrewfalse
- \fi
- \xpg@info{Option: Hebrew, calendar=\xpg@val}%
-}{\xpg@warning{Unknown Hebrew calendar `#1'}}
-
\newif\if@hebrew@numerals
-\define@choicekey*+{hebrew}{numerals}[\xpg@val\xpg@nr]{hebrew,arabic}[arabic]{%
- \ifcase\xpg@nr\relax
- % hebrew:
- \@hebrew@numeralstrue
- \SetLanguageKeys{hebrew}{bcp47-extension-u=nu-hebr}%
- \or
- % arabic:
- \@hebrew@numeralsfalse
- \SetLanguageKeys{hebrew}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Hebrew, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Hebrew numerals value `#1'}}
-\setkeys{hebrew}{numerals}
+\DeclareKeys[polyglossia/gloss/hebrew]
+ {
+ marcheshvan.code = \setkeys{hebrewcal}{marcheshvan=#1},
+ marcheshvan.default:n = true,
+ transliteration.code = \setkeys{hebrewcal}{transliteration=#1},
+ transliteration.default:n = alt,
+ fullyear.code = \setkeys{hebrewcal}{fullyear=#1},
+ fullyear.default:n = true,
+ calendar.choice:,
+ calendar / hebrew.code =
+ {%
+ \@calendar@hebrewtrue
+ },
+ calendar / gregorian.code =
+ {%
+ \@calendar@hebrewfalse
+ },
+ calendar.default:n = gregorian,
+ calendar/unknown.code = \xpg@warning{Unknown Hebrew calendar `#1'},
+ numerals.choice:,
+ numerals / hebrew.code =
+ {%
+ \@hebrew@numeralstrue
+ \SetLanguageKeys{hebrew}{bcp47-extension-u=nu-hebr}%
+ },
+ numerals / arabic.code =
+ {%
+ \@hebrew@numeralsfalse
+ \SetLanguageKeys{hebrew}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Hebrew numerals value `#1'}
+ }
+
+
+\SetGlossOptions{hebrew}{numerals}
% Register default options
-\xpg@initialize@gloss@options{hebrew}{numerals=arabic,calendar=gregorian,marcheshvan=false,fullyear=false}
+\InitializeGlossOptions{hebrew}{numerals=arabic,calendar=gregorian,marcheshvan=false,fullyear=false}
\def\captionshebrew{%
\def\prefacename{מבוא}%
@@ -17535,13 +17546,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hi.ldf}[polyglossia: module for hi (Hindi)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{hindi}
+\InheritGlossFile{hindi}
% \end{macrocode}
% \iffalse
@@ -17552,7 +17563,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hindi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% UTF-8 strings kindly provided by Zdenĕk Wagner, 10-03-2008
% with corrections and additional contributions by Anshuman Pandey
@@ -17579,8 +17590,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\ifx\l@hindi\@undefined%
\ifx\l@sanskrit\@undefined%
- \xpg@nopatterns{Hindi}%
- \adddialect\l@hindi\l@nohyphenation%
+ \XPGNoPatternsFallback{hindi}%
\else
\xpg@warning{No hyphenation patterns were loaded for Hindi\MessageBreak
I will use the patterns for Sanskrit instead}
@@ -17589,26 +17599,31 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\fi
\def\hindi@language{%
- \polyglossia@setup@language@patterns{hindi}%
+ \SetupPolyglossiaLangPatterns{hindi}%
}
\newif\ifhindi@devanagari@numerals
\hindi@devanagari@numeralstrue
-\define@choicekey*+{hindi}{numerals}[\xpg@val\xpg@nr]{Devanagari,Western}[Devanagari]{%
- \ifcase\xpg@nr\relax
- % Devanagari:
- \hindi@devanagari@numeralstrue%
- \SetLanguageKeys{hindi}{bcp47-extension-u=nu-deva}%
- \or
- % Western:
- \hindi@devanagari@numeralsfalse%
- \SetLanguageKeys{hindi}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Hindi, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Hindi numeral `#1'}}
+
+\DeclareKeys[polyglossia/gloss/hindi]
+ {
+ numerals.choice:,
+ numerals / devanagari.code =
+ {%
+ \hindi@devanagari@numeralstrue
+ \SetLanguageKeys{hindi}{bcp47-extension-u=nu-deva}%
+ },
+ numerals / western.code =
+ {%
+ \hindi@devanagari@numeralsfalse
+ \SetLanguageKeys{hindi}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = devanagari,
+ numerals/unknown.code = \xpg@warning{Unknown Hindi numeral `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{hindi}{numerals=devanagari}
+\InitializeGlossOptions{hindi}{numerals=devanagari}
\newcommand{\hindinumerals}[2]{\hindinumber{#2}}
@@ -17628,6 +17643,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\contentsname{विषय सूची}%
\def\enclname{}%
\def\figurename{चित्र}% रेखाचित्र
+ \def\glossaryname{शब्दार्थ सूची}%
\def\headpagename{पृष्ठ}%
\def\headtoname{}%
\def\indexname{सूची}%
@@ -17639,6 +17655,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\pagename{पृष्ठ}%
\def\partname{खण्ड}%
\def\prefacename{प्रस्तावना}% प्राक्कथन
+ \def\proofname{प्रमाण}%
\def\refname{हवाले}%
\def\tablename{तालिका}%
\def\seename{देखिए}%
@@ -17671,13 +17688,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hr.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hr.ldf}[polyglossia: module for hr (Croatian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{croatian}
+\InheritGlossFile{croatian}
% \end{macrocode}
% \iffalse
@@ -17688,13 +17705,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hsb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hsb.ldf}[polyglossia: module for hsb (Higher Sorbian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -17705,13 +17722,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hu.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hu.ldf}[polyglossia: module for hu (Hungarian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{hungarian}
+\InheritGlossFile{hungarian}
% \end{macrocode}
% \iffalse
@@ -17722,7 +17739,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hungarian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hungarian.ldf}[polyglossia: module for Hungarian]
@@ -17749,53 +17766,61 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@hungarian@swapcaptions
\newif\if@hungarian@swapheadings
\newif\if@hungarian@swapheaders
-\define@choicekey*+{hungarian}{swapstrings}[\xpg@val\xpg@nr]{all,captions,headings,headers,hheaders,none}[all]{%
- \ifcase\xpg@nr\relax
- % all:
- \@hungarian@swapcaptionstrue%
- \@hungarian@swapheadingstrue%
- \@hungarian@swapheaderstrue%
- \or
- % captions:
- \@hungarian@swapcaptionstrue%
- \@hungarian@swapheadingsfalse%
- \@hungarian@swapheadersfalse%
- \or
- % headings:
- \@hungarian@swapcaptionsfalse%
- \@hungarian@swapheadingstrue%
- \@hungarian@swapheadersfalse%
- \or
- % headers:
- \@hungarian@swapcaptionsfalse%
- \@hungarian@swapheadingsfalse%
- \@hungarian@swapheaderstrue%
- \or
- % hheaders:
- \@hungarian@swapcaptionsfalse%
- \@hungarian@swapheadingstrue%
- \@hungarian@swapheaderstrue%
- \or
- % none:
- \@hungarian@swapcaptionsfalse%
- \@hungarian@swapheadingsfalse%
- \@hungarian@swapheadersfalse%
- \fi
- \xpg@info{Option: Hungarian, swapstrings=\xpg@val}%
-}{\xpg@warning{Unknown Hungarian swapstrings value `#1'}}
-% Force punctuation: 1) after section type counters; 2) after @chapapp in the running head
-\define@boolkey{hungarian}[hungarian@]{forceheadingpunctuation}[true]{}
+\DeclareKeys[polyglossia/gloss/hungarian]
+ {
+ forceheadingpunctuation.if = hungarian@forceheadingpunctuation,
+ forceheadingpunctuation.default:n = true,
+ swapstrings.choice:,
+ swapstrings / all.code =
+ {%
+ \@hungarian@swapcaptionstrue
+ \@hungarian@swapheadingstrue
+ \@hungarian@swapheaderstrue
+ },
+ swapstrings / captions.code =
+ {%
+ \@hungarian@swapcaptionstrue
+ \@hungarian@swapheadingsfalse
+ \@hungarian@swapheadersfalse
+ },
+ swapstrings / headings.code =
+ {%
+ \@hungarian@swapcaptionsfalse
+ \@hungarian@swapheadingstrue
+ \@hungarian@swapheadersfalse
+ },
+ swapstrings / headers.code =
+ {%
+ \@hungarian@swapcaptionsfalse
+ \@hungarian@swapheadingsfalse
+ \@hungarian@swapheaderstrue
+ },
+ swapstrings / hheaders.code =
+ {%
+ \@hungarian@swapcaptionsfalse
+ \@hungarian@swapheadingstrue
+ \@hungarian@swapheaderstrue
+ },
+ swapstrings / none.code =
+ {%
+ \@hungarian@swapcaptionsfalse
+ \@hungarian@swapheadingsfalse
+ \@hungarian@swapheadersfalse
+ },
+ swapstrings.default:n = all,
+ swapstrings/unknown.code = \xpg@warning{Unknown Hungarian swapstrings value `#1'}
+ }
% Register default options
% forceheadinpunctuatin is recommended, but the default value is false for compatibility reasons
-\xpg@initialize@gloss@options{hungarian}{swapstrings=all,
+\InitializeGlossOptions{hungarian}{swapstrings=all,
forceheadingpunctuation=false}
\def\hungarian@language{%
- \polyglossia@setup@language@patterns{hungarian}%
- \xpg@ifdefined{hungarian}{\adddialect\l@magyar\l@hungarian}{}%
+ \SetupPolyglossiaLangPatterns{hungarian}%
+ \IfLanguageDefinedT{hungarian}{\adddialect\l@magyar\l@hungarian}%
}%
\def\captionshungarian{%
@@ -17867,120 +17892,104 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% change chapter and part headings
\if@hungarian@swapheadings
% With titlesec
- \ifcsdef{titleformat}{%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part%
- \patchcmd{\NR@part}%
- {\partname\nobreakspace\thepart}%
- {\thepart.\nobreakspace\partname}%
- {}%
- {\xpg@warning{Failed to patch part for Hungarian}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\thepart.\nobreakspace\partname}%
- {}%
- {\xpg@warning{Failed to patch part for Hungarian}}%
- }{}%
- }
- \ifcsdef{chapter}{%
- \titleformat\chapter[display]%
- {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
- {\thechapter.\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
- }{}%
- }{% (not \ifdefined\titleformat)
+ \@ifundefined{titleformat}{%
% With KOMA
- \ifcsdef{sectionformat}{%
- \ifcsdef{partformat}{%
- \let\xpg@save@part@format\partformat%
- \renewcommand{\partformat}{\thepart.~\partname}%
- }{}%
- \ifcsdef{chapterformat}{%
- \let\xpg@save@chap@format\chapterformat%
- \renewcommand{\chapterformat}{\mbox{\thechapter\autodot%
- \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
- }{}%
- }{% (not \ifdefined\sectionformat)
- % With memoir
- \ifcsdef{@memptsize}{%
- \ifcsdef{@makechapterhead}{%
- \let\xpg@save@chap@format\@makechapterhead%
- \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
- {\printchapternum.\chapternamenum\printchaptername}%
- {}%
- {\xpg@warning{Failed to patch chapter for Hungarian}}%
- }{}%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part%
- \patchcmd{\NR@part}{\printpartname \partnamenum \printpartnum}%
- {\printpartnum.\partnamenum\printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for Hungarian}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
- {\printpartnum.\partnamenum\printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for Hungarian}}%
- }{}%
- }%
- }{% (not \ifdefined\@memptsize)
+ \@ifundefined{sectionformat}{%
+ % Memoir?
+ \@ifundefined{@memptsize}{%
% With standard classes
- \ifcsdef{@makechapterhead}{%
+ \@ifundefined{@makechapterhead}{}{%
\let\xpg@save@chap@format\@makechapterhead%
\patchcmd{\@makechapterhead}%
{\@chapapp\space \thechapter}%
{\thechapter.\space \@chapapp}%
{}%
{\xpg@warning{Failed to patch chapter for Hungarian}}%
- }{}%
- \ifcsdef{NR@part}{% Hyperref (nameref)
+ }%
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\@ifundefined{part}{}{\xpg@warning{Failed to patch part for Hungarian}}}%
+ }% (end \ifdefined\@part)
+ }{% Hyperref (nameref)
\let\xpg@save@part@format\NR@part%
\patchcmd{\NR@part}%
{\partname\nobreakspace\thepart}%
{\thepart.\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for Hungarian}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\thepart.\nobreakspace\partname}%
- {}%
- {\ifcsdef{part}{\xpg@warning{Failed to patch part for Hungarian}}{}}%
- }{}% (end \ifdefined\@part)
}% (end not hyperref)
- }% (end \ifdefined\@memptsize)
- }% (end \ifdefined\sectionformat)
+ }{% with memoir (\ifdefined\@memptsize)
+ \@ifundefined{@makechapterhead}{}{%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
+ {\printchapternum.\chapternamenum\printchaptername}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Hungarian}}%
+ }%
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\printpartnum.\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }%
+ }{% Hyperref (nameref)
+ \let\xpg@save@part@format\NR@part%
+ \patchcmd{\NR@part}{\printpartname \partnamenum \printpartnum}%
+ {\printpartnum.\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }%
+ }% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\sectionformat)
+ \@ifundefined{partformat}{}{%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\thepart.~\partname}%
+ }%
+ \@ifundefined{chapterformat}{}{%
+ \let\xpg@save@chap@format\chapterformat%
+ \renewcommand{\chapterformat}{\mbox{\thechapter\autodot%
+ \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }%
+ }{% Hyperref (nameref)
+ \let\xpg@save@part@format\NR@part%
+ \patchcmd{\NR@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }%
+ \@ifundefined{chapter}{}{%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\thechapter.\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ }%
}% (end \ifdefined\titleformat)
\fi% (end \if@hungarian@swapheadings)
%
% Change running headers
\if@hungarian@swapheaders
- \ifcsdef{chapterformat}{%
- % With KOMA
- \let\xpg@save@chaptermark@format\chaptermarkformat%
- \renewcommand*\chaptermarkformat{%
- \thechapter\autodot\ \IfChapterUsesPrefixLine{\chapapp\@hungarian@forced@dot\enskip}{}}
- }{% (not \ifdefined\chapterformat)
- \ifcsdef{@memptsize}{%
- % With memoir
- \let\xpg@save@chaptermark@format\chaptermark%
- \renewcommand*\chaptermark[1]{%
- \markboth{\memUChead{%
- \ifnum \c@secnumdepth >\m@ne
- \ifbool{@mainmatter}{%
- \thechapter.\ \@chapapp\@hungarian@forced@dot\ %
- }{}%
- \fi
- ##1}}{}}%
- }{% (not \ifdefined\@memptsize)
+ \@ifundefined{chapterformat}{%
+ \@ifundefined{@memptsize}{%
% With standard classes
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermark}{}{%
\ifpatchable{\chaptermark}%
{\@chapapp\ \thechapter.}%
{\let\xpg@save@chaptermark@format\chaptermark%
@@ -17990,8 +17999,24 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
{}%
{\xpg@warning{Failed to patch chaptermark for Hungarian}}}%
{}%
- }{}% (end \ifdefined\chaptermark)
+ }% (end \ifdefined\chaptermark)
+ }{% (\ifdefined\@memptsize)
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark%
+ \renewcommand*\chaptermark[1]{%
+ \markboth{\memUChead{%
+ \ifnum \c@secnumdepth >\m@ne
+ \ifbool{@mainmatter}{%
+ \thechapter.\ \@chapapp\@hungarian@forced@dot\ %
+ }{}%
+ \fi
+ ##1}}{}}%
}% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\chapterformat)
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat%
+ \renewcommand*\chaptermarkformat{%
+ \thechapter\autodot\ \IfChapterUsesPrefixLine{\chapapp\@hungarian@forced@dot\enskip}{}}
}% (end \ifdefined\chapterformat)
\fi% (end \if@hungarian@swapheaders)
}
@@ -18003,58 +18028,58 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\fnum@figure\xpg@save@fnum@figure%
%
% Reset chapter and part heading
- \ifcsdef{titleformat}{%
+ \@ifundefined{titleformat}{%
+ \@ifundefined{sectionformat}{%
+ % With memoir and standard classes
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
+ \let\@part\xpg@save@part@format%
+ }{%
+ \let\NR@part\xpg@save@part@format%
+ }%
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\@makechapterhead\xpg@save@chap@format
+ }%
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@part@format}{}{%
+ \let\partformat\xpg@save@part@format
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\chapterformat\xpg@save@chap@format
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
% With titlesec
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format%
- }{%
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
\let\@part\xpg@save@part@format%
+ }{%
+ \let\NR@part\xpg@save@part@format%
}%
- }{}%
- \ifcsdef{chapter}{%
+ }%
+ \@ifundefined{chapter}{}{%
\titleformat\chapter[display]%
{\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
{\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
- }{}%
- }{% (not \ifdefined\titleformat)
- \ifcsdef{sectionformat}{%
- % With KOMA
- \ifcsdef{xpg@save@part@format}{%
- \let\partformat\xpg@save@part@format
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\chapterformat\xpg@save@chap@format
- }{}%
- }{%
- % With memoir and standard classes
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format%
- }{%
- \let\@part\xpg@save@part@format%
- }%
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\@makechapterhead\xpg@save@chap@format
- }{}%
- }% (end \ifdefined\sectionformat)
+ }%
}% (end \ifdefined\titleformat)
%
% Reset headers
- \ifcsdef{chaptermarkformat}{%
- % With KOMA
- \ifcsdef{xpg@save@chaptermark@format}{%
- \let\chaptermarkformat\xpg@save@chaptermark@format%
- }{}%
- }{%
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermarkformat}{%
+ \@ifundefined{chaptermark}{}{%
% With memoir and standard classes
- \ifcsdef{xpg@save@chaptermark@format}{%
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
\let\chaptermark\xpg@save@chaptermark@format%
- }{}%
- }{}% (end \ifdefined\chaptermark)
- }% (end \ifdefined\chapterformat)
+ }%
+ }% (end \ifdefined\chaptermark)
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
+ \let\chaptermarkformat\xpg@save@chaptermark@format%
+ }%
+ }% (end \ifdefined\chaptermarkformat)
}
% Hungarian needs 1) trailing dots in chapter headings; 2) trailing dot in section, subsection, etc, counters
\def\@hungarian@forced@dot{}
@@ -18121,13 +18146,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-hy.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-hy.ldf}[polyglossia: module for hy (Armenian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{armenian}
+\InheritGlossFile{armenian}
% \end{macrocode}
% \iffalse
@@ -18138,13 +18163,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ia.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ia.ldf}[polyglossia: module for ia (Interlingua)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{interlingua}
+\InheritGlossFile{interlingua}
% \end{macrocode}
% \iffalse
@@ -18155,7 +18180,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-icelandic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-icelandic.ldf}[polyglossia: module for Icelandic]
\PolyglossiaSetup{icelandic}{
@@ -18213,13 +18238,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-id.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-id.ldf}[polyglossia: module for id (Malay)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{malay}
+\InheritGlossFile{malay}
% \end{macrocode}
% \iffalse
@@ -18230,7 +18255,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-interlingua.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-interlingua.ldf}[polyglossia: module for Interlingua]
\PolyglossiaSetup{interlingua}{
@@ -18288,14 +18313,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-irish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-irish.ldf}[polyglossia: module for Irish]
% We only provide this gloss for babel compatibility. Since irish is
% a gaelic variety, we use 'gaelic' with variant 'irish' now.
-\xpg@load@master@language{gaelic}
+\InheritGlossFile{gaelic}
% \end{macrocode}
% \iffalse
@@ -18306,13 +18331,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-is.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-is.ldf}[polyglossia: module for is (Icelandic)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{icelandic}
+\InheritGlossFile{icelandic}
% \end{macrocode}
% \iffalse
@@ -18323,13 +18348,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-it.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-it.ldf}[polyglossia: module for it (Italian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{italian}
+\InheritGlossFile{italian}
% \end{macrocode}
% \iffalse
@@ -18341,7 +18366,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \subsection{gloss-italian.ldf}
% \begin{macrocode}
% !TEX encoding = UTF-8 Unicode
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-italian.ldf}[polyglossia: module for Italian]
\PolyglossiaSetup{italian}{
@@ -18360,24 +18385,22 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{italian}{it}
-
-%%% CHANGES START %%% by Enrico Gregorio
-\define@boolkey{italian}[italian@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/italian]
+ {
+ babelshorthands.if = italian@babelshorthands,
+ babelshorthands.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{italian}{babelshorthands=false}
+\InitializeGlossOptions{italian}{babelshorthands=false}
\ifsystem@babelshorthands
- \setkeys{italian}{babelshorthands=true}
+ \SetGlossOptions{italian}{babelshorthands=true}
\else
- \setkeys{italian}{babelshorthands=false}
+ \SetGlossOptions{italian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\italian@shorthands{%
\xpg@activate@shorthands%
@@ -18457,7 +18480,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%%% CHANGES START %%% by Enrico Gregorio
\let\xpgit@savedvalues\empty
-\AtEndPreamble{% the user or the class might define different values
+\AddToHook{begindocument/before}{% the user or the class might define different values
\edef\xpgit@savedvalues{%
\clubpenalty=\the\clubpenalty\space
\@clubpenalty=\the\@clubpenalty\space
@@ -18493,13 +18516,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ja.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ja.ldf}[polyglossia: module for ja (Japanese)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{japanese}
+\InheritGlossFile{japanese}
% \end{macrocode}
% \iffalse
@@ -18510,7 +18533,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-japanese.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-japanese.ldf}[polyglossia: module for Japanese]
@@ -18749,13 +18772,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ka.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ka.ldf}[polyglossia: module for ka (Georgian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{georgian}
+\InheritGlossFile{georgian}
% \end{macrocode}
% \iffalse
@@ -18767,7 +18790,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \subsection{gloss-kannada.ldf}
% \begin{macrocode}
%% gloss-kannada.ldf
-%% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+%% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%%
%% Copyright 2011 Aravinda VK <hallimanearavind AT gmail.com>,
%% Shankar Prasad <prasad.mvs AT gmail.com>,
@@ -18821,12 +18844,20 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\tmp@western{Western}
\newif\ifkannada@numerals
\kannada@numeralstrue
-
-\define@key{kannada}{numerals}[Kannada]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@western
- \kannada@numeralsfalse
- \fi}
+
+\DeclareKeys[polyglossia/gloss/kannada]
+ {
+ numerals.choice:,
+ numerals / kannada.code =
+ {%
+ \kannada@numeralstrue
+ },
+ numerals / western.code =
+ {%
+ \kannada@numeralsfalse
+ },
+ numerals.default:n = kannada
+ }
\def\captionskannada{%
@@ -18890,7 +18921,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-khmer.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-khmer.ldf}[polyglossia: module for Khmer]
\PolyglossiaSetup{khmer}{
@@ -18911,18 +18942,24 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@khmer@numerals
\def\tmp@khmer{khmer}
-\define@key{khmer}{numerals}[arabic]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@khmer%
- \@khmer@numeralstrue%
- \SetLanguageKeys{khmer}{bcp47-extension-u=nu-khmr}%
- \else%
- \@khmer@numeralsfalse%
- \SetLanguageKeys{khmer}{bcp47-extension-u=nu-latn}%
- \fi%
-}
-\setkeys{khmer}{numerals}
+\DeclareKeys[polyglossia/gloss/khmer]
+ {
+ numerals.choice:,
+ numerals / khmer.code =
+ {%
+ \@khmer@numeralstrue
+ \SetLanguageKeys{khmer}{bcp47-extension-u=nu-khmr}%
+ },
+ numerals / arabic.code =
+ {%
+ \@khmer@numeralsfalse
+ \SetLanguageKeys{khmer}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = arabic
+ }
+
+\SetGlossOptions{khmer}{numerals}
\def\captionskhmer{%
\def\prefacename{អារម្ភកថា}%
@@ -19073,13 +19110,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-km.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-km.ldf}[polyglossia: module for km (Khmer)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{khmer}
+\InheritGlossFile{khmer}
% \end{macrocode}
% \iffalse
@@ -19090,13 +19127,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kmr-Arab.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-kmr-Arab.ldf}[polyglossia: module for kmr-Arab (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19107,13 +19144,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kmr-Latn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-kmr-Latn.ldf}[polyglossia: module for kmr-Latn (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19124,13 +19161,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kmr.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-kmr.ldf}[polyglossia: module for kmr (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19141,13 +19178,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-kn.ldf}[polyglossia: module for kn (Kannada)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kannada}
+\InheritGlossFile{kannada}
% \end{macrocode}
% \iffalse
@@ -19158,13 +19195,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ko.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ko.ldf}[polyglossia: module for ko (Korean)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{korean}
+\InheritGlossFile{korean}
% \end{macrocode}
% \iffalse
@@ -19175,7 +19212,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-korean.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-korean.ldf}[polyglossia: module for Korean]
@@ -19195,40 +19232,48 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{korean}{ko}
-% variant : plain (0), classic (1), or modern (2)
-\define@choicekey{korean}{variant}[\xpg@val\xpg@nr]{plain,classic,modern}[plain]{%
- \let\xpg@korean@variant\xpg@nr
-}
-% captions : hangul (0) or hanja (1)
-\define@choicekey{korean}{captions}[\xpg@val\xpg@nr]{hangul,hanja}[hangul]{%
- \let\xpg@korean@captions\xpg@nr
-}
-% swapstrings: all (0), headings (1), headers (2), or none (3)
\newif\if@korean@swapheadings
\newif\if@korean@swapheaders
-\define@choicekey*+{korean}{swapstrings}[\xpg@val\xpg@nr]{all,headings,headers,none}[all]{%
- \ifcase\xpg@nr\relax
- % all:
- \@korean@swapheadingstrue%
- \@korean@swapheaderstrue%
- \or
- % headings:
- \@korean@swapheadingstrue%
- \@korean@swapheadersfalse%
- \or
- % headers:
- \@korean@swapheadingsfalse%
- \@korean@swapheaderstrue%
- \or
- % none:
- \@korean@swapheadingsfalse%
- \@korean@swapheadersfalse%
- \fi
- \xpg@info{Option: Korean, swapstrings=\xpg@val}%
-}{\xpg@warning{Unknown Korean swapstrings value `#1'}}
+
+\DeclareKeys[polyglossia/gloss/korean]
+ {
+ variant.choices:nn = { plain, classic, modern }
+ {%
+ \edef\xpg@korean@variant{\the\numexpr\UseName{l_keys_choice_int}-1\relax}
+ },
+ variant.default:n = plain,
+ captions.choices:nn = { hangul, hanja }
+ {%
+ \edef\xpg@korean@captions{\the\numexpr\UseName{l_keys_choice_int}-1\relax}
+ },
+ captions.default:n = hangul,
+ swapstrings.choice:,
+ swapstrings / all.code =
+ {%
+ \@korean@swapheadingstrue
+ \@korean@swapheaderstrue
+ },
+ swapstrings / headings.code =
+ {%
+ \@korean@swapheadingstrue
+ \@korean@swapheadersfalse
+ },
+ swapstrings / headers.code =
+ {%
+ \@korean@swapheadingsfalse
+ \@korean@swapheaderstrue
+ },
+ swapstrings / none.code =
+ {%
+ \@korean@swapheadingsfalse
+ \@korean@swapheadersfalse
+ },
+ swapstrings.default:n = all,
+ swapstrings/unknown.code = \xpg@warning{Unknown Korean swapstrings value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{korean}{variant=plain,swapstrings=all,captions=hangul}
+\InitializeGlossOptions{korean}{variant=plain,swapstrings=all,captions=hangul}
\def\captionskorean{%
\ifcase\xpg@korean@captions\relax
@@ -19290,60 +19335,48 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% change chapter and part headings
\if@korean@swapheadings
% With titlesec
- \ifcsdef{titleformat}{%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part
- \patchcmd{\NR@part}%
- {\partname\nobreakspace\thepart}%
- {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
- {}%
- {\xpg@warning{Failed to patch part for Korean}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part
- \patchcmd{\@part}%
+ \@ifundefined{titleformat}{%
+ % With KOMA
+ \@ifundefined{sectionformat}{%
+ % With memoir
+ \@ifundefined{@memptsize}{%
+ % With standard classes
+ \@ifundefined{@makechapterhead}{}{%
+ \let\xpg@save@chap@format\@makechapterhead
+ \patchcmd{\@makechapterhead}%
+ {\@chapapp\space \thechapter}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\space \thechapter
+ \else
+ \koreanTHEname\space \thechapter\space \@chapapp
+ \fi
+ }%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Korean}}%
+ }%
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \ifpatchable{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\let\xpg@save@part@format\@part
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {}%
+ {\@ifundefined{part}{}{\xpg@warning{Failed to patch part for Korean}}}}%
+ {}%
+ }% (end \ifdefined\@part)
+ }{% Hyperref (nameref)
+ \let\xpg@save@part@format\NR@part
+ \patchcmd{\NR@part}%
{\partname\nobreakspace\thepart}%
{\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
{}%
{\xpg@warning{Failed to patch part for Korean}}%
- }{}%
- }
- \ifcsdef{chapter}{%
- \titleformat\chapter[display]%
- {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}%
- {%
- \ifx\@chapapp\korean@appendix@chapapp
- \appendixname\space \thechapter
- \else
- \koreanTHEname\space \thechapter\space \@chapapp
- \fi
- }{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}%
- }{}%
- }{% (not \ifdefined\titleformat)
- % With KOMA
- \ifcsdef{sectionformat}{%
- \ifcsdef{partformat}{%
- \let\xpg@save@part@format\partformat
- \renewcommand*{\partformat}{\koreanTHEname~\thepart~\partname}%
- }{}%
- \ifcsdef{chapterformat}{%
- \let\xpg@save@chap@format\chapterformat
- \renewcommand*{\chapterformat}{\mbox{%
- \IfChapterUsesPrefixLine
- {%
- \ifx\@chapapp\korean@appendix@chapapp
- \chapapp\nobreakspace \thechapter\autodot
- \else
- \koreanTHEname\nobreakspace \thechapter\nobreakspace \chapapp\autodot
- \fi
- }%
- {\thechapter\autodot\enskip}%
- }}%
- }{}%
- }{% (not \ifdefined\sectionformat)
- % With memoir
- \ifcsdef{@memptsize}{%
- \ifcsdef{@makechapterhead}{%
+ }% (end not hyperref)
+ }{% (\ifdefined\@memptsize)
+ \@ifundefined{@makechapterhead}{}{%
\let\xpg@save@chap@format\@makechapterhead
\patchcmd{\@makechapterhead}%
{\printchaptername \chapternamenum \printchapternum}%
@@ -19361,19 +19394,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\ifpatchable\printchaptername\@chapapp
{\chapnamefont\koreanTHEname\chapternamenum}{}}%
\fi
- }{}%
- \ifcsdef{NR@part}{% Hyperref (nameref)
- \let\xpg@save@part@format\NR@part
- \patchcmd{\NR@part}%
- {\printpartname \partnamenum \printpartnum}%
- {\printkoreanpartthe \printpartnum\partnamenum \printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for Korean}}%
- \ifdefined\printkoreanpartthe\else
- \def\printkoreanpartthe{\partnamefont\koreanTHEname\partnamenum}%
- \fi
- }{% not hyperref
- \ifcsdef{@part}{%
+ }%
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
\let\xpg@save@part@format\@part
\patchcmd{\@part}%
{\printpartname \partnamenum \printpartnum}%
@@ -19383,84 +19406,77 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\ifdefined\printkoreanpartthe\else
\def\printkoreanpartthe{\partnamefont\koreanTHEname\partnamenum}%
\fi
- }{}%
- }%
- }{% (not \ifdefined\@memptsize)
- % With standard classes
- \ifcsdef{@makechapterhead}{%
- \let\xpg@save@chap@format\@makechapterhead
- \patchcmd{\@makechapterhead}%
- {\@chapapp\space \thechapter}%
- {%
- \ifx\@chapapp\korean@appendix@chapapp
- \appendixname\space \thechapter
- \else
- \koreanTHEname\space \thechapter\space \@chapapp
- \fi
- }%
- {}%
- {\xpg@warning{Failed to patch chapter for Korean}}%
- }{}%
- \ifcsdef{NR@part}{% Hyperref (nameref)
+ }%
+ }{% Hyperref (nameref)
\let\xpg@save@part@format\NR@part
\patchcmd{\NR@part}%
- {\partname\nobreakspace\thepart}%
- {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {\printpartname \partnamenum \printpartnum}%
+ {\printkoreanpartthe \printpartnum\partnamenum \printpartname}%
{}%
{\xpg@warning{Failed to patch part for Korean}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \ifpatchable{\@part}%
- {\partname\nobreakspace\thepart}%
- {\let\xpg@save@part@format\@part
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
- {}%
- {\ifcsdef{part}{\xpg@warning{Failed to patch part for Korean}}{}}}%
- {}%
- }{}% (end \ifdefined\@part)
- }% (end not hyperref)
+ \ifdefined\printkoreanpartthe\else
+ \def\printkoreanpartthe{\partnamefont\koreanTHEname\partnamenum}%
+ \fi
+ }%
}% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\sectionformat)
+ \@ifundefined{partformat}{}{%
+ \let\xpg@save@part@format\partformat
+ \renewcommand*{\partformat}{\koreanTHEname~\thepart~\partname}%
+ }%
+ \@ifundefined{chapterformat}{}{%
+ \let\xpg@save@chap@format\chapterformat
+ \renewcommand*{\chapterformat}{\mbox{%
+ \IfChapterUsesPrefixLine
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \chapapp\nobreakspace \thechapter\autodot
+ \else
+ \koreanTHEname\nobreakspace \thechapter\nobreakspace \chapapp\autodot
+ \fi
+ }%
+ {\thechapter\autodot\enskip}%
+ }}%
+ }%
}% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
+ \@ifundefined{NR@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Korean}}%
+ }%
+ }{% Hyperref (nameref)
+ \let\xpg@save@part@format\NR@part
+ \patchcmd{\NR@part}%
+ {\partname\nobreakspace\thepart}%
+ {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Korean}}%
+ }%
+ \@ifundefined{chapter}{}{%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\space \thechapter
+ \else
+ \koreanTHEname\space \thechapter\space \@chapapp
+ \fi
+ }{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}%
+ }%
}% (end \ifdefined\titleformat)
\fi % (end \if@korean@swapheadings)
%
% Change running headers
\if@korean@swapheaders
- \ifcsdef{chapterformat}{%
- % With KOMA
- \let\xpg@save@chaptermark@format\chaptermarkformat
- \renewcommand*\chaptermarkformat{%
- \IfChapterUsesPrefixLine
- {%
- \ifx\@chapapp\korean@appendix@chapapp
- \chapapp\ \thechapter\autodot
- \else
- \koreanTHEname\ \thechapter\ \chapapp\autodot
- \fi
- }%
- {\thechapter\autodot}%
- \enskip
- }%
- }{% (not \ifdefined\chapterformat)
- \ifcsdef{@memptsize}{%
- % With memoir
- \let\xpg@save@chaptermark@format\chaptermark
- \patchcmd{\chaptermark}%
- {\@chapapp\ \@nameuse{thechapter}}%
- {%
- \ifx\@chapapp\korean@appendix@chapapp
- \appendixname\ \@nameuse{thechapter}%
- \else
- \koreanTHEname\ \@nameuse{thechapter}\ \@chapapp
- \fi
- }%
- {}%
- {\xpg@warning{Failed to patch chaptermark for Korean}}%
- }{% (not \ifdefined\@memptsize)
+ \@ifundefined{chapterformat}{%
+ \@ifundefined{@memptsize}{%
% With standard classes
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermark}{}{%
\ifpatchable{\chaptermark}%
{\@chapapp\ \thechapter}%
{\let\xpg@save@chaptermark@format\chaptermark
@@ -19476,65 +19492,94 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
{}%
{\xpg@warning{Failed to patch chaptermark for Korean}}}%
{}%
- }{}% (end \ifdefined\chaptermark)
+ }% (end \ifdefined\chaptermark)
+ }{% (\ifdefined\@memptsize)
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark
+ \patchcmd{\chaptermark}%
+ {\@chapapp\ \@nameuse{thechapter}}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\ \@nameuse{thechapter}%
+ \else
+ \koreanTHEname\ \@nameuse{thechapter}\ \@chapapp
+ \fi
+ }%
+ {}%
+ {\xpg@warning{Failed to patch chaptermark for Korean}}%
}% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\chapterformat)
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat
+ \renewcommand*\chaptermarkformat{%
+ \IfChapterUsesPrefixLine
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \chapapp\ \thechapter\autodot
+ \else
+ \koreanTHEname\ \thechapter\ \chapapp\autodot
+ \fi
+ }%
+ {\thechapter\autodot}%
+ \enskip
+ }%
}% (end \ifdefined\chapterformat)
\fi % (end \if@korean@swapheaders)
}
\def\nokorean@headingsformat{%
% Reset chapter and part heading
- \ifcsdef{titleformat}{%
+ \@ifundefined{titleformat}{%
+ \@ifundefined{sectionformat}{%
+ % With memoir and standard classes
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
+ \let\@part\xpg@save@part@format
+ }{%
+ \let\NR@part\xpg@save@part@format
+ }%
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\@makechapterhead\xpg@save@chap@format
+ }%
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@part@format}{}{%
+ \let\partformat\xpg@save@part@format
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\chapterformat\xpg@save@chap@format
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
% With titlesec
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format
- }{%
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{NR@part}{%
\let\@part\xpg@save@part@format
+ }{%
+ \let\NR@part\xpg@save@part@format
}%
- }{}%
- \ifcsdef{chapter}{%
+ }%
+ \@ifundefined{chapter}{}{%
\titleformat\chapter[display]%
{\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}%
{\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}%
- }{}%
- }{% (not \ifdefined\titleformat)
- \ifcsdef{sectionformat}{%
- % With KOMA
- \ifcsdef{xpg@save@part@format}{%
- \let\partformat\xpg@save@part@format
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\chapterformat\xpg@save@chap@format
- }{}%
- }{%
- % With memoir and standard classes
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{NR@part}{%
- \let\NR@part\xpg@save@part@format
- }{%
- \let\@part\xpg@save@part@format
- }%
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\@makechapterhead\xpg@save@chap@format
- }{}%
- }% (end \ifdefined\sectionformat)
+ }%
}% (end \ifdefined\titleformat)
%
% Reset headers
- \ifcsdef{chaptermarkformat}{%
- % With KOMA
- \ifcsdef{xpg@save@chaptermark@format}{%
- \let\chaptermarkformat\xpg@save@chaptermark@format
- }{}%
- }{%
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermarkformat}{%
+ \@ifundefined{chaptermark}{}{%
% With memoir and standard classes
- \ifcsdef{xpg@save@chaptermark@format}{%
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
\let\chaptermark\xpg@save@chaptermark@format
- }{}%
- }{}% (end \ifdefined\chaptermark)
+ }%
+ }% (end \ifdefined\chaptermark)
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
+ \let\chaptermarkformat\xpg@save@chaptermark@format
+ }%
}% (end \ifdefined\chapterformat)
}
@@ -19598,13 +19643,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\XeTeXinterchartokenstate\z@
\XeTeXlinebreakpenalty\z@
\XeTeXlinebreakskip\z@skip
- \XeTeXlinebreaklocale "en"
+ \XeTeXlinebreaklocale ""
\noextras@korean@common
}
\else % luatex
- \def\inlineextras@korean{\xpg@attr@korean\xpg@korean@variant\relax}
+ \def\inlineextras@korean{\xpg@attr@cjkspacing\xpg@korean@variant\relax}
\def\noextras@korean{%
- \unsetattribute\xpg@attr@korean
+ \unsetattribute\xpg@attr@cjkspacing
\noextras@korean@common
}
\fi
@@ -19624,7 +19669,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\newattribute\newluatexattribute
\let\unsetattribute\unsetluatexattribute
\fi
-\newattribute\xpg@attr@korean
+\newattribute\xpg@attr@cjkspacing
\newattribute\xpg@attr@autojosa
% user commands for Josa
% Josa : particles in Korean grammar that immediately follow a noun or pronoun.
@@ -19645,7 +19690,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\protected\def\로{\으 로}
\def\xpg@reset@josa {\global\let\xpg@josa@zwang\z@}\xpg@reset@josa
% load lua file for korean
-\directlua{ require "polyglossia-korean" }
+\directlua{ require "polyglossia-cjk-spacing" }
% \end{macrocode}
% \iffalse
%</gloss-korean.ldf>
@@ -19655,13 +19700,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ku-Arab.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ku-Arab.ldf}[polyglossia: module for ku-Arab (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19672,13 +19717,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ku-Latn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ku-Latn.ldf}[polyglossia: module for ku-Latn (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19689,13 +19734,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ku.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ku.ldf}[polyglossia: module for ku (Kurdish)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -19706,7 +19751,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kurdish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Created on September 1, 2019
% Last updated on May 17, 2020
@@ -19749,36 +19794,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@kurdish@kurmanji
\def\kurdish@variant{sorani}
-\define@choicekey*+{kurdish}{variant}[\xpg@val\xpg@nr]{sorani,kurmanji}[sorani]{%
- \ifcase\xpg@nr\relax
- % sorani:
- \def\kurdish@variant{sorani}%
- \@kurdish@kurmanjifalse%
- \or
- % kurmanji:
- \def\kurdish@variant{kurmanji}%
- \@kurdish@kurmanjitrue%
- \fi
- \kurdish@set@variety%
- \xpg@info{Option: kurdish, variant=\xpg@val}%
-}{\xpg@warning{Unknown Kurdish variant `#1'}}
\newif\if@kurdish@latin
\newif\if@kurdish@arabic
-\define@choicekey*+{kurdish}{script}[\xpg@val\xpg@nr]{arabic,latin}{%
- \ifcase\xpg@nr\relax
- % arabic:
- \@kurdish@latinfalse%
- \@kurdish@arabictrue%
- \or
- % latin:
- \@kurdish@latintrue%
- \@kurdish@arabicfalse%
- \fi
- \kurdish@set@variety%
- \xpg@info{Option: kurdish, script=\xpg@val}%
-}{\xpg@warning{Unknown Kurdish script `#1'}}
-
\newif\if@western@numerals
\newif\if@force@western@numerals
@@ -19795,7 +19813,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurdish,bcp47=ckb-Arab,bcp47-language=ckb,bcp47-script=Arab,bcp47-casing=ckb-Arab}%
\fi
\def\kurdish@script{latin}
- \xpg@fontsetup@latin{kurdish}%
+ \SetupLatinPolyglossiaFont{kurdish}%
\else
\if@kurdish@arabic% arabic explicitly set
\if@kurdish@kurmanji
@@ -19805,61 +19823,84 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\else
\SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish,bcp47=ckb-Arab,bcp47-language=ckb,bcp47-script=Arab,bcp47-casing=ckb-Arab}%
\fi
- \xpg@fontsetup@nonlatin{kurdish}%
+ \SetupNonLatinPolyglossiaFont{kurdish}%
\else% sorani=arabic, kurmanji=latin
\if@kurdish@kurmanji
\@western@numeralstrue%
\SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurmanji,bcp47=kmr-Latn,bcp47-language=kmr,bcp47-script=Latn,bcp47-casing=kmr-Latn}%
- \xpg@fontsetup@latin{kurdish}%
+ \SetupLatinPolyglossiaFont{kurdish}%
\def\kurdish@script{latin}
\else
\SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish,bcp47=ckb-Arab,bcp47-language=ckb,bcp47-script=Arab,bcp47-casing=ckb-Arab}%
- \xpg@fontsetup@nonlatin{kurdish}%
+ \SetupNonLatinPolyglossiaFont{kurdish}%
\fi
\fi
\fi
}
\newif\if@western@numerals
-\define@choicekey*+{kurdish}{numerals}[\xpg@val\xpg@nr]{eastern,western}[eastern]{%
- \ifcase\xpg@nr\relax
- % eastern:
- \@western@numeralsfalse%
- \or
- % western:
- \@western@numeralstrue%
- \@force@western@numeralstrue%
- \fi
- \xpg@info{Option: Kurdish, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Kurdish numerals option `#1'}}
\newif\ifkurdish@customsep\kurdish@customsepfalse
\def\xpg@sepmark{}
-\define@key{kurdish}{sectionsep}[.]{%
- \kurdish@customseptrue%
- \gdef\xpg@sepmark{#1}%
-}
-
-%this is needed for \abjad in arabicnumbers.sty
-\define@boolkey{kurdish}[kurdish@]{abjadjimnotail}[true]{%
- \ifkurdish@abjadjimnotail
- \abjad@jim@notailtrue%
- \else
- \abjad@jim@notailfalse
- \fi%
-}
-
-% NOT YET USED
-\define@key{kurdish}{locale}[default]{%
- \def\@kurdish@locale{#1}}
%TODO add option for CALENDAR
+\DeclareKeys[polyglossia/gloss/kurdish]
+ {
+ variant.choice:,
+ variant / sorani.code =
+ {%
+ \def\kurdish@variant{sorani}%
+ \@kurdish@kurmanjifalse
+ \kurdish@set@variety
+ },
+ variant / kurmanji.code =
+ {%
+ \def\kurdish@variant{kurmanji}%
+ \@kurdish@kurmanjitrue
+ \kurdish@set@variety
+ },
+ variant.default:n = sorani,
+ variant/unknown.code = \xpg@warning{Unknown Kurdish variant `#1'},
+ script.choice:,
+ script / arabic.code =
+ {%
+ \@kurdish@latinfalse
+ \@kurdish@arabictrue
+ \kurdish@set@variety
+ },
+ script / latin.code =
+ {%
+ \@kurdish@latintrue
+ \@kurdish@arabicfalse
+ \kurdish@set@variety
+ },
+ script.default:n = sorani,
+ script/unknown.code = \xpg@warning{Unknown Kurdish script `#1'},
+ numerals.choice:,
+ numerals / eastern.code =
+ {%
+ \@western@numeralsfalse
+ },
+ numerals / western.code =
+ {%
+ \@western@numeralstrue
+ \@force@western@numeralstrue
+ },
+ numerals.default:n = eastern,
+ numerals/unknown.code = \xpg@warning{Unknown Kurdish numerals value `#1'},
+ sectionsep.code = \gdef\xpg@sepmark{#1}\kurdish@customseptrue,
+ sectionsep.default:n = .,
+ abjadjimnotail.if = abjad@jim@notail,
+ abjadjimnotail.default:n = true,
+ locale.store = \@kurdish@locale
+ }
+
% Register default options
-\xpg@initialize@gloss@options{kurdish}{variant=sorani,locale=default,script=arabic,abjadjimnotail=false,numerals=eastern}
+\InitializeGlossOptions{kurdish}{variant=sorani,locale=default,script=arabic,abjadjimnotail=false,numerals=eastern}
\def\kurdish@language{%
- \polyglossia@setup@language@patterns{\kurdish@pattern}%
+ \SetupPolyglossiaLangPatterns{\kurdish@pattern}%
}%
\def\kurdishNativemonth#1{\ifcase#1%
@@ -20112,16 +20153,16 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nokurdish@xetex@capsformat{%
- \ifcsdef{xpg@save@sepmark}{%
+ \ifcsname xpg@save@sepmark\endcsname%
\SepMark{\xpg@save@sepmark}
- }{}%
+ \fi%
}
\def\kurdish@luatex@capsformat{%
%
% change chapter and part headings
\ifkurdish@customsep
- \ifcsdef{chapter}{%
+ \ifcsname chapter\endcsname%
\let\xpg@save@thesection\thesection%
\renewcommand*\thesection{\thechapter\xpg@sepmark\@arabic\c@section}
\let\xpg@save@theequation\theequation%
@@ -20133,7 +20174,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\xpg@save@thetable\thetable%
\renewcommand*\thetable{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@table}
- }{}
+ \fi%
\let\xpg@save@thesubsection\thesubsection%
\renewcommand\thesubsection
{\thesection\xpg@sepmark\@arabic\c@subsection}
@@ -20148,30 +20189,30 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nokurdish@luatex@capsformat{%
- \ifcsdef{xpg@save@thesection}{%
+ \ifcsname xpg@save@thesection\endcsname%
\let\thesection\xpg@save@thesection%
- }{}%
- \ifcsdef{xpg@save@theequation}{%
+ \fi%
+ \ifcsname xpg@save@theequation\endcsname%
\let\theequation\xpg@save@theequation%
- }{}%
- \ifcsdef{xpg@save@thefigure}{%
+ \fi%
+ \ifcsname xpg@save@thefigure\endcsname%
\let\thefigure\xpg@save@thefigure%
- }{}%
- \ifcsdef{xpg@save@thetable}{%
+ \fi%
+ \ifcsname xpg@save@thetable\endcsname%
\let\thetable\xpg@save@thetable%
- }{}%
- \ifcsdef{xpg@save@thesubsection}{%
+ \fi%
+ \ifcsname xpg@save@thesubsection\endcsname%
\let\thesubsection\xpg@save@thesubsection%
- \ifcsdef{xpg@save@thesubsubsection}{%
+ \ifcsname xpg@save@thesubsubsection\endcsname%
\let\thesubsubsection\xpg@save@thesubsubsection%
- }{}%
- }{}%
- \ifcsdef{xpg@save@theparagraph}{%
+ \fi%
+ \fi%
+ \ifcsname xpg@save@theparagraph\endcsname%
\let\theparagraph\xpg@save@theparagraph%
- }{}%
- \ifcsdef{xpg@save@thesubparagraph}{%
+ \fi%
+ \ifcsname xpg@save@thesubparagraph\endcsname%
\let\thesubparagraph\xpg@save@thesubparagraph%
- }{}%
+ \fi%
}
\def\blockextras@kurdish{%
@@ -20203,13 +20244,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-kurmanji.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-kurmanji.ldf}[polyglossia: module for Kurmanji Kurdish]
% We provide this gloss for babel compatibility.
-\xpg@load@master@language{kurdish}
+\InheritGlossFile{kurdish}
% \end{macrocode}
% \iffalse
@@ -20220,13 +20261,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-la-x-classic.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-la-xclassic.ldf}[polyglossia: module for la-xclassic (Latin)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{latin}
+\InheritGlossFile{latin}
% \end{macrocode}
% \iffalse
@@ -20237,13 +20278,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-la-x-ecclesia.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-la-xecclesiastic.ldf}[polyglossia: module for la-xecclesiastic (Latin)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{latin}
+\InheritGlossFile{latin}
% \end{macrocode}
% \iffalse
@@ -20254,13 +20295,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-la-x-medieval.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-la-xmedieval.ldf}[polyglossia: module for la-xmedieval (Latin)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{latin}
+\InheritGlossFile{latin}
% \end{macrocode}
% \iffalse
@@ -20271,13 +20312,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-la.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-la.ldf}[polyglossia: module for la (Latin)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{latin}
+\InheritGlossFile{latin}
% \end{macrocode}
% \iffalse
@@ -20288,7 +20329,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lao.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lao.ldf}[polyglossia: module for Lao]
@@ -20312,14 +20353,23 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@lao@numerals
\def\tmp@lao{lao}
-\define@key{lao}{numerals}[arabic]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@lao\@lao@numeralstrue\else
- \@lao@numeralsfalse\fi
-}
+
+\DeclareKeys[polyglossia/gloss/lao]
+ {
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \@lao@numeralsfalse
+ },
+ numerals / lao.code =
+ {%
+ \@lao@numeralstrue
+ },
+ numerals.default:n = arabic
+ }
% Register default options
-\xpg@initialize@gloss@options{lao}{numerals=arabic}
+\InitializeGlossOptions{lao}{numerals=arabic}
% Translations provided by Brian Wilson <bountonw at gmail.com>
\def\captionslao{%
@@ -20399,7 +20449,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-latex.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-latex.ldf}[polyglossia: module for default language]
@@ -20449,7 +20499,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-latin.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-latin.ldf}[polyglossia: module for Latin]
@@ -20484,6 +20534,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\bool_new:N \l_polyglossia_latin_use_v_bool
\bool_new:N \l_polyglossia_latin_use_ligatures_bool
\bool_new:N \l_polyglossia_latin_capitalize_month_bool
+\bool_new:N \l_polyglossia_latin_babelshorthands_bool
+\bool_new:N \l_polyglossia_latin_prosodic_shorthands_bool
+\bool_new:N \l_polyglossia_latin_ecclesiastic_footnotes_bool
\cs_new:Npn \polyglossia_latin_classical_character_codes:
{
@@ -20519,11 +20572,11 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\cs_new:Npn \polyglossia_latin_use_modern_patterns:
{
- \xpg@ifdefined {latin}
+ \IfLanguageDefinedTF {latin}
{
\def \latin@language
{
- \polyglossia@setup@language@patterns {latin}
+ \SetupPolyglossiaLangPatterns {latin}
\str_case:Vn \l_polyglossia_latin_variant_str
{
{classic} { \adddialect \l@classiclatin \l@latin }
@@ -20547,11 +20600,11 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\cs_new:Npn \polyglossia_latin_set_patterns:n #1
% #1 may be "classiclatin" or "liturgicallatin"
{
- \xpg@ifdefined {#1}
+ \IfLanguageDefinedTF {#1}
{
\def \latin@language
{
- \polyglossia@setup@language@patterns {#1}
+ \SetupPolyglossiaLangPatterns {#1}
\str_case:Vn \l_polyglossia_latin_variant_str
{
{classic} {
@@ -20767,7 +20820,8 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Save original footnote definition
% Do this at the end of the preamble to catch other
% packages' footnote changes (#391)
-\AtEndPreamble{%
+\hook_gput_code:nnn { begindocument / before } {.}
+{
\cs_if_exist:NT \@makefntext
{
\cs_set_eq:NN \polyglossia_latin_original_footnote:n \@makefntext
@@ -20791,40 +20845,27 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\cs_new:Npn \polyglossia_latin_apply_footnote_option:
{
- \str_if_eq:VnTF \xpg@main@language {latin}
+ \IfMainLanguageTF {latin}
{
\cs_if_exist:NT \@makefntext
{
- \iflatin@ecclesiasticfootnotes
+ \bool_if:NTF \l_polyglossia_latin_ecclesiastic_footnotes_bool
+ {
\let \@makefntext \polyglossia_latin_variant_footnote:n
- \else
+ }
+ {
\let \@makefntext \polyglossia_latin_original_footnote:n
- \fi
+ }
}
}
{
- \iflatin@ecclesiasticfootnotes
- \msg_warning:nn {polyglossia} {latin / ineffective footnote option}
- \fi
- }
- }
-
-\define@boolkey {latin} [latin@] {ecclesiasticfootnotes} [true]
- {
- \token_if_eq_meaning:NNTF \@onlypreamble \@notprerr
- {
- % within the document
- \polyglossia_latin_apply_footnote_option:
- }
- {
- % within the preamble
- % The application of the option has to be postponed as the main
- % language may be undefined when the option is called.
- \AtBeginDocument { \polyglossia_latin_apply_footnote_option: }
+ \bool_if:NT \l_polyglossia_latin_ecclesiastic_footnotes_bool
+ {
+ \msg_warning:nn {polyglossia} {latin / ineffective footnote option}
+ }
}
}
-
%%%%% Language variants: classic, medieval, modern, and ecclesiastic
\str_new:N \l_polyglossia_latin_variant_str
@@ -20887,58 +20928,6 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\polyglossia_latin_use_modern_patterns:
}
-\define@key{latin}{variant}
- {
- \str_case:nnF {#1}
- {
- {classic}
- {
- \msg_info:nnn {polyglossia} {latin / language variant} {classic}
- \polyglossia_latin_classic_settings:
- }
- {medieval}
- {
- \msg_info:nnn {polyglossia} {latin / language variant} {medieval}
- \polyglossia_latin_medieval_settings:
- }
- {modern}
- {
- \msg_info:nnn {polyglossia} {latin / language variant} {modern}
- \polyglossia_latin_modern_settings:
- }
- {ecclesiastic}
- {
- \msg_info:nnn {polyglossia} {latin / language variant} {ecclesiastic}
- \polyglossia_latin_ecclesiastic_settings:
- }
- }
- {
- \msg_warning:nnn {polyglossia} {latin / illegal language variant} {#1}
- }
- }
-
-
-%%%%% Boolean options concerning spelling
-
-\define@boolkey{latin}[latin@]{usej}[true]
- {
- \iflatin@usej
- \bool_set_true:N \l_polyglossia_latin_use_j_bool
- \else
- \bool_set_false:N \l_polyglossia_latin_use_j_bool
- \fi
- }
-
-\define@boolkey{latin}[latin@]{capitalizemonth}[true]
- {
- \iflatin@capitalizemonth
- \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
- \else
- \bool_set_false:N \l_polyglossia_latin_capitalize_month_bool
- \fi
- }
-
-
%%%%% Hyphenation variants: classic, liturgical, and modern
\msg_new:nnn {polyglossia} {latin / hyphenation variant}
@@ -20951,23 +20940,6 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
The~Latin~hyphenation~variant~"#1"~is~undefined~\msg_line_context:.
}
-\define@key {latin} {hyphenation}
- {
- \str_case:nnTF {#1}
- {
- {classic} { \polyglossia_latin_set_patterns:n {classiclatin} }
- {liturgical} { \polyglossia_latin_set_patterns:n {liturgicallatin} }
- {modern} { \polyglossia_latin_use_modern_patterns: }
- }
- {
- \msg_info:nnn {polyglossia} {latin / hyphenation variant} {#1}
- }
- {
- \msg_warning:nnn {polyglossia} {latin / illegal hyphenation variant} {#1}
- }
- }
-
-
%%%%% Latin captions and date
\def \captionslatin
@@ -21039,30 +21011,89 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
}
-
-%%%%% Latin shorthands
-
-\define@boolkey{latin}[latin@]{babelshorthands}[true]
- {
- }
-
-\define@boolkey{latin}[latin@]{prosodicshorthands}[true]
+\DeclareKeys[polyglossia/gloss/latin]
{
+ babelshorthands.bool_set:N = \l_polyglossia_latin_babelshorthands_bool,
+ babelshorthands.default:n = true,
+ prosodicshorthands.bool_set:N = \l_polyglossia_latin_prosodic_shorthands_bool,
+ prosodicshorthands.default:n = true,
+ usej.bool_set:N = \l_polyglossia_latin_use_j_bool,
+ capitalizemonth.bool_set:N = \l_polyglossia_latin_capitalize_month_bool,
+ hyphenation.code =
+ \str_case:nnTF {#1}
+ {
+ {classic} { \polyglossia_latin_set_patterns:n {classiclatin} }
+ {liturgical} { \polyglossia_latin_set_patterns:n {liturgicallatin} }
+ {modern} { \polyglossia_latin_use_modern_patterns: }
+ }
+ {
+ \msg_info:nnn {polyglossia} {latin / hyphenation variant} {#1}
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal hyphenation variant} {#1}
+ },
+ variant.code =
+ \str_case:nnF {#1}
+ {
+ {classic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {classic}
+ \polyglossia_latin_classic_settings:
+ }
+ {medieval}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {medieval}
+ \polyglossia_latin_medieval_settings:
+ }
+ {modern}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {modern}
+ \polyglossia_latin_modern_settings:
+ }
+ {ecclesiastic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {ecclesiastic}
+ \polyglossia_latin_ecclesiastic_settings:
+ }
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal language variant} {#1}
+ },
+ ecclesiasticfootnotes.choices:nn = { true, false }
+ {
+ \ifcase\UseName{l_keys_choice_int}\or
+ \bool_set_true:N \l_polyglossia_latin_ecclesiastic_footnotes_bool
+ \else
+ \bool_set_false:N \l_polyglossia_latin_ecclesiastic_footnotes_bool
+ \fi
+ \xpg_if_in_preamble:TF
+ {
+ % within the preamble
+ % The application of the option has to be postponed as the main
+ % language may be undefined when the option is called.
+ \AtBeginDocument { \polyglossia_latin_apply_footnote_option: }
+ }
+ {
+ % within the document
+ \polyglossia_latin_apply_footnote_option:
+ }
+ },
+ ecclesiasticfootnotes.default:n = true
}
% Register default options
-\xpg@initialize@gloss@options{latin}{variant=modern,hyphenation=modern,babelshorthands=false,
+\InitializeGlossOptions{latin}{variant=modern,hyphenation=modern,babelshorthands=false,
prosodicshorthands=false,ecclesiasticfootnotes=false,
usej=false,capitalizemonth=true}
\ifsystem@babelshorthands
- \setkeys{latin}{babelshorthands=true}
+ \SetGlossOptions{latin}{babelshorthands=true}
\else
- \setkeys{latin}{babelshorthands=false}
+ \SetGlossOptions{latin}{babelshorthands=false}
\fi
\ExplSyntaxOff % babelsh.def does not support expl3 syntax
-\ifcsundef{initiate@active@char}{\input{babelsh.def}}{}
+\@ifundefined{initiate@active@char}{\input{babelsh.def}}{}
\ExplSyntaxOn
\initiate@active@char {"}
@@ -21094,13 +21125,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\AtBeginDocument
{
- \str_if_eq:VnTF \xpg@main@language {latin}
+ \IfMainLanguageTF {latin}
{
- \iflatin@prosodicshorthands
- \else
+ \bool_if:NF \l_polyglossia_latin_prosodic_shorthands_bool
+ {
\shorthandoff {=}
\shorthandoff* {^}
- \fi
+ }
}
{
% The following command should not be called if the main language
@@ -21462,7 +21493,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let \xpgla@savedvalues \empty
-\AtEndPreamble
+\hook_gput_code:nnn { begindocument / before } {.}
{
\edef \xpgla@savedvalues
{
@@ -21475,12 +21506,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def \noextras@latin
{
- \iflatin@babelshorthands
+ \bool_if:NT \l_polyglossia_latin_babelshorthands_bool
+ {
\polyglossia_latin_no_shorthands:
- \fi
- \iflatin@prosodicshorthands
+ }
+ \bool_if:NT \l_polyglossia_latin_prosodic_shorthands_bool
+ {
\polyglossia_latin_no_prosodic_shorthands:
- \fi
+ }
\xpgla@savedvalues
\polyglossia_latin_no_punctuation_spacing:
\polyglossia_latin_modern_character_codes:
@@ -21496,16 +21529,20 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
{
\polyglossia_latin_punctuation_spacing:
}
- \iflatin@babelshorthands
+ \bool_if:NTF \l_polyglossia_latin_babelshorthands_bool
+ {
\polyglossia_latin_shorthands:
- \else
+ }
+ {
\polyglossia_latin_no_shorthands:
- \fi
- \iflatin@prosodicshorthands
+ }
+ \bool_if:NTF \l_polyglossia_latin_prosodic_shorthands_bool
+ {
\polyglossia_latin_prosodic_shorthands:
- \else
+ }
+ {
\polyglossia_latin_no_prosodic_shorthands:
- \fi
+ }
}
\def \blockextras@latin
@@ -21558,64 +21595,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \end{macrocode}
% \iffalse
%</gloss-latin.ldf>
-%<*gloss-latinclassic.ldf>
-% \fi
-% \clearpage
-%
-% \subsection{gloss-latinclassic.ldf}
-% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
-%
-\ProvidesFile{gloss-latinclassic.ldf}[polyglossia: module for classic Latin]
-
-% We provide this as a babel alias
-
-\xpg@load@master@language{latin}
-
-% \end{macrocode}
-% \iffalse
-%</gloss-latinclassic.ldf>
-%<*gloss-latinecclesiastic.ldf>
-% \fi
-% \clearpage
-%
-% \subsection{gloss-latinecclesiastic.ldf}
-% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
-%
-\ProvidesFile{gloss-latinecclesiastic.ldf}[polyglossia: module for ecclesiastic Latin]
-
-% We provide this as a babel alias
-
-\xpg@load@master@language{latin}
-
-% \end{macrocode}
-% \iffalse
-%</gloss-latinecclesiastic.ldf>
-%<*gloss-latinmedieval.ldf>
-% \fi
-% \clearpage
-%
-% \subsection{gloss-latinmedieval.ldf}
-% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
-%
-\ProvidesFile{gloss-latinmedieval.ldf}[polyglossia: module for medieval Latin]
-
-% We provide this as a babel alias
-
-\xpg@load@master@language{latin}
-
-% \end{macrocode}
-% \iffalse
-%</gloss-latinmedieval.ldf>
%<*gloss-latvian.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-latvian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-latvian.ldf}[polyglossia: module for Latvian]
\PolyglossiaSetup{latvian}{
@@ -21642,12 +21628,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\contentsname{Saturs}%
\def\listfigurename{Attēlu saraksts}%
\def\listtablename{Tabulu saraksts}%
- \def\indexname{Index}%
+ \def\indexname{Priekšmetu rādītājs}%
\def\figurename{Att.}%
\def\tablename{Tabula}%
\def\partname{Daļa}%
- \def\enclname{encl}%
- \def\ccname{cc}%
+ \def\enclname{Pielikumā}%
+ \def\ccname{Kopija(s)}%
\def\headtoname{To}%
\def\pagename{lpp.}%
\def\seename{sk.}%
@@ -21673,7 +21659,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lithuanian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Translated by Paulius Sladkevičius <komsas@gmail.com>
@@ -21755,13 +21741,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lo.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lo.ldf}[polyglossia: module for lo (Lao)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{lao}
+\InheritGlossFile{lao}
% \end{macrocode}
% \iffalse
@@ -21772,13 +21758,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lowersorbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lowersorbian.ldf}[polyglossia: module for Lower Sorbian]
% We provide this as a babel alias
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -21789,14 +21775,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lsorbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lsorbian.ldf}[polyglossia: module for Lower Sorbian]
% We only provide this gloss for babel compatibility. Since lsorbian is
% a sorbian variety, we use 'sorbian' with variant 'lower' now.
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -21807,13 +21793,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lt.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lt.ldf}[polyglossia: module for lt (Lithuanian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{lithuanian}
+\InheritGlossFile{lithuanian}
% \end{macrocode}
% \iffalse
@@ -21824,13 +21810,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-lv.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-lv.ldf}[polyglossia: module for lv (Latvian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{latvian}
+\InheritGlossFile{latvian}
% \end{macrocode}
% \iffalse
@@ -21841,7 +21827,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-macedonian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-macedonian.ldf}[polyglossia: module for Macedonian]
\PolyglossiaSetup{macedonian}{
@@ -21940,13 +21926,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-magyar.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-magyar.ldf}[polyglossia: module for Hungarian (Magyar)]
% We only provide this gloss for babel compatibility.
-\xpg@load@master@language{hungarian}
+\InheritGlossFile{hungarian}
% \end{macrocode}
% \iffalse
@@ -21957,7 +21943,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-malay.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-malay.ldf}[polyglossia: module for Malay]
@@ -21985,65 +21971,44 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Backwards compat. alias
\setlanguagealias[variant=malaysian]{malay}{bahasam}
-\providebool{malay@melayu}
+\@ifundefined{ifmalay@melayu}%
+ {\newif\ifmalay@melayu}{}
\malay@melayufalse
\def\malay@variant{malay}
-\define@choicekey*+{malay}{variant}[\xpg@val\xpg@nr]{indonesian,malaysian}[malaysian]{%
- \ifcase\xpg@nr\relax
- % indonesian:
- \def\malay@variant{indonesian}%
- \malay@melayufalse
- \or
- % malaysian:
- \def\malay@variant{malay}%
- \malay@melayutrue
- \fi
- \ifmalay@melayu
- \SetLanguageKeys{malay}{language=Malay,langtag=MLY,babelname=bahasam,bcp47=zsm,bcp47-language=zsm}%
- \xpg@fontsetup@latin{malay}%
- % Check if \l@malay is defined. If not, try to set it to some variety
- % (specific order as in the csv list below), or null language if everything fails
- \xpg@ifdefined{malay}{}{%
- \def\do##1{%
- \xpg@ifdefined{##1}%
- {\csletcs{l@malay}{l@##1}\listbreak}%
- {}%
- }%
- \docsvlist{melayu,bahasam,bahasai,indonesian,indon,bahasa}
- \xpg@ifdefined{malay}{}{%
- \xpg@warning{No hyphenation patterns for Malay (Malaysian) found\MessageBreak
- I will use the 'null' language instead}%
- \adddialect\l@malay0%
- }%
- }%
- \else
- \SetLanguageKeys{malay}{language=Indonesian,langtag=IND,babelname=bahasa,bcp47=id,bcp47-language=id}%
- \xpg@fontsetup@latin{malay}%
- % Check if \l@indonesian is defined. If not, try to set it to some variety
- % (specific order as in the csv list below), or null language if everything fails
- \xpg@ifdefined{indonesian}{}{%
- \def\do##1{%
- \xpg@ifdefined{##1}%
- {\csletcs{l@indonesian}{l@##1}\listbreak}%
- {}%
- }%
- \docsvlist{indon,bahasai,bahasam,malay,melayu,bahasa}
- \xpg@ifdefined{indonesian}{}{%
- \xpg@warning{No hyphenation patterns for Malay (Indonesian) found\MessageBreak
- I will use the 'null' language instead}%
- \adddialect\l@indonesian0
- }%
- }%
- \fi
- \xpg@info{Option: malay, variant=\xpg@val}%
-}{\xpg@warning{Unknown malay variant `#1'}}
+
+\DeclareKeys[polyglossia/gloss/malay]
+ {
+ variant.choice:,
+ variant / indonesian.code =
+ {%
+ \def\malay@variant{indonesian}%
+ \malay@melayufalse
+ \SetLanguageKeys{malay}{language=Indonesian,langtag=IND,babelname=bahasa,bcp47=id,bcp47-language=id}%
+ \SetupLatinPolyglossiaFont{malay}%
+ % Check if \l@indonesian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list), or null language if everything fails
+ \TryPatternWithFallback{indonesian}{indon,bahasai,bahasam,malay,melayu,bahasa}%
+ },
+ variant / malaysian.code =
+ {%
+ \def\malay@variant{malay}%
+ \malay@melayutrue
+ \SetLanguageKeys{malay}{language=Malay,langtag=MLY,babelname=bahasam,bcp47=zsm,bcp47-language=zsm}%
+ \SetupLatinPolyglossiaFont{malay}%
+ % Check if \l@malay is defined. If not, try to set it to some variety
+ % (specific order as in the csv list), or null language if everything fails
+ \TryPatternWithFallback{malay}{melayu,bahasam,bahasai,indonesian,indon,bahasa}%
+ },
+ variant.default:n = malaysian,
+ variant/unknown.code = \xpg@warning{Unknown malay variant `#1'},
+ }
% Register default options
-\xpg@initialize@gloss@options{malay}{variant=malaysian}
+\InitializeGlossOptions{malay}{variant=malaysian}
\def\malay@language{%
- \polyglossia@setup@language@patterns{\malay@variant}%
+ \SetupPolyglossiaLangPatterns{\malay@variant}%
}%
@@ -22156,7 +22121,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-malayalam.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-malayalam.ldf}[polyglossia: module for Malayalam]
@@ -22226,7 +22191,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-marathi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Translations provided by Abhijit Navale <abhi_navale@live.in>
% Ordinals (1-100) added by Niranjan Tambe <niranjanvikastambe@gmail.com> on 14th December, 2019
@@ -22256,21 +22221,25 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifmarathi@devanagari@numerals
\marathi@devanagari@numeralstrue
-\define@choicekey*+{marathi}{numerals}[\xpg@val\xpg@nr]{Western,Devanagari}[Devanagari]{%
- \ifcase\xpg@nr\relax
- % Western:
- \marathi@devanagari@numeralsfalse%
- \SetLanguageKeys{marathi}{bcp47-extension-u=nu-latn}%
- \or
- % Devanagari:
- \marathi@devanagari@numeralstrue%
- \SetLanguageKeys{marathi}{bcp47-extension-u=nu-deva}%
- \fi
- \xpg@info{Option: Marathi, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Marathi numerals value `#1'}}
+\DeclareKeys[polyglossia/gloss/marathi]
+ {
+ numerals.choice:,
+ numerals / western.code =
+ {%
+ \marathi@devanagari@numeralsfalse
+ \SetLanguageKeys{marathi}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / devanagari.code =
+ {%
+ \marathi@devanagari@numeralstrue
+ \SetLanguageKeys{marathi}{bcp47-extension-u=nu-deva}%
+ },
+ numerals.default:n = devanagari,
+ numerals/unknown.code = \xpg@warning{Unknown Marathi numerals value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{marathi}{numerals=Devanagari}
+\InitializeGlossOptions{marathi}{numerals=Devanagari}
\newcommand{\marathinumerals}[2]{\marathinumber{#2}}
@@ -22370,19 +22339,36 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \end{macrocode}
% \iffalse
%</gloss-marathi.ldf>
+%<*gloss-medievallatin.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-medievallatin.ldf}
+% \begin{macrocode}
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
+%
+\ProvidesFile{gloss-medievallatin.ldf}[polyglossia: module for medieval Latin]
+
+% We provide this as a babel alias
+
+\InheritGlossFile{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-medievallatin.ldf>
%<*gloss-mk.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-mk.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-mk.ldf}[polyglossia: module for mk (Macedonian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{macedonian}
+\InheritGlossFile{macedonian}
% \end{macrocode}
% \iffalse
@@ -22393,13 +22379,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ml.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ml.ldf}[polyglossia: module for ml (Malayalam)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{malayalam}
+\InheritGlossFile{malayalam}
% \end{macrocode}
% \iffalse
@@ -22410,13 +22396,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-mn.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-mn.ldf}[polyglossia: module for mn (Mongolian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{mongolian}
+\InheritGlossFile{mongolian}
% \end{macrocode}
% \iffalse
@@ -22427,7 +22413,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-mongolian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-mongolian.ldf}[polyglossia: module for Mongolian]
@@ -22459,43 +22445,46 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifcyrillic@numerals
\newif\ifcyrillic@asbuk@numerals
-\define@choicekey*+{mongolian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
- \ifcase\xpg@nr\relax
- % arabic:
- \cyrillic@numeralsfalse%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic-trad:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \or
- % cyrillic-alph:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralstrue%
- \fi
- \xpg@info{Option: Mongolian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Mongolian numerals value `#1'}}
-\define@boolkey{mongolian}[mongolian@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/mongolian]
+ {
+ babelshorthands.if = mongolian@babelshorthands,
+ babelshorthands.default:n = true,
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \cyrillic@numeralsfalse
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic-trad.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ },
+ numerals / cyrillic-alph.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralstrue
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Mongolian numerals value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{mongolian}{babelshorthands=false,numerals=arabic}
+\InitializeGlossOptions{mongolian}{babelshorthands=false,numerals=arabic}
\ifsystem@babelshorthands
- \setkeys{mongolian}{babelshorthands=true}
+ \SetGlossOptions{mongolian}{babelshorthands=true}
\else
- \setkeys{mongolian}{babelshorthands=false}
+ \SetGlossOptions{mongolian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\mongolian@shorthands{%
\xpg@activate@shorthands%
@@ -22548,7 +22537,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\bibname{Номзүй}%
\def\chaptername{Бүлэг}%
\def\appendixname{Хавсралт}%
- \ifcsundef{thechapter}%
+ \@ifundefined{thechapter}%
{\def\contentsname{Агуулга}}%
{\def\contentsname{Гарчиг}}%
\def\listfigurename{Зургийн жагсаалт}%
@@ -22666,13 +22655,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-mr.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-mr.ldf}[polyglossia: module for mr (Marathi)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{marathi}
+\InheritGlossFile{marathi}
% \end{macrocode}
% \iffalse
@@ -22683,13 +22672,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-naustrian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-naustrian.ldf}[polyglossia: module for Austrian German (current spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -22700,13 +22689,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-nb.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-nb.ldf}[polyglossia: module for nb (Norwegian)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{norwegian}
+\InheritGlossFile{norwegian}
% \end{macrocode}
% \iffalse
@@ -22717,13 +22706,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-newzealand.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-newzealand.ldf}[polyglossia: module for Newzealand English]
% We provide this as a babel alias
-\xpg@load@master@language{english}
+\InheritGlossFile{english}
% \end{macrocode}
% \iffalse
@@ -22734,13 +22723,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ngerman.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ngerman.ldf}[polyglossia: module for German (current spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -22751,7 +22740,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-nko.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-nko.ldf}[Polyglossia: module for N’Ko]
\PolyglossiaSetup{nko}{%
@@ -22849,14 +22838,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-norsk.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-norsk.ldf}[polyglossia: module for Norwegian (Bokmal)]
% We only provide this gloss for babel compatibility. Since norsk is
% actually norwegian bokmal, we use 'norwegian' with variant 'bokmal' now.
-\xpg@load@master@language{norwegian}
+\InheritGlossFile{norwegian}
% \end{macrocode}
% \iffalse
@@ -22867,7 +22856,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-norwegian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-norwegian.ldf}[polyglossia: module for Norwegian]
\PolyglossiaSetup{norwegian}{
@@ -22889,28 +22878,32 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias[variant=nynorsk]{norwegian}{nynorsk}
\def\norwegian@variant{nynorsk}
-\define@choicekey*+{norwegian}{variant}[\xpg@val\xpg@nr]{nynorsk,bokmal}[nynorsk]{%
- \ifcase\xpg@nr\relax
- % nynorsk:
- \def\norwegian@variant{nynorsk}%
- \SetLanguageKeys{norwegian}{langtag=NYN,babelname=nynorsk,bcp47=nn,bcp47-language=nn}%
- \xpg@fontsetup@latin{norwegian}%
- \or
- % bokmal:
- \def\norwegian@variant{norsk}%
- \SetLanguageKeys{norwegian}{langtag=NOR,babelname=norsk,bcp47=nb,bcp47-language=nb}%
- \xpg@fontsetup@latin{norwegian}%
- \fi
- \xpg@info{Option: norwegian, variant=\xpg@val}%
-}{\xpg@warning{Unknown norwegian variant `#1'}}
+\DeclareKeys[polyglossia/gloss/norwegian]
+ {
+ variant.choice:,
+ variant / nynorsk.code =
+ {%
+ \def\norwegian@variant{nynorsk}%
+ \SetLanguageKeys{norwegian}{langtag=NYN,babelname=nynorsk,bcp47=nn,bcp47-language=nn}%
+ \SetupLatinPolyglossiaFont{norwegian}%
+ },
+ variant / bokmal.code =
+ {%
+ \def\norwegian@variant{norsk}%
+ \SetLanguageKeys{norwegian}{langtag=NOR,babelname=norsk,bcp47=nb,bcp47-language=nb}%
+ \SetupLatinPolyglossiaFont{norwegian}%
+ },
+ variant.default:n = nynorsk,
+ variant/unknown.code = \xpg@warning{Unknown norwegian variant `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{norwegian}{variant=nynorsk}
+\InitializeGlossOptions{norwegian}{variant=nynorsk}
\def\norwegian@language{%
- \polyglossia@setup@language@patterns{\norwegian@variant}%
+ \SetupPolyglossiaLangPatterns{\norwegian@variant}%
}%
\def\captionsnorwegian@nynorsk{%
@@ -22994,13 +22987,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-nswissgerman.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-nswissgerman.ldf}[polyglossia: module for Swiss German (current spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -23011,14 +23004,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-nynorsk.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-nynorsk.ldf}[polyglossia: module for Norwegian (Nynorsk)]
% We only provide this gloss for babel compatibility. Since nynorsk is
% a norwegian variety, we use 'norwegian' with variant 'nynorsk' now.
-\xpg@load@master@language{norwegian}
+\InheritGlossFile{norwegian}
% \end{macrocode}
% \iffalse
@@ -23029,7 +23022,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-occitan.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
%%
%% This is file `gloss-occitan.ldf',
@@ -23065,19 +23058,19 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{occitan}{oc}
-\define@boolkey{occitan}[occitan@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/occitan]
+ {
+ babelshorthands.if = occitan@babelshorthands,
+ babelshorthands.default:n = true
+ }
\ifsystem@babelshorthands
- \setkeys{occitan}{babelshorthands=true}
+ \SetGlossOptions{occitan}{babelshorthands=true}
\else
- \setkeys{occitan}{babelshorthands=false}
+ \SetGlossOptions{occitan}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\occitan@shorthands{%
\xpg@activate@shorthands%
@@ -23169,7 +23162,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\today{\occitanday\space \occitanmonth\space de~\number\year}%
}
\let\xpgoc@savedvalues\empty
-\AtEndPreamble{% the user or the class might define different values
+\AddToHook{begindocument/before}{% the user or the class might define different values
\edef\xpgoc@savedvalues{%
\clubpenalty=\the\clubpenalty\space
\@clubpenalty=\the\@clubpenalty\space
@@ -23210,7 +23203,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-odia.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% Translations provided by ଅଶୋକ ଦାସ୍ <das@pas.rochester.edu> and ଅଭିଷେକ ଜେନା <avisekjena@gmail.com>
% TODO implement Odia calendar
@@ -23242,32 +23235,37 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifodia@devanagari@numerals
\newif\ifodia@odia@numerals
-\define@choicekey*+{odia}{numerals}[\xpg@val\xpg@nr]{Devanagari,Odia,Western}[Devanagari]{%
- \ifcase\xpg@nr\relax
- % Devanagari:
- \odia@odia@numeralsfalse%
- \odia@devanagari@numeralstrue%
- \SetLanguageKeys{odia}{bcp47=or,bcp47-language=or,bcp47-extension-u=nu-deva}%
- \or
- % Odia:
- \odia@odia@numeralstrue%
- \odia@devanagari@numeralsfalse%
- \or
- % Western:
- \odia@odia@numeralsfalse%
- \odia@devanagari@numeralsfalse%
- \SetLanguageKeys{odia}{bcp47=or,bcp47-language=or,bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Odia, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Odia numeral `#1'}}
-
\def\extras@odia{}
\def\noextras@odia{}
-\define@boolkey{odia}[odia@]{changecounternumbering}[true]{}
+\DeclareKeys[polyglossia/gloss/odia]
+ {
+ changecounternumbering.if = odia@changecounternumbering,
+ changecounternumbering.default:n = true,
+ numerals.choice:,
+ numerals / devanagari.code =
+ {%
+ \odia@odia@numeralsfalse
+ \odia@devanagari@numeralstrue
+ \SetLanguageKeys{odia}{bcp47=or,bcp47-language=or,bcp47-extension-u=nu-deva}%
+ },
+ numerals / odia.code =
+ {%
+ \odia@odia@numeralstrue
+ \odia@devanagari@numeralsfalse
+ },
+ numerals / western.code =
+ {%
+ \odia@odia@numeralsfalse
+ \odia@devanagari@numeralsfalse
+ \SetLanguageKeys{odia}{bcp47=or,bcp47-language=or,bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = devanagari,
+ numerals/unknown.code = \xpg@warning{Unknown Odia numeral `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{odia}{changecounternumbering=false,numerals=Devanagari}
+\InitializeGlossOptions{odia}{changecounternumbering=false,numerals=Devanagari}
\def\captionsodia{%
\def\refname{ସନ୍ଦର୍ଭ}%
@@ -23370,13 +23368,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-or.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-odia.ldf}[polyglossia: module for or (Odia)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{odia}
+\InheritGlossFile{odia}
% \end{macrocode}
% \iffalse
@@ -23387,13 +23385,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-pa.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-pa.ldf}[polyglossia: module for pa (Punjabi)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{punjabi}
+\InheritGlossFile{punjabi}
% \end{macrocode}
% \iffalse
@@ -23404,7 +23402,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-persian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-persian.ldf}[polyglossia: module for Persian]
@@ -23433,42 +23431,36 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias{persian}{farsi}
\newif\if@western@numerals
-\define@choicekey*+{persian}{numerals}[\xpg@val\xpg@nr]{eastern,western}[eastern]{%
- \ifcase\xpg@nr\relax
- % eastern:
- \@western@numeralsfalse%
- \SetLanguageKeys{persian}{bcp47-extension-u=nu-arab}%
- \or
- % western:
- \@western@numeralstrue%
- \SetLanguageKeys{persian}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Persian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Persian numerals option `#1'}}
-
\newif\ifpersian@customsep\persian@customsepfalse
\def\xpg@sepmark{}
-\define@key{persian}{sectionsep}[.]{%
- \persian@customseptrue%
- \gdef\xpg@sepmark{#1}%
-}
-
-%this is needed for \abjad in arabicnumbers.sty
-\define@boolkey{persian}[persian@]{abjadjimnotail}[true]{%
- \ifpersian@abjadjimnotail
- \abjad@jim@notailtrue%
- \else
- \abjad@jim@notailfalse
- \fi}
-
-% NOT YET USED
-\define@key{persian}{locale}[default]{%
- \def\@persian@locale{#1}}
%TODO add option for CALENDAR
+\DeclareKeys[polyglossia/gloss/persian]
+ {
+ sectionsep.code = \gdef\xpg@sepmark{#1}\persian@customseptrue,
+ sectionsep.default:n = .,
+ abjadjimnotail.if = abjad@jim@notail,
+ abjadjimnotail.default:n = true,
+ locale.store = \@persian@locale,
+ locale.default:n = default,
+ numerals.choice:,
+ numerals / eastern.code =
+ {%
+ \@western@numeralsfalse
+ \SetLanguageKeys{persian}{bcp47-extension-u=nu-arab}%
+ },
+ numerals / western.code =
+ {%
+ \@western@numeralstrue
+ \SetLanguageKeys{persian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = eastern,
+ numerals/unknown.code = \xpg@warning{Unknown Persian numerals option `#1'}
+ }
+
% Register default options
-\xpg@initialize@gloss@options{persian}{locale=default,numerals=eastern,abjadjimnotail=false}
+\InitializeGlossOptions{persian}{locale=default,numerals=eastern,abjadjimnotail=false}
\def\farsigregmonth#1{\ifcase#1%
\or ژانویه\or فوریه\or مارس\or آوریل\or مه\or ژوئن\or ژوئیه\or اوت\or سپتامبر\or اکتبر\or نوامبر\or دسامبر\fi}
@@ -23553,16 +23545,16 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nopersian@xetex@capsformat{%
- \ifcsdef{xpg@save@sepmark}{%
+ \ifcsname xpg@save@sepmark\endcsname%
\SepMark{\xpg@save@sepmark}
- }{}%
+ \fi%
}
\def\persian@luatex@capsformat{%
%
% change chapter and part headings
\ifpersian@customsep
- \ifcsdef{chapter}{%
+ \ifcsname chapter\endcsname%
\let\xpg@save@thesection\thesection%
\renewcommand*\thesection{\thechapter\xpg@sepmark\@arabic\c@section}
\let\xpg@save@theequation\theequation%
@@ -23574,7 +23566,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\xpg@save@thetable\thetable%
\renewcommand*\thetable{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@table}
- }{}
+ \fi%
\let\xpg@save@thesubsection\thesubsection%
\renewcommand\thesubsection
{\thesection\xpg@sepmark\@arabic\c@subsection}
@@ -23589,30 +23581,30 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nopersian@luatex@capsformat{%
- \ifcsdef{xpg@save@thesection}{%
+ \ifcsname xpg@save@thesection\endcsname%
\let\thesection\xpg@save@thesection%
- }{}%
- \ifcsdef{xpg@save@theequation}{%
+ \fi%
+ \ifcsname xpg@save@theequation\endcsname%
\let\theequation\xpg@save@theequation%
- }{}%
- \ifcsdef{xpg@save@thefigure}{%
+ \fi%
+ \ifcsname xpg@save@thefigure\endcsname%
\let\thefigure\xpg@save@thefigure%
- }{}%
- \ifcsdef{xpg@save@thetable}{%
+ \fi%
+ \ifcsname xpg@save@thetable\endcsname%
\let\thetable\xpg@save@thetable%
- }{}%
- \ifcsdef{xpg@save@thesubsection}{%
+ \fi%
+ \ifcsname xpg@save@thesubsection\endcsname%
\let\thesubsection\xpg@save@thesubsection%
- \ifcsdef{xpg@save@thesubsubsection}{%
+ \ifcsname xpg@save@thesubsubsection\endcsname%
\let\thesubsubsection\xpg@save@thesubsubsection%
- }{}%
- }{}%
- \ifcsdef{xpg@save@theparagraph}{%
+ \fi%
+ \fi%
+ \ifcsname xpg@save@theparagraph\endcsname%
\let\theparagraph\xpg@save@theparagraph%
- }{}%
- \ifcsdef{xpg@save@thesubparagraph}{%
+ \fi%
+ \ifcsname xpg@save@thesubparagraph\endcsname%
\let\thesubparagraph\xpg@save@thesubparagraph%
- }{}%
+ \fi%
}
\def\blockextras@persian{%
@@ -23645,7 +23637,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% \subsection{gloss-piedmontese.ldf}
% \begin{macrocode}
% !TEX encoding = UTF-8 Unicode
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-piedmontese.ldf}[2013/02/12 v1.0 polyglossia: module for Piedmontese]
\makeatletter
@@ -23663,19 +23655,19 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{piedmontese}{pms}
-\define@boolkey{piedmontese}[piedmontese@]{babelshorthands}[true]{}
+\DeclareKeys[polyglossia/gloss/piedmontese]
+ {
+ babelshorthands.if = piedmontese@babelshorthands,
+ babelshorthands.default:n = true
+ }
\ifsystem@babelshorthands
- \setkeys{piedmontese}{babelshorthands=true}
+ \SetGlossOptions{piedmontese}{babelshorthands=true}
\else
- \setkeys{piedmontese}{babelshorthands=false}
+ \SetGlossOptions{piedmontese}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\piedmontese@shorthands{%
\xpg@activate@shorthands%
@@ -23739,7 +23731,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
ëd luj\or d'agost\or dë stèmber\or d'otóber\or ëd novèmber\or dë dzèmber%
\fi\space dal\space\number\year}}
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
\edef\xpgpms@savedvalues{%
\clubpenalty=\the\clubpenalty\space
\@clubpenalty=\the\@clubpenalty\space
@@ -23775,7 +23767,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-polish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-polish.ldf}[polyglossia: module for Polish]
@@ -23797,26 +23789,26 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\RequirePackage{luavlna}
\fi
-\define@boolkey{polish}[polish@]{babelshorthands}[true]{}
-
-\define@boolkey{polish}[polish@]{splithyphens}[true]{}
-
-\define@boolkey{polish}[polish@]{vlna}[true]{}
+\DeclareKeys[polyglossia/gloss/polish]
+ {
+ babelshorthands.if = polish@babelshorthands,
+ babelshorthands.default:n = true,
+ splithyphens.if = polish@splithyphens,
+ splithyphens.default:n = true,
+ vlna.if = polish@vlna,
+ vlna.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{polish}{babelshorthands=false,splithyphens=true,vlna=true}
+\InitializeGlossOptions{polish}{babelshorthands=false,splithyphens=true,vlna=true}
\ifsystem@babelshorthands
- \setkeys{polish}{babelshorthands=true}
+ \SetGlossOptions{polish}{babelshorthands=true}
\else
- \setkeys{polish}{babelshorthands=false}
+ \SetGlossOptions{polish}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\let\xpg@hyphen@char-
\def\polish@@splhyphen#1{%
@@ -24034,13 +24026,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-polutonikogreek.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-polutonikogreek.ldf}[polyglossia: module for polytonic Greek]
% We provide this as a babel alias
-\xpg@load@master@language{greek}
+\InheritGlossFile{greek}
% \end{macrocode}
% \iffalse
@@ -24051,7 +24043,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-portuges.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for Portuguese]
@@ -24060,7 +24052,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% introduced it in 8.3 filename times). Since polyglossia uses full
% English language names, we use 'portuguese' now.
-\xpg@load@master@language{portuguese}
+\InheritGlossFile{portuguese}
% \end{macrocode}
% \iffalse
@@ -24071,7 +24063,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-portuguese.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-portuguese.ldf}[polyglossia: module for Portuguese]
@@ -24101,41 +24093,42 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\fi
\def\portuguese@variant{portuges}
-\define@choicekey*+{portuguese}{variant}[\xpg@val\xpg@nr]{portuguese,brazilian}[portuguese]{%
- \ifcase\xpg@nr\relax
- % portuguese:
- \def\portuguese@variant{portuges}%
- \SetLanguageKeys{portuguese}{babelname=portuges,bcp47=pt-PT,bcp47-language=pt,bcp47-region=PT}%
- \or
- % brazilian:
- \def\portuguese@variant{brazil}%
- \SetLanguageKeys{portuguese}{babelname=brazil,bcp47=pt-BR,bcp47-language=pt,bcp47-region=BR}%
- % There are no specific brazil patterns
- \adddialect\l@brazil\l@portuges\relax%
- \fi
- \xpg@info{Option: portuguese, variant=\xpg@val}%
-}{\xpg@warning{Unknown portuguese variant `#1'}}
-
-\define@boolkey{portuguese}[portuguese@]{babelshorthands}[true]{}
-\define@boolkey{portuguese}[portuguese@]{splithyphens}[true]{}
+\DeclareKeys[polyglossia/gloss/portuguese]
+ {
+ babelshorthands.if = portuguese@babelshorthands,
+ babelshorthands.default:n = true,
+ splithyphens.if = portuguese@splithyphens,
+ splithyphens.default:n = true,
+ variant.choice:,
+ variant / portuguese.code =
+ {%
+ \def\portuguese@variant{portuges}%
+ \SetLanguageKeys{portuguese}{babelname=portuges,bcp47=pt-PT,bcp47-language=pt,bcp47-region=PT}%
+ },
+ variant / brazilian.code =
+ {%
+ \def\portuguese@variant{brazil}%
+ \SetLanguageKeys{portuguese}{babelname=brazil,bcp47=pt-BR,bcp47-language=pt,bcp47-region=BR}%
+ % There are no specific brazil patterns
+ \adddialect\l@brazil\l@portuges\relax
+ },
+ variant.default:n = portuguese,
+ variant/unknown.code = \xpg@warning{Unknown portuguese variant `#1'},
+ }
% Register default options
-\xpg@initialize@gloss@options{portuguese}{variant=portuguese,
+\InitializeGlossOptions{portuguese}{variant=portuguese,
babelshorthands=false,
splithyphens=true}
\ifsystem@babelshorthands
- \setkeys{portuguese}{babelshorthands=true}
+ \SetGlossOptions{portuguese}{babelshorthands=true}
\else
- \setkeys{portuguese}{babelshorthands=false}
+ \SetGlossOptions{portuguese}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\let\xpg@hyphen@char-
\def\portuguese@@splhyphen#1{%
@@ -24204,7 +24197,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\portuguese@language{%
- \polyglossia@setup@language@patterns{\portuguese@variant}%
+ \SetupPolyglossiaLangPatterns{\portuguese@variant}%
}%
\def\captionsportuguese@portuges{%
@@ -24302,7 +24295,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-punjabi.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
% UTF-8 strings kindly provided by
% Arvinder Singh Kang, <17-11-2022>
@@ -24329,26 +24322,31 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\punjabi@language{%
% patterns are spelled panjabi
- \polyglossia@setup@language@patterns{panjabi}%
+ \SetupPolyglossiaLangPatterns{panjabi}%
}
\newif\ifpunjabi@gurmukhi@numerals
\punjabi@gurmukhi@numeralstrue
-\define@choicekey*+{punjabi}{numerals}[\xpg@val\xpg@nr]{Gurmukhi,Western}[Gurmukhi]{%
- \ifcase\xpg@nr\relax
- % Gurmukhi:
- \punjabi@gurmukhi@numeralstrue%
- \SetLanguageKeys{punjabi}{bcp47-extension-u=nu-guru}%
- \or
- % Western:
- \punjabi@gurmukhi@numeralsfalse%
- \SetLanguageKeys{punjabi}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Punjabi, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Punjabi numeral `#1'}}
+
+\DeclareKeys[polyglossia/gloss/punjabi]
+ {
+ numerals.choice:,
+ numerals / gurmukhi.code =
+ {%
+ \punjabi@gurmukhi@numeralstrue
+ \SetLanguageKeys{punjabi}{bcp47-extension-u=nu-guru}%
+ },
+ numerals / western.code =
+ {%
+ \punjabi@gurmukhi@numeralsfalse
+ \SetLanguageKeys{punjabi}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = gurmukhi,
+ numerals/unknown.code = \xpg@warning{Unknown Punjabi numeral `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{punjabi}{numerals=gurmukhi}
+\InitializeGlossOptions{punjabi}{numerals=gurmukhi}
\newcommand{\punjabinumerals}[2]{\punjabinumber{#2}}
@@ -24410,7 +24408,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-romanian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-romanian.ldf}[polyglossia: module for Romanian]
@@ -24469,7 +24467,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-romansh.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-romansh.ldf}[polyglossia: module for Romansh]
\makeatletter
@@ -24527,7 +24525,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-russian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-russian.ldf}[polyglossia: module for Russian]
@@ -24556,11 +24554,6 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*[spelling=old]{russian}{ru-petr1708}
\newif\if@russian@modern
-\define@key{russian}{spelling}[modern]{%
- \ifstrequal{#1}{old}%
- {\@russian@modernfalse\SetLanguageKeys{russian}{bcp47=ru-petr1708,bcp47-variant=petr1708}}%
- {\@russian@moderntrue\SetLanguageKeys{russian}{bcp47=ru,bcp47-variant=luna1918}}%
-}
\def\captionsrussian{%
\if@russian@modern\captionsrussian@modern\else\captionsrussian@old\fi%
@@ -24572,49 +24565,68 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifcyrillic@numerals
\newif\ifcyrillic@asbuk@numerals
-\define@choicekey*+{russian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
- \ifcase\xpg@nr\relax
- % arabic:
- \cyrillic@numeralsfalse%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{russian}{bcp47-extension-u=nu-latn}%
- \or
- % cyrillic:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-trad:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-alph:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralstrue%
- \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
- \fi
- \xpg@info{Option: Russian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Russian numerals value `#1'}}
-\define@boolkey{russian}[russian@]{indentfirst}[true]{%
- \ifrussian@indentfirst
- \SetLanguageKeys{russian}{indentfirst=true}%
- \else
- \SetLanguageKeys{russian}{indentfirst=false}%
- \fi%
-}
-
-\define@boolkey{russian}[russian@]{babelshorthands}[true]{}
-
-% Force punctuation after heading number
-\define@boolkey{russian}[russian@]{forceheadingpunctuation}[true]{}
-
-% Define some math functions
-\define@boolkey{russian}[russian@]{mathfunctions}[true]{}
+\DeclareKeys[polyglossia/gloss/russian]
+ {
+ babelshorthands.if = russian@babelshorthands,
+ babelshorthands.default:n = true,
+ forceheadingpunctuation.if = russian@forceheadingpunctuation,
+ forceheadingpunctuation.default:n = true,
+ mathfunctions.if = russian@mathfunctions,
+ mathfunctions.default:n = true,
+ spelling.choice:,
+ spelling / modern.code =
+ {%
+ \@russian@moderntrue
+ \SetLanguageKeys{russian}{bcp47=ru,bcp47-variant=luna1918}%
+ },
+ spelling / old.code =
+ {%
+ \@russian@modernfalse
+ \SetLanguageKeys{russian}{bcp47=ru-petr1708,bcp47-variant=petr1708}%
+ },
+ spelling.default:n = modern,
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \cyrillic@numeralsfalse
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{russian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / cyrillic.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-trad.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-alph.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralstrue
+ \SetLanguageKeys{russian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Russian numerals value `#1'},
+ indentfirst.choice:,
+ indentfirst / true.code =
+ {%
+ \SetLanguageKeys{russian}{indentfirst=true}%
+ },
+ indentfirst / false.code =
+ {%
+ \SetLanguageKeys{russian}{indentfirst=false}%
+ },
+ indentfirst.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{russian}{babelshorthands=false,
+\InitializeGlossOptions{russian}{babelshorthands=false,
spelling=modern,
numerals=arabic,
indentfirst=true,
@@ -24623,16 +24635,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\ifsystem@babelshorthands
- \setkeys{russian}{babelshorthands=true}
+ \SetGlossOptions{russian}{babelshorthands=true}
\else
- \setkeys{russian}{babelshorthands=false}
+ \SetGlossOptions{russian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\russian@shorthands{%
\xpg@activate@shorthands%
@@ -24684,7 +24692,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\bibname{Литература}%
\def\chaptername{Глава}%
\def\appendixname{Приложение}%
- \ifcsundef{thechapter}%
+ \@ifundefined{thechapter}%
{\def\contentsname{Содержание}}%
{\def\contentsname{Оглавление}}%
\def\listfigurename{Список иллюстраций}%
@@ -24727,7 +24735,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\bibname{Библіографія}%
\def\chaptername{Глава}%
\def\appendixname{Приложеніе}%
- \ifcsundef{thechapter}%
+ \@ifundefined{thechapter}%
{\def\contentsname{Содержаніе}}%
{\def\contentsname{Оглавленіе}}%
\def\listfigurename{Списокъ иллюстрацій}%
@@ -24926,7 +24934,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-sami.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-sami.ldf}[polyglossia: module for Sami]
@@ -24956,19 +24964,19 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% % northern:
% \def\sami@variant{samin}%
% \SetLanguageKeys{sami}{language=Northern Sami,langtag=NSM}%
-% \xpg@fontsetup@latin{sami}%
+% \SetupLatinPolyglossiaFont{sami}%
% \or
% % other:
% \def\sami@variant{}%
% \SetLanguageKeys{sami}{language= Sami,langtag=}%
-% \xpg@fontsetup@latin{sami}%
+% \SetupLatinPolyglossiaFont{sami}%
% \fi
% \xpg@info{Option: sami, variant=\xpg@val}%
%}{\xpg@warning{Unknown sami variant `#1'}}
%\def\sami@language{%
-% \polyglossia@setup@language@patterns{\sami@variant}%
+% \SetupPolyglossiaLangPatterns{\sami@variant}%
%}%
\def\captionssami@northern{%
@@ -25030,14 +25038,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-samin.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-samin.ldf}[polyglossia: module for Northern Sami]
% We only provide this gloss for babel compatibility. Since samin is
% a sami variety, we use 'sami' with variant 'northern' now.
-\xpg@load@master@language{sami}
+\InheritGlossFile{sami}
% \end{macrocode}
% \iffalse
@@ -25048,7 +25056,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-sanskrit.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-sanskrit.ldf}[polyglossia: module for Sanskrit]
@@ -25077,56 +25085,55 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*[script=gujarati]{sanskrit}{sa-Gujr}
\setlanguagealias*[script=latin]{sanskrit}{sa-Latn}
-\define@key{sanskrit}{Script}[devanagari]{%
- \ifcsdef{fontsetup@sanskrit@#1}%
- {\csname fontsetup@sanskrit@#1\endcsname}%
- {\xpg@error{`#1' is not a valid script for Sanskrit}%
- }%
-}
-
-\define@key{sanskrit}{script}[devanagari]{\setkeys{sanskrit}{Script=#1}}
-
\def\fontsetup@sanskrit@devanagari{%
\SetLanguageKeys{sanskrit}{scripttag=deva,script=Devanagari,bcp47=sa-Deva,bcp47-language=sa,bcp47-script=Deva,bcp47-casing=sa-Deva}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@gujarati{%
\SetLanguageKeys{sanskrit}{scripttag=gujr,script=Gujarati,bcp47=sa-Gujr,bcp47-language=sa,bcp47-script=Gujr,bcp47-casing=sa-Gujr}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@malayalam{%
\SetLanguageKeys{sanskrit}{scripttag=mlym,script=Malayalam,bcp47=sa-Mlym,bcp47-language=sa,bcp47-script=Mlym,bcp47-casing=sa-Mlym}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@bengali{%
\SetLanguageKeys{sanskrit}{scripttag=beng,script=Bengali,bcp47=sa-Beng,bcp47-language=sa,bcp47-script=Beng,bcp47-casing=sa-Beng}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@kannada{%
\SetLanguageKeys{sanskrit}{scripttag=knda,script=Kannada,bcp47=sa-Knda,bcp47-language=sa,bcp47-script=Knda,bcp47-casing=sa-Knda}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@telugu{%
\SetLanguageKeys{sanskrit}{scripttag=telu,script=Telugu,bcp47=sa-Relu,bcp47-language=sa,bcp47-script=Relu,bcp47-casing=sa-Relu}
- \xpg@fontsetup@nonlatin{sanskrit}}
+ \SetupNonLatinPolyglossiaFont{sanskrit}}
\def\fontsetup@sanskrit@latin{%
\SetLanguageKeys{sanskrit}{scripttag=latn,script=Latin,bcp47=sa-Latn,bcp47-language=sa,bcp47-script=Latn,bcp47-casing=sa-Latn}
- \xpg@fontsetup@latin{sanskrit}}
+ \SetupLatinPolyglossiaFont{sanskrit}}
\newif\ifsanskrit@devanagari@numerals
\sanskrit@devanagari@numeralstrue
-\define@choicekey*+{sanskrit}{numerals}[\xpg@val\xpg@nr]{devanagari,western}[devanagari]{%
- \ifcase\xpg@nr\relax
- % devanagari:
- \sanskrit@devanagari@numeralstrue%
- \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-deva}%
- \or
- % western:
- \sanskrit@devanagari@numeralsfalse%
- \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Sanskrit, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Sanskrit numeral `#1'}}
+\DeclareKeys[polyglossia/gloss/sanskrit]
+ {
+ script.code = \@ifundefined{fontsetup@sanskrit@#1}%
+ {\xpg@error{`#1' is not a valid script for Sanskrit}}%
+ {\csname fontsetup@sanskrit@#1\endcsname},
+ script.default:n = devanagari,
+ numerals.choice:,
+ numerals / devanagari.code =
+ {%
+ \sanskrit@devanagari@numeralstrue
+ \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-deva}%
+ },
+ numerals / western.code =
+ {%
+ \sanskrit@devanagari@numeralsfalse
+ \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = devanagari,
+ numerals/unknown.code = \xpg@warning{Unknown Sanskrit numeral `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{sanskrit}{script=devanagari,numerals=devanagari}
+\InitializeGlossOptions{sanskrit}{script=devanagari,numerals=devanagari}
% Use \providecommand here as the ldf file might
% be reloaded via BCP.
@@ -25207,14 +25214,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-scottish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-scottish.ldf}[polyglossia: module for Scottish Gaelic]
% We only provide this gloss for babel compatibility. Since scottish is
% a gaelic variety, we use 'gaelic' with variant 'scottish' now.
-\xpg@load@master@language{gaelic}
+\InheritGlossFile{gaelic}
% \end{macrocode}
% \iffalse
@@ -25225,7 +25232,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-serbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-serbian.ldf}[polyglossia: module for Serbian]
%TODO split into gloss-serbiancyr.ldf and gloss-serbianlat.ldf
@@ -25266,67 +25273,10 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\fi
\newif\if@serbian@cyr
-\define@choicekey*+{serbian}{Script}[\xpg@val\xpg@nr]{cyrillic,latin}[cyrillic]{%
- \ifcase\xpg@nr\relax
- % cyrillic:
- \@serbian@cyrtrue
- \xpg@fontsetup@nonlatin{serbian}%
- \or
- % latin:
- \@serbian@cyrfalse
- \xpg@fontsetup@latin{serbian}%
- %TODO \def\serbian@language{\language=\l@serbianlat}%
- % or should we use Croatian patterns as a fallback for the time being???
- \fi
- \serbian@set@languagekeys%
- \xpg@info{Option: Serbian, script=\xpg@val}%
-}{\xpg@warning{Unknown Serbian script `#1'}}
-
-\define@key{serbian}{script}[cyrillic]{\setkeys{serbian}{Script=#1}}
-
\newif\if@serbian@ijekavian
-\define@choicekey*+{serbian}{variant}[\xpg@val\xpg@nr]{ekavian,ijekavian}[ekavian]{%
- \ifcase\xpg@nr\relax
- % ekavian:
- \@serbian@ijekavianfalse%
- \or
- % ijekavian:
- \@serbian@ijekaviantrue%
- \fi
- \serbian@set@languagekeys%
- \xpg@info{Option: Serbian, variant=\xpg@val}%
-}{\xpg@warning{Unknown Serbian variant `#1'}}
\newif\ifcyrillic@numerals
\newif\ifcyrillic@asbuk@numerals
-\define@choicekey*+{serbian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
- \ifcase\xpg@nr\relax
- % arabic:
- \cyrillic@numeralsfalse%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{serbian}{bcp47-extension-u=nu-latn}%
- \or
- % cyrillic:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-trad:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-alph:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralstrue%
- \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
- \fi
- \xpg@info{Option: Serbian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Serbian numerals value `#1'}}
-
-\define@boolkey{serbian}[serbian@]{splithyphens}[true]{}
-
-\define@boolkey{serbian}[serbian@]{datei}[true]{}
\def\serbian@set@languagekeys{%
\if@serbian@cyr
@@ -25344,10 +25294,75 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\fi%
}
-\setkeys{serbian}{Script,numerals}
+\DeclareKeys[polyglossia/gloss/serbian]
+ {
+ splithyphens.if = serbian@splithyphens,
+ splithyphens.default:n = true,
+ datei.if = serbian@datei,
+ datei.default:n = true,
+ variant.choice:,
+ variant / ekavian.code =
+ {%
+ \@serbian@ijekavianfalse
+ \serbian@set@languagekeys
+ },
+ variant / ijekavian.code =
+ {%
+ \@serbian@ijekaviantrue
+ \serbian@set@languagekeys
+ },
+ variant.default:n = ekavian,
+ variant/unknown.code = \xpg@warning{Unknown Serbian variant `#1'},
+ script.choice:,
+ script / cyrillic.code =
+ {%
+ \@serbian@cyrtrue
+ \SetupNonLatinPolyglossiaFont{serbian}%
+ \serbian@set@languagekeys
+ },
+ script / latin.code =
+ {%
+ \@serbian@cyrfalse
+ \SetupLatinPolyglossiaFont{serbian}%
+ %TODO \def\serbian@language{\language=\l@serbianlat}%
+ % or should we use Croatian patterns as a fallback for the time being???
+ \serbian@set@languagekeys
+ },
+ script.default:n = cyrillic,
+ script/unknown.code = \xpg@warning{Unknown Serbian script `#1'},
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \cyrillic@numeralsfalse
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{serbian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / cyrillic.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-trad.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-alph.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralstrue
+ \SetLanguageKeys{serbian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Serbian numerals value `#1'}
+ }
+
+\SetGlossOptions{serbian}{script,numerals}
% Register default options
-\xpg@initialize@gloss@options{serbian}{script=cyrillic,numerals=arabic,splithyphens=true}
+\InitializeGlossOptions{serbian}{script=cyrillic,numerals=arabic,splithyphens=true}
\def\captionsserbian{%
\if@serbian@cyr\captionsserbian@cyr\else\captionsserbian@lat\fi
@@ -25648,13 +25663,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-serbianc.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-serbianc.ldf}[polyglossia: module for Serbian (cyrillic)]
% We provide this as a babel alias
-\xpg@load@master@language{serbian}
+\InheritGlossFile{serbian}
% \end{macrocode}
% \iffalse
@@ -25665,7 +25680,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-slovak.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-slovak.ldf}[polyglossia: module for Slovak]
@@ -25686,26 +25701,26 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\RequirePackage{luavlna}
\fi
-\define@boolkey{slovak}[slovak@]{babelshorthands}[true]{}
-
-\define@boolkey{slovak}[slovak@]{splithyphens}[true]{}
-
-\define@boolkey{slovak}[slovak@]{vlna}[true]{}
+\DeclareKeys[polyglossia/gloss/slovak]
+ {
+ babelshorthands.if = slovak@babelshorthands,
+ babelshorthands.default:n = true,
+ splithyphens.if = slovak@splithyphens,
+ splithyphens.default:n = true,
+ vlna.if = slovak@vlna,
+ vlna.default:n = true,
+ }
% Register default options
-\xpg@initialize@gloss@options{slovak}{babelshorthands=false,splithyphens=true,vlna=true}
+\InitializeGlossOptions{slovak}{babelshorthands=false,splithyphens=true,vlna=true}
\ifsystem@babelshorthands
- \setkeys{slovak}{babelshorthands=true}
+ \SetGlossOptions{slovak}{babelshorthands=true}
\else
- \setkeys{slovak}{babelshorthands=false}
+ \SetGlossOptions{slovak}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\let\xpg@hyphen@char-
\def\slovak@@splhyphen#1{%
@@ -25881,7 +25896,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\contentsname{Obsah}%
\def\listfigurename{Zoznam obrázkov}%
\def\listtablename{Zoznam tabuliek}%
- \def\indexname{Index}%
+ \def\indexname{Register}%
\def\figurename{Obrázok}%
\def\tablename{Tabuľka}%
%\def\thepart{}%
@@ -25932,13 +25947,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-slovene.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-slovene.ldf}[polyglossia: module for Slovenian]
% We provide this as a babel alias
-\xpg@load@master@language{slovenian}
+\InheritGlossFile{slovenian}
% \end{macrocode}
% \iffalse
@@ -25949,7 +25964,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-slovenian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-slovenian.ldf}[polyglossia: module for Slovenian]
@@ -25970,10 +25985,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Babel aliases
\setlanguagealias{slovenian}{slovene}
-\define@boolkey{slovenian}[slovenian@]{localalph}[true]{}
+\DeclareKeys[polyglossia/gloss/slovenian]
+ {
+ localalph.if = slovenian@localalph,
+ localalph.default:n = true
+ }
% Register default options
-\xpg@initialize@gloss@options{slovenian}{localalph=false}
+\InitializeGlossOptions{slovenian}{localalph=false}
\def\captionsslovenian{%
@@ -26041,7 +26060,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-sorbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-sorbian.ldf}[polyglossia: module for Sorbian]
@@ -26069,60 +26088,40 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias[variant=upper]{sorbian}{uppersorbian}
\def\sorbian@variant{usorbian}
-\define@choicekey*+{sorbian}{variant}[\xpg@val\xpg@nr]{upper,lower}[upper]{%
- \ifcase\xpg@nr\relax
- % upper:
- \def\sorbian@variant{usorbian}%
- \SetLanguageKeys{sorbian}{language=Upper Sorbian,langtag=USB,babelname=uppersorbian,bcp47=hsb,bcp47-language=hsb}%
- \xpg@fontsetup@latin{sorbian}%
- % Check if \l@usorbian is defined. If not, try to set it to some variety
- % (specific order as in the csv list below), or null language if everything fails
- \xpg@ifdefined{usorbian}{}{%
- \def\do##1{%
- \xpg@ifdefined{##1}%
- {\csletcs{l@usorbian}{l@##1}\listbreak}%
- {}%
- }%
- \docsvlist{uppersorbian}
- \xpg@ifdefined{usorbian}{}{%
- \xpg@warning{No hyphenation patterns for Upper Sorbian found\MessageBreak
- I will use the 'null' language instead}%
- \adddialect\l@usorbian0%
- }
- }%
- \or
- % lower:
- \def\sorbian@variant{lsorbian}%
- \SetLanguageKeys{sorbian}{language=Lower Sorbian,langtag=LSB,babelname=lowersorbian,bcp47=dsb,bcp47-language=dsb}%
- \xpg@fontsetup@latin{sorbian}%
- % Check if \l@lsorbian is defined. If not, try to set it to some variety
- % (specific order as in the csv list below), or null language if everything fails
- \xpg@ifdefined{lsorbian}{}{%
- \def\do##1{%
- \xpg@ifdefined{##1}%
- {\csletcs{l@lsorbian}{l@##1}\listbreak}%
- {}%
- }%
- \docsvlist{lowersorbian,Lsorbian,usorbian,uppersorbian}
- \xpg@ifdefined{lsorbian}{}{%
- \xpg@warning{No hyphenation patterns for Lower Sorbian found\MessageBreak
- I will use the 'null' language instead}%
- \adddialect\l@lsorbian0%
- }
- }%
- \fi
- \xpg@info{Option: sorbian, variant=\xpg@val}%
-}{\xpg@warning{Unknown sorbian variant `#1'}}
-
-\define@boolkey{sorbian}[sorbian@]{olddate}[true]{}
+\DeclareKeys[polyglossia/gloss/sorbian]
+ {
+ olddate.if = sorbian@olddate,
+ olddate.default:n = true,
+ variant.choice:,
+ variant / upper.code =
+ {%
+ \def\sorbian@variant{usorbian}%
+ \SetLanguageKeys{sorbian}{language=Upper Sorbian,langtag=USB,babelname=uppersorbian,bcp47=hsb,bcp47-language=hsb}%
+ \SetupLatinPolyglossiaFont{sorbian}%
+ % Check if \l@usorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list), or null language if everything fails
+ \TryPatternWithFallback{usorbian}{uppersorbian}%
+ },
+ variant / lower.code =
+ {%
+ \def\sorbian@variant{lsorbian}%
+ \SetLanguageKeys{sorbian}{language=Lower Sorbian,langtag=LSB,babelname=lowersorbian,bcp47=dsb,bcp47-language=dsb}%
+ \SetupLatinPolyglossiaFont{sorbian}%
+ % Check if \l@lsorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list), or null language if everything fails
+ \TryPatternWithFallback{lsorbian}{lowersorbian,Lsorbian,usorbian,uppersorbian}%
+ },
+ variant.default:n = upper,
+ variant/unknown.code = \xpg@warning{Unknown sorbian variant `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{sorbian}{variant=upper,olddate=false}
+\InitializeGlossOptions{sorbian}{variant=upper,olddate=false}
\def\sorbian@language{%
- \polyglossia@setup@language@patterns{\sorbian@variant}%
+ \SetupPolyglossiaLangPatterns{\sorbian@variant}%
}%
@@ -26232,7 +26231,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-spanish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-spanish.ldf}[polyglossia: module for Spanish]
@@ -26261,52 +26260,58 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@spanish@mexico
\@spanish@mexicofalse
-\define@choicekey*+{spanish}{variant}[\xpg@val\xpg@nr]{spanish,mexican}[spanish]{%
- \ifcase\xpg@nr\relax
- % spanish:
- \@spanish@mexicofalse%
- \SetLanguageKeys{spanish}{babelname=spanish,bcp47=es-ES,bcp47-region=ES}%
- \or
- % mexican:
- \@spanish@mexicotrue%
- \SetLanguageKeys{spanish}{babelname=spanishmx,bcp47=es-MX,bcp47-region=MX}%
- \fi
- \xpg@info{Option: spanish, variant=\xpg@val}%
-}{\xpg@warning{Unknown spanish variant `#1'}}
% Localized math operators à la babel
\newif\ifspanish@accentedoperators
\newif\ifspanish@spacedoperators
\newif\ifspanish@locoperators
-\define@choicekey*+{spanish}{spanishoperators}[\xpg@val\xpg@nr]{all,accented,spaced,none}[all]{%
- \ifcase\xpg@nr\relax
- % all:
- \spanish@locoperatorstrue%
- \spanish@accentedoperatorstrue%
- \spanish@spacedoperatorstrue%
- \or
- % accented:
- \spanish@locoperatorsfalse%
- \spanish@accentedoperatorstrue%
- \spanish@spacedoperatorsfalse%
- \or
- % spaced:
- \spanish@locoperatorsfalse%
- \spanish@accentedoperatorsfalse%
- \spanish@spacedoperatorstrue%
- \or
- % none:
- \spanish@locoperatorsfalse%
- \spanish@accentedoperatorsfalse%
- \spanish@spacedoperatorsfalse%
- \fi
- \xpg@info{Option: Spanish, spanishoperators=\xpg@val}%
-}{\xpg@warning{Unknown spanishoperators value `#1'}}
-
+\DeclareKeys[polyglossia/gloss/spanish]
+ {
+ variant.choice:,
+ variant / spanish.code =
+ {%
+ \@spanish@mexicofalse
+ \SetLanguageKeys{spanish}{babelname=spanish,bcp47=es-ES,bcp47-region=ES}%
+ },
+ variant / mexican.code =
+ {%
+ \@spanish@mexicotrue
+ \SetLanguageKeys{spanish}{babelname=spanishmx,bcp47=es-MX,bcp47-region=MX}%
+ },
+ variant.default:n = spanish,
+ variant/unknown.code = \xpg@warning{Unknown spanish variant `#1'},
+ spanishoperators.choice:,
+ spanishoperators / all.code =
+ {%
+ \spanish@locoperatorstrue
+ \spanish@accentedoperatorstrue
+ \spanish@spacedoperatorstrue
+ },
+ spanishoperators / accented.code =
+ {%
+ \spanish@locoperatorsfalse
+ \spanish@accentedoperatorstrue
+ \spanish@spacedoperatorsfalse
+ },
+ spanishoperators / spaced.code =
+ {%
+ \spanish@locoperatorsfalse
+ \spanish@accentedoperatorsfalse
+ \spanish@spacedoperatorstrue
+ },
+ spanishoperators / none.code =
+ {%
+ \spanish@locoperatorsfalse
+ \spanish@accentedoperatorsfalse
+ \spanish@spacedoperatorsfalse
+ },
+ spanishoperators.default:n = all,
+ spanishoperators/unknown.code = \xpg@warning{Unknown spanishoperators value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{spanish}{variant=spanish,spanishoperators=none}
+\InitializeGlossOptions{spanish}{variant=spanish,spanishoperators=none}
\let\xpg@save@lim\lim
\let\xpg@save@limsup\limsup
@@ -26472,13 +26477,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-spanishmx.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-spanishmx.ldf}[polyglossia: module for Mexican Spanish]
% We provide this as a babel alias
-\xpg@load@master@language{spanish}
+\InheritGlossFile{spanish}
% \end{macrocode}
% \iffalse
@@ -26489,7 +26494,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-swedish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-swedish.ldf}[polyglossia: module for Swedish]
@@ -26554,13 +26559,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-swissgerman.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-swissgerman.ldf}[polyglossia: module for Swiss German (old spelling)]
% We provide this as a babel alias
-\xpg@load@master@language{german}
+\InheritGlossFile{german}
% \end{macrocode}
% \iffalse
@@ -26571,7 +26576,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-syriac.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-syriac.ldf}[polyglossia: module for Syriac]
@@ -26595,34 +26600,37 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{syriac}{syr}
-\def\syriacnumber#1{\@syriacnumber{#1}}%
+\def\syriacnumber#1{\@syriacnumber{#1}}
\newif\if@eastern@numerals
-\define@choicekey*+{syriac}{numerals}[\xpg@val\xpg@nr]{eastern,western,abjad}[eastern]{%
- \ifcase\xpg@nr\relax
- % eastern:
- \@eastern@numeralstrue
- \SetLanguageKeys{syriac}{bcp47-extension-u=nu-syrc}%
- \or
- % western:
- \@eastern@numeralsfalse
- \SetLanguageKeys{syriac}{bcp47-extension-u=nu-latn}%
- \or
- % abjad:
- \let\syriacnumber\abjadsyriac%
- \fi
- \xpg@info{Option: Syriac, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Syriac numerals option `#1'}}
-
\newif\ifsyriac@customsep\syriac@customsepfalse
\def\xpg@sepmark{}
-\define@key{syriac}{sectionsep}[.]{%
- \syriac@customseptrue%
- \gdef\xpg@sepmark{#1}%
-}
+
+\DeclareKeys[polyglossia/gloss/syriac]
+ {
+ sectionsep.code = \gdef\xpg@sepmark{#1}\syriac@customseptrue,
+ sectionsep.default:n = .,
+ numerals.choice:,
+ numerals / eastern.code =
+ {%
+ \@eastern@numeralstrue
+ \SetLanguageKeys{syriac}{bcp47-extension-u=nu-syrc}%
+ },
+ numerals / western.code =
+ {%
+ \@eastern@numeralsfalse
+ \SetLanguageKeys{syriac}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / abjad.code =
+ {%
+ \let\syriacnumber\abjadsyriac
+ },
+ numerals.default:n = eastern,
+ numerals/unknown.code = \xpg@warning{Unknown Syriac numerals option `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{syriac}{numerals=western}
+\InitializeGlossOptions{syriac}{numerals=western}
%\define@key{polyglossia}{syriaclocale}[default]{%
% \def\@syriac@locale{#1}}
@@ -26709,13 +26717,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\IfCharIsAvailableTF{0661}%
{\@ensure@LTR{\protect\arabicdigits{\number#1}}}%
{\@ensure@LTR{\arabicdigits{\number#1}}
- \ifcsdef{arabicfont}%
- {\@ensure@LTR{\protect\arabicdigits{\number#1}}%
- \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs:
- I am using \string\arabicfont instead}}%
+ \@ifundefined{arabicfont}%
{\number#1%%% <---changed from \RL{\protect\reset@font\protect\number#1}%
\xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs:
since \string\arabicfont is not defined, we'll use Western numerals instead}}%
+ {\@ensure@LTR{\protect\arabicdigits{\number#1}}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs:
+ I am using \string\arabicfont instead}}%
}%
\else
%%\RL{\protect\reset@font\number#1}%
@@ -26753,16 +26761,16 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nosyriac@xetex@capsformat{%
- \ifcsdef{xpg@save@sepmark}{%
+ \ifcsname xpg@save@sepmark\endcsname%
\SepMark{\xpg@save@sepmark}
- }{}%
+ \fi%
}
\def\syriac@luatex@capsformat{%
%
% change chapter and part headings
\ifsyriac@customsep
- \ifcsdef{chapter}{%
+ \ifcsname chapter\endcsname%
\let\xpg@save@thesection\thesection%
\renewcommand*\thesection{\thechapter\xpg@sepmark\@arabic\c@section}
\let\xpg@save@theequation\theequation%
@@ -26774,7 +26782,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\xpg@save@thetable\thetable%
\renewcommand*\thetable{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@table}
- }{}
+ \fi%
\let\xpg@save@thesubsection\thesubsection%
\renewcommand\thesubsection
{\thesection\xpg@sepmark\@arabic\c@subsection}
@@ -26789,30 +26797,30 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nosyriac@luatex@capsformat{%
- \ifcsdef{xpg@save@thesection}{%
+ \ifcsname xpg@save@thesection\endcsname%
\let\thesection\xpg@save@thesection%
- }{}%
- \ifcsdef{xpg@save@theequation}{%
+ \fi%
+ \ifcsname xpg@save@theequation\endcsname%
\let\theequation\xpg@save@theequation%
- }{}%
- \ifcsdef{xpg@save@thefigure}{%
+ \fi%
+ \ifcsname xpg@save@thefigure\endcsname%
\let\thefigure\xpg@save@thefigure%
- }{}%
- \ifcsdef{xpg@save@thetable}{%
+ \fi%
+ \ifcsname xpg@save@thetable\endcsname%
\let\thetable\xpg@save@thetable%
- }{}%
- \ifcsdef{xpg@save@thesubsection}{%
+ \fi%
+ \ifcsname xpg@save@thesubsection\endcsname%
\let\thesubsection\xpg@save@thesubsection%
- \ifcsdef{xpg@save@thesubsubsection}{%
+ \ifcsname xpg@save@thesubsubsection\endcsname%
\let\thesubsubsection\xpg@save@thesubsubsection%
- }{}%
- }{}%
- \ifcsdef{xpg@save@theparagraph}{%
+ \fi%
+ \fi%
+ \ifcsname xpg@save@theparagraph\endcsname%
\let\theparagraph\xpg@save@theparagraph%
- }{}%
- \ifcsdef{xpg@save@thesubparagraph}{%
+ \fi%
+ \ifcsname xpg@save@thesubparagraph\endcsname%
\let\thesubparagraph\xpg@save@thesubparagraph%
- }{}%
+ \fi%
}
\def\blockextras@syriac{%
@@ -26844,7 +26852,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-tamil.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-tamil.ldf}[polyglossia: module for Tamil]
@@ -26914,7 +26922,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-telugu.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-telugu.ldf}[polyglossia: module for Telugu]
@@ -26987,7 +26995,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-thai.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-thai.ldf}[polyglossia: module for Thai]
%% This is partly based on thai-latex for Babel:
@@ -27018,19 +27026,25 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@thai@numerals
\def\tmp@thai{thai}
-\define@key{thai}{numerals}[arabic]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@thai
- \@thai@numeralstrue%
- \SetLanguageKeys{thai}{bcp47-extension-u=nu-thai}%
- \else
- \@thai@numeralsfalse%
- \SetLanguageKeys{thai}{bcp47-extension-u=nu-latn}%
- \fi
-}
+
+\DeclareKeys[polyglossia/gloss/thai]
+ {
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \@thai@numeralsfalse
+ \SetLanguageKeys{thai}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / thai.code =
+ {%
+ \@thai@numeralstrue
+ \SetLanguageKeys{thai}{bcp47-extension-u=nu-thai}%
+ },
+ numerals.default:n = arabic,
+ }
% Register default options
-\xpg@initialize@gloss@options{thai}{numerals=arabic}
+\InitializeGlossOptions{thai}{numerals=arabic}
\def\captionsthai{%
\def\refname{หนังสืออ้างอิง}%
@@ -27145,7 +27159,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-tibetan.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-tibetan.ldf}[polyglossia: module for Tibetan]
%% Copyright 2013 Elie Roux
@@ -27171,20 +27185,18 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*{tibetan}{bo}
\newif\if@tibetan@numerals
-\def\tmp@tibetan{tibetan}
-\define@key{tibetan}{numerals}[tibetan]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@tibetan
- \@tibetan@numeralstrue%
- \SetLanguageKeys{tibetan}{bcp47-extension-u=nu-tibt}%
- \else
- \@tibetan@numeralsfalse%
- \SetLanguageKeys{tibetan}{bcp47-extension-u=nu-latn}%
- \fi%
-}
+\DeclareKeys[polyglossia/gloss/tibetan]
+ {
+ numerals.choice:,
+ numerals/tibetan.code = \@tibetan@numeralstrue
+ \SetLanguageKeys{tibetan}{bcp47-extension-u=nu-tibt},
+ numerals/arabic.code = \@tibetan@numeralsfalse
+ \SetLanguageKeys{tibetan}{bcp47-extension-u=nu-latn},
+ numerals.default:n = tibetan
+ }
\ifluatex
- \newluatexattribute\xpg@tibteol %
+ \newattribute\xpg@tibteol %
\directlua{polyglossia.load_tibt_eol()}%
\fi
@@ -27209,7 +27221,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
% Register default options
-\xpg@initialize@gloss@options{tibetan}{numerals=tibetan}
+\InitializeGlossOptions{tibetan}{numerals=tibetan}
% some are known, but very few
% a few come from "Standardizing Tibetan Terms of Information Technology"
@@ -27371,7 +27383,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-turkish.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-turkish.ldf}[polyglossia: module for Turkish]
\RequirePackage{hijrical}
@@ -27489,7 +27501,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-turkmen.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-turkmen.ldf}[polyglossia: module for Turkmen]
%% Translations provided by Nazar Annagurban <nazartm at gmail dot com>
@@ -27547,12 +27559,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ug.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ug.ldf}[polyglossia: module for ug (Uyghur)]
% BCP 47 tag for Uyghur
-\xpg@load@master@language{uyghur}
+\InheritGlossFile{uyghur}
% \end{macrocode}
% \iffalse
@@ -27563,7 +27575,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-ukrainian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-ukrainian.ldf}[polyglossia: module for Ukrainian]
% Strings taken from Babel
@@ -27591,51 +27603,52 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\ifcyrillic@numerals
\newif\ifcyrillic@asbuk@numerals
-\define@choicekey*+{ukrainian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
- \ifcase\xpg@nr\relax
- % arabic:
- \cyrillic@numeralsfalse%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-latn}%
- \or
- % cyrillic:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-trad:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralsfalse%
- \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
- \or
- % cyrillic-alph:
- \cyrillic@numeralstrue%
- \cyrillic@asbuk@numeralstrue%
- \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
- \fi
- \xpg@info{Option: Ukrainian, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Ukrainian numerals value `#1'}}
-
-% Define some math functions
-\define@boolkey{ukrainian}[ukrainian@]{mathfunctions}[true]{}
+\DeclareKeys[polyglossia/gloss/ukrainian]
+ {
+ babelshorthands.if = ukrainian@babelshorthands,
+ babelshorthands.default:n = true,
+ mathfunctions.if = ukrainian@mathfunctions,
+ mathfunctions.default:n = true,
+ numerals.choice:,
+ numerals / arabic.code =
+ {%
+ \cyrillic@numeralsfalse
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-latn}%
+ },
+ numerals / cyrillic.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-trad.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralsfalse
+ \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals / cyrillic-alph.code =
+ {%
+ \cyrillic@numeralstrue
+ \cyrillic@asbuk@numeralstrue
+ \SetLanguageKeys{ukrainian}{bcp47-extension-u=nu-cyrl}%
+ },
+ numerals.default:n = arabic,
+ numerals/unknown.code = \xpg@warning{Unknown Ukrainian numerals value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{ukrainian}{numerals=arabic,mathfunctions=true}
-
-\define@boolkey{ukrainian}[ukrainian@]{babelshorthands}[true]{}
+\InitializeGlossOptions{ukrainian}{numerals=arabic,mathfunctions=true}
\ifsystem@babelshorthands
- \setkeys{ukrainian}{babelshorthands=true}
+ \SetGlossOptions{ukrainian}{babelshorthands=true}
\else
- \setkeys{ukrainian}{babelshorthands=false}
+ \SetGlossOptions{ukrainian}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \shorthandoff{"}%
-}{}
+\InitializeBabelShorthands
\def\ukrainian@shorthands{%
\xpg@activate@shorthands%
@@ -27862,13 +27875,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-uppersorbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-uppersorbian.ldf}[polyglossia: module for Upper Sorbian]
% We provide this as a babel alias
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -27879,7 +27892,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-urdu.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
%%% Adapted from a file contributed by Kamal Abdali
\ProvidesFile{gloss-urdu.ldf}[polyglossia: module for Urdu]
@@ -27906,52 +27919,46 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setlanguagealias*{urdu}{ur}
\newif\if@western@numerals
-\define@choicekey*+{urdu}{numerals}[\xpg@val\xpg@nr]{eastern,western}[eastern]{%
- \ifcase\xpg@nr\relax
- % eastern:
- \@western@numeralsfalse%
- \SetLanguageKeys{urdu}{bcp47-extension-u=nu-arab}%
- \or
- % western:
- \@western@numeralstrue%
- \SetLanguageKeys{urdu}{bcp47-extension-u=nu-latn}%
- \fi
- \xpg@info{Option: Urdu, numerals=\xpg@val}%
-}{\xpg@warning{Unknown Urdu numerals option `#1'}}
-
\newif\ifurdu@customsep\urdu@customsepfalse
\def\xpg@sepmark{}
-\define@key{urdu}{sectionsep}[.]{%
- \urdu@customseptrue%
- \gdef\xpg@sepmark{#1}%
-}
-
-%this is needed for \abjad in arabicnumbers.sty
-\define@boolkey{urdu}[urdu@]{abjadjimnotail}[true]{%
- \ifurdu@abjadjimnotail
- \abjad@jim@notailtrue%
- \else
- \abjad@jim@notailfalse
- \fi%
-}
-
\newif\if@hijrical
-\define@choicekey*+{urdu}{calendar}[\xpg@val\xpg@nr]{gregorian,hijri}[gregorian]{%
- \ifcase\xpg@nr\relax
- % gregorian:
- \@hijricalfalse
- \or
- % hijri:
- \@hijricaltrue
- \fi
- \xpg@info{Option: Urdu, calendar=\xpg@val}%
-}{\xpg@warning{Unknown Urdu calendar option `#1'}}
-\define@key{urdu}{hijricorrection}[0]{%
- \gdef\urdu@hijri@correction{#1}}%
+\DeclareKeys[polyglossia/gloss/urdu]
+ {
+ abjadjimnotail.if = abjad@jim@notail,
+ abjadjimnotail.default:n = true,
+ sectionsep.code = \gdef\xpg@sepmark{#1}\urdu@customseptrue,
+ sectionsep.default:n = .,
+ hijricorrection.code = \gdef\urdu@hijri@correction{#1},
+ hijricorrection.default:n = 0,
+ calendar.choice:,
+ calendar / gregorian.code =
+ {%
+ \@hijricalfalse
+ },
+ calendar / hijri.code =
+ {%
+ \@hijricaltrue
+ },
+ calendar.default:n = gregorian,
+ calendar/unknown.code = \xpg@warning{Unknown Urdu calendar option `#1'},
+ numerals.choice:,
+ numerals / eastern.code =
+ {%
+ \@western@numeralsfalse
+ \SetLanguageKeys{urdu}{bcp47-extension-u=nu-arab}%
+ },
+ numerals / western.code =
+ {%
+ \@western@numeralstrue
+ \SetLanguageKeys{urdu}{bcp47-extension-u=nu-latn}%
+ },
+ numerals.default:n = eastern,
+ numerals/unknown.code = \xpg@warning{Unknown Urdu numerals option `#1'}
+ }
% This should set the defaults
-\setkeys{urdu}{calendar,numerals,hijricorrection}
+\SetGlossOptions{urdu}{calendar,numerals,hijricorrection}
\def\urdugregmonth#1{\ifcase#1%
\or جنوری\or فروری\or مارچ\or اپریل\or مئی\or جون\or جولائی\or اگست\or ستمبر\or اکتوبر\or نومبر\or دسمبر\fi}
@@ -28038,16 +28045,16 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nourdu@xetex@capsformat{%
- \ifcsdef{xpg@save@sepmark}{%
+ \ifcsname xpg@save@sepmark\endcsname%
\SepMark{\xpg@save@sepmark}
- }{}%
+ \fi%
}
\def\urdu@luatex@capsformat{%
%
% change chapter and part headings
\ifurdu@customsep
- \ifcsdef{chapter}{%
+ \ifcsname chapter\endcsname%
\let\xpg@save@thesection\thesection%
\renewcommand*\thesection{\thechapter\xpg@sepmark\@arabic\c@section}
\let\xpg@save@theequation\theequation%
@@ -28059,7 +28066,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\xpg@save@thetable\thetable%
\renewcommand*\thetable{%
\ifnum\c@chapter>\z@\thechapter\xpg@sepmark\fi\@arabic\c@table}
- }{}
+ \fi%
\let\xpg@save@thesubsection\thesubsection%
\renewcommand\thesubsection
{\thesection\xpg@sepmark\@arabic\c@subsection}
@@ -28074,30 +28081,30 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
}
\def\nourdu@luatex@capsformat{%
- \ifcsdef{xpg@save@thesection}{%
+ \ifcsname xpg@save@thesection\endcsname%
\let\thesection\xpg@save@thesection%
- }{}%
- \ifcsdef{xpg@save@theequation}{%
+ \fi%
+ \ifcsname xpg@save@theequation\endcsname%
\let\theequation\xpg@save@theequation%
- }{}%
- \ifcsdef{xpg@save@thefigure}{%
+ \fi%
+ \ifcsname xpg@save@thefigure\endcsname%
\let\thefigure\xpg@save@thefigure%
- }{}%
- \ifcsdef{xpg@save@thetable}{%
+ \fi%
+ \ifcsname xpg@save@thetable\endcsname%
\let\thetable\xpg@save@thetable%
- }{}%
- \ifcsdef{xpg@save@thesubsection}{%
+ \fi%
+ \ifcsname xpg@save@thesubsection\endcsname%
\let\thesubsection\xpg@save@thesubsection%
- \ifcsdef{xpg@save@thesubsubsection}{%
+ \ifcsname xpg@save@thesubsubsection\endcsname%
\let\thesubsubsection\xpg@save@thesubsubsection%
- }{}%
- }{}%
- \ifcsdef{xpg@save@theparagraph}{%
+ \fi%
+ \fi%
+ \ifcsname xpg@save@theparagraph\endcsname%
\let\theparagraph\xpg@save@theparagraph%
- }{}%
- \ifcsdef{xpg@save@thesubparagraph}{%
+ \fi%
+ \ifcsname xpg@save@thesubparagraph\endcsname%
\let\thesubparagraph\xpg@save@thesubparagraph%
- }{}%
+ \fi%
}
\def\blockextras@urdu{%
@@ -28129,14 +28136,14 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-usorbian.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-usorbian.ldf}[polyglossia: module for Upper Sorbian]
% We only provide this gloss for babel compatibility. Since usorbian is
% a sorbian variety, we use 'sorbian' with variant 'upper' now.
-\xpg@load@master@language{sorbian}
+\InheritGlossFile{sorbian}
% \end{macrocode}
% \iffalse
@@ -28147,7 +28154,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-uyghur.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-uyghur.ldf}[polyglossia: module for Uyghur]
%% Translations provided by Osman Tursun (Github Account: neouyghur)
@@ -28171,62 +28178,72 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\newif\if@uyghur@swapcaptions
\newif\if@uyghur@swapheadings
\newif\if@uyghur@swapheaders
-\define@choicekey*+{uyghur}{swapstrings}[\xpg@val\xpg@nr]{all,captions,headings,headers,hheaders,none}[all]{%
- \ifcase\xpg@nr\relax
- % all:
- \@uyghur@swapcaptionstrue%
- \@uyghur@swapheadingstrue%
- \@uyghur@swapheaderstrue%
- \or
- % captions:
- \@uyghur@swapcaptionstrue%
- \@uyghur@swapheadingsfalse%
- \@uyghur@swapheadersfalse%
- \or
- % headings:
- \@uyghur@swapcaptionsfalse%
- \@uyghur@swapheadingstrue%
- \@uyghur@swapheadersfalse%
- \or
- % headers:
- \@uyghur@swapcaptionsfalse%
- \@uyghur@swapheadingsfalse%
- \@uyghur@swapheaderstrue%
- \or
- % hheaders:
- \@uyghur@swapcaptionsfalse%
- \@uyghur@swapheadingstrue%
- \@uyghur@swapheaderstrue%
- \or
- % none:
- \@uyghur@swapcaptionsfalse%
- \@uyghur@swapheadingsfalse%
- \@uyghur@swapheadersfalse%
- \fi
- \xpg@info{Option: Uyghur, swapstrings=\xpg@val}%
-}{\xpg@warning{Unknown Uyghur swapstrings value `#1'}}
-
\newif\if@uyghur@ordchapter
\newif\if@uyghur@romchapter
-\define@choicekey*+{uyghur}{chapterformat}[\xpg@val\xpg@nr]{ordinal,roman,arabic}[ordinal]{%
- \ifcase\xpg@nr\relax
- % ordinal:
- \@uyghur@ordchaptertrue%
- \@uyghur@romchapterfalse%
- \or
- % roman:
- \@uyghur@ordchapterfalse%
- \@uyghur@romchaptertrue%
- \or
- % arabic:
- \@uyghur@ordchapterfalse%
- \@uyghur@romchapterfalse%
- \fi
- \xpg@info{Option: Uyghur, chapterformat=\xpg@val}%
-}{\xpg@warning{Unknown Uyghur chapterformat value `#1'}}
+
+\DeclareKeys[polyglossia/gloss/uyghur]
+ {
+ chapterformat.choice:,
+ chapterformat / ordinal.code =
+ {%
+ \@uyghur@ordchaptertrue
+ \@uyghur@romchapterfalse
+ },
+ chapterformat / roman.code =
+ {%
+ \@uyghur@ordchapterfalse
+ \@uyghur@romchaptertrue
+ },
+ chapterformat / arabic.code =
+ {%
+ \@uyghur@ordchapterfalse
+ \@uyghur@romchapterfalse
+ },
+ chapterformat.default:n = ordinal,
+ chapterformat/unknown.code = \xpg@warning{Unknown Uyghur chapterformat value `#1'},
+ swapstrings.choice:,
+ swapstrings / all.code =
+ {%
+ \@uyghur@swapcaptionstrue
+ \@uyghur@swapheadingstrue
+ \@uyghur@swapheaderstrue
+ },
+ swapstrings / captions.code =
+ {%
+ \@uyghur@swapcaptionstrue
+ \@uyghur@swapheadingsfalse
+ \@uyghur@swapheadersfalse
+ },
+ swapstrings / headings.code =
+ {%
+ \@uyghur@swapcaptionsfalse
+ \@uyghur@swapheadingstrue
+ \@uyghur@swapheadersfalse
+ },
+ swapstrings / headers.code =
+ {%
+ \@uyghur@swapcaptionsfalse
+ \@uyghur@swapheadingsfalse
+ \@uyghur@swapheaderstrue
+ },
+ swapstrings / hheaders.code =
+ {%
+ \@uyghur@swapcaptionsfalse
+ \@uyghur@swapheadingstrue
+ \@uyghur@swapheaderstrue
+ },
+ swapstrings / none.code =
+ {%
+ \@uyghur@swapcaptionsfalse
+ \@uyghur@swapheadingsfalse
+ \@uyghur@swapheadersfalse
+ },
+ swapstrings.default:n = all,
+ swapstrings/unknown.code = \xpg@warning{Unknown Uyghur swapstrings value `#1'}
+ }
% Register default options
-\xpg@initialize@gloss@options{uyghur}{swapstrings=all,chapterformat=ordinal}
+\InitializeGlossOptions{uyghur}{swapstrings=all,chapterformat=ordinal}
\def\captionsuyghur{%
@@ -28274,120 +28291,104 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% change chapter and part headings
\if@uyghur@swapheadings
% With titlesec
- \ifcsdef{titleformat}{%
- \ifcsdef{H@old@part}{% Hyperref
- \let\xpg@save@part@format\H@old@part%
- \patchcmd{\H@old@part}%
- {\partname\nobreakspace\thepart}%
- {\the@uyghur@part\nobreakspace\partname}%
- {}%
- {\xpg@warning{Failed to patch part for Uyghur}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\the@uyghur@part\nobreakspace\partname}%
- {}%
- {\xpg@warning{Failed to patch part for Uyghur}}%
- }{}%
- }
- \ifcsdef{chapter}{%
- \titleformat\chapter[display]%
- {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
- {\the@uyghur@chapter\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
- }{}%
- }{% (not \ifdefined\titleformat)
+ \@ifundefined{titleformat}{%
% With KOMA
- \ifcsdef{sectionformat}{%
- \ifcsdef{partformat}{%
- \let\xpg@save@part@format\partformat%
- \renewcommand{\partformat}{\the@uyghur@part~\partname}%
- }{}%
- \ifcsdef{chapterformat}{%
- \let\xpg@save@chap@format\chapterformat%
- \renewcommand{\chapterformat}{\mbox{\the@uyghur@chapter%
- \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
- }{}%
- }{% (not \ifdefined\sectionformat)
+ \@ifundefined{sectionformat}{%
% With memoir
- \ifcsdef{@memptsize}{%
- \ifcsdef{@makechapterhead}{%
- \let\xpg@save@chap@format\@makechapterhead%
- \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
- {\chapnumfont\the@uyghur@chapter\chapternamenum\printchaptername}%
- {}%
- {\xpg@warning{Failed to patch chapter for Uyghur}}%
- }{}%
- \ifcsdef{H@old@part}{% Hyperref
- \let\xpg@save@part@format\H@old@part%
- \patchcmd{\H@old@part}{\printpartname \partnamenum \printpartnum}%
- {\chapnumfont\the@uyghur@part\partnamenum\printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for Uyghur}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
- {\chapnumfont\the@uyghur@part\partnamenum\printpartname}%
- {}%
- {\xpg@warning{Failed to patch part for Uyghur}}%
- }{}%
- }%
- }{% (not \ifdefined\@memptsize)
+ \@ifundefined{@memptsize}{%
% With standard classes
- \ifcsdef{@makechapterhead}{%
+ \@ifundefined{@makechapterhead}{}{%
\let\xpg@save@chap@format\@makechapterhead%
\patchcmd{\@makechapterhead}%
{\@chapapp\space \thechapter}%
{\the@uyghur@chapter\space \@chapapp}%
{}%
{\xpg@warning{Failed to patch chapter for Uyghur}}%
- }{}%
- \ifcsdef{H@old@part}{% Hyperref
+ }%
+ \@ifundefined{H@old@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\the@uyghur@part\nobreakspace\partname}%
+ {}%
+ {\@ifundefined{part}{}{\xpg@warning{Failed to patch part for Uyghur}}}%
+ }% (end \ifdefined\@part)
+ }{% Hyperref
\let\xpg@save@part@format\H@old@part%
\patchcmd{\H@old@part}%
{\partname\nobreakspace\thepart}%
{\the@uyghur@part\nobreakspace\partname}%
{}%
{\xpg@warning{Failed to patch part for Uyghur}}%
- }{% not hyperref
- \ifcsdef{@part}{%
- \let\xpg@save@part@format\@part%
- \patchcmd{\@part}%
- {\partname\nobreakspace\thepart}%
- {\the@uyghur@part\nobreakspace\partname}%
- {}%
- {\ifcsdef{part}{\xpg@warning{Failed to patch part for Uyghur}}{}}%
- }{}% (end \ifdefined\@part)
}% (end not hyperref)
- }% (end \ifdefined\@memptsize)
- }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\@memptsize)
+ \@ifundefined{@makechapterhead}{}{%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
+ {\chapnumfont\the@uyghur@chapter\chapternamenum\printchaptername}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Uyghur}}%
+ }%
+ \@ifundefined{H@old@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\chapnumfont\the@uyghur@part\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Uyghur}}%
+ }%
+ }{% Hyperref
+ \let\xpg@save@part@format\H@old@part%
+ \patchcmd{\H@old@part}{\printpartname \partnamenum \printpartnum}%
+ {\chapnumfont\the@uyghur@part\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Uyghur}}%
+ }%
+ }% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\sectionformat)
+ \@ifundefined{partformat}{}{%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\the@uyghur@part~\partname}%
+ }%
+ \@ifundefined{chapterformat}{}{%
+ \let\xpg@save@chap@format\chapterformat%
+ \renewcommand{\chapterformat}{\mbox{\the@uyghur@chapter%
+ \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
+ \@ifundefined{H@old@part}{% not hyperref
+ \@ifundefined{@part}{}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\the@uyghur@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Uyghur}}%
+ }%
+ }{% Hyperref
+ \let\xpg@save@part@format\H@old@part%
+ \patchcmd{\H@old@part}%
+ {\partname\nobreakspace\thepart}%
+ {\the@uyghur@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Uyghur}}%
+ }%
+ \@ifundefined{chapter}{}{%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\the@uyghur@chapter\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ }%
}% (end \ifdefined\titleformat)
\fi% (end \if@uyghur@swapheadings)
%
% Change running headers
\if@uyghur@swapheaders
- \ifcsdef{chapterformat}{%
- % With KOMA
- \let\xpg@save@chaptermark@format\chaptermarkformat%
- \renewcommand*\chaptermarkformat{%
- \the@uyghur@chapter\ \IfChapterUsesPrefixLine{\chapapp\enskip}{}}
- }{% (not \ifdefined\chapterformat)
- \ifcsdef{@memptsize}{%
- % With memoir
- \let\xpg@save@chaptermark@format\chaptermark%
- \renewcommand*\chaptermark[1]{%
- \markboth{\memUChead{%
- \ifnum \c@secnumdepth >\m@ne
- \ifbool{@mainmatter}{%
- \the@uyghur@chapter\ \@chapapp\ %
- }{}%
- \fi
- ##1}}{}}%
- }{% (not \ifdefined\@memptsize)
+ \@ifundefined{chapterformat}{%
+ \@ifundefined{@memptsize}{%
% With standard classes
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermark}{}{%
\ifpatchable{\chaptermark}%
{\@chapapp\ \thechapter.}%
{\let\xpg@save@chaptermark@format\chaptermark%
@@ -28397,21 +28398,38 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
{}%
{\xpg@warning{Failed to patch chaptermark for Uyghur}}}%
{}%
- }{}% (end \ifdefined\sectionmark)
- \ifcsdef{sectionmark}{%
- \ifpatchable{\sectionmark}%
- {\thesection.}%
- {\let\xpg@save@sectionmark@format\sectionmark%
- \patchcmd{\sectionmark}%
- {\thesection.}%
- {\thesection}%
- {}%
- {\xpg@warning{Failed to patch sectionmark for Uyghur}}}%
- {}%
- }{}% (end \ifdefined\chaptermark)
+ }% (end \ifdefined\sectionmark)
+ \@ifundefined{sectionmark}{}{%
+ \ifpatchable{\sectionmark}%
+ {\thesection.}%
+ {\let\xpg@save@sectionmark@format\sectionmark%
+ \patchcmd{\sectionmark}%
+ {\thesection.}%
+ {\thesection}%
+ {}%
+ {\xpg@warning{Failed to patch sectionmark for Uyghur}}%
+ }%
+ {}%
+ }% (end \ifdefined\chaptermark)
+ }{% (\ifdefined\@memptsize)
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark%
+ \renewcommand*\chaptermark[1]{%
+ \markboth{\memUChead{%
+ \ifnum \c@secnumdepth >\m@ne
+ \ifbool{@mainmatter}{%
+ \the@uyghur@chapter\ \@chapapp\ %
+ }{}%
+ \fi
+ ##1}}{}}%
}% (end \ifdefined\@memptsize)
+ }{% (\ifdefined\chapterformat)
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat%
+ \renewcommand*\chaptermarkformat{%
+ \the@uyghur@chapter\ \IfChapterUsesPrefixLine{\chapapp\enskip}{}}
}% (end \ifdefined\chapterformat)
- \fi% (end \if@uyghur@swapheaders)
+ \fi% (end \if@uyghur@swapheaders)
}
\def\nouyghur@capsformat{%
@@ -28421,62 +28439,62 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\fnum@figure\xpg@save@fnum@figure%
%
% Reset chapter and part heading
- \ifcsdef{titleformat}{%
+ \@ifundefined{titleformat}{%
+ \@ifundefined{sectionformat}{%
+ % With memoir and standard classes
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{H@old@part}{%
+ \let\@part\xpg@save@part@format%
+ }{%
+ \let\H@old@part\xpg@save@part@format%
+ }%
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\@makechapterhead\xpg@save@chap@format
+ }%
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@part@format}{}{%
+ \let\partformat\xpg@save@part@format
+ }%
+ \@ifundefined{xpg@save@chap@format}{}{%
+ \let\chapterformat\xpg@save@chap@format
+ }%
+ }% (end \ifdefined\sectionformat)
+ }{% (\ifdefined\titleformat)
% With titlesec
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{H@old@part}{%
- \let\H@old@part\xpg@save@part@format%
- }{%
+ \@ifundefined{xpg@save@part@format}{}{%
+ \@ifundefined{H@old@part}{%
\let\@part\xpg@save@part@format%
+ }{%
+ \let\H@old@part\xpg@save@part@format%
}%
- }{}%
- \ifcsdef{chapter}{%
+ }%
+ \@ifundefined{chapter}{}{%
\titleformat\chapter[display]%
{\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
{\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
- }{}%
- }{% (not \ifdefined\titleformat)
- \ifcsdef{sectionformat}{%
- % With KOMA
- \ifcsdef{xpg@save@part@format}{%
- \let\partformat\xpg@save@part@format
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\chapterformat\xpg@save@chap@format
- }{}%
- }{%
- % With memoir and standard classes
- \ifcsdef{xpg@save@part@format}{%
- \ifcsdef{H@old@part}{%
- \let\H@old@part\xpg@save@part@format%
- }{%
- \let\@part\xpg@save@part@format%
- }%
- }{}%
- \ifcsdef{xpg@save@chap@format}{%
- \let\@makechapterhead\xpg@save@chap@format
- }{}%
- }% (end \ifdefined\sectionformat)
+ }%
}% (end \ifdefined\titleformat)
%
% Reset headers
- \ifcsdef{chaptermarkformat}{%
- % With KOMA
- \ifcsdef{xpg@save@chaptermark@format}{%
- \let\chaptermarkformat\xpg@save@chaptermark@format%
- }{}%
- }{%
- \ifcsdef{chaptermark}{%
+ \@ifundefined{chaptermarkformat}{%
+ \@ifundefined{chaptermark}{}{%
% With memoir and standard classes
- \ifcsdef{xpg@save@chaptermark@format}{%
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
\let\chaptermark\xpg@save@chaptermark@format%
- }{}%
- }{}% (end \ifdefined\chaptermark)
- \ifcsdef{sectionmark}{%
- \ifcsdef{xpg@save@sectionmark@format}{%
+ }%
+ }% (end \ifdefined\chaptermark)
+ \@ifundefined{sectionmark}{}{%
+ \@ifundefined{xpg@save@sectionmark@format}{}{%
\let\sectionmark\xpg@save@sectionmark@format%
- }{}%
- }{}% (end \ifdefined\sectionmark)
+ }%
+ }% (end \ifdefined\sectionmark)
+ }{%
+ % With KOMA
+ \@ifundefined{xpg@save@chaptermark@format}{}{%
+ \let\chaptermarkformat\xpg@save@chaptermark@format%
+ }%
}% (end \ifdefined\chapterformat)
}
@@ -28512,22 +28530,22 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\the@uyghur@chapter\thechapter
\def\uyghur@chapterformat{%
- \ifcsdef{part}{%
+ \@ifundefined{part}{}{%
\if@uyghur@ordchapter%
\renewcommand{\the@uyghur@part}{\uyghurord{part}}%
\fi%
\if@uyghur@romchapter%
\renewcommand{\the@uyghur@part}{\Roman{part}}%
\fi%
- }{}%
- \ifcsdef{chapter}{%
+ }%
+ \@ifundefined{chapter}{}{%
\if@uyghur@ordchapter%
\renewcommand{\the@uyghur@chapter}{\uyghurord{chapter}}%
\fi%
\if@uyghur@romchapter%
\renewcommand{\the@uyghur@chapter}{\Roman{chapter}}%
\fi%
- }{}%
+ }%
}
\def\uyghur@numbers{%
@@ -28588,7 +28606,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-vietnamese.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-vietnamese.ldf}[polyglossia: module for Vietnamese]
%% Strings contributed by Daniel Owens < dhowens . pmbx . net >
@@ -28647,7 +28665,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-welsh.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-welsh.ldf}[polyglossia: module for Welsh]
@@ -28664,21 +28682,26 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{welsh}{cy}
-\providebool{welsh@formaldate}
+\@ifundefined{ifwelsh@formaldate}%
+ {\newif\ifwelsh@formaldate}{}
-\define@choicekey*+{welsh}{date}[\xpg@val\xpg@nr]{long,short}[short]{%
- \ifcase\xpg@nr\relax
- % long:
- \welsh@formaldatetrue
- \or
- % accented:
- \welsh@formaldatefalse
- \fi
- \xpg@info{Option: Welsh, date=\xpg@val}%
-}{\xpg@warning{Unknown date value `#1'}}
+\DeclareKeys[polyglossia/gloss/welsh]
+ {
+ date.choice:,
+ date / long.code =
+ {%
+ \welsh@formaldatetrue
+ },
+ date / short.code =
+ {%
+ \welsh@formaldatefalse
+ },
+ date.default:n = short,
+ date/unknown.code = \xpg@warning{Unknown date value `#1'},
+ }
% Register default options
-\xpg@initialize@gloss@options{welsh}{date=short}
+\InitializeGlossOptions{welsh}{date=short}
\def\captionswelsh{%
\def\refname{Cyfeiriadau}%
@@ -28747,13 +28770,13 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-zh-CN.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-zh-CN.ldf}[polyglossia: module for zh-CN (Chinese)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{chinese}
+\InheritGlossFile{chinese}
% \end{macrocode}
% \iffalse
@@ -28764,268 +28787,26 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \subsection{gloss-zh-TW.ldf}
% \begin{macrocode}
-% Language definition file (part of polyglossia v2.1 -- 2024/03/07)
+% Language definition file (part of polyglossia v2.2 -- 2024/07/15)
%
\ProvidesFile{gloss-zh-TW.ldf}[polyglossia: module for zh-TW (Chinese)]
% We provide this as a bcp47-compliant alias
-\xpg@load@master@language{chinese}
+\InheritGlossFile{chinese}
% \end{macrocode}
% \iffalse
%</gloss-zh-TW.ldf>
-%<*arabicdigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{arabicdigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "ArabicDigits"
-
-pass(Unicode)
-U+0030 <> U+0660 ;
-U+0031 <> U+0661 ;
-U+0032 <> U+0662 ;
-U+0033 <> U+0663 ;
-U+0034 <> U+0664 ;
-U+0035 <> U+0665 ;
-U+0036 <> U+0666 ;
-U+0037 <> U+0667 ;
-U+0038 <> U+0668 ;
-U+0039 <> U+0669 ;
-
-% \end{macrocode}
-% \iffalse
-%</arabicdigits.map>
-%<*bengalidigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{bengalidigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "BengaliDigits"
-
-pass(Unicode)
-U+0030 <> U+09E6 ;
-U+0031 <> U+09E7 ;
-U+0032 <> U+09E8 ;
-U+0033 <> U+09E9 ;
-U+0034 <> U+09EA ;
-U+0035 <> U+09EB ;
-U+0036 <> U+09EC ;
-U+0037 <> U+09ED ;
-U+0038 <> U+09EE ;
-U+0039 <> U+09EF ;
-
-% \end{macrocode}
-% \iffalse
-%</bengalidigits.map>
-%<*devanagaridigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{devanagaridigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "DevanagariDigits"
-
-pass(Unicode)
-U+0030 <> U+0966 ;
-U+0031 <> U+0967 ;
-U+0032 <> U+0968 ;
-U+0033 <> U+0969 ;
-U+0034 <> U+096A ;
-U+0035 <> U+096B ;
-U+0036 <> U+096C ;
-U+0037 <> U+096D ;
-U+0038 <> U+096E ;
-U+0039 <> U+096F ;
-
-% \end{macrocode}
-% \iffalse
-%</devanagaridigits.map>
-%<*farsidigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{farsidigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "FarsiDigits"
-
-pass(Unicode)
-U+0030 <> U+06F0 ;
-U+0031 <> U+06F1 ;
-U+0032 <> U+06F2 ;
-U+0033 <> U+06F3 ;
-U+0034 <> U+06F4 ;
-U+0035 <> U+06F5 ;
-U+0036 <> U+06F6 ;
-U+0037 <> U+06F7 ;
-U+0038 <> U+06F8 ;
-U+0039 <> U+06F9 ;
-
-% \end{macrocode}
-% \iffalse
-%</farsidigits.map>
-%<*gurmukhidigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{gurmukhidigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "GurmukhiDigits"
-
-pass(Unicode)
-U+0030 <> U+0A66 ;
-U+0031 <> U+0A67 ;
-U+0032 <> U+0A68 ;
-U+0033 <> U+0A69 ;
-U+0034 <> U+0A6A ;
-U+0035 <> U+0A6B ;
-U+0036 <> U+0A6C ;
-U+0037 <> U+0A6D ;
-U+0038 <> U+0A6E ;
-U+0039 <> U+0A6F ;
-
-% \end{macrocode}
-% \iffalse
-%</gurmukhidigits.map>
-%<*odiadigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{odiadigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "OdiaDigits"
-
-pass(Unicode)
-U+0030 <> U+0B66 ;
-U+0031 <> U+0B67 ;
-U+0032 <> U+0B68 ;
-U+0033 <> U+0B69 ;
-U+0034 <> U+0B6A ;
-U+0035 <> U+0B6B ;
-U+0036 <> U+0B6C ;
-U+0037 <> U+0B6D ;
-U+0038 <> U+0B6E ;
-U+0039 <> U+0B6F ;
-
-% \end{macrocode}
-% \iffalse
-%</odiadigits.map>
-%<*thaidigits.map>
-% \fi
-% \clearpage
-%
-% \subsection{thaidigits.map}
-% \begin{macrocode}
-; FC ...
-LHSName "Digits"
-RHSName "ThaiDigits"
-
-pass(Unicode)
-U+0030 <> U+0E50 ;
-U+0031 <> U+0E51 ;
-U+0032 <> U+0E52 ;
-U+0033 <> U+0E53 ;
-U+0034 <> U+0E54 ;
-U+0035 <> U+0E55 ;
-U+0036 <> U+0E56 ;
-U+0037 <> U+0E57 ;
-U+0038 <> U+0E58 ;
-U+0039 <> U+0E59 ;
-
-% \end{macrocode}
-% \iffalse
-%</thaidigits.map>
-%<*polyglossia-french.lua>
-% \fi
-% \clearpage
-%
-% \subsection{polyglossia-french.lua}
-% \begin{macrocode}
---
--- polyglossia-punct.lua
--- part of polyglossia v2.1 -- 2024/03/07
---
-
-require('polyglossia-punct')
-
-local function set_left_space(lang, char, kern, rubber)
- polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
-end
-
-local function set_right_space(lang, char, kern, rubber)
- polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
-end
-
-local function activate_french_punct(thincolonspace, autospaceguillemets)
- -- We need different language tags here to make switching of options possible
- -- within a paragraph.
- local lang = "french"
- if thincolonspace then
- lang = lang.."-thincolon"
- end
- if autospaceguillemets then
- lang = lang.."-autospace"
- end
-
- polyglossia.activate_punct(lang)
- polyglossia.clear_spaced_characters(lang)
-
- if thincolonspace then
- set_left_space(lang, ':', 0.5)
- else
- set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
- end
-
- set_left_space(lang, '!', 0.5)
- set_left_space(lang, '?', 0.5)
- set_left_space(lang, ';', 0.5)
- set_left_space(lang, '‼', 0.5)
- set_left_space(lang, '⁇', 0.5)
- set_left_space(lang, '⁈', 0.5)
- set_left_space(lang, '⁉', 0.5)
- set_left_space(lang, '‽', 0.5) -- U+203D (interrobang)
-
- if autospaceguillemets then
- set_left_space(lang, '»', 0.5)
- set_left_space(lang, '›', 0.5)
- set_right_space(lang, '«', 0.5)
- set_right_space(lang, '‹', 0.5)
- end
-end
-
-local function deactivate_french_punct()
- polyglossia.deactivate_punct()
-end
-
-polyglossia.activate_french_punct = activate_french_punct
-polyglossia.deactivate_french_punct = deactivate_french_punct
-% \end{macrocode}
-% \iffalse
-%</polyglossia-french.lua>
-%<*polyglossia-korean.lua>
+%<*polyglossia-cjk-spacing.lua>
% \fi
% \clearpage
%
-% \subsection{polyglossia-korean.lua}
+% \subsection{polyglossia-cjk-spacing.lua}
% \begin{macrocode}
--
--- polyglossia-korean.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- polyglossia-cjk-spacing.lua
+-- part of polyglossia v2.2 -- 2024/07/15
--
local glyph_id = node.id"glyph"
@@ -29033,13 +28814,17 @@ local hbox_id = node.id"hlist"
local vbox_id = node.id"vlist"
local glue_id = node.id"glue"
local penalty_id = node.id"penalty"
-local disc_id = node.id"disc"
+local whatsit_id = node.id"whatsit"
+local math_id = node.id"math"
--
--- attr_korean: variant = plain (0), classic (1), modern (2)
+-- attr_cjk: variant = plain: 0, JP/classic: 1, KR/modern: 2, SC: 3, TC: 4
+--
+local attr_cjk = luatexbase.attributes["xpg@attr@cjkspacing"]
+--
+-- attr_josa: ONLY For Korean. DO NOT declare \newattribute for other langs
--
-local attr_korean = luatexbase.attributes["xpg@attr@korean"]
-local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
+local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
--
-- characters after which linebreak is not allowed
@@ -29088,9 +28873,9 @@ local nobr_after = {
-- characters before which linebreak is not allowed
-- (currently, not much differences among the followings)
-- 1: normal chars
--- 2: hangul jamo vowels and trailing consonants
+-- 2: hangul jamo vowels and trailing consonants plus combinings
-- 3: kana small letters
--- 0: dashes (supress visible spacing)
+-- 0: dashes (suppress visible spacing after this char)
--
local nobr_before = setmetatable({
[0x21] = 1, -- ! EXCLAMATION MARK
@@ -29101,7 +28886,7 @@ local nobr_before = setmetatable({
[0x2D] = 0, -- - HYPHEN-MINUS
[0x2E] = 1, -- . FULL STOP
[0x2F] = 0, -- / SOLIDUS
- [0x3A] = 0, -- : COLON
+ [0x3A] = 1, -- : COLON
[0x3B] = 1, -- ; SEMICOLON
[0x3E] = 1, -- > GREATER-THAN SIGN
[0x3F] = 1, -- ? QUESTION MARK
@@ -29113,11 +28898,11 @@ local nobr_before = setmetatable({
[0xBB] = 1, -- » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
[0x2013] = 0, -- – EN DASH
[0x2014] = 0, -- — EM DASH
- [0x2015] = 1, -- ― HORIZONTAL BAR
+ [0x2015] = 0, -- ― HORIZONTAL BAR
[0x2019] = 1, -- ’ RIGHT SINGLE QUOTATION MARK
[0x201D] = 1, -- ” RIGHT DOUBLE QUOTATION MARK
- [0x2025] = 1, -- ‥ TWO DOT LEADER
- [0x2026] = 1, -- … HORIZONTAL ELLIPSIS
+ [0x2025] = 0, -- ‥ TWO DOT LEADER
+ [0x2026] = 0, -- … HORIZONTAL ELLIPSIS
[0x232A] = 1, -- 〉 RIGHT-POINTING ANGLE BRACKET
[0x3001] = 1, -- 、 IDEOGRAPHIC COMMA
[0x3002] = 1, -- 。 IDEOGRAPHIC FULL STOP
@@ -29149,10 +28934,10 @@ local nobr_before = setmetatable({
[0x308E] = 3, -- ゎ HIRAGANA LETTER SMALL WA
[0x3095] = 3, -- ゕ HIRAGANA LETTER SMALL KA
[0x3096] = 3, -- ゖ HIRAGANA LETTER SMALL KE
- [0x3099] = 1, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309A] = 1, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
- [0x309B] = 1, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309C] = 1, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x3099] = 2, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309A] = 2, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309B] = 2, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309C] = 2, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
[0x309D] = 1, -- ゝ HIRAGANA ITERATION MARK
[0x309E] = 1, -- ゞ HIRAGANA VOICED ITERATION MARK
[0x30A0] = 1, -- ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
@@ -29172,9 +28957,9 @@ local nobr_before = setmetatable({
[0x30FC] = 1, -- ー KATAKANA-HIRAGANA PROLONGED SOUND MARK
[0x30FD] = 1, -- ヽ KATAKANA ITERATION MARK
[0x30FE] = 1, -- ヾ KATAKANA VOICED ITERATION MARK
- [0xFE30] = 1, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
- [0xFE31] = 1, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
- [0xFE32] = 1, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
+ [0xFE30] = 0, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ [0xFE31] = 0, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
+ [0xFE32] = 0, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
[0xFE36] = 1, -- ︶ PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
[0xFE38] = 1, -- ︸ PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
[0xFE3A] = 1, -- ︺ PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
@@ -29201,18 +28986,18 @@ local nobr_before = setmetatable({
[0xFF63] = 1, -- 」 HALFWIDTH RIGHT CORNER BRACKET
[0xFF64] = 1, -- 、 HALFWIDTH IDEOGRAPHIC COMMA
[0xFF65] = 1, -- ・ HALFWIDTH KATAKANA MIDDLE DOT
- [0xFF9E] = 1, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
- [0xFF9F] = 1, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+ [0xFF9E] = 2, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
+ [0xFF9F] = 2, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
}, { __index = function(_,c)
if c >= 0x1160 and c <= 0x11FF then return 2 end
if c >= 0xD7B0 and c <= 0xD7FF then return 2 end
- if c >= 0x302A and c <= 0x302F then return 1 end
+ if c >= 0x302A and c <= 0x302F then return 2 end -- tone marks
if c >= 0x31F0 and c <= 0x31FF then return 3 end
if c >= 0xFF67 and c <= 0xFF70 then return 3 end
- if c >= 0xFE00 and c <= 0xFE0F then return 1 end
+ if c >= 0xFE00 and c <= 0xFE0F then return 2 end -- variation selectors
if c >= 0xFE10 and c <= 0xFE19 and not (c == 0xFE17) then return 1 end
if c >= 0xFE50 and c <= 0xFE58 then return 1 end
- if c >= 0xE0100 and c <= 0xE01EF then return 1 end
+ if c >= 0xE0100 and c <= 0xE01EF then return 2 end -- variation selecters
end
})
@@ -29230,6 +29015,7 @@ local function is_cjk (c)
or c >= 0xFF00 and c <= 0xFFEF
or c >= 0x1F100 and c <= 0x1F2FF
or c >= 0x20000 and c <= 0x2FA1F
+ or c >= 0x30000 and c <= 0x323AF
or nobr_after[c] and c > 0x2014
or nobr_before[c] and c > 0x2014
end
@@ -29269,8 +29055,28 @@ local charclass = setmetatable({
}, { __index = function() return 0 end })
--
+-- get character class
+-- var : variant = plain, JP/classic, KR/modern, SC, TC
+-- c : codepoint
+--
+local function get_charclass (var, c)
+ if var < 3 then
+ return charclass[c]
+ elseif var == 3 then
+ -- SC : these are left aligned
+ return (c == 0xFF01 or c == 0xFF1F) and 4 -- FULLWIDTH EXCLAMATION/QUESTION MARK
+ or (c == 0xFF1A or c == 0xFF1B) and 2 -- FULLWIDTH COLON/SEMICOLON
+ or charclass[c]
+ end
+ -- TC : these are center aligned
+ return (c == 0x3001 or c == 0xFF0C) and 3 -- IDEOGRAPHIC/FULLWIDTH COMMA
+ or (c == 0x3002 or c == 0xFF0E) and 3 -- IDEOGRAPHIC/FULLWIDTH FULL STOP -- 5 ?
+ or charclass[c]
+end
+
+--
-- table for spacing between char classes
--- 1 stands for 0.5*fontsize when variant=classic
+-- 1 stands for 0.5*fontsize when variant = JP/classic or SC or TC
--
local intercharclass = { [0] =
{ [0] = nil, {1,1}, nil, {.5,.5} },
@@ -29302,7 +29108,7 @@ end
--
-- return 0.5*fontsize of given fontid
--- space: true if variant=modern; then 0.5*interword_space
+-- space: true if variant=KR/modern; then 0.5*interword_space
--
local function get_font_size (fid, space)
local size = font.getparameters(fid)
@@ -29316,7 +29122,7 @@ end
--
-- charclass 1 thru 4 will be packed in \hbox to 0.5em{\hss? curr \hss?}
--- when variant=classic/modern
+-- when variant ~= plain
--
local function glyph_to_box (head, curr, class)
local g, h = curr
@@ -29345,7 +29151,7 @@ end
--
-- insert spacing defined as charclass[a][b] between a and b
-- f: fontid
--- var: variant = plain, classic, modern
+-- var: variant = plain, JP/classic, KR/modern, SC, TC
-- cc: charclass of current char
-- nc: charclass of next char
-- nobr: linebreak is not allowed
@@ -29364,12 +29170,16 @@ end
--
-- insert inter-character spacing in other normal cases
--- f: fontid
--- var: variant = plain, classic, modern
--- x: true between cjk and non-cjk (a little more spacing)
+-- f: fontid
+-- var: variant = plain, JP/classic, KR/modern, SC, TC
+-- nobr: no linebreak
+-- x: true between cjk and non-cjk (a little more spacing)
--
-local function insert_penalty_glue (head, curr, f, var, x)
- if var ~= 1 then
+local function insert_penalty_glue (head, curr, f, var, nobr, x)
+ if nobr then
+ local penalty = get_new_penalty(10000)
+ head, curr = node.insert_after(head, curr, penalty)
+ elseif var == 0 or var == 2 then
local penalty = get_new_penalty(50)
head, curr = node.insert_after(head, curr, penalty)
end
@@ -29385,53 +29195,64 @@ end
--
-- main process for linebreak and inter-character spacing
--- lb: true if pre_linebreak_filter
--
-local function korean_break (head, lb)
+local function cjk_break (head)
local curr = head
while curr do
- if curr.id == glyph_id then
- local var = node.has_attribute(curr, attr_korean)
+ if attr_cjk and (curr.id == glyph_id or curr.id == math_id and curr.subtype == 1) then
+ local var = node.has_attribute(curr, attr_cjk)
if var then
- local c, f = curr.char or 0, curr.font or 0
- local cc, cjkc = charclass[c], is_cjk(c)
+ local c, f = curr.char or 0, curr.font
+ local cc, cjkc = get_charclass(var, c), is_cjk(c)
-- compress cjk punctuations when charclass is 1 thru 4
if var > 0 and cc > 0 and cc < 5 then
head, curr = glyph_to_box(head, curr, cc)
end
- local next = curr.next
- if next and next.id == glyph_id then
+ local next = node.getnext(curr)
+ while next and next.id == whatsit_id do -- skip whatsit nodes
+ curr, next = next, node.getnext(next)
+ end
+
+ if next and (next.id == glyph_id or next.id == math_id and next.subtype == 0) then
local n = next.char or 0
- local nc = charclass[n]
+ f = f or next.font or 0 -- in case of curr == math_off
+
+ -- skip combining. or dash+dash case to suppress stretching
+ if nobr_before[n] == 2 or (nobr_before[c] == 0 and nobr_before[n] == 0) then
+ goto skip_combining
+ end
+
+ local nc = get_charclass(var, n)
local nobr = nobr_before[n] or nobr_after[c]
-- insert spacing as of intercharclass
if var > 0 and intercharclass[cc][nc] then
head, curr = insert_cjk_penalty_glue(head, curr, f, var, cc, nc, nobr)
- -- or insert spacing when linebreak is allowed
- elseif not nobr then
+ else
local cjkn = is_cjk(n)
-- if curr or next is cjk char
if cjkc or cjkn then
- -- if between cjk and non-cjk
- if var > 0 and not (cjkc and cjkn) and nobr_before[c] ~= 0 then
- head, curr = insert_penalty_glue(head, curr, f, var, true)
+ -- plain variant / cjk+cjk / nobr cjk+noncjk / after dash
+ -- : insert a 0pt glue
+ if var == 0 or (cjkc and cjkn) or nobr or nobr_before[c] == 0 then
+ head, curr = insert_penalty_glue(head, curr, f, var, nobr)
- -- or under pre_linebreak_filter
- elseif lb then
- head, curr = insert_penalty_glue(head, curr, f, var)
+ -- other cases: insert a small glue
+ else
+ head, curr = insert_penalty_glue(head, curr, f, var, nobr, true)
end
end
end
end
end
end
- curr = curr.next
+ ::skip_combining::
+ curr = node.getnext(curr)
end
return head
end
@@ -29445,7 +29266,7 @@ end
local function reorder_tm (head)
local curr, tone = node.slide(head)
while curr do
- if curr.id == glyph_id and node.has_attribute(curr, attr_korean) then
+ if curr.id == glyph_id and node.has_attribute(curr, attr_cjk) then
local f = font.getfont(curr.font) or font.fonts[curr.font]
if f and f.hb then -- harfbuzz do the right thing
tone = nil
@@ -29461,7 +29282,7 @@ local function reorder_tm (head)
end
end
end
- curr = curr.prev
+ curr = node.getprev(curr)
end
return head
end
@@ -29548,7 +29369,7 @@ local function get_prev_char (p)
local pc = get_prev_char(node.slide(p.head))
if pc then return pc end
end
- p = p.prev
+ p = node.getprev(p)
end
end
@@ -29563,10 +29384,10 @@ local function auto_josa (head)
if josa then
local cc = curr.char or 0
if josa == 0 then
- josa = josa_code[get_prev_char(curr.prev) or 0x30]
+ josa = josa_code[get_prev_char(node.getprev(curr)) or 0x30]
end
if cc == 0xC774 then
- local n = curr.next
+ local n = node.getnext(curr)
if n and n.char and n.char >= 0xAC00 and n.char <= 0xD7A3 then
else
cc = 0xAC00
@@ -29585,7 +29406,7 @@ local function auto_josa (head)
node.unset_attribute(curr, attr_josa)
end
end
- curr = curr.next
+ curr = node.getnext(curr)
end
for _,v in ipairs(tofree) do node.free(v) end
return head
@@ -29596,45 +29417,86 @@ end
-- As char value of glyphs can be changed by opentype GSUB process,
-- we have to occupy the first position among callback functions.
--
-local prepend_to_callback
-if luatexbase.base_add_to_callback then
- prepend_to_callback = function(name, func, desc)
- luatexbase.add_to_callback(name, func, desc, 1)
+luatexbase.add_to_callback( "pre_shaping_filter",
+function(head)
+ if attr_josa then head = auto_josa(head) end
+ head = cjk_break(head)
+ if attr_josa then head = reorder_tm(head) end
+ return head
+end,
+"polyglossia.lang_cjk_spacing")
+
+-- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
+% \end{macrocode}
+% \iffalse
+%</polyglossia-cjk-spacing.lua>
+%<*polyglossia-french.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-french.lua}
+% \begin{macrocode}
+--
+-- polyglossia-punct.lua
+-- part of polyglossia v2.2 -- 2024/07/15
+--
+
+require('polyglossia-punct')
+
+local function set_left_space(lang, char, kern, rubber)
+ polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function set_right_space(lang, char, kern, rubber)
+ polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function activate_french_punct(thincolonspace, autospaceguillemets)
+ -- We need different language tags here to make switching of options possible
+ -- within a paragraph.
+ local lang = "french"
+ if thincolonspace then
+ lang = lang.."-thincolon"
end
-else
- prepend_to_callback = function(name, func, desc)
- local t = { {func, desc} }
- for _,v in ipairs(luatexbase.callback_descriptions(name)) do
- table.insert(t, {luatexbase.remove_from_callback(name, v)})
- end
- for _,v in ipairs(t) do
- luatexbase.add_to_callback(name, v[1], v[2])
- end
+ if autospaceguillemets then
+ lang = lang.."-autospace"
+ end
+
+ polyglossia.activate_punct(lang)
+ polyglossia.clear_spaced_characters(lang)
+
+ if thincolonspace then
+ set_left_space(lang, ':', 0.5)
+ else
+ set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
+ end
+
+ set_left_space(lang, '!', 0.5)
+ set_left_space(lang, '?', 0.5)
+ set_left_space(lang, ';', 0.5)
+ set_left_space(lang, '‼', 0.5)
+ set_left_space(lang, '⁇', 0.5)
+ set_left_space(lang, '⁈', 0.5)
+ set_left_space(lang, '⁉', 0.5)
+ set_left_space(lang, '‽', 0.5) -- U+203D (interrobang)
+
+ if autospaceguillemets then
+ set_left_space(lang, '»', 0.5)
+ set_left_space(lang, '›', 0.5)
+ set_right_space(lang, '«', 0.5)
+ set_right_space(lang, '‹', 0.5)
end
end
-prepend_to_callback ("pre_linebreak_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head, true)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
-
-prepend_to_callback ("hpack_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
+local function deactivate_french_punct()
+ polyglossia.deactivate_punct()
+end
--- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
+polyglossia.activate_french_punct = activate_french_punct
+polyglossia.deactivate_french_punct = deactivate_french_punct
% \end{macrocode}
% \iffalse
-%</polyglossia-korean.lua>
+%</polyglossia-french.lua>
%<*polyglossia-latin.lua>
% \fi
% \clearpage
@@ -29643,7 +29505,7 @@ prepend_to_callback ("hpack_filter",
% \begin{macrocode}
--
-- polyglossia-latin.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia-punct')
@@ -29698,14 +29560,13 @@ polyglossia.deactivate_latin_punct = deactivate_latin_punct
% \begin{macrocode}
--
-- polyglossia-punct.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia') -- just in case...
local add_to_callback = luatexbase.add_to_callback
-local remove_from_callback = luatexbase.remove_from_callback
-local priority_in_callback = luatexbase.priority_in_callback
+local declare_callback_rule = luatexbase.declare_callback_rule
local new_attribute = luatexbase.new_attribute
local node = node
@@ -30029,13 +29890,16 @@ local function activate(lang)
-- important to be able to intermix languages with different spacings
-- in one paragraph.
tex.setattribute(punct_attr, id)
- for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
- if not priority_in_callback(callback_name, "polyglossia-punct.process") then
- add_to_callback(callback_name, process, "polyglossia-punct.process", 1)
- end
- end
end
+add_to_callback("pre_linebreak_filter",process,"polyglossia-punct.process")
+add_to_callback("hpack_filter",process,"polyglossia-punct.process")
+declare_callback_rule("pre_linebreak_filter",
+ "polyglossia-punct.process", "before", "luaotfload.node_processor")
+declare_callback_rule("hpack_filter",
+ "polyglossia-punct.process", "before", "luaotfload.node_processor")
+
+
local function deactivate()
tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
-- Though it would make compilation slightly faster, it is not possible to
@@ -30066,7 +29930,7 @@ polyglossia.clear_spaced_characters = clear_spaced_characters
% \begin{macrocode}
--
-- polyglossia-sanskrit.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia-punct')
@@ -30116,31 +29980,29 @@ polyglossia.deactivate_sanskrit_punct = deactivate_sanskrit_punct
% \begin{macrocode}
--
-- polyglossia-tibt.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
require('polyglossia') -- just in case...
local add_to_callback = luatexbase.add_to_callback
local remove_from_callback = luatexbase.remove_from_callback
+local declare_callback_rule = luatexbase.declare_callback_rule
local priority_in_callback = luatexbase.priority_in_callback
local next, type = next, type
-
-local nodes, fonts, node = nodes, fonts, node
-
-local nodecodes = nodes.nodecodes --- <= preloaded node.types()
+local node = node
local insert_node_before = node.insert_before
local insert_node_after = node.insert_after
-local remove_node = nodes.remove
+local remove_node = node.remove
local copy_node = node.copy
local has_attribute = node.has_attribute
local end_of_math = node.end_of_math
if not end_of_math then -- luatex < .76
local traverse_nodes = node.traverse_id
- local math_code = nodecodes.math
+ local math_code = node.id('math_char')
local end_of_math = function (n)
for n in traverse_nodes(math_code, n.next) do
return n
@@ -30148,10 +30010,10 @@ if not end_of_math then -- luatex < .76
end
end
--- node types as of April 2013
-local glyph_code = nodecodes.glyph
-local penalty_code = nodecodes.penalty
-local kern_code = nodecodes.kern
+-- node types as of April 2024
+local glyph_code = node.id('glyph')
+local penalty_code = node.id('penalty')
+local kern_code = node.id('kern')
-- we make a new node, so that we can copy it later on
local penalty_node = node.new(penalty_code)
@@ -30182,7 +30044,6 @@ local function process(head)
end
end
elseif id == math_code then
- -- warning: this is a feature of luatex > 0.76
start = end_of_math(start) -- weird, can return nil .. no math end?
end
if start then
@@ -30195,15 +30056,13 @@ end
local callback_name = "pre_linebreak_filter"
local function activate()
- if not priority_in_callback (callback_name, "polyglossia-tibt.process") then
- add_to_callback(callback_name, process, "polyglossia-tibt.process", 1)
- end
+ add_to_callback(callback_name, process, "polyglossia-tibt.process")
+ declare_callback_rule(callback_name,
+ "polyglossia-tibt.process", "before", "luaotfload.node_processor")
end
local function desactivate()
- if priority_in_callback (callback_name, "polyglossia-tibt.process") then
- remove_from_callback(callback_name, "polyglossia-tibt.process")
- end
+ remove_from_callback(callback_name, "polyglossia-tibt.process")
end
polyglossia.activate_tibt_eol = activate
@@ -30219,7 +30078,7 @@ polyglossia.desactivate_tibt_eol = desactivate
% \begin{macrocode}
--
-- polyglossia.lua
--- part of polyglossia v2.1 -- 2024/03/07
+-- part of polyglossia v2.2 -- 2024/07/15
--
local module_name = "polyglossia"
@@ -30295,7 +30154,7 @@ local function newloader(langentry)
end
-- language info will be written into the .log file
- local s = { "Language data for " .. langentry }
+ local s = { }
for k, v in pairs(langdata) do
if type(v) == 'table' then -- for 'synonyms'
s[#s+1] = k .. "\t" .. table.concat(v,',')
@@ -30303,7 +30162,10 @@ local function newloader(langentry)
s[#s+1] = k .. "\t" .. tostring(v)
end
end
- log_info(table.concat(s,"\n"))
+ local a = {}
+ for _,n in pairs(s) do table.insert(a, n) end
+ table.sort(a)
+ log_info("Language data for " .. langentry .. "\n" .. table.concat(a,"\n"))
--
-- LaTeX's \newlanguage increases language register (count19),
@@ -30313,7 +30175,7 @@ local function newloader(langentry)
-- this possible situation, our newloader() function will
-- unfortunately overwrite the language \lang@xyz.
--
- -- Threfore here we will compare LaTeX's \newlanguage number with
+ -- Therefore here we will compare LaTeX's \newlanguage number with
-- LuaTeX's lang.new() id and select the bigger one for our new
-- language object. Also we will update LaTeX's language register
-- by this new id, so that another possible \newlanguage should not
@@ -30328,7 +30190,7 @@ local function newloader(langentry)
local newlangid = math.max(langcnt, langid)
-- set language register for possible \newlanguage
tex.setcount('global', lang_register, newlangid)
- -- get new lang object if needeed
+ -- get new lang object if needed
if langid ~= newlangid then
langobject = lang.new(newlangid)
end
@@ -30394,7 +30256,12 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\setmainfont{Linux Libertine O}
\defaultfontfeatures{Scale=MatchLowercase}
\setmonofont{Inconsolata}
-\newfontfamily\arabicfont[Script=Arabic]{Amiri}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}[%
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ Extension = .ttf,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic]
\newfontfamily\syriacfont[Script=Syriac]{Serto Jerusalem}
\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL}
\newfontfamily\sanskritfont[Script=Devanagari]{Sanskrit 2003}
@@ -30530,7 +30397,12 @@ Quamquam sermone nativo fungi desinit, cumque nostris diebus perpauci Latine loq
\usepackage{xltxtra,url,amsmath}
\setmainfont{Linux Libertine O}
\defaultfontfeatures{Scale=MatchLowercase}
-\newfontfamily\arabicfont[Script=Arabic]{Amiri}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}[%
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ Extension = .ttf,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic]
\newfontfamily\arabicfonttt[Script=Arabic,Scale=.75]{DejaVu Sans Mono}
\newfontfamily\farsifont[Script=Arabic,Scale=1.1,WordSpace=2]{IranNastaliq}
\let\XeTeX\undefined
@@ -30700,7 +30572,7 @@ This is today: \today
% \typeout{* To finish the installation you have to move the following}
% \typeout{* file into a directory searched by TeX:}
% \typeout{*}
-% \typeout{* \space\space all *.sty, *.lua, *.def, *.lde and *.ldf files}
+% \typeout{* \space\space\space all *.sty, *.lua, *.def and *.ldf files}
% \typeout{*}
% \typeout{* You also need to compile the *.map files with teckit_compile}
% \typeout{* and place the resulting *.tec files under}
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.pdf b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
index d218332d9b..f7b12a7bd6 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.pdf
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
Binary files differ